bmx055 0.1.0

This is a platform agnostic Rust driver for the BMX055 small, versatile 9-axis sensor module: 3D accelerometer, 3D gyroscope and 3D magnetometer.
Documentation
use embedded_hal::blocking::delay::DelayMs;

use crate::{
    interface::{ReadData, WriteData},
    register_address::PwrCntl1M,
    types::MagOpMode,
    Bmx055, Error,
};

const MAG_START_UP_TIME_US: u32 = 3;

impl<DI, CommE, PinE, MODE> Bmx055<DI, MODE>
where
    DI: ReadData<Error = Error<CommE, PinE>> + WriteData<Error = Error<CommE, PinE>>,
{
    /// Bring to sleep mode
    #[inline]
    pub fn mag_to_sleep_mode<D: DelayMs<u32>>(
        &mut self,
        delay: &mut D,
    ) -> Result<(), Error<CommE, PinE>> {
        let reg = self.pwr_cntl_1_m | PwrCntl1M::POWER_CONTROL;
        self.iface.write_mag_register(reg)?;
        self.pwr_cntl_1_m = reg;
        delay.delay_ms(MAG_START_UP_TIME_US);
        Ok(())
    }

    /// Bring to op mode
    #[inline]
    pub fn mag_to_op_mode(&mut self, op_mode: MagOpMode) -> Result<(), Error<CommE, PinE>> {
        let reg = self.opm_odr_st_m.with_op_mode(op_mode);
        self.iface.write_mag_register(reg)?;
        self.opm_odr_st_m = reg;
        Ok(())
    }
}