use ehatrom::{Eeprom, EepromHeader, GpioMapAtom, VendorInfoAtom};
fn main() {
let vendor_info = VendorInfoAtom::new(
0x0001, 0x0002, 0x0001, "Acme Corp",
"Test HAT",
[
0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66,
0x77, 0x88,
],
);
let gpio_map = GpioMapAtom {
flags: 0x0001,
pins: [0; 28], };
static CUSTOM_DATA: &[u8] = b"Hello, Bare Metal!";
#[cfg(not(feature = "alloc"))]
static CUSTOM_ATOMS: &[(u8, &[u8])] = &[(0x80, CUSTOM_DATA)];
#[cfg(feature = "alloc")]
let custom_atoms = vec![(0x80u8, CUSTOM_DATA.to_vec())];
let mut eeprom = Eeprom {
header: EepromHeader::new(),
vendor_info,
gpio_map_bank0: gpio_map,
dt_blob: None,
gpio_map_bank1: None,
#[cfg(feature = "alloc")]
custom_atoms,
#[cfg(not(feature = "alloc"))]
custom_atoms: CUSTOM_ATOMS,
};
eeprom.update_header();
let buffer_size = eeprom.calculate_serialized_size();
println!("Required buffer size: {buffer_size} bytes");
let mut buffer = vec![0u8; 512];
#[cfg(feature = "alloc")]
{
let serialized = eeprom.serialize();
println!("Serialized {} bytes using Vec", serialized.len());
}
let mut offset = 0;
match eeprom.serialize_to_buffer(&mut buffer, &mut offset) {
Ok(()) => {
println!("Successfully serialized {offset} bytes to buffer");
println!("First 16 bytes: {:02X?}", &buffer[..16.min(offset)]);
}
Err(e) => {
println!("Serialization failed: {e:?}");
}
}
println!("EEPROM structure:\n{eeprom}");
}