版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
USB接口HID設(shè)備HID(HumanInterfaceDevice,人機接口設(shè)備)是USB設(shè)備中慣用設(shè)備類型,是直接與人交互USB設(shè)備,例如鍵盤、鼠標與游戲桿等。在USB設(shè)備中,HID設(shè)備成本較低。此外,HID設(shè)備并不一定要有人機交互功能,只要符合HID類別規(guī)范設(shè)備都是HID設(shè)備。Wndows操作系統(tǒng)最先支持HID設(shè)備。在windows98以及日后版本中內(nèi)置有HID設(shè)備驅(qū)動程序,應用程序可以直接使用這些驅(qū)動程序來與設(shè)備通信。在設(shè)計一種USB接口計算機外部設(shè)備時,如果HID類型設(shè)備可以滿足需要,可以將其設(shè)計為HID類型設(shè)備,這樣可以省去比較復雜USB驅(qū)動程序編寫,直接運用Windows操作系統(tǒng)對原則HID類型USB設(shè)備支持。HID設(shè)備簡介HID設(shè)備特點互換數(shù)據(jù)儲存在稱為報表(Report)構(gòu)造內(nèi),設(shè)備固件必要支持HlD報表格式。主機通過控制和中斷傳播中傳送和祈求報表來傳送和接受數(shù)據(jù)。報表格式非常靈活。每一筆事務可以攜帶小量或中量數(shù)據(jù)。低速設(shè)備每一筆事務最大是8B,全速設(shè)備每一筆事務最大是64B,高速設(shè)備每一筆事務最大是1024B。一種報表可以使用多筆事務。設(shè)備可以在未預期時間傳送信息給主機,例如鍵盤按鍵或是鼠標移動。因此主機會定期輪詢設(shè)備,以獲得最新數(shù)據(jù)。HID設(shè)備最大傳播速度有限制。主機可以保證低速中斷端點每10ms內(nèi)最多1筆事務,每一秒最多是800B。保證全速端點每lms一筆事務,每一秒最多是64000B。保證高速端點每125us一筆事務,每一秒最多是24.576MB。HID設(shè)備沒有保證傳播速率。如果設(shè)備是設(shè)立在10ms時距,事務之間時間也許等于或不大于10ms。除非設(shè)備是設(shè)立在全速時在每個幀傳播數(shù)據(jù),或是在高速時在每個微幀傳播數(shù)據(jù)。這是最快輪詢速率,因此端點可以保證有對的帶寬可供使用。HID設(shè)備除了傳送數(shù)據(jù)給主機外,它也會從主機接受數(shù)據(jù)。只要可以符合HlD類別規(guī)范設(shè)備都可以是HID設(shè)備。設(shè)備除了HlD接口之外,它也許同步還包具有其她USB接口。例如影像顯示設(shè)備也許使用HID接口來做亮度、對比度軟件控制,而使用老式影像接口來傳送要顯示數(shù)據(jù)。USB擴音器可以使用實時傳播來播放語音,同步使用HID接口來控制音量、低音等。HID類別設(shè)備規(guī)范文獻重要是如下兩份:DeviceClassDefinitionforHumaninterfaceDevicesHIDUsageTables其中前者是HID基本規(guī)范文獻,后者可以是前者附件,為開發(fā)人員提供實際控制類型描述。文獻是用來定義讓主機理解以及使用HID數(shù)據(jù)數(shù)值。這兩份文獻是由USBDeviceWorkingGroup制定,可以在網(wǎng)址。HID設(shè)備硬件規(guī)定HID接口必要符合DeviceClassDefinitionforHumaninterfaceDevices規(guī)范內(nèi)所定義HID類別需求。在此文獻內(nèi)描述了所需描述符、傳播頻率以及傳播類型等。為了符合規(guī)范,HID接口端點與描述符都必要符合數(shù)個規(guī)定。所有HID傳播都是使用默認控制管道或是一種中斷管道,HID設(shè)備必要有一種中斷輸入端點來傳送數(shù)據(jù)到主機,中斷輸出端點則不是必須。HID類別HID類別驅(qū)動程序HID類別設(shè)備主機外設(shè)默認控制管道中斷管道圖8-1HID傳播傳播類型表8-1HID設(shè)備傳播類型傳播類型數(shù)據(jù)來源數(shù)據(jù)類型與否需要管道控制設(shè)備(輸入)沒有嚴格時間限制數(shù)據(jù)是主機(輸出)沒有嚴格時間限制數(shù)據(jù)或是沒有中斷輸出管道時任何數(shù)據(jù)中斷設(shè)備(輸入)定期或低延遲數(shù)據(jù)是主機(輸出)定期或低延遲數(shù)據(jù)是主機與設(shè)備之間所互換數(shù)據(jù),可以提成兩種類型:低延遲數(shù)據(jù),必要盡快地到達目;配備或其她數(shù)據(jù),沒有嚴格時間限制需求。中斷管道是控制管道之外另一種數(shù)據(jù)互換方式,特別適合使用在接受端需要定期或是盡量及時收到數(shù)據(jù)時候。中斷輸入管道攜帶數(shù)據(jù)到主機,中斷輸出管道則是攜帶數(shù)據(jù)到設(shè)備。在總線忙時候,控制管道也許會被延遲,而中斷管道保證會有可得到帶寬。HID不需要一定有中斷輸出管道。如果沒有中斷輸出管道,主機會在控制管道上使用HID設(shè)備特有Set_Report祈求來傳送所有報表。HID固件規(guī)定主機驅(qū)動程序要與HID設(shè)備通信,設(shè)備固件必要符合下列需求:設(shè)備描述符必要辨認該設(shè)備包具有HID接口。除了默認控制管道外,固件必要此外支持一種中斷輸入管道。固件必要包括一種報表描述符來定義要傳送與接受設(shè)備數(shù)據(jù)。如果要傳送數(shù)據(jù),固件必要支持Get_Report控制傳播與中斷輸入傳播。如果要接受數(shù)據(jù),固件必要支持Set_Report控制傳播與選取性中斷輸出傳播。所有HID數(shù)據(jù)都必要使用定義過報表格式來定義報表中數(shù)據(jù)大小與內(nèi)容。設(shè)備可以支持一種或各種報表。在固件中一種報表描述符用來描述此報表,以及如何使用報表數(shù)據(jù)信息。在每一種報表中一種數(shù)值,定義此報表是一種輸入(Input)、輸出(Output)或是特性(Feature)報表。主機在輸入報表中接受數(shù)據(jù),在輸出報表中傳送數(shù)據(jù),特性報表可以在任何方向傳遞。Windows98以及日后版本HID驅(qū)動程序使用中斷傳播來傳遞輸入報表。輸出報表傳播類型要依照設(shè)備支持端點與Windows版本而定。Windows98Gold只符合HID1.0規(guī)范,它HID驅(qū)動程序使用控制傳播來傳遞輸出報表。Windows98SE、Wndows符合HID1.1規(guī)范,HID驅(qū)動程序在有中斷輸出端點時使用中斷傳播,否則使用控制傳播來傳遞輸出報表。特性報表都是使用控制傳播。HID設(shè)備描述符HID設(shè)備連接到USB主機后,主機通過發(fā)送Get_Descriptor祈求讀取HID設(shè)備描述符,理解描述符對理解USB設(shè)備是至關(guān)重要。HID設(shè)備描述符HID設(shè)備除了支持USB設(shè)備5種原則描述符之外,還支持HID設(shè)備特有3種描述符。這些描述符是:USB原則描述符:設(shè)備、配備、接口、端點和字符串描述符。HID特有描述符:HID、報表(Report)和實體(Physical)描述符。從描述符關(guān)聯(lián)關(guān)系看,HID描述符是關(guān)聯(lián)于接口。因此如果一種HID設(shè)備有2個端點,設(shè)備不需要每個端點有一種HID描述符。圖8-2圖8-2HID描述符關(guān)聯(lián)關(guān)系接口描述符Interface端點描述符EndpointHID描述符Hid報表描述符Report實體描述符PhysicalHID、報表和實體描述符是HID設(shè)備特有描述符 從前面USB描述符可以看出一種規(guī)律,描述符第一、二字節(jié)分別是描述符長度和類型,描述符類型字段(bDescriptorType)表白描述符種類,下表列出了不同描述符類型字段數(shù)值。表8-2HID描述符類型描述符應用數(shù)值原則設(shè)備Device所有設(shè)備必要有,只能一種01配備Configuration所有設(shè)備必要有,至少一種02字符串String可選取03接口Interface每一種接口一種04端點Endpoint除端點0之外每個端點一種05設(shè)備限定Device_Qualiffier同步支持全速與高速設(shè)備必要有一種06Other_Speed_Configuration07Interface_power08類別HIDHID設(shè)備必要有21Hub29HID特定報表ReportHID設(shè)備必要有22實體Physical可選取23對于一種HID設(shè)備,設(shè)備描述符與配備描述符沒有HID特定信息。其設(shè)備描述符bDeviceClass和bDeviceSubClass字段值為0,接口描述符bInterfaceClass字段值為03,表達設(shè)備該接口是HID類別。在接口描述符中其她包括HID特定信息字段尚有子類別碼(blnterfaceSubClass)與合同碼(blnterfaceProtocol字段)。在接口描述符中子類別碼字段等于1表達此設(shè)備支持啟動接口(BootInterface)。如果設(shè)備有啟動接口,即便主機HID沒有加載驅(qū)動程序,設(shè)備也可以使用。這種情形也許發(fā)生在計算機是由DOS直接啟動,在啟動時觀看系統(tǒng)設(shè)立畫面或使用Wndows安全模式時。具有啟動接口鍵盤或鼠標可以使用BIOS或許多主機支持默認簡樸合同。HID規(guī)范定義了鍵盤與鼠標啟動接口合同。如果設(shè)備沒有啟動接口,并且接口描述符中合同碼字段是1,表達設(shè)備支持鍵盤接口,合同碼字段是2,表達支持鼠標接口。接口描述符中合同碼字段是0,表達設(shè)備不支持啟動合同。在HIDUsageTables規(guī)范中定義了鍵盤與鼠標啟動描述符(BootDescriptor)。BIOS不需要從設(shè)備中讀取描述符,由于它懂得啟動合同,并且假設(shè)設(shè)備支持啟動合同。因此要啟動設(shè)備不需要在固件內(nèi)包括啟動接口描述符,它只要在主機尚未規(guī)定在報表描述符中定義合同時支持啟動合同即可。在操作系統(tǒng)加載HlD驅(qū)動程序后會使用Set_Protocol祈求,將設(shè)備由啟動合同轉(zhuǎn)換成報表合同。HID描述符HID描述符重要作用是用來辨認HID通信所使用額外描述符。下表是HID描述符構(gòu)造。表8-3HID描述符構(gòu)造偏移量字段字節(jié)數(shù)數(shù)值類型闡明0bLength1Numeric描述符字節(jié)數(shù)1bDescriptorType1Constant0x21=HID描述符2bcdHID2NumericHID規(guī)范版本號(BCD)4bCountryCode1Numeric硬件設(shè)備所在國家國家代碼5bNumDescriptors1Numeric類別描述符數(shù)目(至少有一種報表描述符)6bDescriptorType1Constant類別描述符類型7wDescriptorLength2Numeric報表描述符總長度9[bDescriptorType]...1Constant附加描述符類型,可選10[wDescriptorLength]...2Numeric附加描述符總長度,可選bcdHID:設(shè)備與其描述符所遵循HID規(guī)范版本號碼,此數(shù)值是4個16進位BCD格式字符。例如版本1.1bcdHID是0110h。bCountryCode:硬件目國家辨認碼。如果不闡明,該字段為0。bDescriptorType:HID描述符附屬描述符類型(報表或?qū)嶓w)。每一種HID都必要至少支持一種報表描述符。一種接口可以支持各種報表描述符,以及一種或各種實體描述符。HID描述符偏移量為9和10bDescriptorType和wDescriptorLength可以重復存在各種。報表描述符報表描述符定義了執(zhí)行設(shè)備功能數(shù)據(jù)格式和用法。報表描述符和USB其她描述符是不同樣,它不是一種簡樸表格,報表描述符是USB所有描述符中最復雜。報表描述符非常復雜而有彈性,由于它需要解決各種用途設(shè)備。報表數(shù)據(jù)必要以簡潔格式來儲存,這樣才不會揮霍設(shè)備內(nèi)儲存空間以及數(shù)據(jù)傳播時總線時間。事實上可以這樣理解,報表內(nèi)容簡潔,是通過報表描述符全面、復雜數(shù)據(jù)描述實現(xiàn)。報表描述符必要先描述數(shù)據(jù)大小與內(nèi)容。報表描述符內(nèi)容與大小因設(shè)備不同而不同,在進行報表傳播之前,主機必要先祈求設(shè)備報表描述符,只有得到了報表描述符才可對的解析報表數(shù)據(jù)。報表描述符是報表描述項目(Item)集合,每一種描述項目均有相對統(tǒng)一數(shù)據(jù)構(gòu)造,項目諸多,通過編碼實現(xiàn)。(1)項目報表描述符由描述HID設(shè)備數(shù)據(jù)項目(Item)構(gòu)成,項目第一種字節(jié)(項當前綴)由三某些構(gòu)成,即項目類型(itemtype)、項目的志(itemtag)和項目長度(itemsize)。其中項目類型闡明項目數(shù)據(jù)類型,項目的簽闡明項目功能,項目長度闡明項目數(shù)據(jù)某些長度。HID項目有短項目和長項目兩種,其中短項目格式如下圖。DData(可以是0、1、2、4個字節(jié))bTagbTypebSize76543210位序字段圖8-3HID報表短項目格式短項目數(shù)據(jù)字節(jié)數(shù)由bSize值定義,bSize為0、1、2、3時Data某些字節(jié)數(shù)分別為0、1、2、4個字節(jié)。短項目項目類型由bType定義,bType為0、1、2時分別為Main、Global和Local類型。長項目可以攜帶較多數(shù)據(jù),其格式如下圖。bDataSize11111110bDataSize1111111076543210位序字段圖8-4HID報表長項目格式bLongItemTagData字節(jié)數(shù)1111~255下面是通過匯編實現(xiàn)一種簡樸報表描述符,描述符每一行是一種項目,該描述符描述了一種從設(shè)備接受2個字節(jié)輸入報表和發(fā)送2個字節(jié)到設(shè)備輸出報表。HID_Report_desc_table: db06h,A0h,F(xiàn)Fh ;UsagePage(Vendordefined)定義設(shè)備功能 db09h,A5h ;Usage(VendorDefined)定義用法 dbA1h,01h ;Collection(Application)開一種集合 db09H,A6h ; Usage(Vendordefined)定義用法 ; 輸入報表 db09h,A7h ; Usgae(Vendordefined)定義用法 db15h,80h ; LogicalMinimum定義輸入最小值=-128 db25h,7Fh ; LogicalMaximum定義輸入最大值=+27 db75h,08h ; ReportSize定義報表數(shù)據(jù)項大小=8 db95h,02h ; ReportCount定義報表數(shù)據(jù)向個數(shù)=2 db81h,02h ; Input(Data,Variable,Absolute)輸入項目 ; 輸出報表 db09h,A9h ; Usgae(Vendordefined)定義用法 db15h,80h ; LogicalMinimum定義輸入最小值=-128 db25h,7Fh ; LogicalMaximum定義輸入最大值=+27 db75h,08h ; ReportSize定義報表數(shù)據(jù)項大小=8 db95h,02h ; ReportCount定義報表數(shù)據(jù)向個數(shù)=2 db91h,02h ; Output(Data,Variable,Absolute)輸出項目 dbC0h ;EndCollection關(guān)閉集合(2)項目分類報表項目有Main、Global和Local三大類,每一類均有各種不同項目,實現(xiàn)不同描述。Main類項目用于定義報表描述符中數(shù)據(jù)項。也可以組合其中若干數(shù)據(jù)項成為一種集合。Main項目可以分為帶數(shù)據(jù)Main項目和不帶數(shù)據(jù)Main項目。帶數(shù)據(jù)項Main用于生成報表中數(shù)據(jù)項,涉及Input、Output和Feature項目。不帶數(shù)據(jù)Main項目不生成報表中數(shù)據(jù)項,涉及Collection和EndCollection項目。Global類項目實現(xiàn)對數(shù)據(jù)描述,用來辨認報表并且描述報表內(nèi)數(shù)據(jù),涉及數(shù)據(jù)功能、最大與最小容許值以及數(shù)據(jù)項大小與數(shù)目等。變化由Main類項目生成項目狀態(tài)表。Global類項目描述對后續(xù)所有項目有效,除非遇到有新Global類項目。Local類項目定義控制特性,這一類項目作用域不超過下一種Main項目,因此在每一Main項目之前也許有各種Local項目。Local項目用于描述背面Input、Output和Feature項目。下表列出是所有項當前綴字和簡要功能闡明。表8-4HID項目列表項目類型項目的志(Tag)項當前綴,nn為數(shù)據(jù)長度功能闡明Main類項目Input100000nn定義輸入報表,主機運用該信息解析設(shè)備提供數(shù)據(jù)。主機向控制端口發(fā)送Get_Report實現(xiàn)輸入Output100100nn創(chuàng)立輸出報表,通過向設(shè)備發(fā)送Set_Report實現(xiàn)輸出Feature101100nn定義送往設(shè)備設(shè)立信息Collection101000nn定義2個以上數(shù)據(jù)(Input、Output和Feature)關(guān)系為集合,Collection開始一種集合,之后EndCollection結(jié)束集合。Collection項目數(shù)據(jù)某些闡明Collection類型EndCollection110000nnGlobal類項目UsagePage000001nn指定設(shè)備功能此外由于Usage項目有32位數(shù)據(jù)值,UsagePage項目用于為Usage項目在報表描述符中占居存儲空間。用于存儲后續(xù)Usage項目高16位。LogicalMinimum000101nn定義變量或數(shù)組項目邏輯最小值和最大值LogicalMaximum001001nnPhysicalMinimum001101nn定義變量或數(shù)組項目物理最小值和最大值,分別和LogicalMinimum、LogicalMaximum相應PhysicalMaximum010001nnUnitExponent010101nn定義數(shù)值是基于10指數(shù)Unit011001nn單位ReportSize011101nn指定報表數(shù)據(jù)區(qū)域所包括位數(shù)ReportID100001nn報表ID,該項目在報表中插入一種字節(jié)報表IDReportCount100101nn報表中數(shù)據(jù)域數(shù)目Push101001nn將Global項目狀態(tài)表送入堆棧Pop101101nn從堆棧恢復Global項目狀態(tài)表110001nn–111101nn保存Local類項目Usage000010nn用法索引值,表達對項目或集合建議用法,用于當一種項目描述各種控制,對每一種變量和數(shù)組元素均有建議用法UsageMinimum000110nn定義陣列或位圖中控制操作第一種和最后一種用法UsageMaximum001010nnDesignatorIndex001110nn擬定用于控制實體,指向物理描述符中目的DesignatorMinimum010010nn定義陣列或位圖目的起始和終結(jié)索引值DesignatorMaximum010110nnStringIndex011110nn擬定字符串描述符中索引值StringMinimum100010nn定義用于陣列或位圖控制中字符串序列索引值最小值和最大值StringMaximum100110nnDelimiter101010nn定義一組Local項目開始和結(jié)束,1=開始,0=結(jié)束101010nn–111110nn保存在這些項目中,UsagePage用來指定設(shè)備功能,而Usage項目用來指定個別報表功能。UsagePage項目相稱于是HID子集合,Usage相稱于是UsagePage子集合。報表描述符項目(1)Input、Outpot和Feature項目這3個項目用來定義報表中數(shù)據(jù)字段。Input項目可以應用到任何控制、計數(shù)器讀數(shù)或其她設(shè)備傳給主機信息。一種輸入報表包括一種或各種Input項目,主機使用中斷輸入傳播來祈求輸入報表。Ouput項目用來定義主機傳送給設(shè)備信息。一種輸出報表包括一種或各種Outpot項目。輸出報表包括控制狀態(tài)數(shù)據(jù)。如果有中斷輸出管道,HID1.1兼容主機使用中斷輸出傳播來傳送輸出報表,否則使用Set_Report控制祈求。Feature項目應用到主機傳送給設(shè)備信息,或是主機從設(shè)備讀取Feature項目。一種特性報表包括一種或各種Feature項目,F(xiàn)eature項目普通是包合影響設(shè)備與其組件整體行為配備。特性報表普通是控制可以使用實際控制面板調(diào)節(jié)設(shè)立,例如主機可以使用虛擬控制面板來讓顧客選取控制特性。主機使用Set_Report與Get_Report祈求來傳送與接受特性報表。在每一種Input、Output和Feature項當前綴字之后是32位描述數(shù)據(jù),當前最多定義了9個位,余位則是保存。位0~8定義中只有位7不能應用于Input項目,除此之外其她位定義都適應于Input、Output和Feature項目。表8-5Input、Output和Feature項目數(shù)據(jù)項闡明數(shù)據(jù)字段含義闡明位值名稱00Data數(shù)據(jù):表達項目內(nèi)容是可更改(讀/寫)。1Constant常數(shù):表達項目內(nèi)容是不可更改(只讀)。10Array數(shù)組:報告所有控制狀態(tài)。如在鍵盤報表中每一種鍵在報表中占一位,報表傳播所有鍵狀態(tài),可以同步按下任意各種鍵。1Variable變量:報告作用中控制。如在鍵盤報表中只報告按下鍵編號,可以同步按下鍵數(shù)目等于報表計數(shù)(Global類項目ReportCount)20Absolute絕對:表達數(shù)值以一種固定值為基準。游戲桿普通是報告絕對數(shù)據(jù)(游戲桿當前位置)。1Relative相對:表達數(shù)據(jù)變化以上一種讀數(shù)為基準。鼠標普通是報告相對數(shù)據(jù)(鼠標移動位置)。3①0NoWrap如果設(shè)立為1表達回轉(zhuǎn),當數(shù)值超過最小值到最大值范疇時將回轉(zhuǎn),如果最小值是0而最大值是10,超過最大值下一種數(shù)值是0。1Wrap4①0Linear線形:表達測量數(shù)據(jù)與報表數(shù)據(jù)有線性關(guān)系。1Non-Linear非線性:表達測量數(shù)據(jù)與報表數(shù)據(jù)沒有線性關(guān)系。5①0Preferred優(yōu)選狀態(tài):表達控制在沒有顧客交互時會回到一種特定狀態(tài)。如按鈕就有優(yōu)選狀態(tài),在無操作時保持未按下狀態(tài)。1Non-Preferred非優(yōu)選狀態(tài):它維持在上一種顧客選取狀態(tài)。如交替開關(guān)就沒有優(yōu)選狀態(tài)。6①0NoNullPosition無空狀態(tài)位置:表達控制永遠在傳送有效數(shù)據(jù)。1Null空狀態(tài):表達控制支持一種沒有傳送有效數(shù)據(jù)狀態(tài)。如操縱桿也許具備一種多方向按鈕開關(guān),在沒有按下時在空狀態(tài),這時控制將傳送一種在LogicalMinimum與LogicalMaximum范疇之外數(shù)值來表達它在空狀態(tài)。7②0Non-Volatile不可變:表達設(shè)備只有在主機祈求時才變化數(shù)值。當主機傳送一種報表并且不要變化不可變項目時,如果該項目是定義成相對(Relative),數(shù)值0表達不變化數(shù)據(jù),如果不可變項目是定義成絕對(Absolute),超過范疇外數(shù)值則表達不變化數(shù)據(jù)。1Volatile可變:表達設(shè)備可以自己變化數(shù)值,并不是必要主機傳送報表規(guī)定給設(shè)備來變化數(shù)值。例如設(shè)備控制面板可以由主機軟件傳送一種報表給設(shè)備,也可以由顧客自己按設(shè)備上實際按鈕。8①0BitField位字段:表達每一種位或是一種字節(jié)內(nèi)一組位可以代表一份數(shù)據(jù)。1BufferedBytes緩沖字節(jié):表達信息包括一種或各種字節(jié),緩沖字節(jié)報表大小必要是8。9~31位保存注: ①:該位不能應用到數(shù)組。②:只應用于Output和Feature項目,對于Input項目該位保存。(2)Collection和EndCollection項目所有報表類型都可以使用Collection與EndCollection項目來將有關(guān)Main類型項目構(gòu)成群組。這兩個項目分別用于打開和關(guān)閉集合。所有在Collection與EndCollection項目之間Main類型項目都是Collection一某些。Collection有3種類型:Application、Physical與Logical,其項目數(shù)據(jù)項值分別為1、0和2。廠商也可以自己定義Collection類型,數(shù)據(jù)項值為80h~FFh保存給廠商定義。EndCollection項目無數(shù)據(jù)項。ApplicationCollection包具有共同用途項目或執(zhí)行單一功能項目。例如鍵盤開機描述符將鍵盤按鍵與LED批示燈數(shù)據(jù)集合成一種ApplicationCollection。所有報表必要在一種ApplicationCollection內(nèi)。PhysicalCollection包括在一種單一幾何點上數(shù)據(jù)項目,可以將每個位置數(shù)據(jù)集合成一種PhysicalCollection。在設(shè)備報告各種傳感器位置時候,使用PhysicalCollection指明不同數(shù)據(jù)來自不同傳感器。LogicalCollection形成一種數(shù)據(jù)構(gòu)造,包括由Collection所連結(jié)不同類型項目。例如數(shù)據(jù)緩沖區(qū)內(nèi)容以及緩沖區(qū)內(nèi)字節(jié)數(shù)目計數(shù)。(3)UsagePage和Usage項目Usagepage項目數(shù)據(jù)某些為1~2個字節(jié),當前定義所有都是一種字節(jié)。UsagePage定義了慣用設(shè)備功能,關(guān)于UsagePage(以及其她項目)詳細定義內(nèi)容,可以查閱HIDUsagetables(),下表是來自HIDUsagetablesUsagePage定義。表8-6UsagePage定義PageIDPageName00Undefined01GenericDesktopControls02SimulationControls03VRControls04SportControls05GameControls06GenericDeviceControls07Keyboard/Keypad08LEDs09Button0AOrdinal0BTelephony0CConsumer0DDigitizer0EReserved0FPIDPage10Unicode11-13Reserved14AlphanumericDisplay15-3fReserved40MedicalInstruments41-7FReserved80-83Monitorpages84-87Powerpages88-8BReserved8CBarCodeScannerpage8DScalepage8EMagneticStripeReading(MSR)Devices8FReservedPointofSalepages90CameraControlPage91ArcadeFEFFReservedFF00-FFFFVendor-defined關(guān)于UsagePage每一種有效定義項,均有一種相應下一級定義,如UsagePage數(shù)據(jù)項數(shù)值為1,則設(shè)備定義為GenericDesktopControls,關(guān)于該類設(shè)備詳細功能可以在HIDUsageTables中查到詳細定義。下表是HIDUsageTables中對GenericDesktopControls設(shè)備功能定義。表8-7GenericDesktopControls用法定義UsageIDUsageNameUsageType參閱HIDUsageTables中有關(guān)章節(jié)00Undefined01PointerCP4.102MouseCA03Reserved04JoystickCA4.105GamePadCA06KeyboardCA07KeypadCA08Multi-axisControllerCA09TabletPCSystemControlsCA0A-2FReserved30XDV4.231YDV32ZDV33RxDV34RyDV35RzDV36SliderDV4.337DialDV38WheelDV39HatswitchDV3ACountedBufferCL4.63BByteCountDV3CMotionWakeupOSC4.33DStartOOC3ESelectOOC3FReserved40VxDV4.3.141VyDV42VzDV43VbrxDV44VbryDV45VbrzDV46VnoDV47FeatureNotificationDV,DF4.848ResolutionMultiplierDV49-7FReserved80SystemControlCA4.581SystemPowerDownOSC82SystemSleepOSC4.5.183SystemWakeUpOSC84SystemContextMenuOSC4.585SystemMainMenuOSC86SystemAppMenuOSC87SystemMenuHelpOSC88SystemMenuExitOSC89SystemMenuSelectOSC8ASystemMenuRightRTC8BSystemMenuLeftRTC8CSystemMenuUpRTC8DSystemMenuDownRTC8ESystemColdRestartOSC4.5.18FSystemWarmRestartOSC90D-padUpOOC4.791D-padDownOOC92D-padRightOOC93D-padLeftOOC94-9FReservedA0SystemDockOSC4.5.1A1SystemUndockOSCA2SystemSetupOSCA3SystemBreakOSC4.9A4SystemDebuggerBreakOSCA5ApplicationBreakOSCA6ApplicationDebuggerBreakOSCA7SystemSpeakerMuteOSC4.5.1A8SystemHibernateOSCA9-AFReservedB0SystemDisplayInvertOSC4.10B1SystemDisplayInternalOSCB2SystemDisplayExternalOSCB3SystemDisplayBothOSCB4SystemDisplayDualOSCB5SystemDisplayToggleInt/ExtOSCB6SystemDisplaySwapPrimary/SecondaryOSCB7SystemDisplayLCDAutoscaleOSCB8-FFFFReserved用法(Usage)定義了各種各樣設(shè)備特性,對于UsagePage每一項都定義了慣用各種用法。用法闡明了3種信息,即控制、集合和數(shù)據(jù)。控制闡明設(shè)備狀態(tài),如on/off、Enable/Disable等。集合闡明控制和數(shù)據(jù)組合關(guān)系。上表中用法類型(UsageType)描述了應用程序如何解決由Main類型項目生成數(shù)據(jù),詳細定義和詳細闡明請參閱HIDUsageTables。(4)ReportID項目ReportID放在信息包中報表數(shù)據(jù)之前,設(shè)備可以支持各種相似類型報表,每一種報表包括不同數(shù)據(jù)與其特有ID。在報表描述符中,ReportID項目作用于其后續(xù)所有項目,直到遇到下一種ReportID為止。如果報表描述符中沒有ReportID項目,默認ID值是0,描述符不能定義一種為0ReportID,輸入報表、輸出報表與特性報表可以分享同一種ReportID。在Set_Report和Get_Report祈求傳播中,主機在設(shè)立事務wValue字段低字節(jié)中指定一種ReportID。在中斷傳播中如果接口支持一種以上ReportID,ReportID必要是傳送報表中第一種字節(jié)。如果接口只支持數(shù)值為0默認ReportID,此ReportID不應當在中斷傳播中隨著報表一起傳送。(5)LogicalMinimum和LogicalMaximum項目LogicalMinimum與LogicalMaximum項目定義報表變量(Variable)或陣列(Array)數(shù)據(jù)限制范疇,此限制范疇以邏輯單位來表達。例如設(shè)備報表一種電流值讀數(shù)是500mA,而一種單位是2mA,則LogicalMaximum值等于250。負數(shù)值以2補碼來表達。如果LogicalMinimum與LogicalMaximum都是正數(shù),就不需要有正負號位。不論LogicalMinimum與LogicalMaximum是以有正負號或是無正負號數(shù)值來表達,設(shè)備都可以對的地傳播數(shù)據(jù)。數(shù)據(jù)接受者必要懂得數(shù)據(jù)與否可以是負值。(5)PhysicalMinimum和PhysicalMaximum項目PhysicalMinimum和PhysicalMaximum項目定義數(shù)值限制范疇,該限制范疇使用Unit項目定義單位來表達。上例中設(shè)備報表一種電流值讀數(shù)是500mA,單位是2mA,LogicalMaximum值等于250,而PhysicalMaximum值是500。LogicalMinimum與LogicalMaximum值闡明了設(shè)備返回數(shù)值邊界,可以依照PhysicalMinimum和PhysicalMaximum值對數(shù)據(jù)進行偏移和比例變換。(6)UnitExponent項目UnitExponent項目定義了在使用邏輯范疇和實際范疇將設(shè)備返回數(shù)值轉(zhuǎn)換成實際數(shù)值時,使用10多少次方對數(shù)值進行定標。UnitExponent值編碼為4位補碼,代表10指數(shù)范疇是-8~+7。表8-8UnitExponent數(shù)值表代碼00h01h02h03h04h05h06h07h08h09h0Ah0Bh0Ch0Dh0Eh0FH數(shù)值01234567-8-7-6-5-4-3-2-1依照以上5個項目值可以換算出報表傳送數(shù)據(jù)(邏輯數(shù)據(jù))與物理數(shù)據(jù)轉(zhuǎn)換關(guān)系。物理數(shù)據(jù)值=邏輯數(shù)據(jù)值÷辨別率辨別率=(LogicalMaximum-LogicalMinimum)÷((PhysicalMaximum-PhysicalMinimum)×10UnitExponent)(7)Unit項目Unit項目指定報表數(shù)據(jù)在使用Physical與UnitExponent項目轉(zhuǎn)換后使用什么度量單位,以及單位冪指數(shù)值。Unit數(shù)值某些可以長達4字節(jié),按照4位為一段分段,可以分為8個半字節(jié)段,由高到低分別為半字節(jié)7、半字節(jié)6、…、半字節(jié)0。每一種半字節(jié)相應不同基本單位,其數(shù)值表達單位指數(shù)值,采用4位2補碼表達,取值范疇是-8~+7之間。從半字節(jié)0~6由下表給出了詳細定義,其中半字節(jié)0表達測量系統(tǒng),半字節(jié)7保存。例如在半字節(jié)0數(shù)值為1(表達采用線性公制測量系統(tǒng))條件下,半字節(jié)1表達長度(單位為厘米),如果其數(shù)值為1表達厘米,數(shù)值為2表達(厘米)2,成為面積單位。半字節(jié)3表達時間(單位為秒),如果其數(shù)值為-2,表達(秒)-2。表8-9Unit單位定義半字節(jié)序號測量項目數(shù)值含義012340測量系統(tǒng)無線性、公制角度、公制線性、英制角度、英制1長度厘米半徑英寸度2質(zhì)量克石拉(slug)3時間秒4溫度開式度(Kelvin)華式度5電流安培6亮度燭光7保存雖然表中只是定義了有限基本單位,但可以通過這些基本單位組合派生出大多數(shù)其他慣用單位。例如報表使用一種字節(jié)傳送一種從-20到110華氏度溫度值,可以定義如下報表描述項目:LogicalMinimum=-128LogicalMaximum=127PhysicalMinimum=-20PhysicalMaximum=110UnitExponent=0Unit=30003hUnit半字節(jié)0=3選取英制線性測量系統(tǒng),半字節(jié)4=3選取華氏溫度單位。130(110+20)華氏度數(shù)值范疇線性分布到了256和有效數(shù)值區(qū)域,每一位相稱于0.51華氏度,這樣就提高了辨別率。(8)ReportSize和ReportCount項目ReportSize項目指定Input、Output與Feature項目字段大小,以位為單位。ReportCount項目指定Input、Output與Feature項目包括字段數(shù)目。例如兩個8位字段,ReportSize等于8,而ReportCount等于2。8個1位字段,ReportSize等于1,而ReportCount等于8。Input、Output與Feature項目報表可以有各種項目,每一種項目可以有自己ReportSize和ReportCount項目。(9)Push和Pop項目Push項目將一種Global項目狀態(tài)表格副本壓入CPU堆棧內(nèi)。GIobal項目狀態(tài)表格包括所有之前定義Gobal項目當前設(shè)立。Pop項目恢復之前壓入堆棧Global項目狀態(tài)儲存狀態(tài)。(10)Usage、UsageMinimum和UsageMaximum項目這3個項目輸入Local類型項目。Usage項目和Global類型UsagePage項目協(xié)同描述項目或集合功能。一種報表可以指定一種Usage給許各種控制,或是指定不同Usage給每一種控制。如果一種報表項目之前有一種Usage,此Usage應用到該項目所有控制。如果一種報表項目之前有一種以上Usage,每一種Usage應用到一種控制,Usage與控制是按順序結(jié)合。例如下面報表描述符一種局部,報表具有2個輸入字節(jié),第一種字節(jié)用法是x,第2個字節(jié)是y。ReportSize(8)ReportCount(2)Usage(x)Usage(y)Input(Data,Variable,Absolute)如果一種報表項目之前有一種以上Usage,并且控制數(shù)目多于Usage數(shù)目,每一種Usage與一種控制相應,最后一種Usage則應用到所有剩余控制。例如在下面報表包括16個字節(jié)輸入數(shù)據(jù),第一種字節(jié)相應用法x,第2個字節(jié)相應用法y,剩余14個字節(jié)相應廠商定義用法。Usage(x)Usage(y)Usage(Vendordefined)ReportSize(8)ReportCount(16)Input(Data,Variable,Absolute)UsageMinimum和UsageMaximum可以指定一種Usage給各種控制或是數(shù)組項目。將從UsageMinimum到UsgaeMaximun定義用法順序相應到各種控制中。例如在一種鍵盤描述符中定義原則鍵盤左、右修飾鍵輸入項目中,使用一種字節(jié)8位分別輸入鍵盤左、右Ctrl鍵、Shift鍵、Alt鍵和GUI鍵,從HIDUsagetables文檔中第10節(jié)可以查到關(guān)于鍵盤用法定義,其中上述8個修飾鍵用法定義值為224到231。如下是報表描述符修飾鍵某些描述。UsagePage(1) ;1=GenericDesktopControlsUsage(6) ;6=KeyboardCollection(1) ;1=ApplicationUsagePage(7) ;7=Keyboard/KeypadUsageMinimum(224) UsageMaximum(231)LogicalMinimum(0)LogicalMaximum(1)ReportSize(1)ReportCount(8)Input(Data,Variable,Absolute)……USB接口鍵盤描述符范例下面作為一種例子,簡介一種USB接口101鍵盤所有描述符。該鍵盤固件某些由一種微解決器實現(xiàn)所有控制功能,下面列出代碼為微解決器匯編實現(xiàn)描述符定義。設(shè)備描述符設(shè)備描述符代碼如下。;=========================================;Devicedescriptor 設(shè)備描述符;=========================================DEVICE_DESC_DATA:DB0x12 ;bLength=18,該描述符長度為18字節(jié)DB0x01 ;bDescriptorType=01,表白是設(shè)備描述符DB0x10,0x01 ;bcdUSB,USB設(shè)備版本號=1.1DB0x00 ;DeviceClass,設(shè)備類碼,HID設(shè)備為0,類別在接口描述符中定義DB0X00 ;DeviceSubClass,設(shè)備子類碼,DeviceClass為0時該字段必要為0DB0X00 ;bDevicePortocol,合同碼,DeviceClass為0時該字段必要為0DB0x08 ;bMaxPacketSize0,端點0最大包尺寸DB0xFF,0xFF ;bVendor,廠商ID,由USB實現(xiàn)者論壇擬定DB0x01,0x00 ;bProduct,產(chǎn)品IDDB0x00,0x01 ;bcdDevice,設(shè)備版本號為1.00DB0x04 ;iManufacturer,廠商字符串索引值,見字符串描述符DB0x0E ;iProduct,產(chǎn)品字符串索引值,見字符串描述符DB0x30 ;iSerialNumber,產(chǎn)品序列號字符串索引值,見字符串描述符DB0X01 ;bNumConfigurations,配備數(shù)目只有1個配備描述符配備描述符代碼如下。;=========================================;Configurationdescriptor配備描述符;=========================================CONFIG_DESC_DATA:DB0x09 ;bLength=9,該描述符長度為9字節(jié)DB0x02 ;bDescriptorType=02,表白是配備描述符DB0x3B,0x00 ;wTotalLength=59,配備、接口、端點和HID描述符總和字節(jié)數(shù)DB0x02 ;bNumInterfaces=2,本配備支持接口數(shù)目為2個DB0x01 ;bConfigurationValue=1,本配備描述符標記符DB0x00 ;iCongfiguration=0,配備描述符闡明字符串索引值,0表達無DB0XA0 ;bmAttributes,電源及喚醒設(shè)立,USB1.1版中D7=1,D6=0表達總線供電 ;D5=1表達支持遠程喚醒DB0X32 ;MaxPower=50,本設(shè)備最大耗電為50X2mA=100mA需要闡明是wTotalLength值,該數(shù)值為配備描述符長度(9)加上后續(xù)鍵盤接口描述符長度(9)、端點描述符長度(7)、HID描述符長度(9),以及該配備下鼠標接口描述符長度(9)、端點描述符長度(7)、HID描述符長度(9),共59個字節(jié)。關(guān)于鼠標有關(guān)描述符在下面論述中省略了。接口描述符接口描述符代碼如下。;=========================================;Interfacedescriptor接口描述符;=========================================InterfaceDescriptor0:DB0x09 ;bLength=9,該描述符長度DB0x04 ;bDescriptorType=4,表白是接口描述符DB0x00 ;bInterfaceNumber=0,此接口辨認標記符DB0x00 ;bAlternateSetting=0,表達此接口無代替設(shè)立值DB0x01 ;bNumEndpoints=1,本接口端點數(shù)目,HID設(shè)備使用端點1DB0x03 ;bInterfaceClass=3,表達該設(shè)備是HID類別DB0x01 ;bInterfaceSubClass=1,表達支持啟動接口DB0x01 ;bInterfaceProtocol=1,表達支持鍵盤合同DB0x00 ;iInterface=0,接口描述符闡明字符串索引值,0表達無字符串HID描述符HID描述符代碼如下。;=========================================;HIDdescriptorHID描述符;=========================================HIDDescriptor0:DB0x09 ;bLength=9,該描述符長度DB0x21 ;bDescriptorType=21h,表白是HID描述符DB0x00,0x01 ;bcdHID=0100,HID規(guī)范版本為1.00DB0x00 ;bCountryCode=0,硬件設(shè)備所在國家國家代碼,0表達未指明DB0x01 ;nNumDescriptors=1,表達支持描述符有1個,即一種報表描述符DB0x22 ;bDescriptorType=22h,描述符類別,表達支持描述符是報表描述符DB0x3F,0x00 ;wDescriptorLength=63,表達支持報表描述符長度端點描述符端點描述符代碼如下。;=========================================;EndPointdescriptor端點描述符;=========================================EndpointDescriptor0:DB0x07 ;bLength=7,該描述符長度DB0x05 ;bDescriptorType=5,表白是端點描述符DB0x81 ;bEndpointAddress=10000001b,表達1號輸入端點DB0X03 ;bmAttributes=00000011b,表達中斷類型端點DB0x08,0x00 ;wMaxPacketSize=8,端點發(fā)送和接受最大包尺寸為8DB10 ;bInterval=10,表達中斷端點輪詢時間間隔為10ms字符串描述符字符串描述符代碼如下。;=========================================;Stringdescriptor字符串描述符;=========================================StringDescriptor0:DB0x04 ;bLength=4,字符串描述符0長度為4DB0x03 ;bDescriptorType=3,表白是字符串描述符DB0x09,0x00 ;wLANGID=0009h,表白是英語DB0x0A ;bLength=10,字符串描述符長度為10DB0x03 ;bDescriptorType=3,表白是字符串描述符DB0x41,0x00,0x43,0x00,0x4D,0x00,0x45,0x00 ;bString=“ACME“,Unicode編碼字符串DB0x22 ;bLength=34,字符串描述符長度為34DB0x03 ;bDescriptorType=3,表白是字符串描述符DB0x4C,0x00,0x6F,0x00,0x63,0x00,0x61,0x00DB0x74,0x00,0x6F,0x00,0x72,0x00,0x20,0x00DB0x4B,0x00,0x65,0x00,0x79,0x00,0x62,0x00DB0x6F,0x00,0x61,0x00,0x72,0x00,0x64,0x00 ;bString=“LocatorKeyboard“,Unicode編碼字符串DB0x0E ;bLength=14,字符串描述符長度為14DB0x03 ;bDescriptorType=3,表白是字符串描述符DB0x41,0x00,0x42,0x00,0x43,0x00,0x21,0x00DB0x22,0x00,0x23,0x00 ;bString=“ABC123“,Unicode編碼字符串報表描述符報表描述符代碼如下。;=========================================;HIDReportsDescriptor報表描述符;=========================================DB0x05,1 ;UsagePage(1:GenericDesktop)DB0x09,6 ;Usage(6:Keyboard)表達報表定義是HID鍵盤DB0xA1,1 ;Collection(1:Application)====================集合開始 ; ; 如下定義了鍵盤修飾鍵輸入報表,共有8個鍵,構(gòu)成一種字節(jié) ; 用法見HIDUsageTable中第10節(jié)中鍵盤用法定義DB0x05,7 ; Usagepage(7:KeyCodes)DB0x19,224 ; UsageMinimum(224)DB0x29,231 ; UsageMaximum(231)DB0x15,0 ; LogicalMinimum(0)DB0x25,1 ; LogicalMaximum(1)DB0x75,1 ; ReportSize(1)DB0x95,8 ; ReportCount(8)DB0x81,2 ; Input(Data,Variable,Absolute) ; ; 如下定義了一種保存字節(jié)輸入報表DB0x95,1 ; ReportCount(1)DB0x75,8 ; ReportSize(8),DB0x81,1 ; Input(Constant)=ReservedByte ; ; 如下定義了鍵盤LED批示燈輸出報表項目,共有5個批示燈 ; 用法見HIDUsageTable中第11節(jié)中LED用法定義DB0x95,5 ; ReportCount(5)DB0x75,1 ; ReportSize(1)DB0x05,8 ; UsagePage(Page#forLEDs)DB0x19,1 ; UsageMinimum(1)DB0x29,5 ; UsageMaximum(5)DB0x91,2 ; Output(Data,Variable,Absolute) ; ; 如下定義了3個填充位,與前面5個LED批示燈數(shù)據(jù)構(gòu)成一種完整字節(jié)DB0x95,1 ; ReportCount(1)DB0x75,3 ; ReportSize(3)DB0x91,1 ; Output(Constant) ; ; 如下定義了鍵盤按鍵值輸入報表項目,共6個字節(jié),存儲鍵編號(0~101) ; 用法見HIDUsageTable中第10節(jié)中鍵盤用法定義 ; 這樣設(shè)計可以容許一次輸入6個按鍵鍵值DB0x95,6 ; ReportCount(6)DB0x75,8 ; ReportSize(8)DB0x15,0 ; LogicalMinimum(0)DB0x25,101 ; LogicalMaximum(101)DB0x05,7 ; UsagePage(7:KeyCodes)DB0x19,0 ; UsageMinimum(0)DB0x29,101 ; UsageMaximum(101)DB0x81,0 ; Input(Data,Array)DB0xC0 ;End_Collection================================集合結(jié)束通過上面報表描述符定義,擬定了鍵盤輸入報表和輸出報表數(shù)據(jù)格式。其中輸入報表共8個字節(jié),輸出報表只有1個字節(jié)。修飾鍵修飾鍵保存鍵值1鍵值2鍵值3鍵值4鍵值5鍵值6圖8-4鍵盤輸入報表格式字節(jié)0字節(jié)1字節(jié)2字節(jié)3字節(jié)4字節(jié)5字節(jié)6字節(jié)77~57~5圖8-5鍵盤輸出報表格式43210ScrollLock批示燈NnmLock批示燈CapsLock批示燈常數(shù),保存Compose批示燈Kana批示燈字節(jié)0HID特定祈求除了USB設(shè)備11個原則祈求外,HID規(guī)范此外還定義了6個HID特定控制祈求。所有HID設(shè)備都必要支持Get_Report祈求,同步支持啟動設(shè)備必要支持Get_Protocol祈求和Set_Protocol祈求,其她祈求是可選取。如果設(shè)備沒有中斷輸出端點,此設(shè)備需要支持Get_Report祈求來從主機讀取數(shù)據(jù)。在控制傳播設(shè)立階段數(shù)據(jù)包中8個字節(jié)中第一字節(jié)bmRequestType編碼含義參閱第6章中USB原則祈求。第2個字節(jié)bRequest定義祈求內(nèi)容。wValue因祈求不同而不同。wIndex指明HID所在接口。表8-10HID特定祈求bmRequestTypebRequest(值)wValuewIndexwLength數(shù)據(jù)階段10100001bGet_Report(1)報表類型,報表ID接口報表長度報表00100001bSet_Report(9)報表類型,報表ID接口報表長度報表10100001bGet_Idle(2)0,報表ID接口1閑置時間00100001bSet_Idle(10)閑置時間,報表ID接口0無10100001bGet_Protocol(3)0接口10:啟動合同1:報表合同00100001bSet_Protocol(11)0:啟動合同1:報表合同接口0無Get_Report祈求Get_Report作用是啟用主機使用控制傳播,來從設(shè)備讀取數(shù)據(jù)。在使用時wValue字段高字節(jié)是報表類型,1表達Input報表,2表達Output報表,3表達Feature報表。wValue低字節(jié)是報表ReportID,如果沒有定義ReportID,該字節(jié)為設(shè)0。在攜帶祈求控制傳播數(shù)據(jù)階段,HID設(shè)備回傳指定報表內(nèi)容。HlD規(guī)范不建議使用該祈求獲得未經(jīng)定期數(shù)據(jù),這樣數(shù)據(jù)建議使用中斷輸入管道獲得。該祈求用來獲得在主機初始化設(shè)備時特性項目狀態(tài)和其她信息。使用開機合同主機可以使用此祈求來獲得按鍵或鼠標數(shù)據(jù)。Set_Report祈求Set_Report祈求參數(shù)含義和Get_Report同樣,但Set_Report祈求數(shù)據(jù)方向與Get_Report相反,在背面數(shù)據(jù)階段,主機傳送報表到HID設(shè)備,這樣輸出報表可以用于復位設(shè)備控制,復位產(chǎn)生效果取決于相應控制類型是相對(Reletive)還是絕對(Absolute)。Set_Idle祈求Set_Idle祈求作用是靜默一種在中斷輸入管道特定報表,直到一種發(fā)生一種有關(guān)事件或過去了規(guī)定期間,當數(shù)據(jù)從上一種報表后沒有變化時,可以通過限制中斷輸入端點報表頻率來節(jié)約傳播帶寬。HID設(shè)備不是必須支持此祈求。wValue字段高字節(jié)是設(shè)立閑置時間,是報表之間最大間隔時間。該字節(jié)為0表達閑置時間為無限長,在這種狀況下,設(shè)備只有在報表數(shù)據(jù)有變化時才傳送報表,否則設(shè)備傳回一種NAK。wValue字段低字節(jié)批示此祈求應用報表ReportID。如果低字節(jié)是0,此祈求應用到設(shè)備所有輸入報表。閑置時間以4ms為單位,范疇在4ms~1020ms之間。如果報表數(shù)據(jù)自從上一次報表后有變化,或是接受到一種祈求,設(shè)備會傳送一種報表。如果報表數(shù)據(jù)沒有變化,并且從上一次報表后過去時間自尚未達到規(guī)定閑置時間,設(shè)備會傳回一種NAK。如果報表數(shù)據(jù)沒有變化,并且持續(xù)時間已經(jīng)達到閑置時間,設(shè)備會傳送一種報表。閑置時間設(shè)立為0表達無限長閑置時間,設(shè)備只有在報表數(shù)據(jù)有變化時才會傳送一種報表,對于其她中斷輸入祈求則是傳回NAK。在檢測HID設(shè)備時,WndowsHID驅(qū)動程序會試圖將閑置時間設(shè)立成0。如果HID設(shè)備不支持此祈求,主機會收到傳回Stall。Get_Idle祈求Get_Idle祈求作用是過設(shè)備當前閑置時間,在數(shù)據(jù)階段,HID設(shè)備回傳一種字節(jié)閑置時間值。Get_Protocol祈求Get_Protocol祈求作用是主機獲取設(shè)備當前作用是啟動合同還是報表合同。在數(shù)據(jù)階段中設(shè)備回傳1個字節(jié)信息包中數(shù)據(jù)值為0表達啟動合同,為1表達報表合同。啟動設(shè)備必須支持該祈求。Set_Protocol祈求Set_Protocol作用是主機指定設(shè)備使用啟動合同或報表合同。在數(shù)據(jù)階段中主機傳送1個字節(jié)信息包中數(shù)據(jù)值為0表達指定啟動合同,為1表達指定報表合同。啟動設(shè)備必須支持該祈求。HID程序設(shè)計HID設(shè)備是Windows系統(tǒng)提供了完善支持一類,應用程序可以通過原則API函數(shù)調(diào)用,實現(xiàn)與HID設(shè)備通信。Windows系統(tǒng)提供了幾千個API函數(shù),作為應用程序與操作系統(tǒng)接口,與HID有關(guān)API函數(shù)被封裝在hid.dll、setupapi.dll和kernal32.dll文獻中。HID訪問使用API函數(shù)文獻hid.dll中提供了諸各種API,由于與HID設(shè)備通信有一定復雜性。一方面,在應用程序與HID傳播數(shù)據(jù)之前,應用程序必要先辨認該設(shè)備并且讀取它報表信息,這些動作需要調(diào)用各種API函數(shù)才可以實現(xiàn)。應用程序需要尋找連接到系統(tǒng)上是哪些HID設(shè)備,然后讀取每個設(shè)備信息直到查找到所需屬性。如果是客戶化設(shè)備,應用程序可以尋找特定廠商與產(chǎn)品ID,或者應用程序可以尋找特定類型設(shè)備,例如鍵盤或鼠標。表8-11用于HID設(shè)備API函數(shù)用于理解HID設(shè)備狀況API函數(shù)(hid.dll)HidD_GetAttributes祈求獲得HID設(shè)備廠商ID、產(chǎn)品ID和版本號HidD_FreePreparsedData釋放函數(shù)HidD_GetPreparsedData所使用資源HidD_GetHidGuid祈求獲得HID設(shè)備GUIDHidD_GetIndexString祈求獲得由索引辨認字符串HidD_GetManufactureString祈求獲得設(shè)備制造商字符串HidD_GetPhysicalDescriptor祈求獲得設(shè)備實體字符串HidD_GetPreparsedData祈求獲得與設(shè)備能力信息有關(guān)緩沖區(qū)代號HidD_GetProductString祈求獲得產(chǎn)品字符串HidD_GetSerialNumberString祈求獲得產(chǎn)品序列號字符串HidP_GetButtonCaps祈求獲得HID報表中所有按鈕能力HidP_GetCaps祈求獲得用于描述設(shè)備能力構(gòu)造指針HidP_GetLinkCollectionNotes祈求獲得描述在頂層集合中連接集合(LinkCollection)關(guān)系構(gòu)造數(shù)組HidP_GetSpecificButtonCaps祈求獲得報表中按鈕能力,該祈求可以設(shè)定一種UsagePage、Usage或是LinkCollectionHidP_GetSpecificValueCaps祈求獲得報表中數(shù)值能力,該祈求可以設(shè)定一種UsagePage、Usage或是LinkCollectionHidP_GetValueCaps祈求獲得HID報表中所有數(shù)值能力HidP_MaxUsageListLength祈求獲得HID報表中可以回傳按鈕最大數(shù)目,該祈求可以設(shè)定一種UsagePageHidP_UsageListDifference比較兩個按鈕列表,并且求出在一種列表中設(shè)定而在另一種列表中沒有設(shè)定按鈕用于從設(shè)備讀取、向設(shè)備傳送報表API函數(shù)(hid.dll)HidD_GetFeature從設(shè)備讀取一種特性報表HidD_SetFeature向設(shè)備傳送一種特性報表HidP_GetButtons從設(shè)備讀取包括每個按下按鈕用法(Usage)緩沖區(qū)指針,該祈求可以設(shè)定一種UsagePageHidP_GetButtonEx從設(shè)備讀取包括每個按下按鈕Usage和UsagePage緩沖區(qū)指針HidP_GetScaledUsageValue從設(shè)備讀取一種已經(jīng)通過比例因子調(diào)節(jié)有符號數(shù)值HidP_GetUsageValue從設(shè)備讀取一種指向數(shù)值指針HidP_GetUsageValueArray從設(shè)備讀取包括各種數(shù)據(jù)項Usage數(shù)據(jù)HidP_SetButtons向設(shè)備傳送設(shè)立按鈕數(shù)據(jù)HidP_SetScaledUsageValue將一種實際數(shù)值轉(zhuǎn)換成設(shè)備使用邏輯數(shù)值,并將其插入到報表中HidP_SetUsageValue向設(shè)備傳送數(shù)據(jù)HidP_SetUsageValueArray向設(shè)備傳送包括各種數(shù)據(jù)項Usage數(shù)據(jù)HidD_FlushQueue清空輸入緩沖區(qū)HidD_GetNumInputBuffer獲得驅(qū)動程序用于存儲輸入報表環(huán)形緩沖區(qū)大小,默認值是8HidD_SetNumInputBuffer設(shè)立驅(qū)動程序用于存儲輸入報表環(huán)形緩沖區(qū)大小用于查找和辨認設(shè)備API函數(shù)(setupapi.dll)SetupDiGetClassDevs獲得HID信息,針對已安裝設(shè)備,回傳一種指向其信息集代碼SetupDiEnumDeviceInterfaces祈求獲得設(shè)備信息群內(nèi)一種設(shè)備信息SetupDiGetDeviceInterfaceDetail祈求獲得設(shè)備途徑SetupDiDestroyDeviceInfoList釋放SetupDiGetClassDevs使用資源用于打開、關(guān)閉設(shè)備和實現(xiàn)數(shù)據(jù)傳送API函數(shù)(kernal32.dll)CreatFile獲得設(shè)備途徑后,調(diào)用該函數(shù)獲得設(shè)備代號WriteFile向設(shè)備傳送輸出報表ReadFile從設(shè)備讀取輸入報表CloseHandle關(guān)閉設(shè)備,釋放CreateFile所使用資源查找HID過程在實現(xiàn)HID訪問之前,一方面要查找指定(依照設(shè)備廠商ID、產(chǎn)品ID和產(chǎn)品序列號)HID。查找指定設(shè)備過程如下:調(diào)用函數(shù)HidD_GetHidGuid獲得USB設(shè)備GUID;調(diào)用函數(shù)SetupDiGetClassDevs,獲得一種包括所有HID信息構(gòu)造數(shù)組指針,下面依照此數(shù)組逐項查找指定HID;調(diào)用函數(shù)SetupDiEnumDeviceInterfaces,填寫SP_DEVICE_INTERFACE_DATA構(gòu)造數(shù)據(jù)項,該構(gòu)造用于辨認一種HID設(shè)備接口;調(diào)用函數(shù)SetupDiGetDeviceInterfaceDetail,獲得一種指向該設(shè)備途徑名;調(diào)用函數(shù)CreateFile,獲得設(shè)備句柄;調(diào)用函數(shù)HidD_GetAttributes,填寫HIDD_ATTRIBUTES構(gòu)造數(shù)據(jù)項,該構(gòu)造包括設(shè)備廠商ID、產(chǎn)品ID和產(chǎn)品序列號,比照這些數(shù)值擬定該設(shè)備與否是查找設(shè)備。查找HID流程如下圖。調(diào)用調(diào)用HidD_GetHidGuid獲得GUID調(diào)用SetupDiGetClassDevs獲得所有HID信息調(diào)用SetupDiEnumDeviceInterfaces獲得特定HID辨認信息調(diào)用SetupDiGetDeviceInterfaceDetail獲得特定HID途徑名調(diào)用CreateFile獲得特定HID句柄調(diào)用HidD_GetAttributes獲得特定HID廠商ID、產(chǎn)品ID找到指定HID?查找完畢?結(jié)束開始YesYesNoNo圖8-6查找設(shè)備流程下面簡介VB實現(xiàn)查找過程。獲得GUID應用程序要與HID設(shè)備通信之前,必要先獲得HID類別GUID(GloballyUniqueIndentifer)。GUID是一種128位數(shù)值,每個對象均有惟一GUID。HID類別GUID包括在hidclass.h文檔內(nèi),可以接引用,或是使用HidD_GetHidGuid函數(shù)來獲得HID類別GUID?!瘮?shù)聲明PublicDeclareFunctionHidD_GetHidGuidLib"hid.dll"(ByRefHidGuidAsGUID)AsLong‘GUID構(gòu)造闡明PublicTypeGUIDData1AsLongData2AsIntegerData3AsIntegerData4(7)AsByteEndType‘變量闡明DimHidGuidasGUID‘調(diào)用CallHidD_GetHidGuid(HidGuid)獲得HID構(gòu)造數(shù)組得到GUID后調(diào)用SetupDiGetClassDevs函數(shù)傳回所有已經(jīng)連接并且檢測過HID包括其信息構(gòu)造數(shù)組地址?!瘮?shù)聲明PublicDeclareFunctionSetupDiGetClassDevsLib"setupapi.dll"Alias"SetupDiGetClassDevsA"(_ ByRefClassGuidAsGUID,_ ByValEnumeratorAsString,_ ByValhwndParentAsLong,_ ByValFlagsAsLong)_AsLong‘常量闡明PublicCons
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遙控電路課課程設(shè)計
- 2025年度電動汽車充電接口及通信協(xié)議技術(shù)升級改造合同
- 二零二五年度競業(yè)禁止協(xié)議期限與競業(yè)限制期限調(diào)整說明合同
- 二零二五年度汽車新能源技術(shù)研發(fā)與應用合同
- 2025年度二零二五年度解除解除餐廳租賃合同協(xié)議書含食材供應
- 二零二五年度超市員工勞動爭議解決與賠償合同
- 2025年度酒店裝修合同施工安全與質(zhì)量保證
- 跳繩競速課程設(shè)計思路
- 陽泉無煙煤鍋爐課程設(shè)計
- 繁星的微型課程設(shè)計
- (免費)2023年浙江衢州中考數(shù)學試卷及答案(WORD版)
- MT/T 198-1996煤礦用液壓鑿巖機通用技術(shù)條件
- GB/T 14959-1994個人中子劑量計的性能要求與刻度(中子能量小于20MeV)
- 元旦節(jié)前安全教育培訓-教學課件
- SL 537-2011 水工建筑物與堰槽測流規(guī)范
- 質(zhì)量管理-AQL抽樣基礎(chǔ)知識培訓課件
- 劇本殺·劇本-四人本《暗船》
- 《普通話》教學講義課件
- 陜西省西安市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
- 水利工程管理單位定崗標準(試點)
- 合肥工業(yè)大學推免生綜合評價加分細則
評論
0/150
提交評論