<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 電源與新能源 > 設計應用 > 基于Wave Panel 的HID 設備通訊接口設計

基于Wave Panel 的HID 設備通訊接口設計

作者: 時(shí)間:2013-07-10 來(lái)源:網(wǎng)絡(luò ) 收藏

0 引 言

本文引用地址:http://dyxdggzs.com/article/174978.htm

HID(Human Interface Device,人機接口設備)是一類(lèi)低速USB 設備,典型的HID 設備有鍵盤(pán).鼠標.游戲桿等.相對于U 盤(pán).打印機等高速USB 設備,HID 設備具有使用方便.響應迅速.研發(fā)成本低廉等優(yōu)點(diǎn),其應用領(lǐng)域十分廣泛.當前HID 設備正在向專(zhuān)用化方向快速發(fā)展 .

Wave Panel 是蘋(píng)果公司研發(fā)的色彩編輯軟件Color 支持一型專(zhuān)用的數據輸入和顯示HID 設備,該設備面板上設置有按鍵.解碼器和二維跟蹤球三種,能夠快捷.精確地對各類(lèi)色彩參數進(jìn)行設置,并將控制和狀態(tài)信息同步顯示在設備微型顯示屏上,從而改變了傳統“鼠標+鍵盤(pán)”的編輯軟件控制方式.Wave Panel 沒(méi)有提供Windows 環(huán)境下與應用程序通訊的功能,因此可基于Wave Panel 設計一個(gè)功能完備.通用性強的通訊接口,并加以驗證.這對企業(yè)和科研機構根據實(shí)際需求靈活地配備和控制專(zhuān)用HID 設備有很大幫助.

1 Wave Panel 的性能特征

HID 設備除滿(mǎn)足USB 標準外,還具備一些與人機交互密切相關(guān)的特點(diǎn),主要包括:

1)通常使用控制方式或中斷方式通訊.兩種傳輸方式的區別在于控制方式適用于對延遲沒(méi)有特別限制的數據,而中斷方式適用于低延遲.周期性的數據 .Wave Panel 的數據傳輸方式為中斷方式.

2)單次傳輸的數據量小,且這些數據以狀態(tài)變化信息或控制信息為主.其中低速HID 設備單次傳輸數據最大為8 字節,全速設備為64 字節,高速設備為1024 字節.主機與HID 設備交換的數據存儲在報表(Report)結構內 .

Wave Panel 的輸入報表長(cháng)度為27 字節,其中0 字節用于記錄報表ID,1 ~ 6 字節的前41 比特分別記錄41 個(gè)按鍵的按下或抬起狀態(tài),另有7 比特未用,置為0;7 ~19 字節分別記錄13 個(gè)解碼器的狀態(tài);20 ~25 字節每2 字節分別記錄一個(gè)二維跟蹤球X 軸和Y 軸的狀態(tài);26 字節留作固件升級使用.Wave Panel 的輸出報表長(cháng)度為41 字節,其中0 ~ 5 字節為控制命令,6 ~ 40字節為顯示信息的字符.

3)使用輪詢(xún)方式檢測設備狀態(tài)變化情況.HID 設備可能在任何時(shí)刻向主機發(fā)送數據,例如鼠標發(fā)生移動(dòng)或鍵盤(pán)有按鍵按下.所以HID 設備會(huì )在一個(gè)固定的時(shí)間間隔內輪詢(xún)各控制口一次,當發(fā)現設備狀態(tài)有變化時(shí)生成輸入報表發(fā)送給主機 .但輪詢(xún)的間隔時(shí)間要由用戶(hù)對HID 設備的操作速度決定.如果間隔時(shí)間過(guò)小,則用戶(hù)來(lái)不及在兩次輪詢(xún)間隔內完成一次操作;反之,又會(huì )使HID 設備的響應速度無(wú)法與用戶(hù)的操作速度匹配,造成延遲 .

Wave Panel 規定,每40 毫秒對所有端口輪詢(xún)一次,若其中任何一個(gè)的狀態(tài)在兩次輪詢(xún)間隔內發(fā)生改變,就會(huì )在下次輪詢(xún)前生成輸入報表發(fā)送給主機.40 毫秒是基于視頻每幀顯示時(shí)間而確定的.

