tmp1x2 1.1.0

Platform-agnostic Rust driver for the TMP102 and TMP112 digital temperature sensors.
Documentation
use crate::RegisterU16;
use crate::{Config, Error, Register, Tmp1x2};
#[cfg(not(feature = "async"))]
use embedded_hal::i2c::I2c;
#[cfg(feature = "async")]
use embedded_hal_async::i2c::I2c as AsyncI2c;

#[maybe_async_cfg::maybe(
    sync(
        cfg(not(feature = "async")),
        self = "Tmp1x2",
        idents(AsyncI2c(sync = "I2c"))
    ),
    async(feature = "async", keep_self)
)]
impl<I2C, E, MODE> Tmp1x2<I2C, MODE>
where
    I2C: AsyncI2c<Error = E>,
{
    pub(crate) async fn write_config(&mut self, data: Config) -> Result<(), Error<E>> {
        self.write_register(Register::CONFIG, data.clone()).await?;
        self.config = data;
        Ok(())
    }

    pub(crate) async fn write_register(
        &mut self,
        register: u8,
        data: RegisterU16,
    ) -> Result<(), Error<E>> {
        self.i2c
            .write(self.address, &[register, data.msb, data.lsb])
            .await
            .map_err(Error::I2C)
    }

    pub(crate) async fn read_register_u16(
        &mut self,
        register: u8,
    ) -> Result<RegisterU16, Error<E>> {
        let mut data = [0; 2];
        self.i2c
            .write_read(self.address, &[register], &mut data)
            .await
            .map_err(Error::I2C)?;
        Ok(RegisterU16 {
            msb: data[0],
            lsb: data[1],
        })
    }
}