From b1fa0e51c850e8fde62300763a10c0645f34219c Mon Sep 17 00:00:00 2001 From: linuswck Date: Tue, 27 Feb 2024 12:19:53 +0800 Subject: [PATCH] Add a separate tec_set_i cmd to reduce overhead - miniconf is slow at validating complex struct with large enum lists --- src/net/cmd_handler.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/net/cmd_handler.rs b/src/net/cmd_handler.rs index 7ce7ef7..d7b5460 100644 --- a/src/net/cmd_handler.rs +++ b/src/net/cmd_handler.rs @@ -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::(cmd.json.tec_set_i)); + return (laser, tec, should_reset, device_settings); + } + Err(_) => { /* Do Nothing */} + } + let mut cmd = Cmd { json: CmdJsonObj::default() };