diff --git a/src/serial.rs b/src/serial.rs index fcc9aeb..817fb67 100644 --- a/src/serial.rs +++ b/src/serial.rs @@ -8,7 +8,7 @@ use esp_idf_hal::serial::{self, Rx, Tx}; #[derive(Debug)] pub enum SerialError { ReadError, - WriteError(String), + WriteError, TimeoutError, } @@ -79,13 +79,19 @@ impl SerialIO { } pub fn send_bytes(&mut self, payload: &[u8], eos: Option) -> Result { - //self.rx.clear(); + let mut num_bytes = 0; for b in payload.iter() { nb::block!(self.tx.write(*b)) - .map_err(|err| SerialError::WriteError(format!("Error writing '{}' to serial, Original error {}", b, err)))?; + .map_err(|err| SerialError::WriteError)?; + num_bytes += 1; + } + if num_bytes == payload.len() { + eos.map(|b| nb::block!(self.tx.write(b))); + Ok(num_bytes + if eos.is_none() { 0 } else { 1 }) + } + else { + Err(SerialError::WriteError) } - eos.map(|b| nb::block!(self.tx.write(b))); - Ok(payload.len() + if eos.is_none() { 0 } else { 1 }) } /// Reads a whole line (that ends with \\n) within the given `timeout` passed on input.