基于Wave Panel 的HID 设备通讯接口设计

发布者:Yinyue1314最新更新时间:2013-07-31 来源: dzsc关键字:WavePanel  HID设备  通讯接口 手机看文章 扫描二维码
随时随地手机看文章

  0 引 言

  HID(Human Interface Device,人机接口设备)是一类低速USB 设备,典型的HID 设备有键盘.鼠标.游戏杆等.相对于U 盘.打印机等高速USB 设备,HID 设备具有使用方便.响应迅速.研发成本低廉等优点,其应用领域十分广泛.当前HID 设备正在向专用化方向快速发展 .

  Wave Panel 是苹果公司研发的视频色彩编辑软件Color 支持一型专用的数据输入和显示HID 设备,该设备面板上设置有按键.解码器和二维跟踪球三种控制器,能够快捷.精确地对各类视频色彩参数进行设置,并将控制和状态信息同步显示在设备微型显示屏上,从而改变了传统“鼠标+键盘”的视频编辑软件控制方式.Wave Panel 没有提供Windows 环境下与应用程序通讯的功能,因此可基于Wave Panel 设计一个功能完备.通用性强的通讯接口,并加以验证.这对企业和科研机构根据实际需求灵活地配备和控制专用HID 设备有很大帮助.

  1 Wave Panel 的性能特征

  HID 设备除满足USB 标准外,还具备一些与人机交互密切相关的特点,主要包括:

  1)通常使用控制方式或中断方式通讯.两种传输方式的区别在于控制方式适用于对延迟没有特别限制的数据,而中断方式适用于低延迟.周期性的数据 .Wave Panel 的数据传输方式为中断方式.

  2)单次传输的数据量小,且这些数据以状态变化信息或控制信息为主.其中低速HID 设备单次传输数据最大为8 字节,全速设备为64 字节,高速设备为1024 字节.主机与HID 设备交换的数据存储在报表(Report)结构内 .

  Wave Panel 的输入报表长度为27 字节,其中0 字节用于记录报表ID,1 ~ 6 字节的前41 比特分别记录41 个按键的按下或抬起状态,另有7 比特未用,置为0;7 ~19 字节分别记录13 个解码器的状态;20 ~25 字节每2 字节分别记录一个二维跟踪球X 轴和Y 轴的状态;26 字节留作固件升级使用.Wave Panel 的输出报表长度为41 字节,其中0 ~ 5 字节为控制命令,6 ~ 40字节为显示信息的字符.

 

    3)使用轮询方式检测设备状态变化情况.HID 设备可能在任何时刻向主机发送数据,例如鼠标发生移动或键盘有按键按下.所以HID 设备会在一个固定的时间间隔内轮询各控制口一次,当发现设备状态有变化时生成输入报表发送给主机 .但轮询的间隔时间要由用户对HID 设备的操作速度决定.如果间隔时间过小,则用户来不及在两次轮询间隔内完成一次操作;反之,又会使HID 设备的响应速度无法与用户的操作速度匹配,造成延迟 .

  Wave Panel 规定,每40 毫秒对所有控制器端口轮询一次,若其中任何一个控制器的状态在两次轮询间隔内发生改变,就会在下次轮询前生成输入报表发送给主机.40 毫秒是基于视频每帧显示时间而确定的.

  2 HID 设备的通讯过程

  HID 设备是Windows 操作系统最早支持的USB设备.在Windows 98 及以后的各版本中都已内置了HID 设备的驱动程序,主机与HID 设备通讯时无须再编写专门的驱动程序.这就简化了HID 设备与主机应用程序通讯接口的设计和研发.

  通过分析,可以将HID 设备与主机应用程序的通讯划分为设备识别和打开.读报表.写报表和设备关闭四个模块.

  2. 1 Wave Panel 的识别和打开

  HID 设备连接到主机后,以厂商ID(VID).产品ID(PID)和产品版本号(PVN)三项属性值的组合作为设备唯一标识.Wave Panel 的三项属性值可以从产品说明书直接获取.由于一台主机可能同时连接有多台HID 设备,所以在通讯前应用程序必须要识别并打开Wave Panel,这一过程需要调用多个Windows API函数实现.基本方法是首先获取当前与主机连接的所有HID 设备信息的集合,然后逐一枚举集合中的各设备,并比较VID.PID 和PVN 值.当三项属性值都与Wave Panel 相等时表示已经找到,调用CreateFile()将该Wave Panel 打开,并保存Wave Panel 设备句柄.该模块的流程如图1 所示.

  流程中调用的Windows API 函数和结构体变量类型分别在hidpi. h.hidsdi. h.hidusage. h.setupapi. h 和hid. lib.setupapi. lib 几个文件中定义并实现 .主要包括:

  1)HidD_GetHidGuid( ):获取HID 设备的GUID值,并保存在一个GUID 结构体变量中;

  2)SetupDiGetClassDevs():根据HID 设备的GUID值获取HID 设备信息的集合,并保存在一个HDEVINFO结构体类型的变量中;

  3)SetupDiEnumDeviceInterfaces():在设备信息集合中依次获取编号为i(i = 0,1,…) 的设备接口信息,保存在一个SP_DEVICE_INTERFACE_DATA 结构体类型变量中;

  4)SetupDiGetDeviceInterfaceDetail():当获取设备接口信息成功时进一步获取该设备的详细信息,并保存设备路径;

  5)HidD_GetAttributes():获取设备属性值并保存在一个HIDD_ATTRIBUTES 结构体类型变量中.VID.PID 和PVN 值即为该结构体变量的三项成员;

  6)SetupDiDestroyDeviceInfoList( ):销毁设备信息集合.[page]

  2. 2 读报表

  读报表是指HID 设备向主机输入数据.当WavePanel 面板上任意控制器状态发生变化时,都会在下一次轮询时将这些数据生成输入报表,并发送给主机.

  主机上的应用程序接收输入报表并对数据进行解析,然后做出相应的处理.

  由于Wave Panel 可能在任何时候与主机以中断方式进行通讯,因此应用程序需要维护一个异步调用的读报表线程.该线程在Wave Panel 没有向主机输入数据时阻塞,以减轻系统负载.当有数据输入时,线程恢复运行,调用ReadFile()将输入数据保存在缓冲区中,并对数据进行解析.这之后线程将再次被阻塞,直到有新的输入数据到来.应用程序在Wave Panel成功打开后就创建读报表线程,应用程序运行结束前该线程将一直存在.读报表流程如图2 所示.

  2. 3 写报表

  与读报表相反,写报表是指主机向HID 设备输出数据.写报表对延迟的要求较高,但这一功能不是必需的,根据HID 设备的实际用途而定 .鼠标.键盘.游戏杆等较简单的设备只向主机发送数据,这些数据通常是一些控制信息和状态信息 ,例如改变HID 设备液晶屏上的显示信息.控制设备上发光元件的亮灭等.

  应用程序的写报表线程流程与读报表线程类似,首先将要输出的数据按Wave Panel 规定的数据格式进行封装,复制到一个缓冲区内,再调用WriteFile()将缓冲区数据输出到Wave Panel 即可,这些信息主要是与视频帧状态变化相关的信息.

  2. 4 设备关闭

  设备关闭模块功能比较简单.当主机与WavePanel 的通讯结束时,调用CloseHandle( ) 将打开的Wave Panel 关闭即可.

  3 Wave Panel 通讯接口的设计

  以上述通讯过程为基础,设计一个名为CHid-Comm 的通讯接口,其总体框架为:

  其中,成员函数OpenDevice()和CloseDevice()分别用于识别.打开和关闭Wave Panel.ReadReport-Thread()用于创建读报表线程.由于线程为异步方式执行,因此ReadReportThread( ) 在调用ReadFile( ) 时要使用一个OVERLAPPED 结构变量,该变量含有一个I/ O 完成后触发事件的句柄.当HID 设备没有向主机输入数据时,事件处于无信号状态,线程被阻塞;当有数据输入时,事件被触发,线程恢复运行,接收并将数据保存在读报表缓冲区,供数据解析函数使用.WriteReportThread()与ReadReportThread( ) 的功能类似,用于创建写报表线程.

  成员变量VID.PID 和PVN 用于保存三项属性值,ReadBuffer 和WriteBuffer 分别定义读报表缓冲区和写报表缓冲区,其大小由HID 设备的输入报表和输出报表长度决定.S 实际上,该接口不仅可以用于WavePanel,同样也适用于其它HID 设备.只需要重新设置VID.PID 和PVN 值以及ReadBuffer.WriteBuffer 缓冲区的大小,而无须对识别.打开.读写报表等功能进行修改.

  图3 是主机应用程序调用CHidComm 接口实现与Wave Panel 通讯的情况.以十六进制形式输出读报表缓冲区的值,并显示控制器状态变化情况.需要注意的一个重要问题是Wave Panel 输入报表并不使用报表ID,在这种情况下应将读报表缓冲区ReadBuffer 的第0 字节设置为0×00,否则读报表线程将无法接收到输入报表.

  4 结束语

  Wave Panel 是一类较复杂的视频编辑HID 设备,没有提供Windows 环境下的通讯功能.基于WavePanel 对Windows 环境下的HID 设备通讯进行研究,能够解决许多UNIX.Linux.Mac 等操作系统支持的专用HID 设备无法在Windows 环境下使用的问题.较之现有的一些解决方案,设计的CHidComm 接口具有较强的通用性,并可以方便地对功能进行扩展.今后的工作主要是扩展该接口在64 位Windows 环境下的功能.

