@@ -491,9 +491,8 @@ int ECC508Class::sendCommand(uint8_t opcode, uint8_t param1, uint16_t param2, co
491
491
uint16_t crc = crc16 (&command[1 ], 8 - 3 + dataLength);
492
492
memcpy (&command[6 + dataLength], &crc, sizeof (crc));
493
493
494
- // begin transmission with external buffer which is pre-populated with data
495
- _wire->beginTransmission (_address, command, commandLength, commandLength);
496
-
494
+ _wire->beginTransmission (_address);
495
+ _wire->write (command, commandLength);
497
496
if (_wire->endTransmission () != 0 ) {
498
497
return 0 ;
499
498
}
@@ -507,13 +506,19 @@ int ECC508Class::receiveResponse(void* response, size_t length)
507
506
int responseSize = length + 3 ; // 1 for length header, 2 for CRC
508
507
byte responseBuffer[responseSize];
509
508
510
- while (_wire->requestFrom (_address, responseBuffer, responseSize) != responseSize && retries--);
509
+ while (_wire->requestFrom (_address, responseSize) != responseSize && retries--);
510
+
511
+ responseBuffer[0 ] = _wire->read ();
511
512
512
513
// make sure length matches
513
514
if (responseBuffer[0 ] != responseSize) {
514
515
return 0 ;
515
516
}
516
517
518
+ for (size_t i = 1 ; _wire->available (); i++) {
519
+ responseBuffer[i] = _wire->read ();
520
+ }
521
+
517
522
// verify CRC
518
523
uint16_t responseCrc = responseBuffer[length + 1 ] | (responseBuffer[length + 2 ] << 8 );
519
524
if (responseCrc != crc16 (responseBuffer, responseSize - 2 )) {
0 commit comments