通过USB使用HIDAPI时混淆报告ID

时间:2014-03-07 03:00:13

标签: usb hid hidapi

我是USB HID新手,我正在尝试使用HIDAPI for my application.

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

当我尝试使用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字节的数据长度对我来说没有意义。

1 个答案:

答案 0 :(得分: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的源代码时,您可以看到报告ID已正确删除。但是在Windows上,数据会直接传递给Windows。我不了解Windows编程,但也许这会产生影响。您是否尝试在Linux上使用此测试?