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)
     }
 }