关键字:WavePanel  HID设备  通讯接口 引用地址:基于Wave Panel 的HID 设备通讯接口设计

上一篇:一种适用于高速接口电路的新型均衡电路
下一篇:基于SDI 接口的实时图像增强显示系统

推荐阅读最新更新时间:2024-05-02 22:43

基于RS485接口Modbus协议的PLC与多机通讯
  1 引言   在自动控制领域,PLC 和单片机都受到广泛应用。PLC 具有稳定可靠,抗干扰能力强, 功能强大且使用方便等特点 ,单片机具有成本低廉,使用灵活,功能多样等特点。PLC 与 单片机结合,互相联系,互相通讯,将扩展控制功能,更好的控制复杂的系统。   在研究混合动力电动汽车驱动系统 时, 采用PLC 作为主控制器,控制电机变频器和发 动机节气门控制器,实现对电机和发动机功率的 综合控制。因为PLC 和变频器均是艾默生公司 的产品,均支持RS485 接口和MODBUS 协议, 所以控制系统统一采用RS485 接口和MODBUS 协议。而发动机节气门控制器采用89C51 单片 机,所以要通过建立PLC 与单片机的通讯
[单片机]
基于RS485<font color='red'>接口</font>Modbus协议的PLC与多机<font color='red'>通讯</font>
基于HID协议的USB人机交互设备接口设计
     目前市场上USB设备的种类繁多,但是这些设备会有一些共同的特性,根据这些特性可以把USB设备划分为不同的类,如显示设备、通信设备、音频设备、大容量存储设备、人机接口设备(HID)。这里介绍如何实现HID类设备,以及如何在应用程序中对HID类设备进行访问。从Windows98操作系统开始,为HID类设备提供了通用的驱动程序,所以只要按照HID设备类的规范编写设备的固件程序,就能够让Windows系统自动识别设备,省去了复杂的驱动程序编写过程。    1 HID协议简介   人机接口设备(HID)主要是指一些人与计算机进行交互的设备,如键盘、鼠标、游戏杆等;但是HID设备不一定非要是这些人机交互设备,只要符合HID设
