I don't think channel IDs are required anymore
Some checks failed
Rust/sat-rs/pipeline/pr-main There was a failure building this commit
Some checks failed
Rust/sat-rs/pipeline/pr-main There was a failure building this commit
This commit is contained in:
74
satrs-example/src/acs/mgm.rs
Normal file
74
satrs-example/src/acs/mgm.rs
Normal file
@ -0,0 +1,74 @@
|
||||
use std::sync::mpsc::{self};
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
||||
use satrs::mode::{ModeAndSubmode, ModeProvider, ModeReply, ModeRequest, ModeRequestHandler};
|
||||
use satrs::pus::EcssTmSenderCore;
|
||||
use satrs::request::GenericMessage;
|
||||
use satrs::ComponentId;
|
||||
|
||||
use crate::pus::hk::HkReply;
|
||||
use crate::requests::RequestWithToken;
|
||||
|
||||
pub trait SpiInterface {
|
||||
type Error;
|
||||
fn transfer(&mut self, data: &mut [u8]) -> Result<(), Self::Error>;
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
pub struct MgmData {
|
||||
pub x: f32,
|
||||
pub y: f32,
|
||||
pub z: f32,
|
||||
}
|
||||
|
||||
pub struct MgmHandler<ComInterface: SpiInterface, TmSender: EcssTmSenderCore> {
|
||||
id: ComponentId,
|
||||
dev_str: &'static str,
|
||||
mode_request_receiver: mpsc::Receiver<GenericMessage<ModeRequest>>,
|
||||
mode_reply_sender_to_pus: mpsc::Sender<GenericMessage<ModeReply>>,
|
||||
mode_reply_sender_to_parent: mpsc::Sender<GenericMessage<ModeReply>>,
|
||||
composite_request_receiver: mpsc::Receiver<RequestWithToken>,
|
||||
hk_reply_sender: mpsc::Sender<GenericMessage<HkReply>>,
|
||||
hk_tm_sender: TmSender,
|
||||
mode: ModeAndSubmode,
|
||||
spi_interface: ComInterface,
|
||||
shared_mgm_set: Arc<Mutex<MgmData>>,
|
||||
}
|
||||
|
||||
impl<ComInterface: SpiInterface, TmSender: EcssTmSenderCore> MgmHandler<ComInterface, TmSender> {
|
||||
pub fn perform_operation(&mut self) {}
|
||||
}
|
||||
|
||||
impl<ComInterface: SpiInterface, TmSender: EcssTmSenderCore> ModeProvider
|
||||
for MgmHandler<ComInterface, TmSender>
|
||||
{
|
||||
fn mode_and_submode(&self) -> ModeAndSubmode {
|
||||
self.mode
|
||||
}
|
||||
}
|
||||
|
||||
impl<ComInterface: SpiInterface, TmSender: EcssTmSenderCore> ModeRequestHandler
|
||||
for MgmHandler<ComInterface, TmSender>
|
||||
{
|
||||
fn start_transition(
|
||||
&mut self,
|
||||
request_id: satrs::request::RequestId,
|
||||
sender_id: ComponentId,
|
||||
mode_and_submode: ModeAndSubmode,
|
||||
) -> Result<(), satrs::mode::ModeError> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn announce_mode(
|
||||
&self,
|
||||
request_id: satrs::request::RequestId,
|
||||
sender_id: satrs::ComponentId,
|
||||
recursive: bool,
|
||||
) {
|
||||
log::info!("{} announcing mode: {:?}", self.dev_str, self.mode);
|
||||
}
|
||||
|
||||
fn handle_mode_reached(&mut self) -> Result<(), satrs::queue::GenericTargetedMessagingError> {
|
||||
todo!()
|
||||
}
|
||||
}
|
@ -1,26 +1,6 @@
|
||||
use std::sync::mpsc::{self, TryRecvError};
|
||||
|
||||
use log::{info, warn};
|
||||
use satrs::pus::verification::VerificationReportingProvider;
|
||||
use satrs::pus::{EcssTmSender, PusTmWrapper};
|
||||
use satrs::request::TargetAndApidId;
|
||||
use satrs::spacepackets::ecss::hk::Subservice as HkSubservice;
|
||||
use satrs::{
|
||||
hk::HkRequest,
|
||||
spacepackets::{
|
||||
ecss::tm::{PusTmCreator, PusTmSecondaryHeader},
|
||||
time::cds::{DaysLen16Bits, TimeProvider},
|
||||
SequenceFlags, SpHeader,
|
||||
},
|
||||
};
|
||||
use satrs_example::config::{RequestTargetId, PUS_APID};
|
||||
|
||||
use crate::{
|
||||
hk::{AcsHkIds, HkUniqueId},
|
||||
requests::{Request, RequestWithToken},
|
||||
update_time,
|
||||
};
|
||||
mod mgm;
|
||||
|
||||
/*
|
||||
pub struct AcsTask<VerificationReporter: VerificationReportingProvider> {
|
||||
timestamp: [u8; 7],
|
||||
time_provider: TimeProvider<DaysLen16Bits>,
|
||||
@ -112,3 +92,4 @@ impl<VerificationReporter: VerificationReportingProvider> AcsTask<VerificationRe
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
@ -94,27 +94,16 @@ pub mod hk_err {
|
||||
];
|
||||
}
|
||||
|
||||
#[allow(clippy::enum_variant_names)]
|
||||
#[derive(Copy, Clone, PartialEq, Eq)]
|
||||
pub enum TmSenderId {
|
||||
pub enum ComponentIdList {
|
||||
PusVerification = 0,
|
||||
PusTest = 1,
|
||||
PusEvent = 2,
|
||||
PusHk = 3,
|
||||
PusAction = 4,
|
||||
PusSched = 5,
|
||||
AllEvents = 6,
|
||||
AcsSubsystem = 7,
|
||||
EventManagement = 1,
|
||||
PusTest = 2,
|
||||
PusAction = 3,
|
||||
PusSched = 4,
|
||||
PusHk = 5,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq)]
|
||||
pub enum TcReceiverId {
|
||||
PusTest = 1,
|
||||
PusEvent = 2,
|
||||
PusHk = 3,
|
||||
PusAction = 4,
|
||||
PusSched = 5,
|
||||
}
|
||||
pub mod pool {
|
||||
use super::*;
|
||||
pub fn create_static_pools() -> (StaticMemoryPool, StaticMemoryPool) {
|
||||
|
@ -14,9 +14,9 @@ use satrs::{
|
||||
verification::{TcStateStarted, VerificationReportingProvider, VerificationToken},
|
||||
EcssTmSender,
|
||||
},
|
||||
spacepackets::time::cds::{self, TimeProvider},
|
||||
spacepackets::time::cds::{self, TimeProvider}, ComponentId,
|
||||
};
|
||||
use satrs_example::config::PUS_APID;
|
||||
use satrs_example::config::{PUS_APID, ComponentIdList};
|
||||
|
||||
use crate::update_time;
|
||||
|
||||
@ -48,9 +48,9 @@ impl<VerificationReporter: VerificationReportingProvider> PusEventHandler<Verifi
|
||||
let pus_event_dispatcher =
|
||||
DefaultPusEventU32Dispatcher::new_with_default_backend(event_reporter);
|
||||
let pus_event_man_send_provider =
|
||||
EventU32SenderMpscBounded::new(1, pus_event_man_tx, event_queue_cap);
|
||||
EventU32SenderMpscBounded::new(ComponentIdList::EventManagement as ComponentId, pus_event_man_tx, event_queue_cap);
|
||||
|
||||
event_manager.subscribe_all(pus_event_man_send_provider.channel_id());
|
||||
event_manager.subscribe_all(pus_event_man_send_provider.target_id());
|
||||
event_manager.add_sender(pus_event_man_send_provider);
|
||||
|
||||
Self {
|
||||
|
@ -23,11 +23,13 @@ use satrs_example::config::pool::{create_sched_tc_pool, create_static_pools};
|
||||
use satrs_example::config::tasks::{
|
||||
FREQ_MS_AOCS, FREQ_MS_EVENT_HANDLING, FREQ_MS_PUS_STACK, FREQ_MS_UDP_TMTC,
|
||||
};
|
||||
use satrs_example::config::{RequestTargetId, TmSenderId, OBSW_SERVER_ADDR, PUS_APID, SERVER_PORT};
|
||||
use satrs_example::config::{
|
||||
ComponentIdList, RequestTargetId, OBSW_SERVER_ADDR, PUS_APID, SERVER_PORT,
|
||||
};
|
||||
use tmtc::PusTcSourceProviderDynamic;
|
||||
use udp::DynamicUdpTmHandler;
|
||||
|
||||
use crate::acs::AcsTask;
|
||||
// use crate::acs::AcsTask;
|
||||
use crate::ccsds::CcsdsReceiver;
|
||||
use crate::logger::setup_logger;
|
||||
use crate::pus::action::{create_action_service_dynamic, create_action_service_static};
|
||||
@ -47,7 +49,7 @@ use satrs::pus::verification::{VerificationReporterCfg, VerificationReporterWith
|
||||
use satrs::pus::{EcssTmSender, TmAsVecSenderWithId, TmInSharedPoolSenderWithId};
|
||||
use satrs::spacepackets::{time::cds::TimeProvider, time::TimeWriter};
|
||||
use satrs::tmtc::CcsdsDistributor;
|
||||
use satrs::ChannelId;
|
||||
use satrs::ComponentId;
|
||||
use std::net::{IpAddr, SocketAddr};
|
||||
use std::sync::mpsc::{self, channel};
|
||||
use std::sync::{Arc, RwLock};
|
||||
@ -77,7 +79,7 @@ fn static_tmtc_pool_main() {
|
||||
// Every software component which needs to generate verification telemetry, receives a cloned
|
||||
// verification reporter.
|
||||
let verif_reporter = create_verification_reporter(TmInSharedPoolSenderWithId::new(
|
||||
TmSenderId::PusVerification as ChannelId,
|
||||
ComponentIdList::PusVerification as ComponentId,
|
||||
"verif_sender",
|
||||
shared_tm_pool.clone(),
|
||||
tm_funnel_tx.clone(),
|
||||
@ -105,7 +107,7 @@ fn static_tmtc_pool_main() {
|
||||
// in the sat-rs documentation.
|
||||
let mut event_handler = EventHandler::new(
|
||||
TmInSharedPoolSenderWithId::new(
|
||||
TmSenderId::AllEvents as ChannelId,
|
||||
ComponentIdList::EventManagement as ComponentId,
|
||||
"ALL_EVENTS_TX",
|
||||
shared_tm_pool.clone(),
|
||||
tm_funnel_tx.clone(),
|
||||
@ -209,6 +211,7 @@ fn static_tmtc_pool_main() {
|
||||
)
|
||||
.expect("tcp server creation failed");
|
||||
|
||||
/*
|
||||
let mut acs_task = AcsTask::new(
|
||||
TmInSharedPoolSenderWithId::new(
|
||||
TmSenderId::AcsSubsystem as ChannelId,
|
||||
@ -219,6 +222,7 @@ fn static_tmtc_pool_main() {
|
||||
acs_thread_rx,
|
||||
verif_reporter,
|
||||
);
|
||||
*/
|
||||
|
||||
let mut tm_funnel = TmFunnelStatic::new(
|
||||
shared_tm_pool,
|
||||
@ -272,7 +276,7 @@ fn static_tmtc_pool_main() {
|
||||
let jh_aocs = thread::Builder::new()
|
||||
.name("AOCS".to_string())
|
||||
.spawn(move || loop {
|
||||
acs_task.periodic_operation();
|
||||
// acs_task.periodic_operation();
|
||||
thread::sleep(Duration::from_millis(FREQ_MS_AOCS));
|
||||
})
|
||||
.unwrap();
|
||||
@ -312,7 +316,7 @@ fn dyn_tmtc_pool_main() {
|
||||
// Every software component which needs to generate verification telemetry, gets a cloned
|
||||
// verification reporter.
|
||||
let verif_reporter = create_verification_reporter(TmAsVecSenderWithId::new(
|
||||
TmSenderId::PusVerification as ChannelId,
|
||||
ComponentIdList::PusVerification as ComponentId,
|
||||
"verif_sender",
|
||||
tm_funnel_tx.clone(),
|
||||
));
|
||||
@ -333,7 +337,7 @@ fn dyn_tmtc_pool_main() {
|
||||
// in the sat-rs documentation.
|
||||
let mut event_handler = EventHandler::new(
|
||||
TmAsVecSenderWithId::new(
|
||||
TmSenderId::AllEvents as ChannelId,
|
||||
ComponentIdList::EventManagement as ComponentId,
|
||||
"ALL_EVENTS_TX",
|
||||
tm_funnel_tx.clone(),
|
||||
),
|
||||
@ -428,15 +432,17 @@ fn dyn_tmtc_pool_main() {
|
||||
)
|
||||
.expect("tcp server creation failed");
|
||||
|
||||
/*
|
||||
let mut acs_task = AcsTask::new(
|
||||
TmAsVecSenderWithId::new(
|
||||
TmSenderId::AcsSubsystem as ChannelId,
|
||||
TmSenderId::AcsSubsystem as ComponentId,
|
||||
"ACS_TASK_SENDER",
|
||||
tm_funnel_tx.clone(),
|
||||
),
|
||||
acs_thread_rx,
|
||||
verif_reporter,
|
||||
);
|
||||
*/
|
||||
let mut tm_funnel = TmFunnelDynamic::new(sync_tm_tcp_source, tm_funnel_rx, tm_server_tx);
|
||||
|
||||
info!("Starting TMTC and UDP task");
|
||||
@ -484,7 +490,7 @@ fn dyn_tmtc_pool_main() {
|
||||
let jh_aocs = thread::Builder::new()
|
||||
.name("AOCS".to_string())
|
||||
.spawn(move || loop {
|
||||
acs_task.periodic_operation();
|
||||
// acs_task.periodic_operation();
|
||||
thread::sleep(Duration::from_millis(FREQ_MS_AOCS));
|
||||
})
|
||||
.unwrap();
|
||||
|
@ -3,11 +3,11 @@ use satrs::action::{ActionRequest, ActionRequestVariant};
|
||||
use satrs::params::WritableToBeBytes;
|
||||
use satrs::pool::{SharedStaticMemoryPool, StoreAddr};
|
||||
use satrs::pus::action::{
|
||||
ActionReplyPus, ActionReplyPusWithActionId, ActionRequestWithId, ActivePusActionRequestStd,
|
||||
ActionReplyPus, ActionReplyPusWithActionId, ActivePusActionRequestStd,
|
||||
DefaultActiveActionRequestMap,
|
||||
};
|
||||
use satrs::pus::verification::{
|
||||
self, FailParams, FailParamsWithStep, TcStateAccepted,
|
||||
FailParams, FailParamsWithStep, TcStateAccepted,
|
||||
VerificationReporterWithSharedPoolMpscBoundedSender, VerificationReporterWithVecMpscSender,
|
||||
VerificationReportingProvider, VerificationToken,
|
||||
};
|
||||
@ -22,8 +22,8 @@ use satrs::request::{GenericMessage, TargetAndApidId};
|
||||
use satrs::spacepackets::ecss::tc::PusTcReader;
|
||||
use satrs::spacepackets::ecss::{EcssEnumU16, PusPacket};
|
||||
use satrs::tmtc::tm_helper::SharedTmPool;
|
||||
use satrs::ChannelId;
|
||||
use satrs_example::config::{tmtc_err, TcReceiverId, TmSenderId, PUS_APID};
|
||||
use satrs::ComponentId;
|
||||
use satrs_example::config::{tmtc_err, ComponentIdList, PUS_APID};
|
||||
use std::sync::mpsc::{self};
|
||||
use std::time::Duration;
|
||||
|
||||
@ -135,7 +135,7 @@ impl PusReplyHandler<ActivePusActionRequestStd, ActionReplyPusWithActionId> for
|
||||
#[derive(Default)]
|
||||
pub struct ExampleActionRequestConverter {}
|
||||
|
||||
impl PusTcToRequestConverter<ActivePusActionRequestStd, ActionRequestWithId>
|
||||
impl PusTcToRequestConverter<ActivePusActionRequestStd, ActionRequest>
|
||||
for ExampleActionRequestConverter
|
||||
{
|
||||
type Error = GenericConversionError;
|
||||
@ -146,7 +146,7 @@ impl PusTcToRequestConverter<ActivePusActionRequestStd, ActionRequestWithId>
|
||||
tc: &PusTcReader,
|
||||
time_stamp: &[u8],
|
||||
verif_reporter: &impl VerificationReportingProvider,
|
||||
) -> Result<(ActivePusActionRequestStd, ActionRequestWithId), Self::Error> {
|
||||
) -> Result<(ActivePusActionRequestStd, ActionRequest), Self::Error> {
|
||||
let subservice = tc.subservice();
|
||||
let user_data = tc.user_data();
|
||||
if user_data.len() < 8 {
|
||||
@ -174,13 +174,10 @@ impl PusTcToRequestConverter<ActivePusActionRequestStd, ActionRequestWithId>
|
||||
token,
|
||||
Duration::from_secs(30),
|
||||
),
|
||||
ActionRequestWithId {
|
||||
request_id: verification::RequestId::new(tc).into(),
|
||||
request: ActionRequest::new(
|
||||
action_id,
|
||||
ActionRequestVariant::VecData(user_data[8..].to_vec()),
|
||||
),
|
||||
},
|
||||
ActionRequest::new(
|
||||
action_id,
|
||||
ActionRequestVariant::VecData(user_data[8..].to_vec()),
|
||||
),
|
||||
))
|
||||
} else {
|
||||
verif_reporter
|
||||
@ -209,13 +206,13 @@ pub fn create_action_service_static(
|
||||
VerificationReporterWithSharedPoolMpscBoundedSender,
|
||||
> {
|
||||
let action_srv_tm_sender = TmInSharedPoolSenderWithId::new(
|
||||
TmSenderId::PusAction as ChannelId,
|
||||
ComponentIdList::PusAction as ComponentId,
|
||||
"PUS_8_TM_SENDER",
|
||||
shared_tm_store.clone(),
|
||||
tm_funnel_tx.clone(),
|
||||
);
|
||||
let action_srv_receiver = MpscTcReceiver::new(
|
||||
TcReceiverId::PusAction as ChannelId,
|
||||
ComponentIdList::PusAction as ComponentId,
|
||||
"PUS_8_TC_RECV",
|
||||
pus_action_rx,
|
||||
);
|
||||
@ -253,12 +250,12 @@ pub fn create_action_service_dynamic(
|
||||
VerificationReporterWithVecMpscSender,
|
||||
> {
|
||||
let action_srv_tm_sender = TmAsVecSenderWithId::new(
|
||||
TmSenderId::PusAction as ChannelId,
|
||||
ComponentIdList::PusAction as ComponentId,
|
||||
"PUS_8_TM_SENDER",
|
||||
tm_funnel_tx.clone(),
|
||||
);
|
||||
let action_srv_receiver = MpscTcReceiver::new(
|
||||
TcReceiverId::PusAction as ChannelId,
|
||||
ComponentIdList::PusAction as ComponentId,
|
||||
"PUS_8_TC_RECV",
|
||||
pus_action_rx,
|
||||
);
|
||||
@ -296,7 +293,7 @@ pub struct Pus8Wrapper<
|
||||
ActionReplyHandler,
|
||||
DefaultActiveActionRequestMap,
|
||||
ActivePusActionRequestStd,
|
||||
ActionRequestWithId,
|
||||
ActionRequest,
|
||||
ActionReplyPusWithActionId,
|
||||
>,
|
||||
}
|
||||
|
@ -15,8 +15,8 @@ use satrs::pus::{
|
||||
TmInSharedPoolSenderWithId,
|
||||
};
|
||||
use satrs::tmtc::tm_helper::SharedTmPool;
|
||||
use satrs::ChannelId;
|
||||
use satrs_example::config::{TcReceiverId, TmSenderId, PUS_APID};
|
||||
use satrs::ComponentId;
|
||||
use satrs_example::config::{ComponentIdList, PUS_APID};
|
||||
|
||||
pub fn create_event_service_static(
|
||||
shared_tm_store: SharedTmPool,
|
||||
@ -32,13 +32,13 @@ pub fn create_event_service_static(
|
||||
VerificationReporterWithSharedPoolMpscBoundedSender,
|
||||
> {
|
||||
let event_srv_tm_sender = TmInSharedPoolSenderWithId::new(
|
||||
TmSenderId::PusEvent as ChannelId,
|
||||
ComponentIdList::EventManagement as ComponentId,
|
||||
"PUS_5_TM_SENDER",
|
||||
shared_tm_store.clone(),
|
||||
tm_funnel_tx.clone(),
|
||||
);
|
||||
let event_srv_receiver = MpscTcReceiver::new(
|
||||
TcReceiverId::PusEvent as ChannelId,
|
||||
ComponentIdList::EventManagement as ComponentId,
|
||||
"PUS_5_TC_RECV",
|
||||
pus_event_rx,
|
||||
);
|
||||
@ -69,12 +69,12 @@ pub fn create_event_service_dynamic(
|
||||
VerificationReporterWithVecMpscSender,
|
||||
> {
|
||||
let event_srv_tm_sender = TmAsVecSenderWithId::new(
|
||||
TmSenderId::PusEvent as ChannelId,
|
||||
ComponentIdList::EventManagement as ComponentId,
|
||||
"PUS_5_TM_SENDER",
|
||||
tm_funnel_tx,
|
||||
);
|
||||
let event_srv_receiver = MpscTcReceiver::new(
|
||||
TcReceiverId::PusEvent as ChannelId,
|
||||
ComponentIdList::EventManagement as ComponentId,
|
||||
"PUS_5_TC_RECV",
|
||||
pus_event_rx,
|
||||
);
|
||||
|
@ -17,8 +17,8 @@ use satrs::request::{GenericMessage, TargetAndApidId};
|
||||
use satrs::spacepackets::ecss::tc::PusTcReader;
|
||||
use satrs::spacepackets::ecss::{hk, PusPacket};
|
||||
use satrs::tmtc::tm_helper::SharedTmPool;
|
||||
use satrs::ChannelId;
|
||||
use satrs_example::config::{hk_err, tmtc_err, TcReceiverId, TmSenderId, PUS_APID};
|
||||
use satrs::ComponentId;
|
||||
use satrs_example::config::{hk_err, tmtc_err, ComponentIdList, PUS_APID};
|
||||
use std::sync::mpsc::{self};
|
||||
use std::time::Duration;
|
||||
|
||||
@ -227,13 +227,16 @@ pub fn create_hk_service_static(
|
||||
VerificationReporterWithSharedPoolMpscBoundedSender,
|
||||
> {
|
||||
let hk_srv_tm_sender = TmInSharedPoolSenderWithId::new(
|
||||
TmSenderId::PusHk as ChannelId,
|
||||
ComponentIdList::PusHk as ComponentId,
|
||||
"PUS_3_TM_SENDER",
|
||||
shared_tm_store.clone(),
|
||||
tm_funnel_tx.clone(),
|
||||
);
|
||||
let hk_srv_receiver =
|
||||
MpscTcReceiver::new(TcReceiverId::PusHk as ChannelId, "PUS_8_TC_RECV", pus_hk_rx);
|
||||
let hk_srv_receiver = MpscTcReceiver::new(
|
||||
ComponentIdList::PusHk as ComponentId,
|
||||
"PUS_8_TC_RECV",
|
||||
pus_hk_rx,
|
||||
);
|
||||
let pus_3_handler = PusTargetedRequestService::new(
|
||||
PusServiceHelper::new(
|
||||
hk_srv_receiver,
|
||||
@ -266,12 +269,15 @@ pub fn create_hk_service_dynamic(
|
||||
VerificationReporterWithVecMpscSender,
|
||||
> {
|
||||
let hk_srv_tm_sender = TmAsVecSenderWithId::new(
|
||||
TmSenderId::PusHk as ChannelId,
|
||||
ComponentIdList::PusHk as ComponentId,
|
||||
"PUS_3_TM_SENDER",
|
||||
tm_funnel_tx.clone(),
|
||||
);
|
||||
let hk_srv_receiver =
|
||||
MpscTcReceiver::new(TcReceiverId::PusHk as ChannelId, "PUS_8_TC_RECV", pus_hk_rx);
|
||||
let hk_srv_receiver = MpscTcReceiver::new(
|
||||
ComponentIdList::PusHk as ComponentId,
|
||||
"PUS_8_TC_RECV",
|
||||
pus_hk_rx,
|
||||
);
|
||||
let pus_3_handler = PusTargetedRequestService::new(
|
||||
PusServiceHelper::new(
|
||||
hk_srv_receiver,
|
||||
|
@ -199,15 +199,17 @@ where
|
||||
return Err(e.into());
|
||||
}
|
||||
};
|
||||
let verif_request_id = verification::RequestId::new(&tc);
|
||||
let verif_request_id = verification::RequestId::new(&tc).raw();
|
||||
//if let Err(e) =
|
||||
match self
|
||||
.request_router
|
||||
.route(request_info.target_id(), request, request_info.token())
|
||||
{
|
||||
match self.request_router.route(
|
||||
request_info.target_id(),
|
||||
verif_request_id,
|
||||
request,
|
||||
request_info.token(),
|
||||
) {
|
||||
Ok(()) => {
|
||||
self.active_request_map
|
||||
.insert(&verif_request_id.into(), request_info);
|
||||
.insert(&verif_request_id, request_info);
|
||||
}
|
||||
Err(e) => {
|
||||
self.request_router.handle_error_generic(
|
||||
|
@ -16,8 +16,8 @@ use satrs::pus::{
|
||||
TmInSharedPoolSenderWithId,
|
||||
};
|
||||
use satrs::tmtc::tm_helper::SharedTmPool;
|
||||
use satrs::ChannelId;
|
||||
use satrs_example::config::{TcReceiverId, TmSenderId, PUS_APID};
|
||||
use satrs::ComponentId;
|
||||
use satrs_example::config::{ComponentIdList, PUS_APID};
|
||||
|
||||
use crate::tmtc::PusTcSourceProviderSharedPool;
|
||||
|
||||
@ -145,13 +145,13 @@ pub fn create_scheduler_service_static(
|
||||
VerificationReporterWithSharedPoolMpscBoundedSender,
|
||||
> {
|
||||
let sched_srv_tm_sender = TmInSharedPoolSenderWithId::new(
|
||||
TmSenderId::PusSched as ChannelId,
|
||||
ComponentIdList::PusSched as ComponentId,
|
||||
"PUS_11_TM_SENDER",
|
||||
shared_tm_store.clone(),
|
||||
tm_funnel_tx.clone(),
|
||||
);
|
||||
let sched_srv_receiver = MpscTcReceiver::new(
|
||||
TcReceiverId::PusSched as ChannelId,
|
||||
ComponentIdList::PusSched as ComponentId,
|
||||
"PUS_11_TC_RECV",
|
||||
pus_sched_rx,
|
||||
);
|
||||
@ -188,12 +188,12 @@ pub fn create_scheduler_service_dynamic(
|
||||
VerificationReporterWithVecMpscSender,
|
||||
> {
|
||||
let sched_srv_tm_sender = TmAsVecSenderWithId::new(
|
||||
TmSenderId::PusSched as ChannelId,
|
||||
ComponentIdList::PusSched as ComponentId,
|
||||
"PUS_11_TM_SENDER",
|
||||
tm_funnel_tx,
|
||||
);
|
||||
let sched_srv_receiver = MpscTcReceiver::new(
|
||||
TcReceiverId::PusSched as ChannelId,
|
||||
ComponentIdList::PusSched as ComponentId,
|
||||
"PUS_11_TC_RECV",
|
||||
pus_sched_rx,
|
||||
);
|
||||
|
@ -17,9 +17,9 @@ use satrs::spacepackets::ecss::PusPacket;
|
||||
use satrs::spacepackets::time::cds::TimeProvider;
|
||||
use satrs::spacepackets::time::TimeWriter;
|
||||
use satrs::tmtc::tm_helper::SharedTmPool;
|
||||
use satrs::ChannelId;
|
||||
use satrs::ComponentId;
|
||||
use satrs::{events::EventU32, pus::EcssTcInSharedStoreConverter};
|
||||
use satrs_example::config::{tmtc_err, TcReceiverId, TmSenderId, PUS_APID, TEST_EVENT};
|
||||
use satrs_example::config::{tmtc_err, ComponentIdList, PUS_APID, TEST_EVENT};
|
||||
use std::sync::mpsc::{self, Sender};
|
||||
|
||||
pub fn create_test_service_static(
|
||||
@ -36,13 +36,13 @@ pub fn create_test_service_static(
|
||||
VerificationReporterWithSharedPoolMpscBoundedSender,
|
||||
> {
|
||||
let test_srv_tm_sender = TmInSharedPoolSenderWithId::new(
|
||||
TmSenderId::PusTest as ChannelId,
|
||||
ComponentIdList::PusTest as ComponentId,
|
||||
"PUS_17_TM_SENDER",
|
||||
shared_tm_store.clone(),
|
||||
tm_funnel_tx.clone(),
|
||||
);
|
||||
let test_srv_receiver = MpscTcReceiver::new(
|
||||
TcReceiverId::PusTest as ChannelId,
|
||||
ComponentIdList::PusTest as ComponentId,
|
||||
"PUS_17_TC_RECV",
|
||||
pus_test_rx,
|
||||
);
|
||||
@ -71,12 +71,12 @@ pub fn create_test_service_dynamic(
|
||||
VerificationReporterWithVecMpscSender,
|
||||
> {
|
||||
let test_srv_tm_sender = TmAsVecSenderWithId::new(
|
||||
TmSenderId::PusTest as ChannelId,
|
||||
ComponentIdList::PusTest as ComponentId,
|
||||
"PUS_17_TM_SENDER",
|
||||
tm_funnel_tx.clone(),
|
||||
);
|
||||
let test_srv_receiver = MpscTcReceiver::new(
|
||||
TcReceiverId::PusTest as ChannelId,
|
||||
ComponentIdList::PusTest as ComponentId,
|
||||
"PUS_17_TC_RECV",
|
||||
pus_test_rx,
|
||||
);
|
||||
|
@ -1,50 +1,42 @@
|
||||
use std::collections::HashMap;
|
||||
use std::sync::mpsc;
|
||||
|
||||
use derive_new::new;
|
||||
use log::warn;
|
||||
use satrs::action::ActionRequest;
|
||||
use satrs::hk::HkRequest;
|
||||
use satrs::mode::ModeRequest;
|
||||
use satrs::pus::action::ActionRequestWithId;
|
||||
use satrs::pus::verification::{
|
||||
FailParams, TcStateStarted, VerificationReportingProvider, VerificationToken,
|
||||
};
|
||||
use satrs::pus::{ActiveRequestProvider, GenericRoutingError, PusRequestRouter};
|
||||
use satrs::queue::GenericSendError;
|
||||
use satrs::request::{GenericMessage, RequestId};
|
||||
use satrs::spacepackets::ecss::tc::PusTcReader;
|
||||
use satrs::spacepackets::ecss::PusPacket;
|
||||
use satrs::ComponentId;
|
||||
use satrs_example::config::tmtc_err;
|
||||
|
||||
#[allow(dead_code)]
|
||||
#[derive(Clone, Debug)]
|
||||
#[non_exhaustive]
|
||||
pub enum Request {
|
||||
pub enum CompositeRequest {
|
||||
Hk(HkRequest),
|
||||
Mode(ModeRequest),
|
||||
Action(ActionRequestWithId),
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, new)]
|
||||
pub struct TargetedRequest {
|
||||
pub(crate) target_id: ComponentId,
|
||||
pub(crate) request: Request,
|
||||
Action(ActionRequest),
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct RequestWithToken {
|
||||
pub(crate) targeted_request: TargetedRequest,
|
||||
pub(crate) targeted_request: GenericMessage<CompositeRequest>,
|
||||
pub(crate) token: VerificationToken<TcStateStarted>,
|
||||
}
|
||||
|
||||
impl RequestWithToken {
|
||||
pub fn new(
|
||||
target_id: ComponentId,
|
||||
request: Request,
|
||||
request_id: RequestId,
|
||||
request: CompositeRequest,
|
||||
token: VerificationToken<TcStateStarted>,
|
||||
) -> Self {
|
||||
Self {
|
||||
targeted_request: TargetedRequest::new(target_id, request),
|
||||
targeted_request: GenericMessage::new(request_id, target_id, request),
|
||||
token,
|
||||
}
|
||||
}
|
||||
@ -96,6 +88,7 @@ impl PusRequestRouter<HkRequest> for GenericRequestRouter {
|
||||
fn route(
|
||||
&self,
|
||||
target_id: ComponentId,
|
||||
request_id: RequestId,
|
||||
hk_request: HkRequest,
|
||||
token: VerificationToken<TcStateStarted>,
|
||||
) -> Result<(), Self::Error> {
|
||||
@ -103,7 +96,8 @@ impl PusRequestRouter<HkRequest> for GenericRequestRouter {
|
||||
sender
|
||||
.send(RequestWithToken::new(
|
||||
target_id,
|
||||
Request::Hk(hk_request),
|
||||
request_id,
|
||||
CompositeRequest::Hk(hk_request),
|
||||
token,
|
||||
))
|
||||
.map_err(|_| GenericRoutingError::Send(GenericSendError::RxDisconnected))?;
|
||||
@ -112,20 +106,22 @@ impl PusRequestRouter<HkRequest> for GenericRequestRouter {
|
||||
}
|
||||
}
|
||||
|
||||
impl PusRequestRouter<ActionRequestWithId> for GenericRequestRouter {
|
||||
impl PusRequestRouter<ActionRequest> for GenericRequestRouter {
|
||||
type Error = GenericRoutingError;
|
||||
|
||||
fn route(
|
||||
&self,
|
||||
target_id: ComponentId,
|
||||
action_request: ActionRequestWithId,
|
||||
request_id: RequestId,
|
||||
action_request: ActionRequest,
|
||||
token: VerificationToken<TcStateStarted>,
|
||||
) -> Result<(), Self::Error> {
|
||||
if let Some(sender) = self.0.get(&target_id) {
|
||||
sender
|
||||
.send(RequestWithToken::new(
|
||||
target_id,
|
||||
Request::Action(action_request),
|
||||
request_id,
|
||||
CompositeRequest::Action(action_request),
|
||||
token,
|
||||
))
|
||||
.map_err(|_| GenericRoutingError::Send(GenericSendError::RxDisconnected))?;
|
||||
|
Reference in New Issue
Block a user