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

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

?? ucbreg.c

?? windows ce 50 drive program
?? C
字號:
#pragma optimize("", off)
/*++
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.
Copyright (c) 1995-2000 Microsoft Corporation.  All rights reserved.

Module Name:  

  ucbreg.c

Abstract:  

  This module contains routines for manipulating the touch/audio board
  registers.  The FPGA uses a serial interface to actually communicate
  with the board, and indicates completions either by an interrupt, or
  a polled bit.  
  
Functions:

  TchAudAndReg
  TchAudOrReg
  TchAudWriteReg
  TchAudReadReg
  
Notes:

Revision History:

  Glenn Davis 4/1/97

--*/
#include <windows.h>
#include <p2.h>
#include <p2debug.h>
#include <tchaud.h>
#include <drv_glob.h>

/*
 * Timeout value for poll loop waiting for completion of register operation.
 */
#define TCHAUD_REG_TIMEOUT	500 /* ms */

#define TCHAUD_SEM_TIMEOUT  (TCHAUD_REG_TIMEOUT*2)

/*
 * Macro to handle wrap when comparing timestamps
 */
#define ELAPSED_TICKS(start,end)  (((start) <= (end))? ((end) - (start)) : (0xffffffff - (start) + (end) + 1))

/*
 * Routines to provide synchronization for accessing the touch/audio asic
 * registers.  We use a mutex to prevent contention between the touch and
 * audio drivers, and a flag in driver globals to prevent contention with
 * the touch ISR.  If the touch ISR sees the flag set, it will not attempt
 * to access the UCB registers (it will wait until the 5ms pen timer goes off
 * and try again).
 */
void
TchAudLock(HANDLE hMutex, PULONG pSem)
{
    DWORD StartTime = GetTickCount(), CurTime;
    
    WaitForSingleObject(hMutex, TCHAUD_SEM_TIMEOUT);
    // Now, synchronize with ISR. Busy wait OK, since ISR will always preeempt.
    while (InterlockedTestExchange(pSem, 0, 1) != 0) {
        Sleep(0);   // Force reschedule
        CurTime = GetTickCount();
        if (ELAPSED_TICKS(StartTime,CurTime) > TCHAUD_SEM_TIMEOUT) {
            RETAILMSG(1,(TEXT("!TchAudLock: Timed out waiting for semaphore!!!\r\n")));
            break;
        }
    }
}

void
TchAudUnlock(HANDLE hMutex, PULONG pSem)
{
    *pSem = 0;
    ReleaseMutex(hMutex);
}


/*
 * Routines for accessing the Touch/audio ASIC registers.  To read or write
 * one of the ASIC registers, first specify the register and operation,
 * and then wait for completion, which is indicated by the regIntr bit in the
 * ucbStr register.  We poll for this event in WaitForRegCompletion.
 */
static BOOL 
WaitForRegCompletion(
    volatile PTCHAUD_ASIC_REGISTERS pTchAudRegs,
    BOOL bInPowerHandler)
{
   DWORD StartTime;

   if (!bInPowerHandler)
       StartTime = GetTickCount();
   
   while (1)
   {
       if (pTchAudRegs->ucbStr & intrMaskRegIntrMask) {
           // Clear regIntr interrupt.
           pTchAudRegs->ucbStr = intrMaskRegIntrMask;           
           return TRUE;
       }
       if (!bInPowerHandler) {
           DWORD CurTime = GetTickCount();
           if (ELAPSED_TICKS(StartTime,CurTime) > TCHAUD_REG_TIMEOUT) {
               RETAILMSG(1,(TEXT("!TchAud: Timed out waiting for UCB reg completion\n\r")));
               return FALSE;
           }
       }
   }
   return FALSE;
}

typedef enum {OP_READ, OP_WRITE,OP_AND,OP_OR} REGOP;

/*
 * Routine to perform read write and modify operations on ASIC registers.
 */
