新聞中心

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

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

        作者: 時間:2013-07-10 來源:網絡 收藏

        2. 3 寫報表

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

        應用程序的寫報表線程流程與讀報表線程類似,首先將要輸出的數據按Wave Panel 規定的數據格式進行封裝,復制到一個緩沖區內,再調用WriteFile()將緩沖區數據輸出到Wave Panel 即可,這些信息主要是與幀狀態變化相關的信息.

        2. 4 設備關閉

        設備關閉模塊功能比較簡單.當主機與WavePanel 的通訊結束時,調用CloseHandle( ) 將打開的Wave Panel 關閉即可.

        3 Wave Panel 通訊接口的設計

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

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

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

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

        4 結束語

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


        上一頁 1 2 下一頁

        關鍵詞: 控制器 視頻

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 平远县| 兰州市| 扎赉特旗| 彭州市| 阜新市| 迭部县| 阿克苏市| 枞阳县| 葫芦岛市| 山阳县| 瓦房店市| 柳州市| 重庆市| 锡林郭勒盟| 公主岭市| 来凤县| 许昌市| 连城县| 浙江省| 通海县| 沙坪坝区| 永仁县| 社旗县| 奈曼旗| 平凉市| 通许县| 阳城县| 玉溪市| 阜新市| 仁化县| 沿河| 渝北区| 长白| 修武县| 中江县| 神池县| 射阳县| 龙口市| 大余县| 桃江县| 元氏县|