nuclear@0: #include nuclear@0: #include nuclear@0: nuclear@0: /* nuclear@0: * Copyright 2007 Red Hat, Inc. nuclear@0: * nuclear@0: * Permission is hereby granted, free of charge, to any person obtaining a nuclear@0: * copy of this software and associated documentation files (the "Software"), nuclear@0: * to deal in the Software without restriction, including without limitation nuclear@0: * on the rights to use, copy, modify, merge, publish, distribute, sub nuclear@0: * license, and/or sell copies of the Software, and to permit persons to whom nuclear@0: * the Software is furnished to do so, subject to the following conditions: nuclear@0: * nuclear@0: * The above copyright notice and this permission notice (including the next nuclear@0: * paragraph) shall be included in all copies or substantial portions of the nuclear@0: * Software. nuclear@0: * nuclear@0: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR nuclear@0: * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, nuclear@0: * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL nuclear@0: * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER nuclear@0: * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN nuclear@0: * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. nuclear@0: */ nuclear@0: nuclear@0: /* Author: Soren Sandmann */ nuclear@0: nuclear@0: typedef enum { nuclear@0: UNDEFINED, nuclear@0: DVI, nuclear@0: HDMI_A, nuclear@0: HDMI_B, nuclear@0: MDDI, nuclear@0: DISPLAY_PORT nuclear@0: } Interface; nuclear@0: nuclear@0: typedef enum { nuclear@0: UNDEFINED_COLOR, nuclear@0: MONOCHROME, nuclear@0: RGB, nuclear@0: OTHER_COLOR nuclear@0: } ColorType; nuclear@0: nuclear@0: typedef enum { nuclear@0: NO_STEREO, nuclear@0: FIELD_RIGHT, nuclear@0: FIELD_LEFT, nuclear@0: TWO_WAY_RIGHT_ON_EVEN, nuclear@0: TWO_WAY_LEFT_ON_EVEN, nuclear@0: FOUR_WAY_INTERLEAVED, nuclear@0: SIDE_BY_SIDE nuclear@0: } StereoType; nuclear@0: nuclear@0: struct Timing { nuclear@0: int width; nuclear@0: int height; nuclear@0: int frequency; nuclear@0: }; nuclear@0: nuclear@0: struct DetailedTiming { nuclear@0: int pixel_clock; nuclear@0: int h_addr; nuclear@0: int h_blank; nuclear@0: int h_sync; nuclear@0: int h_front_porch; nuclear@0: int v_addr; nuclear@0: int v_blank; nuclear@0: int v_sync; nuclear@0: int v_front_porch; nuclear@0: int width_mm; nuclear@0: int height_mm; nuclear@0: int right_border; nuclear@0: int top_border; nuclear@0: int interlaced; nuclear@0: StereoType stereo; nuclear@0: nuclear@0: int digital_sync; nuclear@0: union { nuclear@0: struct { nuclear@0: int bipolar; nuclear@0: int serrations; nuclear@0: int sync_on_green; nuclear@0: } analog; nuclear@0: nuclear@0: struct { nuclear@0: int composite; nuclear@0: int serrations; nuclear@0: int negative_vsync; nuclear@0: int negative_hsync; nuclear@0: } digital; nuclear@0: } connector; nuclear@0: }; nuclear@0: nuclear@0: struct MonitorInfo { nuclear@0: int checksum; nuclear@0: char manufacturer_code[4]; nuclear@0: int product_code; nuclear@0: unsigned int serial_number; nuclear@0: nuclear@0: int production_week; /* -1 if not specified */ nuclear@0: int production_year; /* -1 if not specified */ nuclear@0: int model_year; /* -1 if not specified */ nuclear@0: nuclear@0: int major_version; nuclear@0: int minor_version; nuclear@0: nuclear@0: int is_digital; nuclear@0: nuclear@0: union { nuclear@0: struct { nuclear@0: int bits_per_primary; nuclear@0: Interface interface; nuclear@0: int rgb444; nuclear@0: int ycrcb444; nuclear@0: int ycrcb422; nuclear@0: } digital; nuclear@0: nuclear@0: struct { nuclear@0: double video_signal_level; nuclear@0: double sync_signal_level; nuclear@0: double total_signal_level; nuclear@0: nuclear@0: int blank_to_black; nuclear@0: nuclear@0: int separate_hv_sync; nuclear@0: int composite_sync_on_h; nuclear@0: int composite_sync_on_green; nuclear@0: int serration_on_vsync; nuclear@0: ColorType color_type; nuclear@0: } analog; nuclear@0: } connector; nuclear@0: nuclear@0: int width_mm; /* -1 if not specified */ nuclear@0: int height_mm; /* -1 if not specified */ nuclear@0: double aspect_ratio; /* -1.0 if not specififed */ nuclear@0: nuclear@0: double gamma; /* -1.0 if not specified */ nuclear@0: nuclear@0: int standby; nuclear@0: int suspend; nuclear@0: int active_off; nuclear@0: nuclear@0: int srgb_is_standard; nuclear@0: int preferred_timing_includes_native; nuclear@0: int continuous_frequency; nuclear@0: nuclear@0: double red_x; nuclear@0: double red_y; nuclear@0: double green_x; nuclear@0: double green_y; nuclear@0: double blue_x; nuclear@0: double blue_y; nuclear@0: double white_x; nuclear@0: double white_y; nuclear@0: nuclear@0: Timing established[24]; /* Terminated by 0x0x0 */ nuclear@0: Timing standard[8]; nuclear@0: nuclear@0: int n_detailed_timings; nuclear@0: DetailedTiming detailed_timings[4]; /* If monitor has a preferred nuclear@0: * mode, it is the first one nuclear@0: * (whether it has, is nuclear@0: * determined by the nuclear@0: * preferred_timing_includes nuclear@0: * bit. nuclear@0: */ nuclear@0: nuclear@0: /* Optional product description */ nuclear@0: char dsc_serial_number[14]; nuclear@0: char dsc_product_name[14]; nuclear@0: char dsc_string[14]; /* Unspecified ASCII data */ nuclear@0: }; nuclear@0: nuclear@0: MonitorInfo * read_edid_data(Display * disp, RROutput id);