Purpose
Create a glue function and make it callable by a macro
Assumed interface
pub fn init_and_log<I2C, W>(
i2c: &mut I2C,
serial: &mut W,
addr: u8,
init_sequence: &[u8],
) where
I2C: crate::compat::I2cCompat,
W: core::fmt::Write,
<I2C as crate::compat::I2cCompat>::Error: crate::compat::HalErrorExt,
{
let _ = writeln!(serial, "[init] Sending init sequence to 0x{:02X}...", addr);
for &cmd in init_sequence {
let buffer = [0x00, cmd]; // control byte + command
match i2c.write(addr, &buffer) {
Ok(_) => {
let _ = writeln!(serial, "[ok] Sent 0x{:02X}", cmd);
}
Err(e) => {
let _ = writeln!(serial, "[error] Failed 0x{:02X}: {}", cmd, e.to_compat(Some(addr)));
}
}
}
let _ = writeln!(serial, "[done] Init sequence finished for 0x{:02X}", addr);
}
#[macro_export]
macro_rules! i2c_init_sequence {
($i2c:expr, $serial:expr, $addr:expr, $seq:expr) => {
$crate::scanner::init_and_log($i2c, $serial, $addr, $seq)
};
}
Purpose
Create a glue function and make it callable by a macro
Assumed interface