From 5537a991d35a90f519ae8818e906f83cc4e16024 Mon Sep 17 00:00:00 2001 From: Hubald Verzijl Date: Fri, 15 Aug 2025 09:52:56 +0200 Subject: [PATCH] Added restart settings. --- src/app.rs | 6 ++++++ src/bin/main_gui.rs | 2 ++ src/communication.rs | 14 +++++++++++++- src/plot.rs | 2 +- src/signals.rs | 1 + 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/app.rs b/src/app.rs index 01908d1..8b5b3bc 100644 --- a/src/app.rs +++ b/src/app.rs @@ -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(); }} diff --git a/src/bin/main_gui.rs b/src/bin/main_gui.rs index 24a691b..3f8efd9 100644 --- a/src/bin/main_gui.rs +++ b/src/bin/main_gui.rs @@ -21,6 +21,7 @@ fn main() { // let _enter = rt.enter(); let (run_impedancemeter_tx, run_impedancemeter_rx) = mpsc::channel::(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, diff --git a/src/communication.rs b/src/communication.rs index d1864c4..d0d9409 100644 --- a/src/communication.rs +++ b/src/communication.rs @@ -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, + run_impedancemeter_tx: Sender, magnitude: Arc>, phase: Arc>, magnitude_series: Arc>, phase_series: Arc>, connected: Arc, ) { + #[derive(Default)] + struct Settings { + frequency: Option, + } + 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."); } }, diff --git a/src/plot.rs b/src/plot.rs index e6d2c15..f3f3629 100644 --- a/src/plot.rs +++ b/src/plot.rs @@ -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)) diff --git a/src/signals.rs b/src/signals.rs index 1fd2532..8c7b802 100644 --- a/src/signals.rs +++ b/src/signals.rs @@ -1,3 +1,4 @@ +#[derive(Copy, Clone)] pub enum FrequencySignal { Start(f32), Stop,