USB与BT HID reports描述符实践与抓包分析

本文介绍了如何解析和查看USB及BLE HID设备的报告描述符,包括使用usbhid-dump工具、Linux下的调试接口以及Wireshark抓包分析。通过hidrd-convert工具将hex报告描述符转化为C语言格式,便于编码。同时,文章提供了理解HID报告描述符的步骤和相关资源。
摘要由CSDN通过智能技术生成

文章内容提示

这篇文章主要说明如何获取与查看USB和BLE HoGP HID设备报告描述符,如何根据获取的描述符读懂report。然后说明了可以使用hidrd-convert工具,来如何根据hex报告描述符转化得到C语言格式的描述符,这对于我们编码是有意义的。 其中,还截取了USB 逻辑分析仪,Wireshark等工具来查看input report。


如何看懂HID report descriptor

对于如何看懂HID报告描述符,几乎离不开下面的这两个pdf:

USB HID Usage Table

USB HID Spec

先看文档(USB HID设备)弄明白一些基本概念:

  1. 项目Item的意义
  2. collection与end collection:namespace的意义,相当于将多个usage page
  3. usage page与 usage
  4. Logical Minimum 与 Logical Maximum 
  5. Usage Minimum 与 Usage Maximum
  6. input
  7. report size 与 report count


个人认为先准备好这份文档,然后结合一些文章来理解比较快速。以下是个人认为的快速理解的步骤:

1. 看这篇(Tutorial about USB HID Report Descriptors)文章,理解一些基本的概念,主要弄明白概念4与5

2. 不要太过于纠结如何从hex转换到方便大家阅读的格式的report

例如下面这个描述符,我们应该直接看注释而,然后可以知道描述的是mouse,然后根据usage page和usage的值在usage table pdf中找到对应的描述,然后根据对基本概念的了解知道如果鼠标的一个按键按下那么会生成怎么样的report即可:

    0x05, 0x01,  // Usage Page (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) - Padding or Reserved bits
    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, Variable, Relative) - X & Y coordinate
    0xC0,        //   End Collection
    0xC0,        // End Collection

3. 看后面的 “1. 使用usbhid-dump工具获取报告描述符” 章节了解report字节数的构成来源

需要注意的是input是报告给主机(例如PC,Android)的,因此只能算input的,在主机到设备的时候只能算output的

4. 看文章《

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值