diff --git a/src/ui/panes.rs b/src/ui/panes.rs index 33f01ce633a5eef5f33389411968234a0dc97330..9b27514344054069934b1ff81472c9e7052b5cf6 100644 --- a/src/ui/panes.rs +++ b/src/ui/panes.rs @@ -1,7 +1,8 @@ mod default; mod messages_viewer; mod pid_drawing_tool; -pub mod plot; +mod plot; +mod valve_control; use egui_tiles::TileId; use enum_dispatch::enum_dispatch; @@ -91,6 +92,9 @@ pub enum PaneKind { #[strum(message = "Pid")] Pid(pid_drawing_tool::PidPane), + + #[strum(message = "Valve Control")] + ValveControl(valve_control::ValveControlPane), } impl Default for PaneKind { diff --git a/src/ui/panes/plot.rs b/src/ui/panes/plot.rs index 4a98372c1fd099015a2774a335a285fef93b3e2b..684f2211ad620a4edc404c170e05ee2916ef75ab 100644 --- a/src/ui/panes/plot.rs +++ b/src/ui/panes/plot.rs @@ -33,7 +33,7 @@ pub struct Plot2DPane { #[serde(skip)] settings_visible: bool, #[serde(skip)] - pub contains_pointer: bool, + contains_pointer: bool, } impl PartialEq for Plot2DPane { diff --git a/src/ui/panes/valve_control.rs b/src/ui/panes/valve_control.rs new file mode 100644 index 0000000000000000000000000000000000000000..a46ff41cd1dbc3a276ff8b2fd44bf12c34749564 --- /dev/null +++ b/src/ui/panes/valve_control.rs @@ -0,0 +1,25 @@ +use egui_tiles::TileId; +use serde::{Deserialize, Serialize}; + +use crate::ui::app::PaneResponse; + +use super::PaneBehavior; + +mod enums; + +#[derive(Clone, PartialEq, Default, Serialize, Deserialize, Debug)] +pub struct ValveControlPane { + // Temporary Internal state + #[serde(skip)] + contains_pointer: bool, +} + +impl PaneBehavior for ValveControlPane { + fn ui(&mut self, ui: &mut egui::Ui, tile_id: TileId) -> PaneResponse { + todo!() + } + + fn contains_pointer(&self) -> bool { + self.contains_pointer + } +} diff --git a/src/ui/panes/valve_control/enums.rs b/src/ui/panes/valve_control/enums.rs new file mode 100644 index 0000000000000000000000000000000000000000..a1bf8fcdd341d13f6c306c69de358c3d5912122f --- /dev/null +++ b/src/ui/panes/valve_control/enums.rs @@ -0,0 +1,68 @@ +use std::fmt::Display; + +use strum_macros::EnumIter; + +use crate::mavlink::{ + MessageData, SET_ATOMIC_VALVE_TIMING_TC_DATA, SET_VALVE_MAXIMUM_APERTURE_TC_DATA, Servoslist, +}; + +#[allow(non_camel_case_types)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, EnumIter)] +pub enum Valve { + OxFilling, + OxRelease, + OxVenting, + N2Filling, + N2Release, + N2Quenching, + N23Way, + Main, + Nitrogen, +} + +impl From<Valve> for Servoslist { + fn from(valve: Valve) -> Servoslist { + match valve { + Valve::OxFilling => Servoslist::OX_FILLING_VALVE, + Valve::OxRelease => Servoslist::OX_RELEASE_VALVE, + Valve::OxVenting => Servoslist::OX_VENTING_VALVE, + Valve::N2Filling => Servoslist::N2_FILLING_VALVE, + Valve::N2Release => Servoslist::N2_RELEASE_VALVE, + Valve::N2Quenching => Servoslist::N2_QUENCHING_VALVE, + Valve::N23Way => Servoslist::N2_3WAY_VALVE, + Valve::Main => Servoslist::MAIN_VALVE, + Valve::Nitrogen => Servoslist::NITROGEN_VALVE, + } + } +} + +impl Display for Valve { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Valve::OxFilling => write!(f, "Oxidizer Filling"), + Valve::OxRelease => write!(f, "Oxidizer Release"), + Valve::OxVenting => write!(f, "Oxidizer Venting"), + Valve::N2Filling => write!(f, "Nitrogen Filling"), + Valve::N2Release => write!(f, "Nitrogen Release"), + Valve::N2Quenching => write!(f, "Nitrogen Quenching"), + Valve::N23Way => write!(f, "Nitrogen 3-Way"), + Valve::Main => write!(f, "Main"), + Valve::Nitrogen => write!(f, "Nitrogen"), + } + } +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq, EnumIter)] +pub enum ValveCommands { + AtomicValveTiming, + ValveMaximumAperture, +} + +impl From<ValveCommands> for u32 { + fn from(command: ValveCommands) -> u32 { + match command { + ValveCommands::AtomicValveTiming => SET_ATOMIC_VALVE_TIMING_TC_DATA::ID, + ValveCommands::ValveMaximumAperture => SET_VALVE_MAXIMUM_APERTURE_TC_DATA::ID, + } + } +}