TWIBus patch for proper use of Wire.requestFrom

This commit is contained in:
Scott Lahteine
2016-08-27 19:00:45 -05:00
parent 8e9ac72191
commit 2b226bc5c2
2 changed files with 14 additions and 24 deletions

View File

@@ -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;
}