#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.