缺少事件信号?

问题描述

我正在尝试通过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可以正常工作。我正在与之交谈的设备收到我的消息,然后做出响应。

然后我执行ReadFile()以获取该信息。这是该代码段:

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 (将#修改为@)