1#[cfg(feature = "defmt-03")]
2use defmt_03 as defmt;
3
4#[derive(Copy, Clone, Debug, Eq, PartialEq)]
5#[cfg_attr(feature = "defmt-03", derive(defmt::Format))]
6#[repr(u8)]
7pub enum PowerDownMode {
9 Normal = 0b00,
11 OneK = 0b01,
13 OneHundredK = 0b10,
15 FiveHundredK = 0b11,
17}
18
19#[derive(Copy, Clone, Debug)]
20#[cfg_attr(feature = "defmt-03", derive(defmt::Format))]
21pub struct RegisterStatus {
23 data: u8,
25 dac: u16,
27}
28
29impl RegisterStatus {
30 pub(crate) fn new(data: [u8; 3]) -> Self {
31 let dac = u16::from_be_bytes([data[1], data[2]]);
32 Self {
33 data: data[0],
34 dac: dac >> 4,
35 }
36 }
37
38 #[inline(always)]
40 pub fn read_data(&self) -> u8 {
41 self.data
42 }
43
44 #[inline(always)]
48 pub fn eeprom_ready(&self) -> bool {
49 self.data & 0b1000_0000 != 0
50 }
51
52 #[inline(always)]
54 pub fn por(&self) -> bool {
55 self.data & 0b0100_0000 != 0
56 }
57
58 #[inline(always)]
60 pub fn power_down_mode(&self) -> PowerDownMode {
61 match (self.data & 0b0000_0110) >> 1 {
62 0b00 => PowerDownMode::Normal,
63 0b01 => PowerDownMode::OneK,
64 0b10 => PowerDownMode::OneHundredK,
65 0b11 => PowerDownMode::FiveHundredK,
66 _ => unreachable!(), }
68 }
69
70 #[inline(always)]
72 pub fn dac(&self) -> u16 {
73 self.dac
74 }
75}
76
77#[derive(Copy, Clone, Debug)]
78#[cfg_attr(feature = "defmt-03", derive(defmt::Format))]
79pub struct EEPROMStatus {
81 power_down_mode: PowerDownMode,
82 dac: u16,
83}
84
85impl EEPROMStatus {
86 pub(crate) fn new(data: [u8; 2]) -> Self {
87 let power_down_mode = match (data[0] & 0b0110_0000) >> 5 {
88 0b00 => PowerDownMode::Normal,
89 0b01 => PowerDownMode::OneK,
90 0b10 => PowerDownMode::OneHundredK,
91 0b11 => PowerDownMode::FiveHundredK,
92 _ => unreachable!(), };
94 let dac = u16::from_be_bytes(data) & 0xFFF;
95
96 Self { power_down_mode, dac }
97 }
98
99 #[inline(always)]
101 pub fn power_down_mode(&self) -> PowerDownMode {
102 self.power_down_mode
103 }
104
105 #[inline(always)]
107 pub fn dac(&self) -> u16 {
108 self.dac
109 }
110}