Я хочу получать данные из i2 c зарегистрироваться несколько раз. Вот последовательность:
int i2c_read(u8 slave_addr, u8 *result, u8 *result1) {
struct i2c_msg msgs[4];
struct i2c_rdwr_ioctl_data msgset[1];
static char adres1[1] = {FIFO_DATA_OUT_L};
msgs[0].addr = slave_addr;
msgs[0].flags = 0;
msgs[0].len = 1;
msgs[0].buf = adres1;
msgs[1].addr = slave_addr;
msgs[1].flags = I2C_M_RD | I2C_M_NOSTART;
msgs[1].len = 1;
msgs[1].buf = result;
msgs[2].addr = slave_addr;
msgs[2].flags = 0;
msgs[2].len = 1;
msgs[2].buf = adres1;
msgs[3].addr = slave_addr;
msgs[3].flags = I2C_M_RD | I2C_M_NOSTART;
msgs[3].len = 1;
msgs[3].buf = result1;
msgset[0].msgs = msgs;
msgset[0].nmsgs = 4;
if (ioctl(fd, I2C_RDWR, &msgset) < 0) {
perror("ioctl(I2C_RDWR) in i2c_read");
return -1;
}
return 0;
}
Проблема в том, что он правильно читает данные в первый раз (result
), а затем выдает 0 (result1
). Мне интересно, как сделать комбинацию I2C_RDWR
с более чем 2 сообщениями внутри.