HID 報告描述

https://blog.csdn.net/skdev/article/details/48528293

HID報告描述

1報告描述簡介

 報告說明,即上報事件的描述,描述所支持事件的格式及取值意義,比如鼠標按鍵上報格式,左鍵右鍵中間鍵分別對應的值等;報告描述跟JSON有些類似,都是結構數據,格式類似{usage:1,{id:0,用法:1.1,大小:1,count:1,min:0,max:5,format:xx}}

2描述符結構

幾個主要的名詞解釋一下:

收集,集合,相當於{},用來包含一組描述;收藏有應用和物理之分,應用表示大項,裏有可以有很多物理子項

報告,報告,在上圖中只是一個ID號,來區分不同的報告。

主要項目,主項,出出哪些項

報告大小,每一項有多少位。

Report Count,總共有多少項

Logical Minimum,每個項的取值範圍中的最小值,即最小隻能取的值。

Logical Maximum,每個項的取值範圍中的最大值,即最大隻能取的值。

使用方法,用途,表示有哪些功能,一個使用代表一個功能。

 

一項描述基本上是由兩個字節構成,第一個字節表示名稱,第二個字節表示值,

如報告大小,8

報告大小是名稱,8是它的值。

Report Size對應的16制數據是0x75,在代碼裏上面的表現是0x75,0x08。

 

有些名稱不需要帶值,如Collection的結束符())爲0xC0,就沒有第二個字節。

3名稱

名稱有分長字和短字,這裏只介紹短字,短字是由一個字節構成,結構如下:

第3〜2位表示類型,有如下幾種:

0 =主要

1 =全球

2 =本地

3 =保留

 

第1〜0位表示名稱的值由多少個字節構成,具體意義如下:

0 = 0字節,名稱後面不帶值

1 = 1個字節,名稱後面帶1個值

2 = 2個字節,名稱後面帶2個值

3 = 4個字節,名稱後面帶4個值

 

第7~4位表示Tag,Tag與類型對應,每種類型有很多不同的Tag。

3.1 Main類對應的Tag

 

在上面表格中,可以看到,第3~2位是00,這兩位是bType值,00表示類型爲Main;nn是第1~0位,是bSize,表示數值的字節數;第7~4位是bTag,如1000(0x8?)表示Input;Valid Data表示值的意義,如Input項,Bit 0   {Data(0) | Constant(1)},意思是說,如果值的第0位的是0,即表示Data,如果是1,則表示Constant,如下語句:

0x81, 0x02,  //   Input: (Data,Variable, Absolute)

它的值是2,第0位是0對應的是Data,第1位是1 對應的是Variable,第二位是0對應的是Absolute,所以它是一個Data、Variable、 Absolute的類型。

 

下面對Data、Variable等的意思作一下解釋。

Data        表示是一個可寫的數據。

Constant  表示是一個只讀的數據。

Aarray    表示數據裏的值代表一個Usage,Report Size表示位數,即Report Size的存儲單元裏的值是Usage的Index。Report Count一般爲1,如果大於則表示可以同時出現多個Usage.

Variable   則是一個Report Size存儲單元表示一個Usage,其值表示Usage的狀態;Report Size表示位數,Report Count表示長度。

Absolute  表示絕對數據,如觸模屏數據,便使用Absolute。

Relative   表示相對數據,如鼠標數據,便使用Relative。

其也用的少就不多說了,詳細參看《HID協議》。

3.2 Global類對應的Tag


在上面表格中,可以看到,第3~2位是01,這兩位是bType值,01表示類型爲Global;nn是第1~0位,是bSize,表示數值的字節數;第7~4位是bTag,如0000(0x0?)表示Usage Page。

3.3 Local類對應的Tag


在上面表格中,可以看到,第3~2位是10,這兩位是bType值,10表示類型爲Local;nn是第1~0位,是bSize,表示數值的字節數;第7~4位是bTag,如0000(0x0?)表示Usage。

4 樣例解讀

下面是一個僞代碼描述的樣例,其中涉及到的頁碼可查看第5段用途表:

Usage Page (Generic Desktop), //定位到Generic Desktop頁,這個相當於指針跳轉一樣的東西

Usage (Mouse), //指定Generic Desktop裏的mouse,表示這是一個鼠標

Collection (Application), // Collection Application,是對Mouse的解釋

