diff --git a/src/app.rs b/src/app.rs index 7caa774..2e91767 100644 --- a/src/app.rs +++ b/src/app.rs @@ -4,15 +4,15 @@ use std::sync::atomic::{AtomicBool, Ordering}; use atomic_float::AtomicF32; use tokio::{sync::mpsc::{Sender}}; -use eframe::egui::{self, Color32, DragValue, Key, Layout, Modifiers, }; +use eframe::egui::{self, Color32, DragValue, Key, Label, Layout, Modifiers}; use egui_plot::{Corner, Legend, Line, Plot, PlotPoints, Points, PlotBounds}; use crate::plot::TimeSeriesPlot; -use crate::signals::FrequencySignal; +use crate::signals::SingleFrequencySignal; pub struct App { - run_impedancemeter_tx: Sender, + run_impedancemeter_tx: Sender, pub magnitude: Arc>, pub phase: Arc>, pub magnitude_series: Arc>, @@ -20,10 +20,11 @@ pub struct App { pub connected: Arc, pub on: bool, pub data_frequency: Arc, + pub single_frequency: u32 } impl App { - pub fn new(run_impedancemeter_tx: Sender) -> Self { + pub fn new(run_impedancemeter_tx: Sender) -> Self { let app = App { run_impedancemeter_tx, magnitude: Arc::new(Mutex::new(0.0)), @@ -33,6 +34,7 @@ impl App { connected: Arc::new(AtomicBool::new(false)), on: true, data_frequency: Arc::new(AtomicF32::new(0.0)), + single_frequency: 50000, }; app.update_start_stop(); app @@ -41,12 +43,12 @@ impl App { pub fn update_start_stop(&self) { match self.on { true => { - if let Err(e) = self.run_impedancemeter_tx.try_send(FrequencySignal::Start(0.0)) { + if let Err(e) = self.run_impedancemeter_tx.try_send(SingleFrequencySignal::Start(self.single_frequency)) { eprintln!("Failed to send start command: {:?}", e); } }, false => { - if let Err(e) = self.run_impedancemeter_tx.try_send(FrequencySignal::Stop) { + if let Err(e) = self.run_impedancemeter_tx.try_send(SingleFrequencySignal::Stop) { eprintln!("Failed to send stop command: {:?}", e); } }, @@ -68,6 +70,13 @@ impl eframe::App for App { ui.separator(); + ui.add_enabled_ui(!self.on, |ui| { + ui.add(DragValue::new(&mut self.single_frequency)); + ui.add(Label::new("Hz")); + }); + + ui.separator(); + if ui.add_enabled(connected, toggle_start_stop(&mut self.on)).changed() { self.update_start_stop(); }; diff --git a/src/bin/main_cli.rs b/src/bin/main_cli.rs index 731e8cf..de86652 100644 --- a/src/bin/main_cli.rs +++ b/src/bin/main_cli.rs @@ -64,7 +64,7 @@ async fn main() { } ["imp", "listen", freq, dur] => { - let Ok(freq) = freq.parse::() else { + let Ok(freq) = freq.parse::() else { println!("Bad freq: {freq}"); continue; }; @@ -81,6 +81,7 @@ async fn main() { client.start_impedancemeter(freq).await.unwrap(); println!("Started!"); let dur = Duration::from_millis(dur.into()); + let start = Instant::now(); while start.elapsed() < dur { let val = sub.recv().await.unwrap(); @@ -90,9 +91,10 @@ async fn main() { println!("Stopped!"); } ["imp", "start", freq] => { - let Ok(freq) = freq.parse::() else { + let Ok(freq) = freq.parse::() else { println!("Bad freq: {freq}"); continue; + }; match client.start_impedancemeter(freq).await { diff --git a/src/bin/main_gui.rs b/src/bin/main_gui.rs index c56e024..2dcbc43 100644 --- a/src/bin/main_gui.rs +++ b/src/bin/main_gui.rs @@ -8,7 +8,7 @@ use bioz_host_rs::communication::communicate_with_hardware; use tokio::sync::mpsc::{self}; -use bioz_host_rs::signals::FrequencySignal; +use bioz_host_rs::signals::SingleFrequencySignal; fn main() { SimpleLogger::new().init().expect("Failed to initialize logger"); @@ -20,7 +20,7 @@ fn main() { // Enter the runtime so that `tokio::spawn` is available immediately. // let _enter = rt.enter(); - let (run_impedancemeter_tx, run_impedancemeter_rx) = mpsc::channel::(2); + 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); diff --git a/src/client.rs b/src/client.rs index 195ea11..003e200 100644 --- a/src/client.rs +++ b/src/client.rs @@ -63,7 +63,7 @@ impl WorkbookClient { pub async fn start_impedancemeter( &self, - frequency: f32, + frequency: u32, ) -> Result<(), WorkbookError> { self.client .send_resp::(&StartImpedance { update_frequency: 60, sinus_frequency: frequency }) @@ -78,4 +78,4 @@ impl WorkbookClient { .await?; Ok(res) } -} \ No newline at end of file +} diff --git a/src/communication.rs b/src/communication.rs index 99d30c1..0ddab3b 100644 --- a/src/communication.rs +++ b/src/communication.rs @@ -13,11 +13,11 @@ use crate::client::WorkbookClient; use crate::plot::TimeSeriesPlot; -use crate::signals::FrequencySignal; +use crate::signals::SingleFrequencySignal; pub async fn communicate_with_hardware( - mut run_impedancemeter_rx: Receiver, - run_impedancemeter_tx: Sender, + mut run_impedancemeter_rx: Receiver, + run_impedancemeter_tx: Sender, magnitude: Arc>, phase: Arc>, magnitude_series: Arc>, @@ -37,7 +37,7 @@ pub async fn communicate_with_hardware( #[derive(Default)] struct Settings { - frequency: Option, + frequency: Option, } let mut settings = Settings::default(); @@ -90,19 +90,19 @@ pub async fn communicate_with_hardware( select! { Some(frequency) = run_impedancemeter_rx.recv() => { match frequency { - FrequencySignal::Start(freq) => { + SingleFrequencySignal::Start(freq) => { if let Err(e) = workbook_client.start_impedancemeter(freq).await { error!("Failed to start impedancemeter: {:?}", e); } else { - settings.frequency = Some(FrequencySignal::Start(freq)); + settings.frequency = Some(SingleFrequencySignal::Start(freq)); info!("Impedancemeter started at frequency: {}", freq); } }, - FrequencySignal::Stop => { + SingleFrequencySignal::Stop => { if let Err(e) = workbook_client.stop_impedancemeter().await { error!("Failed to stop impedancemeter: {:?}", e); } else { - settings.frequency = Some(FrequencySignal::Stop); + settings.frequency = Some(SingleFrequencySignal::Stop); info!("Impedancemeter stopped."); } }, diff --git a/src/signals.rs b/src/signals.rs index 8c7b802..1346436 100644 --- a/src/signals.rs +++ b/src/signals.rs @@ -1,5 +1,5 @@ #[derive(Copy, Clone)] -pub enum FrequencySignal { - Start(f32), +pub enum SingleFrequencySignal { + Start(u32), Stop, } \ No newline at end of file