Add new features

- Basic ECSS enumeration support for u8, u16, u32 and u64
- Better names for generic error enums
This commit is contained in:
2022-09-03 18:47:59 +02:00
parent 96d389a651
commit a4e297f0c0
5 changed files with 196 additions and 32 deletions

View File

@ -5,7 +5,8 @@ use crate::ecss::{
verify_crc16_from_raw, CrcType, PusError, PusPacket, PusVersion, CRC_CCITT_FALSE,
};
use crate::{
CcsdsPacket, PacketError, PacketType, SequenceFlags, SizeMissmatch, SpHeader, CCSDS_HEADER_LEN,
ByteConversionError, CcsdsPacket, PacketType, SequenceFlags, SizeMissmatch, SpHeader,
CCSDS_HEADER_LEN,
};
use core::mem::size_of;
use serde::{Deserialize, Serialize};
@ -309,7 +310,7 @@ impl<'slice> PusTm<'slice> {
let sph_zc = crate::zc::SpHeader::from(self.sp_header);
let total_size = self.len_packed();
if total_size > slice.len() {
return Err(PusError::PacketError(PacketError::ToBytesSliceTooSmall(
return Err(PusError::PacketError(ByteConversionError::ToSliceTooSmall(
SizeMissmatch {
found: slice.len(),
expected: total_size,
@ -318,14 +319,14 @@ impl<'slice> PusTm<'slice> {
}
sph_zc
.to_bytes(&mut slice[curr_idx..curr_idx + CCSDS_HEADER_LEN])
.ok_or(PusError::PacketError(PacketError::ToBytesZeroCopyError))?;
.ok_or(PusError::PacketError(ByteConversionError::ZeroCopyToError))?;
curr_idx += CCSDS_HEADER_LEN;
let sec_header_len = size_of::<zc::PusTmSecHeaderWithoutTimestamp>();
let sec_header = zc::PusTmSecHeaderWithoutTimestamp::try_from(self.sec_header).unwrap();
sec_header
.to_bytes(&mut slice[curr_idx..curr_idx + sec_header_len])
.ok_or(PusError::PacketError(PacketError::ToBytesZeroCopyError))?;
.ok_or(PusError::PacketError(ByteConversionError::ZeroCopyToError))?;
curr_idx += sec_header_len;
let timestamp_len = self.sec_header.time_stamp.len();
slice[curr_idx..curr_idx + timestamp_len].copy_from_slice(self.sec_header.time_stamp);
@ -394,7 +395,9 @@ impl<'slice> PusTm<'slice> {
let mut current_idx = 0;
let sph =
crate::zc::SpHeader::from_bytes(&slice[current_idx..current_idx + CCSDS_HEADER_LEN])
.ok_or(PusError::PacketError(PacketError::FromBytesZeroCopyError))?;
.ok_or(PusError::PacketError(
ByteConversionError::ZeroCopyFromError,
))?;
current_idx += 6;
let total_len = sph.total_len();
if raw_data_len < total_len || total_len < PUS_TM_MIN_LEN_WITHOUT_SOURCE_DATA {
@ -403,7 +406,9 @@ impl<'slice> PusTm<'slice> {
let sec_header_zc = zc::PusTmSecHeaderWithoutTimestamp::from_bytes(
&slice[current_idx..current_idx + PUC_TM_MIN_SEC_HEADER_LEN],
)
.ok_or(PusError::PacketError(PacketError::FromBytesZeroCopyError))?;
.ok_or(PusError::PacketError(
ByteConversionError::ZeroCopyFromError,
))?;
current_idx += PUC_TM_MIN_SEC_HEADER_LEN;
let zc_sec_header_wrapper = zc::PusTmSecHeader {
zc_header: sec_header_zc,
@ -568,7 +573,7 @@ mod tests {
assert!(matches!(error, PusError::PacketError { .. }));
match error {
PusError::PacketError(err) => match err {
PacketError::ToBytesSliceTooSmall(size_missmatch) => {
ByteConversionError::ToSliceTooSmall(size_missmatch) => {
assert_eq!(size_missmatch.expected, 22);
assert_eq!(size_missmatch.found, 16);
}