From fc684a42a8b005f7b1e73a9366eeb8650e922f99 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 3 Apr 2024 13:30:01 +0200 Subject: [PATCH] consistent ECSS object constructors --- CHANGELOG.md | 4 ++++ Cargo.toml | 2 +- release-checklist.md | 2 +- src/ecss/tc.rs | 10 +++++----- src/ecss/tm.rs | 35 ++++++++++++++++++----------------- src/lib.rs | 2 +- 6 files changed, 30 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 49b9219..b99dff3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,10 @@ to check all the API changes in the **Changed** chapter. ## Changed +- `PusTcCreator::new_simple` now expects a valid slice for the source data instead of an optional + slice. For telecommands without application data, `&[]` can be passed. +- `PusTmSecondaryHeader` constructors now expects a valid slice for the time stamp instead of an + optional slice. - Renamed `CcsdsTimeProvider::date_time` to `CcsdsTimeProvider::chrono_date_time` - Renamed `CcsdsTimeCodes` to `CcsdsTimeCode` - Renamed `cds::TimeProvider` to `cds::CdsTime` diff --git a/Cargo.toml b/Cargo.toml index ee3fa20..406625a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -67,4 +67,4 @@ defmt = ["dep:defmt"] [package.metadata.docs.rs] all-features = true -rustdoc-args = ["--cfg", "docsrs", "--generate-link-to-definition"] +rustdoc-args = ["--cfg", "docs_rs", "--generate-link-to-definition"] diff --git a/release-checklist.md b/release-checklist.md index 57791e3..201b341 100644 --- a/release-checklist.md +++ b/release-checklist.md @@ -4,7 +4,7 @@ Checklist for new releases # Pre-Release 1. Make sure any new modules are documented sufficiently enough and check docs with - `cargo +nightly doc --all-features --config 'build.rustdocflags=["--cfg", "docsrs"]' --open`. + `cargo +nightly doc --all-features --config 'build.rustdocflags=["--cfg", "docs_rs"]' --open`. 2. Bump version specifier in `Cargo.toml`. 3. Update `CHANGELOG.md`: Convert `unreleased` section into version section with date and add new `unreleased` section. diff --git a/src/ecss/tc.rs b/src/ecss/tc.rs index 09c8ff7..a945837 100644 --- a/src/ecss/tc.rs +++ b/src/ecss/tc.rs @@ -267,13 +267,13 @@ impl<'raw_data> PusTcCreator<'raw_data> { sph: &mut SpHeader, service: u8, subservice: u8, - app_data: Option<&'raw_data [u8]>, + app_data: &'raw_data [u8], set_ccsds_len: bool, ) -> Self { Self::new( sph, PusTcSecondaryHeader::new(service, subservice, ACK_ALL, 0), - app_data.unwrap_or(&[]), + app_data, set_ccsds_len, ) } @@ -575,12 +575,12 @@ mod tests { fn base_ping_tc_simple_ctor() -> PusTcCreator<'static> { let mut sph = SpHeader::tc_unseg(0x02, 0x34, 0).unwrap(); - PusTcCreator::new_simple(&mut sph, 17, 1, None, true) + PusTcCreator::new_simple(&mut sph, 17, 1, &[], true) } fn base_ping_tc_simple_ctor_with_app_data(app_data: &'static [u8]) -> PusTcCreator<'static> { let mut sph = SpHeader::tc_unseg(0x02, 0x34, 0).unwrap(); - PusTcCreator::new_simple(&mut sph, 17, 1, Some(app_data), true) + PusTcCreator::new_simple(&mut sph, 17, 1, app_data, true) } #[test] @@ -637,7 +637,7 @@ mod tests { #[test] fn test_update_func() { let mut sph = SpHeader::tc_unseg(0x02, 0x34, 0).unwrap(); - let mut tc = PusTcCreator::new_simple(&mut sph, 17, 1, None, false); + let mut tc = PusTcCreator::new_simple(&mut sph, 17, 1, &[], false); assert_eq!(tc.data_len(), 0); tc.update_ccsds_data_len(); assert_eq!(tc.data_len(), 6); diff --git a/src/ecss/tm.rs b/src/ecss/tm.rs index d2212b8..a244387 100644 --- a/src/ecss/tm.rs +++ b/src/ecss/tm.rs @@ -123,17 +123,17 @@ pub struct PusTmSecondaryHeader<'stamp> { pub subservice: u8, pub msg_counter: u16, pub dest_id: u16, - pub timestamp: &'stamp [u8], + pub time_stamp: &'stamp [u8], } impl<'stamp> PusTmSecondaryHeader<'stamp> { - pub fn new_simple(service: u8, subservice: u8, timestamp: &'stamp [u8]) -> Self { - Self::new(service, subservice, 0, 0, Some(timestamp)) + pub fn new_simple(service: u8, subservice: u8, time_stamp: &'stamp [u8]) -> Self { + Self::new(service, subservice, 0, 0, time_stamp) } /// Like [Self::new_simple] but without a timestamp. pub fn new_simple_no_timestamp(service: u8, subservice: u8) -> Self { - Self::new(service, subservice, 0, 0, None) + Self::new(service, subservice, 0, 0, &[]) } pub fn new( @@ -141,7 +141,7 @@ impl<'stamp> PusTmSecondaryHeader<'stamp> { subservice: u8, msg_counter: u16, dest_id: u16, - timestamp: Option<&'stamp [u8]>, + time_stamp: &'stamp [u8], ) -> Self { PusTmSecondaryHeader { pus_version: PusVersion::PusC, @@ -150,7 +150,7 @@ impl<'stamp> PusTmSecondaryHeader<'stamp> { subservice, msg_counter, dest_id, - timestamp: timestamp.unwrap_or(&[]), + time_stamp, } } } @@ -192,7 +192,7 @@ impl<'slice> TryFrom> for PusTmSecondaryHeader<'slice subservice: sec_header.zc_header.subservice(), msg_counter: sec_header.zc_header.msg_counter(), dest_id: sec_header.zc_header.dest_id(), - timestamp: sec_header.timestamp, + time_stamp: sec_header.timestamp, }) } } @@ -284,7 +284,7 @@ impl<'time, 'raw_data> PusTmCreator<'time, 'raw_data> { } pub fn timestamp(&self) -> &[u8] { - self.sec_header.timestamp + self.sec_header.time_stamp } pub fn source_data(&self) -> &[u8] { @@ -323,7 +323,7 @@ impl<'time, 'raw_data> PusTmCreator<'time, 'raw_data> { digest.update(sph_zc.as_bytes()); let pus_tc_header = zc::PusTmSecHeaderWithoutTimestamp::try_from(self.sec_header).unwrap(); digest.update(pus_tc_header.as_bytes()); - digest.update(self.sec_header.timestamp); + digest.update(self.sec_header.time_stamp); digest.update(self.source_data); digest.finalize() } @@ -352,9 +352,9 @@ impl<'time, 'raw_data> PusTmCreator<'time, 'raw_data> { .write_to_bytes(&mut slice[curr_idx..curr_idx + sec_header_len]) .ok_or(ByteConversionError::ZeroCopyToError)?; curr_idx += sec_header_len; - slice[curr_idx..curr_idx + self.sec_header.timestamp.len()] - .copy_from_slice(self.sec_header.timestamp); - curr_idx += self.sec_header.timestamp.len(); + slice[curr_idx..curr_idx + self.sec_header.time_stamp.len()] + .copy_from_slice(self.sec_header.time_stamp); + curr_idx += self.sec_header.time_stamp.len(); slice[curr_idx..curr_idx + self.source_data.len()].copy_from_slice(self.source_data); curr_idx += self.source_data.len(); let mut digest = CRC_CCITT_FALSE.digest(); @@ -368,14 +368,15 @@ impl<'time, 'raw_data> PusTmCreator<'time, 'raw_data> { #[cfg(feature = "alloc")] pub fn append_to_vec(&self, vec: &mut Vec) -> Result { let sph_zc = crate::zc::SpHeader::from(self.sp_header); - let mut appended_len = PUS_TM_MIN_LEN_WITHOUT_SOURCE_DATA + self.sec_header.timestamp.len(); + let mut appended_len = + PUS_TM_MIN_LEN_WITHOUT_SOURCE_DATA + self.sec_header.time_stamp.len(); appended_len += self.source_data.len(); let start_idx = vec.len(); vec.extend_from_slice(sph_zc.as_bytes()); // The PUS version is hardcoded to PUS C let sec_header = zc::PusTmSecHeaderWithoutTimestamp::try_from(self.sec_header).unwrap(); vec.extend_from_slice(sec_header.as_bytes()); - vec.extend_from_slice(self.sec_header.timestamp); + vec.extend_from_slice(self.sec_header.time_stamp); vec.extend_from_slice(self.source_data); let mut digest = CRC_CCITT_FALSE.digest(); digest.update(&vec[start_idx..start_idx + appended_len - 2]); @@ -387,7 +388,7 @@ impl<'time, 'raw_data> PusTmCreator<'time, 'raw_data> { impl WritablePusPacket for PusTmCreator<'_, '_> { fn len_written(&self) -> usize { PUS_TM_MIN_LEN_WITHOUT_SOURCE_DATA - + self.sec_header.timestamp.len() + + self.sec_header.time_stamp.len() + self.source_data.len() } /// Write the raw PUS byte representation to a provided buffer. @@ -526,7 +527,7 @@ impl<'raw_data> PusTmReader<'raw_data> { } pub fn timestamp(&self) -> &[u8] { - self.sec_header.timestamp + self.sec_header.time_stamp } /// This function will return the slice [Self] was constructed from. @@ -1146,7 +1147,7 @@ mod tests { #[test] fn test_sec_header_without_stamp() { let sec_header = PusTmSecondaryHeader::new_simple_no_timestamp(17, 1); - assert_eq!(sec_header.timestamp, &[]); + assert_eq!(sec_header.time_stamp, &[]); } #[test] diff --git a/src/lib.rs b/src/lib.rs index fd7a130..6778a4a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -55,7 +55,7 @@ //! println!("{:x?}", &ccsds_buf[0..6]); //! ``` #![no_std] -#![cfg_attr(docsrs, feature(doc_auto_cfg))] +#![cfg_attr(docs_rs, feature(doc_auto_cfg))] #[cfg(feature = "alloc")] extern crate alloc; #[cfg(any(feature = "std", test))]