亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tchmain.c

?? PXA270 MainstoneII平臺下完整觸摸屏驅動源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this sample source code is subject to the terms of the Microsoft
// license agreement under which you licensed this sample source code. If
// you did not accept the terms of the license agreement, you are not
// authorized to use this sample source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the LICENSE.RTF on your install media or the root of your tools installation.
// THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES.
//
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

@doc EX_TOUCH_DDI INTERNAL DRIVERS MDD TOUCH_PANEL

Module Name:  

@module tchmain.c

Abstract:  
    This module contains the DDI implementation and the supporting administriva.
    if DBGCAL is defined, the results of the calibration calculations are
    displayed following the setting of calibration data. <nl>


Functions:
TouchPanelpDetach
TouchPanelpAttach
TouchPanelpISR
TouchPanelGetDeviceCaps
TouchPanelSetMode
TouchPanelPowerHandler
TouchPanelEnable
TouchPanelDisable
TouchPanelReadCalibrationPoint
TouchPanelReadCalibrationAbort
Notes: 


--*/

#include    <windows.h>
#include    <types.h>
#include    <memory.h>
#include    <nkintr.h>
#include    <tchddi.h>
#include    <tchddsi.h>

#ifndef _PREFAST_
#pragma warning(disable: 4068) // Disable pragma warnings
#endif

extern PFN_TOUCH_PANEL_CALLBACK v_pfnCgrPointCallback;
extern PFN_TOUCH_PANEL_CALLBACK v_pfnCgrCallback;
// To track if we are in OOM state.
BOOL _bTchThreadHighPriority = FALSE;
//
// Run at high priority so that we can service our interrupts quickly.
//
#define DEFAULT_THREAD_PRIORITY         109
#define DEFAULT_THREAD_HIGH_PRIORITY    109

#define CAL_DELTA_RESET         20
#define CAL_HOLD_STEADY_TIME    1500


// If we are a DLL, we can define our dpCurSettings
#ifdef DEBUG
DBGPARAM dpCurSettings = {
    TEXT("Touch"), { 
    TEXT("Samples"),TEXT("Calibrate"),TEXT("Stats"),TEXT("Thread"),
    TEXT("TipState"),TEXT("Init"),TEXT(""),TEXT(""),
    TEXT(""),TEXT("Misc"),TEXT("Delays"),TEXT("Timing"),
    TEXT("Alloc"),TEXT("Function"),TEXT("Warning"),TEXT("Error") },
    0xC020              // warning, error, init
};
#endif

//
// Calibration State defintions
//
// @const LONG | CalibrationAvailable |
// Indicates that calibration is not in progress and is available for use.
//
// @const LONG | CalibrationActive |
// Indicates that calibration is active.
//
// @const LONG | CalibrationInactive |
// Indicates that calibration is inactive and waiting for completion.
//
// @const LONG | CalibrationAborted |
// Indicates that calibration is in the process of aborting via user request.
//

#define CalibrationInactive     0x00
#define CalibrationWaiting      0x01
#define CalibrationDown         0x02
#define CalibrationValid        0x03
#define CalibrationAborted      0x04


// Scale factor to support sub-pixel resolutions
#define X_SCALE_FACTOR 4
#define Y_SCALE_FACTOR 4

//
// Macro for absolute value.
//

#define ABS(x)  ((x) >= 0 ? (x) : (-(x)))

//
// Internal Function Prototypes
//

static ULONG
TouchPanelpISR(
    PVOID   Reserved
    );


ULONG   culReferenceCount;              //@globalvar ULONG | culReferenceCount | Count of attached threads

HANDLE  hThread=NULL;                        //@globalvar HANDLE | hThread | Handle of attached thread

CRITICAL_SECTION    csMutex;            //@globalvar CRITICAL_SECTION | csMutex | Critical section

HANDLE  hTouchPanelEvent;               //@globalvar HANDLE | hTouchPanelEvent | Holds the event handle for
                                            // touch panel event notification.

HANDLE  hCalibrationSampleAvailable;    //@globalvar HANDLE  | hCalibrationSampleAvailable | Holds the event handle for
                                            // notification that a calibration
                                            // mapping point is available.

INT     CalibrationState;             //@globalvar INT | CalibrationState | Flag which indicates the
                                            // state of calibration: Available,
                                            // Active or Inactive.

