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

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

?? sermouse.c

?? wince.net板級支持包BSP for EP9315
?? C
?? 第 1 頁 / 共 2 頁
字號:
    }

    ctmo.ReadIntervalTimeout = MAXDWORD;
    ctmo.ReadTotalTimeoutMultiplier = 0;
    ctmo.ReadTotalTimeoutConstant = 0;

    if ( !SetCommTimeouts(g_hSerial, &ctmo) ) {
        DEBUGMSG(1, (TEXT("SetCommTimeouts error %d\r\n"), GetLastError()));
        return (FALSE);
    }

    if ( !SetCommMask (g_hSerial, EV_RXCHAR) ) {
        DEBUGMSG (ZONE_ERROR, (TEXT("Error from SetCommMask  %d\r\n"), GetLastError()));
        return (FALSE);
    }

    FUNC("-InitSerialPort");
    return (TRUE);
}



// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
DWORD 
SRM_Init(
        DWORD dwInitParam
        ) 
{
    BOOL fRet = FALSE;

    FUNC("+SRM_Init");

    g_hReadThread = NULL;
    g_hSerial = (HANDLE) NULL;
    g_hThreadStopped = CreateEvent (0, FALSE, FALSE, 0);
    g_fStopThread = FALSE;

    if ( DetectSerialMouse(dwInitParam) ) {

        DEBUGMSG(1, (TEXT("Serial Mouse Found.\r\n")));

        g_hReadThread = CreateThread(NULL, 0, ReadThread, 0, 0, NULL);
        if ( g_hReadThread == NULL ) {
            DEBUGMSG(1, (TEXT("Fatal Error!  Failed to create SerMouse Read thread.\r\n")));
            return (FALSE);
        } else {
            // We don't need the thread handle we just got, so we're going to 
            // close it right away.
            CloseHandle(g_hReadThread);
            g_hReadThread = NULL;
        }
        fRet = TRUE;
    }

    FUNC("-SRM_Init");
    return (fRet);
}   



// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
BOOL  
SRM_Deinit(
          DWORD dwData
          ) 
{
    FUNC("+SRM_Deinit");

    //
    // Tell the ReadThread to shut down as soon as possible.
    //
    g_fStopThread = TRUE;

    if ( g_hSerial ) {
        // 
        // WakeUp the WaitCommEvent if necessary
        //
        SetCommMask (g_hSerial, 0);
    }

    WaitForSingleObject(g_hThreadStopped, 2000);  // Don't wait forever. 
    DEBUGMSG(ZONE_INIT, (TEXT("THREAD EXIT...\r\n")));

    CloseHandle(g_hThreadStopped);

    if ( g_hSerial != NULL ) {
        CloseHandle(g_hSerial);
        g_hSerial = NULL;
    }

    if ( g_hReadThread != NULL ) {
        CloseHandle(g_hReadThread);
        g_hReadThread = NULL;
    }

    FUNC("-SRM_Deinit");
    return (TRUE);
}



// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
ULONG CALLBACK 
ReadThread(PVOID pv)
{
    const UINT8 cSyncBitMask = 0x40;

    UINT8   serialBytes[3];
    UINT8   rawData[3];
    UINT8   curByte = 0;
    BOOL    bSuccess;
    DWORD   dwBytesRead;
    DWORD   count;
    DWORD   fdwCommMask;


    FUNC("+ReadThread");

    //
    // The thread can be exitted by setting g_fStopThread.
    //
    while ( !g_fStopThread ) {
        //
        // We spend most of our time waiting for a serial event here.
        //
        WaitCommEvent (g_hSerial, &fdwCommMask, 0);

        DEBUGMSG(ZONE_READTHREAD, (TEXT("SerMouse : ReadThread : Past WaitCommEvent\r\n")));

        if ( fdwCommMask & EV_RXCHAR ) {
            //
            // We've woken up due to a real character arriving.
            //
            DEBUGMSG(ZONE_READTHREAD, (TEXT("SerMouse : ReadThread : Char ready\r\n")));

            do {
                //
                // Continue to read the serial port while data is available.
                //
                bSuccess = ReadFile(g_hSerial, &serialBytes, 3, &dwBytesRead, NULL);
                //
                // Only get 7-bits of data back from ReadFile here.
                //
                serialBytes[0] &= 0x7F;
                serialBytes[1] &= 0x7F;
                serialBytes[2] &= 0x7F;

                if ( !bSuccess ) {
                    DEBUGMSG(ZONE_ERROR, (TEXT("SerMouse : ReadFile error %d\r\n"), GetLastError()));
                } else if ( dwBytesRead == 0 ) {
                    //
                    // Timed out with no data read.  Do nothing.
                    //
                    DEBUGMSG(ZONE_DATA, (TEXT("SerMouse : ReadFile timed out with zero bytes\r\n")));
                } else {
                    //
                    // Successfully received commands from the mouse.
                    //
                    DEBUGMSG(ZONE_READTHREAD, (TEXT("SerMouse : ReadThread : Read %d bytes\r\n"), dwBytesRead));
                    for ( count = 0; count < dwBytesRead; count++ ) {
                        // Pick the byte up
                        rawData[curByte] = serialBytes[count];
                        switch ( curByte ) {
                        // First byte has the sync bit set, next two don't.
                        case 0:
                            if ( (rawData[0] & cSyncBitMask) != 0 ) {
                                curByte++;
                            }
                            break;
                        case 1:
                            if ( (rawData[1] & cSyncBitMask) == 0 ) {
                                curByte++;                          
                            } else {
                                curByte = 0;
                            }
                            break;
                        case 2:
                            if ( (rawData[2] & cSyncBitMask) == 0 ) {
                                SendData(rawData);
                            }
                            curByte = 0;
                            break;
                        }
                    }
                }               

            } while ( (!g_fStopThread) && dwBytesRead && bSuccess );
        } else {
            DEBUGMSG(ZONE_READTHREAD, (TEXT("SerMouse : ReadThread : NO CHAR!!!\r\n")));
        }
    }

    //
    // Signal to Deinit that we are exiting now, so it's safe to cleanup.
    //
    SetEvent (g_hThreadStopped);
    return (1);
}   



// -----------------------------------------------------------------------------
//	UINT8 rawData[]	assumed to be 3 long.
// -----------------------------------------------------------------------------
BOOL
SendData(
        UINT8 rawData[]
        )
{
    unsigned int evfMouse = 0;
    static BOOL bLastB0Down = FALSE;
    static BOOL bLastB1Down = FALSE;
    BOOL    bButton0Down;
    BOOL    bButton1Down;
    INT16   xOffset;
    INT16   yOffset;

    DEBUGMSG(ZONE_DATA, (TEXT("SerMouse : +SendData()\r\n")));
    DEBUGMSG(ZONE_DATA, (TEXT("SerMouse : RawData[0x%02X][0x%02X][0x%02X]\r\n"), 
                         rawData[0], rawData[1], rawData[2]));

    bButton0Down = ((rawData[0] & gcB0BitMask) != 0);
    bButton1Down = ((rawData[0] & gcB1BitMask) != 0);

    xOffset = (INT8)(((rawData[0] & 0x03) << 6) | rawData[1]);
    yOffset = (INT8)(((rawData[0] & 0x0C) << 4) | rawData[2]);

    DEBUGMSG(ZONE_DATA, (TEXT("SerMouse : xOffset = %d, yOffset = %d\r\n"), xOffset, yOffset));

    if ( xOffset || yOffset )
        evfMouse |= MOUSEEVENTF_MOVE;

    if ( bLastB0Down != bButton0Down || bButton0Down ) {
        if ( bButton0Down ) {
            DEBUGMSG(ZONE_DATA, (TEXT("SerMouse : Left Button Down\r\n")));
            evfMouse |= MOUSEEVENTF_LEFTDOWN;
        } else {
            DEBUGMSG(ZONE_DATA, (TEXT("SerMouse : Left Button Up\r\n")));
            evfMouse |= MOUSEEVENTF_LEFTUP;
        }

        bLastB0Down = bButton0Down;
    }

    if ( bLastB1Down != bButton1Down || bButton1Down ) {
        if ( bButton1Down ) {
            DEBUGMSG(ZONE_DATA, (TEXT("SerMouse : Right Button Down\r\n")));
            evfMouse |= MOUSEEVENTF_RIGHTDOWN;
        } else {
            DEBUGMSG(ZONE_DATA, (TEXT("SerMouse : Right Button Up\r\n")));
            evfMouse |= MOUSEEVENTF_RIGHTUP;
        }

        bLastB1Down = bButton1Down;
    }

    mouse_event(evfMouse, xOffset, yOffset, 0, 0);

    DEBUGMSG(ZONE_DATA, (TEXT("SerMouse : -SendData()\r\n")));
    return (TRUE);
}




