C8051F320上的HID输入报告队列

时间:2010-01-06 22:42:00

标签: usb interrupt hid i2c

似乎只要数据准备好主机(例如当我使用WriteFile向HID发送命令时,我告诉HID返回一些数据,如端口值)和in packet就绪位置位,主机在调用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将此值放在连接到它的所有设备的端点中。因此,第一个GUI错误地认为这是正确的值。

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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