【发布时间】: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