2024-02-12 15:51:37 +01:00
//! # sat-rs: A framework to build on-board software for remote systems
2023-01-11 10:30:03 +01:00
//!
2023-02-19 18:32:06 +01:00
//! You can find more information about the sat-rs framework on the
2024-02-12 18:17:50 +01:00
//! [homepage](https://absatsw.irs.uni-stuttgart.de/projects/sat-rs/).
//! The [satrs-book](https://absatsw.irs.uni-stuttgart.de/projects/sat-rs/book/) contains
//! high-level information about this framework.
2023-01-11 10:30:03 +01:00
//!
2023-02-19 18:32:06 +01:00
//! ## Overview
//!
//! The core modules of this crate include
//!
//! - The [event manager][event_man] module which provides a publish and
//! and subscribe to route events.
//! - 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/).
2023-01-11 10:30:03 +01:00
#![ no_std ]
2024-04-04 15:18:53 +02:00
#![ cfg_attr(docs_rs, feature(doc_auto_cfg)) ]
2023-01-11 10:30:03 +01:00
#[ cfg(feature = " alloc " ) ]
extern crate alloc ;
#[ cfg(feature = " alloc " ) ]
extern crate downcast_rs ;
#[ cfg(any(feature = " std " , test)) ]
extern crate std ;
2023-12-15 17:21:23 +01:00
#[ cfg(feature = " alloc " ) ]
2023-07-21 21:36:21 +02:00
pub mod cfdp ;
2023-09-20 15:18:20 +02:00
pub mod encoding ;
2023-01-11 10:30:03 +01:00
pub mod event_man ;
pub mod events ;
#[ cfg(feature = " std " ) ]
pub mod executable ;
pub mod hal ;
2024-04-04 15:18:53 +02:00
#[ cfg(feature = " std " ) ]
pub mod mode_tree ;
2023-01-11 10:30:03 +01:00
pub mod pool ;
2023-02-05 18:59:28 +01:00
pub mod power ;
2023-01-11 10:30:03 +01:00
pub mod pus ;
2024-02-20 14:33:21 +01:00
pub mod queue ;
2023-02-14 15:53:14 +01:00
pub mod request ;
2023-01-11 10:30:03 +01:00
pub mod res_code ;
pub mod seq_count ;
2024-04-04 15:18:53 +02:00
pub mod time ;
2023-01-11 10:30:03 +01:00
pub mod tmtc ;
2024-02-20 14:33:21 +01:00
pub mod action ;
pub mod hk ;
pub mod mode ;
pub mod params ;
2023-01-11 10:30:03 +01:00
pub use spacepackets ;
2023-02-27 17:00:21 +01:00
2024-04-04 15:18:53 +02:00
use spacepackets ::PacketId ;
/// 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 )
}
}
2024-04-16 11:04:22 +02:00
impl ValidatorU16Id for u16 {
fn validate ( & self , id : u16 ) -> bool {
id = = * self
}
}
impl ValidatorU16Id for & u16 {
fn validate ( & self , id : u16 ) -> bool {
id = = * * self
}
}
2024-04-04 15:18:53 +02:00
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 ( )
}
}
2024-02-20 14:33:21 +01:00
2024-04-04 15:18:53 +02:00
impl ValidatorU16Id for & [ PacketId ] {
fn validate ( & self , packet_id : u16 ) -> bool {
self . binary_search ( & PacketId ::from ( packet_id ) ) . is_ok ( )
}
}