通过USB使用HIDAPI时被报告ID弄糊涂

通过USB使用HIDAPI时被报告ID弄糊涂,usb,hid,hidapi,Usb,Hid,Hidapi,我是一个USB隐藏的新手,我正在尝试使用 关于在VisualStudio中使用HIDAPI,我有一个关于报告ID的问题 当我尝试使用HIDAPI并连接到Microchip自定义演示时, 我对此感到困惑:65字节的报告对我来说毫无意义 即使我不想设置报告ID,我也需要将第一个字节设置为0,并将65字节的缓冲区发送到设备,但我只从微芯片设备接收64字节的数据,因为报告长度为64字节 它看起来像: **Host** **Device**

我是一个USB隐藏的新手,我正在尝试使用

关于在VisualStudio中使用HIDAPI,我有一个关于报告ID的问题

当我尝试使用HIDAPI并连接到Microchip自定义演示时, 我对此感到困惑:65字节的报告对我来说毫无意义

即使我不想设置报告ID,我也需要将第一个字节设置为0,并将65字节的缓冲区发送到设备,但我只从微芯片设备接收64字节的数据,因为报告长度为64字节

它看起来像:

    **Host**                       **Device**

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

          *read_hid*
       <------------------   64byte
然而,我觉得很奇怪

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

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

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


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

如果您的应用程序在HID描述符中没有包含报表ID,那么就不应该在前面添加报表ID

正如您在的文档中所看到的,如果第一个字节为0,则HIDAPI应仅发送64个字节,即没有报告ID:

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

查看的源代码时,可以看到报告ID已正确剥离。但是,在Windows上,数据直接传递到Windows。我不知道Windows编程,但这可能会有所不同。请尝试在Linux上测试此功能。

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

正如您在的文档中所看到的,如果第一个字节为0,则HIDAPI应仅发送64个字节,即没有报告ID:

unsigned char data[65];
buf[0] = 0; /* Single report */
// Fill report starting at buf[1]
hid_write(device, data, sizeof(data));
查看的源代码时,可以看到报告ID已正确剥离。但是,在Windows上,数据直接传递到Windows。我不知道Windows编程,但这可能会有所不同。试着在Linux上测试这个