Share via


Touch Screen Driver Development Concepts

Other versions of this page are also available for the following:

Windows Mobile Not SupportedWindows Embedded CE Supported

8/28/2008

The touch screen driver reads user input from touch screen hardware and converts it to touch events that are sent to the Graphics, Windowing, and Events Subsystem (GWES). The driver also converts uncalibrated coordinates to calibrated coordinates. Calibrated coordinates compensate for any hardware anomalies, such as skew or nonlinear sequences.

For the touch screen driver to work properly it must submit points while the user's finger or stylus is touching the touch screen. When the user's finger or stylus is removed from the screen, the driver must submit at least one final event indicating that the user's finger or stylus tip was removed. The calibrated coordinates must be reported to the nearest one-quarter of a pixel.

The following steps detail the basic algorithm that you, the driver developer, can use to sample and calibrate the screen with the touch screen driver:

  1. Call the TouchPanelEnable function to start the screen sampling.
  2. Call the TouchPanelGetDeviceCaps function to request the number of sampling points.
  3. For every calibration point, perform the following steps:
    1. Call TouchPanelGetDeviceCaps to get a calibration coordinate.
    2. Draw a crosshair at the returned coordinate.
    3. Call the TouchPanelReadCalibrationPoint function to get calibration data.
  4. Call the TouchPanelSetCalibration function to calculate the calibration coefficients.

After the touch screen driver executes this sequence, any finger or stylus samples generated for the screen are passed to the callback function specified in TouchPanelEnable. The driver may pass either calibrated or uncalibrated points to the callback. If the driver has an efficient calibration algorithm, it can return calibrated points. However, if the calibration is computationally intensive, the driver may choose to return uncalibrated points, rather than perform extensive calculations in the high-priority driver thread. The lower priority thread processing points from the callback can then perform the calibration.

You can calibrate the screen without an ENTER key. The default calibration code includes a routine called UseEnterEsc. This routine calls the GetKeyboardStatus function to determine whether a keyboard is present, enabled, and supports the ENTER and ESC keys. If so, it prompts the user to use the keyboard to complete the calibration routine. If not, the user is prompted to tap the screen to complete calibration.

Internally, the GWES keyboard code opens HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\KEYBD and searches for a DWORD value called Status. This is a bitmask combining the KBDI_KEYBOARD_XXX values from %_WINCEROOT%\Public\Common\Sdk\Inc\Keybd.h. If Status is not found, GWES uses KBDI_KEYBOARD_PRESENT | KBDI_KEYBOARD_ENTER_ESC | KBDI_KEYBOARD_ALPHA_NUM. This registry access only occurs once, when the keyboard driver is loaded. This bitmask is the basis for what you get when you call GetKeyboardStatus. GWES adds or subtracts the KBDI_KEYBOARD_ENABLED bit based on calls to the EnableHardwareKeyboard function. The KBDI_KEYBOARD_ENABLED bit is set when the keyboard driver is loaded.

When you set the Status registry value, OEMs can then control the type of prompting users get during calibration. If a registry update is not flexible enough, the calibration code in %_WINCEROOT%\Public\Common\OAK\Drivers\Calibrui can be modified as appropriate.

See Also

Reference

Touch Screen Driver DDSI Functions
Touch Screen Driver Functions