From 146d3543e5fcb122a07a6b0599e3564904064e51 Mon Sep 17 00:00:00 2001 From: atse Date: Thu, 10 Aug 2023 11:47:40 +0800 Subject: [PATCH] Update LED L3 after applying config PID may be engaged or disengaged after loading config, so make sure LED L3 updates to match. --- src/command_handler.rs | 6 +++--- src/config.rs | 10 +++++++++- src/main.rs | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/command_handler.rs b/src/command_handler.rs index a0cca45..a1c3f9e 100644 --- a/src/command_handler.rs +++ b/src/command_handler.rs @@ -278,12 +278,12 @@ impl Handler { Ok(Handler::Handled) } - fn load_channel (socket: &mut TcpSocket, channels: &mut Channels, store: &mut FlashStore, channel: Option) -> Result { + fn load_channel (socket: &mut TcpSocket, channels: &mut Channels, leds: &mut Leds, store: &mut FlashStore, channel: Option) -> Result { for c in 0..CHANNELS { if channel.is_none() || channel == Some(c) { match store.read_value::(CHANNEL_CONFIG_KEY[c]) { Ok(Some(config)) => { - config.apply(channels, c); + config.apply(channels, c, leds); send_line(socket, b"{}"); } Ok(None) => { @@ -436,7 +436,7 @@ impl Handler { Command::SteinhartHart { channel, parameter, value } => Handler::set_steinhart_hart(socket, channels, channel, parameter, value), Command::PostFilter { channel, rate: None } => Handler::reset_post_filter(socket, channels, channel), Command::PostFilter { channel, rate: Some(rate) } => Handler::set_post_filter(socket, channels, channel, rate), - Command::Load { channel } => Handler::load_channel(socket, channels, store, channel), + Command::Load { channel } => Handler::load_channel(socket, channels, leds, store, channel), Command::Save { channel } => Handler::save_channel(socket, channels, channel, store), Command::Ipv4(config) => Handler::set_ipv4(socket, store, config), Command::Reset => Handler::reset(channels), diff --git a/src/config.rs b/src/config.rs index e7286fa..9442a0e 100644 --- a/src/config.rs +++ b/src/config.rs @@ -10,6 +10,7 @@ use crate::{ command_parser::CenterPoint, pid, steinhart_hart, + leds::Leds, }; #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] @@ -44,7 +45,7 @@ impl ChannelConfig { } } - pub fn apply(&self, channels: &mut Channels, channel: usize) { + pub fn apply(&self, channels: &mut Channels, channel: usize, leds: &mut Leds) { let state = channels.channel_state(channel); state.center = self.center.clone(); state.pid.parameters = self.pid.clone(); @@ -59,6 +60,13 @@ impl ChannelConfig { adc_postfilter => Some(adc_postfilter), }; let _ = channels.adc.set_postfilter(channel as u8, adc_postfilter); + + // Update L3 if PID status changed + if channels.pid_engaged() { + leds.g3.on(); + } else { + leds.g3.off(); + } } } diff --git a/src/main.rs b/src/main.rs index 639f356..1b01d1d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -143,7 +143,7 @@ fn main() -> ! { for c in 0..CHANNELS { match store.read_value::(CHANNEL_CONFIG_KEY[c]) { Ok(Some(config)) => - config.apply(&mut channels, c), + config.apply(&mut channels, c, &mut leds), Ok(None) => error!("flash config not found for channel {}", c), Err(e) => -- 2.44.1