int I2C::i2c_write8(int addr, uint8_t reg) { int res = i2c_set_slave_address(addr); if (res) return res; return i2c_write(®, sizeof(reg)); }
int I2C::i2c_write16(int addr, uint8_t reg, uint8_t value) { uint8_t data[2] = { reg, value }; int res = i2c_set_slave_address(addr); if (res) return res; return i2c_write(data, sizeof(data)); }
/* * Return a file handle if successful. * Return a value less then zero on failure. */ int i2c_start_transaction(uint8_t slave_address) { int fh, result; fh = i2c_open_device(); if (fh < 0) return -1; result = i2c_set_slave_address(fh, slave_address); if (result < 0) { close(fh); return result; } return fh; }
int I2C::i2c_read8(int addr, uint8_t reg, uint8_t *value) { int res = i2c_set_slave_address(addr); if (res) return res; res = i2c_write(®, sizeof(reg)); if (res) return res; int len = 0; res = i2c_read(value, sizeof(*value), len); if (res) return res; if (len != sizeof(*value)) return EFAULT; return 0; }
int I2C::i2c_read16(int addr, uint8_t reg, uint16_t *value) { uint8_t data[2] = { reg, 0 }; int res = 0; res = i2c_set_slave_address(addr); if (res) return res; res = i2c_write(data, 1); if (res) return res; int len = 0; res = i2c_read(data, sizeof(data), len); if (res) return res; if (len != sizeof(data)) return EFAULT; *value = (data[0] << 8) | data[1]; return 0; }