<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于Wave Panel的HID設(shè)備通訊接口設(shè)計(jì)

          基于Wave Panel的HID設(shè)備通訊接口設(shè)計(jì)

          作者: 時(shí)間:2016-12-20 來源:網(wǎng)絡(luò) 收藏

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

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

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

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

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

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

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

            2. 2 讀報(bào)表

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

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

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

            

            2. 3 寫報(bào)表

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

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

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

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

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

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

            

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

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

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

            

            4 結(jié)束語

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


          上一頁 1 2 下一頁

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();