崔阳
(中国劳动关系学院数学与计算机部,北京100048)
专用型低速USB设备通讯模块的研究
崔阳
(中国劳动关系学院数学与计算机部,北京100048)
目前大量专用型低速USB设备仅能在特定操作系统或软件环境中识别和使用,给实际工作带来很大限制。首先简单分析低速USB设备的性能特点及通讯原理,在此基础上设计出一个低速USB设备通讯模块,并在Tangent Devices的Wave控制台上进行编程实验。实验结果证明模块能够较好地实现专用型低速USB设备在不同操作系统和软件环境下的双向通讯。
低速USB设备;输入输出报表;中断;Windows API
低速USB设备近年来得到了广泛应用,这类设备主要指游戏手柄、USB键盘、鼠标等单次数据传输量在8~1024字节之间的USB设备,又称HID(人机接口设备)[1]。
专用化是低速USB设备的发展趋势之一。当前很多应用软件系统为增强用户体验、提高操作速度都配备有专用低速USB设备。然而多数专用型USB设备因设计等原因,通常只针对并仅能局限在某一特定软件环境下使用,更无法实现跨操作系统平台移植,这就给实际工作造成了许多不便。因此,通过对专用型低速USB设备的通讯特点和机制进行研究,并设计出一个功能完备、通用性强、效率较高的通讯模块就非常有必要。
低速USB设备的特点主要有以下几方面:
(1)传输的数据多为状态或控制信息,这些信息都保存在输入输出报表(I/O Report)结构体内。低速USB设备通过报表与主机软件系统进行数据交互[2]。
(2)以轮询形式检测设备状态变化情况。低速USB设备会在一个固定的时间间隔内轮询各控制口一次,检测用户通过设备向主机发送的数据,并以报表形式发送。
(3)通讯方式通常为控制和中断两种。区别在于前者对延迟性没有特别要求,而后者对延迟容忍度低,且数据多具有周期性特征[3]。
2.1设备识别和打开
VID、PID和PVN三个属性值是低速USB设备在计算机内的唯一标识[4],在设备说明书中可查。软件系统在通讯前的第一步工作就是识别出特定的USB设备。方法是首先获取并逐一枚举当前主机中连接的各USB设备信息,并提取三个属性值与特定的USB设备进行比较,当符合时表示设备找到。这时再将设备打开,并向软件系统传回设备的句柄。
2.2数据输入和输出
低速USB设备和主机软件系统间数据交互通过输入输出报表实现。每当设备上任意控制器状态发生变化,都将在下一次轮询时根据这些变化的数据值生成一个输入报表发送给主机。软件系统接收输入报表后首先检查报表ID值,然后按照报表结构体的定义格式对数据进行解析并做相应处理。有些专用型低速USB设备的输入报表没有定义报表ID值,这种情况下应将接收到的输入报表的ID值直接设置为0x00,否则输入报表线程无法解析数据。
数据输入过程中一个要特别注意的问题是:由于低速USB设备与主机的通讯时间不固定,在软件系统运行期间负责读取输入报表的线程必须要以异步方式调用。这样该线程在设备没有向主机输入数据时将阻塞;当有输入报表到来时线程再恢复运行,将输入报表中的数据保存在缓冲区中。之后线程将再次被阻塞,直到有新的输入报表到来,从而有效减轻主机负载。设备成功打开后该线程就被创建,并随软件系统运行结束而销毁。流程如图2所示。
数据输出是通过输出报表实现的,但并非所有的USB设备都必备这一功能。主机软件系统可能会向专用型低速USB设备输出一些控制或状态数据用来对设备进行监控[5],例如设备液晶屏上的显示信息等。这些数据必须同步显示,因此要求低延迟[6]。读取输出报表的线程首先将要输出的数据按设备规定的报表结构格式进行封装并复制到一个缓冲区内,再将缓冲区数据输出到设备。这一过程同样需要考虑主机的负载情况。
2.3设备关闭
当软件系统与低速USB设备的通讯结束时,将设备直接关闭即可。如果软件系统没有及时关闭设备,可能会在下次打开设备时遇到报错。
以上述通讯原理为基础,设计一个名为CUSBComModule的通讯模块,其总体结构为:
其中,成员函数OpenUSBDevice()和CloseUSBDevice()分别用于识别、打开和关闭设备。ReadReport-TableThread()用于创建输入报表线程。该线程中含有一个I/O完成后触发事件的句柄。当设备没有向主机输入数据时,事件处于无信号状态,线程被阻塞;当有数据输入时事件被触发线程恢复运行,将数据保存在输入报表缓冲区。WriteReportTableThread()与Read-ReportTableThread()类似,用于创建输出报表线程。
成员变量VID、PID和PVN用于保存三项属性值,由用户输入。ReadBuffer和WriteBuffer分别是输入报表缓冲区和输出报表缓冲区。缓冲区大小由设备的输入报表和输出报表长度决定。该模块的特点在于:实际应用中可以根据不同的低速USB设备,设置其对应的VID、PID和PVN值以及ReadReportBuffer和WriteReportBuffer缓冲区的大小;而设备的识别、打开、输入/输出数据等功能都无需修改。这样就保证了模块具有较强的通用性。
实验环境为Windows 8操作系统,开发平台为Visual Studio 2012,选用的低速USB设备为Tangent Devices的Wave Console。Tangent Wave Console是一类较复杂的专用型USB设备,设有41个按键、13个旋钮和3个二维滚动跟踪球三类控制器,另有3个微型液晶屏。Tangent Wave Console输入报表长度是27字节,各字节的分配是0字节记录报表ID,1-6字节前41比特记录各按键的状态,另有7比特未用,7-19字节记录各旋钮的状态;20-25字节分别记录三个二维滚动跟踪球X轴和Y轴的状态;26字节留作固件升级。输出报表长度是41字节,各字节的分配是0-5字节为输出控制信息,6-40字节为液晶屏显示信息。Tangent Wave Console的数据传输方式为中断方式,轮询间隔时间为40ms。
在Windows环境下,通讯模块的OpenUSBDevice()和CloseUSBDevice()功能可以通过调用相关API函数实现。为保证模块在不同操作系统和软件系统下的通用性,将模块以COM接口形式实现。这样当某一软件系统需要接入某一专用型低速USB设备时,只须在系统中调用这一接口即可。
图1 Tangent Wave Console与主机的通讯
图1给出的是模拟主机软件系统调用CUSBCom-Module实现与Tangent Wave Console双向通讯的运行界面。从图中可以看到,当用户在界面中输入设备三项属性值并点击“打开设备”后,软件系统将根据属性值完成对Tangent Wave Console的识别和打开工作。之后就可以对输入、输出报表的值进行读取和解析,并可以在液晶屏上将本次轮询内状态发生变动的控制器信息同步显示出来。当软件系统对各个控制器定义对应的消息响应函数后,即可操纵Tangent Wave Console完成实际工作。
提高专用型低速USB设备的通用性对科研和实际工作具有较大应用价值。通过Tangent Wave Console控制台上进行的编程实验表明CUSBComModule模块具有较强的通用性,且基本不对软件系统的运行效率造成影响。今后的工作主要是进一步扩展该接口的各项功能。
[1]Device Class Definition for Human Interface[EB/OL].http://www.usb.org/developers/devclass_docs/HID1_11.pdf,2001.
[2]杨晶菁,张浩.基于USB3.0的图像采集系统硬件设计[J].微型机与应用,2014,33(17):40-43.
[3]汤重阳,赵志文,韩钦亭等.Windows环境下USB设备监控技术的研究与实现[J].计算机应用,2014,34(S1):60-63.
[4]索晓杰,翟正军,姜红梅.USB3.0协议分析与框架设计[J].计算机测量与控制,2012,20(8):2233-2235.
[5]王继刚,郑维民,滕志猛,钟卫东.虚拟化环境下的USB设备访问方法[J].计算机应用,2011,31(5):1439-1442.
[6]杨强,王志斌,李晓,张敏娟.Linux中USB设备驱动程序的设计及其应用[J].济南大学学报(自然科学版),2014.28(3):224-229.
Low-Speed USB Device;I/O Reports;Interrupt;Windows API
Research on Communication Module of Special Low-Speed USB Devices
CUI Yang
(Department of Mathematics and Computer,China Institute of Industrial Relations,Beijing 100048)
Many special low-speed USB devices can only be identified and used in a specific operating system or software environment,which may cause some difficulties for practical work.Introduces the characteristics and communication mechanism of low-speed USB devices,based on it,designs a module for low-speed USB devices,and programs on Tangent Wave Console.Results show that the module can better achieve the two-way communication function of special low-speed USB devices in different operating systems and software environments. Keywords:
中央高校基本科研业务费专项资金资助项目(No.12zy019)
1007-1423(2016)25-0063-03DOI:10.3969/j.issn.1007-1423.2016.25.014
崔阳(1979-),男,内蒙古呼和浩特市人,博士研究生,讲师,研究方向为知识工程与知识发现
2016-05-10
2016-08-25