let's wrap this up
This commit is contained in:
@@ -137,9 +137,7 @@ fn handle_mgm_command(
|
||||
) -> anyhow::Result<()> {
|
||||
if let Some(mode) = args.spi_fault {
|
||||
if target_id != types::ComponentId::AcsMgm0 {
|
||||
bail!(
|
||||
"SPI fault injection is only supported for MGM0 right now (minisim limitation)"
|
||||
);
|
||||
bail!("SPI fault injection is only supported for MGM0 right now (minisim limitation)");
|
||||
}
|
||||
inject_mgm_failure(mode.into())?;
|
||||
}
|
||||
@@ -419,7 +417,12 @@ fn inject_mgm_failure(mode: SpiFaultMode) -> anyhow::Result<()> {
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(e) if matches!(e.kind(), std::io::ErrorKind::WouldBlock | std::io::ErrorKind::TimedOut) => {
|
||||
Err(e)
|
||||
if matches!(
|
||||
e.kind(),
|
||||
std::io::ErrorKind::WouldBlock | std::io::ErrorKind::TimedOut
|
||||
) =>
|
||||
{
|
||||
bail!("minisim not reachable at {sim_addr} (ping timed out) - is it running?");
|
||||
}
|
||||
Err(e) => return Err(e.into()),
|
||||
|
||||
@@ -16,8 +16,6 @@ use types::acs::mgm::response::ModeResponse;
|
||||
use types::pcdu::SwitchId;
|
||||
use types::{ComponentId, DeviceMode, HkRequestType, acs::mgm};
|
||||
|
||||
use satrs::request::MessageMetadata;
|
||||
|
||||
use crate::ccsds::pack_ccsds_tm_packet_for_now;
|
||||
use crate::eps::PowerSwitchHelper;
|
||||
|
||||
@@ -471,11 +469,9 @@ impl MgmHandlerLis3Mdl {
|
||||
let switch_target_on = target_mode != DeviceMode::Off;
|
||||
if self.mode_helpers.transition_state == TransitionState::Idle {
|
||||
let result = if switch_target_on {
|
||||
self.switch_helper
|
||||
.send_switch_on_cmd(MessageMetadata::new(0, self.id as u32), self.switch_id())
|
||||
self.switch_helper.send_switch_on_cmd(self.switch_id())
|
||||
} else {
|
||||
self.switch_helper
|
||||
.send_switch_off_cmd(MessageMetadata::new(0, self.id as u32), self.switch_id())
|
||||
self.switch_helper.send_switch_off_cmd(self.switch_id())
|
||||
};
|
||||
if result.is_err() {
|
||||
// Could not send switch command.. still continue with transition.
|
||||
@@ -554,7 +550,7 @@ mod tests {
|
||||
};
|
||||
|
||||
use arbitrary_int::u11;
|
||||
use satrs::{request::GenericMessage, spacepackets::SpacePacketHeader};
|
||||
use satrs::spacepackets::SpacePacketHeader;
|
||||
use satrs_minisim::acs::lis3mdl::MgmLis3RawValues;
|
||||
use types::{
|
||||
Apid, ComponentId, TcHeader,
|
||||
@@ -600,7 +596,7 @@ mod tests {
|
||||
pub shared_switch_set: SharedSwitchSet,
|
||||
pub tc_tx: mpsc::SyncSender<CcsdsTcPacketOwned>,
|
||||
pub tm_rx: mpsc::Receiver<CcsdsTmPacketOwned>,
|
||||
pub switch_rx: mpsc::Receiver<GenericMessage<SwitchRequest>>,
|
||||
pub switch_rx: mpsc::Receiver<SwitchRequest>,
|
||||
pub health_table: HealthTableMapSync,
|
||||
pub handler: MgmHandlerLis3Mdl,
|
||||
}
|
||||
@@ -697,8 +693,8 @@ mod tests {
|
||||
|
||||
// Verify power switch handling.
|
||||
let switch_req = testbench.switch_rx.try_recv().expect("no switch request");
|
||||
assert_eq!(switch_req.message.switch_id, SwitchId::Mgm0);
|
||||
assert_eq!(switch_req.message.target_state, SwitchStateBinary::On);
|
||||
assert_eq!(switch_req.switch_id, SwitchId::Mgm0);
|
||||
assert_eq!(switch_req.target_state, SwitchStateBinary::On);
|
||||
|
||||
// This simulates one cycle for the power switch to update.
|
||||
testbench
|
||||
@@ -950,8 +946,8 @@ mod tests {
|
||||
.switch_rx
|
||||
.try_recv()
|
||||
.expect("no switch-off request sent after fault");
|
||||
assert_eq!(switch_req.message.switch_id, SwitchId::Mgm0);
|
||||
assert_eq!(switch_req.message.target_state, SwitchStateBinary::Off);
|
||||
assert_eq!(switch_req.switch_id, SwitchId::Mgm0);
|
||||
assert_eq!(switch_req.target_state, SwitchStateBinary::Off);
|
||||
|
||||
// Simulate the PCDU acting on the switch-off request.
|
||||
testbench
|
||||
|
||||
@@ -2,10 +2,7 @@ use derive_new::new;
|
||||
use std::{cell::RefCell, collections::VecDeque, sync::mpsc, time::Duration};
|
||||
use types::pcdu::{SwitchId, SwitchRequest, SwitchState, SwitchStateBinary};
|
||||
|
||||
use satrs::{
|
||||
queue::GenericSendError,
|
||||
request::{GenericMessage, MessageMetadata},
|
||||
};
|
||||
use satrs::{queue::GenericSendError, request::MessageMetadata};
|
||||
use thiserror::Error;
|
||||
|
||||
use crate::eps::pcdu::SwitchMapWrapper;
|
||||
@@ -16,7 +13,7 @@ pub mod pcdu;
|
||||
|
||||
#[derive(new, Clone)]
|
||||
pub struct PowerSwitchHelper {
|
||||
switcher_tx: mpsc::SyncSender<GenericMessage<SwitchRequest>>,
|
||||
switcher_tx: mpsc::SyncSender<SwitchRequest>,
|
||||
shared_switch_set: SharedSwitchSet,
|
||||
}
|
||||
|
||||
@@ -37,28 +34,15 @@ pub enum SwitchInfoError {
|
||||
}
|
||||
|
||||
impl PowerSwitchHelper {
|
||||
pub fn send_switch_on_cmd(
|
||||
&self,
|
||||
requestor_info: satrs::request::MessageMetadata,
|
||||
switch_id: SwitchId,
|
||||
) -> Result<(), GenericSendError> {
|
||||
self.switcher_tx.send(GenericMessage::new(
|
||||
requestor_info,
|
||||
SwitchRequest::new(switch_id, SwitchStateBinary::On),
|
||||
))?;
|
||||
pub fn send_switch_on_cmd(&self, switch_id: SwitchId) -> Result<(), GenericSendError> {
|
||||
self.switcher_tx
|
||||
.send(SwitchRequest::new(switch_id, SwitchStateBinary::On))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn send_switch_off_cmd(
|
||||
&self,
|
||||
requestor_info: satrs::request::MessageMetadata,
|
||||
switch_id: SwitchId,
|
||||
) -> Result<(), GenericSendError> {
|
||||
self.switcher_tx.send(GenericMessage::new(
|
||||
requestor_info,
|
||||
SwitchRequest::new(switch_id, SwitchStateBinary::Off),
|
||||
))?;
|
||||
pub fn send_switch_off_cmd(&self, switch_id: SwitchId) -> Result<(), GenericSendError> {
|
||||
self.switcher_tx
|
||||
.send(SwitchRequest::new(switch_id, SwitchStateBinary::Off))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ use std::{
|
||||
|
||||
use derive_new::new;
|
||||
use num_enum::{IntoPrimitive, TryFromPrimitive};
|
||||
use satrs::{request::GenericMessage, spacepackets::CcsdsPacketIdAndPsc};
|
||||
use satrs::spacepackets::CcsdsPacketIdAndPsc;
|
||||
use satrs_example::TimestampHelper;
|
||||
use satrs_minisim::{
|
||||
SerializableSimMsgPayload, SimReply, SimRequest,
|
||||
@@ -264,7 +264,7 @@ pub enum OpCode {
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub struct PcduHandler<ComInterface: SerialInterface> {
|
||||
dev_str: &'static str,
|
||||
switch_request_rx: mpsc::Receiver<GenericMessage<SwitchRequest>>,
|
||||
switch_request_rx: mpsc::Receiver<SwitchRequest>,
|
||||
tc_rx: std::sync::mpsc::Receiver<CcsdsTcPacketOwned>,
|
||||
tm_tx: mpsc::SyncSender<CcsdsTmPacketOwned>,
|
||||
pub com_interface: ComInterface,
|
||||
@@ -277,7 +277,7 @@ impl<ComInterface: SerialInterface> PcduHandler<ComInterface> {
|
||||
pub fn new(
|
||||
tc_rx: std::sync::mpsc::Receiver<CcsdsTcPacketOwned>,
|
||||
tm_tx: std::sync::mpsc::SyncSender<CcsdsTmPacketOwned>,
|
||||
switch_request_rx: mpsc::Receiver<GenericMessage<SwitchRequest>>,
|
||||
switch_request_rx: mpsc::Receiver<SwitchRequest>,
|
||||
com_interface: ComInterface,
|
||||
shared_switch_map: Arc<Mutex<SwitchSet>>,
|
||||
init_mode: DeviceMode,
|
||||
@@ -488,10 +488,7 @@ impl<ComInterface: SerialInterface> PcduHandler<ComInterface> {
|
||||
loop {
|
||||
match self.switch_request_rx.try_recv() {
|
||||
Ok(switch_req) => {
|
||||
self.handle_device_switching(
|
||||
switch_req.message.switch_id(),
|
||||
switch_req.message.target_state(),
|
||||
);
|
||||
self.handle_device_switching(switch_req.switch_id(), switch_req.target_state());
|
||||
}
|
||||
Err(e) => match e {
|
||||
mpsc::TryRecvError::Empty => break,
|
||||
@@ -531,10 +528,7 @@ mod tests {
|
||||
use std::sync::mpsc;
|
||||
|
||||
use arbitrary_int::u11;
|
||||
use satrs::{
|
||||
request::{GenericMessage, MessageMetadata},
|
||||
spacepackets::SpacePacketHeader,
|
||||
};
|
||||
use satrs::spacepackets::SpacePacketHeader;
|
||||
use types::{
|
||||
Apid, TcHeader,
|
||||
pcdu::{SwitchMapBinary, SwitchStateBinary},
|
||||
@@ -593,7 +587,7 @@ mod tests {
|
||||
pub mode_reply_rx_to_parent: mpsc::Receiver<types::pcdu::response::Response>,
|
||||
pub tc_tx: mpsc::SyncSender<CcsdsTcPacketOwned>,
|
||||
pub tm_rx: mpsc::Receiver<CcsdsTmPacketOwned>,
|
||||
pub switch_request_tx: mpsc::Sender<GenericMessage<SwitchRequest>>,
|
||||
pub switch_request_tx: mpsc::Sender<SwitchRequest>,
|
||||
pub handler: PcduHandler<SerialInterfaceTest>,
|
||||
}
|
||||
|
||||
@@ -730,10 +724,7 @@ mod tests {
|
||||
.unwrap();
|
||||
testbench
|
||||
.switch_request_tx
|
||||
.send(GenericMessage::new(
|
||||
MessageMetadata::new(0, ComponentId::AcsMgm0 as u32),
|
||||
SwitchRequest::new(SwitchId::Mgm0, SwitchStateBinary::On),
|
||||
))
|
||||
.send(SwitchRequest::new(SwitchId::Mgm0, SwitchStateBinary::On))
|
||||
.expect("failed to send switch request");
|
||||
testbench.handler.periodic_operation(OpCode::RegularOp);
|
||||
testbench
|
||||
|
||||
Reference in New Issue
Block a user