• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      專用型低速USB設(shè)備通訊模塊的研究

      2016-10-22 00:43:39崔陽
      現(xiàn)代計(jì)算機(jī) 2016年25期
      關(guān)鍵詞:專用型輪詢緩沖區(qū)

      崔陽

      (中國(guó)勞動(dòng)關(guān)系學(xué)院數(shù)學(xué)與計(jì)算機(jī)部,北京100048)

      專用型低速USB設(shè)備通訊模塊的研究

      崔陽

      (中國(guó)勞動(dòng)關(guān)系學(xué)院數(shù)學(xué)與計(jì)算機(jī)部,北京100048)

      目前大量專用型低速USB設(shè)備僅能在特定操作系統(tǒng)或軟件環(huán)境中識(shí)別和使用,給實(shí)際工作帶來很大限制。首先簡(jiǎn)單分析低速USB設(shè)備的性能特點(diǎn)及通訊原理,在此基礎(chǔ)上設(shè)計(jì)出一個(gè)低速USB設(shè)備通訊模塊,并在Tangent Devices的Wave控制臺(tái)上進(jìn)行編程實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果證明模塊能夠較好地實(shí)現(xiàn)專用型低速USB設(shè)備在不同操作系統(tǒng)和軟件環(huán)境下的雙向通訊。

      低速USB設(shè)備;輸入輸出報(bào)表;中斷;Windows API

      0 引言

      低速USB設(shè)備近年來得到了廣泛應(yīng)用,這類設(shè)備主要指游戲手柄、USB鍵盤、鼠標(biāo)等單次數(shù)據(jù)傳輸量在8~1024字節(jié)之間的USB設(shè)備,又稱HID(人機(jī)接口設(shè)備)[1]。

      專用化是低速USB設(shè)備的發(fā)展趨勢(shì)之一。當(dāng)前很多應(yīng)用軟件系統(tǒng)為增強(qiáng)用戶體驗(yàn)、提高操作速度都配備有專用低速USB設(shè)備。然而多數(shù)專用型USB設(shè)備因設(shè)計(jì)等原因,通常只針對(duì)并僅能局限在某一特定軟件環(huán)境下使用,更無法實(shí)現(xiàn)跨操作系統(tǒng)平臺(tái)移植,這就給實(shí)際工作造成了許多不便。因此,通過對(duì)專用型低速USB設(shè)備的通訊特點(diǎn)和機(jī)制進(jìn)行研究,并設(shè)計(jì)出一個(gè)功能完備、通用性強(qiáng)、效率較高的通訊模塊就非常有必要。

      1 低速USB設(shè)備的主要特點(diǎn)

      低速USB設(shè)備的特點(diǎn)主要有以下幾方面:

      (1)傳輸?shù)臄?shù)據(jù)多為狀態(tài)或控制信息,這些信息都保存在輸入輸出報(bào)表(I/O Report)結(jié)構(gòu)體內(nèi)。低速USB設(shè)備通過報(bào)表與主機(jī)軟件系統(tǒng)進(jìn)行數(shù)據(jù)交互[2]。

      (2)以輪詢形式檢測(cè)設(shè)備狀態(tài)變化情況。低速USB設(shè)備會(huì)在一個(gè)固定的時(shí)間間隔內(nèi)輪詢各控制口一次,檢測(cè)用戶通過設(shè)備向主機(jī)發(fā)送的數(shù)據(jù),并以報(bào)表形式發(fā)送。

      (3)通訊方式通常為控制和中斷兩種。區(qū)別在于前者對(duì)延遲性沒有特別要求,而后者對(duì)延遲容忍度低,且數(shù)據(jù)多具有周期性特征[3]。

      2 USB設(shè)備的通信機(jī)制

      2.1設(shè)備識(shí)別和打開

      VID、PID和PVN三個(gè)屬性值是低速USB設(shè)備在計(jì)算機(jī)內(nèi)的唯一標(biāo)識(shí)[4],在設(shè)備說明書中可查。軟件系統(tǒng)在通訊前的第一步工作就是識(shí)別出特定的USB設(shè)備。方法是首先獲取并逐一枚舉當(dāng)前主機(jī)中連接的各USB設(shè)備信息,并提取三個(gè)屬性值與特定的USB設(shè)備進(jìn)行比較,當(dāng)符合時(shí)表示設(shè)備找到。這時(shí)再將設(shè)備打開,并向軟件系統(tǒng)傳回設(shè)備的句柄。

      2.2數(shù)據(jù)輸入和輸出

      低速USB設(shè)備和主機(jī)軟件系統(tǒng)間數(shù)據(jù)交互通過輸入輸出報(bào)表實(shí)現(xiàn)。每當(dāng)設(shè)備上任意控制器狀態(tài)發(fā)生變化,都將在下一次輪詢時(shí)根據(jù)這些變化的數(shù)據(jù)值生成一個(gè)輸入報(bào)表發(fā)送給主機(jī)。軟件系統(tǒng)接收輸入報(bào)表后首先檢查報(bào)表ID值,然后按照?qǐng)?bào)表結(jié)構(gòu)體的定義格式對(duì)數(shù)據(jù)進(jìn)行解析并做相應(yīng)處理。有些專用型低速USB設(shè)備的輸入報(bào)表沒有定義報(bào)表ID值,這種情況下應(yīng)將接收到的輸入報(bào)表的ID值直接設(shè)置為0x00,否則輸入報(bào)表線程無法解析數(shù)據(jù)。

      數(shù)據(jù)輸入過程中一個(gè)要特別注意的問題是:由于低速USB設(shè)備與主機(jī)的通訊時(shí)間不固定,在軟件系統(tǒng)運(yùn)行期間負(fù)責(zé)讀取輸入報(bào)表的線程必須要以異步方式調(diào)用。這樣該線程在設(shè)備沒有向主機(jī)輸入數(shù)據(jù)時(shí)將阻塞;當(dāng)有輸入報(bào)表到來時(shí)線程再恢復(fù)運(yùn)行,將輸入報(bào)表中的數(shù)據(jù)保存在緩沖區(qū)中。之后線程將再次被阻塞,直到有新的輸入報(bào)表到來,從而有效減輕主機(jī)負(fù)載。設(shè)備成功打開后該線程就被創(chuàng)建,并隨軟件系統(tǒng)運(yùn)行結(jié)束而銷毀。流程如圖2所示。

      數(shù)據(jù)輸出是通過輸出報(bào)表實(shí)現(xiàn)的,但并非所有的USB設(shè)備都必備這一功能。主機(jī)軟件系統(tǒng)可能會(huì)向?qū)S眯偷退賃SB設(shè)備輸出一些控制或狀態(tài)數(shù)據(jù)用來對(duì)設(shè)備進(jìn)行監(jiān)控[5],例如設(shè)備液晶屏上的顯示信息等。這些數(shù)據(jù)必須同步顯示,因此要求低延遲[6]。讀取輸出報(bào)表的線程首先將要輸出的數(shù)據(jù)按設(shè)備規(guī)定的報(bào)表結(jié)構(gòu)格式進(jìn)行封裝并復(fù)制到一個(gè)緩沖區(qū)內(nèi),再將緩沖區(qū)數(shù)據(jù)輸出到設(shè)備。這一過程同樣需要考慮主機(jī)的負(fù)載情況。

      2.3設(shè)備關(guān)閉

      當(dāng)軟件系統(tǒng)與低速USB設(shè)備的通訊結(jié)束時(shí),將設(shè)備直接關(guān)閉即可。如果軟件系統(tǒng)沒有及時(shí)關(guān)閉設(shè)備,可能會(huì)在下次打開設(shè)備時(shí)遇到報(bào)錯(cuò)。

      3 通訊模塊設(shè)計(jì)

      以上述通訊原理為基礎(chǔ),設(shè)計(jì)一個(gè)名為CUSBComModule的通訊模塊,其總體結(jié)構(gòu)為:

      其中,成員函數(shù)OpenUSBDevice()和CloseUSBDevice()分別用于識(shí)別、打開和關(guān)閉設(shè)備。ReadReport-TableThread()用于創(chuàng)建輸入報(bào)表線程。該線程中含有一個(gè)I/O完成后觸發(fā)事件的句柄。當(dāng)設(shè)備沒有向主機(jī)輸入數(shù)據(jù)時(shí),事件處于無信號(hào)狀態(tài),線程被阻塞;當(dāng)有數(shù)據(jù)輸入時(shí)事件被觸發(fā)線程恢復(fù)運(yùn)行,將數(shù)據(jù)保存在輸入報(bào)表緩沖區(qū)。WriteReportTableThread()與Read-ReportTableThread()類似,用于創(chuàng)建輸出報(bào)表線程。

      成員變量VID、PID和PVN用于保存三項(xiàng)屬性值,由用戶輸入。ReadBuffer和WriteBuffer分別是輸入報(bào)表緩沖區(qū)和輸出報(bào)表緩沖區(qū)。緩沖區(qū)大小由設(shè)備的輸入報(bào)表和輸出報(bào)表長(zhǎng)度決定。該模塊的特點(diǎn)在于:實(shí)際應(yīng)用中可以根據(jù)不同的低速USB設(shè)備,設(shè)置其對(duì)應(yīng)的VID、PID和PVN值以及ReadReportBuffer和WriteReportBuffer緩沖區(qū)的大小;而設(shè)備的識(shí)別、打開、輸入/輸出數(shù)據(jù)等功能都無需修改。這樣就保證了模塊具有較強(qiáng)的通用性。

      4 實(shí)驗(yàn)

      實(shí)驗(yàn)環(huán)境為Windows 8操作系統(tǒng),開發(fā)平臺(tái)為Visual Studio 2012,選用的低速USB設(shè)備為Tangent Devices的Wave Console。Tangent Wave Console是一類較復(fù)雜的專用型USB設(shè)備,設(shè)有41個(gè)按鍵、13個(gè)旋鈕和3個(gè)二維滾動(dòng)跟蹤球三類控制器,另有3個(gè)微型液晶屏。Tangent Wave Console輸入報(bào)表長(zhǎng)度是27字節(jié),各字節(jié)的分配是0字節(jié)記錄報(bào)表ID,1-6字節(jié)前41比特記錄各按鍵的狀態(tài),另有7比特未用,7-19字節(jié)記錄各旋鈕的狀態(tài);20-25字節(jié)分別記錄三個(gè)二維滾動(dòng)跟蹤球X軸和Y軸的狀態(tài);26字節(jié)留作固件升級(jí)。輸出報(bào)表長(zhǎng)度是41字節(jié),各字節(jié)的分配是0-5字節(jié)為輸出控制信息,6-40字節(jié)為液晶屏顯示信息。Tangent Wave Console的數(shù)據(jù)傳輸方式為中斷方式,輪詢間隔時(shí)間為40ms。

      在Windows環(huán)境下,通訊模塊的OpenUSBDevice()和CloseUSBDevice()功能可以通過調(diào)用相關(guān)API函數(shù)實(shí)現(xiàn)。為保證模塊在不同操作系統(tǒng)和軟件系統(tǒng)下的通用性,將模塊以COM接口形式實(shí)現(xiàn)。這樣當(dāng)某一軟件系統(tǒng)需要接入某一專用型低速USB設(shè)備時(shí),只須在系統(tǒng)中調(diào)用這一接口即可。

      圖1 Tangent Wave Console與主機(jī)的通訊

      圖1給出的是模擬主機(jī)軟件系統(tǒng)調(diào)用CUSBCom-Module實(shí)現(xiàn)與Tangent Wave Console雙向通訊的運(yùn)行界面。從圖中可以看到,當(dāng)用戶在界面中輸入設(shè)備三項(xiàng)屬性值并點(diǎn)擊“打開設(shè)備”后,軟件系統(tǒng)將根據(jù)屬性值完成對(duì)Tangent Wave Console的識(shí)別和打開工作。之后就可以對(duì)輸入、輸出報(bào)表的值進(jìn)行讀取和解析,并可以在液晶屏上將本次輪詢內(nèi)狀態(tài)發(fā)生變動(dòng)的控制器信息同步顯示出來。當(dāng)軟件系統(tǒng)對(duì)各個(gè)控制器定義對(duì)應(yīng)的消息響應(yīng)函數(shù)后,即可操縱Tangent Wave Console完成實(shí)際工作。

      5 結(jié)語

      提高專用型低速USB設(shè)備的通用性對(duì)科研和實(shí)際工作具有較大應(yīng)用價(jià)值。通過Tangent Wave Console控制臺(tái)上進(jìn)行的編程實(shí)驗(yàn)表明CUSBComModule模塊具有較強(qiáng)的通用性,且基本不對(duì)軟件系統(tǒng)的運(yùn)行效率造成影響。今后的工作主要是進(jìn)一步擴(kuò)展該接口的各項(xiàng)功能。

      [1]Device Class Definition for Human Interface[EB/OL].http://www.usb.org/developers/devclass_docs/HID1_11.pdf,2001.

      [2]楊晶菁,張浩.基于USB3.0的圖像采集系統(tǒng)硬件設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2014,33(17):40-43.

      [3]湯重陽,趙志文,韓欽亭等.Windows環(huán)境下USB設(shè)備監(jiān)控技術(shù)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2014,34(S1):60-63.

      [4]索曉杰,翟正軍,姜紅梅.USB3.0協(xié)議分析與框架設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2012,20(8):2233-2235.

      [5]王繼剛,鄭維民,滕志猛,鐘衛(wèi)東.虛擬化環(huán)境下的USB設(shè)備訪問方法[J].計(jì)算機(jī)應(yīng)用,2011,31(5):1439-1442.

      [6]楊強(qiáng),王志斌,李曉,張敏娟.Linux中USB設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)及其應(yīng)用[J].濟(jì)南大學(xué)學(xué)報(bào)(自然科學(xué)版),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:

      中央高?;究蒲袠I(yè)務(wù)費(fèi)專項(xiàng)資金資助項(xiàng)目(No.12zy019)

      1007-1423(2016)25-0063-03DOI:10.3969/j.issn.1007-1423.2016.25.014

      崔陽(1979-),男,內(nèi)蒙古呼和浩特市人,博士研究生,講師,研究方向?yàn)橹R(shí)工程與知識(shí)發(fā)現(xiàn)

      2016-05-10

      2016-08-25

      猜你喜歡
      專用型輪詢緩沖區(qū)
      嵌入式系統(tǒng)環(huán)形緩沖區(qū)快速讀寫方法的設(shè)計(jì)與實(shí)現(xiàn)
      安徽設(shè)施草莓專用型品種比較試驗(yàn)
      征聯(lián)對(duì)評(píng)指要和鼓呼報(bào)慶
      連城縣專用型甘薯新品種引進(jìn)鑒定試驗(yàn)
      基于等概率的ASON業(yè)務(wù)授權(quán)設(shè)計(jì)?
      依托站點(diǎn)狀態(tài)的兩級(jí)輪詢控制系統(tǒng)時(shí)延特性分析
      高端專用型淤漿工藝聚乙烯催化劑媲美進(jìn)口
      利用時(shí)間輪詢方式操作DDR3實(shí)現(xiàn)多模式下數(shù)據(jù)重排
      關(guān)鍵鏈技術(shù)緩沖區(qū)的確定方法研究
      地理信息系統(tǒng)繪圖緩沖區(qū)技術(shù)設(shè)計(jì)與實(shí)現(xiàn)
      马关县| 合水县| 中超| 阿城市| 新昌县| 营口市| 贵德县| 洛阳市| 南投县| 遂平县| 洞口县| 湖州市| 弥渡县| 武川县| 光山县| 双流县| 高台县| 珲春市| 堆龙德庆县| 龙海市| 五华县| 许昌市| 如东县| 芦溪县| 汉川市| 龙泉市| 利津县| 宁阳县| 屯留县| 青铜峡市| 娱乐| 银川市| 镇坪县| 镇远县| 奉节县| 唐河县| 阿巴嘎旗| 藁城市| 伊吾县| 苏尼特左旗| 双江|