當前位置:首頁 > 電源 > 功率器件
[導讀]HID 設(shè)備研發(fā)和使用中所面臨的重要問題之一是設(shè)備與主機應(yīng)用程序的通訊.文中以視頻編輯專用HID 設(shè)備Wave Panel 為基礎(chǔ),首先簡要介紹了HID 設(shè)備的性能特點和Windows 環(huán)境下的HID 通訊機制,在此基礎(chǔ)上設(shè)計出一個實用的HID 設(shè)備通訊接口,該通訊接口利用相關(guān)Windows API 函數(shù)實現(xiàn)對HID 設(shè)備的識別.打開和關(guān)閉,并以異步模式完成設(shè)備與主機應(yīng)用程序的雙向通訊過程,最后在Wave Panel 對該接口進行了編程實驗.實驗結(jié)果證明該接口的通用性較好,能夠較好地實現(xiàn)HID 設(shè)備與主機

0 引 言

HID(Human Interface Device,人機接口設(shè)備)是一類低速USB 設(shè)備,典型的HID 設(shè)備有鍵盤.鼠標.游戲桿等.相對于U 盤.打印機等高速USB 設(shè)備,HID 設(shè)備具有使用方便.響應(yīng)迅速.研發(fā)成本低廉等優(yōu)點,其應(yīng)用領(lǐng)域十分廣泛.當前HID 設(shè)備正在向?qū)S没较蚩焖侔l(fā)展 .

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

1 Wave Panel 的性能特征

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

1)通常使用控制方式或中斷方式通訊.兩種傳輸方式的區(qū)別在于控制方式適用于對延遲沒有特別限制的數(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é).主機與HID 設(shè)備交換的數(shù)據(jù)存儲在報表(Report)結(jié)構(gòu)內(nèi) .

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

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

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

2 HID 設(shè)備的通訊過程

HID 設(shè)備是Windows 操作系統(tǒng)最早支持的USB設(shè)備.在Windows 98 及以后的各版本中都已內(nèi)置了HID 設(shè)備的驅(qū)動程序,主機與HID 設(shè)備通訊時無須再編寫專門的驅(qū)動程序.這就簡化了HID 設(shè)備與主機應(yīng)用程序通訊接口的設(shè)計和研發(fā).

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

2. 1 Wave Panel 的識別和打開

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

 

 

流程中調(diào)用的Windows API 函數(shù)和結(jié)構(gòu)體變量類型分別在hidpi. h.hidsdi. h.hidusage. h.setupapi. h 和hid. lib.setupapi. lib 幾個文件中定義并實現(xiàn) .主要包括:

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

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

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

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

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

6)SetupDiDestroyDeviceInfoList( ):銷毀設(shè)備信息集合.

2. 2 讀報表

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

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

由于Wave Panel 可能在任何時候與主機以中斷方式進行通訊,因此應(yīng)用程序需要維護一個異步調(diào)用的讀報表線程.該線程在Wave Panel 沒有向主機輸入數(shù)據(jù)時阻塞,以減輕系統(tǒng)負載.當有數(shù)據(jù)輸入時,線程恢復(fù)運行,調(diào)用ReadFile()將輸入數(shù)據(jù)保存在緩沖區(qū)中,并對數(shù)據(jù)進行解析.這之后線程將再次被阻塞,直到有新的輸入數(shù)據(jù)到來.應(yīng)用程序在Wave Panel成功打開后就創(chuàng)建讀報表線程,應(yīng)用程序運行結(jié)束前該線程將一直存在.讀報表流程如圖2 所示.[!--empirenews.page--]

 

 

2. 3 寫報表

