<nobr id="zkazv"></nobr>

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

          在注冊(cè)表的HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\鍵下保存了USB Host的驅(qū)動(dòng)程序信息。當(dāng)我們第一次插入U(xiǎn)SB設(shè)備時(shí)。因?yàn)椴淮嬖谶@樣的信息,所以系統(tǒng)會(huì)彈出一個(gè)“
      未能識(shí)別的USB設(shè)備”的對(duì)話框,要求用戶輸入驅(qū)動(dòng)程序的名稱。該名稱就是USB Host驅(qū)動(dòng)DLL的文件名。在輸入了名稱后,系統(tǒng)會(huì)自動(dòng)調(diào)用該DLL的USBInstallDriver函數(shù)。該函數(shù)
      負(fù)責(zé)向注冊(cè)表添加USB Host驅(qū)動(dòng)的信息,以便再次插入設(shè)備時(shí),能夠識(shí)別該USB設(shè)備。其原型如下:

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

      動(dòng)態(tài)方式如下:
      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函數(shù)指針調(diào)用這些函數(shù),最后記得要FreeLibrary。

      靜態(tài)方式:
      在.cpp源文件中加入
      #pragma   comment(lib,"usbd.lib")
      并在source文件的TARGETLIBS變量中加入$(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\usbd.lib
      如此一來,就可以直接使用這兩個(gè)函數(shù)了。
      1) BOOL RegisterClientDriverID(LPCWSTR szUniqueDriverId)
      該函數(shù)注冊(cè)USB Host驅(qū)動(dòng)程序的ID。
      2) BOOL RegisterClientSettings(LPCWSTR szDriverLibFile, LPCWSTR szUniqueDriverId, LPCWSTR erved, LPCUSB_DRIVER_SETTINGS lpDriverSettings)
      該函數(shù)負(fù)責(zé)注冊(cè)驅(qū)動(dòng)程序的信息。
      szDriverLibFile 設(shè)置為USBInstallDriver函數(shù)傳入的DLL驅(qū)動(dòng)程序名稱。
      szUniqueDriverId 設(shè)置為調(diào)用RegisterClientDriverID注冊(cè)的驅(qū)動(dòng)程序ID。
      erved 設(shè)置為NULL
      lpDriverSettings 該參數(shù)是一個(gè)USB_DRIVER_SETTINGS結(jié)構(gòu)體。其聲明如下:
      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為結(jié)構(gòu)體大小,其他項(xiàng)對(duì)應(yīng)USB描述符。
          其中除Count外的各字段,如果不設(shè)置具體的值,可以設(shè)置為USB_NO_INFO。
      這個(gè)結(jié)構(gòu)體中的信息講反應(yīng)到注冊(cè)表的HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\鍵下,用于在USB設(shè)備插入時(shí),查找USB驅(qū)動(dòng)。下面以一個(gè)例子說明:
      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中,將設(shè)置信息分為了三組,每組3個(gè)值,
      第一組:
      dwVendorId、dwProductId、dwReleaseNumber
      第二組:
      dwDeviceClass、dwDeviceSubClass、dwDeviceProtocol
      第三組:
      dwInterfaceClass、dwInterfaceSubClass、dwInterfaceProtocol
          如果注冊(cè)成功,將會(huì)在HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\鍵下出現(xiàn) “第一組\第二組\第三組\注冊(cè)ID\DLL”這樣的建,鍵值為DLL驅(qū)動(dòng)名稱。其中每組又是由三個(gè)值中間加下劃線組成。如果有一個(gè)值設(shè)置為USB_NO_INFO,則鍵名不包括該值。如果整個(gè)組中每個(gè)值都設(shè)置成USB_NO_INFO,則鍵名為Default。

      據(jù)上面的例子,在我的系統(tǒng)下,將會(huì)生成如下鍵名:
          HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\4292_3\Default\0_0_0\USBTest\DLL = "MyUSBTest" (我的驅(qū)動(dòng)程序?yàn)镸yUSBTest.dll)
          當(dāng)用戶插入U(xiǎn)SB設(shè)備時(shí),它會(huì)讀取USB設(shè)備的描述符,根據(jù)描述符中的值在注冊(cè)表中查找驅(qū)動(dòng)程序名稱。

          現(xiàn)在假設(shè),我們要WinCE只支持USB鍵盤,另外我們自己實(shí)現(xiàn)一個(gè)USB鼠標(biāo)驅(qū)動(dòng)程序。如果不加注意,我們的USB鼠標(biāo)驅(qū)動(dòng)程序?qū)⒉荒鼙徽{(diào)用。原因正是在于這個(gè)查找USB設(shè)備驅(qū)動(dòng)的過程。WINCE提供的USBHID驅(qū)動(dòng)程序的注冊(cè)表信息是
          HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\Default\Default\3\Hid_Class\DLL = "USBHID.DLL"

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

          如此一來,當(dāng)值為3_1_2的鼠標(biāo)插入后,因?yàn)檎也坏綄?duì)應(yīng)的鍵值,將提示要求我們輸入U(xiǎn)SB鼠標(biāo)的驅(qū)動(dòng)。
       

       

      狀 態(tài): 離線

      公司簡(jiǎn)介
      產(chǎn)品目錄

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

      關(guān)于我們 | 聯(lián)系我們 | 廣告服務(wù) | 本站動(dòng)態(tài) | 友情鏈接 | 法律聲明 | 不良信息舉報(bào)
      工控網(wǎng)客服熱線:0755-86369299
      版權(quán)所有 中華工控網(wǎng) Copyright©2022 Gkong.com, All Rights Reserved

      主站蜘蛛池模板: 国产午夜在线观看视频播放| 久久国产福利播放| 激情六月丁香婷婷四房播| 中文字幕乱偷无码av先锋蜜桃| 亚洲中文字幕一二三四区| 亚州中文字幕一区二区| 免费看女人与善牲交| 国产69久久精品成人看| 亚州中文字幕一区二区| 国产乱码一区二区三区免费| 亚洲成av人片不卡无码手机版| 中文字幕有码高清日韩| 国产成人免费一区二区三区| 国产大尺度一区二区视频| 精品中文字幕人妻一二| 99久久精品免费看国产电影| 综合色综合色综合色综合| 国产草草影院ccyycom| 国产成人综合色视频精品| 亚洲一区二区三区激情视频 | 国产线播放免费人成视频播放| 欧美一区二区三区成人久久片| 九九热这里只有精品在线| 日韩AV无码精品一二三区| 久久一区二区三区黄色片| 无码日韩av一区二区三区| 国产精品成人av电影不卡| 亚洲中文字幕成人综合网| 亚洲AV美女在线播放啊| 亚洲成在人天堂一区二区| 噜噜综合亚洲av中文无码| 精品无码人妻| 精品人妻中文字幕在线| 日本另类αv欧美另类aⅴ| 粉嫩国产一区二区三区在线 | 亚洲欧美日韩综合一区在线| 中文字幕无码视频手机免费看| 日韩有码国产精品一区| 成人av午夜在线观看| 自拍偷拍视频一区二区三区| 欧美不卡无线在线一二三区观 |