diff --git a/api/mraa/i2c.h b/api/mraa/i2c.h index 34c7395..c50d224 100644 --- a/api/mraa/i2c.h +++ b/api/mraa/i2c.h @@ -95,6 +95,15 @@ int mraa_i2c_read(mraa_i2c_context dev, uint8_t *data, int length); */ uint8_t mraa_i2c_read_byte(mraa_i2c_context dev); +/** + * Read a single byte from i2c context, from designated register + * + * @param dev The i2c context + * @param command The register + * @return The result of the read or -1 if failed + */ +uint8_t mraa_i2c_read_byte_data(mraa_i2c_context dev, uint8_t command); + /** * Write to an i2c context * diff --git a/api/mraa/i2c.hpp b/api/mraa/i2c.hpp index 2adfd89..149b459 100644 --- a/api/mraa/i2c.hpp +++ b/api/mraa/i2c.hpp @@ -143,6 +143,18 @@ class I2c { return mraa_i2c_write(m_i2c, buf, 2); } + /** + * Read an i2c register + * + * @param reg Register to read from + + * @return char read from the bus + * @return char read from register + */ + int readReg(char reg) { + return mraa_i2c_read_byte_data(m_i2c, reg); + } + /** * Write multiple bytes to the bus * diff --git a/src/i2c/i2c.c b/src/i2c/i2c.c index 7be4a0b..7fc0813 100644 --- a/src/i2c/i2c.c +++ b/src/i2c/i2c.c @@ -101,6 +101,13 @@ mraa_i2c_read_byte(mraa_i2c_context dev) return byte; } +uint8_t +mraa_i2c_read_byte_data(mraa_i2c_context dev, uint8_t command) +{ + uint8_t byte = i2c_smbus_read_byte_data(dev->fh, command); + return byte; +} + mraa_result_t mraa_i2c_write(mraa_i2c_context dev, const uint8_t* data, int length) {