Major refactoring and update of PUS module
This commit is contained in:
@ -14,7 +14,7 @@
|
||||
//! - The [pus] module which provides special support for projects using
|
||||
//! 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(doc_cfg, feature(doc_cfg))]
|
||||
#![cfg_attr(docs_rs, feature(doc_auto_cfg))]
|
||||
#[cfg(feature = "alloc")]
|
||||
extern crate alloc;
|
||||
#[cfg(feature = "alloc")]
|
||||
@ -23,16 +23,15 @@ extern crate downcast_rs;
|
||||
extern crate std;
|
||||
|
||||
#[cfg(feature = "alloc")]
|
||||
#[cfg_attr(doc_cfg, doc(cfg(feature = "alloc")))]
|
||||
pub mod cfdp;
|
||||
pub mod encoding;
|
||||
pub mod event_man;
|
||||
pub mod events;
|
||||
#[cfg(feature = "std")]
|
||||
#[cfg_attr(doc_cfg, doc(cfg(feature = "std")))]
|
||||
pub mod executable;
|
||||
pub mod hal;
|
||||
pub mod objects;
|
||||
#[cfg(feature = "std")]
|
||||
pub mod mode_tree;
|
||||
pub mod pool;
|
||||
pub mod power;
|
||||
pub mod pus;
|
||||
@ -40,6 +39,7 @@ pub mod queue;
|
||||
pub mod request;
|
||||
pub mod res_code;
|
||||
pub mod seq_count;
|
||||
pub mod time;
|
||||
pub mod tmtc;
|
||||
|
||||
pub mod action;
|
||||
@ -49,8 +49,70 @@ pub mod params;
|
||||
|
||||
pub use spacepackets;
|
||||
|
||||
/// Generic channel ID type.
|
||||
pub type ChannelId = u32;
|
||||
use spacepackets::PacketId;
|
||||
|
||||
/// Generic target ID type.
|
||||
pub type TargetId = u64;
|
||||
/// Generic component ID type.
|
||||
pub type ComponentId = u64;
|
||||
|
||||
pub trait ValidatorU16Id {
|
||||
fn validate(&self, id: u16) -> bool;
|
||||
}
|
||||
|
||||
#[cfg(feature = "alloc")]
|
||||
impl ValidatorU16Id for alloc::vec::Vec<u16> {
|
||||
fn validate(&self, id: u16) -> bool {
|
||||
self.contains(&id)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "alloc")]
|
||||
impl ValidatorU16Id for hashbrown::HashSet<u16> {
|
||||
fn validate(&self, id: u16) -> bool {
|
||||
self.contains(&id)
|
||||
}
|
||||
}
|
||||
|
||||
impl ValidatorU16Id for [u16] {
|
||||
fn validate(&self, id: u16) -> bool {
|
||||
self.binary_search(&id).is_ok()
|
||||
}
|
||||
}
|
||||
|
||||
impl ValidatorU16Id for &[u16] {
|
||||
fn validate(&self, id: u16) -> bool {
|
||||
self.binary_search(&id).is_ok()
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "alloc")]
|
||||
impl ValidatorU16Id for alloc::vec::Vec<spacepackets::PacketId> {
|
||||
fn validate(&self, packet_id: u16) -> bool {
|
||||
self.contains(&PacketId::from(packet_id))
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "alloc")]
|
||||
impl ValidatorU16Id for hashbrown::HashSet<spacepackets::PacketId> {
|
||||
fn validate(&self, packet_id: u16) -> bool {
|
||||
self.contains(&PacketId::from(packet_id))
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "std")]
|
||||
impl ValidatorU16Id for std::collections::HashSet<PacketId> {
|
||||
fn validate(&self, packet_id: u16) -> bool {
|
||||
self.contains(&PacketId::from(packet_id))
|
||||
}
|
||||
}
|
||||
|
||||
impl ValidatorU16Id for [PacketId] {
|
||||
fn validate(&self, packet_id: u16) -> bool {
|
||||
self.binary_search(&PacketId::from(packet_id)).is_ok()
|
||||
}
|
||||
}
|
||||
|
||||
impl ValidatorU16Id for &[PacketId] {
|
||||
fn validate(&self, packet_id: u16) -> bool {
|
||||
self.binary_search(&PacketId::from(packet_id)).is_ok()
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user