本文共 2491 字,大约阅读时间需要 8 分钟。
芯片:STM32F407VE
编译器:KEIL5
作者:SY
日期:2017-7-21 15:19:46
报告描述符是HID
设备使用的描述符,主机通过解析从机上传的报告描述符,才能知道从机上传的报告代表什么含义。从机主要上传2份数据,一个是报告描述符,一个是报告。
一般使用键值对的方式表示:Usage(Usage Page:Usage ID)
使用HID Descriptor Tool
我们可以快速制作HID
报告描述符,
举个例子:0x05, 0x01, // USAGE_PAGE (Generic Desktop)
分两部分解析:
0x05
,主要使用手册Device Class Definition for Human Interface Devices (HID)
翻到p24 5.3 Generic Item Format
,将一个字节分为三部分:
7-4
:bTag
,参考p45
3-2
:pType
,参考p36
值 | 含义 |
---|---|
0 | Main |
1 | Global |
2 | Local |
3 | Reserved |
1-0
:bSize
值 | 含义 |
---|---|
0 | 0 bytes |
1 | 1 bytes |
2 | 2 bytes |
3 | 4 bytes |
那么05h == 0000 0101
就表示Usage Page
Global
1Bytes
数据,1Bytes
表示后面跟着的数据部分为1个字节。
0x01
,参考Universal Serial Bus HID Usage Table.pdf
的p14
,表示General Desktop Control
使用HID Descriptor Tool
产生如下鼠标报告:
char ReportDescriptor[52] = { 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x02, // USAGE (Mouse) 0xa1, 0x01, // COLLECTION (Application) 0x09, 0x01, // USAGE (Pointer) 0xa1, 0x00, // COLLECTION (Physical) 0x05, 0x09, // USAGE_PAGE (Button) 0x19, 0x01, // USAGE_MINIMUM (Button 1) 0x29, 0x03, // USAGE_MAXIMUM (Button 3) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x01, // LOGICAL_MAXIMUM (1) 0x95, 0x03, // REPORT_COUNT (3) 0x75, 0x01, // REPORT_SIZE (1) 0x81, 0x02, // INPUT (Data,Var,Abs) 0x95, 0x01, // REPORT_COUNT (1) 0x75, 0x05, // REPORT_SIZE (5) 0x81, 0x03, // INPUT (Cnst,Var,Abs) 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 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,Var,Rel) 0xc0, // END_COLLECTION 0xc0 // END_COLLECTION};
含义很明确:
先定义鼠标的3
个按键,解释他的数值范围。再定义鼠标的移动坐标和滚轮。这样,主机拿到这个报告一一解析出来就知道报告的含义了。
[HID Descriptor Tool]( Descriptor Tool)
转载地址:http://lnzii.baihongyu.com/