一种快速精确的KVM远程鼠标同步方法
扫描二维码
随时随地手机看文章
摘 要:针对键盘显示器鼠标(KVM)中远程被控鼠标与主机鼠标的同步要求,提出一种基于高速USB2.0-HID 类规范的鼠标同步方法。在传统相对鼠标同步方法中加入自适应"残差处理",去除相对偏移的累积误差,增加一种绝对鼠标同步方法,用双字节绝对坐标值代替传统单字节相对坐标偏移进行定位。实验结果表明,该方法使同步延迟时间降至3 ms 以下,能有效提高同步的精确性和时效性。
1 概述
KVM 即键盘(Keyboard)、显示器(Video)、鼠标(Mouse)的缩写组合[1].由于网络延时或被控机分辨率不在KVM 可控范围内等因素,传统KVM 在鼠标同步方面存在被控机鼠标与主机鼠标位置偏差过大、鼠标操作延缓甚至无法响应等问题。故提高鼠标同步的精确性和时效性,成为KVM 技术发展的一项重要内容。目前支持设备通用连接并具有高传输速率的USB 接口已成为外设连接PC 主机的主流方式。
USB2.0 接口标准在原有的12 Mb/s 和1.5 Mb/s 传输速率基础上加入480 Mb/s 的高速支持,使单位时间内能够传输和处理更多的事务数据。键盘、鼠标等支持人与计算机交互的设备归为人接口设备(Human Interface Device, HID)类,是最为广泛使用的USB 设备,并已得到Windows/Linux 等操作系统内置驱动程序的良好支持。本文依据HID 类规范协议,通过高速USB2.0 的硬件支持,向被控机发送信令数据模拟鼠标操作。
2 鼠标同步方法
2.1 实现原理
KVM 核心技术是通过键盘、鼠标、显示器的适当配置,对KVM 切换器的多台远程被控机进行管理,实现用一套I/O外设去访问和操作多台被控机。图1 为其框架示意图。
图1 KVM 框架示意图
HID 类设备的信息以描述符形式存储在设备ROM 中,通过设置、检测相应描述符结构完成设备与主机之间信令、数据的传输和获取。HID 类设备的具体应用数据如键盘键值、鼠标指针值等主要用报告描述符进行描述。报告描述符由多片规则则条目的信息由片段组成,可由HID 类规范自定义数据表达类型。主要条目第3 位数值(Bit2{Absolute(0)|Relative(1)})标识设备操作使用是绝对模式还是相对模式,从而在支持鼠标同步方法中,有绝对同步和相对同步这2 种方式。鼠标数据内容包括鼠标的按键状态、坐标位置和滚轮滚动值等。
传输方式根据鼠标应用数据量较小、不定时发生、延迟受限等特点,采用对时间有严格限制的中断传输方式。同时,高速USB2.0 支持单个事务可传送最大数据包的容量达1 024 Byte,轮询事务的时间间隔仅为125 Fs,支持传输速率可达到24.5 Mb/s.
2.2 相对鼠标同步
相对鼠标同步是根据计算前后2 次鼠标坐标的差值,对当前鼠标位置进行偏移。由于条目以1 Byte 为单位,因此传输单字节坐标偏移的相对同步方式最早应用于KVM 的鼠标同步。相对鼠标同步的有效数据区定义如表1 所示。
表1 相对鼠标同步数据区定义
由字节的低3 位,即0 bit~2 bit 分别表示滚轮、右键和左键按下或弹起的状态,即按键状态。
相对偏移差值数值范围为?127~127,当差值在水平方向(X 轴)或竖直方向(Y 轴)大于127 时,需要分多次进行移动,即循环多次发送差值数据。滚轮以±1表示向上或向下滚动一格,并可累计滚动格数,以支持更多页面滚动。本文用汇编语言定义相对鼠标同步的报告描述符内容如表2 所示。
表2 相对鼠标同步的报告描述符
通过界面获得的鼠标坐标值以一个像素为单位,较实际位置有一定的精度损失。且相对鼠标同步每次的偏移值均以上次坐标为基准,数值损失将不断累加。针对此问题,本文在相对同步方式中增加了自适应的误差弥补,对累积误差进行检测和处理,即"残差处理".该处理方法主要采用坐标值精度转换、累计残差、足1 补齐的方式,具体实现方法如下所述:
(1)坐标值精度转换
采用short 型双字节数值表示法,以屏幕左上角为原点,且无论何种分辨率均定义右下角坐标为(32 767, 32 767),将界面获取的坐标根据屏幕分辨率按比例进行转换。
同时记录本次的双字节绝对坐标位置作为下次偏移的基准,减少以偏移差值为基准而引入的累积误差。
(2)残差累计及补偿
使用double 型变量累计每次坐标值转为short 整型时丢弃的小数值。当累计值大于1 时,在当前坐标差值上补1 再进行发送。同时定时检测误差累计值大于1 的次数频率,当超过一定程度时,采取自动重新同步。即先进行13 次(?127,?127)坐标偏移,将鼠标移动到屏幕左上角,然后再用一次至多次偏移,将鼠标定位到控制主机记录的最后坐标位置。
然后采用13 次坐标偏移,若以1 920×1 080 分辨率屏幕为上界,则在当前主流显示器中,均可以将鼠标移至屏幕左上角。
2.3 绝对鼠标同步
绝对鼠标同步在经过直接传输换算后,其双字节绝对坐标值的每次同步,均需要以原点为基准重新定位鼠标,以去除与前一次鼠标位置的关联,由此避免了相对偏移造成的误差累积。其有效同步数据区定义如表3 所示。
表3 绝对鼠标同步的数据区定义
绝对鼠标同步具有更精确的同步效果,并且需要占用报告描述符条目的2 Byte 空间来表示坐标值(滚轮值),故必须得到操作系统内置HID 类驱动程序的支持。现代Windows系列(XP/Win7/Vista 等)、Mac OS 10.5 以及Linux 2.6 版本等操作系统均可支持绝对鼠标模式,OS/2 系统也于2010 年5 月发布xsmouse00.zip 提供支持该模式的鼠标驱动程序。由于绝对鼠标同步方法采用双字节表示有效数据,其报告描述符结构设置与相对同步方式不同,描述符内容如表4 所示。
表4 绝对鼠标同步的报告描述符
3 KVM 系统总体结构
本文设计并实现了基于该鼠标同步方法的KVM 系统,主要分为3 个模块:(1)运行于控制主机的客户端;(2)连接多台被控机的KVM 切换系统;(3)通过USB 接口与被控机相连,并且能模拟HID 设备的控制模块。KVM 系统总体结构如图2 所示。
图2 KVM 系统总体结构
KVM 系统3 个模块功能定义如下:
(1)控制主机客户端
本文设计的KVM 系统基于B/S 框架,控制主机组合鼠标、键盘、显示器等I/O 设备,通过Web 页面调用操作界面。
界面经TCP/IP 网络接收被控机屏幕画面并解码显示,同时检测本机鼠标、键盘事件,将数据发送至KVM 切换系统。由于被控机的视频流发送负荷达5 Mb/s~10 Mb/s,为避免鼠标数据延迟,因此,本系统采用独立的TCP/IP 连接发送鼠标键盘数据。
(2)KVM 切换系统
KVM 切换系统的核心是:运行主要内核程序及服务器程序,并通过HPI 接口连接多台被控机进行切换控制的嵌入式处理器。处理器网络接收鼠标数据并完成坐标处理算法,并将数据发送至与相应被控机连接的HID 设备控制模块。
(3)HID 设备控制模块
采用USB2.0 接口与被控机相连,支持480 Mb/s 的传输速率。经HPI 接收KVM 切换系统的鼠标数据并对报告描述符结构进行设置,通过中断传输方式传送至被控机,实现鼠标设备的模拟控制。该模块是KVM 系统中完成HID 设备数据通信的核心模块。
4 实验与结果分析
4.1 延时测试
本文分别对KVM 鼠标操作总体的延迟时间,以及同步方法模块的延迟时间进行测试,定义如下:
(1)总体延时
本文采用"回环模式"对总体延时进行测试。回环模式主要通过在主控机和被控机上形成对同一事件的循环响应,获取两者的响应时间差值,以得出延迟时间。具体实现方法为:在主控机和被控机上同时运行一个测试客户端,鼠标单击主控机的客户端界面,界面响应事件并发出UDP 数据包标识时间;事件传递至被控机客户端后,被控机客户端同样响应该事件并发出UDP 包。通过网络工具捕捉这2 个UDP包,并计算两者之间的时间差值,即得到总体的鼠标延时。
鼠标总体延时测试的实现流程如图3 所示。
图3 总体延时测试
(2)同步方法延时
考虑到控制主机性能和网络环境等不固定因素,本文同时对鼠标同步方法的延迟时间进行测试。同步方法延时测试主要采用硬件中断方式。同样在主控机和被控机上各运行一个客户端,并对主控机客户端进行鼠标单击操作。当鼠标操作数据由主控机客户端传输到处理器时,处理器产生中断并拉高电平;被控机客户端接收到鼠标操作数据,发出UDP 包作为回应,当处理器接收到被控机端的UDP 包时拉低电平,从而形成一个时间脉冲。忽略UDP 包的网络传输时间,则该时间脉冲宽度即可近似为同步方法的延迟时间。同步方法延时测试的实现流程如图4 所示。
图4 同步方法延时测试
"回环模式"测试最终所得的总体鼠标延时及同步方法延时测试结果如表5 所示。
表5 延时测试结果
4.2 同步精确度
KVM 测试运行12 h,并在被控机上播放MKV 视频以增加网络传输负荷。定期进行鼠标操作,且操作时间保持30 h以上。经测试评估,在绝对鼠标同步模式下,长时间使用鼠标不会出现位置偏差;在相对鼠标同步模式下,正常状态操作鼠标不会出现位置不同步现象,但在大范围区间内快速移动鼠标时会有约1 mm 的位置偏差,但鼠标可以在移动中自动更正重新达到重合。
5 结束语
本文提出一种快速精确的KVM 远程鼠标同步方法。采用USB2.0 接口实现数据高速传输,通过加入自适应"残差处理"和双字节坐标表示法改进传统相对鼠标同步方式,即实现鼠标同步方式绝对化。测试结果表明,该方法能提高鼠标定位的精准度,系统能够更快处理鼠标事务。以后将不断对本文方法进行优化,实现高速度与高精度更好的融合。