hidapi Windows 8.1 hid_write fail



hw: lpc1549 eval board with usb hid test firmware…

端点大小为64字节端点intr读取out-report,但以十六进制显示len和数据…将out_report复制到in_report中,然后返回write funct和len

主机:

使用qt5, libusb-1.0.19 wingw32 DLL和hidapi代码

隐藏测试代码在linux, win7和win8.1中成功地发出所有API调用(除了写和读)

测试代码问题hid_write后面跟着hid_read和get的数据在linux中正确返回

我没有使用,由hidapi hid_write强制标记的报告ID,因为nxp固件和keil软件不使用它(据我所知)…我的Linux软件正确地发送和接收一个定义的64字节模式(或更小的len), byte[0]是这个模式的一部分…输出和输入字节[0]数据故意不同,并正确接收

在Windows下运行keil隐藏客户端成功地与lpc1549固件正确通信,即使它们只传输和回显一个字节…

我的固件已将端点大小更改为64字节(我希望我的更改是正确的),并且keil隐藏客户端在Windows中使用它,所以我的假设是我的描述符是正确的…希望

host sw kububtu 14.04Hid_write len = 17, device 17 bytes received, 17 bytes表示received…一切正常

host sw与hidapi在win8.1Hid_write len = 17 bytes显示在设备上有16个字节正确,其余为0,但读取指示接收到的len为64…我写的是17,正确收到了16,但显示的是64此外,win 8.1抛出一个空白的system32/cmd提示窗口…为什么? ?

同样在win7上挂起,只有hid_write len = 0成功…弹出相同的CMD提示符…接收到len = 64,但没有传输数据(因为len = 0是有意义的)

我不能单步或断点,因为qt调试器在应用程序加载时得到的段错误

我也在我的qt应用程序链接到hidapi"windows/hide .c"代码,它现在是我的代码的一部分

很抱歉我的描述太复杂了

为什么报告ID是强制性的,如果它没有被使用…这将浪费一个字节,如果需要uint32_t对齐,它将浪费64字节数据的7%。

为什么用c++ MSVS编写的keil隐藏客户端在我的fw和hidapi上正常工作而不是

keil隐藏客户端的功能是否表明我的fw和我的描述符以及报告len是正确的

什么会导致一个空的cmd提示符弹出?

我可能做错了什么(整个hidapi基于应用程序是正确地与一个完整的基于usb的固件pgm通信,而不仅仅是描述的测试代码)?

几天后,一些事情变得明朗了

reporttid似乎是在窗口和主机侧的东西…固件不影响我的设置

最初也没有明确的是,reporttid是在最大64个报告字节之外的

所以我创建了一个1 + 64字节= 65的缓冲区…第一个是零,因为我不使用reporttid机制,其余64个通常使用

因此,写调用数据大小需要为1 + usb隐藏描述符端点端的报告大小

在linux中,没有reporttid在隐藏什么,我可以看到

next:确保在主机和设备上的写调用中指定的数据长度与端点大小定义完全匹配,否则没有数据通过任何方向,您的软件可能会挂起(永远等待)在另一端的读取

我希望这可以帮助其他人更好地了解Windows端hidapi的hid_write调用

Alan Ott给我写了以下内容

http://www.signal11.us/oss/hidapi/hidapi/doxygen/html/group__API.html gad14ea48e440cf5066df87cc6488493af

总是有一个报告ID。您必须始终在HIDAPI中发送报告ID,但如果报告ID为0,则不会发送到设备。

相关内容

  • 没有找到相关文章

最新更新