diff --git a/src/laser_diode/laser_diode.rs b/src/laser_diode/laser_diode.rs index 0cf08e4..7f7a42f 100644 --- a/src/laser_diode/laser_diode.rs +++ b/src/laser_diode/laser_diode.rs @@ -168,11 +168,11 @@ impl LdDrive{ } pub fn set_pd_responsitivity(&mut self, responsitivity: pd_responsitivity::ResponsitivityUnit){ - self.settings.pd_responsitivity.responsitivity = responsitivity; + self.settings.pd_responsitivity.set(responsitivity); } pub fn set_pd_dark_current(&mut self, i_dark: ElectricCurrent){ - self.settings.pd_responsitivity.i_dark = i_dark; + self.settings.pd_responsitivity.set_i_dark(i_dark); } pub fn set_ld_power_limit(&mut self, pwr_limit: Power){ diff --git a/src/laser_diode/pd_responsitivity.rs b/src/laser_diode/pd_responsitivity.rs index 74edebf..ee28084 100644 --- a/src/laser_diode/pd_responsitivity.rs +++ b/src/laser_diode/pd_responsitivity.rs @@ -14,8 +14,8 @@ pub type ResponsitivityUnit = Quantity, SI, #[derive(Clone, Debug, PartialEq, Tree)] pub struct Parameters { - pub responsitivity: ResponsitivityUnit, - pub i_dark: ElectricCurrent, + responsitivity: ResponsitivityUnit, + i_dark: ElectricCurrent, } impl Parameters { @@ -28,6 +28,14 @@ impl Parameters { let ld_i = pwr * self.responsitivity + self.i_dark; ld_i } + + pub fn set(&mut self, responsitivity: ResponsitivityUnit) { + self.responsitivity = responsitivity; + } + + pub fn set_i_dark(&mut self, i_dark: ElectricCurrent) { + self.i_dark = i_dark; + } } impl Default for Parameters { diff --git a/src/net/cmd_handler.rs b/src/net/cmd_handler.rs index 782e5dc..9a457d5 100644 --- a/src/net/cmd_handler.rs +++ b/src/net/cmd_handler.rs @@ -1,14 +1,16 @@ -use core::{default, fmt::Debug}; +use core::{fmt::Debug, marker::PhantomData}; use miniconf::{JsonCoreSlash, Tree}; use serde::{Deserialize, Serialize}; use uom::si::{ - electric_current::{ampere, milliampere, ElectricCurrent}, + electric_current::{ampere, microampere, milliampere, ElectricCurrent}, electric_potential::{volt, ElectricPotential}, - electrical_resistance::{ElectricalResistance, ohm}, - f64::ThermodynamicTemperature, thermodynamic_temperature::degree_celsius + electrical_resistance::{ohm, ElectricalResistance}, + power::{milliwatt, Power}, + thermodynamic_temperature::{degree_celsius, ThermodynamicTemperature} }; -use crate::{laser_diode::laser_diode::{ - LdDrive, StatusReport as LdStatusReport +use crate::{laser_diode::{laser_diode::{ + LdDrive, StatusReport as LdStatusReport}, + pd_responsitivity::ResponsitivityUnit }, net::net, thermostat::thermostat::StatusReport as TecStatusReport @@ -194,10 +196,24 @@ pub fn execute_cmd(buffer: &mut [u8], buffer_size: usize, mut laser: LdDrive, mu } } Some(LdCmdEnum::SetPdResponsitivity) => { - info!("Not supported Yet") + match cmd.json.data_f64 { + Some(val) => { + laser.set_pd_responsitivity(ResponsitivityUnit {dimension: PhantomData, units: PhantomData, value: val}) + } + None => { + info!("Wrong Data type is received") + } + } } Some(LdCmdEnum::SetPdDarkCurrent) => { - info!("Not supported Yet") + match cmd.json.data_f64 { + Some(val) => { + laser.set_pd_dark_current(ElectricCurrent::new::(val)) + } + None => { + info!("Wrong Data type is received") + } + } } Some(LdCmdEnum::SetPdILimit) => { match cmd.json.data_f64 { @@ -210,7 +226,14 @@ pub fn execute_cmd(buffer: &mut [u8], buffer_size: usize, mut laser: LdDrive, mu } } Some(LdCmdEnum::SetLdPwrLimit) => { - info!("Not supported Yet") + match cmd.json.data_f64 { + Some(val) => { + laser.set_ld_power_limit(Power::new::(val)) + } + None => { + info!("Wrong Data type is received") + } + } } Some(LdCmdEnum::ClearAlarmStatus) => { laser.pd_mon_clear_alarm()