首页 文章

C8051F320上的HID输入报告队列

提问于
浏览
0

似乎只要数据准备好主机(例如当我使用WriteFile向HID发送命令时,我告诉HID返回一些数据,如端口值)和in packet ready位是设置,主机在调用ReadFile之前读取它(由另一个USB中断确认) . ReadFile稍后用于将此数据放入主机上的缓冲区 . 这是应该发生的方式吗?我本来期望ReadFile调用导致in中断 .

所以这是我的问题:我有一个GUI和HID可以很好地协同工作 . HID可以对另一个IC执行I2C,并且GUI可以告诉HID执行I2C就好了 . 启动时,GUI从HID读取数据并获取正确的值(例如,0x49) . 打开第二个GUI到同一个HID会从HID读取相同的初始数据并获得正确的值(例如,0x49;它应该与第一个GUI的读取相同) . 现在,如果我转到第一个GUI并执行I2C读取,则回读值为0x49,这是第二个GUI从HID请求的值 . 似乎HID将此值放在连接到它的所有设备的 endpoints 中 . 因此,第一个GUI错误地认为这是正确的值 .

根据Jan Axelson的HID常见问题解答,“HID的每个打开句柄都有自己的报告队列 . 设备发送的每个报告都会进入所有队列,因此多个应用程序可以读取相同的报告 . ”我相信这是我的问题 . 在第一个GUI执行请求之前,如何清除此 endpoints 并清除 endpoints ,以便正确的值(HID根据调试器发送的值)通过?我尝试了HidD_FlushQueue,但它一直返回False(不工作;继续得到“句柄无效”错误,尽管句柄对于每个WriteFile / ReadFile成功并使用相同的句柄有效) . 有任何想法吗?

谢谢!

1 回答

  • 0

    您可能不喜欢这个建议,但一个选项是一次只允许一个GUI有一个打开的句柄 . 使用您最喜欢的资源分配锁机制,并在打开句柄并使用它之前让GUI请求HID资源 .

相关问题