some fixes
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
use crate::pus::create_verification_reporter;
|
use crate::pus::create_verification_reporter;
|
||||||
use crate::tmtc::sender::TmTcSender;
|
use crate::tmtc::sender::TmTcSender;
|
||||||
use log::info;
|
use log::info;
|
||||||
use satrs::event_man::{EventMessage, EventMessageU32};
|
use satrs::event_man_legacy::{EventMessage, EventMessageU32};
|
||||||
use satrs::pus::test::PusService17TestHandler;
|
use satrs::pus::test::PusService17TestHandler;
|
||||||
use satrs::pus::verification::{FailParams, VerificationReporter, VerificationReportingProvider};
|
use satrs::pus::verification::{FailParams, VerificationReporter, VerificationReportingProvider};
|
||||||
use satrs::pus::PartialPusHandlingError;
|
use satrs::pus::PartialPusHandlingError;
|
||||||
|
|||||||
@@ -70,7 +70,8 @@ pub enum ListenerKey {
|
|||||||
All,
|
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))]
|
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
||||||
pub struct EventMessage<EventInstance> {
|
pub struct EventMessage<EventInstance> {
|
||||||
sender_id: ComponentId,
|
sender_id: ComponentId,
|
||||||
@@ -279,9 +280,10 @@ impl<
|
|||||||
if let Some(ids) = self.listener_map.get_listener_ids(key) {
|
if let Some(ids) = self.listener_map.get_listener_ids(key) {
|
||||||
for id in ids {
|
for id in ids {
|
||||||
if let Some(sender) = self.sender_map.get_send_event_provider(id) {
|
if let Some(sender) = self.sender_map.get_send_event_provider(id) {
|
||||||
if let Err(e) = sender
|
if let Err(e) = sender.send(EventMessage::new(
|
||||||
.send(EventMessage::new(event_msg.sender_id, event_msg.event.clone()))
|
event_msg.sender_id,
|
||||||
{
|
event_msg.event.clone(),
|
||||||
|
)) {
|
||||||
error_handler(event_msg, EventRoutingError::Send(e));
|
error_handler(event_msg, EventRoutingError::Send(e));
|
||||||
} else {
|
} else {
|
||||||
num_recipients += 1;
|
num_recipients += 1;
|
||||||
@@ -776,7 +778,10 @@ mod tests {
|
|||||||
let event_0_erased = EventErasedAlloc::new(&event_0);
|
let event_0_erased = EventErasedAlloc::new(&event_0);
|
||||||
let event_1_erased = EventErasedAlloc::new(&event_1);
|
let event_1_erased = EventErasedAlloc::new(&event_1);
|
||||||
event_sender
|
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");
|
.expect("Triggering Event 0 failed");
|
||||||
let res = event_man.try_event_handling(error_handler);
|
let res = event_man.try_event_handling(error_handler);
|
||||||
check_handled_event(res, &event_0_erased, 2, TEST_COMPONENT_ID_0.id());
|
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);
|
check_next_event(event_0, &event_0_rx_1);
|
||||||
event_man.subscribe_group(event_1.id().group_id(), event_listener_0_sender_id);
|
event_man.subscribe_group(event_1.id().group_id(), event_listener_0_sender_id);
|
||||||
event_sender
|
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");
|
.expect("Triggering Event 0 failed");
|
||||||
event_sender
|
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");
|
.expect("Triggering Event 1 failed");
|
||||||
|
|
||||||
// 3 Events messages will be sent now
|
// 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.subscribe_group(event_1.id().group_id(), event_listener_0_sender_id);
|
||||||
event_man.remove_duplicates(&ListenerKey::Group(event_1.id().group_id()));
|
event_man.remove_duplicates(&ListenerKey::Group(event_1.id().group_id()));
|
||||||
event_sender
|
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");
|
.expect("Triggering Event 1 failed");
|
||||||
let res = event_man.try_event_handling(error_handler);
|
let res = event_man.try_event_handling(error_handler);
|
||||||
check_handled_event(res, &event_1_erased, 1, TEST_COMPONENT_ID_0.id());
|
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 test_event = TestEvent::Info;
|
||||||
let event_sender = EventSenderMpscBounded::<EventErasedAlloc>::new(1, event_sender, 3);
|
let event_sender = EventSenderMpscBounded::<EventErasedAlloc>::new(1, event_sender, 3);
|
||||||
event_sender
|
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");
|
.expect("sending test event failed");
|
||||||
event_sender
|
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");
|
.expect("sending test event failed");
|
||||||
event_sender
|
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");
|
.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 {
|
if let Err(e) = error {
|
||||||
assert!(matches!(e, GenericSendError::QueueFull(Some(3))));
|
assert!(matches!(e, GenericSendError::QueueFull(Some(3))));
|
||||||
} else {
|
} else {
|
||||||
@@ -863,7 +889,10 @@ mod tests {
|
|||||||
let test_event = TestEvent::Info;
|
let test_event = TestEvent::Info;
|
||||||
let event_sender = EventSenderMpscBounded::<EventErasedAlloc>::new(1, event_sender, 3);
|
let event_sender = EventSenderMpscBounded::<EventErasedAlloc>::new(1, event_sender, 3);
|
||||||
drop(event_receiver);
|
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));
|
assert!(matches!(e, GenericSendError::RxDisconnected));
|
||||||
} else {
|
} else {
|
||||||
panic!("Expected error");
|
panic!("Expected error");
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ use core::fmt::Debug;
|
|||||||
use core::hash::Hash;
|
use core::hash::Hash;
|
||||||
|
|
||||||
use arbitrary_int::{prelude::*, u14};
|
use arbitrary_int::{prelude::*, u14};
|
||||||
|
#[cfg(feature = "heapless")]
|
||||||
use spacepackets::ByteConversionError;
|
use spacepackets::ByteConversionError;
|
||||||
|
|
||||||
/// Using a type definition allows to change this to u64 in the future more easily
|
/// 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.
|
/// Unique event identifier.
|
||||||
///
|
///
|
||||||
/// Consists of a group ID, a unique ID and the severity.
|
/// 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))]
|
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
||||||
pub struct EventId {
|
pub struct EventId {
|
||||||
group_id: GroupId,
|
group_id: GroupId,
|
||||||
@@ -160,17 +162,20 @@ impl Event for EventErasedAlloc {
|
|||||||
|
|
||||||
/// Event which was type erased and serialized into a [heapless::vec::Vec].
|
/// Event which was type erased and serialized into a [heapless::vec::Vec].
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
|
#[cfg(feature = "heapless")]
|
||||||
pub struct EventErasedHeapless<const N: usize> {
|
pub struct EventErasedHeapless<const N: usize> {
|
||||||
id: EventId,
|
id: EventId,
|
||||||
event_raw: heapless::vec::Vec<u8, N>,
|
event_raw: heapless::vec::Vec<u8, N>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "heapless")]
|
||||||
impl<const N: usize> Event for EventErasedHeapless<N> {
|
impl<const N: usize> Event for EventErasedHeapless<N> {
|
||||||
fn id(&self) -> EventId {
|
fn id(&self) -> EventId {
|
||||||
self.id
|
self.id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "heapless")]
|
||||||
impl<const N: usize> EventErasedHeapless<N> {
|
impl<const N: usize> EventErasedHeapless<N> {
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
/// Creates a new event by serializing the given event using [postcard].
|
/// Creates a new event by serializing the given event using [postcard].
|
||||||
|
|||||||
@@ -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/).
|
//! 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]
|
#![no_std]
|
||||||
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
||||||
|
#[cfg(any(feature = "alloc", test))]
|
||||||
|
extern crate alloc;
|
||||||
#[cfg(feature = "alloc")]
|
#[cfg(feature = "alloc")]
|
||||||
extern crate downcast_rs;
|
extern crate downcast_rs;
|
||||||
#[cfg(any(feature = "std", test))]
|
#[cfg(any(feature = "std", test))]
|
||||||
extern crate std;
|
extern crate std;
|
||||||
#[cfg(any(feature = "alloc", test))]
|
|
||||||
extern crate alloc;
|
|
||||||
|
|
||||||
pub mod action;
|
pub mod action;
|
||||||
#[cfg(feature = "alloc")]
|
#[cfg(feature = "alloc")]
|
||||||
pub mod dev_mgmt;
|
pub mod dev_mgmt;
|
||||||
pub mod encoding;
|
pub mod encoding;
|
||||||
pub mod event_man_legacy;
|
|
||||||
pub mod event_man;
|
pub mod event_man;
|
||||||
pub mod events_legacy;
|
pub mod event_man_legacy;
|
||||||
pub mod events;
|
pub mod events;
|
||||||
|
pub mod events_legacy;
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
pub mod executable;
|
pub mod executable;
|
||||||
pub mod hal;
|
pub mod hal;
|
||||||
|
|||||||
Reference in New Issue
Block a user