static BOOL
TchAudRegOp(
    USHORT Reg,       // UCB register number
    USHORT Val,       // Value for modify operations
    USHORT *pRetval,  // for OP_READ only 
    REGOP op,         
    volatile PTCHAUD_ASIC_REGISTERS pTchAudRegs,
    BOOL bInPowerHandler)
{
 
    BOOL bRet; 
    USHORT TchAudIntrMask;

    // Make sure regIntr is masked so we don't generate interrupts 
    // when we write to the ASIC.
    TchAudIntrMask = pTchAudRegs->intrMask;
    pTchAudRegs->intrMask = (USHORT)(TchAudIntrMask & ~intrMaskRegIntrMask); 

    // Clear regIntr interrupt just as a precaution.
    pTchAudRegs->ucbStr = intrMaskRegIntrMask;

    if (op != OP_WRITE) {
        // Read register
        pTchAudRegs->ucbCntr = (USHORT)(Reg & ~ucbCntrWriteBit);
        pTchAudRegs->ucbRegister = 0;
        if (WaitForRegCompletion(pTchAudRegs, bInPowerHandler) == FALSE) {
            bRet = FALSE;
            goto RegOpsDone;
        }

        if (op == OP_READ) {
            *pRetval = pTchAudRegs->ucbRegister;
            bRet = TRUE;
            goto RegOpsDone;
        }
        
        if (op == OP_AND)
            Val &= pTchAudRegs->ucbRegister;
        else // OR
            Val |= pTchAudRegs->ucbRegister;
    }
    
    // Write to register
//    RETAILMSG(1,(TEXT("TchAudRegOp: Writing val 0x%X to reg %u, thread: 0x%X\r\n"),Val,Reg,GetCurrentThread()));
    pTchAudRegs->ucbCntr     = (USHORT)(Reg | ucbCntrWriteBit);
    pTchAudRegs->ucbRegister = Val;

    bRet = WaitForRegCompletion(pTchAudRegs, bInPowerHandler);

RegOpsDone:
    
    //
    // Restore intrMask register to original value.
    //
    pTchAudRegs->intrMask = TchAudIntrMask;
    return bRet;   
}


BOOL
TchAudReadReg(
    USHORT Reg,
    USHORT *pVal,
    PTCHAUD_ASIC_REGISTERS pTchAudRegs,
    BOOL bInPowerHandler)
{
    return TchAudRegOp(Reg,0,pVal,OP_READ, pTchAudRegs, bInPowerHandler);
}

