Skip to main content

EdidWarning

Enum EdidWarning 

Source
#[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
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.
§

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

§declared: usize

The value of extension_count as declared in the base block.

§limit: usize

The maximum number of extension blocks the parser will process.

§

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

§declared: u8

Extension count as declared in the DisplayID section header.

§found: u8

Actual number of continuation blocks found (i.e. total 0x70 blocks − 1).

§

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

§tag: u8

Block tag byte (first byte of the 3-byte data block header).

§revision: u8

Revision byte (second byte of the 3-byte data block header) as found.

§

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

§expected: usize

The size implied by the extension count: (1 + extension_count) × 128.

§actual: usize

The actual length of the byte slice passed to crate::parse_edid.

Trait Implementations§

Source§

impl Clone for EdidWarning

Source§

fn clone(&self) -> EdidWarning

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 Copy for EdidWarning

Source§

impl Debug for EdidWarning

Source§

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

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

impl Display for EdidWarning

Source§

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

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

impl Eq for EdidWarning

Source§

impl Error for EdidWarning

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0:

use the Display impl or to_string()

1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl PartialEq for EdidWarning

Source§

fn eq(&self, other: &EdidWarning) -> bool

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

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

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for EdidWarning

Auto Trait Implementations§

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> ExtensionData for T
where T: Any + Debug + Send + Sync,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Returns self as &dyn Any to enable downcasting.
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.