diff --git a/hostsoftware/src/main.rs b/hostsoftware/src/main.rs index fbeed7b..d3ec89d 100644 --- a/hostsoftware/src/main.rs +++ b/hostsoftware/src/main.rs @@ -7,13 +7,15 @@ use std::time::Duration; use crossbeam_channel::{select, unbounded, Receiver, Sender}; -use eframe::egui; -use egui_plot::{Line, Plot, PlotPoints}; +use eframe::egui::{self, RichText}; + + use cheapsdo_protocol::*; use postcard::{from_bytes_cobs, to_stdvec_cobs}; mod formatters; +mod plots; fn main() -> Result<(), eframe::Error> { let options = eframe::NativeOptions { @@ -146,66 +148,56 @@ impl eframe::App for CheapsdoControl { ui.separator(); ui.horizontal(|ui| { - ui.label( - egui::RichText::new(format!( - "Measured: {}", - formatters::frequency( - self.device_state.measured_frequency as f64 / 1_000_000_000.0 - ) - )) - .family(egui::FontFamily::Monospace) - .size(20.0), - ); + ui.vertical(|ui| { + ui.vertical(|ui| ui.label(egui::RichText::new("TCXO Status").size(20.0))); + ui.add_space(20.0); + plots::show_freuqencies(ui, &self.device_state); + ui.add_space(20.0); + plots::show_plots(ui, &self.average_points, &self.pwm_points); + }); - ui.add_space(100.0); + ui.separator(); - ui.label( - egui::RichText::new(format!( - "Average: {}", - formatters::frequency( - self.device_state.average_frequency as f64 / 1_000_000_000.0 - ) - )) - .family(egui::FontFamily::Monospace) - .size(20.0), - ); + ui.vertical(|ui| { + ui.label(egui::RichText::new("Output Settings").size(20.0)); + ui.add_space(20.0); + + let mut my_string = String::new(); + + #[derive(PartialEq)] + enum Enum { + First, + Second, + } + let mut my_enum = Enum::First; + + egui::Grid::new("output_pll_settings") + .spacing([20.0, 5.0]) + .show(ui, |ui| { + ui.label("CLK1 Multisynth"); + ui.horizontal(|ui| { + ui.selectable_value(&mut my_enum, Enum::First, "MS1"); + ui.selectable_value(&mut my_enum, Enum::Second, "MS2"); + }); + ui.end_row(); + + ui.label("CLK1 Frequency [Hz]"); + ui.add_sized([200.0, 20.0], egui::TextEdit::singleline(&mut my_string)); + ui.end_row(); + + ui.label("CLK1 Enable"); + ui.horizontal(|ui| { + ui.add(egui::Button::new( + RichText::new("On").color(egui::Color32::GREEN), + )); + ui.add(egui::Button::new( + RichText::new("Off").color(egui::Color32::RED), + )); + }); + ui.end_row(); + }); + }); }); - - ui.add_space(20.0); - - let average_line = Line::new(PlotPoints::new(self.average_points.clone())); - //let measured_line = Line::new(PlotPoints::new(self.measured_points.clone())); - Plot::new("frequency_plot") - .view_aspect(4.0) - .allow_zoom(false) - .allow_scroll(false) - .allow_drag(false) - .allow_boxed_zoom(false) - .y_axis_width(12) - .y_axis_formatter(|val, _, _| formatters::frequency(val)) - .label_formatter(|name, value| { - format!("{}: {}", name, formatters::frequency(value.y)) - }) - .show(ui, |plot_ui| { - plot_ui.set_auto_bounds([true, true].into()); - plot_ui.line(average_line); - //plot_ui.line(measured_line); - }); - - ui.add_space(20.0); - - let pwm_line = Line::new(PlotPoints::new(self.pwm_points.clone())); - Plot::new("pwm_plot") - .view_aspect(4.0) - .allow_zoom(false) - .allow_scroll(false) - .allow_drag(false) - .allow_boxed_zoom(false) - .y_axis_width(12) - .show(ui, |plot_ui| { - plot_ui.set_auto_bounds([true, true].into()); - plot_ui.line(pwm_line); - }); }); } } diff --git a/hostsoftware/src/plots.rs b/hostsoftware/src/plots.rs new file mode 100644 index 0000000..f098f64 --- /dev/null +++ b/hostsoftware/src/plots.rs @@ -0,0 +1,65 @@ +use eframe::egui; +use egui_plot::{Line, Plot, PlotPoints}; + +use crate::{formatters}; + +use crate::StatusMessage; + +pub fn show_freuqencies(ui: &mut egui::Ui, state: &StatusMessage) { + ui.horizontal(|ui| { + ui.label( + egui::RichText::new(format!( + "Measured: {}", + formatters::frequency(state.measured_frequency as f64/ 1_000_000_000.0) + )) + .family(egui::FontFamily::Monospace) + .size(20.0), + ); + + ui.add_space(100.0); + + ui.label( + egui::RichText::new(format!( + "Average: {}", + formatters::frequency(state.average_frequency as f64 / 1_000_000_000.0) + )) + .family(egui::FontFamily::Monospace) + .size(20.0), + ); + }); +} + +pub fn show_plots(ui: &mut egui::Ui, average_points: &Vec<[f64; 2]>, pwm_points: &Vec<[f64; 2]>) { + let average_line = Line::new(PlotPoints::new(average_points.clone())); + Plot::new("frequency_plot") + .width(900.0) + .view_aspect(3.0) + .allow_zoom(false) + .allow_scroll(false) + .allow_drag(false) + .allow_boxed_zoom(false) + .y_axis_width(12) + .y_axis_formatter(|val, _, _| formatters::frequency(val)) + .label_formatter(|name, value| format!("{}: {}", name, formatters::frequency(value.y))) + .show(ui, |plot_ui| { + plot_ui.set_auto_bounds([true, true].into()); + plot_ui.line(average_line); + //plot_ui.line(measured_line); + }); + + ui.add_space(20.0); + + let pwm_line = Line::new(PlotPoints::new(pwm_points.clone())); + Plot::new("pwm_plot") + .width(900.0) + .view_aspect(3.0) + .allow_zoom(false) + .allow_scroll(false) + .allow_drag(false) + .allow_boxed_zoom(false) + .y_axis_width(12) + .show(ui, |plot_ui| { + plot_ui.set_auto_bounds([true, true].into()); + plot_ui.line(pwm_line); + }); +}