From 1649306802ba921e9978cb66267c246c92a2cde9 Mon Sep 17 00:00:00 2001 From: 0rlych1kk4 Date: Mon, 31 Aug 2026 14:28:24 +0800 Subject: [PATCH] fix: correct CCSDS packet length calculation Signed-off-by: 0rlych1kk4 --- satrs-example/types/src/ccsds.rs | 4 +-- satrs-example/types/tests/ccsds_len.rs | 49 ++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 satrs-example/types/tests/ccsds_len.rs diff --git a/satrs-example/types/src/ccsds.rs b/satrs-example/types/src/ccsds.rs index fe1256a..af5ee16 100644 --- a/satrs-example/types/src/ccsds.rs +++ b/satrs-example/types/src/ccsds.rs @@ -54,7 +54,7 @@ impl CcsdsTcPacketOwned { pub fn len_written(&self) -> usize { ccsds_packet_len_for_user_data_len_with_checksum( postcard::experimental::serialized_size(&self.tc_header).unwrap() as usize - + postcard::experimental::serialized_size(&self.payload).unwrap() as usize, + + self.payload.len(), ) .unwrap() } @@ -116,7 +116,7 @@ impl CcsdsTmPacketOwned { pub fn len_written(&self) -> usize { ccsds_packet_len_for_user_data_len_with_checksum( postcard::experimental::serialized_size(&self.tm_header).unwrap() as usize - + postcard::experimental::serialized_size(&self.payload).unwrap() as usize, + + self.payload.len(), ) .unwrap() } diff --git a/satrs-example/types/tests/ccsds_len.rs b/satrs-example/types/tests/ccsds_len.rs new file mode 100644 index 0000000..72f4e66 --- /dev/null +++ b/satrs-example/types/tests/ccsds_len.rs @@ -0,0 +1,49 @@ +use arbitrary_int::u11; +use spacepackets::{SpacePacketHeader, time::cds::CdsTime}; +use types::{ + Apid, ComponentId, MessageType, TcHeader, TmHeader, + ccsds::{CcsdsTcPacketOwned, CcsdsTmPacketOwned}, +}; + +#[test] +fn tc_len_written_matches_actual_serialized_length() { + let packet = CcsdsTcPacketOwned::new_with_request( + SpacePacketHeader::new_from_apid(u11::new(Apid::Tmtc as u16)), + TcHeader::new(ComponentId::Controller, MessageType::Ping), + types::control::request::Request::Ping, + ); + + let actual = packet.to_vec(); + + println!("TC len_written(): {}", packet.len_written()); + println!("TC actual len: {}", actual.len()); + + assert_eq!(packet.len_written(), actual.len()); +} + +#[test] +fn tm_len_written_matches_actual_serialized_length() { + let timestamp = CdsTime::new_with_u16_days(0, 0); + + let tm_header = TmHeader::new( + ComponentId::Controller, + ComponentId::Ground, + MessageType::Verification, + None, + ×tamp, + ); + + let packet = CcsdsTmPacketOwned::new_with_serde_payload( + SpacePacketHeader::new_from_apid(u11::new(Apid::Tmtc as u16)), + &tm_header, + &types::control::response::Response::Ok, + ) + .unwrap(); + + let actual = packet.to_vec(); + + println!("TM len_written(): {}", packet.len_written()); + println!("TM actual len: {}", actual.len()); + + assert_eq!(packet.len_written(), actual.len()); +}