如何解决USB HID 报告描述符,多个报告
我正在尝试模拟 USB 多媒体键盘,但卡在 HID 报告描述符上。我设法定义了“单个报告”描述符,但是当我尝试添加其他报告 ID 时卡住了。下面的例子被最小化了,在最终的应用程序中,我试图在单个报告中放入更多的数据,还选择了静音功能以使其测试简单。
lst = []
# go through all countN columns and calculate their statistics
for count_col in [c for c in df.columns if "count" in c]:
df_tmp = df[count_col].agg(["sum","mean","std","median","var","min","max"])
df_tmp.columns = [f"{count_col}" + str(c) for c in df_tmp.columns]
lst.append(df_tmp)
# join all the calculations of all countN columns to one DataFrame
final_df = lst.pop(0)
for df_tmp in lst:
final_df = final_df.join(df_tmp)
final_df
var1 var2 count1_sum count1_mean ... count2_sum count2_mean ...
1 "A" "B" 1 1 12 12
2 "C" "C" 2 2 179 179
3 "C" "D" 1 1 72 72
4 "C" "E" 4 4 7 7
5 "D" "E" 2 2 47 47
6 "H" "F" 1 1 31 31
7 "ABC" "DEF" 10 5 84 42
...
结果是,当我发送 0x01 0x01(请求 1,位 1)时,计算机(Windows)静音,但是当 USB 设备通过同一端点发送 0x02 0x01(请求 2,位 2)时,计算机会忽略它。我试图将报告分组到逻辑集合中,但它没有改变任何东西。
这个描述符应该是什么样子的?
PS 在第一篇文章中,描述符中有明显错误(报告 #2 缺少输入实体),但是当我为了这个问题简化了描述符时就完成了。
解决方法
一不小心就解决了这个问题。此外,上面显示的最小示例不起作用,但问题与我的完整实现相同。
出于某种原因,对于 Windows,每个报告都必须与 8 位对齐,否则“未完成”的最后一个字节不会触发预期的操作。解决方案是在报告中添加字节对齐位。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。