新闻中心

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 下一页

关键词:

评论


相关推荐

技术专区

关闭