static DWORD gThreadPriority;           //@globalvar DWORD | gThreadPriority | Interrupt thread normal priority
static DWORD gThreadHighPriority;       //@globalvar DWORD | gThreadHighPriority | Interrupt thread high priority
static BOOL bTerminate=FALSE;


// The MIN_CAL_COUNT is defined in the PDD, since each touch panel
// has different characteristics.  The value should be high enough
// to prevent spurious touches, but low enough that the user doesn't
// have to hold the pen on each crosshair too long.
extern int MIN_CAL_COUNT;

LONG    lCalibrationXCoord;             //@globalvar LONG | lCalibrationXCoord | Holds the X coordinate
                                            // corresponding to the touch.
LONG    lCalibrationYCoord;             //@globalvar  LONG | lCalibrationYCoord | Holds the Y coordinate
                                            // corresponding to the touch.

HANDLE  ghevCalibrationActivity;        // activity event used to notify the Power Manager of touch 
                                        // events during calibration

INT32 DisplayWidth;
INT32 DisplayHeight;

DWORD gdwTouchIstTimeout = INFINITE;    // hold csMutex when accessing this

//
//@globalvar PFN_TOUCH_PANEL_CALLBACK | v_pfnPointCallback |
// Pointer to the application supplied function for receiving points.
//
PFN_TOUCH_PANEL_CALLBACK v_pfnPointCallback;

//**********************************************************************
// The following routines are internal helpers, and are not visible to
// the DDI layer.
// @doc IN_TOUCH_DDI INTERNAL DRIVERS MDD TOUCH_PANEL
//**********************************************************************

/*++

Autodoc Information:

    @func VOID | TouchPanelpDetach |
    Performs cleanup and frees memory when owning process detaches.

    @devnote
    We let ExitProcess handle the shutting down of the ISR thread.

--*/
static VOID
TouchPanelpDetach(
    VOID
    )
{

}


/*++


Autodoc Information:

    @func BOOL | TouchPanelpAttach |
    This routine performs the initialization for the touch panel.

    @rdesc
    If the function succeeds the return value is TRUE, otherwise, it is FALSE.

--*/
static BOOL
TouchPanelpAttach(
    VOID
    )
{
    //
    // Create the event for touch panel events.
    // If creation fails, return failure.
    //

    hTouchPanelEvent = CreateEvent( NULL,
                                                     FALSE,     //  Not manual reset
                                                     FALSE,     //  Not signalled
                                                     NULL
                                                     );

    if ( !hTouchPanelEvent )
        return ( FALSE );

    //
    // Create the event for signaling when a calibration sample has been sent.
    //

    hCalibrationSampleAvailable =
        CreateEvent( NULL,
                     FALSE,     //  Not manual reset
                     FALSE,     //  Not signalled
                     NULL
                    );

    if ( !hCalibrationSampleAvailable )
        return ( FALSE );

    DdsiTouchPanelDisable();    // Insure the device is disabled

    //
    // Initialize the critical section, flags, callbacks, reference count,
    // sample rate.
    //

    InitializeCriticalSection( &csMutex );
    CalibrationState = CalibrationInactive;
    v_pfnPointCallback = NULL;
    culReferenceCount = 0;


    //
    // Initialize calibration info used to convert uncalibrated to calibrated
    // points so that function is a noop.
    //

    TouchPanelSetCalibration( 0, NULL, NULL, NULL, NULL );

    return ( TRUE );
}

