use common active request type

This commit is contained in:
Robin Müller 2024-03-11 18:17:01 +01:00
parent d3ad6cf96a
commit c6f2dde138
Signed by: muellerr
GPG Key ID: A649FB78196E3849

View File

@ -1,5 +1,3 @@
use core::time::Duration;
use crate::{ use crate::{
action::{ActionId, ActionRequest}, action::{ActionId, ActionRequest},
params::Params, params::Params,
@ -7,10 +5,13 @@ use crate::{
TargetId, TargetId,
}; };
use super::verification::{TcStateAccepted, TcStateStarted, VerificationToken}; use super::{
verification::{TcStateAccepted, VerificationToken},
ActiveRequest,
};
use satrs_shared::res_code::ResultU16; use satrs_shared::res_code::ResultU16;
use spacepackets::{ecss::EcssEnumU16, time::UnixTimestamp}; use spacepackets::ecss::EcssEnumU16;
#[cfg(feature = "std")] #[cfg(feature = "std")]
#[cfg_attr(doc_cfg, doc(cfg(feature = "std")))] #[cfg_attr(doc_cfg, doc(cfg(feature = "std")))]
@ -66,10 +67,8 @@ pub trait PusActionRequestRouter {
#[derive(Debug, Clone, PartialEq, Eq)] #[derive(Debug, Clone, PartialEq, Eq)]
pub struct ActiveActionRequest { pub struct ActiveActionRequest {
action_id: ActionId, pub action_id: ActionId,
token: VerificationToken<TcStateStarted>, common: ActiveRequest,
start_time: UnixTimestamp,
timeout: Duration,
} }
pub trait ActiveRequestMapProvider: Default { pub trait ActiveRequestMapProvider: Default {
@ -349,9 +348,11 @@ pub mod std_mod {
&request_id.into(), &request_id.into(),
ActiveActionRequest { ActiveActionRequest {
action_id, action_id,
token, common: ActiveRequest {
start_time: self.current_time, token,
timeout, start_time: self.current_time,
timeout,
},
}, },
); );
} }
@ -373,8 +374,8 @@ pub mod std_mod {
pub fn check_for_timeouts(&mut self, time_stamp: &[u8]) -> Result<(), EcssTmtcError> { pub fn check_for_timeouts(&mut self, time_stamp: &[u8]) -> Result<(), EcssTmtcError> {
let mut timed_out_commands = alloc::vec::Vec::new(); let mut timed_out_commands = alloc::vec::Vec::new();
self.active_requests.for_each(|request_id, active_req| { self.active_requests.for_each(|request_id, active_req| {
let diff = self.current_time - active_req.start_time; let diff = self.current_time - active_req.common.start_time;
if diff.duration_absolute > active_req.timeout { if diff.duration_absolute > active_req.common.timeout {
self.handle_timeout(active_req, time_stamp); self.handle_timeout(active_req, time_stamp);
} }
timed_out_commands.push(*request_id); timed_out_commands.push(*request_id);
@ -391,11 +392,11 @@ pub mod std_mod {
/// error code. It supplies the configured request timeout in milliseconds as a [u64] /// error code. It supplies the configured request timeout in milliseconds as a [u64]
/// serialized in big-endian format as the failure data. /// serialized in big-endian format as the failure data.
pub fn handle_timeout(&self, active_request: &ActiveActionRequest, time_stamp: &[u8]) { pub fn handle_timeout(&self, active_request: &ActiveActionRequest, time_stamp: &[u8]) {
let timeout = active_request.timeout.as_millis() as u64; let timeout = active_request.common.timeout.as_millis() as u64;
let timeout_raw = timeout.to_be_bytes(); let timeout_raw = timeout.to_be_bytes();
self.verification_reporter self.verification_reporter
.completion_failure( .completion_failure(
active_request.token, active_request.common.token,
FailParams::new( FailParams::new(
time_stamp, time_stamp,
&self.user_hook.timeout_error_code(), &self.user_hook.timeout_error_code(),
@ -422,7 +423,7 @@ pub mod std_mod {
let fail_data_len = params.write_to_be_bytes(&mut self.fail_data_buf)?; let fail_data_len = params.write_to_be_bytes(&mut self.fail_data_buf)?;
self.verification_reporter self.verification_reporter
.completion_failure( .completion_failure(
active_req.token, active_req.common.token,
FailParams::new( FailParams::new(
time_stamp, time_stamp,
&error_code, &error_code,
@ -440,7 +441,7 @@ pub mod std_mod {
let fail_data_len = params.write_to_be_bytes(&mut self.fail_data_buf)?; let fail_data_len = params.write_to_be_bytes(&mut self.fail_data_buf)?;
self.verification_reporter self.verification_reporter
.step_failure( .step_failure(
active_req.token, active_req.common.token,
FailParamsWithStep::new( FailParamsWithStep::new(
time_stamp, time_stamp,
&EcssEnumU16::new(step), &EcssEnumU16::new(step),
@ -453,13 +454,13 @@ pub mod std_mod {
} }
ActionReplyPus::Completed => { ActionReplyPus::Completed => {
self.verification_reporter self.verification_reporter
.completion_success(active_req.token, time_stamp) .completion_success(active_req.common.token, time_stamp)
.map_err(|e| e.0)?; .map_err(|e| e.0)?;
true true
} }
ActionReplyPus::StepSuccess { step } => { ActionReplyPus::StepSuccess { step } => {
self.verification_reporter.step_success( self.verification_reporter.step_success(
&active_req.token, &active_req.common.token,
time_stamp, time_stamp,
EcssEnumU16::new(step), EcssEnumU16::new(step),
)?; )?;
@ -1008,4 +1009,9 @@ mod tests {
&timeout_param_raw, &timeout_param_raw,
); );
} }
#[test]
fn test_unrequested_reply() {
// TODO: Implement this test.
}
} }