HID(Human Interface Device,人機(jī)接口設(shè)備)是一類低速USB 設(shè)備,典型的HID 設(shè)備有鍵盤(pán)。鼠標(biāo)。游戲桿等。相對(duì)于U 盤(pán)。打印機(jī)等高速USB 設(shè)備,HID 設(shè)備具有使用方便。響應(yīng)迅速。研發(fā)成本低廉等優(yōu)點(diǎn),其應(yīng)用領(lǐng)域十分廣泛。當(dāng)前HID 設(shè)備正在向?qū)S没较蚩焖侔l(fā)展 。
Wave Panel 是蘋(píng)果公司研發(fā)的視頻色彩編輯軟件Color 支持一型專用的數(shù)據(jù)輸入和顯示HID 設(shè)備,該設(shè)備面板上設(shè)置有按鍵。解碼器和二維跟蹤球三種控制器,能夠快捷。精確地對(duì)各類視頻色彩參數(shù)進(jìn)行設(shè)置,并將控制和狀態(tài)信息同步顯示在設(shè)備微型顯示屏上,從而改變了傳統(tǒng)“鼠標(biāo)+鍵盤(pán)”的視頻編輯軟件控制方式.Wave Panel 沒(méi)有提供Windows 環(huán)境下與應(yīng)用程序通訊的功能,因此可基于Wave Panel 設(shè)計(jì)一個(gè)功能完備。通用性強(qiáng)的通訊接口,并加以驗(yàn)證。這對(duì)企業(yè)和科研機(jī)構(gòu)根據(jù)實(shí)際需求靈活地配備和控制專用HID 設(shè)備有很大幫助。
1 Wave Panel 的性能特征
HID 設(shè)備除滿足USB 標(biāo)準(zhǔn)外,還具備一些與人機(jī)交互密切相關(guān)的特點(diǎn),主要包括:
1)通常使用控制方式或中斷方式通訊。兩種傳輸方式的區(qū)別在于控制方式適用于對(duì)延遲沒(méi)有特別限制的數(shù)據(jù),而中斷方式適用于低延遲。周期性的數(shù)據(jù) .Wave Panel 的數(shù)據(jù)傳輸方式為中斷方式。
2)單次傳輸?shù)臄?shù)據(jù)量小,且這些數(shù)據(jù)以狀態(tài)變化信息或控制信息為主。其中低速HID 設(shè)備單次傳輸數(shù)據(jù)最大為8 字節(jié),全速設(shè)備為64 字節(jié),高速設(shè)備為1024 字節(jié)。主機(jī)與HID 設(shè)備交換的數(shù)據(jù)存儲(chǔ)在報(bào)表(Report)結(jié)構(gòu)內(nèi) 。
Wave Panel 的輸入報(bào)表長(zhǎng)度為27 字節(jié),其中0 字節(jié)用于記錄報(bào)表ID,1 ~ 6 字節(jié)的前41 比特分別記錄41 個(gè)按鍵的按下或抬起狀態(tài),另有7 比特未用,置為0;7 ~19 字節(jié)分別記錄13 個(gè)解碼器的狀態(tài);20 ~25 字節(jié)每2 字節(jié)分別記錄一個(gè)二維跟蹤球X 軸和Y 軸的狀態(tài);26 字節(jié)留作固件升級(jí)使用.Wave Panel 的輸出報(bào)表長(zhǎng)度為41 字節(jié),其中0 ~ 5 字節(jié)為控制命令,6 ~ 40字節(jié)為顯示信息的字符。
3)使用輪詢方式檢測(cè)設(shè)備狀態(tài)變化情況.HID 設(shè)備可能在任何時(shí)刻向主機(jī)發(fā)送數(shù)據(jù),例如鼠標(biāo)發(fā)生移動(dòng)或鍵盤(pán)有按鍵按下。所以HID 設(shè)備會(huì)在一個(gè)固定的時(shí)間間隔內(nèi)輪詢各控制口一次,當(dāng)發(fā)現(xiàn)設(shè)備狀態(tài)有變化時(shí)生成輸入報(bào)表發(fā)送給主機(jī) 。但輪詢的間隔時(shí)間要由用戶對(duì)HID 設(shè)備的操作速度決定。如果間隔時(shí)間過(guò)小,則用戶來(lái)不及在兩次輪詢間隔內(nèi)完成一次操作;反之,又會(huì)使HID 設(shè)備的響應(yīng)速度無(wú)法與用戶的操作速度匹配,造成延遲 。
Wave Panel 規(guī)定,每40 毫秒對(duì)所有控制器端口輪詢一次,若其中任何一個(gè)控制器的狀態(tài)在兩次輪詢間隔內(nèi)發(fā)生改變,就會(huì)在下次輪詢前生成輸入報(bào)表發(fā)送給主機(jī).40 毫秒是基于視頻每幀顯示時(shí)間而確定的。
2 HID 設(shè)備的通訊過(guò)程
HID 設(shè)備是Windows 操作系統(tǒng)最早支持的USB設(shè)備。在Windows 98 及以后的各版本中都已內(nèi)置了HID 設(shè)備的驅(qū)動(dòng)程序,主機(jī)與HID 設(shè)備通訊時(shí)無(wú)須再編寫(xiě)專門(mén)的驅(qū)動(dòng)程序。這就簡(jiǎn)化了HID 設(shè)備與主機(jī)應(yīng)用程序通訊接口的設(shè)計(jì)和研發(fā)。
通過(guò)分析,可以將HID 設(shè)備與主機(jī)應(yīng)用程序的通訊劃分為設(shè)備識(shí)別和打開(kāi)。讀報(bào)表。寫(xiě)報(bào)表和設(shè)備關(guān)閉四個(gè)模塊。
2. 1 Wave Panel 的識(shí)別和打開(kāi)
HID 設(shè)備連接到主機(jī)后,以廠商ID(VID)。產(chǎn)品ID(PID)和產(chǎn)品版本號(hào)(PVN)三項(xiàng)屬性值的組合作為設(shè)備唯一標(biāo)識(shí).Wave Panel 的三項(xiàng)屬性值可以從產(chǎn)品說(shuō)明書(shū)直接獲取。由于一臺(tái)主機(jī)可能同時(shí)連接有多臺(tái)HID 設(shè)備,所以在通訊前應(yīng)用程序必須要識(shí)別并打開(kāi)Wave Panel,這一過(guò)程需要調(diào)用多個(gè)Windows API函數(shù)實(shí)現(xiàn)?;痉椒ㄊ鞘紫全@取當(dāng)前與主機(jī)連接的所有HID 設(shè)備信息的集合,然后逐一枚舉集合中的各設(shè)備,并比較VID.PID 和PVN 值。當(dāng)三項(xiàng)屬性值都與Wave Panel 相等時(shí)表示已經(jīng)找到,調(diào)用CreateFile()將該Wave Panel 打開(kāi),并保存Wave Panel 設(shè)備句柄。該模塊的流程如圖1 所示。