pixtend 0.1.0

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

#[derive(Debug, DekuRead, DekuWrite, Default)]
pub struct System {
    #[deku(pad_bits_before = "3")]
    #[deku(bits = "1")]
    pub gpio_pullup_enable: bool,
    #[deku(bits = "1")]
    pub led_disable: bool,
    #[deku(bits = "1")]
    pub retain_enable: bool,
    #[deku(bits = "1")]
    pub retain_copy: bool,
    #[deku(bits = "1")]
    pub safe: bool,
}

#[test]
fn test_system_control() {
    let data = [0b0101_0101];
    let (_, system_control) = System::from_bytes((&data, 0)).unwrap();
    assert_eq!(system_control.safe, true);
    assert_eq!(system_control.retain_copy, false);
    assert_eq!(system_control.retain_enable, true);
    assert_eq!(system_control.led_disable, false);
    assert_eq!(system_control.gpio_pullup_enable, true);

    let data = [0b1010_1010];
    let (_, system_control) = System::from_bytes((&data, 0)).unwrap();
    assert_eq!(system_control.safe, false);
    assert_eq!(system_control.retain_copy, true);
    assert_eq!(system_control.retain_enable, false);
    assert_eq!(system_control.led_disable, true);
    assert_eq!(system_control.gpio_pullup_enable, false);

    let data = [0b0000_1111];
    let (_, system_control) = System::from_bytes((&data, 0)).unwrap();
    assert_eq!(system_control.safe, true);
    assert_eq!(system_control.retain_copy, true);
    assert_eq!(system_control.retain_enable, true);
    assert_eq!(system_control.led_disable, true);
    assert_eq!(system_control.gpio_pullup_enable, false);

    let system_control = System {
        gpio_pullup_enable: true,
        led_disable: false,
        retain_enable: true,
        retain_copy: true,
        safe: true,
    };
    let data = system_control.to_bytes().unwrap();
    assert_eq!(data, [0b00010111]);
}