use serde::{Deserialize, Serialize};
pub mod selection;
pub use selection::*;
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub enum AtomicClockType {
#[default]
Cesium,
Rubidium,
Hydrogen,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub enum ClockSource {
#[default]
System,
GPS,
NTP,
PTP,
Atomic,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub enum RadioTimeStation {
#[default]
WWV,
WWVB,
DCF77,
MSF,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub enum SourceSelectionAlgorithm {
#[default]
BestQuality,
RoundRobin,
Priority,
}
#[derive(Debug, Clone, Default)]
pub struct SourceValidation {
pub enabled: bool,
}
#[derive(Debug, Clone, Default)]
pub struct SystemClockConfig {
pub use_system_time: bool,
}
#[derive(Debug, Clone, Default)]
pub struct TimeSource {
pub source_type: ClockSource,
pub address: Option<String>,
}
#[derive(Debug, Clone, Default)]
pub struct TimeSourceConfig {
pub source: ClockSource,
}
#[derive(Debug, Clone, Default)]
pub struct TimeSourceManager {
pub sources: Vec<TimeSource>,
}
#[derive(Debug, Clone)]
pub struct SourceManagementError;
impl std::fmt::Display for SourceManagementError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "Source management error")
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub enum CalibrationReference {
#[default]
GPS,
Atomic,
Network,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub enum CalibrationMethod {
#[default]
Linear,
Polynomial,
Adaptive,
}
#[derive(Debug, Clone, Default)]
pub struct ClockCalibration {
pub reference: CalibrationReference,
pub method: CalibrationMethod,
pub offset_ns: i64,
pub drift_ppm: f64,
}