崔陽
(中國勞動關系學院數學與計算機部,北京100048)
專用型低速USB設備通訊模塊的研究
崔陽
(中國勞動關系學院數學與計算機部,北京100048)
目前大量專用型低速USB設備僅能在特定操作系統或軟件環境中識別和使用,給實際工作帶來很大限制。首先簡單分析低速USB設備的性能特點及通訊原理,在此基礎上設計出一個低速USB設備通訊模塊,并在Tangent Devices的Wave控制臺上進行編程實驗。實驗結果證明模塊能夠較好地實現專用型低速USB設備在不同操作系統和軟件環境下的雙向通訊。
低速USB設備;輸入輸出報表;中斷;Windows API
低速USB設備近年來得到了廣泛應用,這類設備主要指游戲手柄、USB鍵盤、鼠標等單次數據傳輸量在8~1024字節之間的USB設備,又稱HID(人機接口設備)[1]。
專用化是低速USB設備的發展趨勢之一。當前很多應用軟件系統為增強用戶體驗、提高操作速度都配備有專用低速USB設備。然而多數專用型USB設備因設計等原因,通常只針對并僅能局限在某一特定軟件環境下使用,更無法實現跨操作系統平臺移植,這就給實際工作造成了許多不便。因此,通過對專用型低速USB設備的通訊特點和機制進行研究,并設計出一個功能完備、通用性強、效率較高的通訊模塊就非常有必要。
低速USB設備的特點主要有以下幾方面:
(1)傳輸的數據多為狀態或控制信息,這些信息都保存在輸入輸出報表(I/O Report)結構體內。低速USB設備通過報表與主機軟件系統進行數據交互[2]。
(2)以輪詢形式檢測設備狀態變化情況。低速USB設備會在一個固定的時間間隔內輪詢各控制口一次,檢測用戶通過設備向主機發送的數據,并以報表形式發送。
(3)通訊方式通常為控制和中斷兩種。區別在于前者對延遲性沒有特別要求,而后者對延遲容忍度低,且數據多具有周期性特征[3]。
2.1設備識別和打開
VID、PID和PVN三個屬性值是低速USB設備在計算機內的唯一標識[4],在設備說明書中可查。軟件系統在通訊前的第一步工作就是識別出特定的USB設備。方法是首先獲取并逐一枚舉當前主機中連接的各USB設備信息,并提取三個屬性值與特定的USB設備進行比較,當符合時表示設備找到。這時再將設備打開,并向軟件系統傳回設備的句柄。
2.2數據輸入和輸出
低速USB設備和主機軟件系統間數據交互通過輸入輸出報表實現。每當設備上任意控制器狀態發生變化,都將在下一次輪詢時根據這些變化的數據值生成一個輸入報表發送給主機。軟件系統接收輸入報表后首先檢查報表ID值,然后按照報表結構體的定義格式對數據進行解析并做相應處理。有些專用型低速USB設備的輸入報表沒有定義報表ID值,這種情況下應將接收到的輸入報表的ID值直接設置為0x00,否則輸入報表線程無法解析數據。
數據輸入過程中一個要特別注意的問題是:由于低速USB設備與主機的通訊時間不固定,在軟件系統運行期間負責讀取輸入報表的線程必須要以異步方式調用。這樣該線程在設備沒有向主機輸入數據時將阻塞;當有輸入報表到來時線程再恢復運行,將輸入報表中的數據保存在緩沖區中。之后線程將再次被阻塞,直到有新的輸入報表到來,從而有效減輕主機負載。設備成功打開后該線程就被創建,并隨軟件系統運行結束而銷毀。流程如圖2所示。
數據輸出是通過輸出報表實現的,但并非所有的USB設備都必備這一功能。主機軟件系統可能會向專用型低速USB設備輸出一些控制或狀態數據用來對設備進行監控[5],例如設備液晶屏上的顯示信息等。這些數據必須同步顯示,因此要求低延遲[6]。讀取輸出報表的線程首先將要輸出的數據按設備規定的報表結構格式進行封裝并復制到一個緩沖區內,再將緩沖區數據輸出到設備。這一過程同樣需要考慮主機的負載情況。
2.3設備關閉
當軟件系統與低速USB設備的通訊結束時,將設備直接關閉即可。如果軟件系統沒有及時關閉設備,可能會在下次打開設備時遇到報錯。
以上述通訊原理為基礎,設計一個名為CUSBComModule的通訊模塊,其總體結構為:


