diff --git a/src/structures/mod.rs b/src/structures/mod.rs index 5fcb102..de9ddda 100644 --- a/src/structures/mod.rs +++ b/src/structures/mod.rs @@ -1 +1,49 @@ -pub mod ring_buffer; +use arduino_hal::port::PinOps; + +use static_pins::StaticPinOps; + +use crate::{ + HalfDuplexSerial, SoftSerialByteReader, SoftSerialByteWriter, SoftSerialReader, + SoftSerialWriter, +}; + +#[cfg(feature = "ring-buf")] +pub mod ring_buf { + use super::*; + use ring_buffer::RingBuffer; + + impl SoftSerialWriter> for HalfDuplexSerial

+ where + P: PinOps + StaticPinOps, + { + #[inline(never)] + fn write_bytes(&self, transmit_data: &mut RingBuffer) { + self.write_byte(transmit_data.len() as u8); + + for byte in transmit_data { + self.sync_transmitter(); + self.write_byte(byte); + } + } + } + + impl SoftSerialReader> for HalfDuplexSerial

+ where + P: PinOps + StaticPinOps, + { + #[inline(never)] + fn read_bytes(&self, recieve_data: &mut RingBuffer) { + let byte = 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); + } + } + } + } + } +} diff --git a/src/structures/ring_buffer.rs b/src/structures/ring_buffer.rs deleted file mode 100644 index 2af8c9f..0000000 --- a/src/structures/ring_buffer.rs +++ /dev/null @@ -1,48 +0,0 @@ -// Thanks to Low Byte Productions, I like this channel. -// Youtube: https://www.youtube.com/watch?v=uIJnATS9j_0 - -use arduino_hal::port::PinOps; -use ring_buffer::RingBuffer; -use static_pins::StaticPinOps; - -use crate::{ - HalfDuplexSerial, SoftSerialByteReader, SoftSerialByteWriter, SoftSerialReader, - SoftSerialWriter, -}; - -#[cfg(feature = "ring-buf")] -impl SoftSerialWriter> for HalfDuplexSerial

-where - P: PinOps + StaticPinOps, -{ - #[inline(never)] - fn write_bytes(&self, transmit_data: &mut RingBuffer) { - self.write_byte(transmit_data.len() as u8); - - for byte in transmit_data { - self.sync_transmitter(); - self.write_byte(byte); - } - } -} - -#[cfg(feature = "ring-buf")] -impl SoftSerialReader> for HalfDuplexSerial

-where - P: PinOps + StaticPinOps, -{ - #[inline(never)] - fn read_bytes(&self, recieve_data: &mut RingBuffer) { - let byte = 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); - } - } - } - } -}