a bit more cleanup
This commit is contained in:
@@ -4,8 +4,7 @@ use clap::Parser as _;
|
||||
use satrs_example::config::{OBSW_SERVER_ADDR, SERVER_PORT};
|
||||
use satrs_minisim::{
|
||||
SerializableSimMsgPayload, SimComponent, SimCtrlReply, SimCtrlRequest, SimMessageProvider,
|
||||
SimReply, SimRequest, acs::MgmRequestLis3Mdl, acs::SpiFault, acs::SpiFaultMode,
|
||||
udp::SIM_CTRL_PORT,
|
||||
SimReply, SimRequest, acs, acs::MgmRequestLis3Mdl, acs::SpiFault, udp::SIM_CTRL_PORT,
|
||||
};
|
||||
use spacepackets::{CcsdsPacketIdAndPsc, SpacePacketHeader};
|
||||
use std::{
|
||||
@@ -90,24 +89,26 @@ impl From<EventSenderSelect> for types::ComponentId {
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Eq, Clone, Copy, clap::ValueEnum)]
|
||||
enum SpiFaultModeSelect {
|
||||
enum FaultMode {
|
||||
None,
|
||||
/// SPI communication is all zeroes, modelling an unconnected sensor.
|
||||
AllZeros,
|
||||
/// SPI communication is all ones, modelling a broken sensor.
|
||||
AllOnes,
|
||||
}
|
||||
|
||||
impl From<SpiFaultModeSelect> for SpiFaultMode {
|
||||
fn from(mode: SpiFaultModeSelect) -> Self {
|
||||
impl From<FaultMode> for acs::SpiFaultMode {
|
||||
fn from(mode: FaultMode) -> Self {
|
||||
match mode {
|
||||
SpiFaultModeSelect::None => SpiFaultMode::None,
|
||||
SpiFaultModeSelect::AllZeros => SpiFaultMode::AllZeros,
|
||||
SpiFaultModeSelect::AllOnes => SpiFaultMode::AllOnes,
|
||||
FaultMode::None => acs::SpiFaultMode::None,
|
||||
FaultMode::AllZeros => acs::SpiFaultMode::AllZeros,
|
||||
FaultMode::AllOnes => acs::SpiFaultMode::AllOnes,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, PartialEq, Eq, Clone, Copy, clap::ValueEnum)]
|
||||
enum SpiFaultKindSelect {
|
||||
enum FaultKind {
|
||||
/// Cleared when the device is switched off, so a power cycle recovers from it.
|
||||
Transient,
|
||||
/// Survives power cycles.
|
||||
@@ -149,10 +150,10 @@ struct MgmArgs {
|
||||
/// Only takes effect for MGM0: minisim always routes this fault to the MGM0 model
|
||||
/// regardless of which MGM the request names (a pre-existing minisim limitation).
|
||||
#[arg(long, value_enum)]
|
||||
spi_fault: Option<SpiFaultModeSelect>,
|
||||
fault: Option<FaultMode>,
|
||||
/// Whether a power cycle clears the injected SPI fault.
|
||||
#[arg(long, value_enum, default_value_t)]
|
||||
spi_fault_kind: SpiFaultKindSelect,
|
||||
fault_kind: FaultKind,
|
||||
/// Override the device's FDIR health state, for example to clear a `Faulty` state set by
|
||||
/// the handler after the underlying issue has been fixed or worked around.
|
||||
#[arg(long, value_enum)]
|
||||
@@ -200,13 +201,13 @@ fn handle_mgm_command(
|
||||
target_id: types::ComponentId,
|
||||
args: MgmArgs,
|
||||
) -> anyhow::Result<()> {
|
||||
if let Some(mode) = args.spi_fault {
|
||||
if let Some(mode) = args.fault {
|
||||
if target_id != types::ComponentId::AcsMgm0 {
|
||||
bail!("SPI fault injection is only supported for MGM0 right now (minisim limitation)");
|
||||
}
|
||||
inject_mgm_failure(SpiFault {
|
||||
mode: mode.into(),
|
||||
cleared_by_power_cycle: args.spi_fault_kind == SpiFaultKindSelect::Transient,
|
||||
cleared_by_power_cycle: args.fault_kind == FaultKind::Transient,
|
||||
})?;
|
||||
}
|
||||
if args.ping {
|
||||
|
||||
Reference in New Issue
Block a user