基于HID類的USB人機(jī)接口設(shè)計_第1頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、基于hid類的usb人機(jī)接口設(shè)計目前市場上設(shè)備的種類繁多,但是這些設(shè)備會有一些共同的特性,按照這些特性可以把usb設(shè)備劃分為不同的類,如顯示設(shè)備、通信設(shè)備、音頻設(shè)備、大容量存儲設(shè)備、人機(jī)接口設(shè)備(hid)。這里介紹如何實(shí)現(xiàn)hid類設(shè)備,以及如何在應(yīng)用程序中對hid類設(shè)備舉行拜訪。從windows98操作系統(tǒng)開頭,為hid類設(shè)備提供了通用的驅(qū)動程序,所以只要根據(jù)hid設(shè)備類的規(guī)范編寫設(shè)備的固件程序,就能夠讓windows系統(tǒng)自動識別設(shè)備,省去了復(fù)雜的驅(qū)動程序編寫過程。1 hid協(xié)議簡介人機(jī)接口設(shè)備(hid)主要是指一些人與計算機(jī)舉行交互的設(shè)備,如鍵盤、鼠標(biāo)、嬉戲桿等;但是hid設(shè)備不一定非要是這

2、些人機(jī)交互設(shè)備,只要符合hid設(shè)備級定義規(guī)范要求的都可以認(rèn)為是hid設(shè)備。hid設(shè)備有以下主要特點(diǎn): 交換的數(shù)據(jù)存儲在報告的結(jié)構(gòu)內(nèi),設(shè)備必需支持hid報告格式。 每筆事務(wù)可以攜帶小量或中量的數(shù)據(jù)。低速設(shè)備每筆事務(wù)最大為8字節(jié),全速設(shè)備每筆最大為64字節(jié),高速設(shè)備最大為1 024字節(jié); 有最大傳輸速度的限制。低速設(shè)備最快10 ms一筆事務(wù),最高速度為800 b/s;全速設(shè)備最快1 ms一筆事務(wù),最高速度為64 kb/s;高速設(shè)備最快125 s一筆事務(wù),最高速度為24.576 mb/s。 沒有傳輸速度的保證。當(dāng)插入usb設(shè)備后,主機(jī)會向設(shè)備哀求各種描述符來識別設(shè)備。為了把一個設(shè)備識別為hid類別,

3、設(shè)備在定義描述符的時候必需遵守hid規(guī)范。圖1顯示了hid各種描述符之間的關(guān)系。實(shí)際上,每個設(shè)備可以有多個接口描述符來實(shí)現(xiàn)多接口設(shè)備,而且每個接口描述符下應(yīng)當(dāng)有多個端點(diǎn)描述符。圖1 hid各種描述符之間的關(guān)系從圖1中可以看出,除了usb標(biāo)準(zhǔn)定義的一些描述符外,hid設(shè)備還必需定義hid描述符。另外設(shè)備和主機(jī)的通信是通過報告的形式來實(shí)現(xiàn)的,所以還必需定義報告描述符;而物理描述符不是必須的。還有就是hid描述符是關(guān)聯(lián)于接口(而不是端點(diǎn))的,所以設(shè)備不需要為每個端點(diǎn)都提供一個hid描述符。usb設(shè)備有4種傳輸方式與主機(jī)舉行通信: 控制方式、中斷方式、批量方式和同步方式。每種方式都有它的應(yīng)用領(lǐng)域。hi

4、d只支持控制和中斷傳輸方式。2所示,hid設(shè)備必需要有默認(rèn)的控制管道和一個中斷輸入端點(diǎn);中斷輸出端點(diǎn)是可選的。圖2 hid類設(shè)備用法控制和中斷傳輸方式中斷輸出傳輸是usb1.1規(guī)范才有的內(nèi)容,且必需獲得windows系統(tǒng)的支持。從windows98 se版本開頭才支持中斷輸出傳輸方式,所以假如需要中斷輸出傳輸方式的設(shè)備應(yīng)當(dāng)挑選相應(yīng)的操作系統(tǒng)。表1列出了傳輸類型和相關(guān)狀況。表1 hid類設(shè)備支持的傳輸方式傳輸usb協(xié)議定義了11種哀求指令,通過這些哀求來獲得設(shè)備的信息及對設(shè)備舉行設(shè)置。hid類設(shè)備除了要支持這11種標(biāo)準(zhǔn)的哀求外,還要實(shí)現(xiàn)以下6種特定哀求: get_report主機(jī)用控制傳輸從設(shè)備

5、接收數(shù)據(jù),全部hid類設(shè)備都要支持這個哀求; set_report設(shè)備用控制傳輸接收主機(jī)的數(shù)據(jù),設(shè)備可以不支持此哀求; get_idle主機(jī)讀取設(shè)備當(dāng)前的空閑速率,設(shè)備可以不支持此哀求; set_idle設(shè)置閑置狀態(tài),設(shè)備可不支持此哀求; get_protocol主機(jī)獲得設(shè)備的當(dāng)前活動是引導(dǎo)協(xié)議還是報告協(xié)議; set_protocol在引導(dǎo)協(xié)議和報告協(xié)議間切換,設(shè)備假如支持系統(tǒng)引導(dǎo)(如鍵盤和鼠標(biāo)),就必需支持get_protocol和set_protocol哀求。2 hid接口固件設(shè)計與實(shí)現(xiàn)該設(shè)備采納c8051f120微控制器和pdiusbd12芯片來實(shí)現(xiàn),3所示。圖3 hid系統(tǒng)結(jié)構(gòu)框圖由于

