1 | typedef unsigned char uchar; |
2 | typedef struct MonitorInfo MonitorInfo; |
3 | typedef struct Timing Timing; |
4 | typedef struct DetailedTiming DetailedTiming; |
5 | |
6 | typedef enum |
7 | { |
8 | UNDEFINED, |
9 | DVI, |
10 | HDMI_A, |
11 | HDMI_B, |
12 | MDDI, |
13 | DISPLAY_PORT |
14 | } Interface; |
15 | |
16 | typedef enum |
17 | { |
18 | UNDEFINED_COLOR, |
19 | MONOCHROME, |
20 | RGB, |
21 | OTHER_COLOR |
22 | } ColorType; |
23 | |
24 | typedef 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 | |
35 | struct Timing |
36 | { |
37 | int width; |
38 | int height; |
39 | int frequency; |
40 | }; |
41 | |
42 | struct 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 | |
80 | struct 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 | |
164 | MonitorInfo *decode_edid (const uchar *data); |
165 | void dump_monitor_info (MonitorInfo *info); |
166 | char * make_display_name (const char *output_name, |
167 | const MonitorInfo *info); |
168 | |