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

101

65

 Keyboard Application10

102

66

 Keyboard Power

103

67

 Keypad =

104

68

 Keyboard F13

105

69

 Keyboard F14

106

6A

 Keyboard F15

107

6B

 Keyboard F16

108

6C

 Keyboard F17

109

6D

 Keyboard F18

110

6E

 Keyboard F19

111

6F

 Keyboard F20

112

70

 Keyboard F21

113

71

 Keyboard F22

114

72

 Keyboard F23

115

73

 Keyboard F24

116

74

 Keyboard Execute

117

75

 Keyboard Help

118

76

 Keyboard Menu

119

77

 Keyboard Select

120

78

 Keyboard Stop

121

79

 Keyboard Again

122

7A

 Keyboard Undo

123

7B

 Keyboard Cut

124

7C

 Keyboard Copy

125

7D

 Keyboard Paste

126

7E

 Keyboard Find

127

7F

 Keyboard Mute

128

80

 Keyboard Volume Up

129

81

 Keyboard Volume Down

130

82

 Keyboard Locking Caps Lock12

131

83

 Keyboard Locking Num Lock12

132

84

 Keyboard Locking Scroll Lock12

133

85

 Keypad Comma27

134

86

 Keypad Equal Sign29

135

87

 Keyboard International115,28

136

88

 Keyboard International216

137

89

 Keyboard International317

138

8A

 Keyboard International418

139

8B

 Keyboard International519

140

8C

 Keyboard International620

141

8D

 Keyboard International721

142

8E

 Keyboard International822

143

8F

 Keyboard International922

144

90

 Keyboard LANG125

145

91

 Keyboard LANG226

146

92

 Keyboard LANG330

147

93

 Keyboard LANG431

148

94

 Keyboard LANG532

149

95

 Keyboard LANG68

150

96

 Keyboard LANG78

151

97

 Keyboard LANG88

152

98

 Keyboard LANG98

153

99

 Keyboard Alternate Erase7

154

9A

 Keyboard SysReq/Attention1

155

9B

 Keyboard Cancel

156

9C

 Keyboard Clear

157

9D

 Keyboard Prior

158

9E

 Keyboard Return

159

9F

 Keyboard Separator

160

A0

 Keyboard Out

161

A1

 Keyboard Oper

162

A2

 Keyboard Clear/Again

163

A3

 Keyboard CrSel/Props

164

A4

 Keyboard ExSel

165-175

A5-CF

5 A5-CF Reserved

176

B0

 Keypad 00

177

B1

 Keypad 000

178

B2

 Thousands Separator 33

179

B3

 Decimal Separator 33

180

B4

 Currency Unit 34

181

B5

 Currency Sub-unit 34

182

B6

 Keypad (

183

B7

 Keypad )

184

B8

 Keypad {

185

B9

 Keypad }

186

BA

 Keypad Tab

187

BB

 Keypad Backspace

188

BC

 Keypad A

189

BD

 Keypad B

190

BE

 Keypad C

191

BF

 Keypad D

192

C0

 Keypad E

193

C1

 Keypad F

194

C2

 Keypad XOR

195

C3

 Keypad ^

196

C4

 Keypad %

197

C5

 Keypad <

198

C6

 Keypad >

199

C7

 Keypad &

200

C8

 Keypad &&

201

C9

 Keypad |

202

CA

 Keypad ||

203

CB

 Keypad :

204

CC

 Keypad #

205

CD

 Keypad Space

206

CE

 Keypad @

207

CF

 Keypad !

208

D0

 Keypad Memory Store

209

D1

 Keypad Memory Recall

210

D2

 Keypad Memory Clear

211

D3

 Keypad Memory Add

212

D4

 Keypad Memory Subtract

213

D5

 Keypad Memory Multiply

214

D6

 Keypad Memory Divide

215

D7

 Keypad +/-

216

D8

 Keypad Clear

217

D9

 Keypad Clear Entry

218

DA

 Keypad Binary

219

DB

 Keypad Octal

220

DC

 Keypad Decimal

221

DD

 Keypad Hexadecimal

222

22

3 DE-DF Reserved

224

E0

 Keyboard LeftControl

225

E1

 Keyboard LeftShift

226

E2

 Keyboard LeftAlt

227

E3

 Keyboard Left GUI10;23

228

E4

 Keyboard RightControl

229

E5

 Keyboard RightShift

230

E6

 Keyboard RightAlt

231

E7

 Keyboard Right GUI10;24

 

LED Usage Page(0x08)

Usage ID
(Hex)

Usage Name

00

Undefined

01

Num Lock

02

Caps Lock

03

Scroll Lock

04

Compose

05

Kana

06

Power

07

Shift

08

Do Not Disturb

09

Mute

0A

Tone Enable

0B

High Cut Filter

0C

Low Cut Filter

0D

Equalizer Enable

0E

Sound Field On

0F

Surround On

10

Repeat

11

Stereo

12

Sampling Rate Detect

13

Spinning

14

CAV

15

CLV

16

Recording Format Detect

17

Off-Hook

18

Ring

19

Message Waiting

1A

Data Mode

1B

Battery Operation

1C

Battery OK

1D

Battery Low

1E

Speaker

 

Button Usage Page(0x09)

Usage ID
(Hex)

Usage Name

00

No button pressed

01

Button 1 (primary/trigger)

02

按钮2(次要)

03

按钮3(大专)

04

按钮4见注释

 

消费者使用情况页面(0x0C)

使用ID
(十六进制)

用法名称

00

未分配

01

消费者控制

02

数字键盘

03

可编程按钮

04

麦克风

05

耳机

06

图形均衡器

07-1F

保留的

20

+10

21

+100

22

上午下午

23-3F

保留的

三十

功率

31

重启

32

睡觉

33

睡觉后

34

睡眠模式

35

照明

36

功能按钮

37-3F

保留的

40

菜单

41

菜单选择

42

菜单了

43

菜单向下

44

菜单左

45

菜单权利

46

菜单Es

47

菜单值增加

48

菜单值减少

49-5F

保留的

60

屏幕上的数据

61

关闭

 


  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值