Skip to content

Commit 73158f9

Browse files
committed
arduino#1476 Extend API by adding a possibility to set a global timeout in milliseconds.
1 parent 0175a4e commit 73158f9

File tree

4 files changed

+13
-0
lines changed

4 files changed

+13
-0
lines changed

hardware/arduino/avr/libraries/Wire/src/Wire.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@ void TwoWire::setClock(uint32_t clock)
8585
twi_setFrequency(clock);
8686
}
8787

88+
void TwoWire::setTimeoutInMillis(uint8_t timeout)
89+
{
90+
twi_setTimeoutInMillis(timeout);
91+
}
92+
8893
uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint32_t iaddress, uint8_t isize, uint8_t sendStop)
8994
{
9095
if (isize > 0) {

hardware/arduino/avr/libraries/Wire/src/Wire.h

+1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class TwoWire : public Stream
5454
void begin(int);
5555
void end();
5656
void setClock(uint32_t);
57+
void setTimeoutInMillis(uint8_t);
5758
void beginTransmission(uint8_t);
5859
void beginTransmission(int);
5960
uint8_t endTransmission(void);

hardware/arduino/avr/libraries/Wire/src/utility/twi.c

+6
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ static volatile uint8_t twi_state;
4242
static volatile uint8_t twi_slarw;
4343
static volatile uint8_t twi_sendStop; // should the transaction end with a stop
4444
static volatile uint8_t twi_inRepStart; // in the middle of a repeated start
45+
static volatile uint8_t twi_timeout_ms = 0;
4546

4647
static void (*twi_onSlaveTransmit)(void);
4748
static void (*twi_onSlaveReceive)(uint8_t*, int);
@@ -396,6 +397,11 @@ void twi_releaseBus(void)
396397
twi_state = TWI_READY;
397398
}
398399

400+
void twi_setTimeoutInMillis(uint8_t timeout)
401+
{
402+
twi_timeout_ms = timeout;
403+
}
404+
399405
ISR(TWI_vect)
400406
{
401407
switch(TW_STATUS){

hardware/arduino/avr/libraries/Wire/src/utility/twi.h

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
void twi_reply(uint8_t);
5151
void twi_stop(void);
5252
void twi_releaseBus(void);
53+
void twi_setTimeoutInMillis(uint8_t);
5354

5455
#endif
5556

0 commit comments

Comments
 (0)