/*++

Autodoc Information:

    @func ULONG | TouchPanelpISR |
    This routine is the thread which handles touch panel events.
    The event that this thread synchronizes on is signaled by the PDD based on
    the sampling rate, typically 10ms.

    @rdesc
    Never returns.

--*/
static ULONG
TouchPanelpISR(
    PVOID   Reserved  //@parm Reserved, not used.
    )
{
    TOUCH_PANEL_SAMPLE_FLAGS    SampleFlags = 0;
    INT32                       RawX, CalX;
    INT32                       RawY, CalY;
    UINT32                      MaxX =  DisplayWidth * X_SCALE_FACTOR;
    UINT32                      MaxY =  DisplayHeight * Y_SCALE_FACTOR;
    UINT32                      CurrentDown = 0;
    static LONG CX;
    static LONG CY;
    static LONG XBase;
    static LONG YBase;
    static int  CalibrationSampleCount;
    static BOOL     fSetBase;
    static DWORD    BaseTime;
    static BOOL     fGotSample;

    PFN_TOUCH_PANEL_CALLBACK pfnCallback;

    // Need to be all kmode so that we can write to shared memory.
    //

    while  ( !bTerminate )
    {

        WaitForSingleObject( hTouchPanelEvent, gdwTouchIstTimeout );
        EnterCriticalSection( &csMutex );
        DEBUGMSG(ZONE_THREAD, (TEXT("TCH_INTR\r\n")) );

        // Give the pdd the down state of the previous sample
        if ( CurrentDown )
            SampleFlags |= TouchSamplePreviousDownFlag;
        else
            SampleFlags &= ~TouchSamplePreviousDownFlag;

        DdsiTouchPanelGetPoint( &SampleFlags, &RawX, &RawY );    // Get the point info
        
        if ( SampleFlags & TouchSampleIgnore )
        {
            // do nothing, not a valid sample
            LeaveCriticalSection( &csMutex );
            continue;
        }

        if ( SampleFlags & TouchSampleValidFlag )
            {
            // Set the previous down state for our use, since the pdd may not
            // have preserved it.
            if ( CurrentDown )
                SampleFlags |= TouchSamplePreviousDownFlag;
            else
                SampleFlags &= ~TouchSamplePreviousDownFlag;

            CurrentDown = SampleFlags & TouchSampleDownFlag;
            }

        if ( CalibrationState )
        {
            //
            // At this point we know that calibration is active.
            //
            // Typically, the user touches the panel then converges to the
            // displayed crosshair. When the tip state transitions to
            // the up state, we forward the last valid point to the callback
            // function.
            //
            DEBUGMSG(ZONE_SAMPLES, (TEXT("**** Calibration point (%d, %d), flags 0x%4.4X\r\n"),
                   RawX, RawY, SampleFlags) );

//  Skip if not valid.
            if ( !(SampleFlags & TouchSampleValidFlag) )
                {
                LeaveCriticalSection( &csMutex );
                continue;
                }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产乱| 99久久婷婷国产精品综合| 国产午夜精品久久| 宅男噜噜噜66一区二区66| 色综合亚洲欧洲| 精品一区二区三区不卡| 日本色综合中文字幕| 亚洲国产综合91精品麻豆 | 国产一级精品在线| 蜜桃一区二区三区四区| 免费成人在线影院| 粉嫩久久99精品久久久久久夜| 国产精品白丝av| 99re亚洲国产精品| 久久久久久麻豆| 亚洲视频每日更新| 亚洲网友自拍偷拍| 色噜噜狠狠成人中文综合| 欧美三级电影精品| 欧美va天堂va视频va在线| 久久影视一区二区| 亚洲久本草在线中文字幕| 亚洲成人av免费| 国产一本一道久久香蕉| 日韩欧美中文字幕精品| 日韩美女视频一区二区| www.亚洲精品| 91精品国产欧美日韩| 亚洲综合色噜噜狠狠| 国产美女精品人人做人人爽| 欧美成人精品福利| 精品一区二区三区免费播放| 91精品黄色片免费大全| 蜜桃视频一区二区三区 | 久久久久久久久97黄色工厂| 美女网站视频久久| 久久久91精品国产一区二区精品| 久久不见久久见免费视频1| 不卡在线观看av| 日韩欧美二区三区| 亚洲美女淫视频| 精品亚洲国产成人av制服丝袜 | 不卡av在线网| 亚洲人成精品久久久久久 | 欧美一区二区三区视频在线| 日韩电影在线免费观看| 欧美一区二区三区小说| 精品一区二区三区在线视频| 欧美精品一区二区三区很污很色的| 亚洲精品菠萝久久久久久久| 在线观看www91| 中文成人av在线| 无吗不卡中文字幕| 92国产精品观看| 亚洲电影中文字幕在线观看| 日韩一区二区三区免费看| 国产精品一区不卡| 日韩美女啊v在线免费观看| 欧美性极品少妇| 亚洲精品日韩一| 日韩欧美中文字幕一区| jlzzjlzz亚洲日本少妇| 日本不卡高清视频| 国产精品网站导航| 欧美精品自拍偷拍动漫精品| 亚洲综合在线第一页| 日韩欧美在线影院| 99精品国产99久久久久久白柏| 亚洲mv在线观看| 久久精品免费在线观看| 欧美日韩一区二区三区在线 | 亚洲国产欧美在线人成| 欧美v亚洲v综合ⅴ国产v| 成人av网站免费| 日韩经典一区二区| 56国语精品自产拍在线观看| 国产福利一区二区三区视频 | 久久av资源网| 亚洲精品久久久久久国产精华液| 欧美一级专区免费大片| 97精品视频在线观看自产线路二| 日本一区中文字幕| 亚洲精品亚洲人成人网在线播放| 欧美一级在线视频| 99久久精品免费看国产免费软件| 理论电影国产精品| 午夜精品福利在线| 亚洲丝袜自拍清纯另类| 久久综合久久鬼色中文字| 欧美私人免费视频| 不卡视频免费播放| 国产在线精品不卡| 蜜臀久久久久久久| 午夜精品久久久久久久| 亚洲欧美一区二区视频| 欧美丝袜丝交足nylons| 成人丝袜高跟foot| 天天操天天色综合| 亚洲综合免费观看高清完整版 | 久久影院午夜片一区| 欧美一区二区三区白人| 欧美日韩免费一区二区三区| 91在线视频免费观看| www.亚洲色图| 国产一区二区免费视频| 韩国三级中文字幕hd久久精品| 日韩精品一区二区三区老鸭窝| 在线精品亚洲一区二区不卡| 99这里都是精品| 成人av网站在线观看免费| 99久久99久久精品免费看蜜桃| 国产一区在线看| 久久91精品国产91久久小草| 麻豆成人久久精品二区三区小说| 天天色 色综合| 男男gaygay亚洲| 日本va欧美va精品| 韩国三级电影一区二区| 国产麻豆欧美日韩一区| 国产不卡在线一区| 成人久久18免费网站麻豆 | 一区二区三区欧美日| 欧美日韩精品是欧美日韩精品| 国产一区二区看久久| 国产福利一区二区三区| 成人97人人超碰人人99| 在线影院国内精品| 欧美一区二区播放| 精品对白一区国产伦| 中文字幕电影一区| 日韩精品资源二区在线| 26uuu国产日韩综合| 国产欧美精品区一区二区三区 | 极品瑜伽女神91| 国产成人av一区二区| av电影天堂一区二区在线| 91精品91久久久中77777| 午夜精品爽啪视频| 亚洲国产欧美日韩另类综合| 日韩av不卡在线观看| 国产一区二区在线看| 成人黄页毛片网站| 欧洲av在线精品| 欧美成人免费网站| 亚洲免费av在线| 午夜精品久久久久久| 国产成人午夜视频| 欧美中文字幕一区| 久久众筹精品私拍模特| 亚洲免费在线看| 日本成人超碰在线观看| 成人avav在线| 日韩西西人体444www| 久久精品男人天堂av| 亚洲制服丝袜av| 老司机精品视频一区二区三区| 成人性生交大片免费看在线播放 | 日韩视频一区在线观看| 中文字幕视频一区二区三区久| 亚洲高清一区二区三区| 风流少妇一区二区| 欧美做爰猛烈大尺度电影无法无天| 日韩视频在线一区二区| 亚洲已满18点击进入久久| 国产乱国产乱300精品| 欧美日韩卡一卡二| 亚洲人被黑人高潮完整版| 精品无人区卡一卡二卡三乱码免费卡 | 成人免费av在线| 日韩一区二区三区免费看 | 欧美一级免费大片| 亚洲欧美在线视频观看| 国产自产高清不卡| 欧美一区二区视频在线观看2022| 一区二区中文视频| 国产高清不卡一区二区| 精品国产一区二区三区久久久蜜月 | 在线电影院国产精品| 亚洲天堂福利av| 国产成人午夜视频| 日韩精品一区二| 日本v片在线高清不卡在线观看| 91精品福利视频| 亚洲日本乱码在线观看| 成人国产精品视频| 国产亚洲制服色| 国产精品夜夜嗨| 精品国产免费久久| 热久久国产精品| 欧美一区欧美二区| 日韩成人av影视| 欧美日本一区二区| 视频一区在线播放| 制服丝袜日韩国产| 日韩不卡一二三区| 欧美一区二区日韩一区二区| 日韩黄色免费网站| 欧美一区二区三区免费| 久久av资源网| 久久九九影视网|