From a7972107a64024892cd1dcf562a19c62156ebb82 Mon Sep 17 00:00:00 2001 From: "Sikkema, Isaac" Date: Fri, 7 Jul 2023 15:00:13 -0400 Subject: [PATCH 1/2] Add `destroy()` to `Bme680` --- src/lib.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 61e007a..54de8dc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -503,6 +503,10 @@ where } } + pub fn destroy(self) -> I2C { + self.i2c + } + fn bme680_set_regs( &mut self, reg: &[(u8, u8)], From e0748fe5c2f0a25262e8f8bba21f18ac902c5ad9 Mon Sep 17 00:00:00 2001 From: "Sikkema, Isaac" Date: Fri, 7 Jul 2023 15:45:03 -0400 Subject: [PATCH 2/2] Pass back I2C dev on init error --- src/lib.rs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 54de8dc..17146db 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -474,17 +474,28 @@ where mut i2c: I2C, delay: &mut D, dev_id: I2CAddress, - ) -> Result, ::Error, ::Error> { - Bme680::soft_reset(&mut i2c, delay, dev_id)?; + ) -> result::Result, (Error<::Error, ::Error>, I2C)> + { + if let Err(e) = Bme680::soft_reset(&mut i2c, delay, dev_id) { + return Err((e, i2c)); + } debug!("Reading chip id"); /* Soft reset to restore it to default values*/ - let chip_id = I2CUtil::read_byte::(&mut i2c, dev_id.addr(), BME680_CHIP_ID_ADDR)?; + let chip_id = match I2CUtil::read_byte::(&mut i2c, dev_id.addr(), BME680_CHIP_ID_ADDR) + { + Ok(chip_id) => chip_id, + Err(e) => return Err((e, i2c)), + }; + debug!("Chip id: {}", chip_id); if chip_id == BME680_CHIP_ID { debug!("Reading calib data"); - let calib = Bme680::::get_calib_data::(&mut i2c, dev_id)?; + let calib = match Bme680::::get_calib_data::(&mut i2c, dev_id) { + Ok(calib) => calib, + Err(e) => return Err((e, i2c)), + }; debug!("Calib data {:?}", calib); let dev = Bme680 { i2c, @@ -499,7 +510,7 @@ where Ok(dev) } else { error!("Device does not match chip id {}", BME680_CHIP_ID); - Err(Error::DeviceNotFound) + Err((Error::DeviceNotFound, i2c)) } }