Chameleon

Chameleon Svn Source Tree

Root/branches/slice/i386/modules/Resolution/edid.h

1/*
2 * edid.h
3 *
4 *
5 * Created by Evan Lojewski on 12/1/09.
6 * Copyright 2009. All rights reserved.
7 *
8 */
9//#ifndef __EDID_H__
10//#define __EDID_H__
11
12
13#include "libsaio.h"
14
15#define EDID_BLOCK_SIZE128
16#define EDID_V1_BLOCKS_TO_GO_OFFSET 126
17//Slice - some more info aabout EDID
18#define EDID_LENGTH0x80
19#define EDID_HEADER0x00
20#define EDID_HEADER_END0x07
21
22#define ID_MANUFACTURER_NAME0x08
23#define ID_MANUFACTURER_NAME_END0x09
24#define ID_MODEL0x0a
25
26#define ID_SERIAL_NUMBER0x0c
27
28#define MANUFACTURE_WEEK0x10
29#define MANUFACTURE_YEAR0x11
30
31#define EDID_STRUCT_VERSION0x12
32#define EDID_STRUCT_REVISION0x13
33
34#define EDID_STRUCT_DISPLAY 0x14
35
36#define DPMS_FLAGS0x18
37#define ESTABLISHED_TIMING_10x23
38#define ESTABLISHED_TIMING_20x24
39#define MANUFACTURERS_TIMINGS0x25
40
41/* standard timings supported */
42#define STD_TIMING 8
43#define STD_TIMING_DESCRIPTION_SIZE 2
44#define STD_TIMING_DESCRIPTIONS_START 0x26
45
46#define DETAILED_TIMING_DESCRIPTIONS_START0x36
47#define DETAILED_TIMING_DESCRIPTION_SIZE18
48#define NO_DETAILED_TIMING_DESCRIPTIONS4
49
50#define DETAILED_TIMING_DESCRIPTION_10x36
51#define DETAILED_TIMING_DESCRIPTION_20x48
52#define DETAILED_TIMING_DESCRIPTION_30x5a
53#define DETAILED_TIMING_DESCRIPTION_40x6c
54
55#define DESCRIPTOR_DATA5
56
57#define UPPER_NIBBLE( x ) \
58(((128|64|32|16) & (x)) >> 4)
59
60#define LOWER_NIBBLE( x ) \
61((1|2|4|8) & (x))
62
63#define COMBINE_HI_8LO( hi, lo ) \
64( (((unsigned)hi) << 8) | (unsigned)lo )
65
66#define COMBINE_HI_4LO( hi, lo ) \
67( (((unsigned)hi) << 4) | (unsigned)lo )
68
69#define PIXEL_CLOCK_LO (unsigned)block[ 0 ]
70#define PIXEL_CLOCK_HI (unsigned)block[ 1 ]
71#define PIXEL_CLOCK (COMBINE_HI_8LO( PIXEL_CLOCK_HI,PIXEL_CLOCK_LO )*10000)
72#define H_ACTIVE_LO (unsigned)block[ 2 ]
73#define H_BLANKING_LO (unsigned)block[ 3 ]
74#define H_ACTIVE_HI UPPER_NIBBLE( (unsigned)block[ 4 ] )
75#define H_ACTIVE COMBINE_HI_8LO( H_ACTIVE_HI, H_ACTIVE_LO )
76#define H_BLANKING_HI LOWER_NIBBLE( (unsigned)block[ 4 ] )
77#define H_BLANKING COMBINE_HI_8LO( H_BLANKING_HI, H_BLANKING_LO )
78
79#define V_ACTIVE_LO (unsigned)block[ 5 ]
80#define V_BLANKING_LO (unsigned)block[ 6 ]
81#define V_ACTIVE_HI UPPER_NIBBLE( (unsigned)block[ 7 ] )
82#define V_ACTIVE COMBINE_HI_8LO( V_ACTIVE_HI, V_ACTIVE_LO )
83#define V_BLANKING_HI LOWER_NIBBLE( (unsigned)block[ 7 ] )
84#define V_BLANKING COMBINE_HI_8LO( V_BLANKING_HI, V_BLANKING_LO )
85
86#define H_SYNC_OFFSET_LO (unsigned)block[ 8 ]
87#define H_SYNC_WIDTH_LO (unsigned)block[ 9 ]
88
89#define V_SYNC_OFFSET_LO UPPER_NIBBLE( (unsigned)block[ 10 ] )
90#define V_SYNC_WIDTH_LO LOWER_NIBBLE( (unsigned)block[ 10 ] )
91
92#define V_SYNC_WIDTH_HI ((unsigned)block[ 11 ] & (1|2))
93#define V_SYNC_OFFSET_HI (((unsigned)block[ 11 ] & (4|8)) >> 2)
94
95#define H_SYNC_WIDTH_HI (((unsigned)block[ 11 ] & (16|32)) >> 4)
96#define H_SYNC_OFFSET_HI (((unsigned)block[ 11 ] & (64|128)) >> 6)
97
98#define V_SYNC_WIDTH COMBINE_HI_4LO( V_SYNC_WIDTH_HI, V_SYNC_WIDTH_LO )
99#define V_SYNC_OFFSET COMBINE_HI_4LO( V_SYNC_OFFSET_HI, V_SYNC_OFFSET_LO )
100
101#define H_SYNC_WIDTH COMBINE_HI_4LO( H_SYNC_WIDTH_HI, H_SYNC_WIDTH_LO )
102#define H_SYNC_OFFSET COMBINE_HI_4LO( H_SYNC_OFFSET_HI, H_SYNC_OFFSET_LO )
103
104#define H_SIZE_LO (unsigned)block[ 12 ]
105#define V_SIZE_LO (unsigned)block[ 13 ]
106
107#define H_SIZE_HI UPPER_NIBBLE( (unsigned)block[ 14 ] )
108#define V_SIZE_HI LOWER_NIBBLE( (unsigned)block[ 14 ] )
109
110#define H_SIZE COMBINE_HI_8LO( H_SIZE_HI, H_SIZE_LO )
111#define V_SIZE COMBINE_HI_8LO( V_SIZE_HI, V_SIZE_LO )
112
113#define H_BORDER (unsigned)block[ 15 ]
114#define V_BORDER (unsigned)block[ 16 ]
115
116#define FLAGS (unsigned)block[ 17 ]
117
118#define INTERLACED (FLAGS&128)
119#define SYNC_TYPE (FLAGS&3<<3)/* bits 4,3 */
120#define SYNC_SEPARATE (3<<3)
121#define HSYNC_POSITIVE (FLAGS & 4)
122#define VSYNC_POSITIVE (FLAGS & 2)
123
124#define V_MIN_RATE block[ 5 ]
125#define V_MAX_RATE block[ 6 ]
126#define H_MIN_RATE block[ 7 ]
127#define H_MAX_RATE block[ 8 ]
128#define MAX_PIXEL_CLOCK (((int)block[ 9 ]) * 10)
129#define GTF_SUPPORTblock[10]
130
131#define DPMS_ACTIVE_OFF(1 << 5)
132#define DPMS_SUSPEND(1 << 6)
133#define DPMS_STANDBY(1 << 7)
134
135struct EDID
136{
137 UInt8header[8];//0
138 UInt8vendorProduct[4];//8
139 UInt8serialNumber[4];//12
140 UInt8weekOfManufacture;//16
141 UInt8yearOfManufacture;//17
142 UInt8version;//18
143 UInt8revision;//19
144 UInt8displayParams[5];//20
145 UInt8colorCharacteristics[10];//25
146 UInt8establishedTimings[3];//35
147 UInt16standardTimings[8];//38
148 UInt8detailedTimings[72];//54
149 UInt8extension;//126
150 UInt8checksum;//127
151};
152
153char* readEDID();
154void getResolution(UInt32* x, UInt32* y, UInt32* bp);
155
156//#endif

Archive Download this file

Revision: 691