ping request is arriving
This commit is contained in:
@@ -12,6 +12,59 @@ pub struct CcsdsTcPacketOwned {
|
||||
pub payload: alloc::vec::Vec<u8>,
|
||||
}
|
||||
|
||||
impl CcsdsTcPacketOwned {
|
||||
pub fn new_with_request<R: serde::Serialize>(
|
||||
sp_header: SpacePacketHeader,
|
||||
tc_header: TcHeader,
|
||||
request: R,
|
||||
) -> Self {
|
||||
let request_serialized = postcard::to_allocvec(&request).unwrap();
|
||||
Self::new(sp_header, tc_header, request_serialized)
|
||||
}
|
||||
|
||||
pub fn new(
|
||||
sp_header: SpacePacketHeader,
|
||||
tc_header: TcHeader,
|
||||
payload: alloc::vec::Vec<u8>,
|
||||
) -> Self {
|
||||
Self {
|
||||
sp_header,
|
||||
tc_header,
|
||||
payload,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn write_to_bytes(&self, buf: &mut [u8]) -> Result<usize, CcsdsCreationError> {
|
||||
let response_len =
|
||||
postcard::experimental::serialized_size(&self.tc_header)? + self.payload.len();
|
||||
let mut ccsds_tc = CcsdsPacketCreatorWithReservedData::new_tc_with_checksum(
|
||||
self.sp_header,
|
||||
response_len,
|
||||
buf,
|
||||
)?;
|
||||
let user_data = ccsds_tc.packet_data_mut();
|
||||
let ser_len = postcard::to_slice(&self.tc_header, user_data)?.len();
|
||||
user_data[ser_len..ser_len + self.payload.len()].copy_from_slice(&self.payload);
|
||||
let ccsds_packet_len = ccsds_tc.finish();
|
||||
Ok(ccsds_packet_len)
|
||||
}
|
||||
|
||||
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,
|
||||
)
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
pub fn to_vec(&self) -> alloc::vec::Vec<u8> {
|
||||
let mut buf = alloc::vec![0u8; self.len_written()];
|
||||
let len = self.write_to_bytes(&mut buf).unwrap();
|
||||
buf.truncate(len);
|
||||
buf
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, thiserror::Error)]
|
||||
pub enum CcsdsCreationError {
|
||||
#[error("CCSDS packet creation error: {0}")]
|
||||
|
||||
@@ -18,6 +18,30 @@ pub mod ccsds;
|
||||
#[repr(u64)]
|
||||
pub enum ComponentId {
|
||||
Pcdu,
|
||||
Controller,
|
||||
|
||||
AcsSubsystem,
|
||||
AcsAssembly,
|
||||
AcsMgm0,
|
||||
AcsMgm1,
|
||||
|
||||
EpsSubsystem,
|
||||
EpsPcdu,
|
||||
|
||||
UdpServer,
|
||||
TcpServer,
|
||||
|
||||
Ground
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Eq, strum::EnumIter)]
|
||||
#[bitbybit::bitenum(u11)]
|
||||
pub enum Apid {
|
||||
Tmtc = 1,
|
||||
Cfdp = 2,
|
||||
|
||||
Acs = 3,
|
||||
Eps = 6,
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
|
||||
@@ -39,6 +63,15 @@ pub struct TcHeader {
|
||||
pub request_type: MessageType,
|
||||
}
|
||||
|
||||
impl TcHeader {
|
||||
pub fn new(target_id: ComponentId, request_type: MessageType) -> Self {
|
||||
Self {
|
||||
target_id,
|
||||
request_type,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
|
||||
pub enum MessageType {
|
||||
Ping,
|
||||
|
||||
Reference in New Issue
Block a user