Usage(Pointer), //表示指針形式

Collection (Physical), // CollectionPhysical,是對Pointer的解釋

ReportID (0A), //id爲0x0A的報告

Usage(X), Usage (Y), //上報X,Y兩個數據

LogicalMinimum (-127), ;Report data values range from -127

LogicalMaximum (127), ;to 127 //X,Y的取值範圍是-127~127

ReportSize (8), Report Count (2), //總共要上報2個字節,即x一個字節,y一個字節

Input(Data, Variable, Relative), //將X,Y這兩個字節添加到0x0A的報告裏,且這兩個值是可寫並且是相對的

LogicalMinimum (0), ;

LogicalMaximum (1), ;//下面Button的取值範圍是0~1

ReportSize (1), Report Count (3), //3個1位的數據

UsagePage (Button Page),//是一個BUTTON

UsageMinimum (1),

Usage Maximum (3),//共有BUTTON1~BUTTON3,即總共有3個BUTTON

Input(Data, Variable, Absolute),//將3個分別代表的BUTTON1,BUTTON2,BUTTON3的位添加到0x0A的報告

ReportSize (5),

Input(Constant), //增加5個無效的位與上面3位湊成一個字節

EndCollection,

End Collection

 

綜上所示,上面樣例所表達的意思就是下圖所示的:

 

再舉一個實際的例子進行解讀,下面是摘自TI CC2540/CC2541 SDK裏的BLE-CC254x_v1.4.0\Projects\ble\Profiles\HIDDevKbM\hidkbmservice.c

static CONST uint8 hidReportMap[] =

