Skip to main content

TrainingError

Enum TrainingError 

Source
#[non_exhaustive]
pub enum TrainingError<ScdcErr, PhyErr> {
#[non_exhaustive]
Scdc { error: ScdcErr, exit: TmdsExit<ScdcErr, PhyErr>, },
#[non_exhaustive]
Phy { error: PhyErr, exit: TmdsExit<ScdcErr, PhyErr>, },
#[non_exhaustive]
ExitFailed { reason: FallbackReason, error: ExitError<ScdcErr, PhyErr>, },
#[non_exhaustive]
InvalidRates { index: usize, rate: HdmiForumFrl, }, NoRates, }
Expand description

Hard error that terminated a training attempt.

Distinct from TrainingOutcome::FallbackRequired: this means something failed — an SCDC or PHY operation, or a rate list the procedure cannot run (InvalidRates, NoRates) — not that the link simply did not train.

After an SCDC or PHY error, plumbob performs LTS:L, returning both ends to TMDS as after a fallback, unless TrainingConfig::exit_to_tmds_on_error is off or the sink had set FLT_no_timeout (the link is then held for the test equipment, as with TrainingOutcome::NoTimeoutHold). exit says what happened. When LTS:L itself fails after a fallback, the error is ExitFailed.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

#[non_exhaustive]
Scdc

The ScdcClient returned an error.

Fields

This variant is marked as non-exhaustive
Non-exhaustive enum variants could have additional fields added in future. Therefore, non-exhaustive enum variants cannot be constructed in external crates and cannot be matched against.
§error: ScdcErr

The error.

§exit: TmdsExit<ScdcErr, PhyErr>

LTS:L after the error.

§

#[non_exhaustive]
Phy

The PHY returned an error.

Fields

This variant is marked as non-exhaustive
Non-exhaustive enum variants could have additional fields added in future. Therefore, non-exhaustive enum variants cannot be constructed in external crates and cannot be matched against.
§error: PhyErr

The error.

§exit: TmdsExit<ScdcErr, PhyErr>

LTS:L after the error.

§

#[non_exhaustive]
ExitFailed

The attempt fell back for reason, and LTS:L then failed.

Fields

This variant is marked as non-exhaustive
Non-exhaustive enum variants could have additional fields added in future. Therefore, non-exhaustive enum variants cannot be constructed in external crates and cannot be matched against.
§reason: FallbackReason

Why the attempt fell back.

§error: ExitError<ScdcErr, PhyErr>

LTS:L’s errors.

§

#[non_exhaustive]
InvalidRates

The rate list cannot be trained over, so nothing was done: no SCDC or PHY operation was performed. Every rate must be an FRL rate (not NotSupported), and each must be strictly lower than the one before it, because LTS:4 steps down.

Fields

This variant is marked as non-exhaustive
Non-exhaustive enum variants could have additional fields added in future. Therefore, non-exhaustive enum variants cannot be constructed in external crates and cannot be matched against.
§index: usize

The position of the first offending rate in the list.

§rate: HdmiForumFrl

That rate.

§

NoRates

The rate list is empty, so there is nothing to train at and nothing was done: no SCDC or PHY operation was performed, and the link is as it was. A caller with no FRL rate to try (a sink without FRL, for example) does not train; to take down an earlier FRL link it calls FrlTrainer::exit_to_tmds.

Trait Implementations§

Source§

impl<ScdcErr, PhyErr> Clone for TrainingError<ScdcErr, PhyErr>
where ScdcErr: Clone, PhyErr: Clone,

Source§

fn clone(&self) -> TrainingError<ScdcErr, PhyErr>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<ScdcErr, PhyErr> Copy for TrainingError<ScdcErr, PhyErr>
where ScdcErr: Copy, PhyErr: Copy,

Source§

impl<ScdcErr, PhyErr> Debug for TrainingError<ScdcErr, PhyErr>
where ScdcErr: Debug, PhyErr: Debug,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl<ScdcErr, PhyErr> Eq for TrainingError<ScdcErr, PhyErr>
where ScdcErr: Eq, PhyErr: Eq,

Source§

impl<ScdcErr, PhyErr> PartialEq for TrainingError<ScdcErr, PhyErr>
where ScdcErr: PartialEq, PhyErr: PartialEq,

Source§

fn eq(&self, other: &TrainingError<ScdcErr, PhyErr>) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl<ScdcErr, PhyErr> StructuralPartialEq for TrainingError<ScdcErr, PhyErr>
where ScdcErr: PartialEq, PhyErr: PartialEq,

Auto Trait Implementations§

§

impl<ScdcErr, PhyErr> Freeze for TrainingError<ScdcErr, PhyErr>
where ScdcErr: Freeze, TmdsExit<ScdcErr, PhyErr>: Freeze, PhyErr: Freeze, ExitError<ScdcErr, PhyErr>: Freeze,

§

impl<ScdcErr, PhyErr> RefUnwindSafe for TrainingError<ScdcErr, PhyErr>
where ScdcErr: RefUnwindSafe, TmdsExit<ScdcErr, PhyErr>: RefUnwindSafe, PhyErr: RefUnwindSafe, ExitError<ScdcErr, PhyErr>: RefUnwindSafe,

§

impl<ScdcErr, PhyErr> Send for TrainingError<ScdcErr, PhyErr>
where ScdcErr: Send, TmdsExit<ScdcErr, PhyErr>: Send, PhyErr: Send, ExitError<ScdcErr, PhyErr>: Send,

§

impl<ScdcErr, PhyErr> Sync for TrainingError<ScdcErr, PhyErr>
where ScdcErr: Sync, TmdsExit<ScdcErr, PhyErr>: Sync, PhyErr: Sync, ExitError<ScdcErr, PhyErr>: Sync,

§

impl<ScdcErr, PhyErr> Unpin for TrainingError<ScdcErr, PhyErr>
where ScdcErr: Unpin, TmdsExit<ScdcErr, PhyErr>: Unpin, PhyErr: Unpin, ExitError<ScdcErr, PhyErr>: Unpin,

§

impl<ScdcErr, PhyErr> UnsafeUnpin for TrainingError<ScdcErr, PhyErr>
where ScdcErr: UnsafeUnpin, TmdsExit<ScdcErr, PhyErr>: UnsafeUnpin, PhyErr: UnsafeUnpin, ExitError<ScdcErr, PhyErr>: UnsafeUnpin,

§

impl<ScdcErr, PhyErr> UnwindSafe for TrainingError<ScdcErr, PhyErr>
where ScdcErr: UnwindSafe, TmdsExit<ScdcErr, PhyErr>: UnwindSafe, PhyErr: UnwindSafe, ExitError<ScdcErr, PhyErr>: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.