與讀報表相反,寫報表是指主機向HID 設(shè)備輸出數(shù)據(jù).寫報表對延遲的要求較高,但這一功能不是必需的,根據(jù)HID 設(shè)備的實際用途而定 .鼠標.鍵盤.游戲桿等較簡單的設(shè)備只向主機發(fā)送數(shù)據(jù),這些數(shù)據(jù)通常是一些控制信息和狀態(tài)信息 ,例如改變HID 設(shè)備液晶屏上的顯示信息.控制設(shè)備上發(fā)光元件的亮滅等.

應(yīng)用程序的寫報表線程流程與讀報表線程類似,首先將要輸出的數(shù)據(jù)按Wave Panel 規(guī)定的數(shù)據(jù)格式進行封裝,復(fù)制到一個緩沖區(qū)內(nèi),再調(diào)用WriteFile()將緩沖區(qū)數(shù)據(jù)輸出到Wave Panel 即可,這些信息主要是與視頻幀狀態(tài)變化相關(guān)的信息.

2. 4 設(shè)備關(guān)閉

設(shè)備關(guān)閉模塊功能比較簡單.當主機與WavePanel 的通訊結(jié)束時,調(diào)用CloseHandle( ) 將打開的Wave Panel 關(guān)閉即可.

3 Wave Panel 通訊接口的設(shè)計

以上述通訊過程為基礎(chǔ),設(shè)計一個名為CHid-Comm 的通訊接口,其總體框架為:

 

 

其中,成員函數(shù)OpenDevice()和CloseDevice()分別用于識別.打開和關(guān)閉Wave Panel.ReadReport-Thread()用于創(chuàng)建讀報表線程.由于線程為異步方式執(zhí)行,因此ReadReportThread( ) 在調(diào)用ReadFile( ) 時要使用一個OVERLAPPED 結(jié)構(gòu)變量,該變量含有一個I/ O 完成后觸發(fā)事件的句柄.當HID 設(shè)備沒有向主機輸入數(shù)據(jù)時,事件處于無信號狀態(tài),線程被阻塞;當有數(shù)據(jù)輸入時,事件被觸發(fā),線程恢復(fù)運行,接收并將數(shù)據(jù)保存在讀報表緩沖區(qū),供數(shù)據(jù)解析函數(shù)使用.WriteReportThread()與ReadReportThread( ) 的功能類似,用于創(chuàng)建寫報表線程.

成員變量VID.PID 和PVN 用于保存三項屬性值,ReadBuffer 和WriteBuffer 分別定義讀報表緩沖區(qū)和寫報表緩沖區(qū),其大小由HID 設(shè)備的輸入報表和輸出報表長度決定.S 實際上,該接口不僅可以用于WavePanel,同樣也適用于其它HID 設(shè)備.只需要重新設(shè)置VID.PID 和PVN 值以及ReadBuffer.WriteBuffer 緩沖區(qū)的大小,而無須對識別.打開.讀寫報表等功能進行修改.

圖3 是主機應(yīng)用程序調(diào)用CHidComm 接口實現(xiàn)與Wave Panel 通訊的情況.以十六進制形式輸出讀報表緩沖區(qū)的值,并顯示控制器狀態(tài)變化情況.需要注意的一個重要問題是Wave Panel 輸入報表并不使用報表ID,在這種情況下應(yīng)將讀報表緩沖區(qū)ReadBuffer 的第0 字節(jié)設(shè)置為0×00,否則讀報表線程將無法接收到輸入報表.

 

 

4 結(jié)束語

Wave Panel 是一類較復(fù)雜的視頻編輯HID 設(shè)備,沒有提供Windows 環(huán)境下的通訊功能.基于WavePanel 對Windows 環(huán)境下的HID 設(shè)備通訊進行研究,能夠解決許多UNIX.Linux.Mac 等操作系統(tǒng)支持的專用HID 設(shè)備無法在Windows 環(huán)境下使用的問題.較之現(xiàn)有的一些解決方案,設(shè)計的CHidComm 接口具有較強的通用性,并可以方便地對功能進行擴展.今后的工作主要是擴展該接口在64 位Windows 環(huán)境下的功能.

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