aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordvdsk <[email protected]>2024-10-23 21:06:58 +0200
committerdvdsk <[email protected]>2024-10-23 21:06:58 +0200
commitbe50b62677f04f0d30727a9168b435b90584f06c (patch)
tree3a38eb200b8ce3334924d5073dd7eb18ba12249a
parent8803128707b8bd9fc9dcea392a62dfd42aa822d2 (diff)
stm32/uart impl ReadReady for RingbufferdUart
-rw-r--r--embassy-stm32/src/usart/mod.rs3
-rw-r--r--embassy-stm32/src/usart/ringbuffered.rs11
2 files changed, 14 insertions, 0 deletions
diff --git a/embassy-stm32/src/usart/mod.rs b/embassy-stm32/src/usart/mod.rs
index 333e01e36..86c94789a 100644
--- a/embassy-stm32/src/usart/mod.rs
+++ b/embassy-stm32/src/usart/mod.rs
@@ -260,6 +260,8 @@ pub enum Error {
260 Parity, 260 Parity,
261 /// Buffer too large for DMA 261 /// Buffer too large for DMA
262 BufferTooLong, 262 BufferTooLong,
263 // TODO: ask what this is and document it (dvdsk)
264 DmaUnsynced,
263} 265}
264 266
265enum ReadCompletionEvent { 267enum ReadCompletionEvent {
@@ -1689,6 +1691,7 @@ impl embedded_hal_nb::serial::Error for Error {
1689 Self::Overrun => embedded_hal_nb::serial::ErrorKind::Overrun, 1691 Self::Overrun => embedded_hal_nb::serial::ErrorKind::Overrun,
1690 Self::Parity => embedded_hal_nb::serial::ErrorKind::Parity, 1692 Self::Parity => embedded_hal_nb::serial::ErrorKind::Parity,
1691 Self::BufferTooLong => embedded_hal_nb::serial::ErrorKind::Other, 1693 Self::BufferTooLong => embedded_hal_nb::serial::ErrorKind::Other,
1694 Self::DmaUnsynced => embedded_hal_nb::serial::ErrorKind::Other,
1692 } 1695 }
1693 } 1696 }
1694} 1697}
diff --git a/embassy-stm32/src/usart/ringbuffered.rs b/embassy-stm32/src/usart/ringbuffered.rs
index eb2399d9c..f1914e1bf 100644
--- a/embassy-stm32/src/usart/ringbuffered.rs
+++ b/embassy-stm32/src/usart/ringbuffered.rs
@@ -5,6 +5,7 @@ use core::task::Poll;
5 5
6use embassy_embedded_hal::SetConfig; 6use embassy_embedded_hal::SetConfig;
7use embassy_hal_internal::PeripheralRef; 7use embassy_hal_internal::PeripheralRef;
8use embedded_io_async::ReadReady;
8use futures_util::future::{select, Either}; 9use futures_util::future::{select, Either};
9 10
10use super::{clear_interrupt_flags, rdr, reconfigure, sr, Config, ConfigError, Error, Info, State, UartRx}; 11use super::{clear_interrupt_flags, rdr, reconfigure, sr, Config, ConfigError, Error, Info, State, UartRx};
@@ -262,3 +263,13 @@ impl embedded_io_async::Read for RingBufferedUartRx<'_> {
262 self.read(buf).await 263 self.read(buf).await
263 } 264 }
264} 265}
266
267impl ReadReady for RingBufferedUartRx<'_> {
268 fn read_ready(&mut self) -> Result<bool, Self::Error> {
269 let len = self.ring_buf.len().map_err(|e| match e {
270 crate::dma::ringbuffer::Error::Overrun => Self::Error::Overrun,
271 crate::dma::ringbuffer::Error::DmaUnsynced => Self::Error::DmaUnsynced,
272 })?;
273 Ok(len > 0)
274 }
275}