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