防微杜渐是什么意思
USB HID Report终极解析 HID的报告描述符巨难懂,关键是数据格式与每一位代表的意思。经过三天的研究,终于将HID Report的每一个数据位的含义弄清楚了,现将数据解析如下,最后附上了一个HID 通信的Report例子。以一个键盘的HID Report为例:
键盘的HID报告描述符:
code char KeyBoardReportDescriptor[63] = {
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x06, // USAGE (Keyboard)
九初0xa1, 0x01, // COLLECTION (Application)
0x05, 0x07, // USAGE_PAGE (Keyboard)
0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)
0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x08, // REPORT_COUNT (8)
0x81, 0x02, // INPUT (Data,V ar,Abs)
0x95, 0x01, // REPORT_COUNT (1)项羽技能
0x75, 0x08, // REPORT_SIZE (8)
0x81, 0x03, // INPUT (Cnst,V ar,Abs)
0x95, 0x05, // REPORT_COUNT (5)
0x75, 0x01, // REPORT_SIZE (1)
0x05, 0x08, // USAGE_PAGE (LEDs)
0x19, 0x01, // USAGE_MINIMUM (Num Lock)
0x29, 0x05, // USAGE_MAXIMUM (Kana)
0x91, 0x02, // OUTPUT (Data,V ar,Abs)
奉赠韦左丞丈二十二韵0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x03, // REPORT_SIZE (3)
0x91, 0x03, // OUTPUT (Cnst,V ar,Abs)
英语问答
0x95, 0x06, // REPORT_COUNT (6)
云菲菲的歌
0x75, 0x08, // REPORT_SIZE (8)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0xFF, // LOGICAL_MAXIMUM (255)
0x05, 0x07, // USAGE_PAGE (Keyboard)
0x19, 0x00, // USAGE_MINIMUM (Rerved (no event indicated))
0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application)
生茶怎么泡0x81, 0x00, // INPUT (Data,Ary,Abs)
0xc0 // END_COLLECTION
};
具体分析如下:
code char KeyBoardReportDescriptor[63] = {
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
/
/ 分析
根据HID短项目数据格式
短项目的编码形式如下:
0x05 = 0000 0101
0000:Usage Page
01:bType,全局(bType = 0:主项目;bType = 1:全局项目;bType = 2:区域项目;)
01:bSize,1字节(BSize 用来指出项目的数据所需字节的数目,该数目仅可以为0(当bSize=0),1(当bSize=1),2(当bSize=2),和4(当bSize=3)﹔注意不可以为3个字节。大部分的卷标仅需一个字节的数据﹔全局项目的卷标Unit 比较特殊有可能最多用到4 个字节来表示其资料。)
0x01: Generic Desktop(查文档Universal Serial Bus HID Usage Tables,第三节Usage Pages)
联想与想象
0x09, 0x06, // USAGE (Keyboard)
0x09 = 00001001
根据HID短项目格式
0000:Usage
10:bType,区域项目
01:bSize,1字节
0x06:KeyBoard(查文档Universal Serial Bus HID Usage Tables,第四节)
0xa1, 0x01, // COLLECTION (Application)
0xa1: