where to start and where to accept?
Some checks failed
Rust/sat-rs/pipeline/pr-main There was a failure building this commit

This commit is contained in:
Robin Müller 2024-03-20 17:54:17 +01:00
parent d5e61090fe
commit 6873a8f2a7
Signed by: muellerr
GPG Key ID: A649FB78196E3849
4 changed files with 63 additions and 37 deletions

View File

@ -119,6 +119,10 @@ fn static_tmtc_pool_main() {
let (pus_sched_tx, pus_sched_rx) = channel();
let (pus_hk_tx, pus_hk_rx) = channel();
let (pus_action_tx, pus_action_rx) = channel();
let (pus_action_reply_tx, pus_action_reply_rx) = channel();
let (pus_hk_reply_tx, pus_hk_reply_rx) = channel();
let pus_router = PusTcMpscRouter {
test_service_receiver: pus_test_tx,
event_service_receiver: pus_event_tx,
@ -157,6 +161,7 @@ fn static_tmtc_pool_main() {
shared_tc_pool.pool.clone(),
pus_action_rx,
request_map.clone(),
pus_action_reply_rx,
);
let pus_hk_service = create_hk_service_static(
shared_tm_pool.clone(),
@ -165,6 +170,7 @@ fn static_tmtc_pool_main() {
shared_tc_pool.pool.clone(),
pus_hk_rx,
request_map,
pus_hk_reply_rx
);
let mut pus_stack = PusStack::new(
pus_hk_service,
@ -340,6 +346,10 @@ fn dyn_tmtc_pool_main() {
let (pus_sched_tx, pus_sched_rx) = channel();
let (pus_hk_tx, pus_hk_rx) = channel();
let (pus_action_tx, pus_action_rx) = channel();
let (pus_action_reply_tx, pus_action_reply_rx) = channel();
let (pus_hk_reply_tx, pus_hk_reply_rx) = channel();
let pus_router = PusTcMpscRouter {
test_service_receiver: pus_test_tx,
event_service_receiver: pus_event_tx,
@ -373,12 +383,14 @@ fn dyn_tmtc_pool_main() {
verif_reporter.clone(),
pus_action_rx,
request_map.clone(),
pus_action_reply_rx,
);
let pus_hk_service = create_hk_service_dynamic(
tm_funnel_tx.clone(),
verif_reporter.clone(),
pus_hk_rx,
request_map,
pus_hk_reply_rx
);
let mut pus_stack = PusStack::new(
pus_hk_service,

View File

@ -3,8 +3,8 @@ use satrs::action::{ActionRequest, ActionRequestVariant};
use satrs::params::WritableToBeBytes;
use satrs::pool::{SharedStaticMemoryPool, StoreAddr};
use satrs::pus::action::{
ActionReplyPus, ActionReplyPusWithActionId, ActionRequestWithId, ActionRequestorBoundedMpsc,
ActionRequestorMpsc, ActivePusActionRequestStd, DefaultActiveActionRequestMap,
ActionReplyPus, ActionReplyPusWithActionId, ActionRequestWithId, ActivePusActionRequestStd,
DefaultActiveActionRequestMap,
};
use satrs::pus::verification::{
self, FailParams, FailParamsWithStep, TcStateAccepted,
@ -18,7 +18,7 @@ use satrs::pus::{
PusTcToRequestConverter, TmAsVecSenderWithId, TmAsVecSenderWithMpsc,
TmInSharedPoolSenderWithBoundedMpsc, TmInSharedPoolSenderWithId,
};
use satrs::request::{GenericMessage, MessageReceiver, MessageSender, TargetAndApidId};
use satrs::request::{GenericMessage, TargetAndApidId};
use satrs::spacepackets::ecss::tc::PusTcReader;
use satrs::spacepackets::ecss::{EcssEnumU16, PusPacket};
use satrs::tmtc::tm_helper::SharedTmPool;
@ -200,13 +200,13 @@ pub fn create_action_service_static(
verif_reporter: VerificationReporterWithSharedPoolMpscBoundedSender,
tc_pool: SharedStaticMemoryPool,
pus_action_rx: mpsc::Receiver<EcssTcAndToken>,
action_router: ActionRequestorBoundedMpsc,
action_router: GenericRequestRouter,
reply_receiver: mpsc::Receiver<GenericMessage<ActionReplyPusWithActionId>>,
) -> Pus8Wrapper<
MpscTcReceiver,
TmInSharedPoolSenderWithBoundedMpsc,
EcssTcInSharedStoreConverter,
VerificationReporterWithSharedPoolMpscBoundedSender,
mpsc::SyncSender<GenericMessage<ActionRequest>>,
> {
let action_srv_tm_sender = TmInSharedPoolSenderWithId::new(
TmSenderId::PusAction as ChannelId,
@ -233,6 +233,7 @@ pub fn create_action_service_static(
DefaultActiveActionRequestMap::default(),
ActionReplyHandler::default(),
action_router,
reply_receiver,
);
Pus8Wrapper {
action_request_handler,
@ -243,13 +244,13 @@ pub fn create_action_service_dynamic(
tm_funnel_tx: mpsc::Sender<Vec<u8>>,
verif_reporter: VerificationReporterWithVecMpscSender,
pus_action_rx: mpsc::Receiver<EcssTcAndToken>,
action_router: ActionRequestorMpsc,
action_router: GenericRequestRouter,
reply_receiver: mpsc::Receiver<GenericMessage<ActionReplyPusWithActionId>>,
) -> Pus8Wrapper<
MpscTcReceiver,
TmAsVecSenderWithMpsc,
EcssTcInVecConverter,
VerificationReporterWithVecMpscSender,
mpsc::Sender<GenericMessage<ActionRequest>>,
> {
let action_srv_tm_sender = TmAsVecSenderWithId::new(
TmSenderId::PusAction as ChannelId,
@ -273,6 +274,7 @@ pub fn create_action_service_dynamic(
DefaultActiveActionRequestMap::default(),
ActionReplyHandler::default(),
action_router,
reply_receiver,
);
Pus8Wrapper {
action_request_handler,
@ -284,7 +286,6 @@ pub struct Pus8Wrapper<
TmSender: EcssTmSenderCore,
TcInMemConverter: EcssTcInMemConverter,
VerificationReporter: VerificationReportingProvider,
RequestSender: MessageSender<ActionRequest>,
> {
pub(crate) action_request_handler: PusTargetedRequestService<
TcReceiver,
@ -295,8 +296,7 @@ pub struct Pus8Wrapper<
ActionReplyHandler,
DefaultActiveActionRequestMap,
ActivePusActionRequestStd,
RequestSender,
ActionRequest,
ActionRequestWithId,
ActionReplyPusWithActionId,
>,
}
@ -306,8 +306,7 @@ impl<
TmSender: EcssTmSenderCore,
TcInMemConverter: EcssTcInMemConverter,
VerificationReporter: VerificationReportingProvider,
RequestSender: MessageSender<ActionRequest>,
> Pus8Wrapper<TcReceiver, TmSender, TcInMemConverter, VerificationReporter, RequestSender>
> Pus8Wrapper<TcReceiver, TmSender, TcInMemConverter, VerificationReporter>
{
pub fn handle_next_packet(&mut self, time_stamp: &[u8]) -> bool {
match self.action_request_handler.handle_one_tc(time_stamp) {

View File

@ -13,7 +13,7 @@ use satrs::pus::{
TmAsVecSenderWithId, TmAsVecSenderWithMpsc, TmInSharedPoolSenderWithBoundedMpsc,
TmInSharedPoolSenderWithId,
};
use satrs::request::TargetAndApidId;
use satrs::request::{TargetAndApidId, GenericMessage};
use satrs::spacepackets::ecss::tc::PusTcReader;
use satrs::spacepackets::ecss::{hk, PusPacket};
use satrs::tmtc::tm_helper::SharedTmPool;
@ -212,6 +212,7 @@ pub fn create_hk_service_static(
tc_pool: SharedStaticMemoryPool,
pus_hk_rx: mpsc::Receiver<EcssTcAndToken>,
request_router: GenericRequestRouter,
reply_receiver: mpsc::Receiver<GenericMessage<HkReply>>,
) -> Pus3Wrapper<
MpscTcReceiver,
TmInSharedPoolSenderWithBoundedMpsc,
@ -235,9 +236,10 @@ pub fn create_hk_service_static(
EcssTcInSharedStoreConverter::new(tc_pool, 2048),
),
ExampleHkRequestConverter::default(),
request_router,
DefaultActiveRequestMap::default(),
HkReplyHandler::default(),
request_router,
reply_receiver
);
Pus3Wrapper { pus_3_handler }
}
@ -247,6 +249,7 @@ pub fn create_hk_service_dynamic(
verif_reporter: VerificationReporterWithVecMpscSender,
pus_hk_rx: mpsc::Receiver<EcssTcAndToken>,
request_router: GenericRequestRouter,
reply_receiver: mpsc::Receiver<GenericMessage<HkReply>>,
) -> Pus3Wrapper<
MpscTcReceiver,
TmAsVecSenderWithMpsc,
@ -269,9 +272,10 @@ pub fn create_hk_service_dynamic(
EcssTcInVecConverter::default(),
),
ExampleHkRequestConverter::default(),
request_router,
DefaultActiveRequestMap::default(),
HkReplyHandler::default(),
request_router,
reply_receiver
);
Pus3Wrapper { pus_3_handler }
}

View File

@ -9,6 +9,7 @@ use satrs::pus::{
PusPacketHandlerResult, PusPacketHandlingError, PusReplyHandler, PusRequestRouter,
PusServiceHelper, PusTcToRequestConverter, TcInMemory,
};
use satrs::queue::GenericReceiveError;
use satrs::request::{GenericMessage, MessageReceiver, MessageSender, MessageSenderAndReceiver};
use satrs::spacepackets::ecss::tc::PusTcReader;
use satrs::spacepackets::ecss::PusServiceId;
@ -87,18 +88,16 @@ pub struct PusTargetedRequestService<
ReplyHandler: PusReplyHandler<ActiveRequestInfo, ReplyType, Error = EcssTmtcError>,
ActiveRequestMap: ActiveRequestMapProvider<ActiveRequestInfo>,
ActiveRequestInfo: ActiveRequestProvider,
RequestSender: MessageSender<RequestType>,
RequestType: Send,
RequestType,
ReplyType,
> {
pub service_helper:
PusServiceHelper<TcReceiver, TmSender, TcInMemConverter, VerificationReporter>,
//pub request_router: GenericRequestRouter,
pub request_router: GenericRequestRouter,
pub request_converter: RequestConverter,
pub active_request_map: ActiveRequestMap,
pub request_router_reply_receiver:
MessageSenderAndReceiver<RequestType, ReplyType, RequestSender, mpsc::Receiver<ReplyType>>,
pub reply_handler: ReplyHandler,
pub reply_receiver: mpsc::Receiver<GenericMessage<ReplyType>>,
phantom: std::marker::PhantomData<(RequestType, ActiveRequestInfo, ReplyType)>,
}
@ -111,8 +110,7 @@ impl<
ReplyHandler: PusReplyHandler<ActiveRequestInfo, ReplyType, Error = EcssTmtcError>,
ActiveRequestMap: ActiveRequestMapProvider<ActiveRequestInfo>,
ActiveRequestInfo: ActiveRequestProvider,
RequestSender: MessageSender<RequestType>,
RequestType: Send,
RequestType,
ReplyType,
>
PusTargetedRequestService<
@ -124,7 +122,6 @@ impl<
ReplyHandler,
ActiveRequestMap,
ActiveRequestInfo,
RequestSender,
RequestType,
ReplyType,
>
@ -141,19 +138,16 @@ where
request_converter: RequestConverter,
active_request_map: ActiveRequestMap,
reply_hook: ReplyHandler,
request_router_reply_receiver: MessageSenderAndReceiver<
RequestType,
ReplyType,
RequestSender,
mpsc::Receiver<GenericMessage<ReplyType>>,
>,
request_router: GenericRequestRouter,
reply_receiver: mpsc::Receiver<GenericMessage<ReplyType>>,
) -> Self {
Self {
service_helper,
request_converter,
active_request_map,
reply_handler: reply_hook,
request_router_reply_receiver,
request_router,
reply_receiver,
phantom: std::marker::PhantomData,
}
}
@ -178,18 +172,16 @@ where
&self.service_helper.common.verification_handler,
)?;
let verif_request_id = verification::RequestId::new(&tc);
if let Err(e) = self
.request_router_reply_receiver
.message_sender_map
.send_message(request_id, local_channel_id, target_channel_id, request)
// .(request_info.target_id(), request, ecss_tc_and_token.token)
if let Err(e) =
self.request_router
.route(request_info.target_id(), request, request_info.token())
{
let target_id = request_info.target_id();
self.active_request_map
.insert(&verif_request_id.into(), request_info);
self.request_router.handle_error(
target_id,
ecss_tc_and_token.token,
request_info.token(),
&tc,
e.clone(),
time_stamp,
@ -200,7 +192,26 @@ where
Ok(PusPacketHandlerResult::RequestHandled)
}
pub fn insert_reply(
pub fn check_one_reply(&mut self, time_stamp: &[u8]) -> Result<bool, EcssTmtcError> {
match self.reply_receiver.try_recv() {
Ok(reply) => {
self.handle_reply(&reply, time_stamp)?;
Ok(true)
}
Err(e) => match e {
mpsc::TryRecvError::Empty => {
return Ok(false);
}
mpsc::TryRecvError::Disconnected => {
return Err(EcssTmtcError::Receive(GenericReceiveError::TxDisconnected(
None,
)));
}
},
}
}
pub fn handle_reply(
&mut self,
reply: &GenericMessage<ReplyType>,
time_stamp: &[u8],