6、pdiusbd12的主端點(diǎn)(endpoint2)具有64字節(jié)的雙緩沖,能夠提供比較高的速度,所以在端點(diǎn)描述符里把它配置為中斷傳輸方式,而endpoint1沒有用法。pdiusbd12通過中斷觸發(fā)cpu來響應(yīng)主機(jī)的各種哀求。此系統(tǒng)采納的usb協(xié)議版本是1.1,所以能夠支持中斷輸出傳輸。為了讓主機(jī)把設(shè)備識別為hid類別,定義設(shè)備接口描述符時類別這一字段的值必需設(shè)置為0x03(hid類別),這樣主機(jī)就會繼續(xù)哀求獲得設(shè)備的hid描述符和報告描述符。在主機(jī)get_descriptor哀求中,當(dāng)值字段的高位字節(jié)為0x21時,表示主機(jī)要求獲得hid描述符;當(dāng)值字段高字節(jié)為0x22時,就是主機(jī)要求獲得報告描述

7、符。對于報告描述符,可以參考hid usage tables規(guī)范。hid descriptor tool工具可以協(xié)助建立和測試編寫的報告描述符。這里定義了一個輸入和輸出64字節(jié)數(shù)據(jù)的報告描述符。code unsigned char szreport = 0x06,0xa0,0xff,/使用頁(ffa0h, vendor defined)0x09, 0x01,/使用(vendor defined)0xa1, 0x01,/集合(application)0x09, 0x02 ,/使用(vendor defined)0xa1, 0x00,/集合(physical)0x06,0xa1,0xff,/使用頁

8、(vendor defined)/輸入報告0x09, 0x03 ,/使用(vendor defined)0x09, 0x04,/使用(vendor defined)0x15, 0x80,/規(guī)律最小值(0x80 or -128)0x25, 0x7f,/規(guī)律最大值(0x7f or 127)0x35, 0x00,/物理最小值(0)0x45,0xff,/物理最大值(255)0x75, 0x08,/報告長度report size (8位)0x95, 0x40,/報告數(shù)值(64 fields)0x81, 0x02,/輸入(data, variable, absolute)/輸出報告0x09, 0x05,/

9、使用(vendor defined)0x09, 0x06,/使用(vendor defined)0x15, 0x80,/規(guī)律最小值(0x80 or -128)0x25, 0x7f,/規(guī)律最大值(0x7f or 127)0x35, 0x00,/物理最小值(0)0x45,0xff,/物理最大值(255)0x75,0x08,/報告長度(8位)0x95, 0x40,/報告數(shù)值(64 fields)0x91, 0x02,/輸出(data, variable, absolute)0xc0,/集合結(jié)束(physical)0xc0/集合結(jié)束(application);這樣,后面數(shù)據(jù)的輸入和輸出都必需滿足報告的

10、格式才干夠舉行傳輸。圖4 應(yīng)用程序枚舉hid設(shè)備流程3 應(yīng)用程序設(shè)計實(shí)現(xiàn)windows為應(yīng)用程序拜訪hid設(shè)備提供了強(qiáng)大的支持,有一整套對hid設(shè)備舉行拜訪的api。應(yīng)用程序要拜訪設(shè)備就必需先枚舉到設(shè)備,圖4為應(yīng)用程序枚舉hid設(shè)備流程。枚舉勝利后按照返回的設(shè)備句柄,就可以用readfile和writefile來讀寫設(shè)備的數(shù)據(jù)了。這里采納異步方式來讀寫數(shù)據(jù),這樣不會發(fā)生讀寫時堵塞,提高了程序的效率。以下是異步方式讀寫設(shè)備的要點(diǎn): 為了實(shí)現(xiàn)異步拜訪設(shè)備,在createfile打開設(shè)備時必需用法file_flag_overlapped標(biāo)記。 打開設(shè)備勝利后,用法createthread建立1個讀設(shè)

11、備線程。 在這個線程中首先建立1個overlapped結(jié)構(gòu),并用createevent函數(shù)初始化它的hevent成員,這樣就創(chuàng)建了1個大事對象。 調(diào)用readfile函數(shù),并傳入這個結(jié)構(gòu)。 調(diào)用readfile后會立刻返回,必需調(diào)用getlast?error獲得出錯碼。 假如為error_io_pending, 解釋此操作是在等待完成的;否則,解釋調(diào)用出錯。 調(diào)用waitforsingleobject等待hevent大事的通知,并使此線程進(jìn)入休眠狀態(tài)。假如有數(shù)據(jù)發(fā)送到主機(jī),讀線程就會被激活。writefile的用法也同樣要求異步操作,與readfile的用法差不多。這里要注重的是,在每次讀寫數(shù)據(jù)前都要先接收和發(fā)送1字節(jié)的pid標(biāo)記,所以每次讀寫數(shù)據(jù)的時候都要多一個字節(jié)。比如,這里每次讀寫的是64字節(jié)數(shù)據(jù),但是在這64字節(jié)之前必需放1字節(jié)的pid數(shù)據(jù),所以是65字節(jié)。普通這個字節(jié)的值為0。4 小結(jié)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論