From 08f1454527d832f80f6816f7672d2cb91dd6e848 Mon Sep 17 00:00:00 2001 From: rafael <rafael.koch@gmx.net> Date: Sun, 14 Jul 2024 16:35:05 +0200 Subject: [PATCH 1/4] nrf --- embassy-nrf/src/buffered_uarte.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/embassy-nrf/src/buffered_uarte.rs b/embassy-nrf/src/buffered_uarte.rs index 8e4064aaa..ef34e2e32 100644 --- a/embassy-nrf/src/buffered_uarte.rs +++ b/embassy-nrf/src/buffered_uarte.rs @@ -766,6 +766,12 @@ impl<'d, U: UarteInstance, T: TimerInstance> BufferedUarteRx<'d, U, T> { rx.pop_done(amt); U::regs().intenset.write(|w| w.rxstarted().set()); } + + /// we are ready to read if there is data in the buffer + fn read_ready() -> Result<bool, Error> { + let state = T::buffered_state(); + Ok(!state.rx_buf.is_empty()) + } } impl<'a, U: UarteInstance, T: TimerInstance> Drop for BufferedUarteRx<'a, U, T> { @@ -827,6 +833,18 @@ mod _embedded_io { } } + impl<'d, U: UarteInstance, T: TimerInstance + 'd> embedded_io_async::ReadReady for BufferedUarte<'d, U, T> { + fn read_ready(&mut self) -> Result<bool, Self::Error> { + BufferedUarteRx::<'d, T>::read_ready() + } + } + + impl<'d, U: UarteInstance, T: TimerInstance + 'd> embedded_io_async::ReadReady for BufferedUarteRx<'d, U, T> { + fn read_ready(&mut self) -> Result<bool, Self::Error> { + Self::read_ready() + } + } + impl<'d, U: UarteInstance, T: TimerInstance> embedded_io_async::BufRead for BufferedUarte<'d, U, T> { async fn fill_buf(&mut self) -> Result<&[u8], Self::Error> { self.fill_buf().await From c7f775dc20df2df4ceb3fb75d7228b2e37121e0b Mon Sep 17 00:00:00 2001 From: rafael <rafael.koch@gmx.net> Date: Sun, 14 Jul 2024 16:42:54 +0200 Subject: [PATCH 2/4] stm --- embassy-stm32/src/usart/buffered.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/embassy-stm32/src/usart/buffered.rs b/embassy-stm32/src/usart/buffered.rs index 33bc009a8..eb639942c 100644 --- a/embassy-stm32/src/usart/buffered.rs +++ b/embassy-stm32/src/usart/buffered.rs @@ -436,6 +436,12 @@ impl<'d> BufferedUartRx<'d> { } } + /// we are ready to read if there is data in the buffer + fn read_ready() -> Result<bool, Error> { + let state = T::buffered_state(); + Ok(!state.rx_buf.is_empty()) + } + /// Reconfigure the driver pub fn set_config(&mut self, config: &Config) -> Result<(), ConfigError> { reconfigure(self.info, self.kernel_clock, config)?; @@ -610,6 +616,18 @@ impl<'d> embedded_io_async::Read for BufferedUartRx<'d> { } } +impl<'d> embedded_io_async::ReadReady for BufferedUart<'d> { + fn read_ready(&mut self) -> Result<bool, Self::Error> { + BufferedUartRx::<'d>::read_ready() + } +} + +impl<'d> embedded_io_async::ReadReady for BufferedUartRx<'d> { + fn read_ready(&mut self) -> Result<bool, Self::Error> { + Self::read_ready() + } +} + impl<'d> embedded_io_async::BufRead for BufferedUart<'d> { async fn fill_buf(&mut self) -> Result<&[u8], Self::Error> { self.rx.fill_buf().await From f5ebdebd96a7b72403fa3fee82b2f12de94499ef Mon Sep 17 00:00:00 2001 From: rafael <rafael.koch@gmx.net> Date: Sun, 14 Jul 2024 17:34:50 +0200 Subject: [PATCH 3/4] nrf after cargo check --- embassy-nrf/src/buffered_uarte.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/embassy-nrf/src/buffered_uarte.rs b/embassy-nrf/src/buffered_uarte.rs index ef34e2e32..b368a3d33 100644 --- a/embassy-nrf/src/buffered_uarte.rs +++ b/embassy-nrf/src/buffered_uarte.rs @@ -769,7 +769,7 @@ impl<'d, U: UarteInstance, T: TimerInstance> BufferedUarteRx<'d, U, T> { /// we are ready to read if there is data in the buffer fn read_ready() -> Result<bool, Error> { - let state = T::buffered_state(); + let state = U::buffered_state(); Ok(!state.rx_buf.is_empty()) } } @@ -835,7 +835,7 @@ mod _embedded_io { impl<'d, U: UarteInstance, T: TimerInstance + 'd> embedded_io_async::ReadReady for BufferedUarte<'d, U, T> { fn read_ready(&mut self) -> Result<bool, Self::Error> { - BufferedUarteRx::<'d, T>::read_ready() + BufferedUarteRx::<'d, U, T>::read_ready() } } From d9ea5cb015f015c84013250db36a1332f6df3986 Mon Sep 17 00:00:00 2001 From: rafael <rafael.koch@gmx.net> Date: Sun, 14 Jul 2024 17:56:56 +0200 Subject: [PATCH 4/4] stm after cargo fix --- embassy-stm32/src/usart/buffered.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/embassy-stm32/src/usart/buffered.rs b/embassy-stm32/src/usart/buffered.rs index eb639942c..06cc0e41d 100644 --- a/embassy-stm32/src/usart/buffered.rs +++ b/embassy-stm32/src/usart/buffered.rs @@ -437,8 +437,8 @@ impl<'d> BufferedUartRx<'d> { } /// we are ready to read if there is data in the buffer - fn read_ready() -> Result<bool, Error> { - let state = T::buffered_state(); + fn read_ready(&mut self) -> Result<bool, Error> { + let state = self.state; Ok(!state.rx_buf.is_empty()) } @@ -618,13 +618,13 @@ impl<'d> embedded_io_async::Read for BufferedUartRx<'d> { impl<'d> embedded_io_async::ReadReady for BufferedUart<'d> { fn read_ready(&mut self) -> Result<bool, Self::Error> { - BufferedUartRx::<'d>::read_ready() + BufferedUartRx::<'d>::read_ready(&mut self.rx) } } impl<'d> embedded_io_async::ReadReady for BufferedUartRx<'d> { fn read_ready(&mut self) -> Result<bool, Self::Error> { - Self::read_ready() + Self::read_ready(self) } }