TWIBus patch for proper use of Wire.requestFrom
This commit is contained in:
@@ -25,7 +25,6 @@
|
||||
#if ENABLED(EXPERIMENTAL_I2CBUS)
|
||||
|
||||
#include "twibus.h"
|
||||
|
||||
#include <Wire.h>
|
||||
|
||||
TWIBus::TWIBus() {
|
||||
@@ -121,18 +120,12 @@ bool TWIBus::request(const uint8_t bytes) {
|
||||
#endif
|
||||
|
||||
// requestFrom() is a blocking function
|
||||
Wire.requestFrom(this->addr, bytes);
|
||||
|
||||
// Wait for all bytes to arrive
|
||||
millis_t t = millis() + this->timeout;
|
||||
while (Wire.available() < bytes)
|
||||
if (ELAPSED(millis(), t)) {
|
||||
#if ENABLED(DEBUG_TWIBUS)
|
||||
SERIAL_ECHO_START;
|
||||
SERIAL_ECHOLNPGM("i2c timeout");
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
if (Wire.requestFrom(this->addr, bytes) == 0) {
|
||||
#if ENABLED(DEBUG_TWIBUS)
|
||||
debug("request fail", this->addr);
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -151,6 +144,11 @@ uint8_t TWIBus::capture(char *dst, const uint8_t bytes) {
|
||||
uint8_t count = 0;
|
||||
while (count < bytes && Wire.available())
|
||||
dst[count++] = Wire.read();
|
||||
|
||||
#if ENABLED(DEBUG_TWIBUS)
|
||||
debug(PSTR("capture"), count);
|
||||
#endif
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user