2 HID 設備的通訊過(guò)程

HID 設備是Windows 操作系統最早支持的USB設備.在Windows 98 及以后的各版本中都已內置了HID 設備的驅動(dòng)程序,主機與HID 設備通訊時(shí)無(wú)須再編寫(xiě)專(zhuān)門(mén)的驅動(dòng)程序.這就簡(jiǎn)化了HID 設備與主機應用程序通訊接口的設計和研發(fā).

通過(guò)分析,可以將HID 設備與主機應用程序的通訊劃分為設備識別和打開(kāi).讀報表.寫(xiě)報表和設備關(guān)閉四個(gè)模塊.

2. 1 Wave Panel 的識別和打開(kāi)

HID 設備連接到主機后,以廠(chǎng)商ID(VID).產(chǎn)品ID(PID)和產(chǎn)品版本號(PVN)三項屬性值的組合作為設備唯一標識.Wave Panel 的三項屬性值可以從產(chǎn)品說(shuō)明書(shū)直接獲取.由于一臺主機可能同時(shí)連接有多臺HID 設備,所以在通訊前應用程序必須要識別并打開(kāi)Wave Panel,這一過(guò)程需要調用多個(gè)Windows API函數實(shí)現.基本方法是首先獲取當前與主機連接的所有HID 設備信息的集合,然后逐一枚舉集合中的各設備,并比較VID.PID 和PVN 值.當三項屬性值都與Wave Panel 相等時(shí)表示已經(jīng)找到,調用CreateFile()將該Wave Panel 打開(kāi),并保存Wave Panel 設備句柄.該模塊的流程如圖1 所示.

流程中調用的Windows API 函數和結構體變量類(lèi)型分別在hidpi. h.hidsdi. h.hidusage. h.setupapi. h 和hid. lib.setupapi. lib 幾個(gè)文件中定義并實(shí)現 .主要包括:

1)HidD_GetHidGuid( ):獲取HID 設備的GUID值,并保存在一個(gè)GUID 結構體變量中;

2)SetupDiGetClassDevs():根據HID 設備的GUID值獲取HID 設備信息的集合,并保存在一個(gè)HDEVINFO結構體類(lèi)型的變量中;

3)SetupDiEnumDeviceInterfaces():在設備信息集合中依次獲取編號為i(i = 0,1,…) 的設備接口信息,保存在一個(gè)SP_DEVICE_INTERFACE_DATA 結構體類(lèi)型變量中;

4)SetupDiGetDeviceInterfaceDetail():當獲取設備接口信息成功時(shí)進(jìn)一步獲取該設備的詳細信息,并保存設備路徑;

5)HidD_GetAttributes():獲取設備屬性值并保存在一個(gè)HIDD_ATTRIBUTES 結構體類(lèi)型變量中.VID.PID 和PVN 值即為該結構體變量的三項成員;

6)SetupDiDestroyDeviceInfoList( ):銷(xiāo)毀設備信息集合.

2. 2 讀報表

讀報表是指HID 設備向主機輸入數據.當WavePanel 面板上任意控制器狀態(tài)發(fā)生變化時(shí),都會(huì )在下一次輪詢(xún)時(shí)將這些數據生成輸入報表,并發(fā)送給主機.

主機上的應用程序接收輸入報表并對數據進(jìn)行解析,然后做出相應的處理.

由于Wave Panel 可能在任何時(shí)候與主機以中斷方式進(jìn)行通訊,因此應用程序需要維護一個(gè)異步調用的讀報表線(xiàn)程.該線(xiàn)程在Wave Panel 沒(méi)有向主機輸入數據時(shí)阻塞,以減輕系統負載.當有數據輸入時(shí),線(xiàn)程恢復運行,調用ReadFile()將輸入數據保存在緩沖區中,并對數據進(jìn)行解析.這之后線(xiàn)程將再次被阻塞,直到有新的輸入數據到來(lái).應用程序在Wave Panel成功打開(kāi)后就創(chuàng )建讀報表線(xiàn)程,應用程序運行結束前該線(xiàn)程將一直存在.讀報表流程如圖2 所示.


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 控制器 視頻

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>