{

  0x05, 0x01,  // UsagePage (Generic Desktop)

  0x09, 0x02, // Usage (Mouse)

  0xA1, 0x01, // Collection (Application)

  0x85, 0x01, // Report Id (1)

  0x09, 0x01, //   Usage (Pointer)

  0xA1, 0x00, //   Collection (Physical)

  0x05, 0x09, //     Usage Page (Buttons)

  0x19, 0x01, //     Usage Minimum (01) -Button 1

  0x29, 0x03, //     Usage Maximum (03) -Button 3

  0x15, 0x00, //     Logical Minimum (0)

  0x25, 0x01, //     Logical Maximum (1)

  0x75, 0x01, //     Report Size (1)

  0x95, 0x03, //     Report Count (3)

  0x81, 0x02, //     Input (Data, Variable,Absolute) - Button states

  0x75, 0x05, //     Report Size (5)

  0x95, 0x01, //     Report Count (1)

  0x81, 0x01, //     Input (Constant) - Paddingor Reserved bits

  0x05, 0x01,  //     Usage Page (GenericDesktop)

  0x09, 0x30, //     Usage (X)

  0x09, 0x31, //     Usage (Y)

  0x09, 0x38, //     Usage (Wheel)

  0x15, 0x81, //     Logical Minimum (-127)

  0x25, 0x7F, //     Logical Maximum (127)

  0x75, 0x08, //     Report Size (8)

  0x95, 0x03, //     Report Count (3)

  0x81, 0x06, //     Input (Data, Variable,Relative) - X & Y coordinate

  0xC0,       //   End Collection

  0xC0,       // End Collection

 

  0x05, 0x01,  // UsagePg (Generic Desktop)

  0x09, 0x06, // Usage (Keyboard)

  0xA1, 0x01, // Collection: (Application)

  0x85, 0x02, // Report Id (2)

               //

  0x05, 0x07, //   Usage Pg (Key Codes)

  0x19, 0xE0, //   Usage Min (224)

  0x29, 0xE7, //   Usage Max (231)

  0x15, 0x00, //   Log Min (0)

  0x25, 0x01, //   Log Max (1)

               //

               //   Modifier byte

  0x75, 0x01, //   Report Size (1)

  0x95, 0x08, //   Report Count (8)

  0x81, 0x02, //   Input: (Data, Variable,Absolute)

               //

               //   Reserved byte

  0x95, 0x01, //   Report Count (1)

  0x75, 0x08, //   Report Size (8)

  0x81, 0x01, //   Input: (Constant)

               //

               //   LED report

  0x95, 0x05, //   Report Count (5)

  0x75, 0x01, //   Report Size (1)

  0x05, 0x08, //   Usage Pg (LEDs)

  0x19, 0x01, //   Usage Min (1)

  0x29, 0x05, //   Usage Max (5)

  0x91, 0x02, //   Output: (Data, Variable,Absolute)

               //

               //   LED report padding

  0x95, 0x01, //   Report Count (1)

  0x75, 0x03, //   Report Size (3)

  0x91, 0x01, //   Output: (Constant)

               //

               //   Key arrays (6 bytes)

  0x95, 0x06, //   Report Count (6)

  0x75, 0x08, //   Report Size (8)

  0x15, 0x00, //   Log Min (0)

  0x25, 0x65, //   Log Max (101)

  0x05, 0x07, //   Usage Pg (Key Codes)

  0x19, 0x00, //   Usage Min (0)

  0x29, 0x65, //   Usage Max (101)

  0x81, 0x00, //   Input: (Data, Array)

               //

  0xC0,       // End Collection

               //

  0x05, 0x0C,   // Usage Pg (Consumer Devices)

  0x09, 0x01,   // Usage (Consumer Control)

  0xA1, 0x01,   // Collection (Application)

  0x85, 0x03,   // Report Id (3)

  0x09, 0x02,   //   Usage (Numeric KeyPad)

  0xA1, 0x02,   //   Collection (Logical)

  0x05, 0x09,   //     Usage Pg (Button)

  0x19, 0x01,   //     Usage Min (Button1)

  0x29, 0x0A,   //     Usage Max (Button10)

  0x15, 0x01,   //     Logical Min (1)

  0x25, 0x0A,   //     Logical Max (10)

  0x75, 0x04,   //     Report Size (4)

  0x95, 0x01,   //     Report Count (1)

  0x81, 0x00,   //     Input (Data, Ary,Abs)

  0xC0,         //   End Collection

  0x05, 0x0C,   //   Usage Pg (ConsumerDevices)

  0x09, 0x86,   //   Usage (Channel)

  0x15, 0xFF,   //   Logical Min (-1)

  0x25, 0x01,   //   Logical Max (1)

  0x75, 0x02,   //   Report Size (2)

  0x95, 0x01,   //   Report Count (1)

  0x81, 0x46,   //   Input (Data, Var,Rel, Null)

  0x09, 0xE9,   //   Usage (Volume Up)

  0x09, 0xEA,   //   Usage (Volume Down)

  0x15, 0x00,   //   Logical Min (0)

  0x75, 0x01,   //   Report Size (1)

  0x95, 0x02,   //   Report Count (2)

  0x81, 0x02,   //   Input (Data, Var,Abs)

  0x09, 0xE2,   //   Usage (Mute)

  0x09, 0x30,   //   Usage (Power)

  0x09, 0x40,   //   Usage (Menu) 

  0x09, 0xB1,   //   Usage (Pause)

  0x09, 0xB2,   //   Usage (Record)

  0x0a, 0x23, 0x02,   //   Usage (Home)

  0x0a, 0x24, 0x02,   //   Usage (Back)

  0x09, 0xB3,   //   Usage (Fast Forward)

  0x09, 0xB4,   //   Usage (Rewind)

  0x09, 0xB5,   //   Usage (Scan Next)

  0x09, 0xB6,   //   Usage (Scan Prev)

  0x09, 0xB7,   //   Usage (Stop)

  0x15, 0x01,   //   Logical Min (1)

  0x25, 0x0C,   //   Logical Max (12)

  0x75, 0x04,   //   Report Size (4)

  0x95, 0x01,   //   Report Count (1)

  0x81, 0x00,   //   Input (Data, Ary,Abs)

  0x09, 0x80,   //   Usage (Selection)

  0xA1, 0x02,   //   Collection (Logical)

  0x05, 0x09,   //     Usage Pg (Button)

  0x19, 0x01,   //     Usage Min (Button1)

  0x29, 0x03,   //     Usage Max (Button3)

  0x15, 0x01,   //     Logical Min (1)

  0x25, 0x03,   //     Logical Max (3)

  0x75, 0x02,   //     Report Size (2)

  0x81, 0x00,   //     Input (Data, Ary,Abs)

  0xC0,         //   End Collection

  0x81, 0x03,   //   Input (Const, Var,Abs)

  0xC0        // End Collection

};

 

