@@ -49,25 +49,27 @@ fn main() {
4949 . expect ( "Error writing to serial" ) ;
5050
5151 let mut serial_buf: Vec < u8 > = Vec :: with_capacity ( 5000 ) ;
52- let mut serial_char_buf : Vec < u8 > = vec ! [ 0 ; 1 ] ;
52+ let mut read_buf = [ 0u8 ; 256 ] ;
5353 let poll_data: Arc < Mutex < Vec < PollData > > > = Arc :: new ( Mutex :: new ( vec ! [ ] ) ) ;
5454
5555 debug ! ( "Receiving data on serial connection." ) ;
5656 loop {
57+ // read data from serial port in chunks until null terminator
5758 loop {
58- if let Err ( e) = port. read_exact ( & mut serial_char_buf) {
59- match e. kind ( ) {
60- io:: ErrorKind :: TimedOut | io:: ErrorKind :: UnexpectedEof => continue ,
61- _ => panic ! ( "IO error when reading character: {e}" ) ,
59+ match port. read ( & mut read_buf) {
60+ Ok ( n) => {
61+ let data = & read_buf[ ..n] ;
62+ // if the chunk contains a null byte take up to it and break, otherwise - accumulate
63+ if let Some ( pos) = data. iter ( ) . position ( |& b| b == 0x00 ) {
64+ serial_buf. extend_from_slice ( & data[ ..pos] ) ;
65+ break ;
66+ }
67+ serial_buf. extend_from_slice ( data) ;
6268 }
63- }
64-
65- match serial_char_buf. first ( ) {
66- Some ( i) => match i {
67- 0x00 => break ,
68- c => serial_buf. push ( * c) ,
69- } ,
70- None => panic ! ( "IO error when trying to read serial buffer" ) ,
69+ Err ( e)
70+ if e. kind ( ) == io:: ErrorKind :: TimedOut
71+ || e. kind ( ) == io:: ErrorKind :: UnexpectedEof => { }
72+ Err ( e) => panic ! ( "IO error when reading buffer: {e}" ) ,
7173 }
7274 }
7375
@@ -77,8 +79,10 @@ fn main() {
7779 . expect ( "Error writing to serial" ) ;
7880 }
7981 Err ( e) => {
80- port. write_all ( format ! ( "{}\n ERR\0 " , BASE64 . encode( e. as_bytes( ) ) ) . as_bytes ( ) )
81- . expect ( "Error writing to serial" ) ;
82+ port. write_all (
83+ format ! ( "{}\n ERR\0 " , BASE64 . encode( e. as_bytes( ) ) ) . as_bytes ( ) ,
84+ )
85+ . expect ( "Error writing to serial" ) ;
8286 }
8387 }
8488 serial_buf. clear ( ) ;
0 commit comments