niva_components/
calibration.rs1use num::traits::NumOps;
2
3#[derive(Debug, Clone, Copy, PartialEq)]
4#[cfg_attr(feature = "defmt", derive(defmt::Format))]
5pub struct QuadCalibrationData<T> {
6 pub quad_gain: T,
7 pub gain: T,
8 pub bias: T
9}
10
11impl<T> QuadCalibrationData<T>
12where
13 T: NumOps + Copy
14{
15 pub fn calibrate(&self, value: T) -> T {
16 self.quad_gain * value * value + self.gain * value + self.bias
17 }
18}
19
20impl Default for QuadCalibrationData<f32> {
21 fn default() -> Self {
22 Self { quad_gain: 0.0, gain: 1.0, bias: 0.0 }
23 }
24}
25
26
27pub struct LinearCalibrationData<T> {
28 pub gain: T,
29 pub bias: T
30}
31
32impl<T> LinearCalibrationData<T>
33where
34 T: NumOps + Copy
35{
36 pub fn calibrate(&self, value: T) -> T {
37 self.gain * value + self.bias
38 }
39}
40
41impl Default for LinearCalibrationData<f32> {
42 fn default() -> Self {
43 Self { gain: 1.0, bias: 0.0 }
44 }
45}
46