diff options
Diffstat (limited to 'embassy-hal-internal/src/atomic_ring_buffer.rs')
| -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. |
