通过 USB 使用 HIDAPI 时对报告 ID 感到困惑

Wan*_*der 2 usb hid hidapi

我是 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

Lek*_*eyn 5

如果您的应用程序在 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));
Run Code Online (Sandbox Code Playgroud)

查看libusb 实现的源代码时,您可以看到报告 ID 已正确剥离。然而,在 Windows 上,数据直接传递到 Windows。我不懂 Windows 编程,但这也许会有所不同。尝试在 Linux 上测试这个。