關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 基于HID協議的USB人機交互設備的接口設計

        基于HID協議的USB人機交互設備的接口設計

        作者: 時間:2010-09-15 來源:網絡 收藏

          0x09, 0x05,//用法(vendor defined)

          0x09, 0x06,//用法(vendor defined)

          0x15, 0x80,//邏輯最小值(0x80 or -128)

          0x25, 0x7F,//邏輯最大值(0x7F or 127)

          0x35, 0x00,//物理最小值(0)

          0x45,0xFF,//物理最大值(255)

          0x75,0x08,//報告長度(8位)

          0x95, 0x40,//報告數值(64 fields)

          0x91, 0x02,//輸出(data, variable, absolute)

          0xC0,//集合結束(Physical)

          0xC0//集合結束(Application)

          };

          這樣,后面數據的輸入和輸出都必須滿足報告的格式才能夠進行傳輸。


        圖4 應用程序枚舉設備流程

          3 應用程序設計實現

          Windows為應用程序訪問設備提供了強大的支持,有一整套對設備進行訪問的API。應用程序要訪問設備就必須先枚舉到設備,圖4為應用程序枚舉HID設備流程。

          枚舉成功后根據返回的設備句柄,就可以用ReadFile和WriteFile來讀寫設備的數據了。這里采用異步方式來讀寫數據,這樣不會發生讀寫時阻塞,提高了程序的效率。以下是異步方式讀寫設備的要點:

          ① 為了實現異步訪問設備,在CreateFile打開設備時必須使用FILE_FLAG_OVERLAPPED標志。

          ② 打開設備成功后,使用CreateThread建立1個讀設備線程。

          ③ 在這個線程中首先建立1個OVERLAPPED結構,并用CreateEvent函數初始化它的hEvent成員,這樣就創建了1個事件對象。

          ④ 調用ReadFile函數,并傳入這個結構。

          ⑤ 調用ReadFile后會立即返回,必須調用GetLaSTError獲得出錯碼。 如果為ERROR_IO_PENDING, 說明此操作是在等待完成的;否則,說明調用出錯。

          ⑥ 調用WaitForSingleObject等待hEvent事件的通知,并使此線程進入休眠狀態。如果有數據發送到主機,讀線程就會被激活。

          WriteFile的使用也同樣要求異步操作,與ReadFile的使用差不多。

          這里要注意的是,在每次讀寫數據前都要先接收和發送1字節的PID標志,所以每次讀寫數據的時候都要多一個字節。比如,這里每次讀寫的是64字節數據,但是在這64字節之前必須放1字節的PID數據,所以是65字節。一般這個字節的值為0。

          4 小結

          充分利用PDID12主端口的雙緩沖特性后,測試設備與PC間傳輸速度能達到8 KB/s以上,對于一些傳輸數據量不大,速度要求不高,而又必須在短時間內做出響應的場合基本能夠滿足要求。在此基礎上只要生成不同的報告描述符,就能開發出各種不同的嵌入式設備;而且這樣的設備無需驅動,在插入PC后就能立刻開始工作,省去了安裝驅動程序的過程,方便使用。


        上一頁 1 2 3 下一頁

        關鍵詞: HID USB 協議 人機交互

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 厦门市| 蒙自县| 华蓥市| 西乡县| 专栏| 页游| 揭阳市| 徐水县| 峨眉山市| 马尔康县| 且末县| 磐安县| 宝兴县| 阿拉尔市| 进贤县| 乐业县| 谢通门县| 临猗县| 迁西县| 靖远县| 印江| 鲁甸县| 谢通门县| 公安县| 松阳县| 溧阳市| 布尔津县| 金昌市| 台前县| 商都县| 阿坝县| 太和县| 长顺县| 乐清市| 水富县| 东乌珠穆沁旗| 周宁县| 雅江县| 微博| 溧水县| 江达县|