4#include <linux/i2c-dev.h>
27 : fd_(open(device.c_str(), O_RDWR)), addr_(addr) {
28 assert(!device.empty());
31 std::perror(
"Failed to open I2C device");
34 if (ioctl(fd_, I2C_SLAVE, addr_) < 0) {
36 std::perror(
"Failed to configure I2C address");
54 if (write(fd_, ®, 1) != 1) {
55 std::perror(
"I2C write (set register) failed");
59 if (read(fd_, &value, 1) != 1) {
60 std::perror(
"I2C read failed");
73 uint8_t buf[2] = {reg, value};
74 if (write(fd_, buf, 2) != 2) {
75 std::perror(
"I2C write failed");
89 if (write(fd_, ®, 1) != 1) {
90 std::perror(
"I2C write (set start register) failed");
93 if (read(fd_, buffer, length) !=
static_cast<ssize_t
>(length)) {
94 std::perror(
"I2C multi-byte read failed");
104 void WriteRaw(
const uint8_t* data,
size_t length) {
107 if (write(fd_, data, length) !=
static_cast<ssize_t
>(length)) {
108 std::perror(
"I2C raw write failed");
115 int Fd()
const {
return fd_; }
uint8_t ReadRegister(uint8_t reg)
I2cDevice(const std::string &device, uint8_t addr)
void WriteRaw(const uint8_t *data, size_t length)
void ReadRegisters(uint8_t reg, uint8_t *buffer, size_t length)
void WriteRegister(uint8_t reg, uint8_t value)