Список кодов сканирования шестнадцатеричной клавиатуры и документации по USB HID

Где я могу найти список кодов сканирования шестнадцатеричной клавиатуры для разных раскладок клавиатуры?

Я посылаю коды клавиш через (фальшивую) USB-HID-клавиатуру с помощью команды bash echo -ne, за которой следует код проверки экранированного шестнадцатеричного ключа и устройство HID:

echo -ne "\x00\x00\x00\x38\x00\x00\x00\x00" > /dev/hidg0
echo -ne "\x00\x00\x00\x00\x00\x00\x00\x00"  > /dev/hidg0

для косой черты (/) на раскладке клавиатуры США.

На моей раскладке клавиатуры (CH) это

echo -ne "\x00\x00\x00\x24\x00\x00\x00\x00" > /dev/hidg0
echo -ne "\x00\x00\x00\x00\x00\x00\x00\x00"  > /dev/hidg0

для косой черты. Поэтому я предполагаю, что для всех существует список. Тем не менее мне удалось найти список для US layout, но не для какой-либо другой раскладки клавиатуры.

Я знаю, что вторая строка останавливает ввод ключа, но я не совсем понимаю синтаксис этих escape-последовательностей. Я знаю, что если я изменю первый \x00 на x02, он "сдвинет" введенный ключ. Но почему есть еще 6 модификаторов? Они стоят за ctrl, alt,...? И для чего стоит?

Документация по этому синтаксису будет действительно крутой. Я еще не смог найти его.

(Я использую Kali Nethunter на Nexus 7 2012)

Ответ 1

"Коды сканирования" (они действительно являются индексами кодов использования) публикуются на usb.org в таблицах USB HID Usage Table в главе 10 "Клавиатура/Страница клавиатуры (0x07)". Типичный макет отчета о клавиатуре можно найти в Спецификация класса USB-устройств для HID в Приложении B "Дескрипторы дескриптора загрузки", раздел "B.1 Protocol 1 (Keyboard)".

Это описывает формат отчета клавиатуры как:

Byte 0: Keyboard modifier bits (SHIFT, ALT, CTRL etc)
Byte 1: reserved
Byte 2-7: Up to six keyboard usage indexes representing the keys that are 
          currently "pressed". 
          Order is not important, a key is either pressed (present in the 
          buffer) or not pressed.

Обратите внимание, что спецификация USB не определяет раскладки клавиатуры. Он просто перечисляет коды использования, назначенные определенным ключевым функциям. Например, буквой "a" является код использования 0x04. Если вы хотите иметь верхний регистр "A", вам также нужно будет установить биты модификатора байта 0, чтобы выбрать "Левый сдвиг" (или "Сдвиг вправо" ).

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