Skip to content

Commit 02aa825

Browse files
committed
Merge pull request 'Larger update' (#252) from larger-update into main
Reviewed-on: https://egit.irs.uni-stuttgart.de/rust/sat-rs/pulls/252
2 parents 06e713a + bc9e0e4 commit 02aa825

36 files changed

+475
-453
lines changed

satrs-example/src/acs/mgm.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,7 @@ mod tests {
484484
sync::{mpsc, Arc},
485485
};
486486

487+
use arbitrary_int::u21;
487488
use satrs::{
488489
mode::{ModeReply, ModeRequest},
489490
mode_tree::ModeParent,
@@ -574,7 +575,7 @@ mod tests {
574575
let (request_tx, request_rx) = mpsc::sync_channel(5);
575576
let (reply_tx_to_pus, reply_rx_to_pus) = mpsc::sync_channel(5);
576577
let (reply_tx_to_parent, reply_rx_to_parent) = mpsc::sync_channel(5);
577-
let id = UniqueApidTargetId::new(Apid::Acs.raw_value(), 1);
578+
let id = UniqueApidTargetId::new(Apid::Acs.raw_value(), u21::new(1));
578579
let mode_node = ModeRequestHandlerMpscBounded::new(id.into(), request_rx);
579580
let (composite_request_tx, composite_request_rx) = mpsc::channel();
580581
let (hk_reply_tx, hk_reply_rx) = mpsc::sync_channel(10);

satrs-example/src/eps/pcdu.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,7 @@ impl<ComInterface: SerialInterface> ModeChild for PcduHandler<ComInterface> {
506506
mod tests {
507507
use std::sync::mpsc;
508508

509+
use arbitrary_int::u21;
509510
use satrs::{
510511
mode::ModeRequest, power::SwitchStateBinary, request::GenericMessage, tmtc::PacketAsVec,
511512
};
@@ -572,7 +573,7 @@ mod tests {
572573
let (switch_request_tx, switch_reqest_rx) = mpsc::channel();
573574
let shared_switch_map = Arc::new(Mutex::new(SwitchSet::default()));
574575
let mut handler = PcduHandler::new(
575-
UniqueApidTargetId::new(Apid::Eps.raw_value(), 0),
576+
UniqueApidTargetId::new(Apid::Eps.raw_value(), u21::new(0)),
576577
"TEST_PCDU",
577578
mode_node,
578579
composite_request_rx,

satrs-example/src/events.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ impl<TmSender: EcssTmSender> EventHandler<TmSender> {
218218

219219
#[cfg(test)]
220220
mod tests {
221+
use arbitrary_int::u21;
221222
use satrs::{
222223
events_legacy::EventU32,
223224
pus::verification::VerificationReporterConfig,
@@ -227,7 +228,7 @@ mod tests {
227228

228229
use super::*;
229230

230-
const TEST_CREATOR_ID: UniqueApidTargetId = UniqueApidTargetId::new(u11::new(1), 2);
231+
const TEST_CREATOR_ID: UniqueApidTargetId = UniqueApidTargetId::new(u11::new(1), u21::new(2));
231232
const TEST_EVENT: EventU32 = EventU32::new(satrs::events_legacy::Severity::Info, 1, 1);
232233

233234
pub struct EventManagementTestbench {

satrs-example/src/hk.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use arbitrary_int::traits::Integer as _;
12
use derive_new::new;
23
use satrs::hk::UniqueId;
34
use satrs::request::UniqueApidTargetId;
@@ -29,7 +30,7 @@ impl HkUniqueId {
2930
expected: 8,
3031
});
3132
}
32-
buf[0..4].copy_from_slice(&self.target_id.unique_id.to_be_bytes());
33+
buf[0..4].copy_from_slice(&self.target_id.unique_id.as_u32().to_be_bytes());
3334
buf[4..8].copy_from_slice(&self.set_id.to_be_bytes());
3435

3536
Ok(8)
@@ -55,7 +56,7 @@ impl PusHkHelper {
5556
) -> Result<PusTmCreator<'a, 'b>, ByteConversionError> {
5657
let sec_header =
5758
PusTmSecondaryHeader::new(3, hk::Subservice::TmHkPacket as u8, 0, 0, timestamp);
58-
buf[0..4].copy_from_slice(&self.component_id.unique_id.to_be_bytes());
59+
buf[0..4].copy_from_slice(&self.component_id.unique_id.as_u32().to_be_bytes());
5960
buf[4..8].copy_from_slice(&set_id.to_be_bytes());
6061
let (_, second_half) = buf.split_at_mut(8);
6162
let hk_data_len = hk_data_writer(second_half)?;

satrs-example/src/ids.rs

Lines changed: 37 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ pub enum Apid {
1414

1515
pub mod acs {
1616

17-
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
17+
#[derive(Debug, PartialEq, Eq)]
18+
#[bitbybit::bitenum(u21, exhaustive = false)]
1819
pub enum Id {
1920
Subsystem = 1,
2021
Assembly = 2,
@@ -23,30 +24,32 @@ pub mod acs {
2324
}
2425

2526
pub const SUBSYSTEM: super::UniqueApidTargetId =
26-
super::UniqueApidTargetId::new(super::Apid::Acs.raw_value(), Id::Subsystem as u32);
27+
super::UniqueApidTargetId::new(super::Apid::Acs.raw_value(), Id::Subsystem.raw_value());
2728
pub const ASSEMBLY: super::UniqueApidTargetId =
28-
super::UniqueApidTargetId::new(super::Apid::Acs.raw_value(), Id::Assembly as u32);
29+
super::UniqueApidTargetId::new(super::Apid::Acs.raw_value(), Id::Assembly.raw_value());
2930
pub const MGM0: super::UniqueApidTargetId =
30-
super::UniqueApidTargetId::new(super::Apid::Acs.raw_value(), Id::Mgm0 as u32);
31+
super::UniqueApidTargetId::new(super::Apid::Acs.raw_value(), Id::Mgm0.raw_value());
3132
pub const MGM1: super::UniqueApidTargetId =
32-
super::UniqueApidTargetId::new(super::Apid::Acs.raw_value(), Id::Mgm1 as u32);
33+
super::UniqueApidTargetId::new(super::Apid::Acs.raw_value(), Id::Mgm1.raw_value());
3334
}
3435

3536
pub mod eps {
36-
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
37+
#[derive(Debug, PartialEq, Eq)]
38+
#[bitbybit::bitenum(u21, exhaustive = false)]
3739
pub enum Id {
3840
Pcdu = 0,
3941
Subsystem = 1,
4042
}
4143

4244
pub const PCDU: super::UniqueApidTargetId =
43-
super::UniqueApidTargetId::new(super::Apid::Eps.raw_value(), Id::Pcdu as u32);
45+
super::UniqueApidTargetId::new(super::Apid::Eps.raw_value(), Id::Pcdu.raw_value());
4446
pub const SUBSYSTEM: super::UniqueApidTargetId =
45-
super::UniqueApidTargetId::new(super::Apid::Eps.raw_value(), Id::Subsystem as u32);
47+
super::UniqueApidTargetId::new(super::Apid::Eps.raw_value(), Id::Subsystem.raw_value());
4648
}
4749

4850
pub mod generic_pus {
49-
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
51+
#[derive(Debug, PartialEq, Eq)]
52+
#[bitbybit::bitenum(u21, exhaustive = false)]
5053
pub enum Id {
5154
PusEventManagement = 0,
5255
PusRouting = 1,
@@ -58,39 +61,49 @@ pub mod generic_pus {
5861

5962
pub const PUS_EVENT_MANAGEMENT: super::UniqueApidTargetId = super::UniqueApidTargetId::new(
6063
super::Apid::GenericPus.raw_value(),
61-
Id::PusEventManagement as u32,
64+
Id::PusEventManagement.raw_value(),
65+
);
66+
pub const PUS_ROUTING: super::UniqueApidTargetId = super::UniqueApidTargetId::new(
67+
super::Apid::GenericPus.raw_value(),
68+
Id::PusRouting.raw_value(),
69+
);
70+
pub const PUS_TEST: super::UniqueApidTargetId = super::UniqueApidTargetId::new(
71+
super::Apid::GenericPus.raw_value(),
72+
Id::PusTest.raw_value(),
73+
);
74+
pub const PUS_ACTION: super::UniqueApidTargetId = super::UniqueApidTargetId::new(
75+
super::Apid::GenericPus.raw_value(),
76+
Id::PusAction.raw_value(),
77+
);
78+
pub const PUS_MODE: super::UniqueApidTargetId = super::UniqueApidTargetId::new(
79+
super::Apid::GenericPus.raw_value(),
80+
Id::PusMode.raw_value(),
6281
);
63-
pub const PUS_ROUTING: super::UniqueApidTargetId =
64-
super::UniqueApidTargetId::new(super::Apid::GenericPus.raw_value(), Id::PusRouting as u32);
65-
pub const PUS_TEST: super::UniqueApidTargetId =
66-
super::UniqueApidTargetId::new(super::Apid::GenericPus.raw_value(), Id::PusTest as u32);
67-
pub const PUS_ACTION: super::UniqueApidTargetId =
68-
super::UniqueApidTargetId::new(super::Apid::GenericPus.raw_value(), Id::PusAction as u32);
69-
pub const PUS_MODE: super::UniqueApidTargetId =
70-
super::UniqueApidTargetId::new(super::Apid::GenericPus.raw_value(), Id::PusMode as u32);
7182
pub const PUS_HK: super::UniqueApidTargetId =
72-
super::UniqueApidTargetId::new(super::Apid::GenericPus.raw_value(), Id::PusHk as u32);
83+
super::UniqueApidTargetId::new(super::Apid::GenericPus.raw_value(), Id::PusHk.raw_value());
7384
}
7485

7586
pub mod sched {
76-
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
87+
#[derive(Debug, PartialEq, Eq)]
88+
#[bitbybit::bitenum(u21, exhaustive = false)]
7789
pub enum Id {
7890
PusSched = 0,
7991
}
8092

8193
pub const PUS_SCHED: super::UniqueApidTargetId =
82-
super::UniqueApidTargetId::new(super::Apid::Sched.raw_value(), Id::PusSched as u32);
94+
super::UniqueApidTargetId::new(super::Apid::Sched.raw_value(), Id::PusSched.raw_value());
8395
}
8496

8597
pub mod tmtc {
86-
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
98+
#[derive(Debug, PartialEq, Eq)]
99+
#[bitbybit::bitenum(u21, exhaustive = false)]
87100
pub enum Id {
88101
UdpServer = 0,
89102
TcpServer = 1,
90103
}
91104

92105
pub const UDP_SERVER: super::UniqueApidTargetId =
93-
super::UniqueApidTargetId::new(super::Apid::Tmtc.raw_value(), Id::UdpServer as u32);
106+
super::UniqueApidTargetId::new(super::Apid::Tmtc.raw_value(), Id::UdpServer.raw_value());
94107
pub const TCP_SERVER: super::UniqueApidTargetId =
95-
super::UniqueApidTargetId::new(super::Apid::Tmtc.raw_value(), Id::TcpServer as u32);
108+
super::UniqueApidTargetId::new(super::Apid::Tmtc.raw_value(), Id::TcpServer.raw_value());
96109
}

satrs-example/src/interface/tcp.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::{
55
};
66

77
use log::{info, warn};
8-
use satrs::tmtc::StoreAndSendError;
8+
use satrs::hal::std::tcp_spacepackets_server::CcsdsPacketParser;
99
use satrs::{
1010
encoding::ccsds::{SpValidity, SpacePacketValidator},
1111
hal::std::tcp_server::{HandledConnectionHandler, ServerConfig, TcpSpacepacketsServer},
@@ -103,16 +103,14 @@ impl PacketSource for SyncTcpTmSource {
103103
}
104104
}
105105

106-
pub type TcpServer<ReceivesTc, SendError> = TcpSpacepacketsServer<
106+
pub type TcpServer<ReceivesTc> = TcpSpacepacketsServer<
107107
SyncTcpTmSource,
108108
ReceivesTc,
109109
SimplePacketValidator,
110110
ConnectionFinishedHandler,
111-
(),
112-
SendError,
113111
>;
114112

115-
pub struct TcpTask(pub TcpServer<TmTcSender, StoreAndSendError>);
113+
pub struct TcpTask(pub TcpServer<TmTcSender>);
116114

117115
impl TcpTask {
118116
pub fn new(
@@ -124,8 +122,7 @@ impl TcpTask {
124122
Ok(Self(TcpSpacepacketsServer::new(
125123
cfg,
126124
tm_source,
127-
tc_sender,
128-
SimplePacketValidator { valid_ids },
125+
CcsdsPacketParser::new(cfg.id, 2048, tc_sender, SimplePacketValidator { valid_ids }),
129126
ConnectionFinishedHandler::default(),
130127
None,
131128
)?))

satrs-example/src/interface/udp.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ use std::sync::mpsc;
55
use log::{info, warn};
66
use satrs::hal::std::udp_server::{ReceiveResult, UdpTcServer};
77
use satrs::pus::HandlingStatus;
8-
use satrs::tmtc::{PacketAsVec, StoreAndSendError};
8+
use satrs::queue::GenericSendError;
9+
use satrs::tmtc::PacketAsVec;
910

1011
use satrs::pool::{PoolProviderWithGuards, SharedStaticMemoryPool};
1112
use satrs::tmtc::PacketInPool;
@@ -68,7 +69,7 @@ impl UdpTmHandler for DynamicUdpTmHandler {
6869
}
6970

7071
pub struct UdpTmtcServer<TmHandler: UdpTmHandler> {
71-
pub udp_tc_server: UdpTcServer<TmTcSender, StoreAndSendError>,
72+
pub udp_tc_server: UdpTcServer<TmTcSender, GenericSendError>,
7273
pub tm_handler: TmHandler,
7374
}
7475

satrs-example/src/pus/action.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,7 @@ impl TargetedPusService for ActionServiceWrapper {
270270

271271
#[cfg(test)]
272272
mod tests {
273+
use arbitrary_int::traits::Integer as _;
273274
use satrs::pus::test_util::{
274275
TEST_APID, TEST_COMPONENT_ID_0, TEST_COMPONENT_ID_1, TEST_UNIQUE_ID_0, TEST_UNIQUE_ID_1,
275276
};
@@ -452,7 +453,7 @@ mod tests {
452453
let sec_header = PusTcSecondaryHeader::new_simple(8, 128);
453454
let action_id = 5_u32;
454455
let mut app_data: [u8; 8] = [0; 8];
455-
app_data[0..4].copy_from_slice(&TEST_UNIQUE_ID_1.to_be_bytes());
456+
app_data[0..4].copy_from_slice(&TEST_UNIQUE_ID_1.as_u32().to_be_bytes());
456457
app_data[4..8].copy_from_slice(&action_id.to_be_bytes());
457458
let pus8_packet =
458459
PusTcCreator::new(sp_header, sec_header, &app_data, CreatorConfig::default());
@@ -521,7 +522,7 @@ mod tests {
521522
let action_id = 5_u32;
522523
let mut app_data: [u8; 8] = [0; 8];
523524
// Invalid ID, routing should fail.
524-
app_data[0..4].copy_from_slice(&TEST_UNIQUE_ID_0.to_be_bytes());
525+
app_data[0..4].copy_from_slice(&TEST_UNIQUE_ID_0.as_u32().to_be_bytes());
525526
app_data[4..8].copy_from_slice(&action_id.to_be_bytes());
526527
let pus8_packet = PusTcCreator::new(
527528
SpHeader::new_from_apid(TEST_APID),
@@ -557,7 +558,7 @@ mod tests {
557558
let action_id = 5_u32;
558559
let mut app_data: [u8; 16] = [0; 16];
559560
// Invalid ID, routing should fail.
560-
app_data[0..4].copy_from_slice(&TEST_UNIQUE_ID_0.to_be_bytes());
561+
app_data[0..4].copy_from_slice(&TEST_UNIQUE_ID_0.as_u32().to_be_bytes());
561562
app_data[4..8].copy_from_slice(&action_id.to_be_bytes());
562563
for i in 0..8 {
563564
app_data[i + 8] = i as u8;
@@ -696,7 +697,7 @@ mod tests {
696697
ReplyHandlerTestbench::new(TEST_COMPONENT_ID_0.id(), ActionReplyHandler::default());
697698
let action_reply = ActionReplyPus::new(5_u32, ActionReplyVariant::Completed);
698699
let unrequested_reply =
699-
GenericMessage::new(MessageMetadata::new(10_u32, 15_u64), action_reply);
700+
GenericMessage::new(MessageMetadata::new(10_u32, 15_u32), action_reply);
700701
// Right now this function does not do a lot. We simply check that it does not panic or do
701702
// weird stuff.
702703
let result = testbench.handle_unrequested_reply(&unrequested_reply);

satrs-example/src/pus/hk.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ impl TargetedPusService for HkServiceWrapper {
303303
#[cfg(test)]
304304
mod tests {
305305
use arbitrary_int::traits::Integer as _;
306-
use arbitrary_int::u14;
306+
use arbitrary_int::{u14, u21};
307307
use satrs::pus::test_util::{
308308
TEST_COMPONENT_ID_0, TEST_COMPONENT_ID_1, TEST_UNIQUE_ID_0, TEST_UNIQUE_ID_1,
309309
};
@@ -335,7 +335,7 @@ mod tests {
335335
let target_id = TEST_UNIQUE_ID_0;
336336
let unique_id = 5_u32;
337337
let mut app_data: [u8; 8] = [0; 8];
338-
app_data[0..4].copy_from_slice(&target_id.to_be_bytes());
338+
app_data[0..4].copy_from_slice(&target_id.as_u32().to_be_bytes());
339339
app_data[4..8].copy_from_slice(&unique_id.to_be_bytes());
340340

341341
let hk_req = PusTcCreator::new_simple(
@@ -365,7 +365,7 @@ mod tests {
365365
let target_id = TEST_UNIQUE_ID_0;
366366
let unique_id = 5_u32;
367367
let mut app_data: [u8; 8] = [0; 8];
368-
app_data[0..4].copy_from_slice(&target_id.to_be_bytes());
368+
app_data[0..4].copy_from_slice(&target_id.as_u32().to_be_bytes());
369369
app_data[4..8].copy_from_slice(&unique_id.to_be_bytes());
370370
let mut generic_check = |tc: &PusTcCreator| {
371371
let accepted_token = hk_bench.add_tc(tc);
@@ -404,7 +404,7 @@ mod tests {
404404
let target_id = TEST_UNIQUE_ID_0;
405405
let unique_id = 5_u32;
406406
let mut app_data: [u8; 8] = [0; 8];
407-
app_data[0..4].copy_from_slice(&target_id.to_be_bytes());
407+
app_data[0..4].copy_from_slice(&target_id.as_u32().to_be_bytes());
408408
app_data[4..8].copy_from_slice(&unique_id.to_be_bytes());
409409
let mut generic_check = |tc: &PusTcCreator| {
410410
let accepted_token = hk_bench.add_tc(tc);
@@ -444,7 +444,7 @@ mod tests {
444444
let unique_id = 5_u32;
445445
let mut app_data: [u8; 12] = [0; 12];
446446
let collection_interval_factor = 5_u32;
447-
app_data[0..4].copy_from_slice(&target_id.to_be_bytes());
447+
app_data[0..4].copy_from_slice(&target_id.as_u32().to_be_bytes());
448448
app_data[4..8].copy_from_slice(&unique_id.to_be_bytes());
449449
app_data[8..12].copy_from_slice(&collection_interval_factor.to_be_bytes());
450450

@@ -482,8 +482,8 @@ mod tests {
482482
fn hk_reply_handler() {
483483
let mut reply_testbench =
484484
ReplyHandlerTestbench::new(TEST_COMPONENT_ID_0.id(), HkReplyHandler::default());
485-
let sender_id = 2_u64;
486-
let apid_target_id = 3_u32;
485+
let sender_id = 2_u32;
486+
let apid_target_id = u21::new(3);
487487
let unique_id = 5_u32;
488488
let (req_id, active_req) = reply_testbench.add_tc(TEST_APID, apid_target_id, &[]);
489489
let reply = GenericMessage::new(
@@ -504,7 +504,7 @@ mod tests {
504504
ReplyHandlerTestbench::new(TEST_COMPONENT_ID_1.id(), HkReplyHandler::default());
505505
let action_reply = HkReply::new(5_u32, HkReplyVariant::Ack);
506506
let unrequested_reply =
507-
GenericMessage::new(MessageMetadata::new(10_u32, 15_u64), action_reply);
507+
GenericMessage::new(MessageMetadata::new(10_u32, 15_u32), action_reply);
508508
// Right now this function does not do a lot. We simply check that it does not panic or do
509509
// weird stuff.
510510
let result = testbench.handle_unrequested_reply(&unrequested_reply);

satrs-example/src/pus/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@ pub fn generic_pus_request_timeout_handler(
531531
pub(crate) mod tests {
532532
use std::time::Duration;
533533

534-
use arbitrary_int::u11;
534+
use arbitrary_int::{u11, u21};
535535
use satrs::pus::test_util::TEST_COMPONENT_ID_0;
536536
use satrs::pus::{MpscTmAsVecSender, PusTmVariant};
537537
use satrs::request::RequestId;
@@ -593,7 +593,7 @@ pub(crate) mod tests {
593593
pub fn add_tc(
594594
&mut self,
595595
apid: u11,
596-
apid_target: u32,
596+
apid_target: u21,
597597
time_stamp: &[u8],
598598
) -> (verification::RequestId, ActivePusRequestStd) {
599599
let sp_header = SpHeader::new_from_apid(apid);
@@ -722,7 +722,7 @@ pub(crate) mod tests {
722722
token: VerificationToken<TcStateAccepted>,
723723
time_stamp: &[u8],
724724
expected_apid: u11,
725-
expected_apid_target: u32,
725+
expected_apid_target: u21,
726726
) -> Result<(ActiveRequestInfo, Request), Converter::Error> {
727727
if self.current_packet.is_none() {
728728
return Err(GenericConversionError::InvalidAppData(

0 commit comments

Comments
 (0)