天天看點

HID用圖表大綱HID用途表大綱

上一篇: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都有特殊意義,協定規定如下:

HID用圖表大綱HID用途表大綱
HID用圖表大綱HID用途表大綱

 後面跟着的一位元組的資料,每個位的含義都是一樣的。需要注意的是,對于自定義的報告描述符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)

滑鼠、鍵盤和遊戲杆等用途第一包含于通用桌面用途頁。

HID用圖表大綱HID用途表大綱

7.1.1 鍵盤用途

HID_Usage_Tables.pdf從53頁開始。定義了各個按鍵的用途ID。用到的時候,直接查表。

第一列:用途ID(十進制)  第二列:用途ID(十六進制) 第三列:按鍵名稱

HID用圖表大綱HID用途表大綱

7.1.2 滑鼠用途

滑鼠用途看懂官方例子即可,開發很少用到。

7.2 LED燈用途頁0x08(LED)

LED訓示燈常用的ID如下圖。

HID用圖表大綱HID用途表大綱

 包括标準鍵盤上的大小寫LED訓示燈,以及一些通信裝置(電話裝置)的LED訓示燈等。

7.3 按鍵用途頁(Button)

詳見P67.

7.4 電話通訊裝置用途頁0x0B(Telephony)

這個用途頁定義了電話裝置的按鍵和控制用法。需要注意的是,在很多情況下用途的定義是含糊不清的,這是因為我們假定控制跟電話系統的軟體實作相關。比如,軟體可以實作暫停,且在對方挂機之前,保持通信通路是打開狀态的。而另一種實作是允許使用者挂斷,然後目标号碼滿足通信條件的時候回撥。是以,就需要統一用途的定義,使其在不同的廠商中接口能一緻,進而在處理新的或多個系統時最大限度地減少學習曲線和挫折感。

電話裝置上的訓示燈使用LED用途來實作。HID_Usage_Tables.pdf 頁碼:P69

7.4.1 部分用途ID

HID用圖表大綱HID用途表大綱

 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的通用鍵盤,電話鍵盤集合包含電話鍵盤選擇器的用法。

手機鍵盤的定義與普通桌面用途頁定義的鍵盤是不相同的。因為它獨特的按鍵标記。所有手機按鍵的使用都由選擇器定義。按鍵定義如下:

HID用圖表大綱HID用途表大綱

 鍵值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類相關文檔和工具