Почему keyboard.h добавляет 136 к каждой клавише?

Я хочу создать собственную раскладку клавиатуры в официальной клавиатурной библиотеке Arduino.

Почему определения ключей добавляют 136 к каждому числу?

См. Keyboard_es_ES.h на github

#define KEY_MASCULINE_ORDINAL    (136+0x35)
#define KEY_INVERTED_EXCLAMATION (136+0x2e)
#define KEY_GRAVE                (136+0x2f)
#define KEY_N_TILDE              (136+0x33)
#define KEY_ACUTE                (136+0x34)
#define KEY_C_CEDILLA            (136+0x31)

Глядя на таблицу ascii, я не вижу ничего особенного в значении 136

, 👍0


1 ответ


Лучший ответ:

2

Можно утверждать, что это деталь реализации библиотеки, что не нужно документировать. ;-) Так или иначе, вот причина...

Библиотека клавиатуры использует пользовательскую схему кодирования для представления как символы, так и клавиши. Публичные методы press(), release(), write(), print() и println() интерпретируют предоставленные пользователем данные. по этой схеме. При таком кодировании интерпретация byte зависит от того, к какому из этих трех диапазонов он принадлежит:

  • Байты в диапазоне [0, 127] считаются ASCII. Символы. Это то, что позволяет вам писать такие вещи, как Keyboard.println("Привет!");. В библиотеке используется раскладка клавиатуры массив для сопоставления этих символов с кодами сканирования клавиш¹, возможно, измененными Shift или AltGr. Вы предоставляете указатель на этот массив в качестве аргумента для начать().

  • Байты в диапазоне [128, 135] интерпретируются как ключи-модификаторы, такие как KEY_LEFT_CTRL, KEY_RIGHT_SHIFT и т. д. Обратите внимание, что эти клавиши не имеют правильных скан-кодов, так как их состояние передается в host как битовая карта (один байт для восьми ключей), а не как коды добавлено в список.

  • Байты в диапазоне [136, 255] интерпретируются как необработанные коды сканирования. в диапазоне [0, 119], смещенном на 136. Это то, что позволяет вам активировать произвольные клавиши, такие как KEY_PRINT_SCREEN или KEY_LEFT_ARROW. Все скан-коды стандартной полноразмерной клавиатуры ПК (ANSI 104 или ISO 105) лежат в диапазоне [4, 101]: вы можете получить доступ ко всем их и даже некоторые другие, такие как KEY_F24.

Относительно файла Keyboard_es_ES.h: коды там для клавиш. которые соответствуют символам ASCII в раскладке США, но не соответствуют испанским макет. Цель состоит в том, чтобы гарантировать, что каждый ключ ISO 105 клавиатуру можно активировать с помощью символа ASCII (например, Keyboard.press('a');) или макрос KEY_*.

¹ Стандарт USB называет их «кодами использования», но старый термин «сканировать коды» кажется более распространенным.

,

Просто идея для самодокументирующегося источника, но я совершенно уверен, что вы знаете об этом. ;-) Вы можете использовать символические константы вместо магических чисел., @the busybee