feat(ringbuf): stabilize data streaming for ringbuffer

This commit is contained in:
doryan 2025-08-16 22:14:57 +04:00
parent 3e0b1a8451
commit fee9ff945f

View File

@ -9,6 +9,8 @@ use crate::{
#[cfg(feature = "ring-buf")] #[cfg(feature = "ring-buf")]
pub mod ring_buf { pub mod ring_buf {
use crate::CorruptedData;
use super::*; use super::*;
use ring_buffer::RingBuffer; use ring_buffer::RingBuffer;
@ -16,7 +18,7 @@ pub mod ring_buf {
where where
P: PinOps + StaticPinOps, P: PinOps + StaticPinOps,
{ {
#[inline(never)] #[inline(always)]
fn write_bytes(&self, transmit_data: &mut RingBuffer<N>) { fn write_bytes(&self, transmit_data: &mut RingBuffer<N>) {
self.write_byte(transmit_data.len() as u8); self.write_byte(transmit_data.len() as u8);
@ -24,6 +26,8 @@ pub mod ring_buf {
self.sync_transmitter(); self.sync_transmitter();
self.write_byte(byte); self.write_byte(byte);
} }
self.sync_transmitter();
} }
} }
@ -31,19 +35,18 @@ pub mod ring_buf {
where where
P: PinOps + StaticPinOps, P: PinOps + StaticPinOps,
{ {
#[inline(never)] #[inline(always)]
fn read_bytes(&self, recieve_data: &mut RingBuffer<N>) { fn read_bytes(&self, recieve_data: &mut RingBuffer<N>) -> Result<(), CorruptedData> {
let byte = self.read_byte(); let len = self.read_byte()?;
if let Ok(len) = byte { for _ in 0..len {
for _ in 0..len { self.sync_reciever();
self.sync_reciever(); recieve_data.push(self.read_byte()?);
if let Ok(byte) = self.read_byte() {
recieve_data.push(byte);
}
}
} }
self.sync_reciever();
Ok(())
} }
} }
} }