From 3e60d1d59b9aa01c86bff86d4ac5cf49cb50fe9e Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Sat, 8 Mar 2025 00:19:53 +0100 Subject: [PATCH] UART embedded-io fixes --- va108xx-hal/src/uart/mod.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/va108xx-hal/src/uart/mod.rs b/va108xx-hal/src/uart/mod.rs index 24fe195..67f3fd8 100644 --- a/va108xx-hal/src/uart/mod.rs +++ b/va108xx-hal/src/uart/mod.rs @@ -892,7 +892,15 @@ impl embedded_hal_nb::serial::Read for Rx { impl embedded_io::Read for Rx { fn read(&mut self, buf: &mut [u8]) -> Result { + if buf.is_empty() { + return Ok(0); + } let mut read = 0; + loop { + if self.0.rxstatus().read().rdavl().bit_is_set() { + break; + } + } for byte in buf.iter_mut() { match >::read(self) { Ok(w) => { @@ -1058,6 +1066,14 @@ impl embedded_hal_nb::serial::Write for Tx { impl embedded_io::Write for Tx { fn write(&mut self, buf: &[u8]) -> Result { + if buf.is_empty() { + return Ok(0); + } + loop { + if self.0.txstatus().read().wrrdy().bit_is_set() { + break; + } + } let mut written = 0; for byte in buf.iter() { match >::write(self, *byte) { @@ -1066,7 +1082,7 @@ impl embedded_io::Write for Tx { } } - Ok(buf.len()) + Ok(written) } fn flush(&mut self) -> Result<(), Self::Error> {