如何过滤USB数据包只包含HID键盘数据?

时间:2015-11-10 21:10:29

标签: keyboard verilog hid asic

我试图弄清楚如何过滤键盘HID数据包。我真的只需要在USB 1.1(低速或全速)上这样做。我试图使用wireshark过滤字节,但我得到URB字节。

我的问题几乎是从USB级别,(D + / D-)我试图找到一种只获取HID键盘数据包的方法。 (我指的是此链接中提到的数据包格式和PID以及下图:http://www.usbmadesimple.co.uk/ums_3.htm)。 enter image description here

从我读过的所有规格。在获取接口描述符并存储HID键盘的地址/端点(0x03)之前,我将不得不读取描述符。我想知道这个描述符部分是否必要。现在我得到所有USB数据包及其PID。无论如何只需读取USB数据包而不必担心存储描述符?我不这么认为,但值得一提。另外,我需要创建存储的最大缓冲区是多少?根据我的理解,HID可以具有自定义配置,并且将来的Control Transfer将具有不同的长度并保持不同的数据。另外,如果存储数据,我如何知道HID修饰符和密钥翻转所存储的字节(8个字节)在数据包中的位置(来自wireshark,我在两个位置看到URB数据与此数据)。我只想存储修饰符字节和键数组(下面的例子): enter image description here

在存储了相对于HID键盘的地址/端点之后,我将监视IN USB数据包并查看它们是否与存储的端点/地址相同。

到目前为止,这是我的图表,它执行USB逻辑并通过SPI将其存储到SD卡(不重要)。与此相关的部分是" UDR"根据上图中提到的PID类型选择做什么。此外,我可能需要将FIFO更改为数据包缓冲区来存储这些字节。但大多数情况与" HID Parser"相关。块 enter image description here

如果我缺少逻辑,我会很感激。我试图通过使用verilog的ASIC实现这一点。另外注意:我是学生,这是我的ASIC设计课程的一个项目。

我很困惑IN数据包对于HID数据包是否总是相同,因为当我使用wireshark监视USB数据包时,我看到URB(USB请求数据块)数据包具有如此多的额外字节,例如URB id'包中的s等。我不熟悉URB数据包以及如何解析它们。所有的keybaords都使用URB,我认为所有的键盘(或几乎所有键盘)都使用了HID,但也许URB位于它之上?

感谢我的进步并对我的学生知识(或缺乏知识)感到抱歉。我真的很难理解和实现USB数据包级别的解析。

编辑1:对第一条评论建议。

0 个答案:

没有答案