上面用紅藍綠區分出三大應用功能,分別鼠標、鍵盤和Consumer,每個應用功能都是用Collection Application括起來的。

 

我們先來解析鼠標的報告描述:

0x05,0x01,  // Usage Page (Generic Desktop)

0x04代表是Global類的Usage Page功能,最位2位表示帶多少個字節的數據,因爲只帶1 個數據,所以是1,跟0x04組合起來就是0x05了。其他名稱的意思都差不多,數值可以參照上面的《3名稱》

  0x09, 0x02, // Usage (Mouse)

  表示這是一個鼠標, Usage是爲了給對方解析數據時有個參照

  0xA1, 0x01, // Collection (Application)

  0xA1, 0x01 表示Collection Application ; 0xA1,0x00表示CollectionPhysical.

  表示下面所包含的是對Mouse的解釋

  0x85, 0x01, // Report Id (1)

  該報告對應的ID是1

  0x09, 0x01, //   Usage (Pointer)

  這是個指針形式

  0xA1, 0x00, //   Collection (Physical)

  下面所包含的是對指針的解釋

  0x05, 0x09, //     Usage Page (Buttons)

  下面定義的是按鍵

  0x19, 0x01, //     Usage Minimum (01) -Button 1

  0x29, 0x03, //     Usage Maximum (03) -Button 3

  總共有3個按鍵

  0x15, 0x00, //     Logical Minimum (0)

  0x25, 0x01, //     Logical Maximum (1)

  按鍵的值是0和1,表示放開和按下

  0x75, 0x01, //     Report Size (1)

  0x95, 0x03, //     Report Count (3)

  有3個1位,即用3bits分別對應三個按鍵

  0x81, 0x02, //     Input (Data, Variable,Absolute) - Button states

  將這三個位加入本報告的數據中,這三位是可讀寫的絕對值

  0x75, 0x05, //     Report Size (5)

  0x95, 0x01, //     Report Count (1)

  定義1個5位的數據

  0x81, 0x01, //     Input (Constant) - Paddingor Reserved bits

  將這個數據添加到本報告的數據中,主要是與前面3位組成一個字節,這5位是Constant數據

  0x05, 0x01, //     Usage Page (Generic Desktop)

  0x09, 0x30, //     Usage (X)

  0x09, 0x31, //     Usage (Y)

  0x09, 0x38, //     Usage (Wheel)

  下面定義的是X,Y,Wheel三個功能

  0x15, 0x81, //     Logical Minimum (-127)

  0x25, 0x7F, //     Logical Maximum (127)

  X,Y,Wheel的取值範圍是-127~127

  0x75, 0x08, //     Report Size (8)

  0x95, 0x03, //     Report Count (3)

  用三個字節來表示x,y,wheel

  0x81, 0x06, //     Input (Data, Variable,Relative) - X & Y coordinate

  將這三個字節添加到本報告中

  0xC0,       //   End Collection

  0xC0,       // End Collection

上面解析出來的數據格式如下:

我們來看一下,如果要發一個鼠標的座標,該如何發:

static void hidEmuKbdSendMouseReport( uint8buttons )

{

 uint8 buf[HID_MOUSE_IN_RPT_LEN];

 

 buf[0] = buttons;   // Buttons

 buf[1] = 0;         // X

 buf[2] = 0;         // Y

 buf[3] = 0;         // Wheel

 

 HidDev_Report( HID_RPT_ID_MOUSE_IN, HID_REPORT_TYPE_INPUT,

                 HID_MOUSE_IN_RPT_LEN, buf );

}

從上面函數可以看到,X,Y在第2、3個字節,結合上面的數據格式圖可以看出,正好是對應的。

 

我們接着解析鍵盤的報告描述:

