pub struct V2ipDecoderReason(/* private fields */);Expand description
Why a decoder reports the state it does.
The primary cause only. Several causes can be true at once, and which of
them lands here is a fixed priority order in the firmware that the numbering
does not express: these values are identities, not ranks, and comparing or
ordering them says nothing. Ask V2ipDecoderReport::has_cause whether a
particular cause applies - a test against this field answers “is this the
one that won” instead, which is a different question.
Firmware adds causes, so the wire value is carried as it arrived: folding an unrecognised one onto a named cause would report a fault this library invented. Appending one cannot reorder the existing priorities.
Implementations§
Source§impl V2ipDecoderReason
impl V2ipDecoderReason
Sourcepub const NO_PACKETS: Self
pub const NO_PACKETS: Self
No packets are arriving.
Sourcepub const PACKETS_DEGRADED: Self
pub const PACKETS_DEGRADED: Self
Packets are arriving, degraded.
Sourcepub const FORMAT_MISMATCH: Self
pub const FORMAT_MISMATCH: Self
The recovered format is not the one the sink is configured for.
Sourcepub const FORMAT_REJECTED: Self
pub const FORMAT_REJECTED: Self
The configured output format was refused.
Sourcepub const DECODER_BLOCKED: Self
pub const DECODER_BLOCKED: Self
The converter watchdog is holding the stream back.
Sourcepub const SWITCH_PENDING: Self
pub const SWITCH_PENDING: Self
A source switch is in progress: a step in an operation someone asked for, rather than a fault.
Sourcepub const PTP_UNLOCKED: Self
pub const PTP_UNLOCKED: Self
PTP is unlocked. That costs audio alone; the picture is unaffected.
Sourcepub const TX_BRIDGE_UNLOCKED: Self
pub const TX_BRIDGE_UNLOCKED: Self
The pipeline is rebuilding after the HDMI transmitter stayed unlocked.
The picture is down, and has been for five seconds before this can
appear: the sender debounces the unlocked reading for that long, so
this never reports a transient. Unlike Self::SWITCH_PENDING nobody
asked for it.
The debounce restarts each time it elapses, so this holding across reports is a restart loop rather than one event, and that is what to escalate on.
It sits near the bottom of the priority order, below every input-side
cause, so a rebuilding pipeline names one of those in
V2ipDecoderReport::reason and carries this in
V2ipDecoderReport::flags alone - always, rather than briefly.
It is evaluated only while no format change is in progress. Across a
switch it holds its previous value and clears on the first reading
after the change settles, which V2ipDecoderReport::updates cannot
distinguish: a value carried forward is still a stored reading.
Sourcepub const IDLE: Self
pub const IDLE: Self
The sink is configured but not expecting a stream.
Effectively unreachable on current firmware: the sink derives its
expectation from the channel’s running state, which the pipeline
re-establishes within about one 10ms poll, so the window this describes
closes before a report goes out. A sink that has been switched off
reports Self::NO_PACKETS indefinitely instead, indistinguishable
from one whose source is dead. Nothing on this wire says a sink was
switched off deliberately - the block carries no enablement field at
all, so a sink that is off and a sink that should be receiving and is
not produce the same reading. Enablement comes from V2IP_DEVICE_CFG
or the device’s HTTP status, and only whatever issued the instruction
knows it was deliberate.
Trait Implementations§
Source§impl Clone for V2ipDecoderReason
impl Clone for V2ipDecoderReason
Source§fn clone(&self) -> V2ipDecoderReason
fn clone(&self) -> V2ipDecoderReason
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more