use display_types::cea861::hdmi_forum::HdmiForumFrl;
use crate::types::{FfeLevels, LtpRequests};
#[cfg(feature = "alloc")]
use crate::training::TrainingConfig;
#[cfg(feature = "alloc")]
use alloc::vec::Vec;
#[non_exhaustive]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TrainingEvent {
SourceTestConfigRead {
flt_no_timeout: bool,
},
FltReady {
after_polls: u32,
},
FltReadyTimeout {
polls: u32,
},
RateConfigured {
rate: HdmiForumFrl,
ffe_levels: FfeLevels,
},
LtpRequested {
requests: LtpRequests,
},
FfeRaised {
lane: u8,
level: u8,
},
UndefinedLtpRequest {
lane: u8,
value: u8,
in_use: bool,
},
TrainingPassed {
after_polls: u32,
},
RateLowered {
from: HdmiForumFrl,
to: HdmiForumFrl,
},
RatesExhausted,
TrainingTimeout {
polls: u32,
},
FrlStartWithRetrain,
RetrainRequested,
RetrainsExhausted {
retrains: u32,
},
FrlStart {
after_polls: u32,
},
FrlStartTimeout {
polls: u32,
},
NoTimeoutCapReached {
polls: u32,
},
ExitedToTmds,
ExitToTmdsFailed {
scdc: bool,
phy: bool,
},
}
#[cfg(feature = "alloc")]
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TrainingTrace {
pub rates: Vec<HdmiForumFrl>,
pub config: TrainingConfig,
pub events: Vec<TrainingEvent>,
}
#[cfg(feature = "alloc")]
impl TrainingTrace {
pub fn new(
rates: Vec<HdmiForumFrl>,
config: TrainingConfig,
events: Vec<TrainingEvent>,
) -> Self {
Self {
rates,
config,
events,
}
}
}