BOOL
TchAudWriteReg(
    USHORT Reg,
    USHORT Val,
    PTCHAUD_ASIC_REGISTERS pTchAudRegs,
    BOOL bInPowerHandler)
{
    return TchAudRegOp(Reg,Val,NULL,OP_WRITE, pTchAudRegs, bInPowerHandler);
}
BOOL
TchAudAndReg(
    USHORT Reg,
    USHORT Val,
    PTCHAUD_ASIC_REGISTERS pTchAudRegs,
    BOOL bInPowerHandler)
{
    return TchAudRegOp(Reg,Val,NULL,OP_AND, pTchAudRegs, bInPowerHandler);
}
BOOL
TchAudOrReg(
    USHORT Reg,
    USHORT Val,
    PTCHAUD_ASIC_REGISTERS pTchAudRegs,
    BOOL bInPowerHandler)
{
    return TchAudRegOp(Reg,Val,NULL,OP_OR, pTchAudRegs, bInPowerHandler);
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品欧美一区二区在线观看| 亚洲欧美日韩一区| 国产嫩草影院久久久久| 国内久久精品视频| 一区免费观看视频| 7777精品伊人久久久大香线蕉 | 欧洲精品在线观看| 韩国三级中文字幕hd久久精品| 最新国产の精品合集bt伙计| 91精品国产乱码久久蜜臀| 成人深夜在线观看| 日韩av中文在线观看| 一区二区三区四区亚洲| 精品成人在线观看| 7777精品伊人久久久大香线蕉| 国产成人精品免费在线| 亚洲国产wwwccc36天堂| 亚洲精品日日夜夜| 久久久精品蜜桃| 精品国产乱码91久久久久久网站| 色爱区综合激月婷婷| 国产成人三级在线观看| 理论电影国产精品| 亚洲激情欧美激情| 国产精品成人午夜| 国产精品中文字幕欧美| 国产天堂亚洲国产碰碰| 国产成人综合精品三级| 欧美极品aⅴ影院| 国产成人亚洲精品青草天美| 国产精品入口麻豆原神| 99久久精品国产导航| 国产婷婷精品av在线| 色久优优欧美色久优优| 国产精品影视在线观看| 亚洲黄色在线视频| 67194成人在线观看| 懂色中文一区二区在线播放| 日韩中文字幕一区二区三区| 中文字幕日韩精品一区| 国产午夜精品美女毛片视频| 26uuu色噜噜精品一区| 欧美日韩成人激情| 欧美一三区三区四区免费在线看| 在线亚洲一区二区| 国产电影精品久久禁18| 国产精品18久久久久久久久久久久| 日韩在线a电影| 青青草国产精品97视觉盛宴| 亚洲成人高清在线| 舔着乳尖日韩一区| 五月天欧美精品| 亚洲高清一区二区三区| 日本午夜精品视频在线观看| 午夜精品一区在线观看| 欧美96一区二区免费视频| 丝袜亚洲另类欧美| 日产欧产美韩系列久久99| 日韩高清不卡在线| 蜜桃一区二区三区在线| 肉丝袜脚交视频一区二区| 久久国产精品99精品国产| 蜜桃av噜噜一区二区三区小说| 国精产品一区一区三区mba桃花 | 久久新电视剧免费观看| 久久精品一区二区三区不卡牛牛| 精品乱人伦小说| 国产女人18毛片水真多成人如厕| 亚洲日本丝袜连裤袜办公室| 亚洲精品高清在线| 奇米影视一区二区三区| 精品在线免费视频| 成人午夜精品一区二区三区| caoporn国产一区二区| 色婷婷av一区二区三区大白胸| 91亚洲精品久久久蜜桃网站| 欧美性猛片aaaaaaa做受| 欧美精品高清视频| 日本一区二区三区视频视频| 亚洲欧洲制服丝袜| 久久精品国内一区二区三区| 久久国产生活片100| 成人高清免费观看| 欧美三级中文字| 日本韩国视频一区二区| 欧美电影免费观看高清完整版在| 国产三级久久久| 亚洲第一综合色| 激情深爱一区二区| 欧洲精品视频在线观看| 日韩欧美国产一二三区| 综合亚洲深深色噜噜狠狠网站| 午夜私人影院久久久久| 久久精品国产亚洲高清剧情介绍| 色综合中文综合网| 亚洲午夜视频在线观看| 国产精品综合视频| 在线精品视频一区二区| 久久久久88色偷偷免费| 亚洲精品国产一区二区三区四区在线| 狠狠色丁香婷综合久久| 91社区在线播放| 国产亚洲欧美色| 亚洲成人动漫一区| 国产成人在线免费观看| 在线观看91av| 亚洲欧洲日韩在线| 国产成人无遮挡在线视频| 欧美午夜影院一区| 亚洲乱码国产乱码精品精的特点| 日本中文字幕一区二区视频| 色猫猫国产区一区二在线视频| 精品国产乱码久久久久久免费| 亚洲欧洲三级电影| 成人综合在线网站| 日韩色在线观看| 欧美a级理论片| 在线观看91精品国产入口| 国产精品乱码妇女bbbb| 蜜臀va亚洲va欧美va天堂| www.欧美日韩国产在线| 日韩免费观看高清完整版| 一区二区三区美女| 成人激情免费电影网址| 精品美女在线观看| 日韩高清在线电影| 欧美日韩国产天堂| 亚洲精品你懂的| av成人免费在线观看| 久久久久久免费毛片精品| 另类小说欧美激情| 欧美日韩精品福利| 亚洲午夜激情网页| 色婷婷激情综合| 久久精品夜色噜噜亚洲a∨| 国产一区二区在线观看免费| 日韩你懂的在线播放| 视频一区在线播放| 欧美日韩色一区| 亚洲国产毛片aaaaa无费看 | 日韩黄色片在线观看| 91麻豆精品国产自产在线观看一区 | 成人性视频免费网站| 久久综合色播五月| 午夜视频在线观看一区二区三区| 欧美酷刑日本凌虐凌虐| 亚洲国产精品视频| 欧美一区二区三区系列电影| 偷拍与自拍一区| 欧美一级欧美三级| 美洲天堂一区二卡三卡四卡视频| 欧美成人福利视频| 久久99精品国产.久久久久久| 精品成人一区二区| 国产精品一二三四五| 国产精品午夜在线观看| 不卡视频一二三四| 欧美一区二区美女| 国产在线一区观看| 久久精品一区四区| 91精彩视频在线观看| 亚洲自拍偷拍av| 精品1区2区3区| 午夜精品久久久久| 日韩欧美国产高清| 成人免费av在线| 亚洲综合色区另类av| 日韩免费电影网站| 国产在线播放一区二区三区| 亚洲丝袜美腿综合| 欧美色视频在线观看| 韩国欧美一区二区| 国产精品久久久久一区| 欧美色中文字幕| 美国精品在线观看| 综合欧美亚洲日本| 欧美巨大另类极品videosbest | 99精品视频在线观看免费| 亚洲图片激情小说| 91超碰这里只有精品国产| 久久69国产一区二区蜜臀| 国产精品激情偷乱一区二区∴| 色拍拍在线精品视频8848| 免费观看在线综合| 国产精品热久久久久夜色精品三区| 91在线码无精品| 亚洲成av人片一区二区| 91精品国产乱码久久蜜臀| 国产成+人+日韩+欧美+亚洲| 亚洲国产人成综合网站| 久久久久久久久一| 6080午夜不卡| 风间由美性色一区二区三区| 日本中文字幕一区二区有限公司| 久久精品亚洲国产奇米99| 91精品国产综合久久久久久久 | 欧美一级片免费看| 色视频欧美一区二区三区| 精品一区二区三区在线观看 | 国产丝袜美腿一区二区三区|