can_aerospace_lite 0.1.0

A lite version of CAN Aerospace Implementation according to 'Interface specification for airborne CAN applications V 1.7'
Documentation
use can_aerospace_lite::{CANAerospaceLite, driver::CANAerospaceDriver, message::{CANAerospaceFrame, RawMessage}, types::{DataType, HardwareRevision, MessageType, SoftwareRevision}};

static mut COUNT: u32 = 0;

struct CANDriver;

impl CANAerospaceDriver for CANDriver {
    fn send_frame(&mut self, frame: CANAerospaceFrame) {
        println!("Send frame: {:#X?}", frame);
    }

    fn recv_frame(&mut self) -> Option<CANAerospaceFrame> {
        unsafe {
            return match COUNT {
                1 => Some(CANAerospaceFrame {
                    message_type: MessageType::NSH(128),
                    message: RawMessage::from([10, DataType::ULONG(0).type_id(), 2, 3, 0xBA, 0xBA, 0xDE, 0xDE]),
                }),
                0 => Some(CANAerospaceFrame {
                    message_type: MessageType::NOD(300),
                    message: RawMessage::from([0, DataType::BSHORT2(0,0).type_id(), 2, 3, 0xDE, 0xDE, 0xDE, 0xDE]),
                }),
                2 => Some(CANAerospaceFrame {
                    message_type: MessageType::UDH(200),
                    message: RawMessage::from([0, DataType::BSHORT2(0,0).type_id(), 2, 3, 0xA, 0xB, 0xC, 0xD]),
                }),
                3 => Some(CANAerospaceFrame {
                    message_type: MessageType::NSH(128),
                    message: RawMessage::from([10, DataType::NODATA.type_id(), 0, 3, 0xFB, 0xFB, 0xDE, 0xDE]),
                }),
                _ => None
            }
        }
    }
}

fn main() {
    let mut can_aerospace: CANAerospaceLite<CANDriver> = CANAerospaceLite::new(10, CANDriver{});
    can_aerospace.set_hw_revision(HardwareRevision(0x02));
    can_aerospace.set_sw_revision(SoftwareRevision(0x01));

    can_aerospace.notify_receive_event();
    unsafe { COUNT += 1; }
    can_aerospace.notify_receive_event();
    unsafe { COUNT += 1; }
    can_aerospace.notify_receive_event();
    unsafe { COUNT += 1; }
    can_aerospace.notify_receive_event();
    can_aerospace.notify_receive_event();

    let mut message = can_aerospace.read_message().unwrap();
    assert_eq!(message.message_type.id(), MessageType::NOD(300).id());
    println!("Message {:#X?}", message);
    message.message_type = MessageType::NSH(message.message_type.id() + 1);
    message.data = DataType::ULONG(0xDEAD_BEEF);
    can_aerospace.send_message(message);

    message = can_aerospace.read_message().unwrap();
    println!("Message {:#X?}", message);
    message = can_aerospace.read_message().unwrap();
    println!("Message {:#X?}", message);

}