Add 2/4-lead option to GUI.

This commit is contained in:
2025-10-18 17:52:52 +02:00
parent a17b25dba0
commit 80957ce316
2 changed files with 17 additions and 10 deletions

View File

@@ -169,7 +169,10 @@ pub async fn start_single_impedance_handler(context: SpawnCtx, header: VarHeader
info!("Start impedance measurement at {:?} Hz.", rqst.sinus_frequency); info!("Start impedance measurement at {:?} Hz.", rqst.sinus_frequency);
// Mark the impedance setup as running // 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 // Init the sequencer
let init_impedance_result = context.impedance_setup.lock().await.init_single_frequency_measurement(rqst.sinus_frequency, rqst.dft_number).await; 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 { pub async fn stop_single_impedance_handler(context: &mut Context, _header: VarHeader, _rqst: ()) -> bool {
info!("Stop impedance measurement"); info!("Stop impedance measurement");
let was_busy = context.impedance_setup.lock().await.running_mode; 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(()); 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] #[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 { pub async fn stop_multi_impedance_handler(context: &mut Context, _header: VarHeader, _rqst: ()) -> bool {
info!("Stop impedance measurement"); info!("Stop impedance measurement");
let was_busy = context.impedance_setup.lock().await. running_mode; 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(()); 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)
} }

View File

@@ -25,7 +25,8 @@ pub static IMPEDANCE_SETUP: StaticCell<ImpedanceSetupType> = StaticCell::new();
#[derive(PartialEq, Copy, Clone)] #[derive(PartialEq, Copy, Clone)]
pub enum RunningMode { pub enum RunningMode {
None, None,
SingleFrequency, SingleFrequency2Lead,
SingleFrequency4Lead,
MultiFrequency(MeasurementPointSet), 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; let mut impedance_setup = impedance_setup.lock().await;
// Trigger the sequencer again // 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; impedance_setup.start_measurement().await;
} }
@@ -319,7 +320,7 @@ pub async fn impedance_setup_readout_task(mut pin: ExtiInput<'static>, impedance
RunningMode::None => { RunningMode::None => {
continue; // Skip processing if not running continue; // Skip processing if not running
} }
RunningMode::SingleFrequency => { RunningMode::SingleFrequency2Lead => {
if count >= 4 { if count >= 4 {
let mut data: [u32; 4] = [0; 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(); IMPEDANCE_CHANNEL_SINGLE.try_send(data).ok();
} }
} }
RunningMode::SingleFrequency4Lead => {
info!("TODO: SingleFrequency4Lead not implemented yet");
continue;
}
RunningMode::MultiFrequency(points) => { RunningMode::MultiFrequency(points) => {
// Each frequency point produces 4 samples (DFT real/imag for Rcal and Rz) // Each frequency point produces 4 samples (DFT real/imag for Rcal and Rz)
let required_count = points.len() * 4; let required_count = points.len() * 4;