<style id="7i3y3"></style>

      <sub id="7i3y3"><i id="7i3y3"></i></sub>

        午夜精品一区二区三区成人,中文字幕av一区二区,亚洲AVAV天堂AV在线网阿V,肥臀浪妇太爽了快点再快点,国产网友愉拍精品视频手机,国产精品无码a∨麻豆,久久中文字幕一区二区,a级国产乱理伦片在线观看al
        首頁 新聞 工控搜 論壇 廠商論壇 產品 方案 廠商 人才 文摘 下載 展覽
        中華工控網首頁
          P L C | 變頻器與傳動 | 傳感器 | 現場檢測儀表 | 工控軟件 | 人機界面 | 運動控制
          D C S | 工業以太網 | 現場總線 | 顯示調節儀表 | 數據采集 | 數傳測控 | 工業安全
          電 源 | 嵌入式系統 | PC based | 機柜箱體殼體 | 低壓電器 | 機器視覺
        詳解WinCE下USB Host驅動開發(1)
        深圳市盈鵬飛科技有限公司
        收藏本文     查看收藏
            WinCE下所有的驅動都是以DLL的形式,被device.exe進程加載的,所以每個驅動程序中都要實現DllEntry函數。

            在注冊表的HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\鍵下保存了USB Host的驅動程序信息。當我們第一次插入USB設備時。因為不存在這樣的信息,所以系統會彈出一個“
        未能識別的USB設備”的對話框,要求用戶輸入驅動程序的名稱。該名稱就是USB Host驅動DLL的文件名。在輸入了名稱后,系統會自動調用該DLL的USBInstallDriver函數。該函數
        負責向注冊表添加USB Host驅動的信息,以便再次插入設備時,能夠識別該USB設備。其原型如下:

            BOOL USBInstallDriver(LPCWSTR szDriverLibFile);
            其中szDriverLibFile就是輸入的DLL文件名稱。返回TRUE表示注冊成功。
            在向注冊表注冊USB Host信息時,不能使用普通的注冊表函數,只能使用USBD提供的注冊函數。
            BOOL RegisterClientDriverID(LPCWSTR szUniqueDriverId);
            BOOL RegisterClientSettings(LPCWSTR szDriverLibFile, LPCWSTR             szUniqueDriverId, LPCWSTR erved, LPCUSB_DRIVER_SETTINGS lpDriverSettings);
            這兩個函數在USBD.DLL中,可以通過動態方式調用,也可以通過靜態方式調用。

        動態方式如下:
        HINSTANCE hInst = LoadLibrary(L"USBD.DLL");
        if(hInst) {
         LPREGISTER_CLIENT_DRIVER_ID lpRegisterClientId =
          (LPREGISTER_CLIENT_DRIVER_ID)GetProcAddress(
           hInst,
           L"RegisterClientDriverID");
         if(!lpRegisterClientId)
          return FALSE;
         LPREGISTER_CLIENT_SETTINGS lpRegisterClientSetting =
          (LPREGISTER_CLIENT_SETTINGS)GetProcAddress(
           hInst,
           L"RegisterClientSettings");
         if(!lpRegisterClientSetting)
          return FALSE;
        else
         return FALSE;
            此后,就可以通過lpRegisterClientId和lpRegisterClientSetting函數指針調用這些函數,最后記得要FreeLibrary。

        靜態方式:
        在.cpp源文件中加入
        #pragma   comment(lib,"usbd.lib")
        并在source文件的TARGETLIBS變量中加入$(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\usbd.lib
        如此一來,就可以直接使用這兩個函數了。
        1) BOOL RegisterClientDriverID(LPCWSTR szUniqueDriverId)
        該函數注冊USB Host驅動程序的ID。
        2) BOOL RegisterClientSettings(LPCWSTR szDriverLibFile, LPCWSTR szUniqueDriverId, LPCWSTR erved, LPCUSB_DRIVER_SETTINGS lpDriverSettings)
        該函數負責注冊驅動程序的信息。
        szDriverLibFile 設置為USBInstallDriver函數傳入的DLL驅動程序名稱。
        szUniqueDriverId 設置為調用RegisterClientDriverID注冊的驅動程序ID。
        erved 設置為NULL
        lpDriverSettings 該參數是一個USB_DRIVER_SETTINGS結構體。其聲明如下:
        typedef struct {
          DWORD dwCount;
          DWORD dwVendorId;
          DWORD dwProductId;
          DWORD dwReleaseNumber;
          DWORD dwDeviceClass;
          DWORD dwDeviceSubClass;
          DWORD dwDeviceProtocol;
          DWORD dwInterfaceClass;
          DWORD dwInterfaceSubClass;
          DWORD dwInterfaceProtocol;
        } USB_DRIVER_SETTINGS;
            Count為結構體大小,其他項對應USB描述符。
            其中除Count外的各字段,如果不設置具體的值,可以設置為USB_NO_INFO。
        這個結構體中的信息講反應到注冊表的HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\鍵下,用于在USB設備插入時,查找USB驅動。下面以一個例子說明:
        BOOL USBInstallDriver(LPCWSTR szDriverLibFile)
        {
         RETAILMSG(1,(TEXT("USBInstallDriver\r\n")));
         RETAILMSG(1,(TEXT("USBInstallDriver:%s\r\n"), szDriverLibFile));
         BOOL fRet = FALSE;
         USB_DRIVER_SETTINGS DriverSettings;
         DriverSettings.dwCount = sizeof(DriverSettings);
         DriverSettings.dwVendorId = 0x10C4;
         DriverSettings.dwProductId = 0x0003;
         DriverSettings.dwReleaseNumber = USB_NO_INFO;
         
         DriverSettings.dwDeviceClass = USB_NO_INFO;
         DriverSettings.dwDeviceSubClass = USB_NO_INFO;
         DriverSettings.dwDeviceProtocol = USB_NO_INFO;
         
         DriverSettings.dwInterfaceClass = 0;
         DriverSettings.dwInterfaceSubClass = 0;
         DriverSettings.dwInterfaceProtocol = 0;
         
         fRet = RegisterClientDriverID(L"USBTest");
         if (fRet) {
          fRet = RegisterClientSettings(
           szDriverLibFile,
           L"USBTest",
           NULL,
           &DriverSettings);
          if(!fRet)
           RETAILMSG(1,(TEXT("RegisterClientSettings error\r\n")));
         } else
          RETAILMSG(1,(TEXT("RegisterClientDriverID error\r\n")));
         return fRet;
        }

        在WinCE中,將設置信息分為了三組,每組3個值,
        第一組:
        dwVendorId、dwProductId、dwReleaseNumber
        第二組:
        dwDeviceClass、dwDeviceSubClass、dwDeviceProtocol
        第三組:
        dwInterfaceClass、dwInterfaceSubClass、dwInterfaceProtocol
            如果注冊成功,將會在HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\鍵下出現 “第一組\第二組\第三組\注冊ID\DLL”這樣的建,鍵值為DLL驅動名稱。其中每組又是由三個值中間加下劃線組成。如果有一個值設置為USB_NO_INFO,則鍵名不包括該值。如果整個組中每個值都設置成USB_NO_INFO,則鍵名為Default。

        據上面的例子,在我的系統下,將會生成如下鍵名:
            HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\4292_3\Default\0_0_0\USBTest\DLL = "MyUSBTest" (我的驅動程序為MyUSBTest.dll)
            當用戶插入USB設備時,它會讀取USB設備的描述符,根據描述符中的值在注冊表中查找驅動程序名稱。

            現在假設,我們要WinCE只支持USB鍵盤,另外我們自己實現一個USB鼠標驅動程序。如果不加注意,我們的USB鼠標驅動程序將不能被調用。原因正是在于這個查找USB設備驅動的過程。WINCE提供的USBHID驅動程序的注冊表信息是
            HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\Default\Default\3\Hid_Class\DLL = "USBHID.DLL"

            其中第三組信息只使用了dwInterfaceClass,而USB鍵盤和USB鼠標只有dwInterfaceProtocol不同。所以,一個3概括了所有的HID,當我們的USB鼠標插入系統后,將會調用USBHID.DLL驅動程序處理,但是它只包括鍵盤的驅動,沒有鼠標的驅動,所以鼠標不能使用。要想使得自定義的USB鼠標可以使用,則將第三組的值都設置上,如下:
            HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\Default\Default\3_1_1\Hid_Class\DLL = "USBHID.DLL"

            如此一來,當值為3_1_2的鼠標插入后,因為找不到對應的鍵值,將提示要求我們輸入USB鼠標的驅動。
         

         

        狀 態: 離線

        公司簡介
        產品目錄

        公司名稱: 深圳市盈鵬飛科技有限公司
        聯 系 人: 李希崗
        電  話: 0086-13602511395
        傳  真: 0755-82523175,82523176-819
        地  址: 深圳市福田區福明路40號,雷圳大廈12A06
        郵  編: 518033
        主  頁:
         
        該廠商相關技術文摘:
        WINCE下如何添加CPL應用程序
        Wince sqlite3移植
        EAC-C925開機畫面實現手冊
        英貝德推出單板機產品軟件升級解決方案(WinCE篇)
        EP9315電路設計要點
        Linux下創建和使用RamDisk的技巧
        英貝德科技移植PPP大揭秘:PPP撥號在ARM2410平臺上的移植
        AT91SAM9263在人機界面方面的應用
        詳解WinCE下USB Host驅動開發(2)
        WinCE驅動中設備中斷的處理
        Linux內核學習之BogoMIPS值的計算
        更多文摘...
        立即發送詢問信息在線聯系該技術文摘廠商:
        用戶名: 密碼: 免費注冊為中華工控網會員
        請留下您的有效聯系方式,以方便我們及時與您聯絡

        關于我們 | 聯系我們 | 廣告服務 | 本站動態 | 友情鏈接 | 法律聲明 | 不良信息舉報
        工控網客服熱線:0755-86369299
        版權所有 中華工控網 Copyright©2022 Gkong.com, All Rights Reserved

        主站蜘蛛池模板: 天天色综网| 国产免费视频一区二区| 中文字幕国产精品资源| 老湿机香蕉久久久久久| 5D肉蒲团之性战奶水欧美| 日本怡春院一区二区三区| 四虎成人精品永久网站| 國產尤物AV尤物在線觀看| 国产99视频精品免费视频6| 大地资源中文在线观看西瓜| 色窝窝无码一区二区三区| 91九色系列视频在线国产| 九色精品国产亚洲av麻豆一| 天天色综网| www插插插无码视频网站| 伊人久久大香线蕉AV网禁呦| 亚洲日本一区二区一本一道| 99久久精品国产熟女拳交| 国产丝袜在线精品丝袜不卡| 久久 午夜福利 张柏芝| 久久精品娱乐亚洲领先| 国模小黎自慰337p人体| 色一伊人区二区亚洲最大| 灭火宝贝高清完整版在线观看| 日本一区二区中文字幕久久| 乱60一70归性欧老妇| 国产一区二区三区色成人| 大香伊蕉在人线国产免费 | 精品无码人妻| 日韩精品区一区二区三vr| 日本高清视频色WWWWWW色| 欧美白妞大战非洲大炮| 无码国产偷倩在线播放老年人| 国产成人女人在线观看| 欧美日韩精品一区二区视频| 99riav精品免费视频观看| 国产乱码精品一区二区三区四川人| 另类性姿势bbwbbw| 亚洲av午夜成人片| 产综合无码一区| 国产精品一起草在线观看|