Как отправить значения клавиатуры в HID с идентификатором отчета?
Я использую приведенный ниже дескриптор для отправки значений клавиш с клавиатуры через HID Bluetooth.
USAGE_PAGE(1), 0x01,
USAGE(1), 0x06,
COLLECTION(1), 0x01,
REPORT_ID(1), 0x02,
USAGE_PAGE(1), 0x07,
USAGE_MINIMUM(1), (byte) 0xE0,
USAGE_MAXIMUM(1), (byte) 0xE7,
LOGICAL_MINIMUM(1), 0x00,
LOGICAL_MAXIMUM(1), 0x01,
REPORT_SIZE(1), 0x01,
REPORT_COUNT(1), 0x08,
INPUT(1), 0x02,
REPORT_COUNT(1), 0x01,
REPORT_SIZE(1), 0x08,
INPUT(1), 0x01,
REPORT_COUNT(1), 0x05,
REPORT_SIZE(1), 0x01,
USAGE_PAGE(1), 0x08,
USAGE_MINIMUM(1), 0x01,
USAGE_MAXIMUM(1), 0x05,
OUTPUT(1), 0x02,
REPORT_COUNT(1), 0x01,
REPORT_SIZE(1), 0x03,
OUTPUT(1), 0x01,
REPORT_COUNT(1), 0x06,
REPORT_SIZE(1), 0x08,
LOGICAL_MINIMUM(1), 0x00,
LOGICAL_MAXIMUM(1), 0x65,
USAGE_PAGE(1), 0x07,
USAGE_MINIMUM(1), 0x00,
USAGE_MAXIMUM(1), 0x65,
INPUT(1), 0x00,
END_COLLECTION(0),
Проблема, с которой я сталкиваюсь, заключается в том, что я могу отправлять данные, но одни и те же данные отправляются бесконечное количество раз.
Если я устанавливаю байт модификатора в 2, то все работает нормально, то есть, когда последние прописные буквы отправляются для конкретного нажатия клавиш, но в случае, если я отправляю строчные буквы последнего, данные отправляются бесконечное количество раз.
1 ответ
Когда вы забудете отпустить клавиши, нажатия клавиш будут казаться "бесконечным числом". Массив содержит клавиши (до 6 в вашем случае), которые нажаты в данный момент. Вам необходимо очистить буфер до индекса "не указано событие", который в вашем случае равен 0x00. Если вы этого не сделаете, то хост, скорее всего, реализует функцию повтора клавиши "typ-o-matic"... то есть то, что вы видите, когда нажимаете и держите клавишу на обычной клавиатуре.