2024-01-18 17:09:24 +08:00
|
|
|
use core::{f64::NAN, marker::PhantomData};
|
|
|
|
use uom::si::{
|
|
|
|
f64::{
|
|
|
|
ElectricCurrent,
|
|
|
|
Power
|
|
|
|
},
|
|
|
|
electric_current::microampere,
|
|
|
|
};
|
|
|
|
use uom::{si::{ISQ, SI, Quantity}, typenum::*};
|
2024-02-02 14:07:25 +08:00
|
|
|
use miniconf::Tree;
|
2024-01-18 17:09:24 +08:00
|
|
|
|
|
|
|
// Ampere / Watt
|
|
|
|
pub type ResponsitivityUnit = Quantity<ISQ<N2, N1, P3, P1, Z0, Z0, Z0>, SI<f64>, f64>;
|
|
|
|
|
2024-02-02 14:07:25 +08:00
|
|
|
#[derive(Clone, Debug, PartialEq, Tree)]
|
2024-01-18 17:09:24 +08:00
|
|
|
pub struct Parameters {
|
|
|
|
pub responsitivity: ResponsitivityUnit,
|
|
|
|
pub i_dark: ElectricCurrent,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Parameters {
|
2024-01-26 12:10:52 +08:00
|
|
|
pub fn get_ld_pwr_from_ld_i(&self, i: ElectricCurrent) -> Power {
|
2024-01-18 17:09:24 +08:00
|
|
|
let ld_power = (i - self.i_dark) / self.responsitivity;
|
|
|
|
ld_power
|
|
|
|
}
|
2024-01-26 12:10:52 +08:00
|
|
|
|
|
|
|
pub fn get_ld_i_from_ld_pwr(&self, pwr: Power) -> ElectricCurrent {
|
|
|
|
let ld_i = pwr * self.responsitivity + self.i_dark;
|
|
|
|
ld_i
|
|
|
|
}
|
2024-01-18 17:09:24 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
impl Default for Parameters {
|
|
|
|
fn default() -> Self {
|
|
|
|
Parameters {
|
|
|
|
responsitivity: ResponsitivityUnit {dimension: PhantomData, units: PhantomData, value: NAN},
|
|
|
|
i_dark: ElectricCurrent::new::<microampere>(0.0),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|