WinCE下的触控屏驱动程序

Microsoft Corporation.
Last updated on Tuesday, May 18, 2004
Touch Screen Driver Samples
Sample code for touch screen drivers is provided in the following directories:
  • %_WINCEROOT%/Platform/XSC1BD/Drivers/Touchp
  • %_WINCEROOT%/Public/Common/Oak/Drivers/Touch
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.

FunctionDescription
DdsiTouchPanelAttachCalled when the model device driver's (MDD) DLL entry point gets a DLL_PROCESS_ATTACH message.
DdsiTouchPanelDetachCalled when the MDD's DLL entry point gets a DLL_PROCESS_DETACH message.
DdsiTouchPanelDisableDisables the touch screen device.
DdsiTouchPanelEnableApplies power to the touch screen device and initializes it for operation.
DdsiTouchPanelGetDeviceCapsQueries for capabilities of the touch screen device.
DdsiTouchPanelGetPointReturns the most recently acquired point and its associated tip-state information.
DdsiTouchPanelPowerHandlerIndicates to the driver that the system is entering or leaving the suspend state.
DdsiTouchPanelSetModeSets information about the touch screen device.
ErrorAnalysisProvides information on the accuracy of the touch screen calibration.
TouchPanelCalibrateAPointConverts uncalibrated points to calibrated points.
TouchPanelDisableDisables the touch screen.
TouchPanelEnableEnables and re-enables the touch screen.
TouchPanelGetDeviceCapsReturns information about the capabilities of the touch screen.
TouchPanelInitializeCursorThis function provides an opportunity for touch drivers to move the cursor at initialization time.
TouchPanelPowerHandlerHandles power-state change notifications.
TouchPanelReadCalibrationAbortAborts the currently active call to the TouchPanelCalibrateAPoint function.
TouchPanelReadCalibrationPointInitiates the process of getting a calibration point.
TouchPanelSetCalibrationInitializes calibration information in the vCalcParam global parameter.
TouchPanelSetModeSets mode information for a touch screen device.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值