0x05,0x01,  // Usage Pg (Generic Desktop)

  0x09, 0x06, // Usage (Keyboard)

  這是一個鍵盤

  0xA1, 0x01, // Collection: (Application)

  0x85, 0x02, // Report Id (2)

  本報告的ID是2

  0x05, 0x07, //   Usage Pg (Key Codes)

  下面定義的是按鍵碼

  0x19, 0xE0, //   Usage Min (224)

  0x29, 0xE7, //   Usage Max (231)

  按鍵碼分別是224~231,共總有8個按鍵碼

  0x15, 0x00, //   Log Min (0)

  0x25, 0x01, //   Log Max (1)

  按鍵碼的值是0和1,分別代表放開和按下

               //   Modifier byte

  0x75, 0x01, //   Report Size (1)

  0x95, 0x08, //   Report Count (8)

  用8個bit分別表示8個按鍵的狀態

  0x81, 0x02, //   Input: (Data, Variable,Absolute)

  將這8個bit添加到本報告中

               //   Reserved byte

  0x95, 0x01, //   Report Count (1)

  0x75, 0x08, //   Report Size (8)

  0x81, 0x01, //   Input: (Constant)

  另外再預留8個bit備用,暫時沒用

               //   LED report

  0x95, 0x05, //   Report Count (5)

  0x75, 0x01, //   Report Size (1)

  定義5個1bit

  0x05, 0x08, //   Usage Pg (LEDs)

  這是LED

  0x19, 0x01, //   Usage Min (1)

  0x29, 0x05, //   Usage Max (5)

  5個bit分別對應LED1~LED5

  0x91, 0x02, //   Output: (Data, Variable,Absolute)

  將這5個bit添加到本報告中,LED需要作爲OUT

               //

               //   LED report padding

  0x95, 0x01, //   Report Count (1)

  0x75, 0x03, //   Report Size (3)

  0x91, 0x01, //   Output: (Constant)

  再增加3個bit,與上面5個bit組成一個字節

               //

               //   Key arrays (6 bytes)

  0x95, 0x06, //   Report Count (6)

  0x75, 0x08, //   Report Size (8)

  定義6個字節

  0x15, 0x00, //   Log Min (0)

  0x25, 0x65, //   Log Max (101)

  每個字節的取值範圍是0~101

  0x05, 0x07, //   Usage Pg (Key Codes)

  這個也是鍵盤碼

  0x19, 0x00, //   Usage Min (0)

  0x29, 0x65, //   Usage Max (101)

  分別是鍵盤碼0~鍵盤碼101

  0x81, 0x00, //   Input: (Data, Array)

  將這6個字節添加到本報告中,表示同時可產生6個鍵值。

  0xC0,       // End Collection

上面解析出來的數據格式如下:

Input和Out是不同的兩條通道。現在我們來看一下,如果要發一個按鍵K0~K101,需要怎麼發,如下:

static void hidEmuKbdSendReport( uint8keycode )

{

 uint8 buf[HID_KEYBOARD_IN_RPT_LEN];

 

 buf[0] = 0;         // Modifierkeys

 buf[1] = 0;         // Reserved

 buf[2] = keycode;   // Keycode 1

 buf[3] = 0;         // Keycode 2

 buf[4] = 0;         // Keycode 3

 buf[5] = 0;         // Keycode 4

 buf[6] = 0;         // Keycode 5

 buf[7] = 0;         // Keycode 6

 

 HidDev_Report( HID_RPT_ID_KEY_IN, HID_REPORT_TYPE_INPUT,

                HID_KEYBOARD_IN_RPT_LEN, buf );

}

上面函數可以看到,它是放在第3個字節,結合數據格式圖可以看出,第3個字節開始,剛好是在K0~K101的按鍵區。

 

我們最後來解析Consumer的報告描述:

