diff --git a/libraries/Wire/Wire.cpp b/libraries/Wire/Wire.cpp index 1cb6aa7f3..cc9f2df17 100644 --- a/libraries/Wire/Wire.cpp +++ b/libraries/Wire/Wire.cpp @@ -465,7 +465,7 @@ void TwoWire::end(void) { /* -------------------------------------------------------------------------- */ -uint8_t TwoWire::read_from(uint8_t address, uint8_t* data, uint8_t length, unsigned int timeout_ms, bool sendStop) { +uint8_t TwoWire::read_from(uint8_t address, uint8_t* data, uint8_t length, unsigned int timeout_us, bool sendStop) { /* -------------------------------------------------------------------------- */ /* ??? does this function make sense only for MASTER ???? */ @@ -480,8 +480,8 @@ uint8_t TwoWire::read_from(uint8_t address, uint8_t* data, uint8_t length, unsig err = m_read(&m_i2c_ctrl,data,length,!sendStop); } } - uint32_t const start = millis(); - while(((millis() - start) < timeout_ms) && bus_status == WIRE_STATUS_UNSET && err == FSP_SUCCESS) { + uint32_t const start = micros(); + while(((micros() - start) < timeout_us) && bus_status == WIRE_STATUS_UNSET && err == FSP_SUCCESS) { } } @@ -494,7 +494,7 @@ uint8_t TwoWire::read_from(uint8_t address, uint8_t* data, uint8_t length, unsig } /* -------------------------------------------------------------------------- */ -uint8_t TwoWire::write_to(uint8_t address, uint8_t* data, uint8_t length, unsigned int timeout_ms, bool sendStop) { +uint8_t TwoWire::write_to(uint8_t address, uint8_t* data, uint8_t length, unsigned int timeout_us, bool sendStop) { /* -------------------------------------------------------------------------- */ uint8_t rv = END_TX_OK; fsp_err_t err = FSP_ERR_ASSERTION; @@ -508,8 +508,8 @@ uint8_t TwoWire::write_to(uint8_t address, uint8_t* data, uint8_t length, unsign err = m_write(&m_i2c_ctrl,data,length,!sendStop); } } - uint32_t const start = millis(); - while(((millis() - start) < timeout_ms) && bus_status == WIRE_STATUS_UNSET && err == FSP_SUCCESS) { + uint32_t const start = micros(); + while(((micros() - start) < timeout_us) && bus_status == WIRE_STATUS_UNSET && err == FSP_SUCCESS) { } @@ -835,7 +835,12 @@ void TwoWire::flush(void) { while(bus_status != WIRE_STATUS_TX_COMPLETED && bus_status != WIRE_STATUS_TRANSACTION_ABORTED) {} } - +/* -------------------------------------------------------------------------- */ +void TwoWire::setWireTimeout(unsigned int t, bool reset_on_timeout) { +/* -------------------------------------------------------------------------- */ + (void)reset_on_timeout; + timeout = t; +} #if WIRE_HOWMANY > 0 diff --git a/libraries/Wire/Wire.h b/libraries/Wire/Wire.h index 88ff8d652..4d59c147d 100644 --- a/libraries/Wire/Wire.h +++ b/libraries/Wire/Wire.h @@ -124,6 +124,9 @@ class TwoWire : public arduino::HardwareI2C { void onRequest( void (*)(void) ); void setBusStatus(WireStatus_t); + /* set timeout in us for I2C communication (default is 1000 us) + the second parameter has been added for compatibility but it has no effect*/ + void setWireTimeout(unsigned int t = 25000, bool reset_on_timeout = false); inline size_t write(unsigned long n) { return write((uint8_t)n); } inline size_t write(long n) { return write((uint8_t)n); }