<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > WinCE平臺USB攝像頭驅動(dòng)開(kāi)發(fā)流程

WinCE平臺USB攝像頭驅動(dòng)開(kāi)發(fā)流程

作者: 時(shí)間:2016-10-08 來(lái)源:網(wǎng)絡(luò ) 收藏

二.USB攝像頭流驅動(dòng)的實(shí)現過(guò)程

WinCE系統下的 USB 攝像頭驅動(dòng)程序的編寫(xiě)不同于在 Windows系統下的編寫(xiě),因為在WinCE中對USB設備驅動(dòng)開(kāi)發(fā)只提供了底層支持。所以,在 WinCE系統下必須要根據所選擇的USB攝像頭的硬件特性自行編寫(xiě)驅動(dòng)程序。根據我在這次項目中得到的實(shí)踐經(jīng)驗,具體可以分為以下三個(gè)步驟:

(1)創(chuàng )建USBD函數控制模塊

從上述的WinCE USB設備驅動(dòng)模型及結構分析圖中,我們可以清晰的看到主機和USB外設之間的實(shí)現方式。因此,我們首先需要編寫(xiě)USB Client Driver。也就是說(shuō),我們首先需要利用USBD提供的接口針對特定的物理設備來(lái)完成USB攝像頭客戶(hù)端驅動(dòng)程序。雖然WinCE 沒(méi)有提供USBD的標準機制,但是編寫(xiě)USBD 可供采用的方法有:①是使用流接口函數;②是使用現有的WinCE 應用程序編程接口(API);③是創(chuàng )建用戶(hù)指定的API。

根據在這個(gè)項目的多次實(shí)踐經(jīng)驗,我在編寫(xiě) USB攝像頭驅動(dòng)時(shí)采用了流接口驅動(dòng)模式,該驅動(dòng)程序的位置是位于 USBD 協(xié)議棧層上,屬于控制具體設備功能的客戶(hù)端驅動(dòng)程序。然后,我把流接口驅動(dòng)程序的流接口函數設計為匹配系統的文件系統API函數形式。通過(guò)這種機制方式,USB攝像頭就可在流接口的管理下通過(guò)文件系統API暴露給應用層,這樣應用層就可把USB攝像頭作為一種特殊的文件進(jìn)行操作,從而達到對USB攝像頭的控制。

(2)創(chuàng )建控制USB攝像頭的各種流接口函數

從結構分析我們可知,所有的USB設備驅動(dòng)程序必須在它們的DLL庫設置一定的入口點(diǎn)函數與USBD模塊進(jìn)行適當的交互。設置入口點(diǎn)函數有兩個(gè)作用:一是使得 USBD 模塊能與外部設備交互;二是使得驅動(dòng)程序能創(chuàng )建和管理任何可能需要的注冊鍵。

因此,在編寫(xiě)USB攝像頭驅動(dòng)程序時(shí)有一個(gè)重要的步驟,就是要創(chuàng )建和實(shí)現三個(gè)入口函數 USBDeviceAttach(),USBInstallDriver(),USBUninstallDriver()。實(shí)現這三個(gè)入口函數的主要目的是為了使客戶(hù)端驅動(dòng)與系統的 USBD協(xié)議棧進(jìn)行聯(lián)系。因為在USB攝像頭接到主機后,USBD模塊會(huì )調用這個(gè)函數來(lái)初始化USB設備,取得USB設備信息和配置USB設備,并且申請必需的資源。USBInstallDrive是在第一次加載USB設備驅動(dòng)程序時(shí)首先被調用,它使得驅動(dòng)程序能創(chuàng )建需要的注冊鍵。但需要值得注意的是,USB設備驅動(dòng)程序不是使用標準的注冊表函數,而是使用RegisterClientDriverID()、RegisterClientSettings()函數來(lái)注冊相應的設備信息。USBUninstallDriver則是在用戶(hù)刪除USB設備驅動(dòng)程序時(shí)調用,負責刪除注冊鍵并釋放其它相關(guān)資源。同樣,它是通過(guò)調用UnRegisterClientSettings()和UnRegisterClientDriverID()函數來(lái)刪除由驅動(dòng)程序的USBInstallDriver()函數創(chuàng )建的所有注冊鍵。因此,我們在驅動(dòng)程序中需要嚴格按照這三個(gè)函數的原型來(lái)實(shí)現,否則就不能為設備管理器所識別。

(3)在注冊表中配置USB攝像頭驅動(dòng)信息

USB攝像頭一般是使用需要時(shí)才加載的方式來(lái)加載的,因此在設備加載時(shí)會(huì )先檢查設備的相關(guān)信息。在WinCE系統中,這些相關(guān)的設備配置信息都是存儲在系統注冊表中的。所以,內核系統會(huì )先訪(fǎng)問(wèn)注冊表以獲得必要的相關(guān)信息。例如,USBD模塊會(huì )使用一組跟蹤驅動(dòng)程序和設備的注冊鍵來(lái)定位正確的驅動(dòng)程序。如果注冊表信息與 USB 設備信息符合,USBD就會(huì )加載此驅動(dòng)程序,否則 USBD 就不會(huì )加載此程序。因此,編寫(xiě)USB攝像頭驅動(dòng)程序的最后一個(gè)關(guān)鍵步驟,就是要正確的在注冊表中配置相關(guān)的USB 攝像頭驅動(dòng)信息。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞:

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>