52 lines
1.3 KiB
Rust
52 lines
1.3 KiB
Rust
use crate::tmtc::{
|
|
MpscStoreAndSendError, PusTcSource, AOCS_APID, AOCS_HK_APID, CSS_APID, MGM_APID, MGT_APID,
|
|
PLD_APID, PUS_APID, PWR_APID, RWL_APID, STR_APID,
|
|
};
|
|
use log::warn;
|
|
use satrs_core::spacepackets::{CcsdsPacket, SpHeader};
|
|
use satrs_core::tmtc::{CcsdsPacketHandler, ReceivesCcsdsTc};
|
|
|
|
pub struct CcsdsReceiver {
|
|
pub tc_source: PusTcSource,
|
|
}
|
|
|
|
impl CcsdsPacketHandler for CcsdsReceiver {
|
|
type Error = MpscStoreAndSendError;
|
|
|
|
fn valid_apids(&self) -> &'static [u16] {
|
|
&[
|
|
PUS_APID,
|
|
PLD_APID,
|
|
PWR_APID,
|
|
AOCS_APID,
|
|
AOCS_HK_APID,
|
|
MGM_APID,
|
|
CSS_APID,
|
|
STR_APID,
|
|
MGT_APID,
|
|
RWL_APID,
|
|
]
|
|
}
|
|
|
|
fn handle_known_apid(
|
|
&mut self,
|
|
sp_header: &SpHeader,
|
|
tc_raw: &[u8],
|
|
) -> Result<(), Self::Error> {
|
|
if sp_header.apid() == PUS_APID {
|
|
return self.tc_source.pass_ccsds(sp_header, tc_raw);
|
|
} else {
|
|
return self.tc_source.pass_ccsds(sp_header, tc_raw);
|
|
}
|
|
}
|
|
|
|
fn handle_unknown_apid(
|
|
&mut self,
|
|
sp_header: &SpHeader,
|
|
_tc_raw: &[u8],
|
|
) -> Result<(), Self::Error> {
|
|
warn!("Unknown APID 0x{:x?} detected", sp_header.apid());
|
|
Ok(())
|
|
}
|
|
}
|