Размер буфера HID_READ_REPORT

Тема в разделе "WASM.NT.KERNEL", создана пользователем Llirik, 18 июн 2019.

  1. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Если указать в дескрипторе отчёта REPORT_ID, то тогда размер буфера отчёта будет равен размеру наибольшего из отчётов, но как быть, если необходимо отравить сразу несколько отчётов? Да, можно не указывать REPORT_ID и тогда размер буфера отчёта будет равен размеру всех отчётов, но тогда придётся заполнять чем-то их все, даже если на тот момент у моего драйвера не будет актуальных данных. Подскажите, пожалуйста, можно ли как-то самому указать общий размер буфера отчёта
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Не используйте HID используйте Bulck
     
  3. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    А зачем мне Bulck, если я пишу драйвер джойстика для всех версий винды?
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Тогда зачем вам несколько отчётов? Обычно достаточно одного. Но если надо несколько делаете FSM и отправляете их в цикле по очереди.

    И в какой такой момент? Данные у вас будут неизвестны только в момент сброса то бишь включения.
    После этого данные сидят в вашем буфере, что значит в переводе элемент задержки, и вы когда надо вычитываете данные из буфера и отправляете. А то что они немного не актуальны. Так о этом никому знать не положено. Тем более это стандартная практика (грязное чтение называется).

    REPORT_ID обнулять не надо.
     
  5. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Нет) данные не будут сидеть в буфере. В момент их получение драйвер будет доставать IRP IOCTL_HID_READ_REPORT из системной очереди, заполнять его буфер пришедшими данными, и завершать его. Если размер буфера никак нельзя задать, может лучше обойтись без REPORT_ID, а непришедшие данные заменять предыдущими значениями?