// -----------------------------------------------------------------------------
//
//  These are the required entry points needed by DEVICE.EXE in order to 
//  load as a device driver. The Serial Mouse driver is pretty simply though
//  so all we need to do is load and run. We only implement Init and Deinit.
//
//  You could make a nice little Mouse Set Speed utility by allowing an app
//  to do a CreateFile on "SRM1:" and making IOCTL calls. Thus you'd also have
//  to implement SRM_Open, SRM_Close, SRM_IOControl.
//
// -----------------------------------------------------------------------------
DWORD SRM_Open (DWORD dwData, DWORD dwAccess, DWORD dwShareMode) {return (4);}
BOOL  SRM_Close(DWORD dwData) {return (TRUE);}
DWORD SRM_Read (DWORD dwData,  LPVOID pBuf, DWORD Len) {return (0);}
DWORD SRM_Write(DWORD dwData, LPCVOID pBuf, DWORD Len) {return (0);}
DWORD SRM_Seek (DWORD dwData, long pos, DWORD type) {return (DWORD)-1;}
VOID  SRM_PowerUp  (VOID) {}
VOID  SRM_PowerDown(VOID) {}
BOOL  SRM_IOControl(DWORD p1, DWORD p2, PBYTE p3, DWORD p4, PBYTE p5, 
                    DWORD p6, PDWORD p7) {return (TRUE);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
51午夜精品国产| 色呦呦国产精品| 亚洲成人一区二区在线观看| 日韩美女视频一区二区| 亚洲一卡二卡三卡四卡五卡| 国产精品久久久久影视| 国产日韩亚洲欧美综合| 久久久精品一品道一区| 亚洲国产精品传媒在线观看| 国产精品久久久久久久第一福利| 欧美国产在线观看| 国产精品色噜噜| 中文字幕精品—区二区四季| 日本一区二区高清| 18欧美亚洲精品| 亚洲一区二区三区国产| 亚洲电影一区二区三区| 日韩极品在线观看| 无码av免费一区二区三区试看| 日韩精品每日更新| 国产精品一品二品| av电影在线观看完整版一区二区| 91麻豆高清视频| 欧美久久高跟鞋激| 精品国产污污免费网站入口 | 久久嫩草精品久久久精品| 久久久亚洲高清| 亚洲日本电影在线| 日韩有码一区二区三区| 91视视频在线直接观看在线看网页在线看| 成人激情免费网站| 色噜噜狠狠成人中文综合| 欧美日韩激情一区二区| wwww国产精品欧美| 樱桃视频在线观看一区| 韩日av一区二区| 色婷婷av久久久久久久| 久久综合色8888| 亚洲专区一二三| 国产一区视频导航| 欧美日韩一级二级三级| 国产人久久人人人人爽| 亚洲一区二区av在线| 成人午夜在线免费| 欧美精选在线播放| 亚洲精品成人悠悠色影视| 国内欧美视频一区二区 | 亚洲超丰满肉感bbw| 丁香六月综合激情| 2020国产精品| 偷窥国产亚洲免费视频| 不卡高清视频专区| 久久久五月婷婷| 免费高清在线一区| 欧美欧美欧美欧美| 亚洲伦理在线精品| 成人一区二区三区在线观看| 91精品国产福利| 一区二区三区中文字幕精品精品| 国产馆精品极品| 日韩免费在线观看| 日韩不卡一区二区| 欧美视频日韩视频在线观看| 国产精品素人一区二区| 国产麻豆成人传媒免费观看| 欧美成人一区二区三区| 首页国产丝袜综合| 在线成人小视频| 亚洲成av人在线观看| 精品视频在线免费观看| 亚洲一区视频在线| 欧洲精品一区二区三区在线观看| 日韩美女久久久| 一本大道久久a久久综合婷婷 | 成人av资源在线| 久久久www成人免费无遮挡大片| 免费看欧美美女黄的网站| 欧美日韩久久不卡| 日本特黄久久久高潮| 欧美猛男男办公室激情| 亚洲成人午夜电影| 欧美一区二区三区精品| 麻豆免费看一区二区三区| 这里只有精品免费| 国产中文字幕一区| 欧美国产日韩一二三区| 91丨porny丨国产| 洋洋成人永久网站入口| 欧美日韩视频专区在线播放| 五月天婷婷综合| 日韩欧美在线网站| 国产美女精品一区二区三区| 中文字幕精品一区二区精品绿巨人| 国产高清精品网站| 亚洲激情五月婷婷| 日韩一区二区免费高清| 国产美女视频一区| 亚洲精品免费在线| 91精品国产黑色紧身裤美女| 国内精品在线播放| 亚洲女爱视频在线| 欧美区视频在线观看| 国产精品一区三区| 亚洲精品一二三| 日韩色在线观看| 北岛玲一区二区三区四区| 亚洲一区二区三区不卡国产欧美| 日韩欧美亚洲国产另类| aaa欧美大片| 日韩成人伦理电影在线观看| 国产拍揄自揄精品视频麻豆| 欧美性生活影院| 国产成人精品免费网站| 一区二区三区国产精华| 精品国产凹凸成av人网站| 91久久人澡人人添人人爽欧美| 蜜桃一区二区三区在线观看| 国产精品福利一区| 日韩一区二区在线观看| 色哟哟一区二区在线观看| 精品在线亚洲视频| 一区二区三区日韩在线观看| 欧美videos大乳护士334| 在线观看91视频| 国产精品夜夜嗨| 免费人成网站在线观看欧美高清| 成人欧美一区二区三区小说| 精品国产不卡一区二区三区| 欧美日韩一区二区三区免费看| 国产精品1024| 久久国产精品色| 亚洲成人午夜电影| 亚洲三级久久久| 欧美激情艳妇裸体舞| 日韩美女视频一区二区在线观看| 欧美性猛交xxxxxxxx| 成人激情免费网站| 国产91精品欧美| 韩国一区二区视频| 丝袜美腿亚洲色图| 午夜欧美电影在线观看| 一区二区三区中文字幕精品精品| 中文字幕第一区二区| 久久精品亚洲精品国产欧美kt∨ | 日本免费新一区视频| 亚洲久本草在线中文字幕| 国产精品美女久久久久aⅴ国产馆| 日韩欧美专区在线| 欧美一区二区三区在线观看视频| 欧美色视频一区| 欧美中文字幕一二三区视频| 91视频免费观看| av高清不卡在线| 一本一道波多野结衣一区二区| 成人av免费观看| www.亚洲色图| 不卡一卡二卡三乱码免费网站| 成人动漫中文字幕| 91在线国产观看| 国产成人一区在线| 99久久精品费精品国产一区二区| 成人精品鲁一区一区二区| 国产成人av一区二区| 成人sese在线| 91色.com| 欧美女孩性生活视频| 日韩一区二区三区av| 精品久久久久99| 国产精品亲子伦对白| 亚洲人成亚洲人成在线观看图片| 亚洲男人的天堂在线aⅴ视频| 亚洲丝袜制服诱惑| 亚洲成人免费av| 精品在线播放免费| 成人app网站| 91久久精品国产91性色tv| 欧美色老头old∨ideo| 日韩美一区二区三区| 国产精品欧美久久久久一区二区| 中文字幕中文字幕一区| 亚洲高清久久久| 国内成人精品2018免费看| 成人黄色小视频| 91精品一区二区三区在线观看| 精品va天堂亚洲国产| 亚洲欧洲精品一区二区三区不卡| 一区二区三区 在线观看视频| 日韩1区2区3区| 国产91丝袜在线18| 6080日韩午夜伦伦午夜伦| 久久夜色精品一区| 一区二区三区精密机械公司| 久久不见久久见中文字幕免费| 成人动漫精品一区二区| 91精品中文字幕一区二区三区| 国产欧美日本一区二区三区| 亚洲成人综合在线| 成人免费av资源| 欧美一区二区人人喊爽| 亚洲女性喷水在线观看一区|