0

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

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

谢谢!

4

1 回答 1

0

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

于 2010-02-14T16:01:32.260 回答