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

          關(guān) 閉

          新聞中心

          EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 基于HID協(xié)議的USB人機(jī)交互設(shè)備的接口設(shè)計(jì)

          基于HID協(xié)議的USB人機(jī)交互設(shè)備的接口設(shè)計(jì)

          作者: 時(shí)間:2010-09-15 來(lái)源:網(wǎng)絡(luò) 收藏

            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,//報(bào)告長(zhǎng)度(8位)

            0x95, 0x40,//報(bào)告數(shù)值(64 fields)

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

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

            0xC0//集合結(jié)束(Application)

            };

            這樣,后面數(shù)據(jù)的輸入和輸出都必須滿足報(bào)告的格式才能夠進(jìn)行傳輸。


          圖4 應(yīng)用程序枚舉設(shè)備流程

            3 應(yīng)用程序設(shè)計(jì)實(shí)現(xiàn)

            Windows為應(yīng)用程序訪問(wèn)設(shè)備提供了強(qiáng)大的支持,有一整套對(duì)設(shè)備進(jìn)行訪問(wèn)的API。應(yīng)用程序要訪問(wèn)設(shè)備就必須先枚舉到設(shè)備,圖4為應(yīng)用程序枚舉HID設(shè)備流程。

            枚舉成功后根據(jù)返回的設(shè)備句柄,就可以用ReadFile和WriteFile來(lái)讀寫設(shè)備的數(shù)據(jù)了。這里采用異步方式來(lái)讀寫數(shù)據(jù),這樣不會(huì)發(fā)生讀寫時(shí)阻塞,提高了程序的效率。以下是異步方式讀寫設(shè)備的要點(diǎn):

           ?、?為了實(shí)現(xiàn)異步訪問(wèn)設(shè)備,在CreateFile打開(kāi)設(shè)備時(shí)必須使用FILE_FLAG_OVERLAPPED標(biāo)志。

           ?、?打開(kāi)設(shè)備成功后,使用CreateThread建立1個(gè)讀設(shè)備線程。

           ?、?在這個(gè)線程中首先建立1個(gè)OVERLAPPED結(jié)構(gòu),并用CreateEvent函數(shù)初始化它的hEvent成員,這樣就創(chuàng)建了1個(gè)事件對(duì)象。

           ?、?調(diào)用ReadFile函數(shù),并傳入這個(gè)結(jié)構(gòu)。

           ?、?調(diào)用ReadFile后會(huì)立即返回,必須調(diào)用GetLaSTError獲得出錯(cuò)碼。 如果為ERROR_IO_PENDING, 說(shuō)明此操作是在等待完成的;否則,說(shuō)明調(diào)用出錯(cuò)。

            ⑥ 調(diào)用WaitForSingleObject等待hEvent事件的通知,并使此線程進(jìn)入休眠狀態(tài)。如果有數(shù)據(jù)發(fā)送到主機(jī),讀線程就會(huì)被激活。

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

            這里要注意的是,在每次讀寫數(shù)據(jù)前都要先接收和發(fā)送1字節(jié)的PID標(biāo)志,所以每次讀寫數(shù)據(jù)的時(shí)候都要多一個(gè)字節(jié)。比如,這里每次讀寫的是64字節(jié)數(shù)據(jù),但是在這64字節(jié)之前必須放1字節(jié)的PID數(shù)據(jù),所以是65字節(jié)。一般這個(gè)字節(jié)的值為0。

            4 小結(jié)

            充分利用PDID12主端口的雙緩沖特性后,測(cè)試設(shè)備與PC間傳輸速度能達(dá)到8 KB/s以上,對(duì)于一些傳輸數(shù)據(jù)量不大,速度要求不高,而又必須在短時(shí)間內(nèi)做出響應(yīng)的場(chǎng)合基本能夠滿足要求。在此基礎(chǔ)上只要生成不同的報(bào)告描述符,就能開(kāi)發(fā)出各種不同的嵌入式設(shè)備;而且這樣的設(shè)備無(wú)需驅(qū)動(dòng),在插入PC后就能立刻開(kāi)始工作,省去了安裝驅(qū)動(dòng)程序的過(guò)程,方便使用。


          上一頁(yè) 1 2 3 下一頁(yè)

          關(guān)鍵詞: HID USB 協(xié)議 人機(jī)交互

          評(píng)論


          相關(guān)推薦

          技術(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); })();