aboutsummaryrefslogtreecommitdiff
path: root/embassy-hal-internal
diff options
context:
space:
mode:
authorAdam Greig <[email protected]>2025-09-19 02:10:56 +0100
committerAdam Greig <[email protected]>2025-10-01 21:11:09 +0100
commit775123467b0ce6e5daede0795493df9577077a09 (patch)
tree4bceb093dc9f367a233c4ea6638499bda9410366 /embassy-hal-internal
parentef06ff43a14fd016d271c491bd830823ee96b740 (diff)
STM32: USART: Change eager_reads from bool to Option<usize>
Diffstat (limited to 'embassy-hal-internal')
-rw-r--r--embassy-hal-internal/src/atomic_ring_buffer.rs22
1 files changed, 13 insertions, 9 deletions
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 {
133 self.len.load(Ordering::Relaxed) 133 self.len.load(Ordering::Relaxed)
134 } 134 }
135 135
136 /// Return number of items available to read.
137 pub fn available(&self) -> usize {
138 let end = self.end.load(Ordering::Relaxed);
139 let len = self.len.load(Ordering::Relaxed);
140 let start = self.start.load(Ordering::Relaxed);
141 if end >= start {
142 end - start
143 } else {
144 2 * len - start + end
145 }
146 }
147
136 /// Check if buffer is full. 148 /// Check if buffer is full.
137 pub fn is_full(&self) -> bool { 149 pub fn is_full(&self) -> bool {
138 let len = self.len.load(Ordering::Relaxed); 150 let len = self.len.load(Ordering::Relaxed);
@@ -144,15 +156,7 @@ impl RingBuffer {
144 156
145 /// Check if buffer is at least half full. 157 /// Check if buffer is at least half full.
146 pub fn is_half_full(&self) -> bool { 158 pub fn is_half_full(&self) -> bool {
147 let len = self.len.load(Ordering::Relaxed); 159 self.available() >= self.len.load(Ordering::Relaxed) / 2
148 let start = self.start.load(Ordering::Relaxed);
149 let end = self.end.load(Ordering::Relaxed);
150 let n = if end >= start {
151 end - start
152 } else {
153 2 * len - start + end
154 };
155 n >= len / 2
156 } 160 }
157 161
158 /// Check if buffer is empty. 162 /// Check if buffer is empty.