@@ -88,14 +88,42 @@ where
88
88
}
89
89
}
90
90
91
- impl < ' a , Device , E > embedded_hal:: blocking:: spi:: Write < u8 > for Spi < ' a , Device >
91
+ impl < E > embedded_hal:: spi:: Error for Error < E >
92
+ where
93
+ E : std:: error:: Error ,
94
+ Error < E > : From < E > ,
95
+ {
96
+ fn kind ( & self ) -> embedded_hal:: spi:: ErrorKind {
97
+ embedded_hal:: spi:: ErrorKind :: Other
98
+ }
99
+ }
100
+
101
+ impl < ' a , Device , E > embedded_hal:: spi:: ErrorType for Spi < ' a , Device >
92
102
where
93
103
Device : MpsseCmdExecutor < Error = E > ,
94
104
E : std:: error:: Error ,
95
105
Error < E > : From < E > ,
96
106
{
97
107
type Error = Error < E > ;
108
+ }
109
+
110
+ impl < ' a , Device , E > embedded_hal:: spi:: blocking:: SpiBusFlush for Spi < ' a , Device >
111
+ where
112
+ Device : MpsseCmdExecutor < Error = E > ,
113
+ E : std:: error:: Error ,
114
+ Error < E > : From < E > ,
115
+ {
116
+ fn flush ( & mut self ) -> Result < ( ) , Self :: Error > {
117
+ Ok ( ( ) )
118
+ }
119
+ }
98
120
121
+ impl < ' a , Device , E > embedded_hal:: spi:: blocking:: SpiBusWrite < u8 > for Spi < ' a , Device >
122
+ where
123
+ Device : MpsseCmdExecutor < Error = E > ,
124
+ E : std:: error:: Error ,
125
+ Error < E > : From < E > ,
126
+ {
99
127
fn write ( & mut self , words : & [ u8 ] ) -> Result < ( ) , Error < E > > {
100
128
let cmd: MpsseCmdBuilder = MpsseCmdBuilder :: new ( )
101
129
. clock_data_out ( self . clk_out , words)
@@ -110,15 +138,34 @@ where
110
138
}
111
139
}
112
140
113
- impl < ' a , Device , E > embedded_hal:: blocking :: spi :: Transfer < u8 > for Spi < ' a , Device >
141
+ impl < ' a , Device , E > embedded_hal:: spi :: blocking :: SpiBusRead < u8 > for Spi < ' a , Device >
114
142
where
115
143
Device : MpsseCmdExecutor < Error = E > ,
116
144
E : std:: error:: Error ,
117
145
Error < E > : From < E > ,
118
146
{
119
- type Error = Error < E > ;
147
+ fn read ( & mut self , words : & mut [ u8 ] ) -> Result < ( ) , Self :: Error > {
148
+ let data_out: Vec < u8 > = vec ! [ 0 ; words. len( ) ] ;
149
+ let cmd: MpsseCmdBuilder = MpsseCmdBuilder :: new ( )
150
+ . clock_data ( self . clk , & data_out)
151
+ . send_immediate ( ) ;
152
+
153
+ let lock = self . mtx . lock ( ) . expect ( "Failed to aquire FTDI mutex" ) ;
154
+ let mut inner = lock. borrow_mut ( ) ;
155
+ inner. ft . send ( cmd. as_slice ( ) ) ?;
156
+ inner. ft . recv ( words) ?;
120
157
121
- fn transfer < ' w > ( & mut self , words : & ' w mut [ u8 ] ) -> Result < & ' w [ u8 ] , Error < E > > {
158
+ Ok ( ( ) )
159
+ }
160
+ }
161
+
162
+ impl < ' a , Device , E > embedded_hal:: spi:: blocking:: SpiBus < u8 > for Spi < ' a , Device >
163
+ where
164
+ Device : MpsseCmdExecutor < Error = E > ,
165
+ E : std:: error:: Error ,
166
+ Error < E > : From < E > ,
167
+ {
168
+ fn transfer_in_place ( & mut self , words : & mut [ u8 ] ) -> Result < ( ) , Error < E > > {
122
169
let cmd: MpsseCmdBuilder = MpsseCmdBuilder :: new ( )
123
170
. clock_data ( self . clk , words)
124
171
. send_immediate ( ) ;
@@ -128,18 +175,29 @@ where
128
175
inner. ft . send ( cmd. as_slice ( ) ) ?;
129
176
inner. ft . recv ( words) ?;
130
177
131
- Ok ( words)
178
+ Ok ( ( ) )
179
+ }
180
+
181
+ fn transfer ( & mut self , read : & mut [ u8 ] , write : & [ u8 ] ) -> Result < ( ) , Error < E > > {
182
+ let cmd: MpsseCmdBuilder = MpsseCmdBuilder :: new ( )
183
+ . clock_data ( self . clk , write)
184
+ . send_immediate ( ) ;
185
+
186
+ let lock = self . mtx . lock ( ) . expect ( "Failed to aquire FTDI mutex" ) ;
187
+ let mut inner = lock. borrow_mut ( ) ;
188
+ inner. ft . send ( cmd. as_slice ( ) ) ?;
189
+ inner. ft . recv ( read) ?;
190
+
191
+ Ok ( ( ) )
132
192
}
133
193
}
134
194
135
- impl < ' a , Device , E > embedded_hal:: spi:: FullDuplex < u8 > for Spi < ' a , Device >
195
+ impl < ' a , Device , E > embedded_hal:: spi:: nb :: FullDuplex < u8 > for Spi < ' a , Device >
136
196
where
137
197
Device : MpsseCmdExecutor < Error = E > ,
138
198
E : std:: error:: Error ,
139
199
Error < E > : From < E > ,
140
200
{
141
- type Error = Error < E > ;
142
-
143
201
fn read ( & mut self ) -> nb:: Result < u8 , Error < E > > {
144
202
let mut buf: [ u8 ; 1 ] = [ 0 ] ;
145
203
let cmd: MpsseCmdBuilder = MpsseCmdBuilder :: new ( )
@@ -155,7 +213,7 @@ where
155
213
}
156
214
}
157
215
158
- fn send ( & mut self , byte : u8 ) -> nb:: Result < ( ) , Error < E > > {
216
+ fn write ( & mut self , byte : u8 ) -> nb:: Result < ( ) , Error < E > > {
159
217
let cmd: MpsseCmdBuilder = MpsseCmdBuilder :: new ( )
160
218
. clock_data_out ( self . clk_out , & [ byte] )
161
219
. send_immediate ( ) ;
0 commit comments