2010-01-06 73 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資源。