一種快速精確的KVM遠(yuǎn)程鼠標(biāo)同步方法
摘 要:針對(duì)鍵盤(pán)顯示器鼠標(biāo)(KVM)中遠(yuǎn)程被控鼠標(biāo)與主機(jī)鼠標(biāo)的同步要求,提出一種基于高速USB2.0-HID 類(lèi)規(guī)范的鼠標(biāo)同步方法。在傳統(tǒng)相對(duì)鼠標(biāo)同步方法中加入自適應(yīng)殘差處理,去除相對(duì)偏移的累積誤差,增加一種絕對(duì)鼠標(biāo)同步方法,用雙字節(jié)絕對(duì)坐標(biāo)值代替?zhèn)鹘y(tǒng)單字節(jié)相對(duì)坐標(biāo)偏移進(jìn)行定位。實(shí)驗(yàn)結(jié)果表明,該方法使同步延遲時(shí)間降至3 ms 以下,能有效提高同步的精確性和時(shí)效性。
本文引用地址:http://www.ex-cimer.com/article/164983.htm1 概述
KVM 即鍵盤(pán)(Keyboard)、顯示器(Video)、鼠標(biāo)(Mouse)的縮寫(xiě)組合[1].由于網(wǎng)絡(luò)延時(shí)或被控機(jī)分辨率不在KVM 可控范圍內(nèi)等因素,傳統(tǒng)KVM 在鼠標(biāo)同步方面存在被控機(jī)鼠標(biāo)與主機(jī)鼠標(biāo)位置偏差過(guò)大、鼠標(biāo)操作延緩甚至無(wú)法響應(yīng)等問(wèn)題。故提高鼠標(biāo)同步的精確性和時(shí)效性,成為KVM 技術(shù)發(fā)展的一項(xiàng)重要內(nèi)容。目前支持設(shè)備通用連接并具有高傳輸速率的USB 接口已成為外設(shè)連接PC 主機(jī)的主流方式。
USB2.0 接口標(biāo)準(zhǔn)在原有的12 Mb/s 和1.5 Mb/s 傳輸速率基礎(chǔ)上加入480 Mb/s 的高速支持,使單位時(shí)間內(nèi)能夠傳輸和處理更多的事務(wù)數(shù)據(jù)。鍵盤(pán)、鼠標(biāo)等支持人與計(jì)算機(jī)交互的設(shè)備歸為人接口設(shè)備(Human Interface Device, HID)類(lèi),是最為廣泛使用的USB 設(shè)備,并已得到Windows/Linux 等操作系統(tǒng)內(nèi)置驅(qū)動(dòng)程序的良好支持。本文依據(jù)HID 類(lèi)規(guī)范協(xié)議,通過(guò)高速USB2.0 的硬件支持,向被控機(jī)發(fā)送信令數(shù)據(jù)模擬鼠標(biāo)操作。
2 鼠標(biāo)同步方法
2.1 實(shí)現(xiàn)原理
KVM 核心技術(shù)是通過(guò)鍵盤(pán)、鼠標(biāo)、顯示器的適當(dāng)配置,對(duì)KVM 切換器的多臺(tái)遠(yuǎn)程被控機(jī)進(jìn)行管理,實(shí)現(xiàn)用一套I/O外設(shè)去訪問(wèn)和操作多臺(tái)被控機(jī)。圖1 為其框架示意圖。
圖1 KVM 框架示意圖
HID 類(lèi)設(shè)備的信息以描述符形式存儲(chǔ)在設(shè)備ROM 中,通過(guò)設(shè)置、檢測(cè)相應(yīng)描述符結(jié)構(gòu)完成設(shè)備與主機(jī)之間信令、數(shù)據(jù)的傳輸和獲取。HID 類(lèi)設(shè)備的具體應(yīng)用數(shù)據(jù)如鍵盤(pán)鍵值、鼠標(biāo)指針值等主要用報(bào)告描述符進(jìn)行描述。報(bào)告描述符由多片規(guī)則則條目的信息由片段組成,可由HID 類(lèi)規(guī)范自定義數(shù)據(jù)表達(dá)類(lèi)型。主要條目第3 位數(shù)值(Bit2{Absolute(0)|Relative(1)})標(biāo)識(shí)設(shè)備操作使用是絕對(duì)模式還是相對(duì)模式,從而在支持鼠標(biāo)同步方法中,有絕對(duì)同步和相對(duì)同步這2 種方式。鼠標(biāo)數(shù)據(jù)內(nèi)容包括鼠標(biāo)的按鍵狀態(tài)、坐標(biāo)位置和滾輪滾動(dòng)值等。
傳輸方式根據(jù)鼠標(biāo)應(yīng)用數(shù)據(jù)量較小、不定時(shí)發(fā)生、延遲受限等特點(diǎn),采用對(duì)時(shí)間有嚴(yán)格限制的中斷傳輸方式。同時(shí),高速USB2.0 支持單個(gè)事務(wù)可傳送最大數(shù)據(jù)包的容量達(dá)1 024 Byte,輪詢(xún)事務(wù)的時(shí)間間隔僅為125 Fs,支持傳輸速率可達(dá)到24.5 Mb/s.
2.2 相對(duì)鼠標(biāo)同步
相對(duì)鼠標(biāo)同步是根據(jù)計(jì)算前后2 次鼠標(biāo)坐標(biāo)的差值,對(duì)當(dāng)前鼠標(biāo)位置進(jìn)行偏移。由于條目以1 Byte 為單位,因此傳輸單字節(jié)坐標(biāo)偏移的相對(duì)同步方式最早應(yīng)用于KVM 的鼠標(biāo)同步。相對(duì)鼠標(biāo)同步的有效數(shù)據(jù)區(qū)定義如表1 所示。
表1 相對(duì)鼠標(biāo)同步數(shù)據(jù)區(qū)定義
由字節(jié)的低3 位,即0 bit~2 bit 分別表示滾輪、右鍵和左鍵按下或彈起的狀態(tài),即按鍵狀態(tài)。
相對(duì)偏移差值數(shù)值范圍為?127~127,當(dāng)差值在水平方向(X 軸)或豎直方向(Y 軸)大于127 時(shí),需要分多次進(jìn)行移動(dòng),即循環(huán)多次發(fā)送差值數(shù)據(jù)。滾輪以±1表示向上或向下滾動(dòng)一格,并可累計(jì)滾動(dòng)格數(shù),以支持更多頁(yè)面滾動(dòng)。本文用匯編語(yǔ)言定義相對(duì)鼠標(biāo)同步的報(bào)告描述符內(nèi)容如表2 所示。
表2 相對(duì)鼠標(biāo)同步的報(bào)告描述符
通過(guò)界面獲得的鼠標(biāo)坐標(biāo)值以一個(gè)像素為單位,較實(shí)際位置有一定的精度損失。且相對(duì)鼠標(biāo)同步每次的偏移值均以上次坐標(biāo)為基準(zhǔn),數(shù)值損失將不斷累加。針對(duì)此問(wèn)題,本文在相對(duì)同步方式中增加了自適應(yīng)的誤差彌補(bǔ),對(duì)累積誤差進(jìn)行檢測(cè)和處理,即殘差處理.該處理方法主要采用坐標(biāo)值精度轉(zhuǎn)換、累計(jì)殘差、足1 補(bǔ)齊的方式,具體實(shí)現(xiàn)方法如下所述:
(1)坐標(biāo)值精度轉(zhuǎn)換
采用short 型雙字節(jié)數(shù)值表示法,以屏幕左上角為原點(diǎn),且無(wú)論何種分辨率均定義右下角坐標(biāo)為(32 767, 32 767),將界面獲取的坐標(biāo)根據(jù)屏幕分辨率按比例進(jìn)行轉(zhuǎn)換。
同時(shí)記錄本次的雙字節(jié)絕對(duì)坐標(biāo)位置作為下次偏移的基準(zhǔn),減少以偏移差值為基準(zhǔn)而引入的累積誤差。
(2)殘差累計(jì)及補(bǔ)償
使用double 型變量累計(jì)每次坐標(biāo)值轉(zhuǎn)為short 整型時(shí)丟棄的小數(shù)值。當(dāng)累計(jì)值大于1 時(shí),在當(dāng)前坐標(biāo)差值上補(bǔ)1 再進(jìn)行發(fā)送。同時(shí)定時(shí)檢測(cè)誤差累計(jì)值大于1 的次數(shù)頻率,當(dāng)超過(guò)一定程度時(shí),采取自動(dòng)重新同步。即先進(jìn)行13 次(?127,?127)坐標(biāo)偏移,將鼠標(biāo)移動(dòng)到屏幕左上角,然后再用一次至多次偏移,將鼠標(biāo)定位到控制主機(jī)記錄的最后坐標(biāo)位置。
然后采用13 次坐標(biāo)偏移,若以1 920×1 080 分辨率屏幕為上界,則在當(dāng)前主流顯示器中,均可以將鼠標(biāo)移至屏幕左上角。
2.3 絕對(duì)鼠標(biāo)同步
絕對(duì)鼠標(biāo)同步在經(jīng)過(guò)直接傳輸換算后,其雙字節(jié)絕對(duì)坐標(biāo)值的每次同步,均需要以原點(diǎn)為基準(zhǔn)重新定位鼠標(biāo),以去除與前一次鼠標(biāo)位置的關(guān)聯(lián),由此避免了相對(duì)偏移造成的誤差累積。其有效同步數(shù)據(jù)區(qū)定義如表3 所示。
表3 絕對(duì)鼠標(biāo)同步的數(shù)據(jù)區(qū)定義
絕對(duì)鼠標(biāo)同步具有更精確的同步效果,并且需要占用報(bào)告描述符條目的2 Byte 空間來(lái)表示坐標(biāo)值(滾輪值),故必須得到操作系統(tǒng)內(nèi)置HID 類(lèi)驅(qū)動(dòng)程序的支持?,F(xiàn)代Windows系列(XP/Win7/Vista 等)、Mac OS 10.5 以及Linux 2.6 版本等操作系統(tǒng)均可支持絕對(duì)鼠標(biāo)模式,OS/2 系統(tǒng)也于2010 年5 月發(fā)布xsmouse00.zip 提供支持該模式的鼠標(biāo)驅(qū)動(dòng)程序。由于絕對(duì)鼠標(biāo)同步方法采用雙字節(jié)表示有效數(shù)據(jù),其報(bào)告描述符結(jié)構(gòu)設(shè)置與相對(duì)同步方式不同,描述符內(nèi)容如表4 所示。
評(píng)論