|
|
|
@ -308,6 +308,47 @@ uint8_t I2CDriver::readRegister(uint8_t addr, uint8_t reg, uint8_t* data)
@@ -308,6 +308,47 @@ uint8_t I2CDriver::readRegister(uint8_t addr, uint8_t reg, uint8_t* data)
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
main transfer function |
|
|
|
|
*/ |
|
|
|
|
bool I2CDriver::do_transfer(uint8_t addr, const uint8_t *send, |
|
|
|
|
uint32_t send_len, uint8_t *recv, |
|
|
|
|
uint32_t recv_len) |
|
|
|
|
{ |
|
|
|
|
struct i2c_msg i2cmsg[2] = { |
|
|
|
|
{ |
|
|
|
|
addr : addr, |
|
|
|
|
flags : 0, |
|
|
|
|
len : (typeof(i2cmsg->len))send_len, |
|
|
|
|
buf : (typeof(i2cmsg->buf))send |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
addr : addr, |
|
|
|
|
flags : I2C_M_RD, |
|
|
|
|
len : (typeof(i2cmsg->len))recv_len, |
|
|
|
|
buf : (typeof(i2cmsg->buf))recv, |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
struct i2c_rdwr_ioctl_data msg_rdwr; |
|
|
|
|
|
|
|
|
|
if (send_len == 0 && recv_len) { |
|
|
|
|
msg_rdwr.msgs = &i2cmsg[1]; |
|
|
|
|
msg_rdwr.nmsgs = 1; |
|
|
|
|
} |
|
|
|
|
else if (send_len && recv_len == 0) { |
|
|
|
|
msg_rdwr.msgs = &i2cmsg[0]; |
|
|
|
|
msg_rdwr.nmsgs = 1; |
|
|
|
|
} |
|
|
|
|
else if (send_len && recv_len) { |
|
|
|
|
msg_rdwr.msgs = &i2cmsg[0]; |
|
|
|
|
msg_rdwr.nmsgs = 2; |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
return ioctl(_fd, I2C_RDWR, &msg_rdwr) == (int)msg_rdwr.nmsgs; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
uint8_t I2CDriver::lockup_count() |
|
|
|
|
{ |
|
|
|
|
return 0; |
|
|
|
|