Search by Tags

Splash Screen on Windows CE

 

Article updated at 16 Mar 2020
Compare with Revision




The splash Screen is the picture that you can see while Win CE is booting. It can be changed using the freely available Toradex Update Tool, or another method during production programming. The picture needs to be provided in a special splash screen format. There are two ways to convert a user specific picture into this special splash screen format.:

  • Splash Screen Customizer tool: converts an unlimited number of bitmap files to the respective splash screen file format for the cost of 4 Support Hours
  • Toradex converts one bitmap for 1 Support Hours. (Please send us the bitmap in the correct resolution and with 8BPP)

Note: Converting an image to the required 8bpp bitmap input file for the tool using Paint.NET produces wrong results. You may use IrfanView to do the conversion.

Update a Splash Screen

You can update the Splash Screen using the Update Tool. Please refer Update Tool article for more information.

Splash Screen Configblock Settings

You can find the Splash Screen settings in the bootloader's "ss" section. When splash screen is updated it is generally not required for these settings to be modified as the tools to update the splash screen automatically export the Win CE display settings to Config Block. But you can also choose other settings for the splash screen than the default.

Not all settings are available on all the different modules.

ss.fileaddr:    0x00000000      (FlashAddress with SplashScreen Data)*
ss.filesize:    0               (Size of SplashScreen Data)*
ss.enable:      1               (Enable SplashScreen)
ss.dbginfo:     1               (Enable DebugInfos)
ss.res:         0x00000000      (Reserved Flags)
ss.width:       800             (Display Width)
ss.height:      600             (Display Height)
ss.bpp:         8               (BitsPerPixel)
ss.ldds:        18              (LCD Lines Used)
ss.type:        1               (Display Type (0=Passive, 1=Active))*
ss.color:       1               (0=Mono, 1=Color)*
ss.dual:        0               (0=SinglePanel, 1=DualPanel)*
ss.overlay:     0               (Overlay Enable)*
ss.dpc:         0               (Double Pixel Clock)*
ss.pcp:         1               (Pixel Clock Polarity)
ss.oep:         0               (Output Enable Polarity)*
ss.hsp:         1               (Horizontal Sync Polarity)
ss.vsp:         1               (Vertical Sync Polarity)
ss.bs:          5               (LCD Buffer Strength, PXA Only)
ss.pclk:        26000000        (PixelClock (in Hz))
ss.hsw:         64              (Horizontal Sync Width)
ss.vsw:         2               (Vertical Sync Width)
ss.blw:         117             (Begin of Line Width)
ss.elw:         129             (End of Line Width)
ss.bfw:         56              (Begin of Frame Width)
ss.efw:         36              (End of Frame Width)
ss.acb:         240             (AC Bias Frequency)*
ss.disp_gpio:   49              (Display On/Off Gpio/pin. Set Gpionumber for PXA/Tegra and pin number for VFxx/IMX6/IMX7).
                                 Disable Pin: set 255 for PXA/Tegra, set to 0 on VFxx/IMX6/IMX7)
ss.bl_gpio:     49              (BackLight On/Off Gpio/pin. Set Gpio number for PXA/Tegra and pin number for VFxx/IMX6/IMX7).
                                Disable Pin: set 255 for PXA/Tegra, set to 0 on VFxx/IMX6/IMX7)
ss.dispondelay: 100             (Display On Delay (ms))*
ss.disp_pol:    1               (Display On/Off polarity)
ss.bl_pol:      1               (BackLight On/Off polarity)
ss.pcddiv:      1               (Enable Pixel Clock PreDivider)*
                                   // the following settings are available in Bootloader 3.7Beta1 and later.
ss.edidaddr     0x00            (7-bit i2c address, where the EDID EEPROM is located)*
ss.edidenable   0               (1=enable reading of EDID data from i2c EEPROM. 0=disable this feature)*
ss.bsTeg        0xF1612030      (LCD Buffer Strength, Tegra Only. For details, refer to Display Driver Registry Settings, Note (p) )*

Parameters marked with (*) are not currently supported on Vybrid and i.mx6. They can be set and read, but they have no effect on the configuration.

IMX6 additional settings

On Apalis/Colibri IMX6 additional parameters are available:

ss.out:        0-5      (used only for Apalis, 0=VGA,1=parallel,2/3/4=LVDS,5=HDMI)
ss.mode:       0-64     Standard CEA mode id (overrides settings) 
ss.detectmode: 0        0=use parms, 1=match EDID info with standard mode, 2=use EDID preferred mode
ss.noOE:       0        1=Disables OE/DE signal
ss.noVSYNC:    0        1=Disables VSYNC signal
ss.noHSYNC:    0        1=Disables HSYNC signal
ss.jeida       0        Enables JEIDA mapping for LVDS  

Rotating Splash Screens

Rotation of a splash screen in software is not supported. Instead you need to use an already rotated image as a splash screen.

You can download rotated splash screens here:

Prevent Black Screen Between Splash Screen And Application (PXAxxx Only)

During system boot, the display gets black after the operating system has loaded, until the user application is started. There is an option in the the Colibri PXAxxx BSP to keep the splash screen on, until the user application decides to switch to the application screen. To activate the option, insert the following registry setting:

[HKLM\Drivers\Display\Colibri]
OffAtStart = dword:1

To switch from the splash screen to the Windows CE screen, you need to execute the following code:

#include <windows.h>
#define FILE_DEVICE_ACPI    0x00000032
#define FILE_DEVICE_HAL     0x00000101
#define METHOD_BUFFERED     0
#define FILE_ANY_ACCESS     0
 
#define CTL_CODE( DeviceType, Function, Method, Access ) (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
 
#include <pm.h> 
 
int WINAPI WinMain( HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPTSTR    lpCmdLine,
                    int       nCmdShow)
{
    DWORD powerState=0;
    ExtEscape(GetDC(NULL), IOCTL_POWER_SET, 0,NULL,4 ,(char*)&powerState);
    return 0 ;
}

Prevent Black Screen Between Splash Screen And Application (Vybrid and i.MX7 Only)

On Colibri VF50, Colibri VF61 and Colibri iMX7 the Windows GDI screen (application) can be activated when a named system event is set.

[HKEY_LOCAL_MACHINE\Drivers\Display\Colibri]
"UseSplashSettings"   = dword:1         ; This is required to prevent a re-initialization of the display controller by the WinCe display driver
"ActivateDisplayEvent"= "SYSTEM/ShellAPIReady"
"FirstRefreshDelay"   = dword:100       ; Delay of 1st refresh in ms. If event is never triggered this timeout is used. 0xFFFFFFFF for infinitive

The event name is configured in the registry and, by default, is set to SYSTEM/ShellAPIReady. This event gets set by Explorer.exe when the desktop is ready.

  • Deleting the Registry value ActivateDisplayEvent will cause the display driver to show the Windows GDI screen as soon as it's loaded (usually leading to a black screen).
  • Changing the value of ActivateDisplayEvent will allow a third party application to trigger screen activation when its user interface is ready.

Refer to the following code sample to switch from Splashscreen to your application display.

HANDLE evt;
evt=CreateEvent(NULL,FALSE,FALSE,TEXT("<event name configured in registry>"));
SetEvent(evt);