optirs-tpu 0.3.1

OptiRS TPU coordination and pod management
Documentation
// Clock Sources Module

use crate::pod_coordination::types::*;
use serde::{Deserialize, Serialize};

pub mod authentication;
pub mod management;
pub mod monitoring;
pub mod radio;
pub mod selection;
pub mod time_sources;

pub use authentication::*;
pub use management::*;
pub use monitoring::*;
pub use radio::*;
pub use selection::*;
pub use time_sources::*;

#[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,
}

#[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,
}