USB HID Learning Record 版本:v0.6 Crifan Li 摘要 本文主要介绍了USB HID的基本知识,以及举例说明如何解析HID Report [提 本文提供多种格式供: 示] 在线阅读 HTML HTMLs PDF CHM TXT RTF WEBHELP 下载(7zip压缩包) HTML HTMLs PDF CHM TXT RTF WEBHELP HTML版本的在线地址为: http://www.crifan.com/files/doc/docbook/usb_hid/release/html/usb_hid.html 有任何意见,建议,提交bug等,都欢迎去讨论组发帖讨论: http://www.crifan.com/bbs/categories/usb_hid/ 2013-09-05 ┌─────────────────────────────────────────────────────────────────────────────┐ │修订历史 │ ├────────────────────────────┬────────────────────────────────────┬───────────┤ │修订 0.4 │2011-06-16 │crl │ ├────────────────────────────┴────────────────────────────────────┴───────────┤ │ 1. 写好了USB HID基本内容 │ ├────────────────────────────┬────────────────────────────────────┬───────────┤ │修订 0.6 │2013-09-05 │crl │ ├────────────────────────────┴────────────────────────────────────┴───────────┤ │ 1. 通过Docbook发布 │ │ 2. 更新了所有xml:id │ └─────────────────────────────────────────────────────────────────────────────┘ 版权 © 2012 Crifan, http://crifan.com 本文章遵从:署名-非商业性使用 2.5 中国大陆(CC BY-NC 2.5) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 目录 1. USB HID基础知识 1.1. USB HID Structure 1.2. HID descriptor 1.2.1. HID Class Structure 1.2.2. Short Items 1.2.3. Long Items 1.2.4. Main Items 1.2.5. Global Items 1.2.6. Local Items 1.3. Usage Page Summary 2. HID Report Example 2.1. Normal examples 2.1.1. Generic mouse 2.1.2. Keyboard 2.2. An HID Report Example analysis 插图清单 1.1. USB HID Structure 1.2. HID descriptor 1.3. HID Class Structure 1.4. HID Short Items 1.5. HID Long Items 1.6. HID Main Items 1.7. HID Global Items 1.8. HID Local Items 1.9. HID Usage page summary 2.1. HID Report Example - 3 button mouse 2.2. HID Report Example - keyboard - 1/2 2.3. HID Report Example - keyboard - 2/2 2.4. HID Data Format 第 1 章 USB HID基础知识 目录 1.1. USB HID Structure 1.2. HID descriptor 1.2.1. HID Class Structure 1.2.2. Short Items 1.2.3. Long Items 1.2.4. Main Items 1.2.5. Global Items 1.2.6. Local Items 1.3. Usage Page Summary 摘要 1.1. USB HID Structure 图 1.1. USB HID Structure USB HID Structure 1.2. HID descriptor 图 1.2. HID descriptor HID descriptor 1.2.1. HID Class Structure 图 1.3. HID Class Structure HID Class Structure 1.2.2. Short Items 图 1.4. HID Short Items HID Short Items 1.2.3. Long Items 图 1.5. HID Long Items HID Long Items 1.2.4. Main Items 图 1.6. HID Main Items HID Main Items HID Main Items 1.2.5. Global Items 图 1.7. HID Global Items HID Global Items HID Global Items 1.2.6. Local Items 图 1.8. HID Local Items HID Local Items 1.3. Usage Page Summary 图 1.9. HID Usage page summary HID Usage page summary HID Usage page summary 第 2 章 HID Report Example 目录 2.1. Normal examples 2.1.1. Generic mouse 2.1.2. Keyboard 2.2. An HID Report Example analysis 摘要 2.1. Normal examples 2.1.1. Generic mouse 3-button mouse: 图 2.1. HID Report Example - 3 button mouse HID Report Example - 3 button mouse Note: above data’s format is: 05 01 = 0x 01 05 09 02 = 0x 02 09 2.1.2. Keyboard 图 2.2. HID Report Example - keyboard - 1/2 HID Report Example - keyboard - 1/2 图 2.3. HID Report Example - keyboard - 2/2 HID Report Example - keyboard - 2/2 2.2. An HID Report Example analysis Follow is the example. According to the format, defined in specification: 图 2.4. HID Data Format HID Data Format Now to analysis the corresponding meaning for every group bytes: [注 Data send by LSB 意] The data is send by LSB, so when “0x45, 0xFF’ is sent, first send is “0x45 ”, second send “0xFF”, the LSB is “0x45” located in low address, the MSB “ 0xFF” located in high address, so the hex value is ”0xFF45“ 0x06, 0x45, 0xFF,1 0x0A, 0x00, 0xA0,2 0xA1, 0x01,3 0x75, 0x08,4 0x96, 0x07, 0x01,5 0x15, 0x00,6 0x26, 0xFF, 0x00,7 0x0A, 0x01, 0xA0,8 0x91, 0x02,9 0x75, 0x08,10 0x95, 0x08,11 0x0A, 0x02, 0xA0,12 0x81, 0x02,13 0xC014 1 [Data] [Data] bTag=7:4 bType=3:2 bSize=1:0 0x06 0xFF 0x45 0000 01 10 0000 0110 0xFF45 -> 0xFF00 -0xFFFF = Vendor defined Usage Page Global item 2 bytes   2 [Data] [Data] bTag=7:4 bType=3:2 bSize=1:0 0x0A 0xA0 0x00 0000 10 10 0000 1010 Usage=0xA000 Usage Local item 2 bytes   here Usage=0xA000 is just self defined, just need not confict with self's others, no other special meaning 3   [Data] bTag=7:4 bType=3:2 bSize=1:0 0xA1   0x01 1010 00 01 1010 0001   Application (mouse, keyboard) Collection Main item 1 bytes   4   [Data] bTag=7:4 bType=3:2 bSize=1:0 0x75   0x08 0111 01 01 0111 0101   Report Size = 0x08 bits Report Size Global item 1 bytes   5 [Data] [Data] bTag=7:4 bType=3:2 bSize=1:0 0x96 0x01 0x07 1001 01 10 1001 0110 Report Count = 0x0107=263 Report Count Global item 2 bytes   6   [Data] bTag=7:4 bType=3:2 bSize=1:0 0x15   0x00 0001 01 01 0001 0101   Logical Minimum = 0x00 Logical Minimum Global item 1 bytes   7 [Data] [Data] bTag=7:4 bType=3:2 bSize=1:0 0x26 0x00 0xFF 0010 01 10 0010 0110 Logical Maximum =x00FF=255 Logical Maximum Global item 2 bytes   8 [Data] [Data] bTag=7:4 bType=3:2 bSize=1:0 0x0A 0xA0 0x01 0000 10 10 0000 1010 Usage = 0xA001 Usage Local item 2 bytes   here Usage=0xA001 is just self defined, just need not confict with self's others, no other special meaning 9   [Data] bTag=7:4 bType=3:2 bSize=1:0 0x91   0x02 1001 00 01 1001 0001 0x02=0000 0010   Bit 1 { Variable (1)} Output Main item 1 bytes   All other bits are Reserved (0) 10   [Data] bTag=7:4 bType=3:2 bSize=1:0 0x75   0x08 0111 01 01 0111 0101   Report Size = 0x08 bits Report Size Global item 1 bytes   11   [Data] bTag=7:4 bType=3:2 bSize=1:0 0x95   0x08 1001 01 01 1001 0101   Report Count= 0x08 = 8 Report Count Global item 1 bytes   12 [Data] [Data] bTag=7:4 bType=3:2 bSize=1:0 0x0A 0xA0 0x02 0000 10 10 0000 1010 Usage = 0xA002 Usage Local item 2 bytes   13   [Data] bTag=7:4 bType=3:2 bSize=1:0 0x81   0x02 1000 00 01 1000 0001 0x02=0000 0010   Bit 1 { Variable (1)} Input Main item 1 bytes   All other bits are Reserved (0) 14   [Data] bTag=7:4 bType=3:2 bSize=1:0 0xC0     1100 00 00 1100 0000 Closes an item collection End Collection Main item 0 bytes   After analyze following data, the summary is: Usage Page (0xFF45) =Vendor-Specific 0xFF45 06 Global Usage (0xA000)   0xA000 0A Local Collection (Application)   0x01 A1 Main   Report Size (8) 0x08 75 Global   Report Count (263) 0x0107 96 Global   Logical Minimum (0) 0x00 15 Global   Logical Maximum (255) 0x00FF 26 Global   Usage (0xA001) 0xA0001 0A Local   Output (Variable) 0x02 91 Main   Report Size (8) 0x08 75 Global   Report Count (8) 0x08 95 Global   Usage (0xA002) 0xA002 0A Local   Input (Variable) 0x02 81 Main End Collection   0xC0 Main Report (Usage=0xA0000)     Output Report (Usage=0xA001) 263 bytes Byte 0   Byte 1   ...   ...   Byte 261   Byte 262       Input Report (Usage=0xA002) 8 bytes Byte 0   Byte 1   ...   Byte 7     All of above means: 1. This is a vendor-specific HID device 2. input or output is relative to Host side: □ Output = Host ⇒ Device = host send 263 bytes to device □ Input = Host ⇐ Device = device send 8 bytes to host 3. Every bytes value range is 0~255