rust_gnc/control/
failsafe.rs1#[derive(Debug, PartialEq, Clone, Copy)]
6pub enum FailsafeLevel {
7 None, Land, Kill, }
12
13pub struct FailsafeMonitor {
14 last_heartbeat: f32, timeout_threshold: f32,
16}
17
18impl FailsafeMonitor {
19 pub fn new(timeout: f32) -> Self {
20 Self {
21 last_heartbeat: 0.0,
22 timeout_threshold: timeout,
23 }
24 }
25
26 pub fn check(&self, current_time: f32) -> FailsafeLevel {
28 if current_time - self.last_heartbeat > self.timeout_threshold {
29 FailsafeLevel::Land
30 } else {
31 FailsafeLevel::None
32 }
33 }
34
35 pub fn feed_heartbeat(&mut self, current_time: f32) {
36 self.last_heartbeat = current_time;
37 }
38}