use i2c::{BulkTransfer, Message};
type Result<T> = std::result::Result<T, Box<dyn std::error::Error>>;
pub fn main() -> Result<()> {
let mut bus = i2c_tiny_usb::I2c::open_single_device()?;
println!(" 0 1 2 3 4 5 6 7 8 9 a b c d e f");
print!("00: ");
for address in 0x03..=0x77 {
let result = bus.i2c_transfer(&mut [Message::Read {
address,
data: &mut [],
flags: Default::default(),
}]);
match result {
Ok(()) => print!("{:02x}", address),
Err(i2c_tiny_usb::Error::Nack) => print!("--"),
Err(_) => print!("EE"),
}
if address & 0x0f == 0x0f {
println!();
print!("{:02x}: ", address + 1);
} else {
print!(" ");
}
}
println!();
Ok(())
}