From 775123467b0ce6e5daede0795493df9577077a09 Mon Sep 17 00:00:00 2001 From: Adam Greig Date: Fri, 19 Sep 2025 02:10:56 +0100 Subject: STM32: USART: Change eager_reads from bool to Option --- embassy-hal-internal/src/atomic_ring_buffer.rs | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'embassy-hal-internal') diff --git a/embassy-hal-internal/src/atomic_ring_buffer.rs b/embassy-hal-internal/src/atomic_ring_buffer.rs index 7de96e4e2..8c3889b85 100644 --- a/embassy-hal-internal/src/atomic_ring_buffer.rs +++ b/embassy-hal-internal/src/atomic_ring_buffer.rs @@ -133,6 +133,18 @@ impl RingBuffer { self.len.load(Ordering::Relaxed) } + /// Return number of items available to read. + pub fn available(&self) -> usize { + let end = self.end.load(Ordering::Relaxed); + let len = self.len.load(Ordering::Relaxed); + let start = self.start.load(Ordering::Relaxed); + if end >= start { + end - start + } else { + 2 * len - start + end + } + } + /// Check if buffer is full. pub fn is_full(&self) -> bool { let len = self.len.load(Ordering::Relaxed); @@ -144,15 +156,7 @@ impl RingBuffer { /// Check if buffer is at least half full. pub fn is_half_full(&self) -> bool { - let len = self.len.load(Ordering::Relaxed); - let start = self.start.load(Ordering::Relaxed); - let end = self.end.load(Ordering::Relaxed); - let n = if end >= start { - end - start - } else { - 2 * len - start + end - }; - n >= len / 2 + self.available() >= self.len.load(Ordering::Relaxed) / 2 } /// Check if buffer is empty. -- cgit