关于HID函数HidD_FlushQueue的问题
实现HID设备与PC的双向通信。目前设备已识别,而且可以正常通信。读写数据的代码如下:
memcpy(&wBuffer[1], m_writebuff, min(32, m_writebuff.GetLength()));
if(WriteFile(hidHandle, wBuffer, 33, &dwRet,NULL))
{
//写成功
Sleep(2000);
if(ReadFile(hidHandle, rBuffer, 33, &dwRet, NULL))
{
//读成功
memcpy(str, &rBuffer[1], min(32, strlen((char *)&rBuffer[1])));
m_readbuff=str;
UpdateData(false);
}
else
MessageBox("读失败!");
MessageBox("读写成功!");
}
else
MessageBox("写失败!");
但是必须得有Sleep(2000);一句,否则读出的数据就是“旧值”,需要读好几次才能读到“新值”。也就是说先用WriteFile写数据,马上用ReadFile读数据是不行的,需要延迟。而且我已测明不是hid设备慢,因为使用一个软件读写该设备可以实现“即写即读”。请问这是什么原因?怎么解决?
一位高手建议在WriteFile后面调用函数HidD_FlushQueue,结果果然奏效,但是不知其所以然,在这里刷新handle的buffer有什么用,其实现机理是什么?有知道的大侠帮忙一下,不胜感激!!
谢谢!!!
相关推荐
C# USB HID读卡器开发:CPU卡与IC卡的HID通信实战指南
USB HID是一种常用于人机交互设备的通用协议,其核心在于Report Descriptor定义的数据格式与Windows HID Class Driver的协同机制。理解HID设备枚举、句柄打开权限、Input/Output Report长度解析等底层原理,是实现稳定通信的前提。在非接触式智能卡领域,CPU卡依赖APDU指令集,IC卡(如Mifare Classic)则基于扇区密钥操作,二者均需将业务逻辑正确映射为HID Report包结构。本内容聚焦C#在Windows平台对接USB HID读卡器的关
Windows原生C++枚举USB HID设备实战指南
HID(Human Interface Device)是Windows系统中支持即插即用、免驱通信的核心设备类,其底层基于报告描述符与接口类枚举机制。通过SetupAPI和HID API协同工作,开发者可绕过WinUSB驱动签名限制与libusb运行时依赖,直接调用hid.dll完成设备发现、属性获取与输入/输出报告读写。该方案具备零外部依赖、静态链接、离线部署等工程优势,广泛应用于嵌入式调试、工控上位机及USB协议逆向场景。本文聚焦Visual C++原生实现,涵盖GUID_DEVINTERFACE_HI
CISP-CSE注册云安全工程师备考资源包基础教程
随着云计算技术的普及,云安全已成为网络安全领域的核心议题。CISP-CSE(注册云安全工程师)认证由中国信息安全测评中心颁发,旨在培养具备云安全专业知识和实践能力的实战型人才。本教程将结合"CISP-CSE注册云安全工程师备考资源包",系统性地为您梳理云安全的核心知识体系,并提供实战案例分析,助您高效备考。
绘图模拟:在冲动环境中固定时间的示例 附matlab代码.rar
绘图模拟:在冲动环境中固定时间的示例 附matlab代码.rar
基于规则的电动汽车混合能源管理系统,采用MATLAB、Simulink、Simscape Electrical和Stateflow。.zip
1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。


硬件/系统
