#[cfg(feature = "defmt-03")]
use defmt_03 as defmt;
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "defmt-03", derive(defmt::Format))]
#[repr(u8)]
pub enum PowerDownMode {
Normal = 0b00,
OneK = 0b01,
OneHundredK = 0b10,
FiveHundredK = 0b11,
}
#[derive(Copy, Clone, Debug)]
#[cfg_attr(feature = "defmt-03", derive(defmt::Format))]
pub struct RegisterStatus {
data: u8,
dac: u16,
}
impl RegisterStatus {
pub(crate) fn new(data: [u8; 3]) -> Self {
let dac = u16::from_be_bytes([data[1], data[2]]);
Self {
data: data[0],
dac: dac >> 4,
}
}
#[inline(always)]
pub fn read_data(&self) -> u8 {
self.data
}
#[inline(always)]
pub fn eeprom_ready(&self) -> bool {
self.data & 0b1000_0000 != 0
}
#[inline(always)]
pub fn por(&self) -> bool {
self.data & 0b0100_0000 != 0
}
#[inline(always)]
pub fn power_down_mode(&self) -> PowerDownMode {
match (self.data & 0b0000_0110) >> 1 {
0b00 => PowerDownMode::Normal,
0b01 => PowerDownMode::OneK,
0b10 => PowerDownMode::OneHundredK,
0b11 => PowerDownMode::FiveHundredK,
_ => unreachable!(), }
}
#[inline(always)]
pub fn dac(&self) -> u16 {
self.dac
}
}
#[derive(Copy, Clone, Debug)]
#[cfg_attr(feature = "defmt-03", derive(defmt::Format))]
pub struct EEPROMStatus {
power_down_mode: PowerDownMode,
dac: u16,
}
impl EEPROMStatus {
pub(crate) fn new(data: [u8; 2]) -> Self {
let power_down_mode = match (data[0] & 0b0110_0000) >> 5 {
0b00 => PowerDownMode::Normal,
0b01 => PowerDownMode::OneK,
0b10 => PowerDownMode::OneHundredK,
0b11 => PowerDownMode::FiveHundredK,
_ => unreachable!(), };
let dac = u16::from_be_bytes(data) & 0xFFF;
Self { power_down_mode, dac }
}
#[inline(always)]
pub fn power_down_mode(&self) -> PowerDownMode {
self.power_down_mode
}
#[inline(always)]
pub fn dac(&self) -> u16 {
self.dac
}
}