From fee9ff945f8f4020fc8d9985bf0dde011d7b244a Mon Sep 17 00:00:00 2001 From: doryan Date: Sat, 16 Aug 2025 22:14:57 +0400 Subject: [PATCH] feat(ringbuf): stabilize data streaming for ringbuffer --- src/structures/mod.rs | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/structures/mod.rs b/src/structures/mod.rs index de9ddda..d75816e 100644 --- a/src/structures/mod.rs +++ b/src/structures/mod.rs @@ -9,6 +9,8 @@ use crate::{ #[cfg(feature = "ring-buf")] pub mod ring_buf { + use crate::CorruptedData; + use super::*; use ring_buffer::RingBuffer; @@ -16,7 +18,7 @@ pub mod ring_buf { where P: PinOps + StaticPinOps, { - #[inline(never)] + #[inline(always)] fn write_bytes(&self, transmit_data: &mut RingBuffer) { self.write_byte(transmit_data.len() as u8); @@ -24,6 +26,8 @@ pub mod ring_buf { self.sync_transmitter(); self.write_byte(byte); } + + self.sync_transmitter(); } } @@ -31,19 +35,18 @@ pub mod ring_buf { where P: PinOps + StaticPinOps, { - #[inline(never)] - fn read_bytes(&self, recieve_data: &mut RingBuffer) { - let byte = self.read_byte(); + #[inline(always)] + fn read_bytes(&self, recieve_data: &mut RingBuffer) -> Result<(), CorruptedData> { + let len = self.read_byte()?; - if let Ok(len) = byte { - for _ in 0..len { - self.sync_reciever(); - - if let Ok(byte) = self.read_byte() { - recieve_data.push(byte); - } - } + for _ in 0..len { + self.sync_reciever(); + recieve_data.push(self.read_byte()?); } + + self.sync_reciever(); + + Ok(()) } } }