mirror of
https://github.com/hubaldv/bioz-firmware-rs.git
synced 2025-12-06 05:01:18 +00:00
Add 2/4-lead option to GUI.
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user