From a650773566928dfa71f583bf2d6a4f7d1cd88060 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 5 May 2025 19:18:03 +0200 Subject: [PATCH 1/5] tweaks for msp430 --- satrs-example/src/bin/simpleclient.rs | 2 +- satrs-example/src/pus/mod.rs | 4 ++-- satrs-example/src/pus/test.rs | 2 +- satrs-mib/Cargo.toml | 1 + satrs-shared/Cargo.toml | 1 + satrs/Cargo.toml | 9 +++------ satrs/src/pus/mod.rs | 18 ++++++------------ satrs/src/pus/scheduler.rs | 24 ++++++++++++------------ satrs/src/pus/verification.rs | 2 +- 9 files changed, 28 insertions(+), 35 deletions(-) diff --git a/satrs-example/src/bin/simpleclient.rs b/satrs-example/src/bin/simpleclient.rs index bbe7609..64837a3 100644 --- a/satrs-example/src/bin/simpleclient.rs +++ b/satrs-example/src/bin/simpleclient.rs @@ -29,7 +29,7 @@ fn main() { let res = client.recv(&mut buf); match res { Ok(_len) => { - let (pus_tm, size) = PusTmReader::new(&buf, 7).expect("Parsing PUS TM failed"); + let pus_tm= PusTmReader::new(&buf, 7).expect("Parsing PUS TM failed"); if pus_tm.service() == 17 && pus_tm.subservice() == 2 { println!("Received PUS Ping Reply TM[17,2]") } else if pus_tm.service() == 1 { diff --git a/satrs-example/src/pus/mod.rs b/satrs-example/src/pus/mod.rs index d76aa24..abc2420 100644 --- a/satrs-example/src/pus/mod.rs +++ b/satrs-example/src/pus/mod.rs @@ -109,7 +109,7 @@ impl PusTcDistributor { // TODO: Shouldn't this be an error? return Ok(HandlingStatus::HandledOne); } - let pus_tc = pus_tc_result.unwrap().0; + let pus_tc = pus_tc_result.unwrap(); let init_token = self.verif_reporter.add_tc(&pus_tc); self.stamp_helper.update_from_now(); let accepted_token = self @@ -734,7 +734,7 @@ pub(crate) mod tests { let tc_reader = PusTcReader::new(¤t_packet).unwrap(); let (active_info, request) = self.converter.convert( token, - &tc_reader.0, + &tc_reader, &self.dummy_sender, &self.verif_reporter, time_stamp, diff --git a/satrs-example/src/pus/test.rs b/satrs-example/src/pus/test.rs index b80fcd4..2c242ce 100644 --- a/satrs-example/src/pus/test.rs +++ b/satrs-example/src/pus/test.rs @@ -90,7 +90,7 @@ impl DirectPusService for TestCustomServiceWrapper { ); } DirectPusPacketHandlerResult::CustomSubservice(subservice, token) => { - let (tc, _) = PusTcReader::new( + let tc = PusTcReader::new( self.handler .service_helper .tc_in_mem_converter diff --git a/satrs-mib/Cargo.toml b/satrs-mib/Cargo.toml index 4159053..6cad529 100644 --- a/satrs-mib/Cargo.toml +++ b/satrs-mib/Cargo.toml @@ -24,6 +24,7 @@ optional = true [dependencies.satrs-shared] version = ">=0.1.3, <=0.2" +path = "../satrs-shared" features = ["serde"] [dependencies.satrs-mib-codegen] diff --git a/satrs-shared/Cargo.toml b/satrs-shared/Cargo.toml index 8037ef2..4ff2b0b 100644 --- a/satrs-shared/Cargo.toml +++ b/satrs-shared/Cargo.toml @@ -23,6 +23,7 @@ optional = true [dependencies.spacepackets] version = ">0.9, <=0.13" +path = "../../spacepackets" default-features = false [features] diff --git a/satrs/Cargo.toml b/satrs/Cargo.toml index 7f35b98..2bf5b4b 100644 --- a/satrs/Cargo.toml +++ b/satrs/Cargo.toml @@ -13,16 +13,13 @@ keywords = ["no-std", "space", "aerospace"] categories = ["aerospace", "aerospace::space-protocols", "no-std", "hardware-support", "embedded"] [dependencies] -satrs-shared = ">=0.1.3, <=0.2" +satrs-shared = { version = ">=0.1.3, <=0.2", path = "../satrs-shared" } delegate = ">0.7, <=0.13" paste = "1" derive-new = ">=0.6, <=0.7" -smallvec = "1" -crc = "3" num_enum = { version = ">0.5, <=0.7", default-features = false } -spacepackets = { version = "0.13", default-features = false } -cobs = { version = "0.3", default-features = false } -num-traits = { version = "0.2", default-features = false } +spacepackets = { version = "0.13", default-features = false, path = "../../spacepackets" } +cobs = { version = "0.4", default-features = false, path = "../../cobs.rs" } thiserror = { version = "2", default-features = false } hashbrown = { version = ">=0.14, <=0.15", optional = true } diff --git a/satrs/src/pus/mod.rs b/satrs/src/pus/mod.rs index b254138..4c5cff3 100644 --- a/satrs/src/pus/mod.rs +++ b/satrs/src/pus/mod.rs @@ -959,15 +959,11 @@ pub mod std_mod { possible_packet: &TcInMemory, ) -> Result, PusTcFromMemError> { self.cache(possible_packet)?; - Ok(PusTcReader::new(self.tc_slice_raw()) - .map_err(EcssTmtcError::Pus)? - .0) + Ok(PusTcReader::new(self.tc_slice_raw()).map_err(EcssTmtcError::Pus)?) } fn convert(&self) -> Result, PusTcFromMemError> { - Ok(PusTcReader::new(self.tc_slice_raw()) - .map_err(EcssTmtcError::Pus)? - .0) + Ok(PusTcReader::new(self.tc_slice_raw()).map_err(EcssTmtcError::Pus)?) } } @@ -1459,7 +1455,7 @@ pub mod tests { let tm_pool = self.tm_pool.0.read().unwrap(); let tm_raw = tm_pool.read_as_vec(&tm_in_pool.store_addr).unwrap(); self.tm_buf[0..tm_raw.len()].copy_from_slice(&tm_raw); - PusTmReader::new(&self.tm_buf, 7).unwrap().0 + PusTmReader::new(&self.tm_buf, 7).unwrap() } pub fn check_no_tm_available(&self) -> bool { @@ -1476,7 +1472,7 @@ pub mod tests { let tm_in_pool = next_msg.unwrap(); let tm_pool = self.tm_pool.0.read().unwrap(); let tm_raw = tm_pool.read_as_vec(&tm_in_pool.store_addr).unwrap(); - let tm = PusTmReader::new(&tm_raw, 7).unwrap().0; + let tm = PusTmReader::new(&tm_raw, 7).unwrap(); assert_eq!(PusPacket::service(&tm), 1); assert_eq!(PusPacket::subservice(&tm), subservice); assert_eq!(tm.apid(), TEST_APID); @@ -1584,9 +1580,7 @@ pub mod tests { let next_msg = self.tm_receiver.try_recv(); assert!(next_msg.is_ok()); self.current_tm = Some(next_msg.unwrap().packet); - PusTmReader::new(self.current_tm.as_ref().unwrap(), 7) - .unwrap() - .0 + PusTmReader::new(self.current_tm.as_ref().unwrap(), 7).unwrap() } pub fn check_no_tm_available(&self) -> bool { @@ -1601,7 +1595,7 @@ pub mod tests { let next_msg = self.tm_receiver.try_recv(); assert!(next_msg.is_ok()); let next_msg = next_msg.unwrap(); - let tm = PusTmReader::new(next_msg.packet.as_slice(), 7).unwrap().0; + let tm = PusTmReader::new(next_msg.packet.as_slice(), 7).unwrap(); assert_eq!(PusPacket::service(&tm), 1); assert_eq!(PusPacket::subservice(&tm), subservice); assert_eq!(tm.apid(), TEST_APID); diff --git a/satrs/src/pus/scheduler.rs b/satrs/src/pus/scheduler.rs index 106411a..c02f321 100644 --- a/satrs/src/pus/scheduler.rs +++ b/satrs/src/pus/scheduler.rs @@ -292,10 +292,10 @@ pub trait PusSchedulerProvider { pool: &mut (impl PoolProvider + ?Sized), ) -> Result { let check_tc = PusTcReader::new(tc)?; - if PusPacket::service(&check_tc.0) == 11 && PusPacket::subservice(&check_tc.0) == 4 { + if PusPacket::service(&check_tc) == 11 && PusPacket::subservice(&check_tc) == 4 { return Err(ScheduleError::NestedScheduledTc); } - let req_id = RequestId::from_tc(&check_tc.0); + let req_id = RequestId::from_tc(&check_tc); match pool.add(tc) { Ok(addr) => { @@ -480,10 +480,10 @@ pub mod alloc_mod { pool: &mut (impl PoolProvider + ?Sized), ) -> Result { let check_tc = PusTcReader::new(tc)?; - if PusPacket::service(&check_tc.0) == 11 && PusPacket::subservice(&check_tc.0) == 4 { + if PusPacket::service(&check_tc) == 11 && PusPacket::subservice(&check_tc) == 4 { return Err(ScheduleError::NestedScheduledTc); } - let req_id = RequestId::from_tc(&check_tc.0); + let req_id = RequestId::from_tc(&check_tc); match pool.add(tc) { Ok(addr) => { @@ -1313,7 +1313,7 @@ mod tests { let mut read_buf: [u8; 64] = [0; 64]; pool.read(&tc_info_0.addr(), &mut read_buf).unwrap(); let check_tc = PusTcReader::new(&read_buf).expect("incorrect Pus tc raw data"); - assert_eq!(check_tc.0, base_ping_tc_simple_ctor(0, &[])); + assert_eq!(check_tc, base_ping_tc_simple_ctor(0, &[])); assert_eq!(scheduler.num_scheduled_telecommands(), 1); @@ -1335,8 +1335,8 @@ mod tests { let read_len = pool.read(&addr_vec[0], &mut read_buf).unwrap(); let check_tc = PusTcReader::new(&read_buf).expect("incorrect Pus tc raw data"); - assert_eq!(read_len, check_tc.1); - assert_eq!(check_tc.0, base_ping_tc_simple_ctor(0, &[])); + assert_eq!(read_len, check_tc.total_len()); + assert_eq!(check_tc, base_ping_tc_simple_ctor(0, &[])); } #[test] @@ -1362,8 +1362,8 @@ mod tests { let read_len = pool.read(&info.addr, &mut buf).unwrap(); let check_tc = PusTcReader::new(&buf).expect("incorrect Pus tc raw data"); - assert_eq!(read_len, check_tc.1); - assert_eq!(check_tc.0, base_ping_tc_simple_ctor(0, &[])); + assert_eq!(read_len, check_tc.total_len()); + assert_eq!(check_tc, base_ping_tc_simple_ctor(0, &[])); assert_eq!(scheduler.num_scheduled_telecommands(), 1); @@ -1387,8 +1387,8 @@ mod tests { let read_len = pool.read(&addr_vec[0], &mut buf).unwrap(); let check_tc = PusTcReader::new(&buf).expect("incorrect PUS tc raw data"); - assert_eq!(read_len, check_tc.1); - assert_eq!(check_tc.0, base_ping_tc_simple_ctor(0, &[])); + assert_eq!(read_len, check_tc.total_len()); + assert_eq!(check_tc, base_ping_tc_simple_ctor(0, &[])); } #[test] @@ -2031,7 +2031,7 @@ mod tests { assert_eq!(n, 1); let time_reader = cds::CdsTime::from_bytes_with_u16_days(&buf[2..2 + 7]).unwrap(); assert_eq!(time_reader, time_writer); - let pus_tc_reader = PusTcReader::new(&buf[9..]).unwrap().0; + let pus_tc_reader = PusTcReader::new(&buf[9..]).unwrap(); assert_eq!(pus_tc_reader, ping_tc); } diff --git a/satrs/src/pus/verification.rs b/satrs/src/pus/verification.rs index f76b6d2..aeb5c01 100644 --- a/satrs/src/pus/verification.rs +++ b/satrs/src/pus/verification.rs @@ -482,7 +482,7 @@ pub trait VerificationReportingProvider { /// the buffer passed to the API exposes by this struct will be used to serialize the source data. /// This buffer may not be re-used to serialize the whole telemetry because that would overwrite /// the source data itself. -#[derive(Clone)] +#[derive(Debug, Clone)] pub struct VerificationReportCreator { pub dest_id: u16, apid: u16, -- 2.43.0 From 240868d1ce1631cdc1dfee9762bb9f8b9b6edddb Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 6 May 2025 16:19:36 +0200 Subject: [PATCH 2/5] remove some methods --- satrs/src/pus/verification.rs | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/satrs/src/pus/verification.rs b/satrs/src/pus/verification.rs index aeb5c01..862a169 100644 --- a/satrs/src/pus/verification.rs +++ b/satrs/src/pus/verification.rs @@ -228,7 +228,7 @@ pub struct VerificationToken { } impl VerificationToken { - fn new(req_id: RequestId) -> VerificationToken { + pub fn new(req_id: RequestId) -> VerificationToken { VerificationToken { state: PhantomData, request_id: req_id, @@ -518,17 +518,11 @@ impl VerificationReportCreator { /// Initialize verification handling by passing a TC reference. This returns a token required /// to call the acceptance functions - pub fn add_tc( + pub fn read_request_id_from_tc( &mut self, pus_tc: &(impl CcsdsPacket + IsPusTelecommand), - ) -> VerificationToken { - self.add_tc_with_req_id(RequestId::new(pus_tc)) - } - - /// Same as [Self::add_tc] but pass a request ID instead of the direct telecommand. - /// This can be useful if the executing thread does not have full access to the telecommand. - pub fn add_tc_with_req_id(&mut self, req_id: RequestId) -> VerificationToken { - VerificationToken::::new(req_id) + ) -> RequestId { + RequestId::new(pus_tc) } fn success_verification_no_step<'time, 'src_data>( -- 2.43.0 From f7242de683b3a8030c3fa5e1d5528c71eebc8aa2 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 7 May 2025 09:56:43 +0200 Subject: [PATCH 3/5] start fixing examples etc. --- satrs-example/src/bin/simpleclient.rs | 2 +- satrs-example/src/pus/action.rs | 8 ++- satrs-example/src/pus/mod.rs | 4 +- satrs-mib/codegen/Cargo.toml | 1 + satrs/src/hal/std/tcp_cobs_server.rs | 12 ++-- satrs/src/pus/event_man.rs | 4 +- satrs/src/pus/scheduler_srv.rs | 6 +- satrs/src/pus/test.rs | 12 +++- satrs/src/pus/verification.rs | 91 ++++++++++++++------------- satrs/tests/pus_events.rs | 12 ++-- 10 files changed, 86 insertions(+), 66 deletions(-) diff --git a/satrs-example/src/bin/simpleclient.rs b/satrs-example/src/bin/simpleclient.rs index 64837a3..0b137c4 100644 --- a/satrs-example/src/bin/simpleclient.rs +++ b/satrs-example/src/bin/simpleclient.rs @@ -29,7 +29,7 @@ fn main() { let res = client.recv(&mut buf); match res { Ok(_len) => { - let pus_tm= PusTmReader::new(&buf, 7).expect("Parsing PUS TM failed"); + let pus_tm = PusTmReader::new(&buf, 7).expect("Parsing PUS TM failed"); if pus_tm.service() == 17 && pus_tm.subservice() == 2 { println!("Received PUS Ping Reply TM[17,2]") } else if pus_tm.service() == 1 { diff --git a/satrs-example/src/pus/action.rs b/satrs-example/src/pus/action.rs index 17a7655..76072aa 100644 --- a/satrs-example/src/pus/action.rs +++ b/satrs-example/src/pus/action.rs @@ -367,7 +367,7 @@ mod tests { if let Err(mpsc::TryRecvError::Empty) = packet { } else { let tm = packet.unwrap(); - let unexpected_tm = PusTmReader::new(&tm.packet, 7).unwrap().0; + let unexpected_tm = PusTmReader::new(&tm.packet, 7).unwrap(); panic!("unexpected TM packet {unexpected_tm:?}"); } } @@ -410,7 +410,11 @@ mod tests { pub fn add_tc(&mut self, tc: &PusTcCreator) { self.request_id = Some(verification::RequestId::new(tc).into()); - let token = self.service.service_helper.verif_reporter_mut().add_tc(tc); + let token = self + .service + .service_helper + .verif_reporter_mut() + .start_verification(tc); let accepted_token = self .service .service_helper diff --git a/satrs-example/src/pus/mod.rs b/satrs-example/src/pus/mod.rs index abc2420..3d271b8 100644 --- a/satrs-example/src/pus/mod.rs +++ b/satrs-example/src/pus/mod.rs @@ -110,7 +110,7 @@ impl PusTcDistributor { return Ok(HandlingStatus::HandledOne); } let pus_tc = pus_tc_result.unwrap(); - let init_token = self.verif_reporter.add_tc(&pus_tc); + let init_token = self.verif_reporter.start_verification(&pus_tc); self.stamp_helper.update_from_now(); let accepted_token = self .verif_reporter @@ -599,7 +599,7 @@ pub(crate) mod tests { ) -> (verification::RequestId, ActivePusRequestStd) { let sp_header = SpHeader::new_from_apid(apid); let sec_header_dummy = PusTcSecondaryHeader::new_simple(0, 0); - let init = self.verif_reporter.add_tc(&PusTcCreator::new( + let init = self.verif_reporter.start_verification(&PusTcCreator::new( sp_header, sec_header_dummy, &[], diff --git a/satrs-mib/codegen/Cargo.toml b/satrs-mib/codegen/Cargo.toml index d9c538e..6ff52dc 100644 --- a/satrs-mib/codegen/Cargo.toml +++ b/satrs-mib/codegen/Cargo.toml @@ -28,6 +28,7 @@ features = ["full"] trybuild = { version = "1", features = ["diff"] } [dev-dependencies.satrs-shared] +path = "../../satrs-shared" version = ">=0.1.3, <=0.2" [dev-dependencies.satrs-mib] diff --git a/satrs/src/hal/std/tcp_cobs_server.rs b/satrs/src/hal/std/tcp_cobs_server.rs index a545016..c4758b6 100644 --- a/satrs/src/hal/std/tcp_cobs_server.rs +++ b/satrs/src/hal/std/tcp_cobs_server.rs @@ -150,9 +150,9 @@ impl< /// /// * `cfg` - Configuration of the server. /// * `tm_source` - Generic TM source used by the server to pull telemetry packets which are - /// then sent back to the client. + /// then sent back to the client. /// * `tc_receiver` - Any received telecommands which were decoded successfully will be - /// forwarded to this TC receiver. + /// forwarded to this TC receiver. pub fn new( cfg: ServerConfig, tm_source: TmSource, @@ -377,13 +377,13 @@ mod tests { current_idx += 1; let mut dec_report = cobs::decode_in_place_report(&mut read_buf[current_idx..]) .expect("COBS decoding failed"); - assert_eq!(dec_report.dst_used, 5); + assert_eq!(dec_report.frame_size(), 5); // Skip first sentinel byte. assert_eq!( &read_buf[current_idx..current_idx + INVERTED_PACKET.len()], &INVERTED_PACKET ); - current_idx += dec_report.src_used; + current_idx += dec_report.parsed_size(); // End sentinel. assert_eq!(read_buf[current_idx], 0, "invalid sentinel end byte"); current_idx += 1; @@ -393,13 +393,13 @@ mod tests { current_idx += 1; dec_report = cobs::decode_in_place_report(&mut read_buf[current_idx..]) .expect("COBS decoding failed"); - assert_eq!(dec_report.dst_used, 5); + assert_eq!(dec_report.frame_size(), 5); // Skip first sentinel byte. assert_eq!( &read_buf[current_idx..current_idx + SIMPLE_PACKET.len()], &SIMPLE_PACKET ); - current_idx += dec_report.src_used; + current_idx += dec_report.parsed_size(); // End sentinel. assert_eq!(read_buf[current_idx], 0); break; diff --git a/satrs/src/pus/event_man.rs b/satrs/src/pus/event_man.rs index 8de8f6f..5eddbe4 100644 --- a/satrs/src/pus/event_man.rs +++ b/satrs/src/pus/event_man.rs @@ -409,7 +409,7 @@ mod tests { assert!(res.event_was_enabled); assert!(res.params_were_propagated); let event_tm = event_rx.try_recv().expect("no event received"); - let (tm, _) = PusTmReader::new(&event_tm.packet, 7).expect("reading TM failed"); + let tm = PusTmReader::new(&event_tm.packet, 7).expect("reading TM failed"); assert_eq!(tm.service(), 5); assert_eq!(tm.subservice(), Subservice::TmInfoReport as u8); assert_eq!(tm.user_data().len(), 4 + param_data.len()); @@ -437,7 +437,7 @@ mod tests { assert!(res.event_was_enabled); assert!(res.params_were_propagated); let event_tm = event_rx.try_recv().expect("no event received"); - let (tm, _) = PusTmReader::new(&event_tm.packet, 7).expect("reading TM failed"); + let tm = PusTmReader::new(&event_tm.packet, 7).expect("reading TM failed"); assert_eq!(tm.service(), 5); assert_eq!(tm.subservice(), Subservice::TmInfoReport as u8); assert_eq!(tm.user_data().len(), 4 + param_data.len()); diff --git a/satrs/src/pus/scheduler_srv.rs b/satrs/src/pus/scheduler_srv.rs index 922ab97..46cfcb6 100644 --- a/satrs/src/pus/scheduler_srv.rs +++ b/satrs/src/pus/scheduler_srv.rs @@ -310,7 +310,11 @@ mod tests { impl PusTestHarness for Pus11HandlerWithStoreTester { fn init_verification(&mut self, tc: &PusTcCreator) -> VerificationToken { - let init_token = self.handler.service_helper.verif_reporter_mut().add_tc(tc); + let init_token = self + .handler + .service_helper + .verif_reporter_mut() + .start_verification(tc); self.handler .service_helper .verif_reporter() diff --git a/satrs/src/pus/test.rs b/satrs/src/pus/test.rs index 8b00453..0977662 100644 --- a/satrs/src/pus/test.rs +++ b/satrs/src/pus/test.rs @@ -181,7 +181,11 @@ mod tests { impl PusTestHarness for Pus17HandlerWithStoreTester { fn init_verification(&mut self, tc: &PusTcCreator) -> VerificationToken { - let init_token = self.handler.service_helper.verif_reporter_mut().add_tc(tc); + let init_token = self + .handler + .service_helper + .verif_reporter_mut() + .start_verification(tc); self.handler .service_helper .verif_reporter() @@ -239,7 +243,11 @@ mod tests { impl PusTestHarness for Pus17HandlerWithVecTester { fn init_verification(&mut self, tc: &PusTcCreator) -> VerificationToken { - let init_token = self.handler.service_helper.verif_reporter_mut().add_tc(tc); + let init_token = self + .handler + .service_helper + .verif_reporter_mut() + .start_verification(tc); self.handler .service_helper .verif_reporter() diff --git a/satrs/src/pus/verification.rs b/satrs/src/pus/verification.rs index 862a169..ca71982 100644 --- a/satrs/src/pus/verification.rs +++ b/satrs/src/pus/verification.rs @@ -408,14 +408,10 @@ pub trait VerificationReportingProvider { fn set_apid(&mut self, apid: Apid); fn apid(&self) -> Apid; - fn add_tc( - &mut self, + fn start_verification( + &self, pus_tc: &(impl CcsdsPacket + IsPusTelecommand), - ) -> VerificationToken { - self.add_tc_with_req_id(RequestId::new(pus_tc)) - } - - fn add_tc_with_req_id(&mut self, req_id: RequestId) -> VerificationToken; + ) -> VerificationToken; fn acceptance_success( &self, @@ -518,10 +514,7 @@ impl VerificationReportCreator { /// Initialize verification handling by passing a TC reference. This returns a token required /// to call the acceptance functions - pub fn read_request_id_from_tc( - &mut self, - pus_tc: &(impl CcsdsPacket + IsPusTelecommand), - ) -> RequestId { + pub fn read_request_id_from_tc(pus_tc: &(impl CcsdsPacket + IsPusTelecommand)) -> RequestId { RequestId::new(pus_tc) } @@ -956,12 +949,19 @@ pub mod alloc_mod { } } + pub fn start_verification( + &self, + pus_tc: &(impl CcsdsPacket + IsPusTelecommand), + ) -> VerificationToken { + VerificationToken::::new( + VerificationReportCreator::read_request_id_from_tc(pus_tc), + ) + } + delegate!( to self.reporter_creator { pub fn set_apid(&mut self, apid: u16) -> bool; pub fn apid(&self) -> u16; - pub fn add_tc(&mut self, pus_tc: &(impl CcsdsPacket + IsPusTelecommand)) -> VerificationToken; - pub fn add_tc_with_req_id(&mut self, req_id: RequestId) -> VerificationToken; pub fn dest_id(&self) -> u16; pub fn set_dest_id(&mut self, dest_id: u16); } @@ -979,11 +979,16 @@ pub mod alloc_mod { to self.reporter_creator { fn set_apid(&mut self, apid: Apid); fn apid(&self) -> Apid; - fn add_tc(&mut self, pus_tc: &(impl CcsdsPacket + IsPusTelecommand)) -> VerificationToken; - fn add_tc_with_req_id(&mut self, req_id: RequestId) -> VerificationToken; } ); + fn start_verification( + &self, + pus_tc: &(impl CcsdsPacket + IsPusTelecommand), + ) -> VerificationToken { + VerificationToken::::new(RequestId::new(pus_tc)) + } + fn owner_id(&self) -> ComponentId { self.owner_id } @@ -1345,22 +1350,19 @@ pub mod test_util { } impl VerificationReportingProvider for TestVerificationReporter { + fn start_verification( + &self, + pus_tc: &(impl CcsdsPacket + IsPusTelecommand), + ) -> VerificationToken { + VerificationToken::::new(RequestId::new(pus_tc)) + } + fn set_apid(&mut self, _apid: Apid) {} fn apid(&self) -> Apid { 0 } - fn add_tc_with_req_id(&mut self, req_id: RequestId) -> VerificationToken { - self.report_queue - .borrow_mut() - .push_back((req_id, VerificationReportInfo::Added)); - VerificationToken { - state: PhantomData, - request_id: req_id, - } - } - fn acceptance_success( &self, _sender: &(impl EcssTmSender + ?Sized), @@ -1817,15 +1819,16 @@ pub mod tests { } } + pub fn init_verification(&self) -> VerificationToken { + let tc_reader = PusTcReader::new(&self.tc).unwrap(); + self.reporter.start_verification(&tc_reader) + } + #[allow(dead_code)] fn set_dest_id(&mut self, dest_id: u16) { self.reporter.set_dest_id(dest_id); } - fn init(&mut self) -> VerificationToken { - self.reporter.add_tc(&PusTcReader::new(&self.tc).unwrap().0) - } - fn acceptance_success( &self, token: VerificationToken, @@ -2075,8 +2078,8 @@ pub mod tests { #[test] fn test_basic_acceptance_success() { - let mut testbench = VerificationReporterTestbench::new(0, create_generic_ping(), 16); - let token = testbench.init(); + let testbench = VerificationReporterTestbench::new(0, create_generic_ping(), 16); + let token = testbench.init_verification(); testbench .acceptance_success(token, &EMPTY_STAMP) .expect("sending acceptance success failed"); @@ -2086,7 +2089,7 @@ pub mod tests { #[test] fn test_basic_acceptance_failure() { let mut testbench = VerificationReporterTestbench::new(0, create_generic_ping(), 16); - let init_token = testbench.init(); + let init_token = testbench.init_verification(); let timestamp = [1, 2, 3, 4, 5, 6, 7]; let fail_code = EcssEnumU16::new(2); let fail_params = FailParams::new_no_fail_data(timestamp.as_slice(), &fail_code); @@ -2099,7 +2102,7 @@ pub mod tests { #[test] fn test_basic_acceptance_failure_with_helper() { let mut testbench = VerificationReporterTestbench::new(0, create_generic_ping(), 16); - let init_token = testbench.init(); + let init_token = testbench.init_verification(); let timestamp = [1, 2, 3, 4, 5, 6, 7]; let fail_code = EcssEnumU16::new(2); let fail_params = FailParams::new_no_fail_data(timestamp.as_slice(), &fail_code); @@ -2112,7 +2115,7 @@ pub mod tests { #[test] fn test_acceptance_fail_data_too_large() { let mut testbench = VerificationReporterTestbench::new(0, create_generic_ping(), 8); - let init_token = testbench.init(); + let init_token = testbench.init_verification(); let stamp_buf = [1, 2, 3, 4, 5, 6, 7]; let fail_code = EcssEnumU16::new(2); let fail_data: [u8; 16] = [0; 16]; @@ -2149,7 +2152,7 @@ pub mod tests { let mut fail_data_raw = [0; 4]; fail_data.write_to_be_bytes(&mut fail_data_raw).unwrap(); let fail_params = FailParams::new(&EMPTY_STAMP, &fail_code, fail_data_raw.as_slice()); - let init_token = testbench.init(); + let init_token = testbench.init_verification(); testbench .acceptance_failure(init_token, fail_params) .expect("sending acceptance failure failed"); @@ -2167,7 +2170,7 @@ pub mod tests { #[test] fn test_start_failure() { let mut testbench = VerificationReporterTestbench::new(0, create_generic_ping(), 16); - let init_token = testbench.init(); + let init_token = testbench.init_verification(); let fail_code = EcssEnumU8::new(22); let fail_data: i32 = -12; let mut fail_data_raw = [0; 4]; @@ -2186,7 +2189,7 @@ pub mod tests { #[test] fn test_start_failure_with_helper() { let mut testbench = VerificationReporterTestbench::new(0, create_generic_ping(), 16); - let token = testbench.init(); + let token = testbench.init_verification(); let fail_code = EcssEnumU8::new(22); let fail_data: i32 = -12; let mut fail_data_raw = [0; 4]; @@ -2205,7 +2208,7 @@ pub mod tests { #[test] fn test_steps_success() { let mut testbench = VerificationReporterTestbench::new(0, create_generic_ping(), 16); - let token = testbench.init(); + let token = testbench.init_verification(); let accepted_token = testbench .acceptance_success(token, &EMPTY_STAMP) .expect("acceptance failed"); @@ -2228,7 +2231,7 @@ pub mod tests { #[test] fn test_step_failure() { let mut testbench = VerificationReporterTestbench::new(0, create_generic_ping(), 16); - let token = testbench.init(); + let token = testbench.init_verification(); let fail_code = EcssEnumU32::new(0x1020); let fail_data: f32 = -22.3232; let mut fail_data_raw = [0; 4]; @@ -2262,7 +2265,7 @@ pub mod tests { #[test] fn test_completion_failure() { let mut testbench = VerificationReporterTestbench::new(0, create_generic_ping(), 16); - let token = testbench.init(); + let token = testbench.init_verification(); let fail_code = EcssEnumU32::new(0x1020); let fail_params = FailParams::new_no_fail_data(&EMPTY_STAMP, &fail_code); @@ -2285,7 +2288,7 @@ pub mod tests { fn test_complete_success_sequence() { let mut testbench = VerificationReporterTestbench::new(TEST_COMPONENT_ID_0.id(), create_generic_ping(), 16); - let token = testbench.init(); + let token = testbench.init_verification(); let accepted_token = testbench .acceptance_success(token, &EMPTY_STAMP) .expect("Sending acceptance success failed"); @@ -2307,7 +2310,7 @@ pub mod tests { create_generic_ping(), SequenceCounterHook::default(), ); - let token = testbench.init(); + let token = testbench.init_verification(); let accepted_token = testbench .acceptance_success(token, &EMPTY_STAMP) .expect("Sending acceptance success failed"); @@ -2325,7 +2328,7 @@ pub mod tests { #[test] fn test_completion_failure_helper_string_param() { let mut testbench = VerificationReporterTestbench::new(0, create_generic_ping(), 32); - let token = testbench.init(); + let token = testbench.init_verification(); let accepted_token = testbench .acceptance_success(token, &EMPTY_STAMP) .expect("Sending acceptance success failed"); @@ -2352,7 +2355,7 @@ pub mod tests { #[test] fn test_step_failure_helper_string_param() { let mut testbench = VerificationReporterTestbench::new(0, create_generic_ping(), 32); - let token = testbench.init(); + let token = testbench.init_verification(); let accepted_token = testbench .acceptance_success(token, &EMPTY_STAMP) .expect("Sending acceptance success failed"); diff --git a/satrs/tests/pus_events.rs b/satrs/tests/pus_events.rs index 81c7b70..cda2225 100644 --- a/satrs/tests/pus_events.rs +++ b/satrs/tests/pus_events.rs @@ -107,9 +107,9 @@ fn test_threaded_usage() { Ok(event_tm) => { let tm = PusTmReader::new(event_tm.packet.as_slice(), 7) .expect("Deserializing TM failed"); - assert_eq!(tm.0.service(), 5); - assert_eq!(tm.0.subservice(), 1); - let src_data = tm.0.source_data(); + assert_eq!(tm.service(), 5); + assert_eq!(tm.subservice(), 1); + let src_data = tm.source_data(); assert!(!src_data.is_empty()); assert_eq!(src_data.len(), 4); let event = @@ -137,9 +137,9 @@ fn test_threaded_usage() { Ok(event_tm) => { let tm = PusTmReader::new(event_tm.packet.as_slice(), 7) .expect("Deserializing TM failed"); - assert_eq!(tm.0.service(), 5); - assert_eq!(tm.0.subservice(), 2); - let src_data = tm.0.source_data(); + assert_eq!(tm.service(), 5); + assert_eq!(tm.subservice(), 2); + let src_data = tm.source_data(); assert!(!src_data.is_empty()); assert_eq!(src_data.len(), 12); let event = -- 2.43.0 From d96d9b0afff4e956ac97b17c461ae1212d047f05 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 7 May 2025 13:23:43 +0200 Subject: [PATCH 4/5] some more fixes, git updates --- satrs-example/src/events.rs | 4 +--- satrs-example/src/pus/mod.rs | 2 +- satrs/Cargo.toml | 4 ++-- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/satrs-example/src/events.rs b/satrs-example/src/events.rs index f51b080..d181bb4 100644 --- a/satrs-example/src/events.rs +++ b/satrs-example/src/events.rs @@ -281,9 +281,7 @@ mod tests { .try_recv() .expect("failed to receive TM packet"); assert_eq!(tm_packet.sender_id, PUS_EVENT_MANAGEMENT.id()); - let tm_reader = PusTmReader::new(&tm_packet.packet, 7) - .expect("failed to create TM reader") - .0; + let tm_reader = PusTmReader::new(&tm_packet.packet, 7).expect("failed to create TM reader"); assert_eq!(tm_reader.apid(), TEST_CREATOR_ID.apid); assert_eq!(tm_reader.user_data().len(), 4); let event_read_back = EventU32::from_be_bytes(tm_reader.user_data().try_into().unwrap()); diff --git a/satrs-example/src/pus/mod.rs b/satrs-example/src/pus/mod.rs index 3d271b8..0f40081 100644 --- a/satrs-example/src/pus/mod.rs +++ b/satrs-example/src/pus/mod.rs @@ -706,7 +706,7 @@ pub(crate) mod tests { } pub fn add_tc(&mut self, tc: &PusTcCreator) -> VerificationToken { - let token = self.verif_reporter.add_tc(tc); + let token = self.verif_reporter.start_verification(tc); self.current_request_id = Some(verification::RequestId::new(tc)); self.current_packet = Some(tc.to_vec().unwrap()); self.verif_reporter diff --git a/satrs/Cargo.toml b/satrs/Cargo.toml index 2bf5b4b..2ba5a55 100644 --- a/satrs/Cargo.toml +++ b/satrs/Cargo.toml @@ -18,8 +18,8 @@ delegate = ">0.7, <=0.13" paste = "1" derive-new = ">=0.6, <=0.7" num_enum = { version = ">0.5, <=0.7", default-features = false } -spacepackets = { version = "0.13", default-features = false, path = "../../spacepackets" } -cobs = { version = "0.4", default-features = false, path = "../../cobs.rs" } +spacepackets = { git = "https://egit.irs.uni-stuttgart.de/rust/spacepackets.git", branch = "msp430-tweak", default-features = false } +cobs = { version = "0.4", default-features = false, git = "https://github.com/jamesmunns/cobs.rs.git", branch = "decoding-improvements" } thiserror = { version = "2", default-features = false } hashbrown = { version = ">=0.14, <=0.15", optional = true } -- 2.43.0 From e2b49d4573f0761c05a3b89b3f86d86f92a42ee5 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 7 May 2025 13:25:09 +0200 Subject: [PATCH 5/5] dependency hell --- satrs-shared/Cargo.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/satrs-shared/Cargo.toml b/satrs-shared/Cargo.toml index 4ff2b0b..d75f79f 100644 --- a/satrs-shared/Cargo.toml +++ b/satrs-shared/Cargo.toml @@ -23,7 +23,8 @@ optional = true [dependencies.spacepackets] version = ">0.9, <=0.13" -path = "../../spacepackets" +git = "https://egit.irs.uni-stuttgart.de/rust/spacepackets.git" +branch = "msp430-tweak" default-features = false [features] -- 2.43.0