@@ -199,29 +199,29 @@ impl QCmdMapResponse {
199199 }
200200}
201201
202- pub struct Serprog < SPI , CS , LED , T : Transport , F > {
202+ pub struct Serprog < SPI , CS , LED , T : Transport < TRANSFER_SIZE > , F , const TRANSFER_SIZE : usize > {
203203 spi : SPI ,
204204 cs : CS ,
205205 led : LED ,
206206 transport : T ,
207207 freq_callback : Option < F > ,
208208}
209209
210- async fn ospiop_usb_task < T : Transport > (
210+ async fn ospiop_usb_task < T : Transport < TRANSFER_SIZE > , const TRANSFER_SIZE : usize > (
211211 transport : & mut T ,
212- mut sender : Sender < ' _ , NoopRawMutex , Vec < u8 , 64 > > ,
212+ mut sender : Sender < ' _ , NoopRawMutex , Vec < u8 , TRANSFER_SIZE > > ,
213213 sdata_size : usize ,
214- mut receiver : Receiver < ' _ , NoopRawMutex , Vec < u8 , 64 > > ,
214+ mut receiver : Receiver < ' _ , NoopRawMutex , Vec < u8 , TRANSFER_SIZE > > ,
215215 rdata_size : usize ,
216216) -> Result < ( ) , SerprogError > {
217217 // First block - already contains header + initial data, send as-is
218218 let mut data_to_read = sdata_size;
219- let first_block_data_size = data_to_read. min ( 64 - 6 ) ;
219+ let first_block_data_size = data_to_read. min ( TRANSFER_SIZE - 6 ) ;
220220 sender. send_done ( ) ;
221221 data_to_read -= first_block_data_size;
222222
223223 while data_to_read > 0 {
224- let read_size = data_to_read. min ( 64 ) ;
224+ let read_size = data_to_read. min ( TRANSFER_SIZE ) ;
225225 let buf = sender. send ( ) . await ;
226226 buf. clear ( ) ;
227227 buf. resize ( read_size, 0 ) . ok ( ) ;
@@ -250,11 +250,11 @@ async fn ospiop_usb_task<T: Transport>(
250250 Ok ( ( ) )
251251}
252252
253- async fn ospiop_spi_task < SPI : SpiBus < u8 > , CS : OutputPin > (
253+ async fn ospiop_spi_task < SPI : SpiBus < u8 > , CS : OutputPin , const TRANSFER_SIZE : usize > (
254254 spi : & mut SPI ,
255- mut receiver : Receiver < ' _ , NoopRawMutex , Vec < u8 , 64 > > ,
255+ mut receiver : Receiver < ' _ , NoopRawMutex , Vec < u8 , TRANSFER_SIZE > > ,
256256 sdata_size : usize ,
257- mut sender : Sender < ' _ , NoopRawMutex , Vec < u8 , 64 > > ,
257+ mut sender : Sender < ' _ , NoopRawMutex , Vec < u8 , TRANSFER_SIZE > > ,
258258 rdata_size : usize ,
259259 cs : & mut CS ,
260260) -> Result < ( ) , SerprogError > {
@@ -271,7 +271,7 @@ async fn ospiop_spi_task<SPI: SpiBus<u8>, CS: OutputPin>(
271271 let write_slice = if is_first {
272272 // First buffer: skip the 6-byte header
273273 is_first = false ;
274- let data_len = data_to_write. min ( 64 - 6 ) ;
274+ let data_len = data_to_write. min ( TRANSFER_SIZE - 6 ) ;
275275 data_to_write -= data_len;
276276 & buf[ 6 ..6 + data_len]
277277 } else {
@@ -288,7 +288,7 @@ async fn ospiop_spi_task<SPI: SpiBus<u8>, CS: OutputPin>(
288288 while data_to_read > 0 {
289289 let buf = sender. send ( ) . await ;
290290 buf. clear ( ) ;
291- let read_size = data_to_read. min ( 64 ) ;
291+ let read_size = data_to_read. min ( TRANSFER_SIZE ) ;
292292 buf. resize ( read_size, 0 ) . ok ( ) ;
293293 spi. read ( buf. as_mut_slice ( ) )
294294 . await
@@ -302,12 +302,12 @@ async fn ospiop_spi_task<SPI: SpiBus<u8>, CS: OutputPin>(
302302 Ok ( ( ) )
303303}
304304
305- impl < SPI , CS , LED , T , F > Serprog < SPI , CS , LED , T , F >
305+ impl < SPI , CS , LED , T , F , const TRANSFER_SIZE : usize > Serprog < SPI , CS , LED , T , F , TRANSFER_SIZE >
306306where
307307 SPI : SpiBus < u8 > ,
308308 CS : OutputPin ,
309309 LED : OutputPin ,
310- T : Transport ,
310+ T : Transport < TRANSFER_SIZE > ,
311311 F : FnMut ( & mut SPI , u32 ) + Send + Sync ,
312312{
313313 pub fn new ( spi : SPI , cs : CS , led : LED , transport : T , freq_callback : Option < F > ) -> Self {
@@ -320,7 +320,11 @@ where
320320 }
321321 }
322322
323- pub async fn run_loop ( mut self ) -> ! {
323+ pub async fn run_loop ( mut self ) -> !
324+ where
325+ CS :: Error : core:: fmt:: Debug ,
326+ LED :: Error : core:: fmt:: Debug ,
327+ {
324328 let mut buf = [ 0 ; 1 ] ;
325329
326330 loop {
@@ -439,8 +443,8 @@ where
439443 debug ! ( "Received OSpiOp CMD" ) ;
440444
441445 // Read directly into the first channel buffer
442- let mut usb_rx_spi_tx_buf = [ const { Vec :: < u8 , 64 > :: new ( ) } ; 4 ] ;
443- usb_rx_spi_tx_buf[ 0 ] . resize ( 64 , 0 ) . ok ( ) ;
446+ let mut usb_rx_spi_tx_buf = [ const { Vec :: < u8 , TRANSFER_SIZE > :: new ( ) } ; 4 ] ;
447+ usb_rx_spi_tx_buf[ 0 ] . resize ( TRANSFER_SIZE , 0 ) . ok ( ) ;
444448 self . transport
445449 . read ( usb_rx_spi_tx_buf[ 0 ] . as_mut_slice ( ) )
446450 . await
@@ -450,25 +454,31 @@ where
450454 let op_slen = le_u24_to_u32 ( & usb_rx_spi_tx_buf[ 0 ] [ 0 ..3 ] ) as usize ;
451455 let op_rlen = le_u24_to_u32 ( & usb_rx_spi_tx_buf[ 0 ] [ 3 ..6 ] ) as usize ;
452456
453- let mut usb_rx_spi_tx_channel: Channel < ' _ , NoopRawMutex , Vec < u8 , 64 > > =
457+ let mut usb_rx_spi_tx_channel: Channel < ' _ , NoopRawMutex , Vec < u8 , TRANSFER_SIZE > > =
454458 Channel :: new ( & mut usb_rx_spi_tx_buf) ;
455459 let ( usb_rx, spi_tx) = usb_rx_spi_tx_channel. split ( ) ;
456460
457- let mut usb_tx_spi_rx_buf = [ const { Vec :: < u8 , 64 > :: new ( ) } ; 8 ] ;
458- let mut usb_tx_spi_rx_channel: Channel < ' _ , NoopRawMutex , Vec < u8 , 64 > > =
461+ let mut usb_tx_spi_rx_buf = [ const { Vec :: < u8 , TRANSFER_SIZE > :: new ( ) } ; 8 ] ;
462+ let mut usb_tx_spi_rx_channel: Channel < ' _ , NoopRawMutex , Vec < u8 , TRANSFER_SIZE > > =
459463 Channel :: new ( & mut usb_tx_spi_rx_buf) ;
460464 let ( spi_rx, usb_tx) = usb_tx_spi_rx_channel. split ( ) ;
461465
462466 let ( spi_res, usb_res) = block_on ( join (
463- ospiop_spi_task (
467+ ospiop_spi_task :: < _ , _ , TRANSFER_SIZE > (
464468 & mut self . spi ,
465469 spi_tx,
466470 op_slen,
467471 spi_rx,
468472 op_rlen,
469473 & mut self . cs ,
470474 ) ,
471- ospiop_usb_task ( & mut self . transport , usb_rx, op_slen, usb_tx, op_rlen) ,
475+ ospiop_usb_task :: < _ , TRANSFER_SIZE > (
476+ & mut self . transport ,
477+ usb_rx,
478+ op_slen,
479+ usb_tx,
480+ op_rlen,
481+ ) ,
472482 ) ) ;
473483 if let Err ( spi_err) = spi_res {
474484 self . transport
0 commit comments