Add a separate tec_set_i cmd to reduce overhead

- miniconf is slow at validating complex struct with large enum lists
master
linuswck 2024-02-27 12:19:53 +08:00
parent 9f82fa58f4
commit b1fa0e51c8
1 changed files with 21 additions and 0 deletions

View File

@ -153,9 +153,30 @@ pub fn send_status_report(buffer: &mut [u8], laser: &mut LdDrive, tec: &mut Ther
net::eth_send(buffer, num_bytes);
}
// Use a minimal struct for high speed cmd ctrl to reduce processing overhead
#[derive(Deserialize, Serialize, Copy, Clone, Debug, Default, Tree)]
pub struct TecSetICmdJson {
tec_set_i: f64
}
#[derive(Deserialize, Serialize, Copy, Clone, Debug, Default, Tree)]
pub struct TecSetICmd {
json: TecSetICmdJson
}
pub fn execute_cmd(buffer: &mut [u8], buffer_size: usize, mut laser: LdDrive, mut tec: Thermostat, mut device_settings: DeviceSettings)->(LdDrive, Thermostat, bool, DeviceSettings){
let mut should_reset = false;
let mut cmd = TecSetICmd {
json: TecSetICmdJson::default()
};
match cmd.set_json("/json", &buffer[0..buffer_size]){
Ok(_) => {
tec.set_i(ElectricCurrent::new::<milliampere>(cmd.json.tec_set_i));
return (laser, tec, should_reset, device_settings);
}
Err(_) => { /* Do Nothing */}
}
let mut cmd = Cmd {
json: CmdJsonObj::default()
};