Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows USB ReadFile()仅在第三次之后才能工作?_Windows_Winapi_Visual C++_Usb_Hid - Fatal编程技术网

Windows USB ReadFile()仅在第三次之后才能工作?

Windows USB ReadFile()仅在第三次之后才能工作?,windows,winapi,visual-c++,usb,hid,Windows,Winapi,Visual C++,Usb,Hid,我正在开发一个自定义USB HID设备,其输入和输出中断端点的长度均为64字节。有两个报告(一个报告ID为1,另一个报告ID为2),每个报告计数为63字节。当用VC++开发的PC应用程序使用WriteFile()发送64字节的缓冲区时,我在OUT中断端点的设备上正确地接收到整个缓冲区。但是,当我将64字节的缓冲区从设备发送到IN端点上的PC时,ReadFile()返回值为4(超时)。当设备插入时,这种情况仅发生2次。之后,一切正常,PC正确读取设备发送的64字节 我正在使用USBlyzer工具嗅

我正在开发一个自定义USB HID设备,其输入和输出中断端点的长度均为64字节。有两个报告(一个报告ID为1,另一个报告ID为2),每个报告计数为63字节。当用VC++开发的PC应用程序使用WriteFile()发送64字节的缓冲区时,我在OUT中断端点的设备上正确地接收到整个缓冲区。但是,当我将64字节的缓冲区从设备发送到IN端点上的PC时,ReadFile()返回值为4(超时)。当设备插入时,这种情况仅发生2次。之后,一切正常,PC正确读取设备发送的64字节

我正在使用USBlyzer工具嗅探USB总线流量。该软件显示,头两次设备在端点中断上发送64字节的缓冲区,但它也无法显示其中的数据。第三次以后,一切都会神奇地工作,PC应用程序和USBlyzer都会在屏幕上接收并显示64字节的缓冲区内容


我不确定问题到底出在哪里,是在PC端代码还是在设备固件中?请分享您的想法。

也许您需要等待数据可用。您的超时有多大?请先尝试获取该文件的文件打开句柄。另外,插入USB后是否立即执行此操作?问题已解决。在固件中,我使用错误的字节数参数值调用Prepare RxBuffer函数(来自STM32库)。我的错误是,我输入的字节数是我期望从PC上得到的,它应该是端点可以传输的最大字节数(在我的例子中是64)。