niva_components/
calibration.rs

1use 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