From 80957ce316d0c877a76232ffa912efc2b5460489 Mon Sep 17 00:00:00 2001 From: Hubald Verzijl Date: Sat, 18 Oct 2025 17:52:52 +0200 Subject: [PATCH] Add 2/4-lead option to GUI. --- src/communication.rs | 15 +++++++++------ src/impedance.rs | 12 ++++++++---- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/communication.rs b/src/communication.rs index 01c171b..c42b473 100644 --- a/src/communication.rs +++ b/src/communication.rs @@ -169,7 +169,10 @@ pub async fn start_single_impedance_handler(context: SpawnCtx, header: VarHeader info!("Start impedance measurement at {:?} Hz.", rqst.sinus_frequency); // Mark the impedance setup as running - context.impedance_setup.lock().await.running_mode = RunningMode::SingleFrequency; + match rqst.lead_mode { + bioz_icd_rs::BioImpedanceLeadMode::TwoLead => context.impedance_setup.lock().await.running_mode = RunningMode::SingleFrequency2Lead, + bioz_icd_rs::BioImpedanceLeadMode::FourLead => context.impedance_setup.lock().await.running_mode = RunningMode::SingleFrequency4Lead, + } // Init the sequencer let init_impedance_result = context.impedance_setup.lock().await.init_single_frequency_measurement(rqst.sinus_frequency, rqst.dft_number).await; @@ -217,10 +220,10 @@ pub async fn start_single_impedance_handler(context: SpawnCtx, header: VarHeader pub async fn stop_single_impedance_handler(context: &mut Context, _header: VarHeader, _rqst: ()) -> bool { info!("Stop impedance measurement"); let was_busy = context.impedance_setup.lock().await.running_mode; - if was_busy == RunningMode::SingleFrequency || was_busy == RunningMode::MultiFrequency(MeasurementPointSet::Eight) || was_busy == RunningMode::MultiFrequency(MeasurementPointSet::Eighteen) { + if was_busy == RunningMode::SingleFrequency2Lead || was_busy == RunningMode::SingleFrequency4Lead || was_busy == RunningMode::MultiFrequency(MeasurementPointSet::Eight) || was_busy == RunningMode::MultiFrequency(MeasurementPointSet::Eighteen) { STOP.signal(()); } - was_busy == RunningMode::SingleFrequency || was_busy == RunningMode::MultiFrequency(MeasurementPointSet::Eight) || was_busy == RunningMode::MultiFrequency(MeasurementPointSet::Eighteen) + was_busy == RunningMode::SingleFrequency2Lead || was_busy == RunningMode::SingleFrequency4Lead || was_busy == RunningMode::MultiFrequency(MeasurementPointSet::Eight) || was_busy == RunningMode::MultiFrequency(MeasurementPointSet::Eighteen) } #[embassy_executor::task] @@ -305,9 +308,9 @@ pub async fn start_multi_impedance_handler(context: SpawnCtx, header: VarHeader, pub async fn stop_multi_impedance_handler(context: &mut Context, _header: VarHeader, _rqst: ()) -> bool { info!("Stop impedance measurement"); - let was_busy = context.impedance_setup.lock().await. running_mode; - if was_busy == RunningMode::SingleFrequency || was_busy == RunningMode::MultiFrequency(MeasurementPointSet::Eight) || was_busy == RunningMode::MultiFrequency(MeasurementPointSet::Eighteen) { + let was_busy = context.impedance_setup.lock().await.running_mode; + if was_busy == RunningMode::SingleFrequency2Lead || was_busy == RunningMode::SingleFrequency4Lead || was_busy == RunningMode::MultiFrequency(MeasurementPointSet::Eight) || was_busy == RunningMode::MultiFrequency(MeasurementPointSet::Eighteen) { STOP.signal(()); } - was_busy == RunningMode::SingleFrequency || was_busy == RunningMode::MultiFrequency(MeasurementPointSet::Eight) || was_busy == RunningMode::MultiFrequency(MeasurementPointSet::Eighteen) + was_busy == RunningMode::SingleFrequency2Lead || was_busy == RunningMode::SingleFrequency4Lead || was_busy == RunningMode::MultiFrequency(MeasurementPointSet::Eight) || was_busy == RunningMode::MultiFrequency(MeasurementPointSet::Eighteen) } \ No newline at end of file diff --git a/src/impedance.rs b/src/impedance.rs index 1ae8835..a5b9834 100644 --- a/src/impedance.rs +++ b/src/impedance.rs @@ -25,7 +25,8 @@ pub static IMPEDANCE_SETUP: StaticCell = StaticCell::new(); #[derive(PartialEq, Copy, Clone)] pub enum RunningMode { None, - SingleFrequency, + SingleFrequency2Lead, + SingleFrequency4Lead, MultiFrequency(MeasurementPointSet), } @@ -307,7 +308,7 @@ pub async fn impedance_setup_readout_task(mut pin: ExtiInput<'static>, impedance let mut impedance_setup = impedance_setup.lock().await; // Trigger the sequencer again - if impedance_setup.running_mode == RunningMode::SingleFrequency || impedance_setup.running_mode == RunningMode::MultiFrequency(MeasurementPointSet::Eight) || impedance_setup.running_mode == RunningMode::MultiFrequency(MeasurementPointSet::Eighteen) { + if impedance_setup.running_mode == RunningMode::SingleFrequency2Lead || impedance_setup.running_mode == RunningMode::SingleFrequency4Lead || impedance_setup.running_mode == RunningMode::MultiFrequency(MeasurementPointSet::Eight) || impedance_setup.running_mode == RunningMode::MultiFrequency(MeasurementPointSet::Eighteen) { impedance_setup.start_measurement().await; } @@ -319,7 +320,7 @@ pub async fn impedance_setup_readout_task(mut pin: ExtiInput<'static>, impedance RunningMode::None => { continue; // Skip processing if not running } - RunningMode::SingleFrequency => { + RunningMode::SingleFrequency2Lead => { if count >= 4 { let mut data: [u32; 4] = [0; 4]; @@ -338,7 +339,10 @@ pub async fn impedance_setup_readout_task(mut pin: ExtiInput<'static>, impedance IMPEDANCE_CHANNEL_SINGLE.try_send(data).ok(); } } - + RunningMode::SingleFrequency4Lead => { + info!("TODO: SingleFrequency4Lead not implemented yet"); + continue; + } RunningMode::MultiFrequency(points) => { // Each frequency point produces 4 samples (DFT real/imag for Rcal and Rz) let required_count = points.len() * 4;