Skip to content

Combine explorer to scanner #97

Description

@p14c31355

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)
    };
}

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions