中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 如何編寫Windows CE.net的usb驅動程序(2)

        如何編寫Windows CE.net的usb驅動程序(2)

        作者: 時間:2012-05-02 來源:網(wǎng)絡 收藏

        另外一個函數(shù)是USBUninstallDriver()函數(shù),具體代碼如下:

        externCBOOL

        USBUnInstallDriver()

        {

        BOOLfRet=FALSE;

        HINSTANCEhInst=LoadLibrary(LUSBD.DLL);

        if(hInst)

        {

        LPUN_REGISTER_CLIENT_DRIVER_IDpUnRegisterId=

        (LPUN_REGISTER_CLIENT_DRIVER_ID)

        GetProcAddress(hInst,gcszUnRegisterClientDriverId);

        LPUN_REGISTER_CLIENT_SETTINGSpUnRegisterSettings=

        (LPUN_REGISTER_CLIENT_SETTINGS)GetProcAddress(hInst,

        gcszUnRegisterClientSettings);

        if(pUnRegisterSettings)

        {

        USB_DRIVER_SETTINGSDriverSettings;

        DriverSettings.dwCount=sizeof(DriverSettings);

        //必須填入與注冊時相同的信息。

        DriverSettings.dwVendorId=USB_NO_INFO;

        DriverSettings.dwProductId=USB_NO_INFO;

        DriverSettings.dwReleaseNumber=USB_NO_INFO;

        DriverSettings.dwDeviceClass=USB_NO_INFO;

        DriverSettings.dwDeviceSubClass=USB_NO_INFO;

        DriverSettings.dwDeviceProtocol=USB_NO_INFO;

        DriverSettings.dwInterfaceClass=0x03;//HID

        DriverSettings.dwInterfaceSubClass=0x01;//bootdevice

        DriverSettings.dwInterfaceProtocol=0x02;//mouse

        fRet=(*pUnRegisterSettings)(gcszMouseDriverId,NULL,

        DriverSettings);

        }

        if(pUnRegisterId)

        {

        BOOLfRetTemp=(*pUnRegisterId)(gcszMouseDriverId);

        fRet=fRet?fRetTemp:fRet;

        }

        FreeLibrary(hInst);

        }

        returnfRet;

        }

        此函數(shù)主要用于刪除USBInstallDriver()時創(chuàng)建的注冊表信息,同樣的它使用自己的函數(shù)接口UnRegisterClientDriverID()和UnRegisterClientSettings()來做相應的處理。

        另外一個需要處理的注冊的監(jiān)控通知函數(shù)USBDeviceNotifications():

        externCBOOLUSBDeviceNotifications(LPVOIDlpvNotifyParameter,DWORDdwCode,

        LPDWORD*dwInfo1,LPDWORD*dwInfo2,LPDWORD*dwInfo3,

        LPDWORD*dwInfo4)

        {

        CMouse*pMouse=(CMouse*)lpvNotifyParameter;

        switch(dwCode)

        {

        caseUSB_CLOSE_DEVICE:

        //刪除相關的資源。

        deletepMouse;

        returnTRUE;

        }

        returnFALSE;

        }

        USB鼠標的類的定義如下:

        classCMouse

        {

        public:

        CMouse::CMouse(USB_HANDLEhDevice,LPCUSB_FUNCSlpUsbFuncs,

        LPCUSB_INTERFACElpInterface);

        ~CMouse();

        BOOLInitialize();

        private:

        //傳輸完畢調(diào)用的回調(diào)函數(shù)

        staticDWORDCALLBACKMouseTransferCompleteStub(LPVOIDlpvNotifyParameter);

        //中斷處理函數(shù)

        staticULONGCALLBACKCMouse::MouseThreadStub(PVOIDcontext);

        DWORDMouseTransferComplete();

        DWORDMouseThread();

        BOOLSubmitInterrupt();

        BOOLHandleInterrupt();

        BOOLm_fClosing;

        BOOLm_fReadyForMouseEvents;

        HANDLEm_hEvent;

        HANDLEm_hThread;

        USB_HANDLEm_hDevice;

        USB_PIPEm_hInterruptPipe;

        USB_TRANSFERm_hInterruptTransfer;

        LPCUSB_FUNCSm_lpUsbFuncs;

        LPCUSB_INTERFACEm_pInterface;

        BOOLm_fPrevButton1;

        BOOLm_fPrevButton2;

        BOOLm_fPrevButton3;

        //數(shù)據(jù)接受緩沖區(qū)。

        BYTEm_pbDataBuffer[8];

        };

        具體實現(xiàn)如下:

        //構造函數(shù),初始化時調(diào)用

        CMouse::CMouse(USB_HANDLEhDevice,LPCUSB_FUNCSlpUsbFuncs,

        LPCUSB_INTERFACElpInterface)

        {

        m_fClosing=FALSE;

        m_fReadyForMouseEvents=FALSE;

        m_hEvent=NULL;

        m_hThread=NULL;

        m_hDevice=hDevice;

        m_hInterruptPipe=NULL;

        m_hInterruptTransfer=NULL;

        m_lpUsbFuncs=lpUsbFuncs;

        m_pInterface=lpInterface;

        m_fPrevButton1=FALSE;

        m_fPrevButton2=FALSE;

        m_fPrevButton3=FALSE;

        memset(m_pbDataBuffer,0,sizeof(m_pbDataBuffer));

        }

        //析構函數(shù),用于清除申請的資源。

        CMouse::~CMouse()

        {

        //通知系統(tǒng)去關閉相關的函數(shù)接口。

        m_fClosing=TRUE;

        //Wakeuptheconnectionthreadagainandgiveittimetodie.

        if(m_hEvent!=NULL)

        {

        //通知關閉數(shù)據(jù)接受線程。

        SetEvent(m_hEvent);

        if(m_hThread!=NULL)

        {

        DWORDdwWaitReturn;

        dwWaitReturn=WaitForSingleObject(m_hThread,1000);

        if(dwWaitReturn!=WAIT_OBJECT_0)

        {

        TerminateThread(m_hThread,DWORD(-1));

        }

        CloseHandle(m_hThread);

        m_hThread=NULL;

        }

        CloseHandle(m_hEvent);

        m_hEvent=NULL;

        }

        if(m_hInterruptTransfer)

        (*m_lpUsbFuncs->lpCloseTransfer)(m_hInterruptTransfer);

        if(m_hInterruptPipe)

        (*m_lpUsbFuncs->lpClosePipe)(m_hInterruptPipe);

        }

        //初始化USB鼠標

        BOOLCMouse::Initialize()

        {

        LPCUSB_DEVICElpDeviceInfo=(*m_lpUsbFuncs->lpGetDeviceInfo)(m_hDevice);

        //檢測配置:USB鼠標應該只有一個中斷管道

        if((m_pInterface->lpEndpoints[0].Descriptor.bmAttributesUSB_ENDPOINT_TYPE_MASK)!=USB_ENDPOINT_TYPE_INTERRUPT)

        {

        RETAILMSG(1,(TEXT(!USBMouse:EP0wrongtype(%u)!rn),



        評論


        相關推薦

        技術專區(qū)

        關閉