use core::fmt;
use crate::Register;
#[derive(Debug)]
pub struct CfgRegB(u8);
impl fmt::Display for CfgRegB {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.0)
}
}
impl fmt::Binary for CfgRegB {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{:b}", self.0)
}
}
impl fmt::LowerHex for CfgRegB {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::LowerHex::fmt(&self.0, f)
}
}
pub const ADDR: u8 = 0x61u8;
const OFF_CANC_ONE_SHOT: u8 = 4;
const INT_ON_DATAOFF: u8 = 3;
const SET_FREQ: u8 = 2;
const OFF_CANC: u8 = 1;
const LPF: u8 = 0;
impl Register for CfgRegB {}
impl CfgRegB {
pub fn new(bits: u8) -> Self {
CfgRegB(bits)
}
pub fn value<I2C>(&mut self, i2c: &mut I2C) -> Result<u8, I2C::Error>
where
I2C: embedded_hal::i2c::I2c,
{
self.read(i2c, ADDR)
}
pub fn off_canc_one_shot(&mut self) -> bool {
self.0 & (1 << OFF_CANC_ONE_SHOT) != 0
}
pub fn set_off_canc_one_shot<I2C>(
&mut self,
i2c: &mut I2C,
value: bool,
) -> Result<(), I2C::Error>
where
I2C: embedded_hal::i2c::I2c,
{
self.0 &= !(1 << OFF_CANC_ONE_SHOT);
self.0 |= (value as u8) << OFF_CANC_ONE_SHOT;
self.write(i2c, ADDR, self.0)
}
pub fn int_on_dataoff(&mut self) -> bool {
self.0 & (1 << INT_ON_DATAOFF) != 0
}
pub fn set_int_on_dataoff<I2C>(&mut self, i2c: &mut I2C, value: bool) -> Result<(), I2C::Error>
where
I2C: embedded_hal::i2c::I2c,
{
self.0 &= !(1 << INT_ON_DATAOFF);
self.0 |= (value as u8) << INT_ON_DATAOFF;
self.write(i2c, ADDR, self.0)
}
pub fn set_freq(&mut self) -> bool {
self.0 & (1 << SET_FREQ) != 0
}
pub fn set_set_freq<I2C>(&mut self, i2c: &mut I2C, value: bool) -> Result<(), I2C::Error>
where
I2C: embedded_hal::i2c::I2c,
{
self.0 &= !(1 << SET_FREQ);
self.0 |= (value as u8) << SET_FREQ;
self.write(i2c, ADDR, self.0)
}
pub fn off_canc(&mut self) -> bool {
self.0 & (1 << OFF_CANC) != 0
}
pub fn set_off_canc<I2C>(&mut self, i2c: &mut I2C, value: bool) -> Result<(), I2C::Error>
where
I2C: embedded_hal::i2c::I2c,
{
self.0 &= !(1 << OFF_CANC);
self.0 |= (value as u8) << OFF_CANC;
self.write(i2c, ADDR, self.0)
}
pub fn lpf(&mut self) -> bool {
self.0 & (1 << LPF) != 0
}
pub fn set_lpf<I2C>(&mut self, i2c: &mut I2C, value: bool) -> Result<(), I2C::Error>
where
I2C: embedded_hal::i2c::I2c,
{
self.0 &= !(1 << LPF);
self.0 |= (value as u8) << LPF;
self.write(i2c, ADDR, self.0)
}
}