mirror of
https://github.com/hubaldv/bioz-host-rs.git
synced 2025-12-06 05:11:17 +00:00
Added start stop toggle, included log.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user