diff --git a/Adafruit_I2CRegister.cpp b/Adafruit_I2CRegister.cpp index 04d987a..27840ff 100644 --- a/Adafruit_I2CRegister.cpp +++ b/Adafruit_I2CRegister.cpp @@ -36,6 +36,27 @@ bool Adafruit_I2CRegister::write(uint32_t value, uint8_t numbytes=0) { return write(_buffer, numbytes); } +// This does not do any error checking! returns 0xFFFFFFFF on failure +uint32_t Adafruit_I2CRegister::read(void) { + if (! read(_buffer, _width)) { + return -1; + } + + uint32_t value = 0; + + for (int i=0; i < _width; i++) { + value <<= 8; + if (_bitorder == MSBFIRST) { + value |= _buffer[_width-i-1]; + } else { + value |= _buffer[i]; + } + } + + return value; +} + + bool Adafruit_I2CRegister::read(uint8_t *buffer, uint8_t len) { _buffer[0] = _address; if (! _device->write_then_read(_buffer, 1, buffer, len)) { diff --git a/Adafruit_I2CRegister.h b/Adafruit_I2CRegister.h index 6f51a27..ddbe107 100644 --- a/Adafruit_I2CRegister.h +++ b/Adafruit_I2CRegister.h @@ -16,6 +16,7 @@ class Adafruit_I2CRegister { bool read(uint8_t *value); bool read(uint16_t *value); bool read(uint32_t *value); + uint32_t read(void); bool write(uint8_t *buffer, uint8_t len); bool write(uint32_t value, uint8_t numbytes=0); diff --git a/examples/i2c_registers/i2c_registers.ino b/examples/i2c_registers/i2c_registers.ino index a1b1bfd..7ebe022 100644 --- a/examples/i2c_registers/i2c_registers.ino +++ b/examples/i2c_registers/i2c_registers.ino @@ -30,8 +30,7 @@ void setup() { thresh_reg.write(~thresh); - thresh_reg.read(&thresh); - Serial.print("Post threshold register = 0x"); Serial.println(thresh, HEX); + Serial.print("Post threshold register = 0x"); Serial.println(thresh_reg.read(), HEX); } void loop() {