@@ -158,10 +158,7 @@ uint8_t twi_readFrom(uint8_t address, uint8_t* data, uint8_t length, uint8_t sen
158
158
uint32_t startMillis = millis ();
159
159
while (TWI_READY != twi_state ){
160
160
if ((twi_timeout_ms > 0 ) && (millis () - startMillis > twi_timeout_ms )) {
161
- //timeout
162
- twi_disable ();
163
- twi_init ();
164
-
161
+ twi_handleTimeout ();
165
162
return 0 ;
166
163
}
167
164
continue ;
@@ -205,10 +202,7 @@ uint8_t twi_readFrom(uint8_t address, uint8_t* data, uint8_t length, uint8_t sen
205
202
startMillis = millis ();
206
203
while (TWI_MRX == twi_state ){
207
204
if ((twi_timeout_ms > 0 ) && (millis () - startMillis > twi_timeout_ms )) {
208
- //timeout
209
- twi_disable ();
210
- twi_init ();
211
-
205
+ twi_handleTimeout ();
212
206
return 0 ;
213
207
}
214
208
continue ;
@@ -253,10 +247,7 @@ uint8_t twi_writeTo(uint8_t address, uint8_t* data, uint8_t length, uint8_t wait
253
247
uint32_t startMillis = millis ();
254
248
while (TWI_READY != twi_state ){
255
249
if ((twi_timeout_ms > 0 ) && (millis () - startMillis > twi_timeout_ms )) {
256
- //timeout
257
- twi_disable ();
258
- twi_init ();
259
-
250
+ twi_handleTimeout ();
260
251
return 4 ;
261
252
}
262
253
continue ;
@@ -303,10 +294,7 @@ uint8_t twi_writeTo(uint8_t address, uint8_t* data, uint8_t length, uint8_t wait
303
294
startMillis = millis ();
304
295
while (wait && (TWI_MTX == twi_state )){
305
296
if ((twi_timeout_ms > 0 ) && (millis () - startMillis > twi_timeout_ms )) {
306
- //timeout
307
- twi_disable ();
308
- twi_init ();
309
-
297
+ twi_handleTimeout ();
310
298
return 4 ;
311
299
}
312
300
continue ;
@@ -410,10 +398,7 @@ void twi_stop(void)
410
398
while (TWCR & _BV (TWSTO )){
411
399
counter ++ ;
412
400
if ((twi_timeout_ms > 0 ) && (counter >= 25000 )) {
413
- // timeout
414
- twi_disable ();
415
- twi_init ();
416
-
401
+ twi_handleTimeout ();
417
402
return ;
418
403
}
419
404
@@ -439,9 +424,27 @@ void twi_releaseBus(void)
439
424
twi_state = TWI_READY ;
440
425
}
441
426
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
+ */
442
433
void twi_setTimeoutInMillis (uint8_t timeout )
443
434
{
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 ();
445
448
}
446
449
447
450
ISR (TWI_vect )
0 commit comments