diff options
| author | Adam Greig <[email protected]> | 2025-09-19 02:10:56 +0100 |
|---|---|---|
| committer | Adam Greig <[email protected]> | 2025-10-01 21:11:09 +0100 |
| commit | 775123467b0ce6e5daede0795493df9577077a09 (patch) | |
| tree | 4bceb093dc9f367a233c4ea6638499bda9410366 /embassy-hal-internal | |
| parent | ef06ff43a14fd016d271c491bd830823ee96b740 (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.rs | 22 |
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. |
