extend ecss module definitions
Some checks failed
Rust/spacepackets/pipeline/head There was a failure building this commit
Some checks failed
Rust/spacepackets/pipeline/head There was a failure building this commit
This commit is contained in:
parent
effef4609b
commit
8054f4091d
12
CHANGELOG.md
12
CHANGELOG.md
@ -8,6 +8,18 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
|||||||
|
|
||||||
# [unreleased]
|
# [unreleased]
|
||||||
|
|
||||||
|
## Added
|
||||||
|
|
||||||
|
- `num_enum` dependency to avoid boilerplate code for primtive to enum conversions, for example
|
||||||
|
for the PUS subservices.
|
||||||
|
- `ecss.event` module containing a `Subservice` enum.
|
||||||
|
- `ecss.verification` module containing a `Subservice` enum.
|
||||||
|
- `ecss.scheduling` module containing a `Subservice` enum and some other helper enumerations.
|
||||||
|
|
||||||
|
## Changed
|
||||||
|
|
||||||
|
- Added missing Service IDs to `ecss.PusServiceId` and marked in `#[non_exhaustive]`.
|
||||||
|
|
||||||
# [v0.5.2] 2023-01-26
|
# [v0.5.2] 2023-01-26
|
||||||
|
|
||||||
## Added
|
## Added
|
||||||
|
@ -16,6 +16,7 @@ categories = ["aerospace", "aerospace::space-protocols", "no-std", "hardware-sup
|
|||||||
zerocopy = "0.6"
|
zerocopy = "0.6"
|
||||||
crc = "3"
|
crc = "3"
|
||||||
delegate = ">=0.8, <0.10"
|
delegate = ">=0.8, <0.10"
|
||||||
|
num_enum = "0.5"
|
||||||
|
|
||||||
[dependencies.serde]
|
[dependencies.serde]
|
||||||
version = "1"
|
version = "1"
|
||||||
|
43
src/ecss/event.rs
Normal file
43
src/ecss/event.rs
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
//! PUS Service 5 Events
|
||||||
|
#[cfg(feature = "serde")]
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
use num_enum::{IntoPrimitive, TryFromPrimitive};
|
||||||
|
|
||||||
|
#[derive(Debug, Eq, PartialEq, Copy, Clone, IntoPrimitive, TryFromPrimitive)]
|
||||||
|
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||||
|
#[repr(u8)]
|
||||||
|
pub enum Subservice {
|
||||||
|
TmInfoReport = 1,
|
||||||
|
TmLowSeverityReport = 2,
|
||||||
|
TmMediumSeverityReport = 3,
|
||||||
|
TmHighSeverityReport = 4,
|
||||||
|
TcEnableEventGeneration = 5,
|
||||||
|
TcDisableEventGeneration = 6,
|
||||||
|
TcReportDisabledList = 7,
|
||||||
|
TmDisabledEventsReport = 8,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_conv_into_u8() {
|
||||||
|
let subservice: u8 = Subservice::TmLowSeverityReport.into();
|
||||||
|
assert_eq!(subservice, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_conv_from_u8() {
|
||||||
|
let subservice: Subservice = 2.try_into().unwrap();
|
||||||
|
assert_eq!(subservice, Subservice::TmLowSeverityReport);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_conv_fails() {
|
||||||
|
let conversion = Subservice::try_from(9);
|
||||||
|
assert!(conversion.is_err());
|
||||||
|
let err = conversion.unwrap_err();
|
||||||
|
assert_eq!(err.number, 9);
|
||||||
|
}
|
||||||
|
}
|
@ -7,12 +7,15 @@ use crate::{ByteConversionError, CcsdsPacket, SizeMissmatch};
|
|||||||
use core::fmt::{Debug, Display, Formatter};
|
use core::fmt::{Debug, Display, Formatter};
|
||||||
use core::mem::size_of;
|
use core::mem::size_of;
|
||||||
use crc::{Crc, CRC_16_IBM_3740};
|
use crc::{Crc, CRC_16_IBM_3740};
|
||||||
|
use num_enum::{IntoPrimitive, TryFromPrimitive};
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
|
|
||||||
pub mod scheduling;
|
pub mod scheduling;
|
||||||
|
pub mod event;
|
||||||
|
pub mod verification;
|
||||||
|
|
||||||
pub type CrcType = u16;
|
pub type CrcType = u16;
|
||||||
|
|
||||||
@ -20,21 +23,51 @@ pub type CrcType = u16;
|
|||||||
pub const CRC_CCITT_FALSE: Crc<u16> = Crc::<u16>::new(&CRC_16_IBM_3740);
|
pub const CRC_CCITT_FALSE: Crc<u16> = Crc::<u16>::new(&CRC_16_IBM_3740);
|
||||||
pub const CCSDS_HEADER_LEN: usize = size_of::<crate::zc::SpHeader>();
|
pub const CCSDS_HEADER_LEN: usize = size_of::<crate::zc::SpHeader>();
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
|
#[derive(Debug, Copy, Clone, Eq, PartialEq, IntoPrimitive, TryFromPrimitive)]
|
||||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||||
|
#[repr(u8)]
|
||||||
|
#[non_exhaustive]
|
||||||
pub enum PusServiceId {
|
pub enum PusServiceId {
|
||||||
/// Service 1
|
/// Service 1
|
||||||
Verification = 1,
|
Verification = 1,
|
||||||
|
/// Service 2
|
||||||
|
DeviceAccess = 2,
|
||||||
/// Service 3
|
/// Service 3
|
||||||
Housekeeping = 3,
|
Housekeeping = 3,
|
||||||
|
/// Service 4
|
||||||
|
ParameterStatistics = 4,
|
||||||
/// Service 5
|
/// Service 5
|
||||||
Event = 5,
|
Event = 5,
|
||||||
|
/// Service 6
|
||||||
|
MemoryManagement = 6,
|
||||||
/// Service 8
|
/// Service 8
|
||||||
Action = 8,
|
Action = 8,
|
||||||
|
/// Service 9
|
||||||
|
TimeManagement = 9,
|
||||||
/// Service 11
|
/// Service 11
|
||||||
Scheduling = 11,
|
Scheduling = 11,
|
||||||
|
/// Service 12
|
||||||
|
OnBoardMonitoring = 12,
|
||||||
|
/// Service 13
|
||||||
|
LargePacketTransfer = 13,
|
||||||
|
/// Service 14
|
||||||
|
RealTimeForwardingControl = 14,
|
||||||
|
/// Service 15
|
||||||
|
StorageAndRetrival = 15,
|
||||||
/// Service 17
|
/// Service 17
|
||||||
Test = 17,
|
Test = 17,
|
||||||
|
/// Service 18
|
||||||
|
OpsAndProcedures = 18,
|
||||||
|
/// Service 19
|
||||||
|
EventAction = 19,
|
||||||
|
/// Service 20
|
||||||
|
Parameter = 20,
|
||||||
|
/// Service 21
|
||||||
|
RequestSequencing = 21,
|
||||||
|
/// Service 22
|
||||||
|
PositionBasedScheduling = 22,
|
||||||
|
/// Service 23
|
||||||
|
FileManagement = 23
|
||||||
}
|
}
|
||||||
|
|
||||||
/// All PUS versions. Only PUS C is supported by this library.
|
/// All PUS versions. Only PUS C is supported by this library.
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
//! PUS Service 11 Scheduling
|
//! PUS Service 11 Scheduling
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
use num_enum::{IntoPrimitive, TryFromPrimitive};
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
|
#[derive(Debug, PartialEq, Eq, Copy, Clone, IntoPrimitive, TryFromPrimitive)]
|
||||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||||
|
#[repr(u8)]
|
||||||
pub enum Subservice {
|
pub enum Subservice {
|
||||||
// Core subservices
|
// Core subservices
|
||||||
TcEnableScheduling = 1,
|
TcEnableScheduling = 1,
|
||||||
@ -73,7 +75,7 @@ pub enum TimeWindowType {
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::ecss::scheduling::SchedStatus;
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_bool_conv_0() {
|
fn test_bool_conv_0() {
|
||||||
@ -88,4 +90,16 @@ mod tests {
|
|||||||
let status: SchedStatus = enabled.into();
|
let status: SchedStatus = enabled.into();
|
||||||
assert_eq!(status, SchedStatus::Disabled)
|
assert_eq!(status, SchedStatus::Disabled)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_conv_into_u8() {
|
||||||
|
let subservice: u8 = Subservice::TcCreateScheduleGroup.into();
|
||||||
|
assert_eq!(subservice, 22);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_conv_from_u8() {
|
||||||
|
let subservice: Subservice = 22u8.try_into().unwrap();
|
||||||
|
assert_eq!(subservice, Subservice::TcCreateScheduleGroup);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
35
src/ecss/verification.rs
Normal file
35
src/ecss/verification.rs
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
//! PUS Service 1 Verification
|
||||||
|
#[cfg(feature = "serde")]
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
use num_enum::{IntoPrimitive, TryFromPrimitive};
|
||||||
|
|
||||||
|
#[derive(Debug, Eq, PartialEq, Copy, Clone, IntoPrimitive, TryFromPrimitive)]
|
||||||
|
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||||
|
#[repr(u8)]
|
||||||
|
pub enum Subservice {
|
||||||
|
TmAcceptanceSuccess = 1,
|
||||||
|
TmAcceptanceFailure = 2,
|
||||||
|
TmStartSuccess = 3,
|
||||||
|
TmStartFailure = 4,
|
||||||
|
TmStepSuccess = 5,
|
||||||
|
TmStepFailure = 6,
|
||||||
|
TmCompletionSuccess = 7,
|
||||||
|
TmCompletionFailure = 8,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_conv_into_u8() {
|
||||||
|
let subservice: u8 = Subservice::TmCompletionSuccess.into();
|
||||||
|
assert_eq!(subservice, 7);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_conv_from_u8() {
|
||||||
|
let subservice: Subservice = 7.try_into().unwrap();
|
||||||
|
assert_eq!(subservice, Subservice::TmCompletionSuccess);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user