pixtend 0.1.0

Rust library for the PiXtend V2L board
Documentation
use deku::prelude::*;

#[derive(Debug, DekuWrite, DekuRead)]
pub struct State {
    pub error_code: ErrorCode,
    #[deku(pad_bits_before = "3")]
    #[deku(bits = "1")]
    pub run: bool,
}

#[derive(Debug, DekuWrite, DekuRead, PartialEq, Eq)]
#[deku(id_type = "u8", bits = "4")]
pub enum ErrorCode {
    #[deku(id = "0")]
    NoError,
    #[deku(id = "2")]
    DataCrcError,
    #[deku(id = "3")]
    DataBlockTooShort,
    #[deku(id = "4")]
    PiXtendModelMismatch,
    #[deku(id = "5")]
    HeaderCrcError,
    #[deku(id = "6")]
    SPIFrequencyTooHigh,
}

#[test]
fn test_state() {
    let data = [0b0000_0001];
    let (_, state) = State::from_bytes((data.as_ref(), 0)).unwrap();
    assert_eq!(state.error_code, ErrorCode::NoError);
    assert_eq!(state.run, true);
    assert_eq!(state.to_bytes().unwrap(), data);

    let data = [0b0110_0000];
    let (_, state) = State::from_bytes((data.as_ref(), 0)).unwrap();
    assert_eq!(state.error_code, ErrorCode::SPIFrequencyTooHigh);
    assert_eq!(state.run, false);
    assert_eq!(state.to_bytes().unwrap(), data);
}