来源:中国一卡通网 作者:刘春河,季昊 发布时间:2010-09-17 15:18:48 字体:[大 中 小]
摘 要:基于USB 的MBF200 指纹采集仪是AIFS 系统的重要组成部分,负责原始指纹图像的采集。根据MBF200 的芯片接口,加以必要的辅助电路,设计了指纹采集仪内部电路。基于KUDF 驱动框架,设计了核心态驱动程序,可以实现批量和单字节传输。根据指纹图像的特点,采用硬中断和软中断两种方式保证送入特征提取和比对模块的指纹图像质量。为了实现Win32 应用程序和驱动程序的通信,设计了统一的通信接口,完成了指纹图像的自动采集,效果较好。
图 7 软中断检测指纹图像
4.3 应用程序与驱动程序的接口
应用程序和驱动程序通信,主要有两种方式:为设备创建的一个符号链;输出到一个接口。
WDM 驱动程序建议使用输出到一个接口而不推荐使用创建符号链的方法。这个接口保证PDO 的安全,也保证安全地创建一个惟一的、独立于语言的访问设备的方法。一个应用程序使用Win32APIs 来调用设备。在某个Win32 APIs 和设备对象的分发函数之间存在一个映射关系。获得对设备对象访问的第一步就是打开一个设备对象的句柄。
1.用符号链打开一个设备的句柄
为了打开一个设备,应用程序需要使用CreateFile。如果该设备有一个符号链出口,应用程序可以用下面这个例子的形式打开句柄:hDevice = CreateFile(…);文件路径名需要一个前缀,用来告诉系统本调用希望打开一个设备。这个设备必须有一个符号链,以便应用程序能够打开它。
2.使用一个输出接口打开句柄
DriverWorks 库提供两个助手类来使获得对该接口的访问容易一些,这两个类是CDeviceInterface, 和 CdeviceInterfaceClasCdeviceInterfaceClass 类封装了一个设备信息集,该信息集包含了特殊类中的所有设备接口信息。
应用程序能有用CdeviceInterfaceClass 类的一个实例来获得一个或更多的CdeviceInterface 类的实例。CdeviceInterface 类是一个单一设备接口的抽象。它的成员函数DevicePath()返回一个路径名的指针,该指针可以在CreateFile 中使用来打开设备。
采用第二种方法如下:
自己构造通信函数OpenByInterface,根据ClassGuid 号来识别驱动程序。
CDeviceInterfaceClass DevClass(pClassGuid)
ClassGuid 号在驱动程序的INF 文件中可以读取:
[Version]
Signature="$WINDOWS NT$"
Class=mbf200_4
ClassGUID={83999D72-9A60-4D5A-A611-F9934FEBDDDB}
Provider=%Provider%
DriverVer=4/8/2008,1.00.0000
CatalogFile=mbf200_4.cat
在应用程序中,若想调用调用驱动,只需要使用函数DeviceIoControl()即可:
4.4 驱动的安装和发布
把驱动程序的INF 文件和SYS 文件打包,系统会根据INF 文件,自动搜索SYS 文件,并安装,拷贝到系统目录下。如图7 所示:
图 8 驱动安装
4.5 试验结果
经过测试,采集的指纹图像如图8 所示:
图 9 采集结果
5 结语
本文研究了基于MBF200 芯片的指纹采集仪的硬件设计,基于KMDF 架构设计了USB驱动程序。采用MBF200 芯片,辅以外围芯片和电路,实现了指纹采集仪的硬件电路设计。并设计了应用程序和驱动程序的接口,通过这个接口,用户可以方便的设计Windows 应用程序,只要根据自己设计的驱动例程,设计好输入输出缓冲区,使用DeviceIoControl 调用即可。
推荐文章
论坛热帖