Skip to content

Commit b3a7f3f

Browse files
committed
this is a big refactoring
1 parent e1bf81e commit b3a7f3f

File tree

7 files changed

+296
-166
lines changed

7 files changed

+296
-166
lines changed

satrs-example/Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ derive-new = "0.7"
2323
cfg-if = "1"
2424
arbitrary-int = "2"
2525
bitbybit = "1.4"
26+
postcard = "1"
2627
serde = { version = "1", features = ["derive"] }
2728
serde_json = "1"
2829

@@ -31,8 +32,8 @@ satrs-minisim = { path = "../satrs-minisim" }
3132
satrs-mib = { path = "../satrs-mib" }
3233

3334
[features]
34-
default = ["heap_tmtc"]
35-
heap_tmtc = []
35+
# default = ["heap_tmtc"]
36+
# heap_tmtc = []
3637

3738
[dev-dependencies]
3839
env_logger = "0.11"

satrs-example/src/acs/mgm.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/*
12
use derive_new::new;
23
use satrs::hk::{HkRequest, HkRequestVariant};
34
use satrs::mode_tree::{ModeChild, ModeNode};
@@ -717,3 +718,4 @@ mod tests {
717718
assert!(mgm_set.valid);
718719
}
719720
}
721+
*/

satrs-example/src/eps/pcdu.rs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use satrs::{
2222
use satrs_example::{
2323
config::components::NO_SENDER,
2424
ids::{eps::PCDU, generic_pus::PUS_MODE},
25-
DeviceMode, TimestampHelper,
25+
CcsdsTmPacketOwned, DeviceMode, TimestampHelper,
2626
};
2727
use satrs_minisim::{
2828
eps::{
@@ -34,7 +34,7 @@ use serde::{Deserialize, Serialize};
3434

3535
use crate::{
3636
hk::PusHkHelper,
37-
pus::hk::{HkReply, HkReplyVariant},
37+
//pus::hk::{HkReply, HkReplyVariant},
3838
requests::CompositeRequest,
3939
tmtc::sender::TmTcSender,
4040
};
@@ -210,7 +210,8 @@ pub struct PcduHandler<ComInterface: SerialInterface> {
210210
dev_str: &'static str,
211211
mode_node: ModeRequestHandlerMpscBounded,
212212
composite_request_rx: mpsc::Receiver<GenericMessage<CompositeRequest>>,
213-
hk_reply_tx: mpsc::SyncSender<GenericMessage<HkReply>>,
213+
//hk_reply_tx: mpsc::SyncSender<GenericMessage<HkReply>>,
214+
hk_tx: std::sync::mpsc::SyncSender<CcsdsTmPacketOwned>,
214215
switch_request_rx: mpsc::Receiver<GenericMessage<SwitchRequest>>,
215216
tm_sender: TmTcSender,
216217
pub com_interface: ComInterface,
@@ -303,12 +304,15 @@ impl<ComInterface: SerialInterface> PcduHandler<ComInterface> {
303304
self.tm_sender
304305
.send_tm(self.id.id(), PusTmVariant::Direct(hk_tm))
305306
.expect("failed to send HK TM");
307+
// TODO: Fix
308+
/*
306309
self.hk_reply_tx
307310
.send(GenericMessage::new(
308311
*requestor_info,
309312
HkReply::new(hk_request.unique_id, HkReplyVariant::Ack),
310313
))
311314
.expect("failed to send HK reply");
315+
*/
312316
}
313317
}
314318
}
@@ -555,7 +559,8 @@ mod tests {
555559
pub mode_reply_rx_to_pus: mpsc::Receiver<GenericMessage<ModeReply>>,
556560
pub mode_reply_rx_to_parent: mpsc::Receiver<GenericMessage<ModeReply>>,
557561
pub composite_request_tx: mpsc::Sender<GenericMessage<CompositeRequest>>,
558-
pub hk_reply_rx: mpsc::Receiver<GenericMessage<HkReply>>,
562+
//pub hk_reply_rx: mpsc::Receiver<GenericMessage<HkReply>>,
563+
pub hk_rx: std::sync::mpsc::Receiver<CcsdsTmPacketOwned>,
559564
pub tm_rx: mpsc::Receiver<PacketAsVec>,
560565
pub switch_request_tx: mpsc::Sender<GenericMessage<SwitchRequest>>,
561566
pub handler: PcduHandler<SerialInterfaceTest>,
@@ -568,7 +573,7 @@ mod tests {
568573
let (mode_reply_tx_to_parent, mode_reply_rx_to_parent) = mpsc::sync_channel(5);
569574
let mode_node = ModeRequestHandlerMpscBounded::new(PCDU.into(), mode_request_rx);
570575
let (composite_request_tx, composite_request_rx) = mpsc::channel();
571-
let (hk_reply_tx, hk_reply_rx) = mpsc::sync_channel(10);
576+
let (hk_tx, hk_rx) = mpsc::sync_channel(10);
572577
let (tm_tx, tm_rx) = mpsc::sync_channel::<PacketAsVec>(5);
573578
let (switch_request_tx, switch_reqest_rx) = mpsc::channel();
574579
let shared_switch_map = Arc::new(Mutex::new(SwitchSet::default()));
@@ -577,7 +582,7 @@ mod tests {
577582
"TEST_PCDU",
578583
mode_node,
579584
composite_request_rx,
580-
hk_reply_tx,
585+
hk_tx,
581586
switch_reqest_rx,
582587
TmTcSender::Heap(tm_tx.clone()),
583588
SerialInterfaceTest::default(),
@@ -590,7 +595,7 @@ mod tests {
590595
mode_reply_rx_to_pus,
591596
mode_reply_rx_to_parent,
592597
composite_request_tx,
593-
hk_reply_rx,
598+
hk_rx,
594599
tm_rx,
595600
switch_request_tx,
596601
handler,

satrs-example/src/lib.rs

Lines changed: 108 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,115 @@
1-
use satrs::spacepackets::time::cds::CdsTime;
1+
extern crate alloc;
2+
3+
use satrs::spacepackets::{
4+
ccsds_packet_len_for_user_data_len_with_checksum, time::cds::CdsTime, CcsdsPacketCreationError,
5+
CcsdsPacketCreatorWithReservedData, CcsdsPacketIdAndPsc, SpacePacketHeader,
6+
};
27

38
pub mod config;
49
pub mod ids;
510

11+
#[derive(
12+
Debug,
13+
Copy,
14+
Clone,
15+
PartialEq,
16+
Eq,
17+
Hash,
18+
serde::Serialize,
19+
serde::Deserialize,
20+
num_enum::TryFromPrimitive,
21+
num_enum::IntoPrimitive,
22+
)]
23+
#[repr(u64)]
24+
pub enum ComponentId {
25+
Pcdu,
26+
}
27+
28+
#[derive(Debug, Copy, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
29+
pub enum MessageType {
30+
Ping,
31+
Mode,
32+
Hk,
33+
Action,
34+
Verification,
35+
}
36+
37+
/// Unserialized owned TM packet which can be cloned and sent around.
38+
#[derive(Debug, Clone, PartialEq, Eq)]
39+
pub struct CcsdsTmPacketOwned {
40+
pub sp_header: SpacePacketHeader,
41+
pub tm_header: TmHeader,
42+
pub payload: alloc::vec::Vec<u8>,
43+
}
44+
45+
#[derive(Debug, thiserror::Error)]
46+
pub enum CcsdsCreationError {
47+
#[error("CCSDS packet creation error: {0}")]
48+
CcsdsPacketCreation(#[from] CcsdsPacketCreationError),
49+
#[error("postcard error: {0}")]
50+
Postcard(#[from] postcard::Error),
51+
#[error("timestamp generation error")]
52+
Time,
53+
}
54+
55+
impl CcsdsTmPacketOwned {
56+
pub fn write_to_bytes(&self, buf: &mut [u8]) -> Result<usize, CcsdsCreationError> {
57+
let response_len =
58+
postcard::experimental::serialized_size(&self.tm_header)? + self.payload.len();
59+
let mut ccsds_tm = CcsdsPacketCreatorWithReservedData::new_tm_with_checksum(
60+
self.sp_header,
61+
response_len,
62+
buf,
63+
)?;
64+
let user_data = ccsds_tm.packet_data_mut();
65+
let ser_len = postcard::to_slice(&self.tm_header, user_data)?.len();
66+
user_data[ser_len..ser_len + self.payload.len()].copy_from_slice(&self.payload);
67+
let ccsds_packet_len = ccsds_tm.finish();
68+
Ok(ccsds_packet_len)
69+
}
70+
71+
pub fn len_written(&self) -> usize {
72+
ccsds_packet_len_for_user_data_len_with_checksum(
73+
postcard::experimental::serialized_size(&self.tm_header).unwrap() as usize
74+
+ postcard::experimental::serialized_size(&self.payload).unwrap() as usize,
75+
)
76+
.unwrap()
77+
}
78+
79+
pub fn to_vec(&self) -> Result<alloc::vec::Vec<u8>, CcsdsCreationError> {
80+
let mut buf = alloc::vec![0u8; self.len_written()];
81+
let len = self.write_to_bytes(&mut buf)?;
82+
buf.truncate(len);
83+
Ok(buf)
84+
}
85+
}
86+
87+
#[derive(Debug, Copy, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
88+
#[non_exhaustive]
89+
pub struct TmHeader {
90+
pub sender_id: ComponentId,
91+
pub target_id: ComponentId,
92+
pub message_type: MessageType,
93+
/// Telemetry can either be sent unsolicited, or as a response to telecommands.
94+
pub tc_id: Option<CcsdsPacketIdAndPsc>,
95+
/// Raw CDS short timestamp.
96+
pub timestamp: Option<[u8; 7]>,
97+
}
98+
99+
#[derive(Debug, Copy, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
100+
#[non_exhaustive]
101+
pub struct TcHeader {
102+
pub target_id: ComponentId,
103+
pub request_type: MessageType,
104+
}
105+
106+
#[derive(Debug, Clone, PartialEq, Eq)]
107+
pub struct CcsdsTcPacketOwned {
108+
pub sp_header: SpacePacketHeader,
109+
pub tc_header: TcHeader,
110+
pub payload: alloc::vec::Vec<u8>,
111+
}
112+
6113
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
7114
pub enum DeviceMode {
8115
Off = 0,

0 commit comments

Comments
 (0)