1typedef unsigned char uchar;
2typedef struct MonitorInfo MonitorInfo;
3typedef struct Timing Timing;
4typedef struct DetailedTiming DetailedTiming;
5
6typedef enum
7{
8 UNDEFINED,
9 DVI,
10 HDMI_A,
11 HDMI_B,
12 MDDI,
13 DISPLAY_PORT
14} Interface;
15
16typedef enum
17{
18 UNDEFINED_COLOR,
19 MONOCHROME,
20 RGB,
21 OTHER_COLOR
22} ColorType;
23
24typedef enum
25{
26 NO_STEREO,
27 FIELD_RIGHT,
28 FIELD_LEFT,
29 TWO_WAY_RIGHT_ON_EVEN,
30 TWO_WAY_LEFT_ON_EVEN,
31 FOUR_WAY_INTERLEAVED,
32 SIDE_BY_SIDE
33} StereoType;
34
35struct Timing
36{
37 int width;
38 int height;
39 int frequency;
40};
41
42struct DetailedTiming
43{
44 int pixel_clock;
45 int h_addr;
46 int h_blank;
47 int h_sync;
48 int h_front_porch;
49 int v_addr;
50 int v_blank;
51 int v_sync;
52 int v_front_porch;
53 int width_mm;
54 int height_mm;
55 int right_border;
56 int top_border;
57 int interlaced;
58 StereoType stereo;
59
60 int digital_sync;
61 union
62 {
63 struct
64 {
65 int bipolar;
66 int serrations;
67 int sync_on_green;
68 } analog;
69
70 struct
71 {
72 int composite;
73 int serrations;
74 int negative_vsync;
75 int negative_hsync;
76 } digital;
77 } ad;
78};
79
80struct MonitorInfo
81{
82 int checksum;
83 char manufacturer_code[4];
84 int product_code;
85 unsigned int serial_number;
86
87 int production_week; /* -1 if not specified */
88 int production_year; /* -1 if not specified */
89 int model_year; /* -1 if not specified */
90
91 int major_version;
92 int minor_version;
93
94 int is_digital;
95
96 union
97 {
98 struct
99 {
100 int bits_per_primary;
101 Interface interface;
102 int rgb444;
103 int ycrcb444;
104 int ycrcb422;
105 } digital;
106
107 struct
108 {
109 double video_signal_level;
110 double sync_signal_level;
111 double total_signal_level;
112
113 int blank_to_black;
114
115 int separate_hv_sync;
116 int composite_sync_on_h;
117 int composite_sync_on_green;
118 int serration_on_vsync;
119 ColorType color_type;
120 } analog;
121 } ad;
122
123 int width_mm; /* -1 if not specified */
124 int height_mm; /* -1 if not specified */
125 double aspect_ratio; /* -1.0 if not specififed */
126
127 double gamma; /* -1.0 if not specified */
128
129 int standby;
130 int suspend;
131 int active_off;
132
133 int srgb_is_standard;
134 int preferred_timing_includes_native;
135 int continuous_frequency;
136
137 double red_x;
138 double red_y;
139 double green_x;
140 double green_y;
141 double blue_x;
142 double blue_y;
143 double white_x;
144 double white_y;
145
146 Timing established[24]; /* Terminated by 0x0x0 */
147 Timing standard[8];
148
149 int n_detailed_timings;
150 DetailedTiming detailed_timings[4]; /* If monitor has a preferred
151 * mode, it is the first one
152 * (whether it has, is
153 * determined by the
154 * preferred_timing_includes
155 * bit.
156 */
157
158 /* Optional product description */
159 char dsc_serial_number[14];
160 char dsc_product_name[14];
161 char dsc_string[14]; /* Unspecified ASCII data */
162};
163
164MonitorInfo *decode_edid (const uchar *data);
165void dump_monitor_info (MonitorInfo *info);
166char * make_display_name (const char *output_name,
167 const MonitorInfo *info);
168