int I2C::readByte()

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];
    }