Hi,
I am developing a monitor calibration application for Windows 2k,XP,
that shall perform following tasks:
a) Find the offsets SDA / SCL of the graphics card.
b) control these i2c lines
c) Use these i2c lines to fetch EDID and VCP capabilities from the monitor
The major objective is to develop a application that communicate (Set EDID
and other info) with monitor through graphics card capabilities.
I am able to communicate with monitor with help of get-edid source (
http://john.fremlin.de/programs/linux/read-edid/ )
Below is what is achieved:
get-edid uses VESA VBE 2 interrupt service routine requests to read EDID
structure from the graphics card. Internally, the interrupt 0x10 is sent from
the BIOS to the graphics card (along with some parameters). The graphics card
in turn communicates with the monitor hardware for the requested item (eg.edid
info) through DDC channel, i2c communication.
I took out the pin 12 and pin 15 of monitor and connected it with the graphics
card and oscilloscope. I see the changes in SDA/SCL lines in oscillscope on
do_vbe_ddc_service( SERVICE_READ_EDID, ®s ) call.
So, Can we also find the SDA / SCL offsets of the graphics card using the
above technique? For instance, is it possible to
a) Initially map the graphics card memory , say BEFORE_ACTION using a kernel
mode driver that maps the memory.
b) Pass 0x10 interrupt, or run get-edid
c) Now again map the memory, say AFTER_ACTION
Finally analysing the change of AFTER_ACTION and BEFORE_ACTION.This
might give the change in address, and these will possibly be the SDA
and SCL offset.
Is it the right approach?
The main objective is to observe the offsets that are changing.
Any pointers, suggestions will be of great help.
Please suggest.
Thanks,
RB.