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>>,
{
#[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(())
}
#[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(())
}
}