0x05,0x0C,   // Usage Pg (Consumer Devices)

  0x09, 0x01,   // Usage (Consumer Control)

  這是個Consumer控制

  0xA1, 0x01,   // Collection (Application)

  0x85, 0x03,   // Report Id (3)

  本報告ID爲3

  0x09, 0x02,   //   Usage (Numeric KeyPad)

  下面定義的是數字鍵盤

  0xA1, 0x02,   //   Collection (Logical)

  0x05, 0x09,   //     Usage Pg (Button)

  下面定義的是按鍵

  0x19, 0x01,   //     Usage Min (Button1)

  0x29, 0x0A,   //     Usage Max (Button10)

  分別是Button1~Button10

  0x15, 0x01,   //     Logical Min (1)

  0x25, 0x0A,   //     Logical Max (10)

  每個按鍵的取值範圍爲1~10

  0x75, 0x04,   //     Report Size (4)

  0x95, 0x01,   //     Report Count (1)

  1個4bit的值,來表示鍵值1~10,這個值是哪個就表示哪個鍵按下。

  0x81, 0x00,   //     Input (Data, Ary, Abs)

  將這4bit添加到本報告中

  0xC0,         //   End Collection

  0x05, 0x0C,   //   Usage Pg (ConsumerDevices)

  0x09, 0x86,   //   Usage (Channel)

  這裏定義的是頻道

  0x15, 0xFF,   //   Logical Min (-1)

  0x25, 0x01,   //   Logical Max (1)

  頻道值範圍是-1~1,這裏應該只用到-1和1,表示頻道+和-

  0x75, 0x02,   //   Report Size (2)

  0x95, 0x01,   //   Report Count (1)

  用一個2bit來表示,第1個bit表示頻道+,第二個表示頻道-

  0x81, 0x46,   //   Input (Data, Var,Rel, Null)

  將這個2bit加到本報告中

  0x09, 0xE9,   //   Usage (Volume Up)

  0x09, 0xEA,   //   Usage (Volume Down)

  定義兩個按鍵,音量加和音量減

  0x15, 0x00,   //   Logical Min (0)

  按鍵值爲0~1,這裏少了LogicalMax,繼承上面的LogicalMax=1

  0x75, 0x01,   //   Report Size (1)

  0x95, 0x02,   //   Report Count (2)

  定義2個1bit,每個bit代表一個鍵

  0x81, 0x02,   //   Input (Data, Var,Abs)

  將2個1bit添加到本報告中

  0x09, 0xE2,   //   Usage (Mute)

  0x09, 0x30,   //   Usage (Power)

  0x09, 0x40,   //   Usage (Menu) 

  0x09, 0xB1,   //   Usage (Pause)

  0x09, 0xB2,   //   Usage (Record)

  0x0a, 0x23, 0x02,   //   Usage (Home)

  0x0a, 0x24, 0x02,   //   Usage (Back)

  0x09, 0xB3,   //   Usage (Fast Forward)

  0x09, 0xB4,   //   Usage (Rewind)

  0x09, 0xB5,   //   Usage (Scan Next)

  0x09, 0xB6,   //   Usage (Scan Prev)

  0x09, 0xB7,   //   Usage (Stop)

  定義12個按鍵

  0x15, 0x01,   //   Logical Min (1)

  0x25, 0x0C,   //   Logical Max (12)

  0x75, 0x04,   //   Report Size (4)

  0x95, 0x01,   //   Report Count (1)

  用一個4位來存儲1~12,1表示Mute … 12表示Stop

  0x81, 0x00,   //   Input (Data, Ary,Abs)

  將這個4bit添加到報告中

  0x09, 0x80,   //   Usage (Selection)

  0xA1, 0x02,   //   Collection (Logical)

  0x05, 0x09,   //     Usage Pg (Button)

  這是按鍵

  0x19, 0x01,   //     Usage Min (Button1)

  0x29, 0x03,   //     Usage Max (Button3)

  分別是Button1~Button3

  0x15, 0x01,   //     Logical Min (1)

  0x25, 0x03,   //     Logical Max (3)

  每個按鍵取值範圍是1~3

  0x75, 0x02,   //     Report Size (2)

  這裏缺少了Report Count,繼承上面的Report Count =1,也就是用1個2bit來存儲1~3

  0x81, 0x00,   //     Input (Data, Ary,Abs)

  將1個字節添加到本報告中

  0xC0,         //   End Collection

  0x81, 0x03,   //   Input (Const, Var,Abs)

  再補充2個bit將上面的湊成一個字節,ReportSize=2和Report Count=1繼承上面的。

  0xC0        // End Collection

 

修改後,解析出來的數據格式如下:

我們來看一下,如果要發音量+/-鍵該怎麼發:

static void hidCCSendReport( uint8 cmd,bool keyPressed )

{

  //Only send the report if something meaningful to report

 

 uint8 buf[HID_CC_IN_RPT_LEN] = { 0, 0 };

 

  //No need to include Report Id

  if( keyPressed )

  {

   hidCCBuildReport( buf, cmd );

  }

 

 HidDev_Report( HID_RPT_ID_CC_IN, HID_REPORT_TYPE_INPUT,

                 HID_CC_IN_RPT_LEN, buf );

}

在hidCCBuildReport對音量加減解析出來是:

音量加是:buf[0] =0x40, buf[1] = 0x00

