【问题标题】:multiple HID input reports多个 HID 输入报告
【发布时间】:2011-11-16 02:34:33
【问题描述】:

我声明了两个输入报告(短报告为 64B,长报告为 128B),数据包大小为 64B 中断端点。

读取简短报告时,USB 分析器将简短报告的预期字节数 (64B) 显示为正在传输,但 ReadFile 抱怨我的缓冲区无效(尽管它足够大并且 numberOfBytesToRead = 64)。

如果我将长报告大小用于短报告上的 numberOfBytesToRead 参数,ReadFile 不会抱怨,但这是没有用的,而且显然是错误的。我怎样才能解决这个问题?

并且我在数据包大小中使用了多个中断端点以使事情变得简单;如果我的报告不是倍数会怎样?

我读到我需要在短报告末尾使用 ZLP 或短数据包,因为 HID 驱动程序需要最长大小的报告。所以这很可能是问题所在。是否有如何在 SiLabs 固件中制作 ZLP 的示例?我正在使用 C8051F320。

【问题讨论】:

    标签: windows winapi usb hid


    【解决方案1】:

    您使用的是ReadFile,很明显您正在阅读数据包,而不是报告。这是 HID 的一个重要区别。 HID 数据包对于低速设备可以是 8 个字节,对于全速设备可以是 64 个字节。

    维基百科链接到您应该阅读的规范:https://en.wikipedia.org/wiki/Human_interface_devices

    WDK 包含一些函数 - 全部命名为 Hid_*,它们也允许与 HID 设备交互,并且已经执行了一些预处理。但这有多大用处取决于您的设备是否属于存在这些快捷方式的 HID 类之一......

    对于剩下的问题,您应该发布一些代码,并且您还应该准确地告诉我们您在哪里获得了哪些返回代码。一旦您提供更多详细信息,我可能会编辑我的答案。

    【讨论】:

      【解决方案2】:

      如果短报告的数据包大小是端点的倍数,则需要在短报告之后发送 ZLP。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-26
        • 2021-04-26
        • 2015-08-28
        • 2021-03-30
        • 2021-06-14
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        相关资源
        最近更新 更多