1

我是 USB HID 新手,我正在尝试将HIDAPI 用于我的应用程序

我有一个关于使用 HIDAPI(在 Visual Studio 中)关于报告 ID 的问题。

当我尝试使用 HIDAPI 并连接到 Microchip 定制演示时,我对这方面感到困惑:65 字节的报告对我来说没有意义!

即使我不想设置报告ID,我也需要将第一个字节设置为0并将65字节缓冲区发送到设备,但我只收到来自Microchip设备的64字节数据(因为报告是64 字节长)。

看起来像:

    **Host**                       **Device**

         *write_hid*
      65 byte  --------------->

          *read_hid*
       <------------------   64byte

然而,这对我来说似乎很奇怪。

发送或接收的报告不是总是 64 字节吗?因为规范说报告应该有一个 64 字节的最大值,并且每 1 毫秒发送一次。

如果答案是肯定的,为什么 API 为 1 字节的报告 ID 维护 65 字节?

报告 ID 是否包含在 64 个字节中?

65 字节的数据长度对我来说没有意义。

4

1 回答 1

4

如果您的应用程序在 HID 描述符中不包含报告 ID,则不应在前面添加报告 ID。

正如您在 hid_write 的文档中看到的那样,如果第一个字节为 0(即没有报告 ID),HIDAPI 应该只发送 64 字节:

unsigned char data[65];
buf[0] = 0; /* Single report */
// Fill report starting at buf[1]
hid_write(device, data, sizeof(data));

查看libusb implementation的源代码时,您可以看到 Report ID 被正确剥离。但是,在 Windows 上,数据直接传递给 Windows。我不知道 Windows 编程,但也许这会有所作为。请尝试在 Linux 上进行测试。

于 2014-03-26T12:01:17.377 回答