搜档网
当前位置:搜档网 › USB+HID类设备小驱动程序开发

USB+HID类设备小驱动程序开发

2010年11月控制工程NOV.2010第17卷96期ControlEngineeringofChinaV01.17,No.6

文章编号:1671-7848(2010)06-0815-05

USBHID类设备小驱动程序开发

王恒升,匡洋,彭宏道

(中南大学机电工程学院,湖南长沙410075)

摘要:针对Windows操作系统提供的通用驱动程序不能很好满足具有特殊功能的设备

的要求这一缺点,通过为自行设计的USBHID硬件设备开发USBHID小驱动程序。探讨在C

语言平台上采用DDK开发基于WDM的HID小驱动程序的一般方法。介绍了USBHID设备的

特点及其在WindowsXP环境下的驱动层次结构;结合实际开发经验,详细阐述了USBHID小

驱动程序的入口例程、即插即用例程、分发例程、电源管理例程和卸载例程的功能、特点及其

编写方法,重点分析了在HID类驱动程序轮询设备条件下,处理读写I/0请求的一般方法;

简单地介绍了WDM驱动程序的加载和安装方法;最后总结了开发USBHID小驱动程序的重点

和难点。实验结果表明,自行开发的驱动程序运行稳定,可移植性强,针对具体设备开发小驱

动程序简单可行。

关键词:驱动程序开发;人机接口设备;小驱动程序

中图分类号:TP273文献标识码:A

DevelopmentofUSBHIDMinidriver

WANGHeng-sheng,KUANGYm~g,PENGHong?dao

(CollegeofMechanicalandElectricalEn6neefing,CentralSouthUnivemity,Changsha410075,China)

Abstract:TotheproblemthattheordinarydriversprovidedbyWindowsOperatingSystemCallnotmeettheneedsofsomedeviceswithspecialfunctionperfectly.themethodstodevelopUSBHIDminidriversarediscussedbasedonWDMusingDDKonClanguageplat?form.ThefeaturesofUSBHIDdevicesandthedevicedriverarchitectureunderWindowsXPareintroduced.Accordingtosuccessfulexperience,thefunction,characteristics,andprogrammingmethodsofdriverentry,plugandplayroutine,dispatchroutine,powermanagementroutineandunloadroutine玳representedindetail.Theemphases越paidonthemethodstohandleread/writerequestswhentheHIDclassdriverpoUsthedevices.Theloadingandinstallingprocedureisalsoincluded.ThekeystodevelopUSBHIDmin—idrivera弛summarized.TheexperimentresultshowsthatthedriverI'URSstablywithgoodtransportabilityandiseasyandfeasibletode?velopminidriverforparticulardevices.

Keywords:driverdevelopment;USBHID;minidriver

l引言

USB作为一种支持即插即用和热插拔的串行总线标准已经成为总线技术的一个发展趋势。为了管理众多拥有共同特性的USB设备,USB协议将USB设备划分为不同的设备类,如显示设备、音频设备、大容量存储设备、人机接口设备(HID)等。Windows操作系统从Windows98开始支持USBHID类设备,为之提供通用驱动程序…。但对于一些具有特殊功能的设备,通用驱动程序并不能很好地满足要求,需开发针对设备的驱动程序。本文根据成功开发USBHID设备小驱动程序(Minidriver)的经验,探讨HID设备小驱动程序的一般开发方法。2HID设备简介

HID是一种用于和计算机进行交互通信的接口,典型的HID设备有鼠标和键盘等。但HID设备并不一定要是这些人机交互设备,只要符合HID类别设备规范都可以认为是HID设备。HID设备是USB协议中最早提出并支持的一种设备类,并为之专门提供了接口描述【2j。

USBHID设备必须包含一个控制端点,控制端点用于完成标准的USB设备请求和HID设备类请求,另外为了响应用户输入,HID设备还必须至少包含一个IN中断端点,而OUT中断端点是可选的,因为有些设备不需要主机返回信息。USBHID

收稿日期:2009-05-27;收修定稿日期:2009-07-05

基金项目:国家863计划资助项目(2006AA092232)

作者简介:王恒升(1963-)。男,陕两合阳人.教授,博士生导师,主要从事机电系统控制理论及控制工程、机器人控制、动态系统理

论、机电系统动态检测与数据处理等方面的教学与科研工作。

万方数据

万方数据

万方数据

万方数据

第6期王恒升等:USBHID类设备小驱动程序开发?819?

类驱动程序通过发送IOCTL—HID—WRITE—RE—PORT来发送HID报告以完成其收到的IRP—MJ—WRITE请求。

HID小驱动程序处理此请求的方式与处理读请求的方法类似,不同之处在于需要将Irp->User-Buffer中的数据转换为HID—XFER—PACKET类型。

PHID—XFER—PACKETWritePacket=

(PHID—XFER—PACKET)Irp->UserBuffer;

在创建URB时,将WritePacket->reportBuffer作为数据缓冲区,而WritePacket一>reportBufferLen包含了缓冲区的长度。

4)电源管理例程和卸载例程HID类驱动程序将会为其创建的设备对象管理电源状态,因此,HID小驱动程序一般情况下只需要将电源管理请求向底层驱动程序转发即可。

卸载例程主要工作是释放需要手动释放的内存。

6驱动程序的加载和安装

USB驱动程序属于WDM驱动程序,驱动程序通过INF文件进行加载和安装。一般需要为自己编写的驱动程序编辑INF文件。当设备插入PC后,系统会枚举到这个新设备,并报告操作系统该设备的VenderID和ProductID,系统将根据VenderID和ProductID在系统中寻找合适的INF文件。如果系统中没有合适的INF文件,系统将向用户询问是否提供该文件。经过一系列的定位后,系统寻找到INF文件,并根据INF文件上的指示,将驱动程序文件(.sys文件)和相关文件复制到系统指定的目录下,并修改注册表。同时会通知PNP管理器和I/0管理器创建新设备,并运行驱动程序的入口程序DriverEntry。之后,系统将会发出一系列IRP来启动和配置设备旧1。

本文为USB硬件设备编写的驱动程序文件名为“vhidmini.sys”,硬件名为“USB球杆系统”,加载安装后系统硬件设备驱动程序详细信息显示,如图3所示。

图3USB球杆系统驱动程序详细信息

Fig.3DetailsofdriverofUSBball&beamsystem

用户层的应用程序通过驱动程序发送控制信号至下位机,控制球杆系统,下位机将采集到的数据通过驱动程序发送回应用程序。球杆系统控制效果及BusHond软件监测的数据传输显示,接收和发送数据完全正确,未有数据丢失,控制效果良好,驱动程序运行稳定。

7结语

HID类驱动程序为HID小驱动程序创建了设备对象,并为其提供电源管理例程和处理系统控制请求等诸多例程。

HID小驱动程序的只需要调用USBDI(USBDriverInterface)与USB总线驱动程序进行通信,从而降低了开发小驱动程序的难度。

开发HID小驱动程序的重点和难点在于:

1)根据设备特性在DriverEntry例程中设置DeviceArePolled的值,该域决定了驱动程序处理读请求的方式。

2)在USB配置描述符中解析出HID描述符,并根据HID描述符的参数确定HID报告描述符的大小,再发送URB读取报告描述符。为了简化程序设计,也可以在驱动程序中直接给定HID描述符和HID报告描述符。

3)根据DeviceArePolled的值,选择符合设备特性的读写方式。在小驱动程序中轮询设备将使得程序设计复杂化,而若是DeviceArePolled域为TRUE,驱动程序不需要轮询设备,则程序设计相对简单。

掌握USBHID小驱动程序开发技术,可以灵活地为一些对数据传输有特殊要求的USB设备开发驱动程序,这样,既可满足设备使用要求,同时可以提高驱动程序的运行效率。

参考文献(References):

[1]涂晓强,周洪利.基于HID类的USB人机接口设计[J].单片机与嵌入式系统应用,2007(6):62-63.(TuXiaoqiang,Zhou.hongli.DesignofUSBhumaninteractiveinterfaceBasedonHIDclass[J].Microcontrollers&EncodedSystems.2007,6:62-63.,[2]薛园园.USB应用开发技术大全[M].北京:人民邮电出版社.2007.(XueYuanyuan.DevelopmenttechnologyofUSB[M].

Beijing:Posts&TelecomPress.2007.)

[3]胡晓军.张爱成.USB接口开发技术[M].西安:西安电子科技大学出版社,2005.(HuXiaojan,ZhangAicheng.DevelopmenttechnologyofUSBinterface[M].Xi’an:PressofXidianUnivend-ty,2005.)

[4]AxelsonJ.USBComplete[M].3rdedition.Madison:LakeviowResearchLLC,1999.

[5]OneyW.ProgrammingtheWindowsdrivermodel[M].The2nd.Washington:MicrosoftPress.2003.

[6]张帆。史彩成.Windows驱动开发技术详解[M].北京:电子工业出版社,2008.(ZhangFan.ShiCaicheng.Windowsdriverde.velopmentInternals[M].Beijing:PublicationHouse0fElectronics

Industry,2008.)万方数据

相关主题