sat-rs/satrs-core/src/pus/scheduling.rs
2023-01-21 13:52:21 +01:00

60 lines
1.3 KiB
Rust

use crate::pool::StoreAddr;
use spacepackets::time::UnixTimestamp;
use std::collections::BTreeMap;
#[derive(Debug)]
pub struct PusScheduler {
tc_map: BTreeMap<UnixTimestamp, StoreAddr>,
current_time: UnixTimestamp,
enabled: bool,
}
impl PusScheduler {
pub fn new(init_current_time: UnixTimestamp) -> Self {
PusScheduler {
tc_map: Default::default(),
current_time: init_current_time,
enabled: true,
}
}
pub fn is_enabled(&self) -> bool {
self.enabled
}
pub fn enable(&mut self) {
self.enabled = true;
}
pub fn disable(&mut self) {
self.enabled = false;
}
pub fn reset(&mut self) {
self.enabled = false;
self.tc_map.clear();
}
pub fn update_time(&mut self, current_time: UnixTimestamp) {
self.current_time = current_time;
}
pub fn insert_tc(&mut self, time_stamp: UnixTimestamp, addr: StoreAddr) {
self.tc_map.insert(time_stamp, addr);
}
}
#[cfg(test)]
mod tests {
use crate::pus::scheduling::PusScheduler;
use spacepackets::time::UnixTimestamp;
#[test]
fn basic() {
let mut scheduler = PusScheduler::new(UnixTimestamp::new_only_seconds(0));
assert!(scheduler.is_enabled());
scheduler.disable();
assert!(!scheduler.is_enabled());
}
}