use core::{f64::NAN, marker::PhantomData}; use uom::si::{ f64::{ ElectricCurrent, Power }, electric_current::microampere, }; use uom::{si::{ISQ, SI, Quantity}, typenum::*}; use miniconf::Miniconf; // Ampere / Watt pub type ResponsitivityUnit = Quantity, SI, f64>; /// Steinhart-Hart equation Photodiode #[derive(Clone, Debug, PartialEq, Miniconf)] pub struct Parameters { /// Responsitivity pub responsitivity: ResponsitivityUnit, pub i_dark: ElectricCurrent, } impl Parameters { pub fn get_ld_output_power(&self, i: ElectricCurrent) -> Power { let ld_power = (i - self.i_dark) / self.responsitivity; ld_power } } impl Default for Parameters { fn default() -> Self { Parameters { responsitivity: ResponsitivityUnit {dimension: PhantomData, units: PhantomData, value: NAN}, i_dark: ElectricCurrent::new::(0.0), } } }