Старший Пользователь
Регистрация: 09.04.2008
Возраст: 45
Город: Одесса
Регион: Украина
Машина: Chevrolet Aveo-II LS 2008
Сообщений: 896
|
нет, не такая же.
Давай на примере моего репорта. Надеюсь, ты заметил, что я показал только смысловую часть, опустив начало и конец.. )
Репортдескрипшн (описалово репорта) как раз и показывает какие данные и как мы будем передавать.
Тут мы говорим, что будет новая коллекция (вариант репорта) под обычную клаву:
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x06, // USAGE (Keyboard)
0xa1, 0x01, // COLLECTION (Application)
РепортИД для этой коллекции - 1:
0x85, 0x01, // REPORT_ID (1)
Используем клавиатуру:
0x05, 0x07, // USAGE_PAGE (Keyboard)
Диапазон значений следующего поля - от 0хе0 до 0хе7)
0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)
0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)
Каждое значение может быть либо 0 либо 1:
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
Размер поля - 1 бит. Кол-во полей - 8:
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x08, // REPORT_COUNT (8)
То, что мы описали - вход для хоста, и данные идут как массив битов:
0x81, 0x02, // INPUT (Data,Var,Abs)
Это мы описали первый блок в репорте. Иными словами и по-русски - мы передаем 1 байт (8 бит), каждый бит в котором соответствует одной из клавиш от Keyboard LeftControl до Keyboard Right GUI.
Следующий блок передает опять данные клавы:
0x05, 0x07, // USAGE_PAGE (Keyboard)
Размер поля - 8 бит. Кол-во полей - 1шт:
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x08, // REPORT_SIZE (8)
Диапазон значений - от 0до 0х65, транслируется 1:1 :
0x25, 0x65, // LOGICAL_MAXIMUM (101)
0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated))
0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application)
Опять же - вход, но уже как значения:
0x81, 0x00, // INPUT (Data,Ary,Abs)
На этом первая коллекция закончилась. Больше в этом репорте мы ничего не шлем.
0xc0, // END_COLLECTION
Итого вышло три байта:
байт 1 - reportID = 1 (говорит о том, что дальше данные из первой коллекции)
байт 2 - массив для функциональных клавиш
байт 3 - одна из обычных.
Теперь вторая коллекция
0x05, 0x0c, // USAGE_PAGE (Consumer Devices)
0x09, 0x01, // USAGE (Consumer Control)
0xa1, 0x01, // COLLECTION (Application)
Именно такой репортид мы будем слать для нее:
0x85, 0x02, // REPORT_ID (2)
Страница - Сonsumer Devices (именно там у нас коды мультимедийных клавиш):
0x05, 0x0c, // USAGE_PAGE (Consumer Devices)
Диапазон значений и его отображение. Обрати внимание, что он двухбайтный:
0x19, 0x00, // USAGE_MINIMUM (Unassigned)
0x2a, 0x08, 0x01, // USAGE_MAXIMUM (Police Alarm)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0x08, 0x01, // LOGICAL_MAXIMUM (264)
Слать будем два поля по 8 байт (те же два байта):
0x95, 0x02, // REPORT_COUNT (2)
0x75, 0x08, // REPORT_SIZE (8)
0x81, 0x00, // INPUT (Data,Ary,Abs)
0xc0, // END_COLLECTION
Иными словами:
байт 1 - репортид = 2
байты 2и3 - код клавиши в соответствии с таблицей, что я давал выше.
Все.
Теперь в общем.. Если мы хотим послать событие обычной кнопки - то шлем данные только для коллекции 1. Если для мультимедийной - то данные для коллекции 2. И там и там мы задали слать по 3 байта.
|