in i2c_pkg/src/i2c.cpp [39:72]
int I2C::readByte(uint8_t address) const {
char i2cPath[MAX_BUF];
snprintf(i2cPath, sizeof(i2cPath), "/dev/i2c-%d", i2cBus_);
int fd = open(i2cPath, O_RDWR);
if (fd < 0) {
RCLCPP_ERROR(logger_, "Couldn't open I2C Bus %d", i2cBus_);
return -1;
}
if (ioctl(fd, I2C_SLAVE, i2cAddr_) < 0) {
RCLCPP_ERROR(logger_, "I2C slave %d failed", i2cAddr_);
close(fd);
return -1;
}
uint8_t buff[BYTE_BUFF_SIZE];
buff[0] = address;
if (write(fd, buff, BYTE_BUFF_SIZE) != BYTE_BUFF_SIZE) {
RCLCPP_ERROR(logger_, "I2C slave 0x%x failed to go to register 0x%x", i2cAddr_, address);
close(fd);
return -1;
}
memset(buff, 0, sizeof(buff));
if (read(fd, buff, BYTE_BUFF_SIZE) != BYTE_BUFF_SIZE) {
RCLCPP_ERROR(logger_, "Could not read from I2C slave 0x%x, register 0x%x", i2cAddr_, address);
close(fd);
return -1;
}
close(fd);
return buff[0];
}