autd3-rs-core 0.9.0

Core types and link abstraction shared across the AUTD3 phased-array sdk crates.
Documentation
use super::{RX_FRAME_BYTES, Seq};

#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct RxFrame {
    pub ack: Seq,
    pub data: u8,
}

const _: () = assert!(size_of::<RxFrame>() == RX_FRAME_BYTES);

impl RxFrame {
    #[must_use]
    pub const fn parse(src: &[u8; RX_FRAME_BYTES]) -> Self {
        Self {
            ack: Seq::new(src[0]),
            data: src[1],
        }
    }

    pub fn write_to(self, dst: &mut [u8; RX_FRAME_BYTES]) {
        dst[0] = self.ack.get();
        dst[1] = self.data;
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn rx_frame_round_trips() {
        let f = RxFrame {
            ack: Seq::new(0x42),
            data: 0x80,
        };
        let mut bytes = [0u8; RX_FRAME_BYTES];
        f.write_to(&mut bytes);
        assert_eq!(bytes, [0x42, 0x80]);
        assert_eq!(RxFrame::parse(&bytes), f);
    }
}