Skip to content

Commit a7a4dce

Browse files
authored
Merge pull request #85 from ohunter/impl_no_start
Fulfillment of the I2c trait contract
2 parents bd5f200 + 1f39149 commit a7a4dce

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

Diff for: src/linux.rs

+12
Original file line numberDiff line numberDiff line change
@@ -300,8 +300,20 @@ impl<'a> I2CTransfer<'a> for LinuxI2CDevice {
300300

301301
/// Issue the provided sequence of I2C transactions
302302
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;
303305
for msg in messages.iter_mut() {
304306
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+
}
305317
}
306318
ffi::i2c_rdwr(self.as_raw_fd(), messages).map_err(From::from)
307319
}

0 commit comments

Comments
 (0)