* Copyright 2003, Thomas Kurschel. All Rights Reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _EDID_H
#define _EDID_H
#include "edid_raw.h"
typedef struct {
char manufacturer[4];
uint16 prod_id;
uint32 serial;
uint8 week;
uint16 year;
} edid1_vendor;
typedef struct {
uint8 version;
uint8 revision;
} edid1_version;
typedef struct {
uint8 input_voltage;
bool setup;
bool sep_sync;
bool comp_sync;
bool sync_on_green;
bool sync_serr;
} edid1_analog_params;
typedef struct {
uint8 bit_depth;
uint8 interface;
} edid1_digital_params;
typedef struct {
uint8 input_type;
edid1_analog_params analog_params;
edid1_digital_params digital_params;
uint8 h_size;
uint8 v_size;
uint8 gamma;
BBITFIELD8_7 (
dpms_standby : 1,
dpms_suspend : 1,
dpms_off : 1,
display_type : 2,
std_colour_space : 1,
preferred_timing_mode : 1,
gtf_supported : 1
);
uint16 red_x;
uint16 red_y;
uint16 green_x;
uint16 green_y;
uint16 blue_x;
uint16 blue_y;
uint16 white_x;
uint16 white_y;
} edid1_display;
typedef struct {
uint16 h_size;
uint16 v_size;
uint16 id;
uint8 ratio;
uint8 refresh;
} edid1_std_timing;
typedef struct {
uint8 index;
uint16 white_x;
uint16 white_y;
uint8 gamma;
} edid1_whitepoint;
typedef struct {
uint16 pixel_clock;
uint16 h_active;
uint16 h_blank;
uint16 v_active;
uint16 v_blank;
uint16 h_sync_off;
uint16 h_sync_width;
uint16 v_sync_off;
uint16 v_sync_width;
uint16 h_size;
uint16 v_size;
uint16 h_border;
uint16 v_border;
BBITFIELD8_4 (
interlaced : 1,
stereo : 2,
sync : 2,
misc : 2
);
} edid1_detailed_timing;
typedef struct {
uint8 monitor_desc_type;
union {
char serial_number[EDID1_EXTRA_STRING_LEN];
char ascii_data[EDID1_EXTRA_STRING_LEN];
edid1_monitor_range monitor_range;
char monitor_name[EDID1_EXTRA_STRING_LEN];
edid1_whitepoint whitepoint[EDID1_NUM_EXTRA_WHITEPOINTS];
edid1_std_timing std_timing[EDID1_NUM_EXTRA_STD_TIMING];
edid1_detailed_timing detailed_timing;
} data;
} edid1_detailed_monitor;
typedef struct cta_info {
uint8 tag;
uint8 revision;
uint8 num_native_detailed;
bool ycbcr422_supported;
bool ycbcr444_supported;
bool audio_supported;
bool underscan;
edid1_detailed_timing detailed_timing[6];
uint8 num_data_blocks;
cta_data_block data_blocks[8];
} cta_info;
typedef struct displayid_info {
uint8 tag;
uint8 version;
uint8 extension_count;
} displayid_info;
typedef struct edid1_info {
edid1_vendor vendor;
edid1_version version;
edid1_display display;
edid1_established_timing established_timing;
edid1_std_timing std_timing[EDID1_NUM_STD_TIMING];
edid1_detailed_monitor detailed_monitor[EDID1_NUM_DETAILED_MONITOR_DESC];
uint8 num_sections;
cta_info cta_block;
displayid_info displayid_block;
} edid1_info;
#define EDID_VERSION_1 1
#ifdef __cplusplus
extern "C" {
#endif
void edid_decode(edid1_info *edid, const edid1_raw *raw);
void edid_dump(edid1_info *edid);
#ifdef __cplusplus
}
#endif
#endif