libscd 0.5.1

Rust drivers for various SCD devices such as scd30 and scd4x CO2 sensors
Documentation
use crate::error::Error;
use crate::internal::common::{assert_chunked_with_len3, crc8_verify_chunked_3};
use embedded_hal_async::i2c::I2c;

pub(crate) async fn i2c_read<E, I2C: I2c<Error = E>>(
    i2c: &mut I2C,
    i2c_addr: u8,
    read_buf: &mut [u8],
) -> Result<(), Error<E>> {
    assert_chunked_with_len3(read_buf);

    i2c.read(i2c_addr, read_buf)
        .await
        .map_err(|e| Error::I2C(e))?;

    if !crc8_verify_chunked_3(read_buf) {
        return Err(Error::CRC);
    }

    Ok(())
}

pub(crate) async fn i2c_write<E, I2C: I2c<Error = E>>(
    i2c: &mut I2C,
    i2c_addr: u8,
    payload: &[u8],
) -> Result<(), Error<E>> {
    i2c.write(i2c_addr, payload)
        .await
        .map_err(|e| Error::I2C(e))?;

    Ok(())
}