Update due to ICD change.

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
2026-05-03 21:02:21 +02:00
parent bf32f0abdb
commit b094264c9a
2 changed files with 20 additions and 20 deletions

View File

@@ -20,7 +20,7 @@ use postcard_rpc::{
}, },
}; };
use bioz_icd_rs::{GetUniqueIdEndpoint, GetMultiplexerCapabilityEndpoint, MultiplexerCapability, ElectrodeConfiguration, MeasurementPointSet, SweepImpedanceOutputTopic, SweepImpedanceResult, SweepImpedanceStartRequest, PingEndpoint, SetGreenLedEndpoint, SingleImpedanceOutputTopic, SingleImpedanceStartRequest, StartSweepImpedanceEndpoint, StartSingleImpedanceEndpoint, StopImpedanceEndpoint, BioImpedanceLeadMode, ENDPOINT_LIST, TOPICS_IN_LIST, TOPICS_OUT_LIST}; use bioz_icd_rs::{GetUniqueIdEndpoint, GetMultiplexerCapabilityEndpoint, MultiplexerCapability, ElectrodeConfiguration, SweepPoints, SweepImpedanceOutputTopic, SweepImpedanceResult, SweepImpedanceStartRequest, PingEndpoint, SetGreenLedEndpoint, SingleImpedanceOutputTopic, SingleImpedanceStartRequest, StartSweepImpedanceEndpoint, StartSingleImpedanceEndpoint, StopImpedanceEndpoint, BioImpedanceLeadMode, ENDPOINT_LIST, TOPICS_IN_LIST, TOPICS_OUT_LIST};
use crate::electrodes; use crate::electrodes;
use crate::impedance::{ImpedanceSetupType, RunningMode, IMPEDANCE_CHANNEL_SWEEP, IMPEDANCE_CHANNEL_SINGLE}; use crate::impedance::{ImpedanceSetupType, RunningMode, IMPEDANCE_CHANNEL_SWEEP, IMPEDANCE_CHANNEL_SINGLE};
@@ -292,7 +292,7 @@ pub async fn start_sweep_impedance_handler(context: SpawnCtx, header: VarHeader,
// Init the sequencer // Init the sequencer
let response = match (rqst.lead_mode, rqst.points) { let response = match (rqst.lead_mode, rqst.points) {
(BioImpedanceLeadMode::TwoLead, MeasurementPointSet::Eight) => { (BioImpedanceLeadMode::TwoLead, SweepPoints::Eight) => {
context.impedance_setup.lock().await.running_mode = RunningMode::SweepFrequency2Lead(rqst.points); context.impedance_setup.lock().await.running_mode = RunningMode::SweepFrequency2Lead(rqst.points);
const SIZE: usize = 8; const SIZE: usize = 8;
context context
@@ -307,7 +307,7 @@ pub async fn start_sweep_impedance_handler(context: SpawnCtx, header: VarHeader,
periods_per_dft_18: Vec::new(), periods_per_dft_18: Vec::new(),
}) })
} }
(BioImpedanceLeadMode::TwoLead, MeasurementPointSet::Eighteen) => { (BioImpedanceLeadMode::TwoLead, SweepPoints::Eighteen) => {
context.impedance_setup.lock().await.running_mode = RunningMode::SweepFrequency2Lead(rqst.points); context.impedance_setup.lock().await.running_mode = RunningMode::SweepFrequency2Lead(rqst.points);
const SIZE: usize = 18; const SIZE: usize = 18;
context context
@@ -322,7 +322,7 @@ pub async fn start_sweep_impedance_handler(context: SpawnCtx, header: VarHeader,
periods_per_dft_18: periods, periods_per_dft_18: periods,
}) })
} }
(BioImpedanceLeadMode::FourLead, MeasurementPointSet::Eight) => { (BioImpedanceLeadMode::FourLead, SweepPoints::Eight) => {
info!("Start impedance spectroscopy 4-lead with 8 points"); info!("Start impedance spectroscopy 4-lead with 8 points");
context.impedance_setup.lock().await.running_mode = RunningMode::SweepFrequency4Lead(rqst.points); context.impedance_setup.lock().await.running_mode = RunningMode::SweepFrequency4Lead(rqst.points);
const SIZE: usize = 8; const SIZE: usize = 8;
@@ -338,7 +338,7 @@ pub async fn start_sweep_impedance_handler(context: SpawnCtx, header: VarHeader,
periods_per_dft_18: Vec::new(), periods_per_dft_18: Vec::new(),
}) })
} }
(BioImpedanceLeadMode::FourLead, MeasurementPointSet::Eighteen) => { (BioImpedanceLeadMode::FourLead, SweepPoints::Eighteen) => {
info!("Start impedance spectroscopy 4-lead with 18 points"); info!("Start impedance spectroscopy 4-lead with 18 points");
context.impedance_setup.lock().await.running_mode = RunningMode::SweepFrequency4Lead(rqst.points); context.impedance_setup.lock().await.running_mode = RunningMode::SweepFrequency4Lead(rqst.points);
const SIZE: usize = 18; const SIZE: usize = 18;
@@ -400,8 +400,8 @@ pub async fn start_sweep_impedance_handler(context: SpawnCtx, header: VarHeader,
pub async fn stop_impedance_handler(context: &mut Context, _header: VarHeader, _rqst: ()) -> bool { pub async fn stop_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::SingleFrequency2Lead || was_busy == RunningMode::SingleFrequency4Lead || was_busy == RunningMode::SweepFrequency2Lead(MeasurementPointSet::Eight) || was_busy == RunningMode::SweepFrequency2Lead(MeasurementPointSet::Eighteen) || was_busy == RunningMode::SweepFrequency4Lead(MeasurementPointSet::Eight) || was_busy == RunningMode::SweepFrequency4Lead(MeasurementPointSet::Eighteen) { if was_busy == RunningMode::SingleFrequency2Lead || was_busy == RunningMode::SingleFrequency4Lead || was_busy == RunningMode::SweepFrequency2Lead(SweepPoints::Eight) || was_busy == RunningMode::SweepFrequency2Lead(SweepPoints::Eighteen) || was_busy == RunningMode::SweepFrequency4Lead(SweepPoints::Eight) || was_busy == RunningMode::SweepFrequency4Lead(SweepPoints::Eighteen) {
STOP.signal(()); STOP.signal(());
} }
was_busy == RunningMode::SingleFrequency2Lead || was_busy == RunningMode::SingleFrequency4Lead || was_busy == RunningMode::SweepFrequency2Lead(MeasurementPointSet::Eight) || was_busy == RunningMode::SweepFrequency2Lead(MeasurementPointSet::Eighteen) || was_busy == RunningMode::SweepFrequency4Lead(MeasurementPointSet::Eight) || was_busy == RunningMode::SweepFrequency4Lead(MeasurementPointSet::Eighteen) was_busy == RunningMode::SingleFrequency2Lead || was_busy == RunningMode::SingleFrequency4Lead || was_busy == RunningMode::SweepFrequency2Lead(SweepPoints::Eight) || was_busy == RunningMode::SweepFrequency2Lead(SweepPoints::Eighteen) || was_busy == RunningMode::SweepFrequency4Lead(SweepPoints::Eight) || was_busy == RunningMode::SweepFrequency4Lead(SweepPoints::Eighteen)
} }

View File

@@ -19,7 +19,7 @@ use crate::ad5940_registers::*;
use crate::electrodes::Electrodes; use crate::electrodes::Electrodes;
use bioz_icd_rs::{SingleImpedanceOutput, IcdDftNum, ImpedanceInitError, MeasurementPointSet, SweepImpedanceOutput}; use bioz_icd_rs::{SingleImpedanceOutput, IcdDftNum, ImpedanceInitError, SweepPoints, SweepImpedanceOutput};
use crate::icd_mapping::IntoDftnum; use crate::icd_mapping::IntoDftnum;
pub static IMPEDANCE_CHANNEL_SINGLE: Channel<ThreadModeRawMutex, SingleImpedanceOutput, 50> = Channel::new(); pub static IMPEDANCE_CHANNEL_SINGLE: Channel<ThreadModeRawMutex, SingleImpedanceOutput, 50> = Channel::new();
@@ -35,8 +35,8 @@ pub enum RunningMode {
None, None,
SingleFrequency2Lead, SingleFrequency2Lead,
SingleFrequency4Lead, SingleFrequency4Lead,
SweepFrequency2Lead(MeasurementPointSet), SweepFrequency2Lead(SweepPoints),
SweepFrequency4Lead(MeasurementPointSet), SweepFrequency4Lead(SweepPoints),
} }
pub enum RtiaCalibrated { pub enum RtiaCalibrated {
@@ -221,7 +221,7 @@ impl ImpedanceSetup {
Ok(calibration_result) Ok(calibration_result)
} }
async fn calibrate_rtia_multiple<const N: usize>(&mut self, number_of_points: MeasurementPointSet) -> Result<Vec<RtiaCalibrationResult, N>, ImpedanceInitError> { async fn calibrate_rtia_multiple<const N: usize>(&mut self, number_of_points: SweepPoints) -> Result<Vec<RtiaCalibrationResult, N>, ImpedanceInitError> {
let mut results = Vec::<RtiaCalibrationResult, N>::new(); let mut results = Vec::<RtiaCalibrationResult, N>::new();
// Set DFT number based on the frequency // Set DFT number based on the frequency
@@ -473,7 +473,7 @@ impl ImpedanceSetup {
Ok(sinus_periods_per_dft) Ok(sinus_periods_per_dft)
} }
pub async fn init_sweep_frequency_measurement_2_lead<const N: usize>(&mut self, number_of_points: MeasurementPointSet) -> Result<heapless::Vec<f32, N>, ImpedanceInitError> { pub async fn init_sweep_frequency_measurement_2_lead<const N: usize>(&mut self, number_of_points: SweepPoints) -> Result<heapless::Vec<f32, N>, ImpedanceInitError> {
// Configure LP DAC and TIA // Configure LP DAC and TIA
self.common_mode_output_enable(false).await.unwrap(); self.common_mode_output_enable(false).await.unwrap();
@@ -600,7 +600,7 @@ impl ImpedanceSetup {
Ok(periods_per_dft_vec) Ok(periods_per_dft_vec)
} }
pub async fn init_sweep_frequency_measurement_4_lead<const N: usize>(&mut self, number_of_points: MeasurementPointSet) -> Result<heapless::Vec<f32, N>, ImpedanceInitError> { pub async fn init_sweep_frequency_measurement_4_lead<const N: usize>(&mut self, number_of_points: SweepPoints) -> Result<heapless::Vec<f32, N>, ImpedanceInitError> {
// Configure LP DAC and TIA // Configure LP DAC and TIA
self.common_mode_output_enable(true).await.unwrap(); self.common_mode_output_enable(true).await.unwrap();
@@ -609,11 +609,11 @@ impl ImpedanceSetup {
// Calibrate Rtia // Calibrate Rtia
match number_of_points { match number_of_points {
MeasurementPointSet::Eight => { SweepPoints::Eight => {
let results = self.calibrate_rtia_multiple::<8>(number_of_points).await.unwrap(); let results = self.calibrate_rtia_multiple::<8>(number_of_points).await.unwrap();
self.rtia_calibrated = RtiaCalibrated::Vec8(results); self.rtia_calibrated = RtiaCalibrated::Vec8(results);
}, },
MeasurementPointSet::Eighteen => { SweepPoints::Eighteen => {
let results = self.calibrate_rtia_multiple::<18>(number_of_points).await.unwrap(); let results = self.calibrate_rtia_multiple::<18>(number_of_points).await.unwrap();
self.rtia_calibrated = RtiaCalibrated::Vec18(results); self.rtia_calibrated = RtiaCalibrated::Vec18(results);
}, },
@@ -772,7 +772,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::SingleFrequency2Lead || impedance_setup.running_mode == RunningMode::SingleFrequency4Lead || impedance_setup.running_mode == RunningMode::SweepFrequency2Lead(MeasurementPointSet::Eight) || impedance_setup.running_mode == RunningMode::SweepFrequency2Lead(MeasurementPointSet::Eighteen) || impedance_setup.running_mode == RunningMode::SweepFrequency4Lead(MeasurementPointSet::Eight) || impedance_setup.running_mode == RunningMode::SweepFrequency4Lead(MeasurementPointSet::Eighteen) { if impedance_setup.running_mode == RunningMode::SingleFrequency2Lead || impedance_setup.running_mode == RunningMode::SingleFrequency4Lead || impedance_setup.running_mode == RunningMode::SweepFrequency2Lead(SweepPoints::Eight) || impedance_setup.running_mode == RunningMode::SweepFrequency2Lead(SweepPoints::Eighteen) || impedance_setup.running_mode == RunningMode::SweepFrequency4Lead(SweepPoints::Eight) || impedance_setup.running_mode == RunningMode::SweepFrequency4Lead(SweepPoints::Eighteen) {
impedance_setup.start_measurement().await; impedance_setup.start_measurement().await;
} }
@@ -850,11 +850,11 @@ pub async fn impedance_setup_readout_task(mut pin: ExtiInput<'static>, impedance
let result = calculate_impedance_2_lead(chunk.try_into().unwrap()); let result = calculate_impedance_2_lead(chunk.try_into().unwrap());
match points { match points {
MeasurementPointSet::Eight => { SweepPoints::Eight => {
impedance_output.magnitudes_8.push(result.magnitude).ok(); impedance_output.magnitudes_8.push(result.magnitude).ok();
impedance_output.phases_8.push(result.phase).ok(); impedance_output.phases_8.push(result.phase).ok();
} }
MeasurementPointSet::Eighteen => { SweepPoints::Eighteen => {
impedance_output.magnitudes_18.push(result.magnitude).ok(); impedance_output.magnitudes_18.push(result.magnitude).ok();
impedance_output.phases_18.push(result.phase).ok(); impedance_output.phases_18.push(result.phase).ok();
} }
@@ -885,7 +885,7 @@ pub async fn impedance_setup_readout_task(mut pin: ExtiInput<'static>, impedance
}; };
match (&points, &impedance_setup.rtia_calibrated) { match (&points, &impedance_setup.rtia_calibrated) {
(MeasurementPointSet::Eight, RtiaCalibrated::Vec8(cal_vec)) => { (SweepPoints::Eight, RtiaCalibrated::Vec8(cal_vec)) => {
// Take 4 samples per frequency point // Take 4 samples per frequency point
for (i, chunk) in data_slice.chunks(4).enumerate() { for (i, chunk) in data_slice.chunks(4).enumerate() {
let cal = &cal_vec[i]; let cal = &cal_vec[i];
@@ -895,7 +895,7 @@ pub async fn impedance_setup_readout_task(mut pin: ExtiInput<'static>, impedance
impedance_output.phases_8.push(result.phase).ok(); impedance_output.phases_8.push(result.phase).ok();
} }
}, },
(MeasurementPointSet::Eighteen, RtiaCalibrated::Vec18(cal_vec)) => { (SweepPoints::Eighteen, RtiaCalibrated::Vec18(cal_vec)) => {
// Take 4 samples per frequency point // Take 4 samples per frequency point
for (i, chunk) in data_slice.chunks(4).enumerate() { for (i, chunk) in data_slice.chunks(4).enumerate() {
let cal = &cal_vec[i]; let cal = &cal_vec[i];