<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

        主站蜘蛛池模板: 久久久免费精品国产色夜| 精品国产午夜福利理论片| 激情亚洲内射一区二区三区| 成年女人免费碰碰视频| 51午夜精品免费视频| 2021国产精品视频网站| 久久精品亚洲国产综合色| 国产成人精品手机在线观看| 久99久热这里只有精品| 亚洲精品一区二区制服| 久久天天躁夜夜躁狠狠ds005| 久久精品成人免费看| 久久精品第九区免费观看| 福利视频一区二区在线| 人妻日韩人妻中文字幕| 中文字幕亚洲区第一页| 国内精品自国内精品自久久| 欧美激情 亚洲 在线| 香蕉久久久久久久av网站| 久久夜色精品国产亚av| 99中文字幕精品国产| 樱花草在线社区WWW韩国| 国产成人拍精品免费视频| 99久久er热在这里只有精品99 | 人人妻人人澡人人爽不卡视频| 亚洲国产成人无码电影| 成人免费AA片在线观看| 日韩a片无码一区二区五区电影| 蜜臀av无码一区二区三区| 老熟女重囗味hdxx69| 亚洲av伦理一区二区| 欧美丰满熟妇xxxx性ppx人交| 国产午夜一区二区在线观看| 久久91精品牛牛| 久久精品国产久精国产果冻传媒 | 激情综合网激情五月俺也去| 色噜噜狠狠成人综合| 欧美人与动牲交a免费| 日韩av爽爽爽久久久久久| 激情国产一区二区三区四区| 亚洲AV永久无码天堂网一线|