File tree Expand file tree Collapse file tree 1 file changed +12
-0
lines changed Expand file tree Collapse file tree 1 file changed +12
-0
lines changed Original file line number Diff line number Diff line change @@ -300,8 +300,20 @@ impl<'a> I2CTransfer<'a> for LinuxI2CDevice {
300
300
301
301
/// Issue the provided sequence of I2C transactions
302
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 ;
303
305
for msg in messages. iter_mut ( ) {
304
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
+ }
305
317
}
306
318
ffi:: i2c_rdwr ( self . as_raw_fd ( ) , messages) . map_err ( From :: from)
307
319
}
You can’t perform that action at this time.
0 commit comments