Added start stop toggle, included log.

This commit is contained in:
2025-08-12 14:14:03 +02:00
parent 961e6cc34a
commit ea1d13012e
5 changed files with 140 additions and 46 deletions

View File

@@ -3,6 +3,7 @@ use log::{error, info};
use tokio::select;
use tokio::sync::mpsc::Receiver;
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::{Arc, Mutex};
use crate::icd;
@@ -10,17 +11,21 @@ use crate::client::WorkbookClient;
use crate::plot::TimeSeriesPlot;
use crate::signals::FrequencySignal;
pub async fn communicate_with_hardware(
mut run_impedancemeter_rx: Receiver<u32>,
mut run_impedancemeter_rx: Receiver<FrequencySignal>,
magnitude: Arc<Mutex<f32>>,
phase: Arc<Mutex<f32>>,
magnitude_series: Arc<Mutex<TimeSeriesPlot>>,
phase_series: Arc<Mutex<TimeSeriesPlot>>,
connected: Arc<AtomicBool>,
) {
loop {
let workbook_client = match WorkbookClient::new() {
Ok(client) => {
info!("Connected to hardware successfully.");
connected.store(true, Ordering::Relaxed);
client
},
Err(e) => {
@@ -57,27 +62,27 @@ pub async fn communicate_with_hardware(
loop {
select! {
Some(run) = run_impedancemeter_rx.recv() => {
if run > 0 {
// Start the impedancemeter
if let Err(e) = workbook_client.start_impedancemeter(run as f32).await {
error!("Failed to start impedancemeter: {:?}", e);
} else {
info!("Impedancemeter started.");
}
} else {
// Stop the impedancemeter
if let Err(e) = workbook_client.stop_impedancemeter().await {
error!("Failed to stop impedancemeter: {:?}", e);
} else {
info!("Impedancemeter stopped.");
}
Some(frequency) = run_impedancemeter_rx.recv() => {
match frequency {
FrequencySignal::Start(freq) => {
if let Err(e) = workbook_client.start_impedancemeter(freq).await {
error!("Failed to start impedancemeter: {:?}", e);
} else {
info!("Impedancemeter started at frequency: {}", freq);
}
},
FrequencySignal::Stop => {
if let Err(e) = workbook_client.stop_impedancemeter().await {
error!("Failed to stop impedancemeter: {:?}", e);
} else {
info!("Impedancemeter stopped.");
}
},
}
}
_ = workbook_client.wait_closed() => {
// Handle client closure
info!("Client connection closed.");
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
break;
}
@@ -89,6 +94,7 @@ pub async fn communicate_with_hardware(
}
}
info!("Communication with hardware ended.");
// Wait for a short period before trying to reconnect
connected.store(false, Ordering::Relaxed);
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
}
}