Files
bioz-host-rs/src/bin/main_gui.rs

55 lines
1.7 KiB
Rust

use simple_logger::SimpleLogger;
use log::info;
use tokio::runtime::Runtime;
use bioz_host_rs::app::App;
use bioz_host_rs::communication::communicate_with_hardware;
use tokio::sync::mpsc::{self};
use bioz_host_rs::signals::SingleFrequencySignal;
fn main() {
SimpleLogger::new().init().expect("Failed to initialize logger");
log::set_max_level(log::LevelFilter::Info);
info!("Starting Bioz Impedance Visualizer...");
let rt = Runtime::new().expect("Unable to create Runtime");
// Enter the runtime so that `tokio::spawn` is available immediately.
// let _enter = rt.enter();
let (run_impedancemeter_tx, run_impedancemeter_rx) = mpsc::channel::<SingleFrequencySignal>(2);
let run_impedancemeter_tx_clone = run_impedancemeter_tx.clone();
let app = App::new(run_impedancemeter_tx);
let magnitude_clone = app.magnitude.clone();
let phase_clone = app.phase.clone();
let magnitude_series_clone = app.magnitude_series.clone();
let phase_series_clone = app.phase_series.clone();
let connected_clone = app.connected.clone();
let data_frequency_clone = app.data_frequency.clone();
// Execute the runtime in its own thread.
std::thread::spawn(move || {
rt.block_on(communicate_with_hardware(
run_impedancemeter_rx,
run_impedancemeter_tx_clone,
magnitude_clone,
phase_clone,
magnitude_series_clone,
phase_series_clone,
connected_clone,
data_frequency_clone,
));
});
// Run the GUI in the main thread.
let _ = eframe::run_native(
"Impedance Visualizer [egui + tokio] - Hubald Verzijl - 2025",
eframe::NativeOptions::default(),
Box::new(|_cc| Ok(Box::new(app))),
);
}