久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > WinCE平臺USB攝像頭驅動開發流程

WinCE平臺USB攝像頭驅動開發流程

作者: 時間:2016-10-08 來源:網絡 收藏

二.USB攝像頭流驅動的實現過程

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

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

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

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

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

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

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

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

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


上一頁 1 2 下一頁

關鍵詞:

評論


相關推薦

技術專區

關閉