问题描述
我正在尝试通过USB向外部设备发送消息并从中接收消息。
与HidD_GetInputReport()和HidD_SetoutputReport()配合正常。问题是,当我发送命令时,由于要与之交谈的设备花费一些时间来响应并填满回复缓冲区,因此我会出现一些暂时的延迟。我们希望摆脱这种延迟。
我研究了使用ReadFile()和WriteFile()API的选项。
我这样做是一个WriteFile:
DWORD bytesRead;
OVERLAPPED osWrite = { 0 };
osWrite.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
bool success = WriteFile(Device,packetBuffer,packetLength,&bytesRead,&osWrite);
if ( false == success )
{
WaitForSingleObject(osWrite.hEvent,INFINITE);
if (!GetoverlappedResult(Device,&osWrite,TRUE))
{
printf("write Failed \n");
GetErrorMessage();
}
else
{
printf("write passed \n");
}
success = TRUE;
}
CloseHandle(osWrite.hEvent);
WriteFile可以正常工作。我正在与之交谈的设备收到我的消息,然后做出响应。
DWORD bytesRead;
OVERLAPPED osReader = { 0 };
osReader.hEvent = CreateEvent(NULL,NULL);
bool success = ReadFile(Device,&osReader);
if ( success == false)
{
if (!GetoverlappedResult(m_hDevice,&osReader,TRUE))
{
GetErrorMessage();
}
}
我们也收到了回复。因此,它工作正常且花哨,但有时(对于某些特定命令)如果设备需要一段时间才能做出响应,则似乎主机侧一直在等待信号并且永远不会继续运行。我已验证设备最终会做出响应(例如10秒钟后),但似乎主机从未收到信号。我正在使用匿名事件来确保它不会被其他任何进程吞并。
因此,我们只是停留在if (!GetoverlappedResult(m_hDevice,TRUE))
任何人都可以提供关于我所缺少的内容的任何输入,或者是否存在某些看起来不正确的信息?
FWIW,这就是我创建设备的方式
Device = CreateFile( Path,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)