#[non_exhaustive]pub enum EdidWarning {
Show 14 variants
UnknownExtension(u8),
DescriptorParseFailed,
InvalidManufacturerId,
MalformedDataBlock,
DtdSlotTooShort,
DtdPixelClockOverflow,
ExtensionBlockLimitReached {
declared: usize,
limit: usize,
},
DisplayIdVersionUnknown(u8),
DisplayIdExtensionCountMismatch {
declared: u8,
found: u8,
},
DisplayIdChecksumMismatch,
DisplayIdSectionBytesOutOfRange(u8),
UnknownTransferEncoding(u8),
UnsupportedV2BlockRevision {
tag: u8,
revision: u8,
},
SizeMismatch {
expected: usize,
actual: usize,
},
}Expand description
A non-fatal condition encountered while parsing or processing an EDID block.
Warnings are collected into ParsedEdid::warnings (from the parser)
and into DisplayCapabilities::warnings (from handlers).
In alloc/std builds each entry is a ParseWarning; use downcast_ref to recover the
concrete type. In bare no_std builds this enum is used directly.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
UnknownExtension(u8)
An extension block with an unrecognised tag was encountered. The inner value is the tag byte.
DescriptorParseFailed
A 18-byte descriptor could not be decoded.
InvalidManufacturerId
The manufacturer ID bytes do not encode a valid PNP ID.
Each of the three 5-bit fields must be in the range 1–26 (A–Z). Values of 0 or
27–31 indicate a corrupted or unprogrammed EEPROM.
DisplayCapabilities::manufacturer
is left as None.
MalformedDataBlock
A data block inside an extension block declared a length that extends past the end of the data block collection. Remaining data blocks in the collection are skipped.
DtdSlotTooShort
A Detailed Timing Descriptor slot was skipped because the byte slice passed to the decoder was shorter than the required 18 bytes.
This indicates a malformed extension block that claimed to contain a DTD but did not supply enough data.
DtdPixelClockOverflow
A Detailed Timing Descriptor slot was skipped because the pixel clock value would overflow during refresh rate calculation.
This indicates a malformed or corrupted EDID: valid pixel clocks are at most
a few hundred MHz (fits comfortably in a u32 after scaling by 10 000).
ExtensionBlockLimitReached
The number of extension blocks declared in the base block exceeds the parser’s
safety limit. Only the first limit blocks were parsed; the rest were ignored.
Real displays have at most a handful of extension blocks. A very large
extension_count most likely indicates a malformed or hostile EDID.
Fields
DisplayIdVersionUnknown(u8)
A DisplayID extension block carries an unrecognised version byte.
The inner value is the version byte found at offset 1 of the extension block. The block is skipped; other extension blocks are processed normally.
DisplayIdExtensionCountMismatch
The extension count declared in a DisplayID section header does not match the
number of 0x70-tagged blocks actually present in the EDID stream.
The DisplayID section is processed with whichever fragments are available.
Fields
DisplayIdChecksumMismatch
The DisplayID section checksum byte does not make the section sum to zero.
The checksum covers the three-byte section header plus all data block bytes; the byte immediately following them must bring the running total to zero mod 256. Parsing continues with whatever data is present in the fragment.
DisplayIdSectionBytesOutOfRange(u8)
The section_byte_count field in the DisplayID section header is too large to fit
within the 128-byte extension block.
A valid DisplayID section holds at most 122 data bytes (bytes 4–125), with the
checksum at byte 126. A larger section_byte_count places the checksum outside
the block. The section is still parsed using the clamped available bytes.
UnknownTransferEncoding(u8)
A DisplayID Transfer Characteristics block carries a reserved encoding byte.
Bits 7:6 of the first payload byte encode the sample bit depth; value 0b11 is
reserved. The inner value is the raw 2-bit field. The block is skipped.
UnsupportedV2BlockRevision
A DisplayID 2.x data block carries a revision byte the spec marks as reserved.
The block is parsed anyway with the fields defined for revision 0; consumers may see incorrect values if the revision actually changed the wire format.
Fields
SizeMismatch
The byte slice length does not match the size implied by the extension count.
The EDID header declares extension_count extension blocks, so the expected
size is (1 + extension_count) × 128 bytes. Extra bytes are ignored but may
indicate a driver bug, a KVM device, or a hotplug race.
Fields
actual: usizeThe actual length of the byte slice passed to crate::parse_edid.
Trait Implementations§
Source§impl Clone for EdidWarning
impl Clone for EdidWarning
Source§fn clone(&self) -> EdidWarning
fn clone(&self) -> EdidWarning
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for EdidWarning
Source§impl Debug for EdidWarning
impl Debug for EdidWarning
Source§impl Display for EdidWarning
impl Display for EdidWarning
impl Eq for EdidWarning
Source§impl Error for EdidWarning
impl Error for EdidWarning
1.30.0 · Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()