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(()) } }