Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Fix management of unexpected sized I2C replies
  • Loading branch information
nahuel committed Dec 8, 2013
commit 27f7e4276974a6a5c74008490f23ba5960f2e91e
30 changes: 14 additions & 16 deletions examples/StandardFirmata/StandardFirmata.ino
Original file line number Diff line number Diff line change
Expand Up @@ -111,23 +111,21 @@ void readAndReportData(byte address, int theRegister, byte numBytes) {
Wire.requestFrom(address, numBytes); // all bytes are returned in requestFrom

// check to be sure correct number of bytes were returned by slave
if(numBytes == Wire.available()) {
i2cRxData[0] = address;
i2cRxData[1] = theRegister;
for (int i = 0; i < numBytes; i++) {
#if ARDUINO >= 100
i2cRxData[2 + i] = Wire.read();
#else
i2cRxData[2 + i] = Wire.receive();
#endif
}
if(numBytes < Wire.available()) {
Firmata.sendString("I2C Read Error: Too many bytes received");
} else if(numBytes > Wire.available()) {
Firmata.sendString("I2C Read Error: Too few bytes received");
}
else {
if(numBytes > Wire.available()) {
Firmata.sendString("I2C: Too many bytes received");
} else {
Firmata.sendString("I2C: Too few bytes received");
}

i2cRxData[0] = address;
i2cRxData[1] = theRegister;

for (int i = 0; i < numBytes && Wire.available(); i++) {
#if ARDUINO >= 100
i2cRxData[2 + i] = Wire.read();
#else
i2cRxData[2 + i] = Wire.receive();
#endif
}

// send slave address, register and received bytes
Expand Down