added some auto-conversion
All checks were successful
Rust/spacepackets/pipeline/head This commit looks good
All checks were successful
Rust/spacepackets/pipeline/head This commit looks good
This commit is contained in:
parent
d559646d80
commit
28ba4f887d
@ -41,7 +41,13 @@ pub enum PusError {
|
|||||||
NoRawData,
|
NoRawData,
|
||||||
/// CRC16 needs to be calculated first
|
/// CRC16 needs to be calculated first
|
||||||
CrcCalculationMissing,
|
CrcCalculationMissing,
|
||||||
PacketError(ByteConversionError),
|
ByteConversionError(ByteConversionError),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<ByteConversionError> for PusError {
|
||||||
|
fn from(e: ByteConversionError) -> Self {
|
||||||
|
PusError::ByteConversionError(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait PusPacket: CcsdsPacket {
|
pub trait PusPacket: CcsdsPacket {
|
||||||
|
25
src/tc.rs
25
src/tc.rs
@ -336,22 +336,21 @@ impl<'slice> PusTc<'slice> {
|
|||||||
let tc_header_len = size_of::<zc::PusTcSecondaryHeader>();
|
let tc_header_len = size_of::<zc::PusTcSecondaryHeader>();
|
||||||
let total_size = self.len_packed();
|
let total_size = self.len_packed();
|
||||||
if total_size > slice.len() {
|
if total_size > slice.len() {
|
||||||
return Err(PusError::PacketError(ByteConversionError::ToSliceTooSmall(
|
return Err(ByteConversionError::ToSliceTooSmall(SizeMissmatch {
|
||||||
SizeMissmatch {
|
found: slice.len(),
|
||||||
found: slice.len(),
|
expected: total_size,
|
||||||
expected: total_size,
|
})
|
||||||
},
|
.into());
|
||||||
)));
|
|
||||||
}
|
}
|
||||||
sph_zc
|
sph_zc
|
||||||
.to_bytes(&mut slice[curr_idx..curr_idx + CCSDS_HEADER_LEN])
|
.to_bytes(&mut slice[curr_idx..curr_idx + CCSDS_HEADER_LEN])
|
||||||
.ok_or(PusError::PacketError(ByteConversionError::ZeroCopyToError))?;
|
.ok_or(ByteConversionError::ZeroCopyToError)?;
|
||||||
|
|
||||||
curr_idx += CCSDS_HEADER_LEN;
|
curr_idx += CCSDS_HEADER_LEN;
|
||||||
let sec_header = zc::PusTcSecondaryHeader::try_from(self.sec_header).unwrap();
|
let sec_header = zc::PusTcSecondaryHeader::try_from(self.sec_header).unwrap();
|
||||||
sec_header
|
sec_header
|
||||||
.write_to_bytes(&mut slice[curr_idx..curr_idx + tc_header_len])
|
.write_to_bytes(&mut slice[curr_idx..curr_idx + tc_header_len])
|
||||||
.ok_or(PusError::PacketError(ByteConversionError::ZeroCopyToError))?;
|
.ok_or(ByteConversionError::ZeroCopyToError)?;
|
||||||
|
|
||||||
curr_idx += tc_header_len;
|
curr_idx += tc_header_len;
|
||||||
if let Some(app_data) = self.app_data {
|
if let Some(app_data) = self.app_data {
|
||||||
@ -410,9 +409,7 @@ impl<'slice> PusTc<'slice> {
|
|||||||
let mut current_idx = 0;
|
let mut current_idx = 0;
|
||||||
let sph =
|
let sph =
|
||||||
crate::zc::SpHeader::from_bytes(&slice[current_idx..current_idx + CCSDS_HEADER_LEN])
|
crate::zc::SpHeader::from_bytes(&slice[current_idx..current_idx + CCSDS_HEADER_LEN])
|
||||||
.ok_or(PusError::PacketError(
|
.ok_or(ByteConversionError::ZeroCopyFromError)?;
|
||||||
ByteConversionError::ZeroCopyFromError,
|
|
||||||
))?;
|
|
||||||
current_idx += CCSDS_HEADER_LEN;
|
current_idx += CCSDS_HEADER_LEN;
|
||||||
let total_len = sph.total_len();
|
let total_len = sph.total_len();
|
||||||
if raw_data_len < total_len || total_len < PUS_TC_MIN_LEN_WITHOUT_APP_DATA {
|
if raw_data_len < total_len || total_len < PUS_TC_MIN_LEN_WITHOUT_APP_DATA {
|
||||||
@ -421,9 +418,7 @@ impl<'slice> PusTc<'slice> {
|
|||||||
let sec_header = zc::PusTcSecondaryHeader::from_bytes(
|
let sec_header = zc::PusTcSecondaryHeader::from_bytes(
|
||||||
&slice[current_idx..current_idx + PUC_TC_SECONDARY_HEADER_LEN],
|
&slice[current_idx..current_idx + PUC_TC_SECONDARY_HEADER_LEN],
|
||||||
)
|
)
|
||||||
.ok_or(PusError::PacketError(
|
.ok_or(ByteConversionError::ZeroCopyFromError)?;
|
||||||
ByteConversionError::ZeroCopyFromError,
|
|
||||||
))?;
|
|
||||||
current_idx += PUC_TC_SECONDARY_HEADER_LEN;
|
current_idx += PUC_TC_SECONDARY_HEADER_LEN;
|
||||||
let raw_data = &slice[0..total_len];
|
let raw_data = &slice[0..total_len];
|
||||||
let pus_tc = PusTc {
|
let pus_tc = PusTc {
|
||||||
@ -636,7 +631,7 @@ mod tests {
|
|||||||
assert!(res.is_err());
|
assert!(res.is_err());
|
||||||
let err = res.unwrap_err();
|
let err = res.unwrap_err();
|
||||||
match err {
|
match err {
|
||||||
PusError::PacketError(err) => match err {
|
PusError::ByteConversionError(err) => match err {
|
||||||
ByteConversionError::ToSliceTooSmall(missmatch) => {
|
ByteConversionError::ToSliceTooSmall(missmatch) => {
|
||||||
assert_eq!(missmatch.expected, pus_tc.len_packed());
|
assert_eq!(missmatch.expected, pus_tc.len_packed());
|
||||||
assert_eq!(missmatch.found, 12);
|
assert_eq!(missmatch.found, 12);
|
||||||
|
27
src/tm.rs
27
src/tm.rs
@ -314,23 +314,22 @@ impl<'slice> PusTm<'slice> {
|
|||||||
let sph_zc = crate::zc::SpHeader::from(self.sp_header);
|
let sph_zc = crate::zc::SpHeader::from(self.sp_header);
|
||||||
let total_size = self.len_packed();
|
let total_size = self.len_packed();
|
||||||
if total_size > slice.len() {
|
if total_size > slice.len() {
|
||||||
return Err(PusError::PacketError(ByteConversionError::ToSliceTooSmall(
|
return Err(ByteConversionError::ToSliceTooSmall(SizeMissmatch {
|
||||||
SizeMissmatch {
|
found: slice.len(),
|
||||||
found: slice.len(),
|
expected: total_size,
|
||||||
expected: total_size,
|
})
|
||||||
},
|
.into());
|
||||||
)));
|
|
||||||
}
|
}
|
||||||
sph_zc
|
sph_zc
|
||||||
.to_bytes(&mut slice[curr_idx..curr_idx + CCSDS_HEADER_LEN])
|
.to_bytes(&mut slice[curr_idx..curr_idx + CCSDS_HEADER_LEN])
|
||||||
.ok_or(PusError::PacketError(ByteConversionError::ZeroCopyToError))?;
|
.ok_or(ByteConversionError::ZeroCopyToError)?;
|
||||||
|
|
||||||
curr_idx += CCSDS_HEADER_LEN;
|
curr_idx += CCSDS_HEADER_LEN;
|
||||||
let sec_header_len = size_of::<zc::PusTmSecHeaderWithoutTimestamp>();
|
let sec_header_len = size_of::<zc::PusTmSecHeaderWithoutTimestamp>();
|
||||||
let sec_header = zc::PusTmSecHeaderWithoutTimestamp::try_from(self.sec_header).unwrap();
|
let sec_header = zc::PusTmSecHeaderWithoutTimestamp::try_from(self.sec_header).unwrap();
|
||||||
sec_header
|
sec_header
|
||||||
.write_to_bytes(&mut slice[curr_idx..curr_idx + sec_header_len])
|
.write_to_bytes(&mut slice[curr_idx..curr_idx + sec_header_len])
|
||||||
.ok_or(PusError::PacketError(ByteConversionError::ZeroCopyToError))?;
|
.ok_or(ByteConversionError::ZeroCopyToError)?;
|
||||||
curr_idx += sec_header_len;
|
curr_idx += sec_header_len;
|
||||||
let timestamp_len = self.sec_header.time_stamp.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);
|
slice[curr_idx..curr_idx + timestamp_len].copy_from_slice(self.sec_header.time_stamp);
|
||||||
@ -399,9 +398,7 @@ impl<'slice> PusTm<'slice> {
|
|||||||
let mut current_idx = 0;
|
let mut current_idx = 0;
|
||||||
let sph =
|
let sph =
|
||||||
crate::zc::SpHeader::from_bytes(&slice[current_idx..current_idx + CCSDS_HEADER_LEN])
|
crate::zc::SpHeader::from_bytes(&slice[current_idx..current_idx + CCSDS_HEADER_LEN])
|
||||||
.ok_or(PusError::PacketError(
|
.ok_or(ByteConversionError::ZeroCopyFromError)?;
|
||||||
ByteConversionError::ZeroCopyFromError,
|
|
||||||
))?;
|
|
||||||
current_idx += 6;
|
current_idx += 6;
|
||||||
let total_len = sph.total_len();
|
let total_len = sph.total_len();
|
||||||
if raw_data_len < total_len || total_len < PUS_TM_MIN_LEN_WITHOUT_SOURCE_DATA {
|
if raw_data_len < total_len || total_len < PUS_TM_MIN_LEN_WITHOUT_SOURCE_DATA {
|
||||||
@ -410,9 +407,7 @@ impl<'slice> PusTm<'slice> {
|
|||||||
let sec_header_zc = zc::PusTmSecHeaderWithoutTimestamp::from_bytes(
|
let sec_header_zc = zc::PusTmSecHeaderWithoutTimestamp::from_bytes(
|
||||||
&slice[current_idx..current_idx + PUC_TM_MIN_SEC_HEADER_LEN],
|
&slice[current_idx..current_idx + PUC_TM_MIN_SEC_HEADER_LEN],
|
||||||
)
|
)
|
||||||
.ok_or(PusError::PacketError(
|
.ok_or(ByteConversionError::ZeroCopyFromError)?;
|
||||||
ByteConversionError::ZeroCopyFromError,
|
|
||||||
))?;
|
|
||||||
current_idx += PUC_TM_MIN_SEC_HEADER_LEN;
|
current_idx += PUC_TM_MIN_SEC_HEADER_LEN;
|
||||||
let zc_sec_header_wrapper = zc::PusTmSecHeader {
|
let zc_sec_header_wrapper = zc::PusTmSecHeader {
|
||||||
zc_header: sec_header_zc,
|
zc_header: sec_header_zc,
|
||||||
@ -580,9 +575,9 @@ mod tests {
|
|||||||
let res = pus_tm.write_to_bytes(&mut buf);
|
let res = pus_tm.write_to_bytes(&mut buf);
|
||||||
assert!(res.is_err());
|
assert!(res.is_err());
|
||||||
let error = res.unwrap_err();
|
let error = res.unwrap_err();
|
||||||
assert!(matches!(error, PusError::PacketError { .. }));
|
assert!(matches!(error, PusError::ByteConversionError { .. }));
|
||||||
match error {
|
match error {
|
||||||
PusError::PacketError(err) => match err {
|
PusError::ByteConversionError(err) => match err {
|
||||||
ByteConversionError::ToSliceTooSmall(size_missmatch) => {
|
ByteConversionError::ToSliceTooSmall(size_missmatch) => {
|
||||||
assert_eq!(size_missmatch.expected, 22);
|
assert_eq!(size_missmatch.expected, 22);
|
||||||
assert_eq!(size_missmatch.found, 16);
|
assert_eq!(size_missmatch.found, 16);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user