diff --git a/satrs-example/src/config.rs b/satrs-example/src/config.rs index c442665..4cc960f 100644 --- a/satrs-example/src/config.rs +++ b/satrs-example/src/config.rs @@ -42,20 +42,20 @@ pub mod tmtc_err { use super::*; #[resultcode] - pub const INVALID_PUS_SERVICE: ResultU16 = ResultU16::const_new(GroupId::Tmtc as u8, 0); + pub const INVALID_PUS_SERVICE: ResultU16 = ResultU16::new(GroupId::Tmtc as u8, 0); #[resultcode] - pub const INVALID_PUS_SUBSERVICE: ResultU16 = ResultU16::const_new(GroupId::Tmtc as u8, 1); + pub const INVALID_PUS_SUBSERVICE: ResultU16 = ResultU16::new(GroupId::Tmtc as u8, 1); #[resultcode] - pub const PUS_SERVICE_NOT_IMPLEMENTED: ResultU16 = ResultU16::const_new(GroupId::Tmtc as u8, 2); + pub const PUS_SERVICE_NOT_IMPLEMENTED: ResultU16 = ResultU16::new(GroupId::Tmtc as u8, 2); #[resultcode] - pub const UNKNOWN_TARGET_ID: ResultU16 = ResultU16::const_new(GroupId::Tmtc as u8, 3); + pub const UNKNOWN_TARGET_ID: ResultU16 = ResultU16::new(GroupId::Tmtc as u8, 3); #[resultcode( info = "Not enough data inside the TC application data field. Optionally includes: \ 8 bytes of failure data containing 2 failure parameters, \ P1 (u32 big endian): Expected data length, P2: Found data length" )] - pub const NOT_ENOUGH_APP_DATA: ResultU16 = ResultU16::const_new(GroupId::Tmtc as u8, 2); + pub const NOT_ENOUGH_APP_DATA: ResultU16 = ResultU16::new(GroupId::Tmtc as u8, 2); pub const TMTC_RESULTS: &[ResultU16Info] = &[ INVALID_PUS_SERVICE_EXT, @@ -69,13 +69,13 @@ pub mod hk_err { use super::*; #[resultcode] - pub const TARGET_ID_MISSING: ResultU16 = ResultU16::const_new(GroupId::Hk as u8, 0); + pub const TARGET_ID_MISSING: ResultU16 = ResultU16::new(GroupId::Hk as u8, 0); #[resultcode] - pub const UNIQUE_ID_MISSING: ResultU16 = ResultU16::const_new(GroupId::Hk as u8, 1); + pub const UNIQUE_ID_MISSING: ResultU16 = ResultU16::new(GroupId::Hk as u8, 1); #[resultcode] - pub const UNKNOWN_TARGET_ID: ResultU16 = ResultU16::const_new(GroupId::Hk as u8, 2); + pub const UNKNOWN_TARGET_ID: ResultU16 = ResultU16::new(GroupId::Hk as u8, 2); #[resultcode] - pub const COLLECTION_INTERVAL_MISSING: ResultU16 = ResultU16::const_new(GroupId::Hk as u8, 3); + pub const COLLECTION_INTERVAL_MISSING: ResultU16 = ResultU16::new(GroupId::Hk as u8, 3); } #[allow(clippy::enum_variant_names)] diff --git a/satrs-shared/src/res_code.rs b/satrs-shared/src/res_code.rs index 2ef7a88..9d0ce91 100644 --- a/satrs-shared/src/res_code.rs +++ b/satrs-shared/src/res_code.rs @@ -4,6 +4,7 @@ use spacepackets::ecss::{EcssEnumU16, EcssEnumeration}; use spacepackets::util::UnsignedEnum; use spacepackets::ByteConversionError; +/// Simple [u16] based result code type which also allows to group related resultcodes. #[derive(Debug, Copy, Clone, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct ResultU16 { @@ -12,7 +13,7 @@ pub struct ResultU16 { } impl ResultU16 { - pub const fn const_new(group_id: u8, unique_id: u8) -> Self { + pub const fn new(group_id: u8, unique_id: u8) -> Self { Self { group_id, unique_id, @@ -58,3 +59,26 @@ impl EcssEnumeration for ResultU16 { 16 } } + +#[cfg(test)] +mod tests { + use super::*; + + const RESULT_CODE_CONST: ResultU16 = ResultU16::new(1, 1); + + #[test] + pub fn test_basic() { + let result_code = ResultU16::new(1, 1); + assert_eq!(result_code.unique_id(), 0); + assert_eq!(result_code.group_id(), 0); + assert_eq!(result_code, RESULT_CODE_CONST); + assert_eq!(result_code.raw(), (1_u16 << 8) | 1); + assert_eq!(result_code.pfc(), 16); + assert_eq!(result_code.size(), 2); + let mut buf: [u8; 2] = [0; 2]; + let written = result_code.write_to_be_bytes(&mut buf).unwrap(); + assert_eq!(written, 2); + assert_eq!(buf[0], 1); + assert_eq!(buf[1], 1); + } +}