<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > WinCE5.0的USB Camera流接口驅(qū)動開發(fā)

          WinCE5.0的USB Camera流接口驅(qū)動開發(fā)

          作者: 時間:2008-09-25 來源:網(wǎng)絡(luò) 收藏

          引 言
          WinCE5.0是一個32位、多任務(wù)、多線程的實時嵌入式操作系統(tǒng)。USB Camera 以其良好的性能和低廉的價格得到廣泛的應(yīng)用,同時因其靈活、方便的特性,易于集成到嵌入式系統(tǒng)中。通過采用USB Camera可以在WinCE5.0下方便地得到實時圖像。但是由于嵌入式硬件環(huán)境的多樣性以及WinCE5.0對USB設(shè)備驅(qū)動開發(fā)只提供了一些底層支持,攝像頭廠商尚未提供WinCE5.0下USB攝像頭的驅(qū)動,因此開發(fā)出WinCE5.0下USB攝像頭驅(qū)動具有實際的意義和價值。本文正是針對這一情況,對WinCE5.0下USB設(shè)備驅(qū)動開發(fā)進行研究,并設(shè)計出基于流接口驅(qū)動模型的USB攝像頭驅(qū)動程序?,F(xiàn)在已經(jīng)開發(fā)出來的驅(qū)動適用于Zc030x PLUS這一系列的攝像頭。Samstmg 2410為實驗的硬件平臺。


          1 WinCE5.0下USB總線驅(qū)動框架
          USB系統(tǒng)由USB主機、一個或多個USB設(shè)備和物理總線組成。主機上又分兩層:較高的包含USB設(shè)備驅(qū)動程序的軟件層和主機控制器硬件層,也稱作“適配層”。主機的主要任務(wù)是控制對USB設(shè)備的雙向數(shù)據(jù)傳輸。物理總線是一組USB電纜,用來將控制器和外圍設(shè)備連接起來。WinCE5.0的USB系統(tǒng)軟件由兩層組成:USB設(shè)備驅(qū)動程序?qū)雍偷讓拥挠蒞inCE5.0實現(xiàn)的USB函數(shù)層。
          USB設(shè)備驅(qū)動程序使用USB函數(shù)來建立與它們所控制設(shè)備的連接,并對這些設(shè)備進行配置和通信。較低的USB函數(shù)層本身又由兩部分組成――較高的通用串行總線驅(qū)動程序(USBD)模塊和較低的主控制器驅(qū)動程序(HCD)模塊。HCD提供了抽象的主機控制器,且對主機控制器所見到的USB系統(tǒng)的數(shù)據(jù)傳輸進行抽象。USBD提供一個抽象的設(shè)備,且對USBD客戶和USB設(shè)備功能部件之間的數(shù)據(jù)傳輸進行抽象。USB設(shè)備驅(qū)動程序使用USBD接口函數(shù)與外圍設(shè)備進行通信。
          IHV和USB設(shè)備制造商利用USBD提供的函數(shù)來實現(xiàn)USB設(shè)備的驅(qū)動程序。OEM負(fù)責(zé)給基于WinCE的平臺提供HCD模塊,這樣相應(yīng)的硬件才能與USBD模塊進行交互。圖1說明了與主機的USB硬件和外圍設(shè)備相對應(yīng)的軟件的各個層。

          2 WinCE5.0下流驅(qū)動模型
          基于WinCE5.0平臺的兩種專用的驅(qū)動模型為:本機設(shè)備驅(qū)動程序和流接口驅(qū)動程序。本機設(shè)備驅(qū)動程序適合于集成到WinCE 5.0 平臺的設(shè)備;而后者則是一般類型的設(shè)備驅(qū)動程序,適用于大部分外圍設(shè)備,如調(diào)制解調(diào)器、打印機等。對大多數(shù)USB外圍設(shè)備來說,適用于采用流接口驅(qū)動程序模型來開發(fā)驅(qū)動程序。
          流接口驅(qū)動程序是一種可以定制接口的驅(qū)動模型,一般由設(shè)備管理器負(fù)責(zé)管理。它把設(shè)備管理器和應(yīng)用程序的命令轉(zhuǎn)換成所控設(shè)備的適當(dāng)動作所需信息。流接口驅(qū)動程序需要實現(xiàn)一組固定的流接口函數(shù),供給WinCE5.0系統(tǒng)內(nèi)核使用。

          USB設(shè)備的流接口驅(qū)動程序和WinCE5.0系統(tǒng)其他部件間的關(guān)系如圖2所示。流接口驅(qū)動程序通過系統(tǒng)提供的文件系統(tǒng)API與應(yīng)用程序交互;而系統(tǒng)通過設(shè)備管理器完成對流接口驅(qū)動程序的加載、卸載等管理工作;流接口驅(qū)動程序通過調(diào)用USBD模塊提供的接口函數(shù)實現(xiàn)與底層USB設(shè)備通信。


          本文使用的流接口函數(shù)方法如表1所列。

          USB設(shè)備驅(qū)動程序必須輸出的函數(shù)有:
          ①USBDeviecAttach()。當(dāng)USB設(shè)備連接到計算機上時,USBD模塊就會調(diào)用此函數(shù)。這個函數(shù)主要用于初始化USB設(shè)備,取得USB設(shè)備信息,配置USB設(shè)備,并且申請必需的資源。
          ②USBInstallDriver ()。主要用于創(chuàng)建一個驅(qū)動程序加載所需的注冊表信息,例如讀/寫超時、設(shè)備名稱等。
          ③USBUninstallDriver ()。主要用于釋放驅(qū)動程序所占用的資源,以及刪除UsbInstallDriver ()函數(shù)創(chuàng)建的注冊表等。
          上述3個函數(shù)接口是所有的USB驅(qū)動程序必須提供的,缺一不可。
          另外較為重要的是USB設(shè)備驅(qū)動程序的注冊表配置。一般的USB設(shè)備驅(qū)動程序的注冊表配置在[HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\口]下,每個驅(qū)動程序的子鍵都有Group 1_ID\Group2_ID\Group3_ID\DriverName 格式,設(shè)備的子鍵由供應(yīng)商、設(shè)備類和協(xié)議信息通過下劃線組成。表2列出了允許的組合。

          以本實驗所采用的USB Camera為例,該USB Cam-era的供應(yīng)廠商ID為0X046d,設(shè)備ID為0x08a2,那么它的加載注冊表應(yīng)該寫為:


          需要注意的是,注冊表的構(gòu)成都是以十進制數(shù)值來標(biāo)識的,也要注意十進制和十六進制之間數(shù)的轉(zhuǎn)換。


          3 WinCE5.0下USB攝像頭驅(qū)動程序
          實驗使用的USB Camera是中星微公司的301芯片組的Zc030x,它的Vid/Pid為0x046d、0x08a2。由于實時圖像數(shù)據(jù)傳送量比較大,很多USB Camera產(chǎn)品在圖像傳輸之前已進行了數(shù)據(jù)壓縮處理,如果不知道解碼算法,是沒有辦法在WinCE上獲得圖像的。在開發(fā)的時候主要使用SnoopyPro,它是一款可以分析USB通信數(shù)據(jù)的軟件,輔助進行Zc030x的驅(qū)動開發(fā)工作,最后成功開發(fā)出Zc030x在WinCE5.0下的驅(qū)動程序。下面結(jié)合USBCamera驅(qū)動開發(fā)說明驅(qū)動中的數(shù)據(jù)流向和必要的函數(shù)使用。首先是具體的注冊表信息:


          其中,hDevice是由系統(tǒng)提供的當(dāng)前外設(shè)的句柄,通過它可以獲取外設(shè)的信息,如VID、PID等;UsbFuncs是系統(tǒng)提供的指向USBD函數(shù)的函數(shù)指針,通過它可以調(diào)用USBD函數(shù),如GetlsochResult、IssuelsochTransfer等;AcceptControl指針指向的bool值需要我們確定,如果可控,令其為TRUE,否則為FALSE。
          在這個函數(shù)里面,要做的工作包括確定外設(shè)是否可控,分配和填寫設(shè)備的上下文內(nèi)容,調(diào)用ActivateDevjce()函數(shù)在“Drivers\USB\ClientDrivers\Camera_Class”鍵值中注冊分配到的設(shè)備上下文的指針(其中Camera_Class是對USB Camera的命名),同時ActivateDevice在注冊表[HKEY_LOCAL_MACHINE\Drivers\Active\N]中登記設(shè)備上下文的指針,其中N為整數(shù),它是系統(tǒng)自動分配給此驅(qū)動的數(shù)字。系統(tǒng)在調(diào)用ActivateDevice()過程中,又會自動調(diào)用CAM_Init函數(shù)。
          DWORD CAM_Init(LPCTSTR pContext,LPCVOIDIp VBusContext)
          其中,pContext是系統(tǒng)自動傳入的字符串內(nèi)容,也是上面的鍵名,即[HKEY_LOCAL_MACHINE\Drivers\Active\N];CAM_Init要完成的就是在此鍵下讀出設(shè)備上下文的指針,將其作為DWORD返回;IpvBusContext不用考慮。
          在USBDeviceAttach()中,最后要完成的工作是在此函數(shù)內(nèi)調(diào)用USBD模塊的RegisterNotificationRoutine函數(shù)登記注冊DeviceNotify函數(shù)。這個DeviceNotify函數(shù)是必需的,在設(shè)備被移走后,系統(tǒng)調(diào)用這個函數(shù)完成相應(yīng)的善后工作。
          BOOL WINAPI DeviceNotify(LPVOID lpvNotifyPa-rameter DWORD dwCode.LPDWORD dwInf01.LPDW0RDdwlnfo2.LPDWORD dwlnfo3.LPDWORD dwlnfo4)
          其中,IpvNotifyParameter是設(shè)備的上下文句柄,在RegisterNoticationRoutine中作為參數(shù)傳入;dwCode是系統(tǒng)調(diào)用此函數(shù)的原因,如設(shè)備被移走,dwcode的值就為USB_CLOSE_DEVICE,相應(yīng)的,用戶進行卸載DLL工作;dwInfol,…,dwInfo4沒有使用。
          自此,系統(tǒng)在USBDeviceAttach中完成對所加USB外設(shè)的驅(qū)動加載。當(dāng)有用戶調(diào)用CreateFile函數(shù),系統(tǒng)會將用戶填入CreateFile()的參數(shù)值,直接傳到CAM_Open()。
          DWORD CAM_Open(DWORD hDeviceContext,DWORDAccessCode,DWORD ShareMode)
          其中,hDeviceContext是驅(qū)動上下文句柄,由系統(tǒng)自動填充;AccessCode是訪問模式,ShareMode是共享模式,均由CreateFile()傳遞過來;CAM_Open的工作是將hDe-viceContext以DWORD的形式返回,再作為CreateFile()的句柄值返回給用戶。當(dāng)用戶調(diào)用CloseHandle()時,系統(tǒng)將直接調(diào)用CAM_Close(),用于關(guān)閉一個驅(qū)動程序。
          B00L CAM_Close(DWORD hOpenContext)
          其中,hOpenContext是設(shè)備驅(qū)動的引用事例句柄,由CAM_Open創(chuàng)建。本驅(qū)動中,所有對USB Camera的操作均通過IOControl()映射到CAM_IOControl來完成。下面是CAM_IOControl的部分源碼分析:


          由于本驅(qū)動是針對USBCamera的,因此CAM_Write、CAM_Read、CAM_PowerUp、CAM_PowerDown并沒有內(nèi)容;但是只要用戶調(diào)用WriteFile,系統(tǒng)就將映射到CAM_Write。其他函數(shù)類似。通常,Camera對圖像的壓縮采用標(biāo)準(zhǔn)是MJPEG算法。在Zc030x上正是采用這一算法完成對數(shù)據(jù)壓縮的。只要在驅(qū)動上增加MJPEG的解碼算法,還原壓縮數(shù)據(jù),就可以正確顯示圖像了。至此,整個USB Camera的驅(qū)動編寫工作完成。經(jīng)過實驗驗證,已經(jīng)實現(xiàn)了最高為25幀/s,大小為320240的圖片的傳輸。


          結(jié) 語
          本文介紹了WinCE5.0下USB設(shè)備驅(qū)動框架,結(jié)合USB Camera的驅(qū)動開發(fā)實例說明了在USB驅(qū)動框架中驅(qū)動數(shù)據(jù)的流動方向,并已在中星微公司的301PLUS和303這兩個系列的攝像頭上得到成功運用和實踐。所采用的程序設(shè)計方法及思想,對其他類似嵌入式系統(tǒng)軟件的設(shè)計也有較高的參考價值。

          攝像頭相關(guān)文章:攝像頭原理


          關(guān)鍵詞: WinCE 流接口 USB Camera 設(shè)計

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();