音量減是:buf[0] =0x80, buf[1] = 0x00

正好與數據格式圖中第一個字節的第6位和第7位相對應。

5 用途表

下面用途表中列了幾個常用的表,其他詳細請參看《HID用途表》

Usage Page

Page ID

Page Name

0

Undefined

1

Generic Desktop Controls

2

Simulation Controls

3

VR Controls

4

Sport Controls

5

Game Controls

6

Generic Device Controls

7

Keyboard/Keypad

8

LEDs

9

Button

0A

Ordinal

0B

Telephony

0C

Consumer

0D

Digitizer

0E

Reserved

0F

PID Page

10

Unicode

11-13

Reserved

14

Alphanumeric Display

15-3f

Reserved

40

Medical Instruments

41-7F

Reserved

80-83

Monitor pages

84-87

Power pages

88-8B

Reserved

8C

Bar Code Scanner page

8D

Scale page

8E

Magnetic Stripe Reading (MSR) Devices

8F

Reserved Point of Sale pages

 

Generic Desktop Page(0x01)

Usage ID

Usage Name

0

Undefined

1

Pointer

2

Mouse

3

Reserved

4

Joystick

5

Game Pad

6

Keyboard

7

Keypad

8

Multi-axis Controller

9

Tablet PC System Controls

0A-2F

Reserved

30

X

31

Y

32

Z

33

Rx

34

Ry

35

Rz

36

Slider

37

Dial

38

Wheel

39

Hat switch

3A

Counted Buffer

3B

Byte Count

3C

Motion Wakeup

3D

Start OOC

3E

Select OOC

3F

Reserved

40

Vx

41

Vy

42

Vz

43

Vbrx

44

Vbry

45

Vbrz

46

Vno

47

Feature Notification

48

Resolution Multiplier

49-7F

Reserved

80

System Control

81

System Power Down

82

System Sleep

83

System Wake Up

84

System Context Menu

85

System Main Menu

86

System App Menu

87

System Menu Help

88

System Menu Exit

89

System Menu Select

8A

System Menu Right

8B

System Menu Left

8C

System Menu Up

8D

System Menu Down

8E

System Cold Restart

8F

System Warm Restart

90

D-pad Up

91

D-pad Down

92

D-pad Right

93

D-pad Left

94-9F

Reserved

A0

System Dock

A1

System Undock

A2

System Setup

A3

System Break

A4

System Debugger Break

A5

Application Break

A6

Application Debugger Break

A7

System Speaker Mute

A8

System Hibernate

A9-AF

Reserved

B0

System Display Invert

B1

System Display Internal

B2

System Display External

B3

System Display Both

B4

System Display Dual

B5

System Display Toggle Int/Ext

B6

System Display Swap rimary/Secondary

B7

System Display LCD Autoscale

B8-FFFF

Reserved

 

Keyboard/Keypad Page(0x07)

Usage ID
(Dec)

Usage ID
(Hex)

Usage Name

01

01

Keyboard ErrorRollOver9

02

02

Keyboard POSTFail9

03

03

Keyboard ErrorUndefined9

04

04

Keyboard a and A4

05

05

Keyboard b and B

06

06

Keyboard c and C4

07

07

Keyboard d and D

08

08

Keyboard e and E

09

09

Keyboard f and F

10

0A

Keyboard g and G

11

0B

Keyboard h and H

12

0C

Keyboard i and I

13

0D

Keyboard j and J

14

0E

Keyboard k and K

15

0F

Keyboard l and L

16

10

Keyboard m and M4

17

11

Keyboard n and N

18

12

Keyboard o and O4

19

13

Keyboard p and P4

20

14

Keyboard q and Q4

21

15

Keyboard r and R

22

16

Keyboard s and S4

23

17

Keyboard t and T

24

18

Keyboard u and U

25

19

Keyboard v and V

26

1A

Keyboard w and W4

27

1B

Keyboard x and X4

28

1C

Keyboard y and Y4

29

1D

Keyboard z and Z4

30

1E

Keyboard 1 and !4

31

1F

Keyboard 2 and @4

32

20

Keyboard 3 and #4

33

21

Keyboard 4 and $4

34

22

Keyboard 5 and %4

35

23

Keyboard 6 and ^4

36

24

Keyboard 7 and &4

37

25

Keyboard 8 and *4

