2010-01-06 90 views
0

似乎只要数据为主机准备就绪(例如,当我使用WriteFile向HID发送命令时,我会告诉HID返回一些数据,例如端口值)并且数据包准备就绪位被置位,则在调用ReadFile之前,主机读取它(由另一个USB中断确认)。稍后将使用ReadFile将此数据放入主机的缓冲区中。这是它应该发生的方式吗?我会期望ReadFile调用导致中断。C8051F320上的HID输入报告队列

所以这里是我的问题:我有一个GUI和HID一起工作很好。 HID可以对另一个IC进行I2C操作,GUI可以告诉HID做I2C很好。启动时,GUI从HID读取数据并获取正确的值(例如,0x49)。打开第二个图形用户界面到相同的HID,从HID读取相同的初始数据并获得正确的值(例如,0x49;它应该与第一个GUI的读取相同)。现在,如果我转到第一个GUI并执行I2C读取,则回读值为0x49,这是第二个GUI从HID请求的值。看起来,HID将该值放在所有连接到它的设备的端点上。因此第1个GUI不正确地认为这是正确的值。 “每个HID的开放句柄都有自己的报告队列,设备发送的每个报告都会进入所有的队列,因此多个应用程序可以读取相同的报告。”我相信这是我的问题。如何在第一个GUI执行请求之前清除并清除端点,以便正确的值(HID通过调试器发送的值)能够通过?我尝试了HidD_FlushQueue,但它一直返回False(不工作;不断得到“句柄无效”的错误,虽然句柄在每个WriteFile/ReadFile成功时都有效)。有任何想法吗?

谢谢!

回答

0

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