We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
2 parents bd5f200 + 1f39149 commit a7a4dceCopy full SHA for a7a4dce
src/linux.rs
@@ -300,8 +300,20 @@ impl<'a> I2CTransfer<'a> for LinuxI2CDevice {
300
301
/// Issue the provided sequence of I2C transactions
302
fn transfer(&mut self, messages: &'a mut [Self::Message]) -> Result<u32, LinuxI2CError> {
303
+ let msg_type = |flag: u16| flag & I2CMessageFlags::READ.bits();
304
+ let mut prev_msg_type = None;
305
for msg in messages.iter_mut() {
306
msg.addr = self.slave_address;
307
+
308
+ let cur_msg_type = msg_type(msg.flags);
309
+ if prev_msg_type
310
+ .map(|prev| prev == cur_msg_type)
311
+ .unwrap_or_default()
312
+ {
313
+ msg.flags |= I2CMessageFlags::NO_START.bits();
314
+ } else {
315
+ prev_msg_type = Some(cur_msg_type);
316
+ }
317
}
318
ffi::i2c_rdwr(self.as_raw_fd(), messages).map_err(From::from)
319
0 commit comments