@@ -2,8 +2,8 @@ use crate::error::Error;
2
2
use crate :: error:: ErrorKind :: I2cNoAck ;
3
3
use crate :: { FtInner , PinUse } ;
4
4
use ftdi_mpsse:: { ClockBitsIn , ClockBitsOut , MpsseCmdBuilder , MpsseCmdExecutor } ;
5
- use std:: result :: Result ;
6
- use std:: { cell :: RefCell , sync :: Mutex } ;
5
+ use std:: borrow :: BorrowMut ;
6
+ use std:: sync :: { Arc , Mutex } ;
7
7
8
8
/// SCL bitmask
9
9
const SCL : u8 = 1 << 0 ;
@@ -21,7 +21,7 @@ const BITS_OUT: ClockBitsOut = ClockBitsOut::MsbNeg;
21
21
#[ derive( Debug ) ]
22
22
pub struct I2c < ' a , Device : MpsseCmdExecutor > {
23
23
/// Parent FTDI device.
24
- mtx : & ' a Mutex < RefCell < FtInner < Device > > > ,
24
+ mtx : & ' a Arc < Mutex < FtInner < Device > > > ,
25
25
/// Length of the start, repeated start, and stop conditions.
26
26
///
27
27
/// The units for these are dimensionless number of MPSSE commands.
37
37
E : std:: error:: Error ,
38
38
Error < E > : From < E > ,
39
39
{
40
- pub ( crate ) fn new ( mtx : & Mutex < RefCell < FtInner < Device > > > ) -> Result < I2c < Device > , Error < E > > {
41
- let lock = mtx. lock ( ) . expect ( "Failed to aquire FTDI mutex" ) ;
42
- let mut inner = lock. borrow_mut ( ) ;
40
+ pub ( crate ) fn new ( mtx : & Arc < Mutex < FtInner < Device > > > ) -> Result < I2c < Device > , Error < E > > {
41
+ let mut lock = mtx. lock ( ) . expect ( "Failed to aquire FTDI mutex" ) ;
42
+ let inner = lock. borrow_mut ( ) ;
43
43
inner. allocate_pin ( 0 , PinUse :: I2c ) ;
44
44
inner. allocate_pin ( 1 , PinUse :: I2c ) ;
45
45
inner. allocate_pin ( 2 , PinUse :: I2c ) ;
@@ -127,8 +127,8 @@ where
127
127
fn read_fast ( & mut self , address : u8 , buffer : & mut [ u8 ] ) -> Result < ( ) , Error < E > > {
128
128
assert ! ( !buffer. is_empty( ) , "buffer must be a non-empty slice" ) ;
129
129
130
- let lock = self . mtx . lock ( ) . expect ( "Failed to aquire FTDI mutex" ) ;
131
- let mut inner = lock. borrow_mut ( ) ;
130
+ let mut lock = self . mtx . lock ( ) . expect ( "Failed to aquire FTDI mutex" ) ;
131
+ let inner = lock. borrow_mut ( ) ;
132
132
133
133
// ST
134
134
let mut mpsse_cmd: MpsseCmdBuilder = MpsseCmdBuilder :: new ( ) ;
@@ -198,8 +198,8 @@ where
198
198
fn read_slow ( & mut self , address : u8 , buffer : & mut [ u8 ] ) -> Result < ( ) , Error < E > > {
199
199
assert ! ( !buffer. is_empty( ) , "buffer must be a non-empty slice" ) ;
200
200
201
- let lock = self . mtx . lock ( ) . expect ( "Failed to aquire FTDI mutex" ) ;
202
- let mut inner = lock. borrow_mut ( ) ;
201
+ let mut lock = self . mtx . lock ( ) . expect ( "Failed to aquire FTDI mutex" ) ;
202
+ let inner = lock. borrow_mut ( ) ;
203
203
204
204
// ST
205
205
let mut mpsse_cmd: MpsseCmdBuilder = MpsseCmdBuilder :: new ( ) ;
@@ -272,8 +272,8 @@ where
272
272
fn write_fast ( & mut self , addr : u8 , bytes : & [ u8 ] ) -> Result < ( ) , Error < E > > {
273
273
assert ! ( !bytes. is_empty( ) , "bytes must be a non-empty slice" ) ;
274
274
275
- let lock = self . mtx . lock ( ) . expect ( "Failed to aquire FTDI mutex" ) ;
276
- let mut inner = lock. borrow_mut ( ) ;
275
+ let mut lock = self . mtx . lock ( ) . expect ( "Failed to aquire FTDI mutex" ) ;
276
+ let inner = lock. borrow_mut ( ) ;
277
277
let mut mpsse_cmd: MpsseCmdBuilder = MpsseCmdBuilder :: new ( ) ;
278
278
279
279
// ST
@@ -333,8 +333,8 @@ where
333
333
fn write_slow ( & mut self , addr : u8 , bytes : & [ u8 ] ) -> Result < ( ) , Error < E > > {
334
334
assert ! ( !bytes. is_empty( ) , "bytes must be a non-empty slice" ) ;
335
335
336
- let lock = self . mtx . lock ( ) . expect ( "Failed to aquire FTDI mutex" ) ;
337
- let mut inner = lock. borrow_mut ( ) ;
336
+ let mut lock = self . mtx . lock ( ) . expect ( "Failed to aquire FTDI mutex" ) ;
337
+ let inner = lock. borrow_mut ( ) ;
338
338
339
339
// ST
340
340
let mut mpsse_cmd: MpsseCmdBuilder = MpsseCmdBuilder :: new ( ) ;
@@ -414,8 +414,8 @@ where
414
414
415
415
// lock at the start to prevent GPIO from being modified while we build
416
416
// the MPSSE command
417
- let lock = self . mtx . lock ( ) . expect ( "Failed to aquire FTDI mutex" ) ;
418
- let mut inner = lock. borrow_mut ( ) ;
417
+ let mut lock = self . mtx . lock ( ) . expect ( "Failed to aquire FTDI mutex" ) ;
418
+ let inner = lock. borrow_mut ( ) ;
419
419
420
420
let mut mpsse_cmd: MpsseCmdBuilder = MpsseCmdBuilder :: new ( ) ;
421
421
@@ -522,8 +522,8 @@ where
522
522
523
523
// lock at the start to prevent GPIO from being modified while we build
524
524
// the MPSSE command
525
- let lock = self . mtx . lock ( ) . expect ( "Failed to aquire FTDI mutex" ) ;
526
- let mut inner = lock. borrow_mut ( ) ;
525
+ let mut lock = self . mtx . lock ( ) . expect ( "Failed to aquire FTDI mutex" ) ;
526
+ let inner = lock. borrow_mut ( ) ;
527
527
528
528
// ST
529
529
let mut mpsse_cmd: MpsseCmdBuilder = MpsseCmdBuilder :: new ( ) ;
0 commit comments