From cd403a91e6078956445aeb21d6509e863b0592ae Mon Sep 17 00:00:00 2001 From: Tomasz Kramkowski Date: Sun, 8 Dec 2024 12:01:31 +0000 Subject: Modify to use async A changeover from embedded_hal::i2c::I2c to embedded_hal_async::i2c::I2c including changes to all the relevant functions into async functions. Tests have been updated to work using futures-test and embedded-hal-mock with the embedded-hal-async feature. Examples have been kept the same meaning they no longer compile. Currently it doesn't _seem_ like the linux embedded hal can do async i2c so maybe these should be re-written to use embassy? --- src/devices/common.rs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'src/devices/common.rs') diff --git a/src/devices/common.rs b/src/devices/common.rs index 66a6d97..865d0c5 100644 --- a/src/devices/common.rs +++ b/src/devices/common.rs @@ -4,36 +4,40 @@ use crate::{devices::OperatingMode, Ads1x1x, BitFlags, Config, Error, Register}; impl Ads1x1x where - I2C: embedded_hal::i2c::I2c, + I2C: embedded_hal_async::i2c::I2c, { - pub(super) fn write_register(&mut self, register: u8, data: u16) -> Result<(), Error> { + pub(super) async fn write_register(&mut self, register: u8, data: u16) -> Result<(), Error> { let data = data.to_be_bytes(); let payload: [u8; 3] = [register, data[0], data[1]]; - self.i2c.write(self.address, &payload).map_err(Error::I2C) + self.i2c + .write(self.address, &payload) + .await + .map_err(Error::I2C) } - pub(super) fn read_register(&mut self, register: u8) -> Result> { + pub(super) async fn read_register(&mut self, register: u8) -> Result> { let mut data = [0, 0]; self.i2c .write_read(self.address, &[register], &mut data) + .await .map_err(Error::I2C) .and(Ok(u16::from_be_bytes(data))) } - pub(super) fn set_operating_mode(&mut self, mode: OperatingMode) -> Result<(), Error> { + pub(super) async fn set_operating_mode(&mut self, mode: OperatingMode) -> Result<(), Error> { let config = match mode { OperatingMode::OneShot => self.config.with_high(BitFlags::OP_MODE), OperatingMode::Continuous => self.config.with_low(BitFlags::OP_MODE), }; - self.write_register(Register::CONFIG, config.bits)?; + self.write_register(Register::CONFIG, config.bits).await?; self.config = config; Ok(()) } /// Checks whether a measurement is currently in progress. - pub fn is_measurement_in_progress(&mut self) -> Result> { + pub async fn is_measurement_in_progress(&mut self) -> Result> { let config = Config { - bits: self.read_register(Register::CONFIG)?, + bits: self.read_register(Register::CONFIG).await?, }; Ok(!config.is_high(BitFlags::OS)) } -- cgit v1.2.3-54-g00ecf