WinCE的USB Camera流接口驱动开发 02
![Rank: 8](images/default/star_level3.gif) ![Rank: 8](images/default/star_level3.gif)
- UID
- 872238
|
![](http://images.eccn.com/silabs/silicon_chip_980x60_202203.jpg)
WinCE的USB Camera流接口驱动开发 02
本文使用的流接口函数方法如表1所列。 ![](http://embed.chinaitlab.com/UploadFiles_4615/200811/20081106122841121.jpg) USB设备驱动程序必须输出的函数有:
①USBDeviecAttach()。当USB设备连接到计算机上时,USBD模块就会调用此函数。这个函数主要用于初始化USB设备,取得USB设备信息,配置USB设备,并且申请必需的资源。
②USBInstallDriver ()。主要用于创建一个驱动程序加载所需的注册表信息,例如读/写超时、设备名称等。
③USBUninstallDriver ()。主要用于释放驱动程序所占用的资源,以及删除UsbInstallDriver ()函数创建的注册表等。
上述3个函数接口是所有的USB驱动程序必须提供的,缺一不可。
另外较为重要的是USB设备驱动程序的注册表配置。一般的USB设备驱动程序的注册表配置在[HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\口]下,每个驱动程序的子键都有Group 1_ID\Group2_ID\Group3_ID\DriverName 格式,设备的子键由供应商、设备类和协议信息通过下划线组成。表2列出了允许的组合。
![](http://embed.chinaitlab.com/UploadFiles_4615/200811/20081106122842714.jpg) 以本实验所采用的USB Camera为例,该USB Cam-era的供应厂商ID为0X046d,设备ID为0x08a2,那么它的加载注册表应该写为:
需要注意的是,注册表的构成都是以十进制数值来标识的,也要注意十进制和十六进制之间数的转换。
3 WinCE5.0下USB摄像头驱动程序
实验使用的USB Camera是中星微公司的301芯片组的Zc030x,它的Vid/Pid为0x046d、0x08a2。由于实时图像数据传送量比较大,很多USB Camera产品在图像传输之前已进行了数据压缩处理,如果不知道解码算法,是没有办法在WinCE上获得图像的。在开发的时候主要使用SnoopyPro,它是一款可以分析USB通信数据的软件,辅助进行Zc030x的驱动开发工作,最后成功开发出Zc030x在WinCE5.0下的驱动程序。下面结合USBCamera驱动开发说明驱动中的数据流向和必要的函数使用。首先是具体的注册表信息:
![](http://embed.chinaitlab.com/UploadFiles_4615/200811/20081106122842486.jpg)
其中,hDevice是由系统提供的当前外设的句柄,通过它可以获取外设的信息,如VID、PID等;UsbFuncs是系统提供的指向USBD函数的函数指针,通过它可以调用USBD函数,如GetlsochResult、IssuelsochTransfer等;AcceptControl指针指向的bool值需要我们确定,如果可控,令其为TRUE,否则为FALSE。
在这个函数里面,要做的工作包括确定外设是否可控,分配和填写设备的上下文内容,调用ActivateDevjce()函数在“Drivers\USB\ClientDrivers\Camera_Class”键值中注册分配到的设备上下文的指针(其中Camera_Class是对USB Camera的命名),同时ActivateDevice在注册表[HKEY_LOCAL_MACHINE\Drivers\Active\N]中登记设备上下文的指针,其中N为整数,它是系统自动分配给此驱动的数字。系统在调用ActivateDevice()过程中,又会自动调用CAM_Init函数。
DWORD CAM_Init(LPCTSTR pContext,LPCVOIDIp VBusContext) |
|
|
|
|
|