上一篇:USB_HID裝置執行個體 USB_HID裝置執行個體_卡卡的部落格-CSDN部落格
HID用途表大綱
條目(item)格式:1位元組的字首 + 1位元組的資料位元組
1位元組的字首可區分目前的條目是什麼條目:主(main)條目、全局條目(global)、局部條目(local)。
1. bsize
1位元組的字首格式如下:注意各個位的含義
Bit: 7 6 5 4 3 2 1 0
bTag | bType | bSize |
第0和第1位表示,該字首後面跟多少個位元組:
00 = 0 : 後面跟0位元組的資料 01 = 1 : 後面跟1位元組的資料 10 = 2 : 後面跟2位元組的資料 11 = 3 : 後面跟4位元組的資料 |
2. bType
第2和第3位表示條目的類型:
00 = 0 : 表示該條目是主條目 01 = 1 : 表示該條目是全局條目 10 = 2 : 表示該條目是局部條目 11 = 3 : 保留 |
3. bTag
最後的四個位bTag表示目前條目的功能:
1)主條目有5個:input(輸入)、output(輸出)、Feature(屬性)、Collection(集合)、End Collection(關集合)
1000 : Input 1001 : Output 1011 : Feature 1010 : Collection 1100 : End Collection |
2)全局條目:用來選擇用途頁、定義資料域的長度、資料域的數量、報告ID。常用的有Usage Page(用途頁)、Logical Mininum(邏輯最小值)、Logical Maxinum(邏輯最大值)、Physical Mininum(實體最小值)、Physical Maxinum(實體最大值)、Report Size(資料域大小)、Report Count(資料域長度)。Report Size描述資料域有多少個位,Report Count描述這樣的域有多少個。
0000 : Usage Page 0001 : Logical Minimum 0010 : Logical Maximum 0011 : Physical Minimum 0100 : Physical maximum 0111 : Report Size 1000 : Report ID 1001 : Report Count |
3)局部條目:用來定義控制的特性,資料域的用途,用途的最小最大值。常用的有:Usage(用途)、Usage Mininum(用途最小值)、Usage Maxinum(用途最大值)等。
0000 : Usage 0001 : Usage Mininum 0010 : Usage Maxinum …………………………………… |
根據上面的規則,給出常用的一些字首:
0x05:全局,後面跟一位元組的用途表選擇(Usage Page: xxx) 0x09:局部,後面跟一位元組的用途(Usage: xxx) 0xa1:主條目,後面跟一位元組的集合定義(Collection: xxx) 0x19:局部條目,後面跟一位元組的用途最小值(Usage Mininum: xxx) 0x29:局部條目,後面跟一位元組的用途最大值(Usage Maxinum: xxx) ……………………………………………………………………………………………………………… |
注:一般都是後面跟一位元組的資料字,也就是最低兩位是01。
4. 條目-代碼速查表
注:都是後面跟一位元組的短條目。
主條目 | 全局條目 | 局部條目 | |||
标簽 | 代碼 | 标簽 | 代碼 | 标簽 | 代碼 |
Input | 0x81 | Usage Page | 0x05 | Usage | 0x09 |
Output | 0x91 | Logical Mini | 0x15 | Usage Mini | 0x19 |
Feature | 0xb1 | Logical Maxi | 0x25 | Usage Maxi | 0x29 |
Collection | 0xa1 | Physical Mini | 0x35 | ||
EndCollection | 0xc1 | Physical Maxi | 0x45 | ||
Report Size | 0x75 | ||||
Report ID | 0x85 | ||||
Report Count | 0x95 |
5. 詳解各個條目
5.1 主條目
對于主條目,字首後跟的一位元組怎麼寫?後面跟着的一位元組每個bit都有特殊意義,協定規定如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiNx8FesU2cfdGLwczX0xiRGZkRGZ0Xy9GbvNGLwIzXlpXazxSP9cmToJTW1gmMZVTQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLlF2MlV2YmFDMkNGNlhzY5UTMhRTM5ATZxEDN0YTN5MzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
後面跟着的一位元組的資料,每個位的含義都是一樣的。需要注意的是,對于自定義的報告描述符collection的寫法,end collection閉集合後面不跟資料字。
解析:
(0) 位0:Data(0)/Constant(1) Data表示主條目的資料是可變值,Constant表示主條目的資料為固定不可變的值 Constant用于Feature報告,或者用于填充位(padding),使報告長度為整位元組 (1) 位1:Array(0)/Variable(1) Array表示幾個不同的操作的其中一個被觸發 Variable表示每個字段僅表示一個操作 如果是Variable,則Report Count的資料值等于報告資料的字段數 若是Array,則Report Count的資料值表示可以同時被觸發的最多操作數目 (2) 位2:Absolute(0)/Relative(1) 主條目的資料是以相對固定的基準點方式提供絕對數值(設為Absolute) 或是提供相對于前次報告的相對值(設為Relative) (3) 位3: Wrap(0)/No Wrap(1) 主條目的資料值達到極低值後會轉為極低值,反之亦同,稱為卷繞(wrap) (4) 位4: Liner(0)/Nonliner(1) 主條目的資料與操作刻度為線性關系(設為liner),或為非線性(Nonliner) (5) 位5 :Preferred(0)/No Preferred(1) 主條目對應的操作在不被觸發時會自動恢複到初始狀态(Preferred),或是不會恢複原狀(No Preferred)。 例如: 鍵盤的按鍵和會自動置中的遊戲杆。皆為Preferred。 (6) 位6 :No Null Position(0)/Null state(1) 主條目對應的操作有一個狀态,其不會送出有意義的資料,即資料将不再Logical Minimum和Maximum之間,這種操控要标注null state,否則為No null position。 (7) 位7 :Non Volatile(0)/Volatile(1) 主條目Feature的資料不允許被主機修改(設為Non volatile), 或是允許被主機改變(volatile),主條目為input和output時,此标注設定無意義,是以Bit7的代碼必須為0。 (8) 位8 :bit filed/buffered bytes: 主項目的資料格式要以位元組為機關,不足構成位元組時自動填充成位元組則Buffered Bytes。 (9) Collection和End Collection。 以滑鼠而言,實體上是一個指針(pointer),這是應用為計算機滑鼠;而這個指針含有3個按鍵和2個平移軸x和y。 是以指針的報告是由不同格式的資料所組成,因而需要用到collection和end collection将幾個input項目集結成一組,其用途為指針,再用collection和end collection将指針括起來說明其應用為滑鼠。 标簽 end collection沒有跟随任何資料,但是collection跟随一個位元組資料,例如指針的資料名為Physical,而滑鼠和鍵盤的為Application。 |
5.2 全局條目
1)主要用來選擇用途頁,定義資料域的長度、數量、報告ID等。
2)全局條目出現後對接下來的所有主條目都有效,除非遇到另一個全局條目來改變它。
3)常用的全局條目有:Usage Page(用途頁),Logical Minimum(邏輯最小值),Logical Maximum(邏輯最大值),Physical Minimum(實體最小值),Physical Maximum(實體最大值),Report Size(資料域大小),Report Count(資料域數量),Report ID(報告ID)。
4)其中Reprot Size 用來描述某個資料域有多少個位;Report Count用來描述這樣的資料域有多少個;Logical Minimum和Logical Maximum用來描述資料域的取值範圍。
示例:如果是滑鼠的3個按鍵,每個按鍵占用一個一位的字段,則Report Size(1), Report Count(3);
那麼這個報告長度為3個位,可以同時呈現出3個按鍵的狀态(不足一位元組,後面要補上)。
Logical Minimum和Logical Maxinum用于說明每個報告字段的數值範圍,這是純數值,是以稱為邏輯數值。
5.3 局部條目
1)用來定義控制的特性,例如,該資料域的用途、用途最小值、用途最大值。
2)局部條目隻在局部有效,遇到一個主條目後,它的效用就結束了。
3)常用的局部條目有:Usage(用途)、Usage Minimum(用途最小值)、Usage Maximum(用途最大值)。
簡單來說,局部條目隻是說明用途而已,标簽Usage應該稱為Usage ID,它搭配全局條目的Usage Page标簽才形成所定義的用途。
往往一個報告資料會對應到幾個操作,因而會有幾個用途,例如101按鍵的鍵盤利用不同代碼代表不同的按鍵,每一個鍵就是一個操作,有自己的用途,要将所有的Usage ID列出不太現實,是以就需要Usage Maximum和Usage Minimum兩個标簽,以鍵盤為例,主項目之上,隻要兩個區域項目:Usage Minimum(0),Usage Maxmum(101)。
在Usage ID=0和Usage ID=101中的任意鍵被按下的用途都被賦予到一個報告資料上。
6. 速查用途頁ID(usage page ID)
用途頁ID(hex) | 頁面名稱(USAGE_PAGE) | 章節 |
00 | 預設 | |
01 | 通用桌面控制(Generic Desktop Controls) | 4 |
02 | 模拟控制(Simulation Control) | 5 |
03 | 虛拟現實控制(VR Controls) | |
04 | 運動控制(Sport Controls) | 7 |
05 | 遊戲控制(Game Controls) | 8 |
06 | 通用裝置控制(Generic Device Controls) | 9 |
07 | 鍵盤/小鍵盤(Keyboard / Keypad) | 10 |
08 | LED燈(LEDs) | 11 |
09 | 按鍵(Button) | 12 |
0A | 序數鍵(Ordinal) | 13 |
0B | 電話(Telephony) | 14 |
0C | 消費類電子(Consumer) | 15 |
0D | 數字化裝置(Digitizer) | 16 |
0E | 保留 | |
0F | PID頁 | |
10 | Unicode編碼 | 17 |
11-13 | 保留 | |
14 | 字母數字顯示器(Alphanumeric Display) | 18 |
15-3F | 保留 | |
40 | 醫療器械(Medical Instruments) | 19 |
41-7F | 保留 | |
80-83 | 監控裝置(Monitor pages) | 監控類的USB裝置 |
84-87 | 電源裝置(Power pages) | 電源類的USB裝置 |
88-8B | 保留 | |
8C | 條形碼掃描裝置(Bar Code Scanner) | 跟銷售相關的USB裝置 |
8D | 稱重裝置(Scale page) | |
8E | 磁條讀數裝置(Magnetic Stripe Reading) | |
8F | 保留(用于銷售裝置) | |
90 | 攝像裝置控制 | 圖像類的USB裝置 |
91 | Arcade Page | 跟商場有關的USB裝置 |
92-FEFF | 保留 | |
FF00-FFFF | 廠商自定義 |
7. 部分用圖頁(usage page)
隻關注一些開發中,常用的用途即可。有需要可以參考官方HID用圖表文檔。
7.1 通用桌面用途頁0x01(Generic Desktop)
滑鼠、鍵盤和遊戲杆等用途第一包含于通用桌面用途頁。
7.1.1 鍵盤用途
HID_Usage_Tables.pdf從53頁開始。定義了各個按鍵的用途ID。用到的時候,直接查表。
第一列:用途ID(十進制) 第二列:用途ID(十六進制) 第三列:按鍵名稱
7.1.2 滑鼠用途
滑鼠用途看懂官方例子即可,開發很少用到。
7.2 LED燈用途頁0x08(LED)
LED訓示燈常用的ID如下圖。
包括标準鍵盤上的大小寫LED訓示燈,以及一些通信裝置(電話裝置)的LED訓示燈等。
7.3 按鍵用途頁(Button)
詳見P67.
7.4 電話通訊裝置用途頁0x0B(Telephony)
這個用途頁定義了電話裝置的按鍵和控制用法。需要注意的是,在很多情況下用途的定義是含糊不清的,這是因為我們假定控制跟電話系統的軟體實作相關。比如,軟體可以實作暫停,且在對方挂機之前,保持通信通路是打開狀态的。而另一種實作是允許使用者挂斷,然後目标号碼滿足通信條件的時候回撥。是以,就需要統一用途的定義,使其在不同的廠商中接口能一緻,進而在處理新的或多個系統時最大限度地減少學習曲線和挫折感。
電話裝置上的訓示燈使用LED用途來實作。HID_Usage_Tables.pdf 頁碼:P69
7.4.1 部分用途ID
7.4.2 電話通訊裝置的分類
(1)Phone【電話】:一個應用集合(application set),實作電話通訊裝置控制。
(2)Answering Machine【應答機】:一個應用集合(application set),實作語音郵件或答錄機控制。
(3)Message Control【消息控制】:和語音郵件控件相關的用途
(4)Handset【手持機】:手持式的電話裝置,比如音頻接收器和發射器
(5)Headset【頭戴式】:與電話耳機(耳機和麥克風)相關的用途,包括音頻接收器和發射器。
7.4.3 電話鍵盤用途(telephony key pad usages)
這是标準的電話鍵盤(撥号按鍵0~9,*和#),電話鍵盤意味着鍵盤用數字和相關字母字元标記,該集合也可以用作0~9的通用鍵盤,電話鍵盤集合包含電話鍵盤選擇器的用法。
手機鍵盤的定義與普通桌面用途頁定義的鍵盤是不相同的。因為它獨特的按鍵标記。所有手機按鍵的使用都由選擇器定義。按鍵定義如下:
鍵值ID詳見表Telephony Usage Page。
7.4.4 可程式設計按鍵
Programmable Button:可程式設計電話按鈕,此集合包含按鍵用途頁中的用法。可程式設計按鈕1到n分别由按鈕頁面用法1到n表示。
7.4.5 呼叫控制(call control)
用途名稱/ID | 解釋 |
開關(Hook Switch/0x20) | 表示手持電話裝置是否已經就緒,使用一個bit來表示。1表示就緒,反之。 |
信号燈的閃光(Flash/0x21) | 起到訓示的作用,通常是一個可選的功能 |
特性(Feature/0x22) | 操作特性的選擇 |
暫停(Hold/0x23) | 暫停目前通話 |
重撥(Redial/0x24) | 重撥最後一次通話的号碼 |
呼叫轉移(Transfer/0x25) | 轉移通話到另外一個分機 |
斷開(Drop/0x26) | 斷開目前通話 |
忙等待(Park/0x27) | 等待線路空閑 |
呼叫前轉(Forward Call/0x28) | 轉接到另外一個号碼 |
線路(Line/0x2A) | 電話僅支援一條線路,則類型為OSC,支援多條線路,類型則為NARY. |
免提功能(Speaker Phone/0x2B) | 使能免提模式 |
會議模式(Conference/0x2C) | 發起電話會議 |
響鈴(Ring Enable/0x2D) | 使能響鈴模式 |
鈴聲選擇(Ring Select/0x2E) | 按下鈴聲選擇鍵,然後選擇想要的鈴聲 |
電話靜音(Phone Mute/0x2F) | 禁用被呼叫人的音頻,但打電話的人仍可聽到輸入的音頻 |
來電顯示(Caller ID) | 顯示來電号碼 |
注:表格中列出來的隻是部分。
7.4.6 快速撥号功能
快速撥号(Speed Dial/0x50) | 啟用快速撥号操作 |
号碼存儲(Store Number/0x51) | 儲存快速撥号的号碼 |
查找号碼(Recall Number/0x52) | 在顯示屏上調出快速撥号号碼 |
電話簿(Phone Directory/0x53) | 顯示電話簿 |
7.4.7 語音郵件控制
語音郵件(Voice Mail/) | 進入語音郵件應用程式 |
螢幕通話(Screen Calls/) | 禁用被呼叫人的音頻,并将呼叫轉發至語音mai應用程式。來電者仍能聽到傳入的音頻 |
勿擾模式(Do Not Disturb/) | 禁用響鈴和揚聲器,并将呼叫轉移到語音郵件應用程式 |
消息(Message/) | 收聽語音消息 |
接聽和斷開(Answer On/Off) | 切換應答機 |
7.4.8 本地鈴聲
一些電話裝置在本地生成鈴聲,而不是通過音頻輸入傳送傳送鈴聲,這些鈴聲通過手機揚聲器或揚聲器電話中的揚聲器向使用者播放。
用途名稱/ID | 解釋 |
内部通話鈴聲(Inside Dial Tone/) | 一種提示使用者已準備好進行内部通話的鈴聲 |
外部通話鈴聲(Outside Dial Tone/) | 一種提示使用者電話已準備好撥打外部電話的音調 |
内置鈴聲(Inside Ring Tone/) | 内置鈴聲響鈴 |
外置鈴聲(Outside Ring Tone/) | 外置鈴聲響鈴 |
線路忙鈴聲(Line Busy Tone/) | 線路正忙 |
通話等待(Call Waiting Tone/) | 目前使用者正在通話,另一個電話正在接聽 |
注:表格中列出來的隻是部分。
7.3 多媒體按鍵0x0C(Consumer)
Consumer頁面上的所有的控制都是基于應用程式的,也就是說,能控制某些指定的裝置,而不是整個系統。
8. 産品常用功能
(1) 多媒體鍵值用途頁Consumer
常用的控制PC端音樂播放功能:暫停/播放、靜音、上/下一曲、音量加/減、快進和快退播放等。
(2) 電話通訊裝置用途頁Telephony
開發會議室音箱的常用功能:音頻通話/來電的接聽、挂斷和麥克風靜音等
(3) 鍵盤
模拟上報控制PC端網頁、音樂/視訊播放軟體等功能。
(4) 自定義報告資料
用于産品固件更新、和個性化上位機的小批量資料通信。
下一篇:分享HID類相關文檔和工具