Чтение нескольких отчетов HID

#windows #winapi #readfile #hid

#Windows #winapi #readfile #hid

Вопрос:

Я установил размер своего отчета в 64 байта и хочу передавать отдельные отчеты (скажем, 2 на данный момент) на хост. Насколько я понимаю, существует ReadFile буфер, в котором могут храниться эти отчеты. На хосте у меня есть 64-байтовый буфер, который я использую для чтения отдельных отчетов. Если я отправляю один отчет с устройства, хост считывает его нормально. Если я использую два ReadFile файла в цикле, время ожидания второго файла для чтения истекает. Устройство отправляет два отчета. Я не знаю, попадают ли они в ReadFile буфер одновременно, поэтому, когда хост считывает конечную точку для первого отчета, буфер очищается, и я теряю второй отчет? Если в ReadFile буфере действительно есть 2 отчета, нужно ли мне читать их оба сразу? Как я узнаю, сколько отчетов находится в буфере?

Ответ №1:

ReadFile считывает столько отчетов, сколько есть в кольцевом буфере драйвера HID, вплоть до параметра numberOfBytesToRead.

Ответ №2:

Соответствующий драйвер HID реализует все по мере необходимости. Вам не нужно беспокоиться о том, поступают ли эти пакеты «одновременно». Они не будут.

В первом пакете должна быть указана длина отчета (т. Е. набор пакетов), что, в свою очередь, должно позволить вам выяснить, есть ли у вас полный отчет.

Конечно, вам придется сохранить внутреннее представление данных из отчета, поскольку размер буферов пакетов может составлять не более 64 байт в соответствии со спецификацией. Таким образом, чтобы собрать полный отчет, вам придется справиться с этим самостоятельно или использовать Hid_* процедуры, описанные в WDK.