diff --git a/fsrc-core/src/events.rs b/fsrc-core/src/events.rs index 2934d1f..a74cb01 100644 --- a/fsrc-core/src/events.rs +++ b/fsrc-core/src/events.rs @@ -18,7 +18,7 @@ pub enum Severity { HIGH = 3, } -pub trait EventProvider: PartialEq + Eq + Copy + Clone + Hash { +pub trait EventProvider: EcssEnumeration + PartialEq + Eq + Copy + Clone + Hash { type Raw; type GroupId; type UniqueId; diff --git a/fsrc-core/src/pus/event_man.rs b/fsrc-core/src/pus/event_man.rs index 2e33618..8195b04 100644 --- a/fsrc-core/src/pus/event_man.rs +++ b/fsrc-core/src/pus/event_man.rs @@ -1,6 +1,9 @@ use crate::events::EventProvider; +use alloc::boxed::Box; use hashbrown::HashSet; +use crate::pus::event::EventReporter; +use crate::pus::{EcssTmError, EcssTmSender}; #[cfg(feature = "heapless")] pub use heapless_mod::*; @@ -84,4 +87,24 @@ pub mod heapless_mod { } } -pub struct PusEventManager {} +pub struct PusEventManager { + reporter: EventReporter, + backend: Box>, +} + +impl PusEventManager { + pub fn handle_event( + &mut self, + sender: &mut (impl EcssTmSender + ?Sized), + time_stamp: &[u8], + event: Provider, + aux_data: Option<&[u8]>, + ) -> Result> { + if !self.backend.event_enabled(&event) { + return Ok(false); + } + self.reporter + .event_info(sender, time_stamp, event, aux_data) + .map(|_| true) + } +}