I've used this https://github.com/BoschSensortec/BMP280_driver/tree/master/examples and implemented the i2c functions like this
int8_t i2c_reg_write(uint8_t i2c_addr, uint8_t reg_addr, uint8_t *reg_data, uint16_t length)
{
int fd;
std::cout << "write";
fd = open("/dev/i2c-1", O_RDWR);
std::cout << "fd " << fd;
if((ioctl(fd, I2C_SLAVE, i2c_addr)) < 0)
{
std::cout << "kek1";
}
int rres = write(fd, reg_data, length);
if(rres != length)
{
std::cout << " failed to write\n";
}
close(fd);
return 0;
}
int8_t i2c_reg_read(uint8_t i2c_addr, uint8_t reg_addr, uint8_t *reg_data, uint16_t length)
{
int fd;
//std::cout << "read";
fd = open("/dev/i2c-1", I2C_RDWR);
//std::cout << "fd " << fd;
int rres = ioctl(fd, I2C_SLAVE, i2c_addr);
if(rres < 0)
{
std::cout << "rkek1 "<< rres << ' ';
}
std::cout << "trying to read " << length << "bytes\n";
for(int i = 0; i < length ; i++)
{
__s32 status = i2c_smbus_read_byte_data(fd, reg_addr);
if( status < 0)
{
std::cout << "failed " << status << '\n';
}
reg_data[i] = status;
}
close(fd);
/* Implement the I2C read routine according to the target machine. */
return 0;
}
And after i compile temperatures.c and run the program i alway gen the same values 444102, 4671, 46.711974 and i have no i dea why
I compiled my program on a raspberry pi zero w with this command "g++ temperatures.c bmp280.c -li2c"