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