31 Replies Latest reply on Feb 16, 2010 11:48 AM by Kirk

    IEGD API for Windows Embedded

    Green Belt

      First-time poster and relatively new user here.  Thanks for your patience and help.  Sorry if this isn't the right place to be asking this question.

       

      Is there an API for Windows XP embedded SP3 that has the same functionality as is provided in IEGDGUI.exe?  I'd like to be able to programmatically set displays to clone mode and set the resolution and bit depth.

       

      Thanks.

        • Re: IEGD API for Windows Embedded
          Felix_M BlackBelt

          Hi fm123456789:

           

           

           

          Welcome to the Intel® Embedded Design Center community.  You've come to the right place with your question on IEGD.   Let's see if someone out there in the community will be able to help you out.

           

          If the "fm" in your username are your initials, then you must be a good guy.  Same initials as mine.

           

          Thanks

           

           

            • Re: IEGD API for Windows Embedded
              Kirk Brown Belt

              There is some good news and some bad news.  There is an API for controlling IEGD- we have special Windows "escape" functions that give you control over setting a wide range of the driver capability including setting clone (or twin, etc.).

               

              The bad news is that currently the document for the API is classified "Intel Confidential" so you need to have an NDA with us, plus it is helpful to have an Intel "Premier Support" account to access it.  Do you have either of those?

               

              There is discussions of possibly including sample code and docusmentation is a future relase, but it is just talk at this point. 

                • Re: IEGD API for Windows Embedded
                  Green Belt

                  Thanks for the info.  Can you tell me how I would go about setting up the NDA and obtaining the API?  I've applied for an "e-Help desk" account but haven't heard back yet.

                  Thanks.

                   

                    • Re: IEGD API for Windows Embedded
                      Felix_M BlackBelt

                      The first step will be getting the NDA in place, unless your company perhaps already has one. This is done via the Intel sales channel. Do you know your Intel representative? Your source for your Intel parts can facilitate that connection if you don't already have that relationship. In most cases that would be a distributor or local rep firm in your area. If you still don't know who to contact, try the "Need more help?" box at the bottom left of your screen. To be honest I've never personally tried that so I don't know how long it takes to get a response. Again, your source for the Intel parts is probably your best bet.

                       

                      The NDA is a prerequisite for access to the e-Help desk.

                       

                      Hope this helps.

                       

                        • Re: IEGD API for Windows Embedded
                          Felix_M BlackBelt

                          Hi fm:

                           

                          Good news, it appears that your community account has been upgraded to private status which provides you with access to Intel Confidential material. 

                           

                          You can find the IEGD API documentation that you requested in the e-Help desk by clicking here.

                           

                          Hope this helps.

                           

                          Good Luck!

                            • Re: IEGD API for Windows Embedded
                              Green Belt

                              That's exactly what I was looking for.  Thanks! 

                               

                              Any idea why this is regarded as secret by Intel?

                               

                              Regards,

                              FM

                               

                                • Re: IEGD API for Windows Embedded
                                  BlackBelt

                                  Unfortunately the reasoning behind why some docs are "secret" or Intel Confidential, is in itself a secret.:manvery-happy: Its not quite as obtuse as getting an APP approved, for example for the iPhone, it's usually just for pre-launch or pre-release silicon. As the IEGD s/w has been out for a while now, it's probably just a historical artifact. By that I mean the original author has moved on to another project, and its never been de-classified. I know the Program Manager for IEGD so I'll ask him the reasoning.

                                   

                                  Follow me at @intel_stewart on twitter..

                                    • Re: IEGD API for Windows Embedded
                                      Brown Belt

                                      Well is seems crazy?  I'm starting work on an embedded system based on an Atom board but I can't get enough information to control the backlight on the LVDS LCD?  How can I develop a system without this level of information?  Don't I need the esc mechanism to do this?

                                       

                                      Microsoft documents IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS but this doesn't seem to return any data, so the generic interface to use instead of IEGD esc doesn't seem to work and the controls are secret?

                                       

                                      Do I understand this correctly - seems amazing, if true?

                                       

                                        • Re: IEGD API for Windows Embedded
                                          Kirk Brown Belt

                                          As for the IEGD User Interface, the source for the IEGD UI is usually included in the release (from 10.2 on) under the SDK directory for the Windows driver install in the plugins\window in the ZIP file you will find there.  This should show you how to use the various escape functions in the driver.

                                           

                                          For backlight control- that is a little bit of a sticky subject.  There are many ways the backlight can be wired up to the chipset.  The driver, be default, will automatically turn the LVDS backligh on and off as needed using the "typical" method.  If you blank the display using the Windows DPMS command, the driver will turn off the backlight, and enable it when the display unblanks.  Other than that, there are no exposed APIs to control the backlight unless you write something directly to the chipset to toggle the backlight control directly.

                                           

                                          Hope this helps

                                            • Re: IEGD API for Windows Embedded
                                              Brown Belt

                                              Well, that partially answers the question.  There are two components of the backlight - on/off and brightness.  The on/off does work, but brightness does not seem to, as best I can tell.  The brightness is supposed to be driven by a PWM signal, and the driver is supposed to have LVDS configuration values (attribute:70 INTENSITY) that sets the PWM waveform.  But I don't see any change of the output on my board which is supposed to be driving a pin on the backlight connector based on this chip signal.  I can't prove its not the board, but the discussion on backlight is pretty ambiguous in the driver user's guide.

                                               

                                              I did see the esc sequences in an include file (iegd_escape.h) but this is pretty obscure - nowhere can I find any API document.  So, I'll experiment.

                                               

                                              But the idea is to make development easier by using someone's driver, board, etc.  If I have to reverse engineer it, thats wasted time.  Thanks.

                                               

                                                • Re: IEGD API for Windows Embedded
                                                  Felix_M BlackBelt

                                                  Hi DonLPI

                                                   

                                                  Welcome to the Intel® Embedded Community.

                                                   

                                                  You mentioned that you are using "someone else's board". Have you checked with the board vendor to see if they have other developers doing something similar? If you don't already have a relationship with the board vendor, if it is one of the member companies of the Intel® Embedded Alliance, if you could share which company perhaps I can hook you up with a contact there...

                                                   

                                                  Good Luck,

                                                  Felix

                                                    • Re: IEGD API for Windows Embedded
                                                      Brown Belt

                                                      We are working with Advantech AIMB-210.  I do have a tech contact there.

                                                      A big problem is the ambiguity in IEGD documentation and to some extent configuration.  I need to talk to the driver to control the backlight contrast and On/Off. 

                                                      The board has 2 interfaces, both VGA and LVDS. I see no difference in the voltage on the brightness pin regardless of how I configure the IEGD LVDS brightness [Backlight Control Method = Port Driver, Attribele ID 70 = n].  So what does this tell me:  config requires some additional condition I don't understand?  Driver doesn't fully support this board?  Board is bad?  Something else?

                                                      Ive started to experiment based on the SDK and can do Win32 ExtEscape() sequences to get some driver level information - so I know I'm talking to the driver.  But the IEGD escape sequences are only documented (as best I can tell) in the .h file - and that documentation is ambiguous or at least sparse.

                                                      So, if there is better documentation on this API, we'd be willing to sign a non-disclosure to get it or some sample code that really shows how to access the LVDS separately for control functions.  The SDK shows some simple case examples, but does not make it clear how the ports are assigned/accessed (e.g. iegdsample.cpp does not call functioniegd_get_disp_port_mapping).  I guess I'll wade through the code to try to figure it out, but I'm spending an awful long time on something that shouldn't be this hard.

                                                      Thanks for any help.

                                                        • Re: IEGD API for Windows Embedded
                                                          Felix_M BlackBelt

                                                          There is an additional IEGD API doc that you could access if you upgrade your community member status to "private".   Private status also gives you access to the e-Help desk which is staffed by Intel technical staff who support select processors including Atom. 

                                                           

                                                          If you are interested, go here to request the upgrade:  http://edc.intel.com/My-Account.aspx

                                                           

                                                          It will normally require and NDA and the process takes a couple days.

                                                           

                                                          Hope this helps

                                                           

                                                          Felix

                                                           

                                                            • Re: IEGD API for Windows Embedded
                                                              Brown Belt

                                                              Thanks - I requested the upgrade at the end of last week.  I hope to have someone contact me soon.  It helps to know that this document exists.  I appreciate your reply.

                                                               

                                                                • Re: IEGD API for Windows Embedded
                                                                  Brown Belt

                                                                  ll still no contact from Intel re NDA.  In the mean time, I've gotten some escape driver functions working from my test XP application.  One of them is to view the port attributes and I do see that attribute 70 (Intensity) is shown as I configure it in the IEGD driver. 

                                                                  According to the 945GSE chip manual, LBKLT_CTL is listed as an output on some pages (Pg 404), but called the PWM Clock input on Pg 45.  We have assumed that this is the output signal that should be driving the backlight intensity. So, can someone please tell me if I'm correct about this signal function.  Also, can anyone confirm that the driver really drives this signal as configured.  When we look at it with a scope we see 0.18 volts and what looks like noise.  I'm trying to figure out if a) we don't understand or b) driver doesn't handle this correctly or c) board is broken.  But, without understanding a) and b) its hard to deduce c).

                                                                  Thank you!

                                                                   

                                                                    • Re: IEGD API for Windows Embedded
                                                                      Kirk Brown Belt

                                                                      Have you tried playing with attribute 71 and 72?  In particular, attr 72 was added because apparently there are multiple ways to control the back light intensity.   The default for the driver is to use a pure PWM method, however, if your board is wired differently, you might need 72 to be a 1 to get Legacy + PWM mode and that does some magical hardware thing to the chipset that makes backlight control work differently from the default.

                                                                       

                                                                      Then inverter frequency might need to be tweaked depnding on where the PWM signal is coming from to make any sort of difference.

                                                                       

                                                                      The API doc will help, but you may have already figured out most of the private interface in the ESC functions.

                                                                       

                                                                      (BTW: The escapes header is intentionally vague because that is primarily our internal communications method which is subject to change without notice- thus what woarks on one driver may be dramtaically different on another.)

                                                                       

                                                                        • Re: IEGD API for Windows Embedded
                                                                          Brown Belt

                                                                          Thanks for your help.  I tried all of these parameters without success - we're looking at the PWM signal on the scope, while tempoarily wiring the LCD's inverter to 100\% brightness via a fixed level.  We don't see anything that looks like a PWM pulse.  We're talking with Advantech, but I might be dead before its resolved.  I may move to another Atom based board vendor - but it would also use IEGD.

                                                                          My big concerns from the IEGD perspective is can I get enough info to design and implement the system, not just backlight.  This includes early display of a logo during the boot-up sequence and any other tricks I might need play to implement our application.  Hopefully, having a more priveledged account will get me more info and I can figure things out myself - thats my goal.

                                                                           

                                                                           

                                                                            • Re: IEGD API for Windows Embedded
                                                                              Kirk Brown Belt

                                                                               

                                                                              Not all board vendors follow our recommendations for handling backlight control.  I believe some ignore the PWM capability and just provide an on or off capability- maybe that is the case here.  I wish I could tell you what to look for in the hardware but I am I driver guy and THAT part of the hardware is part of the black magic.  :smileywink:

                                                                               

                                                                              The User's Guide contains a wealth of information about the driver.  It includes information on our EFI Video Driver (VBIOS for an EFI environement) that supports a Splash Screen capability that sounds exactly like what you want for a logo.  If you can get an EFI based BIOS for your platform, that would solve at least that need.

                                                                               

                                                                              The API doc that gets you more exposure into the inner workings of the driver, but as is the case with most graphics solutions, there is a lot of "secret sauce" (IP) in there that the legal folks want to keep secret (as in Intel Top Secret for our stuff). 

                                                                                • Re: IEGD API for Windows Embedded
                                                                                  Brown Belt

                                                                                  According to the board vendor, they have some issues with LVDS PWM with the BIOS when single channel LVDS is used.  But, I would think that the driver would set the PWM output correctly even if the BIOS doesn't.  Using a test BIOS, they've showed me a PWM square wave from a scope, so the board does support PWM.

                                                                                  The driver doesn't use the BIOS, correct -  This is only for boot time displays?

                                                                                  The board support people suggest that LBB register (LBES field) needs to be set to drive this.  I don't know if this is set by attribute 70 (INTENSITY)?  Its not clear to me that LBB really controls brightness or if it just generates an interrupt to cause driver or BIOS software to do something.

                                                                                  The IEGD attributes description is a little confusing - should attribute 0 be used in any way?  It seems like attribute 70 should be sufficient - in conjunction with 71 and 72, or does legacy mode require some more attribute settings?

                                                                                  If a breif description of if or how LBB relates to the driver is possible, I'd appreciate it.  Otherwise I'll wait til the NDA lets me see more detailed documentation.

                                                                                  Thanks.

                                                                                   

                                                                                    • Re: IEGD API for Windows Embedded
                                                                                      Kirk Brown Belt

                                                                                      >According to the board vendor, they have some issues with LVDS PWM with the BIOS when single channel LVDS is used.  But, I would think that the driver would set the PWM output correctly even if the BIOS doesn't. 

                                                                                       

                                                                                      Well, we assume the BIOS knows what it is doing so we try to leave control of those sorts of things up to the firware that is supposed to be written specifically for the board.

                                                                                       

                                                                                      >Using a test BIOS, they've showed me a PWM square wave from a scope, so the board does support PWM.

                                                                                       

                                                                                      Good.

                                                                                       

                                                                                      >The driver doesn't use the BIOS, correct -  This is only for boot time displays?

                                                                                       

                                                                                      The driver does not call the BIOS but for many settings assumes the BIOS set up the hardware correctly.

                                                                                       

                                                                                      >The board support people suggest that LBB register (LBES field) needs to be set to drive this.  I don't know if this is set by attribute 70 (INTENSITY)?  Its not clear to me that LBB really controls brightness or if it just generates an interrupt to cause driver or BIOS software to do something.

                                                                                       

                                                                                      I've not had deallings with the LBB register, do you have access to a chip person through your field rep?

                                                                                       

                                                                                      >The IEGD attributes description is a little confusing - should attribute 0 be used in any way?  It seems like attribute 70 should be sufficient - in conjunction with 71 and 72, or does legacy mode require some more attribute settings?

                                                                                       

                                                                                      Attribute 0 is the video brightness control which is different from the backlight brightness (although the visual effect is similar).  Think of Brightness and Contrast as color correction values for the color drive and backlight as a control of the amount of light that shines through the LCD.  You can crank brightness all the way up but if the backlight is turned down you will not see the over driven video.

                                                                                       

                                                                                       

                                                                                      >If a breif description of if or how LBB relates to the driver is possible, I'd appreciate it.  Otherwise I'll wait til the NDA lets me see more detailed documentation.

                                                                                      Thanks.

                                                                                       

                                                                                      There is absolutly 0 references to an LBB register in our driver source. I would need more detials from your contact to figure out what they are talking about.  My guess is that your board vendor's BIOS sets it and we just leave it set however the BIOS thought is supposed to be left set.

                                                                                       

                                                                                      Hope this helps.

                                                                                        • Re: IEGD API for Windows Embedded
                                                                                          Brown Belt

                                                                                          Again, thanks.

                                                                                          A semi-related question - please tell me if its beyond this forum.

                                                                                          The esc function INTEL_ESCAPE_GET_AVAIL_PD_ATTRIBUTES returns 17 attributes for my LVDS port to my test program, several of which I recognize as how I've configured IEGD.  This includes the LVDS attributes we've discussed.  However it doesn't return attribute 20 which is FP_BACKLIGHT_ENABLE.  I would think I'd use this to turn on/off the backlight, as I don't see any other attributes in the LVDS specific (B.2.1) table for this nor any more specific esc functions.  Why don't I retreive this?

                                                                                          And related to that, the esc function to update attributes takes as input port# plus the whole struct that defines the attribute - including ID, name, current value, default value.  Does this all need be specified or only ID and current value?  I would have thought I could read it, update current value, and write it back - except it doesn't show up as per part 1 of this discussion, so reading is a problem.  I look at SDK the hal function iegd_set_port_attributes() as my model, but it takes the whole attribute struct from outside the function - and I couldn't find any callers of this in any sdk sample code.

                                                                                          Sorry to belabor this backlight stuff but I have to have this functionality and its a lot less obvious than I would have guessed.

                                                                                            • Re: IEGD API for Windows Embedded
                                                                                              Felix_M BlackBelt

                                                                                              Hello again,  DonLPI -

                                                                                               

                                                                                              Good news it appears that your request for PRIVATE member status in the community has been approved.  You may now access confidential documents and other resources as well as the e-Help desk which is staffed by Intel technical representatives. 

                                                                                               

                                                                                              I would like to thank Intel's Kirk for assisting you thus far and ask that you transition your discussion over to e-Help which is a more appropriate forum for the troubleshooting path you are on. 

                                                                                               

                                                                                              Follow this link below to find the API document you have requested:

                                                                                               

                                                                                              http://embedded.communities.intel.com/message/3201

                                                                                               

                                                                                              Good Luck,

                                                                                              Felix

                                                                                               

                                                                                                • Re: IEGD API for Windows Embedded
                                                                                                  Green Belt

                                                                                                  I'm trying to change LVDS color balance in my app.  The documentation for INTEL_ESCAPE_SET_PD_ATTRIBUTES escape code says you can pass in a struct called iegd_esc_set_attr_t.  However, I can't find it's definition in the API document.  I made a guess at its definition and after a few tries was able to get the brightness values to change. 

                                                                                                   

                                                                                                  It appears that iegd_esc_set_attr_t is probably the same as a iegd_esc_attr_t with a port number at the beginning. And only the id and current_value fields of the iegd_esc_attr_t are used.  Can anyone verify this?  I'd like to know that what I pass in won't corrupt some other driver setting, or if my guessed struct is not large enough I don't want the stack to be corrupted by the iegd escape handler.

                                                                                                   

                                                                                                  Thanks,

                                                                                                  fm

                                                                                                   

                                                                                                    • Re: IEGD API for Windows Embedded
                                                                                                      Brown Belt

                                                                                                      This struct is defined in iegd_escape.h in the SDK.  That is found in the .zip file generated by driver install creation.  Its in:

                                                                                                      ...\IEGD_10_2_Windows\sdk\src\iegdui

                                                                                                      The port number, an unsigned long, prefixes the iegd_esc_attr_t struct, as you guessed.

                                                                                                       

                                                                                                        • Re: IEGD API for Windows Embedded
                                                                                                          Brown Belt

                                                                                                          I have now seen the API document, but it doesn't answer most of my questions regarding backlight control.  As I earlier mentioned, the attribute FP BACKLIGHT ENABLE (#20 on Pg 216 of IEGD users guide) would seem to be what I use to turn on/off the backlight.

                                                                                                          But my test program which retreives all the attributes does not see this one returned by the driver when it performes the ExtEscape(INTEL_ESCAPE_GET_AVAIL_PD_ATTRIBUTES)?

                                                                                                          But it sees others I've set during configuration, so I know the program is working.

                                                                                                          So my questions are basically:

                                                                                                          * Why isn't this attribute returned?

                                                                                                          * Can I construct the iegd_esc_attr_t struct for id == 20 and current_value == state (e.g. 0==Off) even though I don't know the other struct values because it wasn't retrieved?

                                                                                                          If whomever has driver source can see if Attrib 20 is really accessible and under what conditions I can set it, I'd appreciate it.  Thanks.

                                                                                                            • Re: IEGD API for Windows Embedded
                                                                                                              Kirk Brown Belt

                                                                                                              >I have now seen the API document, but it doesn't answer most of my questions regarding backlight control.  As I earlier mentioned, the attribute FP BACKLIGHT ENABLE (#20 on Pg 216 of IEGD users guide) would seem to be what I use to turn on/off the backlight.

                                                                                                              But my test program which retreives all the attributes does not see this one returned by the driver when it performes the ExtEscape(INTEL_ESCAPE_GET_AVAIL_PD_ATTRIBUTES)?

                                                                                                              But it sees others I've set during configuration, so I know the program is working.

                                                                                                              So my questions are basically:

                                                                                                               

                                                                                                              >* Why isn't this attribute returned?

                                                                                                              There are two possible issues:

                                                                                                               

                                                                                                              Do you have backlight control enabled in your config?  If so, you will have put in T1 - T5 timing values for the power sequencing.  When you have your config set for no backlight, we just automatically flip the backlight on and off using some default values for T1 - T5.  

                                                                                                               

                                                                                                              We do not return backlight control in the structure.  I need to do some digging to make sure that we do support it.

                                                                                                               

                                                                                                              >* Can I construct the iegd_esc_attr_t struct for id == 20 and current_value == state (e.g. 0==Off) even though I don't know the other struct values because it wasn't retrieved?

                                                                                                              If whomever has driver source can see if Attrib 20 is really accessible and under what conditions I can set it, I'd appreciate it.  Thanks.

                                                                                                               

                                                                                                              I've never looked into this before so I need to do some digging.  Ping me here again if you do not hear from me in a few days to "keep me honest" on answering you.  ;-)

                                                                                                               

                                                                                                              Kirk

                                                                                                                • Re: IEGD API for Windows Embedded
                                                                                                                  Brown Belt

                                                                                                                  Further information - yes I have backlight enabled (Port Driver) and those T1-T5 values are defined.  And it does eventually get turned on.  But I don't know if the driver turns it on during initialization or if Windows XP turns it on thru the driver or what the trigger is.  It seems like it doesn't come on until XP login time.  So XP knows how to turn it on - unless XP just enables the port and the driver turns it on when XP does that.  We know XP doesn't know the IEGD escape functions.

                                                                                                                    • Re: IEGD API for Windows Embedded
                                                                                                                      Kirk Brown Belt

                                                                                                                      Backlight will be turned on when the port is enabled (set as the primary display, or turned on as an extended or clone display).  Further, backlight will be turned off then on when a mode set occurs as part of setting the mode.  Backlight is turned off when the display enters a DPMS OFF mode, and will come back on when the display is re-enabled (DPMS NORMAL mode).  So far, using the DPMS is the only way for you to directly control the backlight however I am still checking.

                                                                                                                       

                                                                                                                      So there was a THIRD reason  for Attr 20 not being returned:

                                                                                                                       

                                                                                                                      Attr 20 is for SDVO based LVDS transmitters only.  I completely forgot this was on the internal LVDS so attr 20 does not apply.

                                                                                                                       

                                                                                                                        • Re: IEGD API for Windows Embedded
                                                                                                                          Kirk Brown Belt

                                                                                                                          It looks like DPMS is the only way to control backlight on or off through the driver.  There is no control interface for internal LVDS as there is from an SDVO based solution.  Sorry I cannot be more help here.

                                                                                                                            • Re: IEGD API for Windows Embedded
                                                                                                                              Brown Belt

                                                                                                                              I see a new IEGD version is released.  Is it possible to request new features for future driver versions?  I really can't beleive that a program cannot control the backlight, both on and off and brightness.  The general ExtEscape() mechanism is in place, so why can't these attributes be applied to the LVDS interface?

                                                                                                                              The system we're now designing runs on battery some times - its a must that I can turn off the display and also drop the brightness when necessary.  The PWM output is present in hardware, and the driver lets me configure settings for it for LVDS.  Why not via attributes - changing the PWM output seems almost trivial.  The on/off cant be too hard either using the attribute mechanism.

                                                                                                                              So is there a vehicle by which one can request these enhancements?

                                                                                                                              Thanks.

                                                                                                                                • Re: IEGD API for Windows Embedded
                                                                                                                                  Kirk Brown Belt

                                                                                                                                  The best mechanism to influence feature sets is either enter it via a Premier Support account, or work with your field rep to make the request.  I would recommend you influence the platform teams to prioitize this feature as that is the best way to get a feature above our ZBB.

                                                                                                                                   

                                                                                                                                  We have supported internal LVDS since the 845 days but this is the first that I have heard of anyone asking for this feature.  I think I sort of always assumed it was in there also.  I'm guessing we just missed asking for it in the PRD for internal, OR the development and validation teams have assumed that meant for sDVO based LVDS only.

                                                                                                                                   

                                                                                                                                  You could add a CH7308 to your design and then the escapes and attributes will work...

                                                                                                                                   

                                                                                                                                  Hope this help.  Kirk