use crate::registers::{Axis, Read, Register};
use crate::Stk8ba58;
use bitflags::Flags;
use core::fmt::Debug;
use embedded_hal::i2c::I2c;
impl<I2C, E> Read<I2C, E> for Stk8ba58<I2C>
where
I2C: I2c<Error = E>,
E: Debug,
{
fn chip_id(&mut self) -> Result<u8, E> {
let mut buf = [0u8];
self.read_register(Register::CHIP_ID, &mut buf)?;
Ok(buf[0])
}
fn axis_lsb(&mut self, axis: &Axis) -> Result<u8, E> {
let mut buf = [0];
let register = match axis {
Axis::X => Register::XOUT1,
Axis::Y => Register::YOUT1,
Axis::Z => Register::ZOUT1,
};
self.read_register(register, &mut buf)?;
Ok(buf[0] & 0b1111_0000) }
fn axis_msb(&mut self, axis: &Axis) -> Result<u8, E> {
let mut buf = [0];
let register = match axis {
Axis::X => Register::XOUT2,
Axis::Y => Register::YOUT2,
Axis::Z => Register::ZOUT2,
};
self.read_register(register, &mut buf)?;
Ok(buf[0])
}
fn axis_newdata(&mut self, axis: &Axis) -> Result<bool, E> {
let mut buf = [0];
let register = match axis {
Axis::X => Register::XOUT1,
Axis::Y => Register::YOUT1,
Axis::Z => Register::ZOUT1,
};
self.read_register(register, &mut buf)?;
Ok((buf[0] & 0b1) == 0b1)
}
fn read_mode<M: From<u8> + Into<Register>>(&mut self, mode: M) -> Result<M, E> {
let mut buf = [0u8];
self.read_register(mode.into(), &mut buf)?;
Ok(buf[0].into())
}
fn read_flags<F: Flags<Bits = u8> + Into<Register>>(&mut self, flags: F) -> Result<F, E> {
let mut buf = [0u8];
self.read_register(flags.into(), &mut buf)?;
Ok(F::from_bits_truncate(buf[0]))
}
}