From ce23d40b38fb25bc45f8ca31c9365a87f7673e28 Mon Sep 17 00:00:00 2001 From: Hubald Verzijl Date: Mon, 3 Nov 2025 19:17:28 +0100 Subject: [PATCH] Added 4-lead multi calibration. --- src/app.rs | 33 +++++++++++++++++++++++++++++++-- src/client.rs | 3 ++- src/communication.rs | 6 +++--- src/signals.rs | 2 +- 4 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/app.rs b/src/app.rs index 8f384b3..c950528 100644 --- a/src/app.rs +++ b/src/app.rs @@ -222,6 +222,35 @@ impl TabViewer { .open(self.show_settings_toggle) .show(ui, |ui| { if let Ok(on) = self.on.lock() { + ui.add_enabled_ui(!*on, |ui| { + ui.horizontal(|ui| { + ui.label("Lead Mode:"); + + let mut lead_mode = self.lead_mode.lock().unwrap(); + + // Map current lead mode to index + let mut index = LEAD_MODES + .iter() + .position(|&m| m == *lead_mode) + .unwrap_or(0); + + ComboBox::from_id_salt("LeadMode") + .width(60.0) + .show_index(ui, &mut index, LEAD_MODES.len(), |i| { + match LEAD_MODES[i] { + BioImpedanceLeadMode::TwoLead => "2-Lead", + BioImpedanceLeadMode::FourLead => "4-Lead", + } + .to_string() + }); + + // Update lead mode if changed + if *lead_mode != LEAD_MODES[index] { + *lead_mode = LEAD_MODES[index]; + info!("Lead Mode setting changed!"); + } + }); + }); ui.add_enabled_ui(!*on, |ui| { ui.horizontal(|ui| { ui.label("Measurement Points:"); @@ -463,7 +492,7 @@ impl App { let phase_series = Arc::new(Mutex::new(TimeSeriesPlot::new())); let bode_plot = Arc::new(Mutex::new(BodePlot::new())); let single_frequency = Arc::new(Mutex::new(50000)); - let lead_mode = Arc::new(Mutex::new(BioImpedanceLeadMode::TwoLead)); + let lead_mode = Arc::new(Mutex::new(BioImpedanceLeadMode::FourLead)); let dft_num = Arc::new(Mutex::new(IcdDftNum::Num2048)); let measurement_points = Arc::new(Mutex::new(MeasurementPointSet::Eighteen)); let periods_per_dft = Arc::new(Mutex::new(None)); @@ -544,7 +573,7 @@ impl App { } }, (TabActive::Multi, true) => { - if let Err(e) = self.run_impedancemeter_tx.try_send(StartStopSignal::StartMulti(*self.measurement_points.lock().unwrap())) { + if let Err(e) = self.run_impedancemeter_tx.try_send(StartStopSignal::StartMulti(*self.lead_mode.lock().unwrap(), *self.measurement_points.lock().unwrap())) { error!("Failed to send start command: {:?}", e); } }, diff --git a/src/client.rs b/src/client.rs index adbc991..929acd1 100644 --- a/src/client.rs +++ b/src/client.rs @@ -76,10 +76,11 @@ impl WorkbookClient { pub async fn start_impedancemeter_multi( &self, + lead_mode: BioImpedanceLeadMode, points: MeasurementPointSet, ) -> Result> { let response = self.client - .send_resp::(&MultiImpedanceStartRequest { points }) + .send_resp::(&MultiImpedanceStartRequest { lead_mode, points }) .await?; Ok(response) } diff --git a/src/communication.rs b/src/communication.rs index 9a3e123..d5d4c6a 100644 --- a/src/communication.rs +++ b/src/communication.rs @@ -194,10 +194,10 @@ pub async fn communicate_with_hardware( } } }, - StartStopSignal::StartMulti(num_points) => { - match workbook_client.start_impedancemeter_multi(num_points).await { + StartStopSignal::StartMulti(lead_mode, num_points) => { + match workbook_client.start_impedancemeter_multi(lead_mode, num_points).await { Ok(Ok(periods)) => { - settings.lock().unwrap().frequency = Some(StartStopSignal::StartMulti(num_points)); + settings.lock().unwrap().frequency = Some(StartStopSignal::StartMulti(lead_mode, num_points)); info!("Multi-point Impedancemeter started."); match num_points { MeasurementPointSet::Eight => { diff --git a/src/signals.rs b/src/signals.rs index b6a574d..f10d7b2 100644 --- a/src/signals.rs +++ b/src/signals.rs @@ -5,7 +5,7 @@ use crate::icd::{BioImpedanceLeadMode, IcdDftNum, MeasurementPointSet}; #[derive(Copy, Clone, Debug)] pub enum StartStopSignal { StartSingle(u32, BioImpedanceLeadMode, IcdDftNum), // frequency in Hz, lead mode, DFT number - StartMulti(MeasurementPointSet), // DFT number, number of points per measurement + StartMulti(BioImpedanceLeadMode, MeasurementPointSet), // lead mode, number of points per measurement Stop, }