diff --git a/src/transport/serial.rs b/src/transport/serial.rs index e007667..6437b5d 100644 --- a/src/transport/serial.rs +++ b/src/transport/serial.rs @@ -60,18 +60,29 @@ impl PacketTransportSerialCobs { pub fn receive(&mut self, mut f: F) -> Result { let mut decoded_packets = 0; loop { - let read_bytes = self.serial.read(&mut self.reception_buffer)?; - if read_bytes == 0 { - break; - } - for byte in self.reception_buffer[..read_bytes].iter() { - match self.decoder.feed(*byte) { - Ok(Some(packet_len)) => { - f(&self.decoder.dest()[0..packet_len]); - decoded_packets += 1; + match self.serial.read(&mut self.reception_buffer) { + Ok(read_bytes) => { + if read_bytes == 0 { + break; } - Ok(None) => (), - Err(e) => self.error_handler(e), + for byte in self.reception_buffer[..read_bytes].iter() { + match self.decoder.feed(*byte) { + Ok(Some(packet_len)) => { + f(&self.decoder.dest()[0..packet_len]); + decoded_packets += 1; + } + Ok(None) => (), + Err(e) => self.error_handler(e), + } + } + } + Err(e) => { + if e.kind() == std::io::ErrorKind::TimedOut + || e.kind() == std::io::ErrorKind::WouldBlock + { + break; + } + return Err(super::ReceiveError::Io(e)); } } }