diff --git a/satrs-example/src/acs/subsystem.rs b/satrs-example/src/acs/subsystem.rs index f8caa16..36341aa 100644 --- a/satrs-example/src/acs/subsystem.rs +++ b/satrs-example/src/acs/subsystem.rs @@ -177,6 +177,33 @@ impl Subsystem { } } + pub fn execute_transition_step(&mut self, step: &TransitionCommands) { + if let Some((target_mode, _info)) = &step.mgm_assembly_mode { + self.mode_request_senders + .mode_request_assy + .send(models::acs::mgm_assembly::request::ModeRequest::SetMode( + *target_mode, + )) + .expect("failed to send mode request to MGM assembly"); + } + if let Some((target_mode, _info)) = &step.mgt_mode { + self.mode_request_senders + .mode_request_mgt + .send(models::acs::mgt::request::ModeRequest::SetMode( + *target_mode, + )) + .expect("failed to send mode request to MGM assembly"); + } + if let Some((target_mode, _info)) = &step.controller_mode { + self.mode_request_senders + .mode_request_ctrl + .send(models::acs::ctrl::request::ModeRequest::SetMode( + *target_mode, + )) + .expect("failed to send mode request to MGM assembly"); + } + } + pub fn handle_mode_request( &mut self, mode_request: models::acs::subsystem::request::ModeRequest, @@ -184,34 +211,11 @@ impl Subsystem { match mode_request { models::acs::subsystem::request::ModeRequest::SetMode(target_mode) => { self.mode_helper.start(target_mode); - match target_mode { - models::acs::subsystem::Mode::Off => { - // TODO: We need to start executing the transition table here.. - /* - self.mode_request_senders - .mode_request_assy - .send(models::acs::mgm_assembly::request::ModeRequest::SetMode( - models::acs::mgm_assembly::Mode::Device(models::DeviceMode::Off), - )) - .expect("failed to send mode request to MGM assembly"); - self.mode_request_senders - .mode_request_mgt - .send(models::acs::mgt::request::ModeRequest::SetMode( - models::acs::mgt::Mode::Normal, - )) - .expect("failed to send mode request to MGM assembly"); - self.mode_request_senders - .mode_request_ctrl - .send(models::acs::ctrl::request::ModeRequest::SetMode( - models::acs::ctrl::Mode::Passive, - )) - .expect("failed to send mode request to MGM assembly"); - */ - } - models::acs::subsystem::Mode::Safe => { - // TODO: Perform SAFE sequence. - } - } + self.transition_step = 0; + let first_step = Self::transition_sequence_for_mode(target_mode) + .get(self.transition_step) + .expect("empty transition table"); + self.execute_transition_step(first_step); } models::acs::subsystem::request::ModeRequest::ReadMode => { self.send_telemetry(