diff options
| author | dvdsk <[email protected]> | 2024-10-23 21:06:58 +0200 |
|---|---|---|
| committer | dvdsk <[email protected]> | 2024-10-23 21:06:58 +0200 |
| commit | be50b62677f04f0d30727a9168b435b90584f06c (patch) | |
| tree | 3a38eb200b8ce3334924d5073dd7eb18ba12249a | |
| parent | 8803128707b8bd9fc9dcea392a62dfd42aa822d2 (diff) | |
stm32/uart impl ReadReady for RingbufferdUart
| -rw-r--r-- | embassy-stm32/src/usart/mod.rs | 3 | ||||
| -rw-r--r-- | embassy-stm32/src/usart/ringbuffered.rs | 11 |
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 | ||
| 265 | enum ReadCompletionEvent { | 267 | enum 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 | ||
| 6 | use embassy_embedded_hal::SetConfig; | 6 | use embassy_embedded_hal::SetConfig; |
| 7 | use embassy_hal_internal::PeripheralRef; | 7 | use embassy_hal_internal::PeripheralRef; |
| 8 | use embedded_io_async::ReadReady; | ||
| 8 | use futures_util::future::{select, Either}; | 9 | use futures_util::future::{select, Either}; |
| 9 | 10 | ||
| 10 | use super::{clear_interrupt_flags, rdr, reconfigure, sr, Config, ConfigError, Error, Info, State, UartRx}; | 11 | use 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 | |||
| 267 | impl 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 | } | ||
