Recover from init fail

This commit was merged in pull request #46.
This commit is contained in:
2026-08-29 18:17:25 +02:00
parent 92c20d61cb
commit 282bcd163c
4 changed files with 58 additions and 36 deletions
+10 -10
View File
@@ -1,4 +1,3 @@
use alloc::boxed::Box;
use embedded_hal_bus::i2c::AtomicDevice;
use embedded_hal_bus::util::AtomicCell;
use esp_hal::gpio::interconnect::PeripheralInput;
@@ -21,18 +20,19 @@ where
SCL: PeripheralOutput<'a> + PeripheralInput<'a>,
SDA: PeripheralOutput<'a> + PeripheralInput<'a>,
{
pub fn build(self) -> I2cBus<'a> {
pub fn build(self) -> Result<AtomicCell<InnerI2cBus<'a>>, Self> {
let config = Config::default().with_frequency(esp_hal::time::Rate::from_khz(400));
let i2c = match I2c::new(self.i2c_peripheral, config) {
Ok(bus) => bus.with_sda(self.sda).with_scl(self.scl),
match I2c::new(self.i2c_peripheral, config) {
Ok(bus) => {
let i2c = bus.with_sda(self.sda).with_scl(self.scl);
log::info!("Shared I2C bus ready on GPIO17 (SDA) and GPIO18 (SCL)");
Ok(AtomicCell::new(i2c))
}
Err(e) => {
log::error!("Shared I2C bus initialization failed for GPIO17/GPIO18: {e:?}");
panic!("Shared I2C bus initialization failed");
unimplemented!("Partial move makes it impossible to retry.");
// Err(self)
}
};
let shared_i2c = Box::leak(Box::new(AtomicCell::new(i2c)));
log::info!("Shared I2C bus ready on GPIO17 (SDA) and GPIO18 (SCL)");
shared_i2c
}
}
}