123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- /*
- * Copyright (c) 2022, the SerenityOS developers.
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
- #pragma once
- #include <AK/Types.h>
- namespace EDID::Definitions {
- struct [[gnu::packed]] StandardTimings {
- u8 horizontal_8_pixels;
- u8 ratio_and_refresh_rate;
- };
- struct [[gnu::packed]] DetailedTiming {
- u16 pixel_clock;
- u8 horizontal_addressable_pixels_low;
- u8 horizontal_blanking_pixels_low;
- u8 horizontal_addressable_and_blanking_pixels_high;
- u8 vertical_addressable_lines_low;
- u8 vertical_blanking_lines_low;
- u8 vertical_addressable_and_blanking_lines_high;
- u8 horizontal_front_porch_pixels_low;
- u8 horizontal_sync_pulse_width_pixels_low;
- u8 vertical_front_porch_and_sync_pulse_width_lines_low;
- u8 horizontal_and_vertical_front_porch_sync_pulse_width_high;
- u8 horizontal_addressable_image_size_mm_low;
- u8 vertical_addressable_image_size_mm_low;
- u8 horizontal_vertical_addressable_image_size_mm_high;
- u8 right_or_left_horizontal_border_pixels;
- u8 top_or_bottom_vertical_border_lines;
- u8 features;
- };
- enum class DisplayDescriptorTag : u8 {
- ManufacturerSpecified_First = 0x0,
- ManufacturerSpecified_Last = 0xf,
- Dummy = 0x10,
- EstablishedTimings3 = 0xf7,
- CVTTimingCodes = 0xf8,
- DisplayColorManagementData = 0xf9,
- StandardTimingIdentifications = 0xfa,
- ColorPointData = 0xfb,
- DisplayProductName = 0xfc,
- DisplayRangeLimits = 0xfd,
- AlphanumericDataString = 0xfe,
- DisplayProductSerialNumber = 0xff
- };
- struct [[gnu::packed]] DisplayDescriptor {
- u16 zero;
- u8 reserved1;
- u8 tag;
- u8 reserved2;
- union {
- struct [[gnu::packed]] {
- u8 ascii_name[13];
- } display_product_name;
- struct [[gnu::packed]] {
- u8 ascii_str[13];
- } display_product_serial_number;
- struct [[gnu::packed]] {
- u8 revision;
- u8 dmt_bits[6];
- u8 reserved[6];
- } established_timings3;
- struct [[gnu::packed]] {
- u8 version;
- u8 cvt[4][3];
- } coordinated_video_timings;
- };
- };
- static_assert(sizeof(DetailedTiming) == sizeof(DisplayDescriptor));
- struct [[gnu::packed]] EDID {
- u64 header;
- struct [[gnu::packed]] {
- u16 manufacturer_id;
- u16 product_code;
- u32 serial_number;
- u8 week_of_manufacture;
- u8 year_of_manufacture;
- } vendor;
- struct [[gnu::packed]] {
- u8 version;
- u8 revision;
- } version;
- struct [[gnu::packed]] {
- u8 video_input_definition;
- u8 horizontal_size_or_aspect_ratio;
- u8 vertical_size_or_aspect_ratio;
- u8 display_transfer_characteristics;
- u8 feature_support;
- } basic_display_parameters;
- struct [[gnu::packed]] {
- u8 red_green_low_order_bits;
- u8 blue_white_low_order_bits;
- u8 red_x_high_order_bits;
- u8 red_y_high_order_bits;
- u8 green_x_high_order_bits;
- u8 green_y_high_order_bits;
- u8 blue_x_high_order_bits;
- u8 blue_y_high_order_bits;
- u8 white_x_high_order_bits;
- u8 white_y_high_order_bits;
- } color_characteristics;
- struct [[gnu::packed]] {
- u8 timings_1;
- u8 timings_2;
- u8 manufacturer_reserved;
- } established_timings;
- StandardTimings standard_timings[8];
- union {
- DetailedTiming detailed_timing;
- DisplayDescriptor display_descriptor;
- } detailed_timing_or_display_descriptors[4];
- u8 extension_block_count;
- u8 checksum;
- };
- enum class ExtensionBlockTag : u8 {
- CEA_861 = 0x2,
- VideoTimingBlock = 0x10,
- DisplayInformation = 0x40,
- LocalizedString = 0x50,
- DigitalPacketVideoLink = 0x60,
- ExtensionBlockMap = 0xf0,
- ManufacturerDefined = 0xff
- };
- struct [[gnu::packed]] ExtensionBlock {
- u8 tag;
- union {
- struct [[gnu::packed]] {
- u8 block_tags[126];
- } map;
- struct [[gnu::packed]] {
- u8 revision;
- u8 bytes[125];
- } block;
- struct [[gnu::packed]] {
- u8 revision;
- u8 dtd_start_offset;
- u8 flags;
- union {
- u8 bytes[123];
- };
- } cea861extension;
- };
- u8 checksum;
- };
- static_assert(AssertSize<ExtensionBlock, 128>());
- }
|