From 45676fa19266f2c314538056e3c82f3cb44fb3da Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Thu, 16 Oct 2025 19:18:58 +0200 Subject: [PATCH] some fixes --- satrs-example/src/pus/test.rs | 2 +- satrs/src/event_man.rs | 57 ++++++++++++++++++++++++++--------- satrs/src/events.rs | 7 ++++- satrs/src/lib.rs | 8 ++--- 4 files changed, 54 insertions(+), 20 deletions(-) diff --git a/satrs-example/src/pus/test.rs b/satrs-example/src/pus/test.rs index b7e5b5d..f79204c 100644 --- a/satrs-example/src/pus/test.rs +++ b/satrs-example/src/pus/test.rs @@ -1,7 +1,7 @@ use crate::pus::create_verification_reporter; use crate::tmtc::sender::TmTcSender; use log::info; -use satrs::event_man::{EventMessage, EventMessageU32}; +use satrs::event_man_legacy::{EventMessage, EventMessageU32}; use satrs::pus::test::PusService17TestHandler; use satrs::pus::verification::{FailParams, VerificationReporter, VerificationReportingProvider}; use satrs::pus::PartialPusHandlingError; diff --git a/satrs/src/event_man.rs b/satrs/src/event_man.rs index 2d612ff..90de176 100644 --- a/satrs/src/event_man.rs +++ b/satrs/src/event_man.rs @@ -70,7 +70,8 @@ pub enum ListenerKey { All, } -#[derive(Debug, serde::Serialize, serde::Deserialize)] +#[derive(Debug)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] #[cfg_attr(feature = "defmt", derive(defmt::Format))] pub struct EventMessage { sender_id: ComponentId, @@ -133,7 +134,7 @@ pub trait SenderMap, EventInstan /// * `SenderMapInstance`: [SenderMap] which maps channel IDs to send providers. /// * `ListenerMapInstance`: [ListenerMap] which maps listener keys to channel IDs. /// * `EventSenderInstance`: [EventSender] contained within the sender map which sends the events. -/// * `Event`: The event type. This type must implement the [Event] trait. +/// * `Event`: The event type. This type must implement the [Event] trait. pub struct EventManager< EventReceiverInstance: EventReceiver, SenderMapInstance: SenderMap, @@ -279,9 +280,10 @@ impl< if let Some(ids) = self.listener_map.get_listener_ids(key) { for id in ids { if let Some(sender) = self.sender_map.get_send_event_provider(id) { - if let Err(e) = sender - .send(EventMessage::new(event_msg.sender_id, event_msg.event.clone())) - { + if let Err(e) = sender.send(EventMessage::new( + event_msg.sender_id, + event_msg.event.clone(), + )) { error_handler(event_msg, EventRoutingError::Send(e)); } else { num_recipients += 1; @@ -776,7 +778,10 @@ mod tests { let event_0_erased = EventErasedAlloc::new(&event_0); let event_1_erased = EventErasedAlloc::new(&event_1); event_sender - .send(EventMessage::new(TEST_COMPONENT_ID_0.id(), event_0_erased.clone())) + .send(EventMessage::new( + TEST_COMPONENT_ID_0.id(), + event_0_erased.clone(), + )) .expect("Triggering Event 0 failed"); let res = event_man.try_event_handling(error_handler); check_handled_event(res, &event_0_erased, 2, TEST_COMPONENT_ID_0.id()); @@ -784,10 +789,16 @@ mod tests { check_next_event(event_0, &event_0_rx_1); event_man.subscribe_group(event_1.id().group_id(), event_listener_0_sender_id); event_sender - .send(EventMessage::new(TEST_COMPONENT_ID_0.id(), event_0_erased.clone())) + .send(EventMessage::new( + TEST_COMPONENT_ID_0.id(), + event_0_erased.clone(), + )) .expect("Triggering Event 0 failed"); event_sender - .send(EventMessage::new(TEST_COMPONENT_ID_1.id(), event_1_erased.clone())) + .send(EventMessage::new( + TEST_COMPONENT_ID_1.id(), + event_1_erased.clone(), + )) .expect("Triggering Event 1 failed"); // 3 Events messages will be sent now @@ -803,7 +814,10 @@ mod tests { event_man.subscribe_group(event_1.id().group_id(), event_listener_0_sender_id); event_man.remove_duplicates(&ListenerKey::Group(event_1.id().group_id())); event_sender - .send(EventMessage::new(TEST_COMPONENT_ID_0.id(), event_1_erased.clone())) + .send(EventMessage::new( + TEST_COMPONENT_ID_0.id(), + event_1_erased.clone(), + )) .expect("Triggering Event 1 failed"); let res = event_man.try_event_handling(error_handler); check_handled_event(res, &event_1_erased, 1, TEST_COMPONENT_ID_0.id()); @@ -842,15 +856,27 @@ mod tests { let test_event = TestEvent::Info; let event_sender = EventSenderMpscBounded::::new(1, event_sender, 3); event_sender - .send(EventMessage::new(TEST_COMPONENT_ID_0.id(), test_event.into())) + .send(EventMessage::new( + TEST_COMPONENT_ID_0.id(), + test_event.into(), + )) .expect("sending test event failed"); event_sender - .send(EventMessage::new(TEST_COMPONENT_ID_0.id(), test_event.into())) + .send(EventMessage::new( + TEST_COMPONENT_ID_0.id(), + test_event.into(), + )) .expect("sending test event failed"); event_sender - .send(EventMessage::new(TEST_COMPONENT_ID_0.id(), test_event.into())) + .send(EventMessage::new( + TEST_COMPONENT_ID_0.id(), + test_event.into(), + )) .expect("sending test event failed"); - let error = event_sender.send(EventMessage::new(TEST_COMPONENT_ID_0.id(), test_event.into())); + let error = event_sender.send(EventMessage::new( + TEST_COMPONENT_ID_0.id(), + test_event.into(), + )); if let Err(e) = error { assert!(matches!(e, GenericSendError::QueueFull(Some(3)))); } else { @@ -863,7 +889,10 @@ mod tests { let test_event = TestEvent::Info; let event_sender = EventSenderMpscBounded::::new(1, event_sender, 3); drop(event_receiver); - if let Err(e) = event_sender.send(EventMessage::new(TEST_COMPONENT_ID_0.id(), test_event.into())) { + if let Err(e) = event_sender.send(EventMessage::new( + TEST_COMPONENT_ID_0.id(), + test_event.into(), + )) { assert!(matches!(e, GenericSendError::RxDisconnected)); } else { panic!("Expected error"); diff --git a/satrs/src/events.rs b/satrs/src/events.rs index 84a7b3c..71ce03e 100644 --- a/satrs/src/events.rs +++ b/satrs/src/events.rs @@ -26,6 +26,7 @@ use core::fmt::Debug; use core::hash::Hash; use arbitrary_int::{prelude::*, u14}; +#[cfg(feature = "heapless")] use spacepackets::ByteConversionError; /// Using a type definition allows to change this to u64 in the future more easily @@ -61,7 +62,8 @@ pub type GroupId = u14; /// Unique event identifier. /// /// Consists of a group ID, a unique ID and the severity. -#[derive(Copy, Clone, PartialEq, Eq, Debug, Hash, serde::Serialize, serde::Deserialize)] +#[derive(Copy, Clone, PartialEq, Eq, Debug, Hash)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] #[cfg_attr(feature = "defmt", derive(defmt::Format))] pub struct EventId { group_id: GroupId, @@ -160,17 +162,20 @@ impl Event for EventErasedAlloc { /// Event which was type erased and serialized into a [heapless::vec::Vec]. #[derive(Debug, Clone, PartialEq, Eq)] +#[cfg(feature = "heapless")] pub struct EventErasedHeapless { id: EventId, event_raw: heapless::vec::Vec, } +#[cfg(feature = "heapless")] impl Event for EventErasedHeapless { fn id(&self) -> EventId { self.id } } +#[cfg(feature = "heapless")] impl EventErasedHeapless { #[cfg(feature = "serde")] /// Creates a new event by serializing the given event using [postcard]. diff --git a/satrs/src/lib.rs b/satrs/src/lib.rs index 64d9172..22b0cee 100644 --- a/satrs/src/lib.rs +++ b/satrs/src/lib.rs @@ -15,21 +15,21 @@ //! the [ECSS PUS C standard](https://ecss.nl/standard/ecss-e-st-70-41c-space-engineering-telemetry-and-telecommand-packet-utilization-15-april-2016/). #![no_std] #![cfg_attr(docsrs, feature(doc_auto_cfg))] +#[cfg(any(feature = "alloc", test))] +extern crate alloc; #[cfg(feature = "alloc")] extern crate downcast_rs; #[cfg(any(feature = "std", test))] extern crate std; -#[cfg(any(feature = "alloc", test))] -extern crate alloc; pub mod action; #[cfg(feature = "alloc")] pub mod dev_mgmt; pub mod encoding; -pub mod event_man_legacy; pub mod event_man; -pub mod events_legacy; +pub mod event_man_legacy; pub mod events; +pub mod events_legacy; #[cfg(feature = "std")] pub mod executable; pub mod hal;