mod basic;
mod kalman;
mod matrix;
pub use basic::BasicFilter;
pub use kalman::{KalmanConfiguration, KalmanFilter};
use crate::{port::Measurement, time::Duration, Clock};
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct FilterUpdate {
pub next_update: Option<core::time::Duration>,
pub mean_delay: Option<Duration>,
}
pub struct FilterEstimate {
pub offset_from_master: Duration,
pub mean_delay: Duration,
}
pub trait Filter {
type Config: Clone;
fn new(config: Self::Config) -> Self;
fn measurement<C: Clock>(&mut self, m: Measurement, clock: &mut C) -> FilterUpdate;
fn update<C: Clock>(&mut self, clock: &mut C) -> FilterUpdate;
fn demobilize<C: Clock>(self, clock: &mut C);
fn current_estimates(&self) -> FilterEstimate;
}