use common active request type
This commit is contained in:
parent
d3ad6cf96a
commit
c6f2dde138
@ -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.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user