From 044cfb069a8b914b6eea2d34c6515df840d5315d Mon Sep 17 00:00:00 2001 From: Hubald Verzijl Date: Mon, 18 Aug 2025 17:28:16 +0200 Subject: [PATCH] Included running flag in struct. --- src/communication.rs | 10 +++++----- src/impedance.rs | 3 ++- src/main.rs | 4 +++- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/communication.rs b/src/communication.rs index 523c829..0729a3f 100644 --- a/src/communication.rs +++ b/src/communication.rs @@ -159,14 +159,14 @@ pub async fn set_green_led_handler(_context: &mut Context, _header: VarHeader, r LED_FREQUENCY_SIGNAL.signal(rqst); } -static RUNNING: Mutex = Mutex::new(false); static STOP: Mutex = Mutex::new(false); #[embassy_executor::task] pub async fn start_single_impedance_handler(context: SpawnCtx, header: VarHeader, rqst: StartImpedance, sender: Sender) { info!("Start impedance measurement at {:?} Hz.", rqst.sinus_frequency); - *RUNNING.lock().await = true; + // Mark the impedance setup as running + context.impedance_setup.lock().await.running = true; // Init the sequencer context.impedance_setup.lock().await.init_single_frequency_measurement(rqst.sinus_frequency).await; @@ -198,14 +198,14 @@ pub async fn start_single_impedance_handler(context: SpawnCtx, header: VarHeader seq = seq.wrapping_add(1); } - *RUNNING.lock().await = false; + context.impedance_setup.lock().await.running = false; info!("Impedance measurement stopped."); *STOP.lock().await = false; } -pub async fn stop_single_impedance_handler(_context: &mut Context, _header: VarHeader, _rqst: ()) -> bool { +pub async fn stop_single_impedance_handler(context: &mut Context, _header: VarHeader, _rqst: ()) -> bool { info!("Stop impedance measurement"); - let was_busy = *RUNNING.lock().await; + let was_busy = context.impedance_setup.lock().await.running; if was_busy { *STOP.lock().await = true; } diff --git a/src/impedance.rs b/src/impedance.rs index 7d80e15..5163bba 100644 --- a/src/impedance.rs +++ b/src/impedance.rs @@ -20,11 +20,12 @@ pub static IMPEDANCE_SETUP: StaticCell = StaticCell::new(); pub struct ImpedanceSetup { ad5940: AD5940, dsp_config: Option, + pub running: bool, } impl ImpedanceSetup { pub fn new(ad5940: AD5940) -> Self { - ImpedanceSetup { ad5940, dsp_config: None } + ImpedanceSetup { ad5940, dsp_config: None, running: false } } pub async fn init(&mut self) -> Result<(), Error> { diff --git a/src/main.rs b/src/main.rs index 40bb8bf..8a62ebe 100644 --- a/src/main.rs +++ b/src/main.rs @@ -181,7 +181,9 @@ async fn impedance_setup_readout_task(mut pin: ExtiInput<'static>, impedance_set let mut impedance_setup = impedance_setup.lock().await; // Trigger the sequencer again - impedance_setup.start_measurement().await; + if impedance_setup.running { + impedance_setup.start_measurement().await; + } // Read the FIFO count let count = impedance_setup.get_fifo_count().await.unwrap();