add PUS A support
This commit is contained in:
@@ -79,7 +79,7 @@ pub const ACK_ALL: u8 = AckOpts::Acceptance as u8
|
||||
| AckOpts::Completion as u8;
|
||||
|
||||
pub trait GenericPusTcSecondaryHeader {
|
||||
fn pus_version(&self) -> PusVersion;
|
||||
fn pus_version(&self) -> Result<PusVersion, u8>;
|
||||
fn ack_flags(&self) -> u8;
|
||||
fn service(&self) -> u8;
|
||||
fn subservice(&self) -> u8;
|
||||
@@ -104,7 +104,7 @@ pub mod zc {
|
||||
type Error = PusError;
|
||||
fn try_from(value: crate::ecss::tc::PusTcSecondaryHeader) -> Result<Self, Self::Error> {
|
||||
if value.version != PusVersion::PusC {
|
||||
return Err(PusError::VersionNotSupported(value.version));
|
||||
return Err(PusError::VersionNotSupported(value.version as u8));
|
||||
}
|
||||
Ok(PusTcSecondaryHeader {
|
||||
version_ack: ((value.version as u8) << 4) | value.ack,
|
||||
@@ -117,8 +117,8 @@ pub mod zc {
|
||||
|
||||
impl GenericPusTcSecondaryHeader for PusTcSecondaryHeader {
|
||||
#[inline]
|
||||
fn pus_version(&self) -> PusVersion {
|
||||
PusVersion::try_from((self.version_ack >> 4) & 0b1111).unwrap_or(PusVersion::Invalid)
|
||||
fn pus_version(&self) -> Result<PusVersion, u8> {
|
||||
PusVersion::try_from((self.version_ack >> 4) & 0b1111)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
@@ -156,8 +156,8 @@ pub struct PusTcSecondaryHeader {
|
||||
|
||||
impl GenericPusTcSecondaryHeader for PusTcSecondaryHeader {
|
||||
#[inline]
|
||||
fn pus_version(&self) -> PusVersion {
|
||||
self.version
|
||||
fn pus_version(&self) -> Result<PusVersion, u8> {
|
||||
Ok(self.version)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
@@ -444,7 +444,7 @@ impl CcsdsPacket for PusTcCreator<'_> {
|
||||
impl PusPacket for PusTcCreator<'_> {
|
||||
delegate!(to self.sec_header {
|
||||
#[inline]
|
||||
fn pus_version(&self) -> PusVersion;
|
||||
fn pus_version(&self) -> Result<PusVersion, u8>;
|
||||
#[inline]
|
||||
fn service(&self) -> u8;
|
||||
#[inline]
|
||||
@@ -465,7 +465,7 @@ impl PusPacket for PusTcCreator<'_> {
|
||||
impl GenericPusTcSecondaryHeader for PusTcCreator<'_> {
|
||||
delegate!(to self.sec_header {
|
||||
#[inline]
|
||||
fn pus_version(&self) -> PusVersion;
|
||||
fn pus_version(&self) -> Result<PusVersion, u8>;
|
||||
#[inline]
|
||||
fn service(&self) -> u8;
|
||||
#[inline]
|
||||
@@ -730,7 +730,7 @@ impl CcsdsPacket for PusTcReader<'_> {
|
||||
impl PusPacket for PusTcReader<'_> {
|
||||
delegate!(to self.sec_header {
|
||||
#[inline]
|
||||
fn pus_version(&self) -> PusVersion;
|
||||
fn pus_version(&self) -> Result<PusVersion, u8>;
|
||||
#[inline]
|
||||
fn service(&self) -> u8;
|
||||
#[inline]
|
||||
@@ -751,7 +751,7 @@ impl PusPacket for PusTcReader<'_> {
|
||||
impl GenericPusTcSecondaryHeader for PusTcReader<'_> {
|
||||
delegate!(to self.sec_header {
|
||||
#[inline]
|
||||
fn pus_version(&self) -> PusVersion;
|
||||
fn pus_version(&self) -> Result<PusVersion, u8>;
|
||||
#[inline]
|
||||
fn service(&self) -> u8;
|
||||
#[inline]
|
||||
@@ -1157,14 +1157,14 @@ mod tests {
|
||||
assert_eq!(PusPacket::subservice(tc), 1);
|
||||
assert_eq!(GenericPusTcSecondaryHeader::subservice(tc), 1);
|
||||
assert!(tc.sec_header_flag());
|
||||
assert_eq!(PusPacket::pus_version(tc), PusC);
|
||||
assert_eq!(PusPacket::pus_version(tc).unwrap(), PusC);
|
||||
assert_eq!(tc.seq_count(), 0x34);
|
||||
assert_eq!(tc.source_id(), 0);
|
||||
assert_eq!(tc.apid(), 0x02);
|
||||
assert_eq!(tc.ack_flags(), ACK_ALL);
|
||||
assert_eq!(PusPacket::pus_version(tc), PusVersion::PusC);
|
||||
assert_eq!(PusPacket::pus_version(tc).unwrap(), PusVersion::PusC);
|
||||
assert_eq!(
|
||||
GenericPusTcSecondaryHeader::pus_version(tc),
|
||||
GenericPusTcSecondaryHeader::pus_version(tc).unwrap(),
|
||||
PusVersion::PusC
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user