HID входные очереди отчетов на C8051F320 - PullRequest
0 голосов
/ 07 января 2010

кажется, что, как только данные будут готовы для хоста (например, когда я использую WriteFile для отправки команды HID, в которой я говорю HID вернуть некоторые данные, такие как значение порта) и пакет in Бит готовности установлен, хост читает его (что подтверждается другим USB-прерыванием) перед вызовом ReadFile. Позже ReadFile используется для помещения этих данных в буфер на хосте. Так ли это должно быть? Я ожидал бы, что вызов ReadFile вызовет прерывание.

Итак, вот моя проблема: у меня есть графический интерфейс и HID, которые хорошо работают вместе. HID может сделать I2C с другой микросхемой, а графический интерфейс может сказать HID, что он делает I2C просто отлично. После запуска графический интерфейс считывает данные из HID и получает правильное значение (скажем, 0x49). Открытие второго GUI для того же HID выполняет те же начальные данные, которые считываются из HID, и получает правильное значение (скажем, 0x49; оно должно совпадать с показаниями первого GUI). Теперь, если я перейду к первому графическому интерфейсу и произвожу чтение I2C, значение обратного чтения будет 0x49, то есть значение, которое 2-й графический интерфейс запросил у HID. Кажется, что HID помещает это значение в конечную точку для всех подключенных к нему устройств. Таким образом, 1-й графический интерфейс неправильно считает, что это правильное значение.

Согласно часто задаваемым вопросам Яна Аксельсона, «каждый открытый дескриптор HID имеет свою собственную очередь отчетов. Каждый отчет, отправляемый устройством, попадает во все очереди, поэтому несколько приложений могут читать один и тот же отчет». Я считаю, что это моя проблема. Как мне очистить это и очистить конечную точку до того, как 1-й графический интерфейс выполнит свой запрос, чтобы получить правильное значение (которое HID отправляет на отладчик)? Я попытался HidD_FlushQueue, но он продолжает возвращать False (не работает; постоянно получаю ошибки «дескриптор недействителен», хотя дескриптор действителен для успешного выполнения WriteFile / ReadFile с теми же дескрипторами). Есть идеи?

Спасибо!

1 Ответ

0 голосов
/ 14 февраля 2010

Возможно, вам не понравится это предложение, но одним из вариантов будет позволить только одному графическому интерфейсу одновременно иметь открытый дескриптор. Используйте ваш любимый механизм блокировки выделения ресурсов и заставьте GUI запрашивать ресурс HID, прежде чем открывать дескриптор и использовать его.

...