[嵌入式]
用双端口RAM实现与PCI总线接口数据通讯
  采用双端口RAM实现DSP与PCI总线芯片之间的数据交换接口电路。   提出了一种使用CPLD解决双端口RAM地址译码和PCI接口芯片局部总线仲裁的的硬件设计方案,并给出了PCI总线接口芯片寄存器配置实例,介绍了软件包WinDriver开发设备驱动程序的具体过程。   随着计算机技术的不断发展,为满足外设间以及外设与主机间的高速数据传输,Intel公司于1991年提出了PCI总线概念。PCI总线是一种能为主CPU及外设提供高性能数据通讯的总线,其局部总线在33MHz总线时钟、32位数据通路时,数据传输速率最高可达133Mbps。实际应用中,可通过PCI总线实现主机与外部设备的高速数据传输,有效解决数据的实时传输和存储问题,
[嵌入式]
用双端口RAM实现与PCI总线<font color='red'>接口</font>数据<font color='red'>通讯</font>
详解PLC常见的通讯接口通讯协议
RS232接口与RS485接口的区别 一、接口的物理结构 1、RS232接口: 计算机通讯接口之一,通常 RS-232 接口以9个引脚 (DB-9) 或是25个引脚 (DB-25) 的型态出现,一般个人计算机上会有两组 RS-232 接口,分别称为 COM1 和 COM2。 2、RS485 RS485无具体的物理形状,根据工程的实际情况而采用的接口。 二、接口的电子特性 1、RS232:传输电平信号接口的信号电平值较高(信号“1”为“-3V至-15V”,信号“0”为“3至15V”),易损坏接口电路的芯片,又因为与TTL电平(0~“ 0.8v”,1~“ 2.0V”)不兼容故需使用电平转换电路方能与TTL电路连接。另外抗干扰能力差。
[嵌入式]
详解PLC常见的<font color='red'>通讯</font><font color='red'>接口</font>和<font color='red'>通讯</font>协议
小广播
热门活动
换一批
更多
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved