From c627c5bb9bc27af48ffff56d5bb38b394689f6c7 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 23 Sep 2026 18:47:44 +0200 Subject: [PATCH] a bit more cleanup --- satrs-example/client/src/main.rs | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/satrs-example/client/src/main.rs b/satrs-example/client/src/main.rs index a4f9a66..9cd9bc8 100644 --- a/satrs-example/client/src/main.rs +++ b/satrs-example/client/src/main.rs @@ -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 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 for SpiFaultMode { - fn from(mode: SpiFaultModeSelect) -> Self { +impl From 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, + fault: Option, /// 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 {