@@ -13,7 +13,7 @@ use embedded_hal::i2c::NoAcknowledgeSource;
1313pub struct I2cdev {
1414 inner : i2cdev:: linux:: LinuxI2CDevice ,
1515 path : PathBuf ,
16- address : Option < u8 > ,
16+ address : Option < u16 > ,
1717}
1818
1919impl I2cdev {
@@ -32,9 +32,9 @@ impl I2cdev {
3232 Ok ( dev)
3333 }
3434
35- fn set_address ( & mut self , address : u8 ) -> Result < ( ) , i2cdev:: linux:: LinuxI2CError > {
35+ fn set_address ( & mut self , address : u16 ) -> Result < ( ) , i2cdev:: linux:: LinuxI2CError > {
3636 if self . address != Some ( address) {
37- self . inner = i2cdev:: linux:: LinuxI2CDevice :: new ( & self . path , u16 :: from ( address) ) ?;
37+ self . inner = i2cdev:: linux:: LinuxI2CDevice :: new ( & self . path , address) ?;
3838 self . address = Some ( address) ;
3939 }
4040 Ok ( ( ) )
@@ -58,65 +58,17 @@ impl ops::DerefMut for I2cdev {
5858mod embedded_hal_impl {
5959 use super :: * ;
6060 use embedded_hal:: i2c:: ErrorType ;
61- use embedded_hal:: i2c:: { I2c , Operation as I2cOperation } ;
62- use i2cdev:: core:: { I2CDevice , I2CMessage , I2CTransfer } ;
61+ use embedded_hal:: i2c:: { I2c , Operation as I2cOperation , SevenBitAddress , TenBitAddress } ;
62+ use i2cdev:: core:: { I2CMessage , I2CTransfer } ;
6363 use i2cdev:: linux:: LinuxI2CMessage ;
6464 impl ErrorType for I2cdev {
6565 type Error = I2CError ;
6666 }
6767
68- impl I2c for I2cdev {
69- fn read ( & mut self , address : u8 , buffer : & mut [ u8 ] ) -> Result < ( ) , Self :: Error > {
70- self . set_address ( address) ?;
71- self . inner . read ( buffer) . map_err ( |err| I2CError { err } )
72- }
73-
74- fn write ( & mut self , address : u8 , bytes : & [ u8 ] ) -> Result < ( ) , Self :: Error > {
75- self . set_address ( address) ?;
76- self . inner . write ( bytes) . map_err ( |err| I2CError { err } )
77- }
78-
79- fn write_iter < B > ( & mut self , address : u8 , bytes : B ) -> Result < ( ) , Self :: Error >
80- where
81- B : IntoIterator < Item = u8 > ,
82- {
83- let bytes: Vec < _ > = bytes. into_iter ( ) . collect ( ) ;
84- self . write ( address, & bytes)
85- }
86-
87- fn write_read (
88- & mut self ,
89- address : u8 ,
90- bytes : & [ u8 ] ,
91- buffer : & mut [ u8 ] ,
92- ) -> Result < ( ) , Self :: Error > {
93- self . set_address ( address) ?;
94- let mut messages = [ LinuxI2CMessage :: write ( bytes) , LinuxI2CMessage :: read ( buffer) ] ;
95- self . inner
96- . transfer ( & mut messages)
97- . map ( drop)
98- . map_err ( |err| I2CError { err } )
99- }
100-
101- fn write_iter_read < B > (
102- & mut self ,
103- address : u8 ,
104- bytes : B ,
105- buffer : & mut [ u8 ] ,
106- ) -> Result < ( ) , Self :: Error >
107- where
108- B : IntoIterator < Item = u8 > ,
109- {
110- let bytes: Vec < _ > = bytes. into_iter ( ) . collect ( ) ;
111- self . transaction (
112- address,
113- & mut [ I2cOperation :: Write ( & bytes) , I2cOperation :: Read ( buffer) ] ,
114- )
115- }
116-
68+ impl I2c < TenBitAddress > for I2cdev {
11769 fn transaction (
11870 & mut self ,
119- address : u8 ,
71+ address : u16 ,
12072 operations : & mut [ I2cOperation ] ,
12173 ) -> Result < ( ) , Self :: Error > {
12274 // Map operations from generic to linux objects
@@ -135,13 +87,15 @@ mod embedded_hal_impl {
13587 . map ( drop)
13688 . map_err ( |err| I2CError { err } )
13789 }
90+ }
13891
139- fn transaction_iter < ' a , O > ( & mut self , address : u8 , operations : O ) -> Result < ( ) , Self :: Error >
140- where
141- O : IntoIterator < Item = I2cOperation < ' a > > ,
142- {
143- let mut ops: Vec < _ > = operations. into_iter ( ) . collect ( ) ;
144- self . transaction ( address, & mut ops)
92+ impl I2c < SevenBitAddress > for I2cdev {
93+ fn transaction (
94+ & mut self ,
95+ address : u8 ,
96+ operations : & mut [ I2cOperation ] ,
97+ ) -> Result < ( ) , Self :: Error > {
98+ I2c :: < TenBitAddress > :: transaction ( self , u16:: from ( address) , operations)
14599 }
146100 }
147101}
0 commit comments