38

26

Keyboard 9 and (4

39

27

Keyboard 0 and )4

40

28

Keyboard Return (ENTER)5

41

29

Keyboard ESCAPE

42

2A

Keyboard DELETE (Backspace)13

43

2B

Keyboard Tab

44

2C

Keyboard Spacebar

45

2D

Keyboard - and (underscore)4

46

2E

Keyboard = and +4

47

2F

Keyboard [ and {4

48

30

Keyboard ] and }4

49

31

Keyboard \ and |

50

32

Keyboard Non-US # and ~2

51

33

Keyboard ; and :4

52

34

Keyboard ‘ and 「4

53

35

Keyboard Grave Accent and Tilde4

54

36

Keyboard, and <4

55

37

Keyboard . and >4

56

38

Keyboard / and ?4

57

39

Keyboard Caps Lock11

58

3A

Keyboard F1

59

3B

Keyboard F2

60

3C

Keyboard F3

61

3D

Keyboard F4

62

3E

Keyboard F5

63

3F

Keyboard F6

64

40

Keyboard F7

65

41

Keyboard F8

66

42

Keyboard F9

67

43

Keyboard F10

68

44

Keyboard F11

69

45

Keyboard F12

70

46

Keyboard PrintScreen1

71

47

Keyboard Scroll Lock11

72

48

Keyboard Pause1

73

49

Keyboard Insert1

74

4A

Keyboard Home1

75

4B

Keyboard PageUp1

76

4C

Keyboard Delete Forward1

77

4D

Keyboard End1

78

4E

Keyboard PageDown1

79

4F

Keyboard RightArrow1

80

50

Keyboard LeftArrow1

81

51

Keyboard DownArrow1

82

52

Keyboard UpArrow1

83

53

Keypad Num Lock and Clear11

84

54

Keypad /1

85

55

Keypad *

86

56

Keypad -

87

57

Keypad +

88

58

Keypad ENTER5

89

59

Keypad 1 and End

90

5A

Keypad 2 and Down Arrow

91

5B

Keypad 3 and PageDn

92

5C

Keypad 4 and Left Arrow

93

5D

Keypad 5

94

5E

Keypad 6 and Right Arrow

95

5F

Keypad 7 and Home

96

60

Keypad 8 and Up Arrow

97

61

Keypad 9 and PageUp

98

62

Keypad 0 and Insert

99

63

Keypad . and Delete

100

64

 Keyboard Non-US \ and |3;6

56

38

Keyboard / and ?4

57

39

Keyboard Caps Lock11

58

3A

Keyboard F1

59

3B

Keyboard F2

60

3C

Keyboard F3

61

3D

Keyboard F4

62

3E

Keyboard F5

63

3F

Keyboard F6

64

40

Keyboard F7

65

41

Keyboard F8

66

42

Keyboard F9

67

43

Keyboard F10

68

44

Keyboard F11

69

45

Keyboard F12

70

46

Keyboard PrintScreen1

71

47

Keyboard Scroll Lock11

72

48

Keyboard Pause1

73

49

Keyboard Insert1

74

4A

Keyboard Home1

75

4B

Keyboard PageUp1

76

4C

Keyboard Delete Forward1

77

4D

Keyboard End1

78

4E

Keyboard PageDown1

79

4F

Keyboard RightArrow1

80

50

Keyboard LeftArrow1

81

51

Keyboard DownArrow1

82

52

Keyboard UpArrow1

83

53

Keypad Num Lock and Clear11

84

54

Keypad /1

85

55

Keypad *

86

56

Keypad -

87

57

Keypad +

88

58

Keypad ENTER5

89

59

Keypad 1 and End

90

5A

Keypad 2 and Down Arrow

91

5B

Keypad 3 and PageDn

92

5C

Keypad 4 and Left Arrow

93

5D

Keypad 5

94

5E

Keypad 6 and Right Arrow

95

5F

Keypad 7 and Home

96

60

Keypad 8 and Up Arrow

97

61

Keypad 9 and PageUp

98

62

Keypad 0 and Insert

99

63

Keypad . and Delete

100

64

 Keyboard Non-US \ and |3;6

101

65

 Keyboard Application10

102

66

 Keyboard Power

103

67

 Keypad =

104

68

 Keyboard F13

相關文章
相關標籤/搜索