adafruit/Adafruit-PWM-Servo-Driver-Library

read8 error handling

Opened this issue · 0 comments

Board: ESP32 (AZ-Delivery Devkit v4)
IDE: VSCode/PlatformIO

The read8 function does not check for errors when calling write_then_read:

uint8_t Adafruit_PWMServoDriver::read8(uint8_t addr) {
uint8_t buffer[1] = {addr};
i2c_dev->write_then_read(buffer, 1, buffer, 1);
return buffer[0];
}

If write_then_read returns false, then read8 may return an incorrect value. In my case it was just returning 0xFE (PCA9685_PRESCALE) as that was the address that was failing to read. This is problematic since 0xFE is a valid return value (and similarly for other addresses, they may also be valid return values) so errors cannot be distinguished.

It would be better if it could at least detect this error and indicate an error in some manner. read8 is private so could be changed without changing the interface.