diff --git a/satrs-example/src/eps/pcdu.rs b/satrs-example/src/eps/pcdu.rs index a18b114..17657c6 100644 --- a/satrs-example/src/eps/pcdu.rs +++ b/satrs-example/src/eps/pcdu.rs @@ -8,13 +8,14 @@ use derive_new::new; use satrs::{ hk::{HkRequest, HkRequestVariant}, mode::{ModeAndSubmode, ModeError, ModeProvider, ModeReply, ModeRequestHandler}, + power::{SwitchRequest, SwitchStateBinary}, pus::EcssTmSender, queue::{GenericSendError, GenericTargetedMessagingError}, request::{GenericMessage, MessageMetadata, UniqueApidTargetId}, }; use satrs_example::{config::components::PUS_MODE_SERVICE, DeviceMode, TimestampHelper}; use satrs_minisim::{ - eps::{PcduReply, PcduRequest, SwitchMap, SwitchMapBinaryWrapper}, + eps::{PcduReply, PcduRequest, PcduSwitch, SwitchMap, SwitchMapBinary, SwitchMapBinaryWrapper}, SerializableSimMsgPayload, SimReply, SimRequest, }; @@ -177,6 +178,7 @@ pub struct PcduHandler { mode_interface: MpscModeLeafInterface, composite_request_rx: mpsc::Receiver>, hk_reply_tx: mpsc::Sender>, + switch_request_rx: mpsc::Receiver>, tm_sender: TmSender, pub com_interface: ComInterface, shared_switch_map: Arc>, @@ -194,8 +196,12 @@ impl PcduHandler { self.poll_and_handle_replies(); @@ -239,6 +245,14 @@ impl PcduHandler PcduHandler match PcduSwitch::try_from(switch_req.message.switch_id()) { + Ok(pcdu_switch) => { + let pcdu_req = PcduRequest::SwitchDevice { + switch: pcdu_switch, + state: switch_req.message.target_state(), + }; + let pcdu_req_ser = serde_json::to_string(&pcdu_req).unwrap(); + self.com_interface.send(pcdu_req_ser.as_bytes()) + } + Err(e) => todo!("failed to convert switch ID {:?} to typed PCDU switch", e), + }, + Err(e) => match e { + mpsc::TryRecvError::Empty => todo!(), + mpsc::TryRecvError::Disconnected => todo!(), + }, + }; + } + } + pub fn poll_and_handle_replies(&mut self) {} } diff --git a/satrs-example/src/main.rs b/satrs-example/src/main.rs index bc8a124..2db7872 100644 --- a/satrs-example/src/main.rs +++ b/satrs-example/src/main.rs @@ -223,6 +223,8 @@ fn static_tmtc_pool_main() { mpsc::channel(); let shared_switch_set = Arc::default(); + let (switch_request_tx, switch_request_rx) = mpsc::sync_channel(20); + let shared_mgm_set = Arc::default(); let mgm_mode_leaf_interface = MpscModeLeafInterface { request_rx: mgm_handler_mode_rx, @@ -272,6 +274,7 @@ fn static_tmtc_pool_main() { pcdu_mode_leaf_interface, pcdu_handler_composite_rx, pus_hk_reply_tx, + switch_request_rx, tm_sink_tx, pcdu_serial_interface, shared_switch_set, diff --git a/satrs-minisim/Cargo.toml b/satrs-minisim/Cargo.toml index 0e8b18c..771ffaa 100644 --- a/satrs-minisim/Cargo.toml +++ b/satrs-minisim/Cargo.toml @@ -12,6 +12,7 @@ log = "0.4" thiserror = "1" fern = "0.5" strum = { version = "0.26", features = ["derive"] } +num_enum = "0.7" humantime = "2" [dependencies.asynchronix] diff --git a/satrs-minisim/src/lib.rs b/satrs-minisim/src/lib.rs index 35ddd97..eb1b420 100644 --- a/satrs-minisim/src/lib.rs +++ b/satrs-minisim/src/lib.rs @@ -1,4 +1,5 @@ use asynchronix::time::MonotonicTime; +use num_enum::{IntoPrimitive, TryFromPrimitive}; use serde::{de::DeserializeOwned, Deserialize, Serialize}; #[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize, Hash)] @@ -170,7 +171,20 @@ pub mod eps { pub struct SwitchMapWrapper(pub SwitchMap); pub struct SwitchMapBinaryWrapper(pub SwitchMapBinary); - #[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize, Hash, EnumIter)] + #[derive( + Debug, + Copy, + Clone, + PartialEq, + Eq, + Serialize, + Deserialize, + Hash, + EnumIter, + IntoPrimitive, + TryFromPrimitive, + )] + #[repr(u16)] pub enum PcduSwitch { Mgm = 0, Mgt = 1,