extern crate ccsds_primary_header;
use ccsds_primary_header::primary_header::*;
fn main() {
let bytes : [u8;6] = [ 0x18, 0x10, 0xC0, 0x01, 0x00, 0x03 ];
println!("starting bytes {:02X} {:02X} {:02X} {:02X} {:02X} {:02X}",
bytes[0], bytes[1], bytes[2],
bytes[3], bytes[4], bytes[5]);
unsafe {
let pri_header = std::mem::transmute::<[u8;6], PrimaryHeader>(bytes);
let pri_header_new = PrimaryHeader::new(bytes);
assert!(pri_header == pri_header_new);
assert!(pri_header.control.version() == 0);
assert!(pri_header.control.packet_type() == PacketType::Command);
assert!(pri_header.control.secondary_header_flag() == SecondaryHeaderFlag::Present);
assert!(pri_header.control.apid() == 16);
assert!(pri_header.sequence.sequence_type() == SeqFlag::Unsegmented);
assert!(pri_header.sequence.sequence_count() == 1);
assert!(pri_header.length.length_field() == 3);
assert!(pri_header.packet_length() == 10);
}
let mut pri_header : PrimaryHeader = Default::default();
pri_header.control.set_version(0);
pri_header.control.set_packet_type(PacketType::Command);
pri_header.control.set_secondary_header_flag(SecondaryHeaderFlag::Present);
pri_header.control.set_apid(16);
pri_header.sequence.set_sequence_type(SeqFlag::Unsegmented);
pri_header.sequence.set_sequence_count(1);
pri_header.length.set_length_field(3);
unsafe {
let bytes : [u8;6] = std::mem::transmute::<PrimaryHeader, [u8;6]>(pri_header);
println!("ending bytes {:02X} {:02X} {:02X} {:02X} {:02X} {:02X}",
bytes[0], bytes[1], bytes[2],
bytes[3], bytes[4], bytes[5]);
}
}