PUS Event Manager #19
@ -33,6 +33,36 @@ use core::mem::size_of;
|
|||||||
use paste::paste;
|
use paste::paste;
|
||||||
pub use spacepackets::ecss::ToBeBytes;
|
pub use spacepackets::ecss::ToBeBytes;
|
||||||
use spacepackets::ecss::{EcssEnumU16, EcssEnumU32, EcssEnumU64, EcssEnumU8};
|
use spacepackets::ecss::{EcssEnumU16, EcssEnumU32, EcssEnumU64, EcssEnumU8};
|
||||||
|
use spacepackets::ByteConversionError;
|
||||||
|
use spacepackets::SizeMissmatch;
|
||||||
|
|
||||||
|
pub trait WritableAsBeBytes {
|
||||||
|
fn raw_len(&self) -> usize;
|
||||||
|
fn write_be(&self, buf: &mut [u8]) -> Result<usize, ByteConversionError>;
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! param_to_be_bytes_impl {
|
||||||
|
($Newtype: ident) => {
|
||||||
|
impl WritableAsBeBytes for $Newtype {
|
||||||
|
#[inline]
|
||||||
|
fn raw_len(&self) -> usize {
|
||||||
|
size_of::<<Self as ToBeBytes>::ByteArray>()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn write_be(&self, buf: &mut [u8]) -> Result<usize, ByteConversionError> {
|
||||||
|
let raw_len = self.raw_len();
|
||||||
|
if buf.len() < raw_len {
|
||||||
|
return Err(ByteConversionError::ToSliceTooSmall(SizeMissmatch {
|
||||||
|
found: buf.len(),
|
||||||
|
expected: raw_len,
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
buf[0..raw_len].copy_from_slice(&self.to_be_bytes());
|
||||||
|
Ok(raw_len)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
macro_rules! primitive_newtypes_with_eq {
|
macro_rules! primitive_newtypes_with_eq {
|
||||||
($($ty: ty,)+) => {
|
($($ty: ty,)+) => {
|
||||||
@ -45,6 +75,10 @@ macro_rules! primitive_newtypes_with_eq {
|
|||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||||
pub struct [<$ty:upper Triplet>](pub $ty, pub $ty, pub $ty);
|
pub struct [<$ty:upper Triplet>](pub $ty, pub $ty, pub $ty);
|
||||||
|
|
||||||
|
param_to_be_bytes_impl!([<$ty:upper>]);
|
||||||
|
param_to_be_bytes_impl!([<$ty:upper Pair>]);
|
||||||
|
param_to_be_bytes_impl!([<$ty:upper Triplet>]);
|
||||||
|
|
||||||
impl From<$ty> for [<$ty:upper>] {
|
impl From<$ty> for [<$ty:upper>] {
|
||||||
fn from(v: $ty) -> Self {
|
fn from(v: $ty) -> Self {
|
||||||
Self(v)
|
Self(v)
|
||||||
@ -76,6 +110,10 @@ macro_rules! primitive_newtypes {
|
|||||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||||
pub struct [<$ty:upper Triplet>](pub $ty, pub $ty, pub $ty);
|
pub struct [<$ty:upper Triplet>](pub $ty, pub $ty, pub $ty);
|
||||||
|
|
||||||
|
param_to_be_bytes_impl!([<$ty:upper>]);
|
||||||
|
param_to_be_bytes_impl!([<$ty:upper Pair>]);
|
||||||
|
param_to_be_bytes_impl!([<$ty:upper Triplet>]);
|
||||||
|
|
||||||
impl From<$ty> for [<$ty:upper>] {
|
impl From<$ty> for [<$ty:upper>] {
|
||||||
fn from(v: $ty) -> Self {
|
fn from(v: $ty) -> Self {
|
||||||
Self(v)
|
Self(v)
|
||||||
@ -237,6 +275,65 @@ pub enum ParamsRaw {
|
|||||||
F64(F64),
|
F64(F64),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl WritableAsBeBytes for ParamsRaw {
|
||||||
|
fn raw_len(&self) -> usize {
|
||||||
|
match self {
|
||||||
|
ParamsRaw::U8(v) => v.raw_len(),
|
||||||
|
ParamsRaw::U8Pair(v) => v.raw_len(),
|
||||||
|
ParamsRaw::U8Triplet(v) => v.raw_len(),
|
||||||
|
ParamsRaw::I8(v) => v.raw_len(),
|
||||||
|
ParamsRaw::I8Pair(v) => v.raw_len(),
|
||||||
|
ParamsRaw::I8Triplet(v) => v.raw_len(),
|
||||||
|
ParamsRaw::U16(v) => v.raw_len(),
|
||||||
|
ParamsRaw::U16Pair(v) => v.raw_len(),
|
||||||
|
ParamsRaw::U16Triplet(v) => v.raw_len(),
|
||||||
|
ParamsRaw::I16(v) => v.raw_len(),
|
||||||
|
ParamsRaw::I16Pair(v) => v.raw_len(),
|
||||||
|
ParamsRaw::I16Triplet(v) => v.raw_len(),
|
||||||
|
ParamsRaw::U32(v) => v.raw_len(),
|
||||||
|
ParamsRaw::U32Pair(v) => v.raw_len(),
|
||||||
|
ParamsRaw::U32Triplet(v) => v.raw_len(),
|
||||||
|
ParamsRaw::I32(v) => v.raw_len(),
|
||||||
|
ParamsRaw::I32Pair(v) => v.raw_len(),
|
||||||
|
ParamsRaw::I32Triplet(v) => v.raw_len(),
|
||||||
|
ParamsRaw::F32(v) => v.raw_len(),
|
||||||
|
ParamsRaw::F32Pair(v) => v.raw_len(),
|
||||||
|
ParamsRaw::F32Triplet(v) => v.raw_len(),
|
||||||
|
ParamsRaw::U64(v) => v.raw_len(),
|
||||||
|
ParamsRaw::I64(v) => v.raw_len(),
|
||||||
|
ParamsRaw::F64(v) => v.raw_len(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn write_be(&self, buf: &mut [u8]) -> Result<usize, ByteConversionError> {
|
||||||
|
match self {
|
||||||
|
ParamsRaw::U8(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::U8Pair(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::U8Triplet(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::I8(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::I8Pair(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::I8Triplet(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::U16(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::U16Pair(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::U16Triplet(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::I16(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::I16Pair(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::I16Triplet(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::U32(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::U32Pair(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::U32Triplet(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::I32(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::I32Pair(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::I32Triplet(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::F32(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::F32Pair(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::F32Triplet(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::U64(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::I64(v) => v.write_be(buf),
|
||||||
|
ParamsRaw::F64(v) => v.write_be(buf),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
macro_rules! params_raw_from_newtype {
|
macro_rules! params_raw_from_newtype {
|
||||||
($($newtype: ident,)+) => {
|
($($newtype: ident,)+) => {
|
||||||
$(
|
$(
|
||||||
|
@ -2,7 +2,7 @@ use fsrc_core::event_man::{EventManager, MpscEventReceiver, MpscEventU32SendProv
|
|||||||
use fsrc_core::events::{EventU32, EventU32TypedSev, Severity, SeverityInfo};
|
use fsrc_core::events::{EventU32, EventU32TypedSev, Severity, SeverityInfo};
|
||||||
use fsrc_core::pus::event_man::{DefaultPusMgmtBackendProvider, EventReporter, PusEventTmManager};
|
use fsrc_core::pus::event_man::{DefaultPusMgmtBackendProvider, EventReporter, PusEventTmManager};
|
||||||
use fsrc_core::pus::{EcssTmError, EcssTmSender};
|
use fsrc_core::pus::{EcssTmError, EcssTmSender};
|
||||||
use fsrc_core::util::Params;
|
use fsrc_core::util::{Params, ParamsHeapless, ParamsRaw};
|
||||||
use spacepackets::tm::PusTm;
|
use spacepackets::tm::PusTm;
|
||||||
use std::sync::mpsc::{channel, SendError, TryRecvError};
|
use std::sync::mpsc::{channel, SendError, TryRecvError};
|
||||||
use std::thread;
|
use std::thread;
|
||||||
@ -43,6 +43,7 @@ fn test_threaded_usage() {
|
|||||||
let jh0 = thread::spawn(move || {
|
let jh0 = thread::spawn(move || {
|
||||||
let mut sender = EventTmSender { sender: event_tx };
|
let mut sender = EventTmSender { sender: event_tx };
|
||||||
let mut event_cnt = 0;
|
let mut event_cnt = 0;
|
||||||
|
let _params_array: [u8; 256] = [0; 256];
|
||||||
loop {
|
loop {
|
||||||
let res = event_man.try_event_handling();
|
let res = event_man.try_event_handling();
|
||||||
assert!(res.is_ok());
|
assert!(res.is_ok());
|
||||||
@ -51,7 +52,36 @@ fn test_threaded_usage() {
|
|||||||
// TODO: Convert auxiliary data into raw byte format
|
// TODO: Convert auxiliary data into raw byte format
|
||||||
if let Some(aux_data) = aux_data {
|
if let Some(aux_data) = aux_data {
|
||||||
match aux_data {
|
match aux_data {
|
||||||
Params::Heapless(_) => {}
|
Params::Heapless(heapless) => match heapless {
|
||||||
|
ParamsHeapless::Raw(raw) => match raw {
|
||||||
|
ParamsRaw::U8(_) => {}
|
||||||
|
ParamsRaw::U8Pair(_) => {}
|
||||||
|
ParamsRaw::U8Triplet(_) => {}
|
||||||
|
ParamsRaw::I8(_) => {}
|
||||||
|
ParamsRaw::I8Pair(_) => {}
|
||||||
|
ParamsRaw::I8Triplet(_) => {}
|
||||||
|
ParamsRaw::U16(_) => {}
|
||||||
|
ParamsRaw::U16Pair(_) => {}
|
||||||
|
ParamsRaw::U16Triplet(_) => {}
|
||||||
|
ParamsRaw::I16(_) => {}
|
||||||
|
ParamsRaw::I16Pair(_) => {}
|
||||||
|
ParamsRaw::I16Triplet(_) => {}
|
||||||
|
ParamsRaw::U32(_) => {}
|
||||||
|
ParamsRaw::U32Pair(_) => {}
|
||||||
|
ParamsRaw::U32Triplet(_) => {}
|
||||||
|
ParamsRaw::I32(_) => {}
|
||||||
|
ParamsRaw::I32Pair(_) => {}
|
||||||
|
ParamsRaw::I32Triplet(_) => {}
|
||||||
|
ParamsRaw::F32(_) => {}
|
||||||
|
ParamsRaw::F32Pair(_) => {}
|
||||||
|
ParamsRaw::F32Triplet(_) => {}
|
||||||
|
ParamsRaw::U64(_) => {}
|
||||||
|
ParamsRaw::I64(_) => {}
|
||||||
|
ParamsRaw::F64(_) => {}
|
||||||
|
},
|
||||||
|
ParamsHeapless::EcssEnum(_) => {}
|
||||||
|
ParamsHeapless::Store(_) => {}
|
||||||
|
},
|
||||||
Params::Vec(_) => {}
|
Params::Vec(_) => {}
|
||||||
Params::String(_) => {}
|
Params::String(_) => {}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user