其中,成員函數OpenUSBDevice()和CloseUSBDevice()分別用于識別、打開和關閉設備。ReadReport-TableThread()用于創建輸入報表線程。該線程中含有一個I/O完成后觸發事件的句柄。當設備沒有向主機輸入數據時,事件處于無信號狀態,線程被阻塞;當有數據輸入時事件被觸發線程恢復運行,將數據保存在輸入報表緩沖區。WriteReportTableThread()與Read-ReportTableThread()類似,用于創建輸出報表線程。
成員變量VID、PID和PVN用于保存三項屬性值,由用戶輸入。ReadBuffer和WriteBuffer分別是輸入報表緩沖區和輸出報表緩沖區。緩沖區大小由設備的輸入報表和輸出報表長度決定。該模塊的特點在于:實際應用中可以根據不同的低速USB設備,設置其對應的VID、PID和PVN值以及ReadReportBuffer和WriteReportBuffer緩沖區的大小;而設備的識別、打開、輸入/輸出數據等功能都無需修改。這樣就保證了模塊具有較強的通用性。
實驗環境為Windows 8操作系統,開發平臺為Visual Studio 2012,選用的低速USB設備為Tangent Devices的Wave Console。Tangent Wave Console是一類較復雜的專用型USB設備,設有41個按鍵、13個旋鈕和3個二維滾動跟蹤球三類控制器,另有3個微型液晶屏。Tangent Wave Console輸入報表長度是27字節,各字節的分配是0字節記錄報表ID,1-6字節前41比特記錄各按鍵的狀態,另有7比特未用,7-19字節記錄各旋鈕的狀態;20-25字節分別記錄三個二維滾動跟蹤球X軸和Y軸的狀態;26字節留作固件升級。輸出報表長度是41字節,各字節的分配是0-5字節為輸出控制信息,6-40字節為液晶屏顯示信息。Tangent Wave Console的數據傳輸方式為中斷方式,輪詢間隔時間為40ms。
在Windows環境下,通訊模塊的OpenUSBDevice()和CloseUSBDevice()功能可以通過調用相關API函數實現。為保證模塊在不同操作系統和軟件系統下的通用性,將模塊以COM接口形式實現。這樣當某一軟件系統需要接入某一專用型低速USB設備時,只須在系統中調用這一接口即可。

圖1 Tangent Wave Console與主機的通訊
圖1給出的是模擬主機軟件系統調用CUSBCom-Module實現與Tangent Wave Console雙向通訊的運行界面。從圖中可以看到,當用戶在界面中輸入設備三項屬性值并點擊“打開設備”后,軟件系統將根據屬性值完成對Tangent Wave Console的識別和打開工作。之后就可以對輸入、輸出報表的值進行讀取和解析,并可以在液晶屏上將本次輪詢內狀態發生變動的控制器信息同步顯示出來。當軟件系統對各個控制器定義對應的消息響應函數后,即可操縱Tangent Wave Console完成實際工作。
提高專用型低速USB設備的通用性對科研和實際工作具有較大應用價值。通過Tangent Wave Console控制臺上進行的編程實驗表明CUSBComModule模塊具有較強的通用性,且基本不對軟件系統的運行效率造成影響。今后的工作主要是進一步擴展該接口的各項功能。
[1]Device Class Definition for Human Interface[EB/OL].http://www.usb.org/developers/devclass_docs/HID1_11.pdf,2001.
[2]楊晶菁,張浩.基于USB3.0的圖像采集系統硬件設計[J].微型機與應用,2014,33(17):40-43.
[3]湯重陽,趙志文,韓欽亭等.Windows環境下USB設備監控技術的研究與實現[J].計算機應用,2014,34(S1):60-63.
[4]索曉杰,翟正軍,姜紅梅.USB3.0協議分析與框架設計[J].計算機測量與控制,2012,20(8):2233-2235.
[5]王繼剛,鄭維民,滕志猛,鐘衛東.虛擬化環境下的USB設備訪問方法[J].計算機應用,2011,31(5):1439-1442.
[6]楊強,王志斌,李曉,張敏娟.Linux中USB設備驅動程序的設計及其應用[J].濟南大學學報(自然科學版),2014.28(3):224-229.
Low-Speed USB Device;I/O Reports;Interrupt;Windows API
Research on Communication Module of Special Low-Speed USB Devices
CUI Yang
(Department of Mathematics and Computer,China Institute of Industrial Relations,Beijing 100048)
Many special low-speed USB devices can only be identified and used in a specific operating system or software environment,which may cause some difficulties for practical work.Introduces the characteristics and communication mechanism of low-speed USB devices,based on it,designs a module for low-speed USB devices,and programs on Tangent Wave Console.Results show that the module can better achieve the two-way communication function of special low-speed USB devices in different operating systems and software environments. Keywords:
中央高校基本科研業務費專項資金資助項目(No.12zy019)
1007-1423(2016)25-0063-03DOI:10.3969/j.issn.1007-1423.2016.25.014
崔陽(1979-),男,內蒙古呼和浩特市人,博士研究生,講師,研究方向為知識工程與知識發現
2016-05-10
2016-08-25