Skip to content

Commit 4f907bc

Browse files
committed
move timout handling into its own function
1 parent 24037cc commit 4f907bc

File tree

2 files changed

+25
-21
lines changed

2 files changed

+25
-21
lines changed

libraries/Wire/src/utility/twi.c

+24-21
Original file line numberDiff line numberDiff line change
@@ -158,10 +158,7 @@ uint8_t twi_readFrom(uint8_t address, uint8_t* data, uint8_t length, uint8_t sen
158158
uint32_t startMillis = millis();
159159
while(TWI_READY != twi_state){
160160
if((twi_timeout_ms > 0) && (millis() - startMillis > twi_timeout_ms)) {
161-
//timeout
162-
twi_disable();
163-
twi_init();
164-
161+
twi_handleTimeout();
165162
return 0;
166163
}
167164
continue;
@@ -205,10 +202,7 @@ uint8_t twi_readFrom(uint8_t address, uint8_t* data, uint8_t length, uint8_t sen
205202
startMillis = millis();
206203
while(TWI_MRX == twi_state){
207204
if((twi_timeout_ms > 0) && (millis() - startMillis > twi_timeout_ms)) {
208-
//timeout
209-
twi_disable();
210-
twi_init();
211-
205+
twi_handleTimeout();
212206
return 0;
213207
}
214208
continue;
@@ -253,10 +247,7 @@ uint8_t twi_writeTo(uint8_t address, uint8_t* data, uint8_t length, uint8_t wait
253247
uint32_t startMillis = millis();
254248
while(TWI_READY != twi_state){
255249
if((twi_timeout_ms > 0) && (millis() - startMillis > twi_timeout_ms)) {
256-
//timeout
257-
twi_disable();
258-
twi_init();
259-
250+
twi_handleTimeout();
260251
return 4;
261252
}
262253
continue;
@@ -303,10 +294,7 @@ uint8_t twi_writeTo(uint8_t address, uint8_t* data, uint8_t length, uint8_t wait
303294
startMillis = millis();
304295
while(wait && (TWI_MTX == twi_state)){
305296
if((twi_timeout_ms > 0) && (millis() - startMillis > twi_timeout_ms)) {
306-
//timeout
307-
twi_disable();
308-
twi_init();
309-
297+
twi_handleTimeout();
310298
return 4;
311299
}
312300
continue;
@@ -410,10 +398,7 @@ void twi_stop(void)
410398
while(TWCR & _BV(TWSTO)){
411399
counter++;
412400
if((twi_timeout_ms > 0) && (counter >= 25000)) {
413-
// timeout
414-
twi_disable();
415-
twi_init();
416-
401+
twi_handleTimeout();
417402
return;
418403
}
419404

@@ -439,9 +424,27 @@ void twi_releaseBus(void)
439424
twi_state = TWI_READY;
440425
}
441426

427+
/*
428+
* Function twi_setTimeoutInMillis
429+
* Desc set a global timeout for while loops that we might get stuck in
430+
* Input timeout value in milliseconds
431+
* Output none
432+
*/
442433
void twi_setTimeoutInMillis(uint8_t timeout)
443434
{
444-
twi_timeout_ms = timeout;
435+
twi_timeout_ms = timeout;
436+
}
437+
438+
/*
439+
* Function twi_handleTimeout
440+
* Desc do this stuff when a while loop here has run for longer than twi_timeout_ms milliseconds
441+
* Input none
442+
* Output none
443+
*/
444+
void twi_handleTimeout(void)
445+
{
446+
twi_disable();
447+
twi_init();
445448
}
446449

447450
ISR(TWI_vect)

libraries/Wire/src/utility/twi.h

+1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
void twi_stop(void);
5252
void twi_releaseBus(void);
5353
void twi_setTimeoutInMillis(uint8_t);
54+
void twi_handleTimeout(void);
5455

5556
#endif
5657

0 commit comments

Comments
 (0)