- %_WINCEROOT%/Platform/XSC1BD/Drivers/Touchp
- %_WINCEROOT%/Public/Common/Oak/Drivers/Touch
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:
- Call the TouchPanelEnable function to start the screen sampling.
- Call the TouchPanelGetDeviceCaps function to request the number of sampling points.
- For every calibration point, perform the following steps:
- Call TouchPanelGetDeviceCaps to get a calibration coordinate.
- Draw a crosshair at the returned coordinate.
- Call the TouchPanelReadCalibrationPoint function to get calibration data.
- 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. |
TouchPanelDisable | Disables the touch screen. |
TouchPanelEnable | Enables and re-enables the touch screen. |
TouchPanelGetDeviceCaps | Returns information about the capabilities of the touch screen. |
TouchPanelInitializeCursor | This function provides an opportunity for touch drivers to move the cursor at initialization time. |
TouchPanelPowerHandler | Handles power-state change notifications. |
TouchPanelReadCalibrationAbort | Aborts the currently active call to the TouchPanelCalibrateAPoint function. |
TouchPanelReadCalibrationPoint | Initiates the process of getting a calibration point. |
TouchPanelSetCalibration | Initializes calibration information in the vCalcParam global parameter. |
TouchPanelSetMode | Sets mode information for a touch screen device. |