Touch Screen Drivers

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 for an OEM's platform, the calibration code in %_WINCEROOT%\Public\Common\OAK\Drivers\Calibrui can be modified as appropriate.

The following table shows the touch screen driver functions.

Function Description
DdsiTouchPanelAttach Called when the model device driver's (MDD) DLL entry point gets a DLL_PROCESS_ATTACH message.
DdsiTouchPanelDetach Called when the MDD's DLL entry point gets a DLL_PROCESS_DETACH message.
DdsiTouchPanelDisable Disables the touch screen device.
DdsiTouchPanelEnable Applies power to the touch screen device and initializes it for operation.
DdsiTouchPanelGetDeviceCaps Queries for capabilities of the touch screen device.
DdsiTouchPanelGetPoint Returns the most recently acquired point and its associated tip-state information.
DdsiTouchPanelPowerHandler Indicates to the driver that the system is entering or leaving the suspend state.
DdsiTouchPanelSetMode Sets information about the touch screen device.
ErrorAnalysis Provides information on the accuracy of the touch screen calibration.
TouchPanelCalibrateAPoint Converts uncalibrated points to calibrated points.
TouchanelDisable Disables the touch screen.
TouchanelEnable Enables and re-enables the touch screen.
TouchanelGetDeviceCaps Returns information about the capabilities of the touch screen.
TouchanelInitializeCursor This function provides an opportunity for touch drivers to move the cursor at initialization time.
TouchanelPowerHandler Handles power-state change notifications.
TouchanelReadCalibrationAbort Aborts the currently active call to the TouchPanelCalibrateAPoint function.
TouchanelReadCalibrationPoint Initiates the process of getting a calibration point.
TouchanelSetCalibration Initializes calibration information in the vCalcParam global parameter.
TouchanelSetMode Sets mode information for a touch screen device.

See Also

Touch Screen Driver Samples | Touch Screen Driver Registry Settings

 Last updated on Tuesday, May 18, 2004

© 1992-2003 Microsoft Corporation. All rights reserved.