From 74a26643abb015b1483f0fb74dee5541b4b7d40d Mon Sep 17 00:00:00 2001 From: Federico Lolli <federico.lolli@skywarder.eu> Date: Thu, 20 Mar 2025 20:01:58 +0100 Subject: [PATCH] CHECKPOINT --- src/ui/panes.rs | 6 ++- src/ui/panes/plot.rs | 2 +- src/ui/panes/valve_control.rs | 25 +++++++++++ src/ui/panes/valve_control/enums.rs | 68 +++++++++++++++++++++++++++++ 4 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 src/ui/panes/valve_control.rs create mode 100644 src/ui/panes/valve_control/enums.rs diff --git a/src/ui/panes.rs b/src/ui/panes.rs index 33f01ce..9b27514 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 4a98372..684f221 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 0000000..a46ff41 --- /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 0000000..a1bf8fc --- /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, + } + } +} -- GitLab