mirror of
https://github.com/hubaldv/bioz-host-rs.git
synced 2025-12-05 21:01:18 +00:00
Added restart settings.
This commit is contained in:
@@ -172,6 +172,12 @@ impl eframe::App for App {
|
||||
self.update_start_stop();
|
||||
}
|
||||
|
||||
// Send stop command when the window is closed
|
||||
if ctx.input(|i| i.viewport().close_requested()) {
|
||||
self.on = false;
|
||||
self.update_start_stop();
|
||||
}
|
||||
|
||||
ctx.request_repaint();
|
||||
}}
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ fn main() {
|
||||
// let _enter = rt.enter();
|
||||
|
||||
let (run_impedancemeter_tx, run_impedancemeter_rx) = mpsc::channel::<FrequencySignal>(2);
|
||||
let run_impedancemeter_tx_clone = run_impedancemeter_tx.clone();
|
||||
|
||||
let app = App::new(run_impedancemeter_tx);
|
||||
let magnitude_clone = app.magnitude.clone();
|
||||
@@ -33,6 +34,7 @@ fn main() {
|
||||
std::thread::spawn(move || {
|
||||
rt.block_on(communicate_with_hardware(
|
||||
run_impedancemeter_rx,
|
||||
run_impedancemeter_tx_clone,
|
||||
magnitude_clone,
|
||||
phase_clone,
|
||||
magnitude_series_clone,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use log::{error, info};
|
||||
|
||||
use tokio::select;
|
||||
use tokio::sync::mpsc::Receiver;
|
||||
use tokio::sync::mpsc::{Sender, Receiver};
|
||||
|
||||
use std::sync::atomic::{AtomicBool, Ordering};
|
||||
use std::sync::{Arc, Mutex};
|
||||
@@ -15,16 +15,26 @@ use crate::signals::FrequencySignal;
|
||||
|
||||
pub async fn communicate_with_hardware(
|
||||
mut run_impedancemeter_rx: Receiver<FrequencySignal>,
|
||||
run_impedancemeter_tx: Sender<FrequencySignal>,
|
||||
magnitude: Arc<Mutex<f32>>,
|
||||
phase: Arc<Mutex<f32>>,
|
||||
magnitude_series: Arc<Mutex<TimeSeriesPlot>>,
|
||||
phase_series: Arc<Mutex<TimeSeriesPlot>>,
|
||||
connected: Arc<AtomicBool>,
|
||||
) {
|
||||
#[derive(Default)]
|
||||
struct Settings {
|
||||
frequency: Option<FrequencySignal>,
|
||||
}
|
||||
let mut settings = Settings::default();
|
||||
|
||||
loop {
|
||||
let workbook_client = match WorkbookClient::new() {
|
||||
Ok(client) => {
|
||||
info!("Connected to hardware successfully.");
|
||||
if let Some(frequency) = settings.frequency {
|
||||
run_impedancemeter_tx.send(frequency).await.unwrap();
|
||||
}
|
||||
connected.store(true, Ordering::Relaxed);
|
||||
client
|
||||
},
|
||||
@@ -68,6 +78,7 @@ pub async fn communicate_with_hardware(
|
||||
if let Err(e) = workbook_client.start_impedancemeter(freq).await {
|
||||
error!("Failed to start impedancemeter: {:?}", e);
|
||||
} else {
|
||||
settings.frequency = Some(FrequencySignal::Start(freq));
|
||||
info!("Impedancemeter started at frequency: {}", freq);
|
||||
}
|
||||
},
|
||||
@@ -75,6 +86,7 @@ pub async fn communicate_with_hardware(
|
||||
if let Err(e) = workbook_client.stop_impedancemeter().await {
|
||||
error!("Failed to stop impedancemeter: {:?}", e);
|
||||
} else {
|
||||
settings.frequency = Some(FrequencySignal::Stop);
|
||||
info!("Impedancemeter stopped.");
|
||||
}
|
||||
},
|
||||
|
||||
@@ -9,7 +9,7 @@ pub struct TimeSeriesPlot {
|
||||
|
||||
impl TimeSeriesPlot {
|
||||
pub fn new() -> Self {
|
||||
let max_points = 2000;
|
||||
let max_points = 100;
|
||||
Self {
|
||||
values: (0..max_points as i32)
|
||||
.map(|i| PlotPoint::new(i, 0.0))
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#[derive(Copy, Clone)]
|
||||
pub enum FrequencySignal {
|
||||
Start(f32),
|
||||
Stop,
|
||||
|
||||
Reference in New Issue
Block a user