USB HID 报告描述符,多个报告

时间:2021-01-22 13:31:09

标签: usb hid descriptor

我正在尝试模拟 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 缺少输入实体),但是当我为了这个问题简化了描述符时就完成了。

1 个答案:

答案 0 :(得分:0)

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

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