allow verif failure and completion starting from accepted

- Also add some prototyping code a prep for generic PUS router
This commit is contained in:
2023-02-28 14:53:57 +01:00
parent b2fc172b0a
commit 53003b9c66
3 changed files with 80 additions and 31 deletions

View File

@ -5,7 +5,7 @@ use satrs_core::events::EventU32;
use satrs_core::hk::{CollectionIntervalFactor, HkRequest};
use satrs_core::mode::{ModeAndSubmode, ModeRequest};
use satrs_core::params::Params;
use satrs_core::pool::StoreAddr;
use satrs_core::pool::{PoolProvider, StoreAddr};
use satrs_core::pus::event_man::{EventRequest, EventRequestWithToken};
use satrs_core::pus::hk;
use satrs_core::pus::mode;
@ -18,6 +18,7 @@ use satrs_core::pus::verification::{
use satrs_core::pus::{event, GenericTcCheckError};
use satrs_core::res_code::ResultU16;
use satrs_core::spacepackets::ecss::{scheduling, PusServiceId};
use satrs_core::spacepackets::time::CcsdsTimeProvider;
use satrs_core::tmtc::tm_helper::PusTmWithCdsShortHelper;
use satrs_core::tmtc::{AddressableId, PusServiceProvider, TargetId};
use satrs_core::{
@ -29,7 +30,7 @@ use std::cell::RefCell;
use std::collections::HashMap;
use std::convert::TryFrom;
use std::rc::Rc;
use std::sync::mpsc::Sender;
use std::sync::mpsc::{Receiver, Sender};
pub struct PusReceiver {
pub tm_helper: PusTmWithCdsShortHelper,
@ -53,6 +54,43 @@ impl PusTmArgs {
}
}
pub struct PusTcHandlerBase {
pub tc_store: Box<dyn PoolProvider>,
pub receiver: Receiver<(StoreAddr, VerificationToken<TcStateAccepted>)>,
pub verif_reporter: StdVerifReporterWithSender,
pub time_provider: Box<dyn CcsdsTimeProvider>,
}
pub trait TestHandlerNoPing {
fn handle_no_ping_tc(&mut self, tc: PusTc);
}
pub struct PusTestTcHandler {
pub base: PusTcHandlerBase,
handler: Option<Box<dyn TestHandlerNoPing>>,
}
pub struct PusScheduleTcHandler {
pub base: PusTestTcHandler,
}
impl PusTestTcHandler {
pub fn operation(&mut self) {
let (addr, token) = self.base.receiver.recv().unwrap();
let data = self.base.tc_store.read(&addr).unwrap();
let (pus_tc, _len) = PusTc::from_bytes(data).unwrap();
let stamp: [u8; 7] = [0; 7];
if pus_tc.subservice() == 1 {
self.base
.verif_reporter
.completion_success(token, Some(&stamp))
.unwrap();
} else if let Some(handler) = &mut self.handler {
handler.handle_no_ping_tc(pus_tc);
}
}
}
pub struct PusTcArgs {
pub event_request_tx: Sender<EventRequestWithToken>,
/// Request routing helper. Maps targeted requests to their recipient.