wrote some docs

This commit is contained in:
Robin Müller 2023-09-10 20:53:12 +02:00
parent 609b3c11b1
commit 6c47efc244
Signed by: muellerr
GPG Key ID: A649FB78196E3849

View File

@ -7,6 +7,8 @@ use spacepackets::{
util::UnsignedByteField, util::UnsignedByteField,
}; };
#[cfg(feature = "alloc")]
use alloc::boxed::Box;
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -14,6 +16,64 @@ use serde::{Deserialize, Serialize};
pub mod dest; pub mod dest;
pub mod user; pub mod user;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum EntityType {
Sending,
Receiving,
}
/// Generic abstraction for a check timer which has different functionality depending on whether
/// the using entity is the sending entity or the receiving entity for the unacknowledged
/// transmission mode.
///
/// For the sending entity, this timer determines the expiry period for declaring a check limit
/// fault after sending an EOF PDU with requested closure. This allows a timeout of the
/// transfer.
///
/// For the receiving entity, this timer determines the expiry period for incrementing a check
/// counter after an EOF PDU is received for an incomplete file transfer. This allows out-of-order
/// reception of file data PDUs and EOF PDUs.
pub trait CheckTimerProvider {
fn has_expired(&self) -> bool;
}
#[cfg(feature = "alloc")]
pub trait CheckTimerCreator {
fn get_check_limit_provider(
local_id: &UnsignedByteField,
remote_id: &UnsignedByteField,
entity_type: EntityType,
) -> Box<dyn CheckTimerProvider>;
}
#[cfg(feature = "std")]
pub struct StdCheckTimer {
expiry_time_seconds: u64,
start_time: std::time::Instant
}
#[cfg(feature = "std")]
impl StdCheckTimer {
pub fn new(expiry_time_seconds: u64) -> Self {
Self {
expiry_time_seconds,
start_time: std::time::Instant::now()
}
}
}
#[cfg(feature = "std")]
impl CheckTimerProvider for StdCheckTimer {
fn has_expired(&self) -> bool {
let elapsed_time = self.start_time.elapsed();
if elapsed_time.as_secs() > self.expiry_time_seconds {
return true;
}
false
}
}
#[derive(Debug)] #[derive(Debug)]
pub struct RemoteEntityConfig { pub struct RemoteEntityConfig {
pub entity_id: UnsignedByteField, pub entity_id: UnsignedByteField,
@ -22,6 +82,11 @@ pub struct RemoteEntityConfig {
pub crc_on_transmission_by_default: bool, pub crc_on_transmission_by_default: bool,
pub default_transmission_mode: TransmissionMode, pub default_transmission_mode: TransmissionMode,
pub default_crc_type: ChecksumType, pub default_crc_type: ChecksumType,
pub check_limit: u32,
}
pub trait RemoteEntityConfigProvider {
fn get_remote_config(&self, remote_id: &UnsignedByteField) -> Option<&RemoteEntityConfig>;
} }
#[derive(Debug, PartialEq, Eq, Copy, Clone)] #[derive(Debug, PartialEq, Eq, Copy, Clone)]