mirror of
https://github.com/hubaldv/bioz-host-rs.git
synced 2025-12-06 05:11:17 +00:00
Implement basic logging channels.
This commit is contained in:
@@ -15,7 +15,7 @@ use crate::client::WorkbookClient;
|
||||
|
||||
use crate::plot::{TimeSeriesPlot, BodePlot};
|
||||
|
||||
use crate::signals::StartStopSignal;
|
||||
use crate::signals::{LoggingSignal, StartStopSignal};
|
||||
|
||||
pub async fn communicate_with_hardware(
|
||||
mut run_impedancemeter_rx: Receiver<StartStopSignal>,
|
||||
@@ -29,6 +29,8 @@ pub async fn communicate_with_hardware(
|
||||
data_frequency: Arc<AtomicF32>,
|
||||
periods_per_dft: Arc<Mutex<Option<f32>>>,
|
||||
periods_per_dft_multi: Arc<Mutex<(Vec<f32>, Option<Vec<f32>>)>>,
|
||||
gui_logging_enabled: Arc<AtomicBool>,
|
||||
log_tx: Sender<LoggingSignal>,
|
||||
) {
|
||||
let data_counter = Arc::new(AtomicU32::new(0));
|
||||
let data_counter_clone = data_counter.clone();
|
||||
@@ -73,20 +75,32 @@ pub async fn communicate_with_hardware(
|
||||
let data = (magnitude_series.clone(), phase_series.clone(), magnitude.clone(), phase.clone());
|
||||
let data_counter_clone_single = data_counter_clone.clone();
|
||||
|
||||
// Clone log_tx for the task
|
||||
let gui_logging_enabled_clone = gui_logging_enabled.clone();
|
||||
let log_tx_clone = log_tx.clone();
|
||||
|
||||
tokio::spawn(async move {
|
||||
while let Ok(val) = single_impedance_sub.recv().await {
|
||||
let mut mag_plot = data.0.lock().unwrap();
|
||||
let mut phase_plot = data.1.lock().unwrap();
|
||||
let mut mag_val = data.2.lock().unwrap();
|
||||
let mut phase_val = data.3.lock().unwrap();
|
||||
{
|
||||
let mut mag_plot = data.0.lock().unwrap();
|
||||
let mut phase_plot = data.1.lock().unwrap();
|
||||
let mut mag_val = data.2.lock().unwrap();
|
||||
let mut phase_val = data.3.lock().unwrap();
|
||||
|
||||
*mag_val = val.magnitude;
|
||||
*phase_val = val.phase;
|
||||
|
||||
mag_plot.add(val.magnitude as f64);
|
||||
phase_plot.add(val.phase as f64);
|
||||
|
||||
data_counter_clone_single.fetch_add(1, Ordering::Relaxed);
|
||||
*mag_val = val.magnitude;
|
||||
*phase_val = val.phase;
|
||||
|
||||
mag_plot.add(val.magnitude as f64);
|
||||
phase_plot.add(val.phase as f64);
|
||||
|
||||
data_counter_clone_single.fetch_add(1, Ordering::Relaxed);
|
||||
}
|
||||
// Send logging signal
|
||||
if gui_logging_enabled_clone.load(Ordering::Relaxed) {
|
||||
if let Err(e) = log_tx_clone.try_send(LoggingSignal::SingleImpedance(val.magnitude, val.phase)) {
|
||||
error!("Failed to send logging signal: {:?}", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
info!("SingleImpedanceOutputTopic subscription ended.");
|
||||
});
|
||||
@@ -101,23 +115,42 @@ pub async fn communicate_with_hardware(
|
||||
let data = bode_series.clone();
|
||||
let data_counter_clone_multi = data_counter_clone.clone();
|
||||
|
||||
// Clone log_tx for the task
|
||||
let gui_logging_enabled_clone = gui_logging_enabled.clone();
|
||||
let log_tx_clone = log_tx.clone();
|
||||
|
||||
tokio::spawn(async move {
|
||||
while let Ok(val) = multi_impedance_sub.recv().await {
|
||||
let mut bode_plot = data.lock().unwrap();
|
||||
|
||||
|
||||
match val.points {
|
||||
|
||||
MeasurementPointSet::Eight => {
|
||||
let magnitudes: Vec<f32> = val.magnitudes_8.into_iter().collect();
|
||||
let phases: Vec<f32> = val.phases_8.into_iter().collect();
|
||||
bode_plot.update_magnitudes(MeasurementPointSet::Eight, magnitudes);
|
||||
bode_plot.update_phases(MeasurementPointSet::Eight, phases);
|
||||
{
|
||||
let mut bode_plot = data.lock().unwrap();
|
||||
bode_plot.update_magnitudes(MeasurementPointSet::Eight, magnitudes.clone());
|
||||
bode_plot.update_phases(MeasurementPointSet::Eight, phases.clone());
|
||||
}
|
||||
if gui_logging_enabled_clone.load(Ordering::Relaxed) {
|
||||
if let Err(e) = log_tx_clone.try_send(LoggingSignal::MultiImpedance(magnitudes.clone(), phases.clone())) {
|
||||
error!("Failed to send logging signal: {:?}", e);
|
||||
}
|
||||
}
|
||||
},
|
||||
MeasurementPointSet::Eighteen => {
|
||||
let magnitudes: Vec<f32> = val.magnitudes_18.into_iter().collect();
|
||||
let phases: Vec<f32> = val.phases_18.into_iter().collect();
|
||||
bode_plot.update_magnitudes(MeasurementPointSet::Eighteen, magnitudes);
|
||||
bode_plot.update_phases(MeasurementPointSet::Eighteen, phases);
|
||||
{
|
||||
let mut bode_plot = data.lock().unwrap();
|
||||
bode_plot.update_magnitudes(MeasurementPointSet::Eighteen, magnitudes.clone());
|
||||
bode_plot.update_phases(MeasurementPointSet::Eighteen, phases.clone());
|
||||
}
|
||||
if gui_logging_enabled_clone.load(Ordering::Relaxed) {
|
||||
if let Err(e) = log_tx_clone.try_send(LoggingSignal::MultiImpedance(magnitudes.clone(), phases.clone())) {
|
||||
error!("Failed to send logging signal: {:?}", e);
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user