【问题标题】:USB HID report descriptor, multiple reportsUSB HID 报告描述符,多个报告
【发布时间】:2021-01-22 13:31:09
【问题描述】:

我正在尝试模拟 USB 多媒体键盘,但卡在 HID 报告描述符上。我设法定义了“单个报告”描述符,但是当我尝试添加其他报告 ID 时卡住了。下面的例子被最小化了,在最终的应用程序中,我试图将更多的数据放在单个报告中,还选择了 MUTE 功能以使其测试变得简单。

0x09, 0x01,        // Usage (Consumer Control)
0xA1, 0x01,        // Collection (Application)

0x85, 0x01,        //   Report ID (1)
0x05, 0x0C,        //   Usage Page (Consumer)
0x15, 0x00,        //   Logical Minimum (0)
0x25, 0x01,        //   Logical Maximum (1)
0x75, 0x01,        //   Report Size (1)
0x95, 0x01,        //   Report Count (1)
0x09, 0xE2,        //   Usage (Mute)
0x81, 0x62,        //   Input (Data,Var,Abs,No Wrap,Linear,No Preferred State,Null State)

0x85, 0x02,        //   Report ID (2)
0x05, 0x0C,        //   Usage Page (Consumer)
0x15, 0x00,        //   Logical Minimum (0)
0x25, 0x01,        //   Logical Maximum (1)
0x75, 0x01,        //   Report Size (1)
0x95, 0x01,        //   Report Count (1)
0x09, 0xE2,        //   Usage (Mute)
0x81, 0x62,        //   Input (Data,Var,Abs,No Wrap,Linear,No Preferred State,Null State)
0xC0,              // End Collection

结果是,当我发送 0x01 0x01(请求 1,位 1)计算机(Windows)静音时,但是当 USB 设备通过同一端点发送 0x02 0x01(请求 2,位 2)时,计算机忽略它。我试图将报告分组到逻辑集合中,但它没有任何改变。

这个描述符应该是什么样子的?

PS 在第一篇文章的描述符中有明显的错误(缺少报告 #2 的输入实体),但是当我出于这个问题的目的简化描述符时就完成了。

【问题讨论】:

  • 描述符对我来说看起来不错(尽管没有必要重新指定全局项目,例如逻辑最小值/最大值和报告大小/计数,如果它们没有更改)。使用完整的报告描述符、其他描述符和用于发送报告的代码来更新您的问题可能会有所帮助。有人可能会发现问题。例如,有时人们在更改描述符后忘记更新描述符长度。

标签: usb hid descriptor


【解决方案1】:

不小心解决了这个问题。此外,上面显示的最小示例不起作用,但问题与我的完整实现相同。

由于某些原因,对于 Windows,每个报告都必须对齐到 8 位,否则最后一个“未完成”字节不会触发预期的操作。解决方案是在报告中添加字节对齐位。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-10
    • 2011-11-10
    • 1970-01-01
    • 2015-08-28
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多