1
- use embedded_hal:: i2c:: blocking:: { I2c , Operation as I2cOperation } ;
2
- use linux_embedded_hal:: I2cdev ;
1
+ use embedded_hal:: i2c:: {
2
+ blocking:: { I2cBus , I2cBusBase as _, I2cDevice } ,
3
+ Direction ,
4
+ } ;
5
+ use embedded_hal_bus:: i2c:: blocking:: ExclusiveDevice ;
6
+ use linux_embedded_hal:: I2cBus as LinuxI2cBus ;
3
7
4
8
const ADDR : u8 = 0x12 ;
5
9
@@ -9,24 +13,28 @@ struct Driver<I2C> {
9
13
10
14
impl < I2C > Driver < I2C >
11
15
where
12
- I2C : I2c ,
16
+ I2C : I2cDevice ,
17
+ I2C :: Bus : I2cBus ,
13
18
{
14
19
pub fn new ( i2c : I2C ) -> Self {
15
20
Driver { i2c }
16
21
}
17
22
18
23
fn read_something ( & mut self ) -> Result < u8 , I2C :: Error > {
19
24
let mut read_buffer = [ 0 ] ;
20
- let mut ops = [
21
- I2cOperation :: Write ( & [ 0xAB ] ) ,
22
- I2cOperation :: Read ( & mut read_buffer) ,
23
- ] ;
24
- self . i2c . transaction ( ADDR , & mut ops) . and ( Ok ( read_buffer[ 0 ] ) )
25
+ self . i2c . transaction ( |bus| {
26
+ bus. start ( ADDR , Direction :: Write ) ?;
27
+ bus. write ( & [ 0xAB ] ) ?;
28
+ bus. start ( ADDR , Direction :: Read ) ?;
29
+ bus. read ( & mut read_buffer)
30
+ } ) ?;
31
+ Ok ( read_buffer[ 0 ] )
25
32
}
26
33
}
27
34
28
35
fn main ( ) {
29
- let dev = I2cdev :: new ( "/dev/i2c-1" ) . unwrap ( ) ;
36
+ let bus = LinuxI2cBus :: new ( "/dev/i2c-1" ) . unwrap ( ) ;
37
+ let dev = ExclusiveDevice :: new ( bus) ;
30
38
let mut driver = Driver :: new ( dev) ;
31
39
let value = driver. read_something ( ) . unwrap ( ) ;
32
40
println ! ( "Read value: {}" , value) ;
0 commit comments