@@ -202,7 +202,7 @@ where
202
202
///
203
203
/// The buffer must have a length of at most 255 bytes.
204
204
pub fn read ( & mut self , rx_buffer : & mut [ u8 ] ) -> Result < ( ) , Error > {
205
- start_read ( & * self . 0 , rx_buffer) ?;
205
+ start_read ( & * self . 0 , rx_buffer, rx_buffer . len ( ) ) ?;
206
206
207
207
// Wait for transmission to end.
208
208
while self . 0 . events_endrx . read ( ) . bits ( ) == 0 { }
@@ -240,7 +240,7 @@ where
240
240
I : timer:: Instance ,
241
241
{
242
242
// Start the read.
243
- start_read ( & self . 0 , rx_buffer) ?;
243
+ start_read ( & self . 0 , rx_buffer, rx_buffer . len ( ) ) ?;
244
244
245
245
// Start the timeout timer.
246
246
timer. start ( cycles) ;
@@ -363,7 +363,11 @@ fn stop_write(uarte: &uarte0::RegisterBlock) {
363
363
364
364
/// Start a UARTE read transaction by setting the control
365
365
/// values and triggering a read task.
366
- fn start_read ( uarte : & uarte0:: RegisterBlock , rx_buffer : & mut [ u8 ] ) -> Result < ( ) , Error > {
366
+ fn start_read (
367
+ uarte : & uarte0:: RegisterBlock ,
368
+ rx_buffer : & mut [ u8 ] ,
369
+ nbytes : usize ,
370
+ ) -> Result < ( ) , Error > {
367
371
if rx_buffer. len ( ) > EASY_DMA_SIZE {
368
372
return Err ( Error :: RxBufferTooLong ) ;
369
373
}
@@ -392,7 +396,7 @@ fn start_read(uarte: &uarte0::RegisterBlock, rx_buffer: &mut [u8]) -> Result<(),
392
396
//
393
397
// The MAXCNT field is at least 8 bits wide and accepts the full
394
398
// range of values.
395
- unsafe { w. maxcnt ( ) . bits ( rx_buffer. len ( ) as _ ) } ) ;
399
+ unsafe { w. maxcnt ( ) . bits ( nbytes . min ( rx_buffer. len ( ) ) as _ ) } ) ;
396
400
397
401
// Start UARTE Receive transaction.
398
402
uarte. tasks_startrx . write ( |w|
@@ -700,17 +704,16 @@ where
700
704
}
701
705
702
706
if in_progress {
703
- let b = self . rx_buf [ 0 ] ;
704
707
uarte. events_rxstarted . reset ( ) ;
705
708
706
709
finalize_read ( uarte) ;
707
710
708
711
if uarte. rxd . amount . read ( ) . bits ( ) != 1 as u32 {
709
712
return Err ( nb:: Error :: Other ( Error :: Receive ) ) ;
710
713
}
711
- Ok ( b )
714
+ Ok ( self . rx_buf [ 0 ] )
712
715
} else {
713
- start_read ( & uarte, self . rx_buf ) ?;
716
+ start_read ( & uarte, self . rx_buf , 1 ) ?;
714
717
Err ( nb:: Error :: WouldBlock )
715
718
}
716
719
}
0 commit comments