1#![allow(non_camel_case_types)]
2
3#[derive(Copy, Clone, Debug)]
4pub enum Range {
5 _2G = 0b01,
6 _4G = 0b10,
7 _8G = 0b11,
8}
9
10impl Range {
11 pub fn val(self) -> u8 {
12 self as u8
13 }
14}
15
16impl From<Range> for f32 {
17 fn from(range: Range) -> f32 {
18 match range {
19 Range::_2G => 2.0,
20 Range::_4G => 4.0,
21 Range::_8G => 8.0,
22 }
23 }
24}
25
26impl Default for Range {
27 fn default() -> Self {
28 Range::_2G
29 }
30}
31
32#[derive(Copy, Clone, Debug)]
33pub enum ODR_LPF {
35 ODR_4000_Hz = 0,
37 ODR_2000_Hz = 1,
39 ODR_1000_Hz = 2,
41 ODR_500_Hz = 3,
43 ODR_250_Hz = 4,
45 ODR_125_Hz = 5,
47 ODR_62_5_Hz = 6,
49 ODR_31_25_Hz = 7,
51 ODR_15_625_Hz = 8,
53 ODR_7_813_Hz = 9,
55 ODR_3_906_Hz = 10,
57}
58
59impl ODR_LPF {
60 pub fn val(self) -> u8 {
61 self as u8
62 }
63}
64
65impl From<ODR_LPF> for f32 {
66 fn from(rate: ODR_LPF) -> f32 {
67 match rate {
68 ODR_LPF::ODR_4000_Hz => 4000.0,
69 ODR_LPF::ODR_2000_Hz => 2000.0,
70 ODR_LPF::ODR_1000_Hz => 1000.0,
71 ODR_LPF::ODR_500_Hz => 500.0,
72 ODR_LPF::ODR_250_Hz => 250.0,
73 ODR_LPF::ODR_125_Hz => 125.0,
74 ODR_LPF::ODR_62_5_Hz => 62.5,
75 ODR_LPF::ODR_31_25_Hz => 31.25,
76 ODR_LPF::ODR_15_625_Hz => 15.625,
77 ODR_LPF::ODR_7_813_Hz => 7.813,
78 ODR_LPF::ODR_3_906_Hz => 3.906,
79 }
80 }
81}
82
83impl Default for ODR_LPF {
84 fn default() -> Self {
85 ODR_LPF::ODR_3_906_Hz
86 }
87}
88
89#[derive(Copy, Clone, Debug)]
90pub enum HPF_CORNER {
92 NONE = 0,
94 _247_ODR = 1,
96 _62_084_ODR = 2,
98 _15_545_ODR = 3,
100 _3_862_ODR = 4,
102 _0_954_ODR = 5,
104 _0_238_ODR = 6
106}
107
108impl HPF_CORNER {
109 pub fn val(self) -> u8 {
110 self as u8
111 }
112}
113
114impl Default for HPF_CORNER {
115 fn default() -> Self {
116 HPF_CORNER::NONE
117 }
118}
119
120pub struct Config {
121 pub(crate) range: Option<Range>,
122 pub(crate) odr: Option<ODR_LPF>,
123 pub(crate) hpf: Option<HPF_CORNER>
124}
125
126impl Config {
128
129 pub fn new() -> Self {
131 Config {
132 range: None,
133 odr: None,
134 hpf: None
135 }
136 }
137
138 pub fn range(&mut self, range: Range) -> &mut Self {
141 self.range = Some(range);
142 self
143 }
144
145 pub fn odr(&mut self, odr: ODR_LPF) -> &mut Self {
149 self.odr = Some(odr);
150 self
151 }
152
153 pub fn hpf(&mut self, hpf: HPF_CORNER) -> &mut Self {
157 self.hpf = Some(hpf);
158 self
159 }
160}