Отправляете правильный HID Keycode? - PullRequest
1 голос
/ 20 марта 2012

В настоящее время я разрабатываю очень маленькую и специальную HID-клавиатуру с микроконтроллером Atmega. Самая большая проблема у меня заключается в том, что код ключа очень специфичен для локали, которая в данный момент установлена ​​на хост-компьютере.

Все обычные символы, такие как a-z, работают очень хорошо, но некоторые специальные символы дают плохие результаты при нажатии клавиши.

Например, клавиша +, которая 0xE1 & 0x2E (LeftShift & KeyboardEqualSign), работает только на клавиатуре США. Но я использую немецкий макет, поэтому вместо него я получаю ß.

Как теперь я могу получить правильные коды клавиш для немецкой раскладки? Я не могу найти какой-либо документ, описывающий такие клавиши ... Я думаю, что коды HID действительно плохи и предназначены для поддержки нескольких раскладок клавиатуры: (

Нужно ли мне искать мои ключи на немецком макете, какими они были бы у нас? Так что для знака + это, вероятно, ключ ]? Но почему, черт возьми, это такой глупый дизайн? Для этого есть какая-нибудь обертка?

1 Ответ

0 голосов
/ 16 июня 2015

была такая же проблема. Я сделал снимок клавиатуры en_us и сравнил ее с моей немецкой клавиатурой, а затем перенес ее на коды клавиш ... Он еще не закончен, потому что это удивительно много работы, и мне сейчас не нужны другие символы. Самые важные персонажи должны быть там. Это отсортировано после Iso8859, я оставил iso коды, может быть, это кому-то поможет.

Вот, пожалуйста,

шестнадцатеричный код iso8859, модификатор, скрытый код USB, символ

  • 0x22, смещение, 0x1F, "
  • 0x23, 0,0x31, #
  • 0x24, смещение, 0x21, $
  • 0x25, смещение, 0x22,%
  • 0x26, смещение, 0x23, &
  • 0x27, смещение, 0x31, '
  • 0x28, смещение, 0x25, (
  • 0x29, смещение, 0x26,
  • 0x2A, смещение, 0x30, *
  • 0x2B, 0,0x30, +
  • 0x2C, 0,0x36,,
  • 0x2D, ​​0,0x38, -
  • 0x2E, 0,0x37,.
  • 0x2F, смещение, 0x24, /
  • от 0x30 до 0x39 - цифры, здесь без изменений en_us
  • 0x3A, смещение, 0x37,:
  • 0x3B, смещение, 0x36,;
  • 0x3C, 0,0x64, <</li>
  • 0x3D, смещение, 0x27, =
  • 0x3E, смещение, 0x64,>
  • 0x3F, смещение, 0x2D,?
  • 0x40, altgr, 0x14, @ * Заглавная буква, здесь без изменений en_us
  • 0x59, смещение, 0x1D, переключатель Z, Y
  • 0x5A, смещение, 0x1C;
  • 0x5B, altgr, 0x25, [
  • 0x5C, altgr, 0x2D, ​​"\"
  • 0x5D, altgr, 0x26,]
  • 0x5E, 0,0x35, ^
  • 0x5F, смещение, 0x38, _
  • 0x60, смещение, 0x2E, ` * строчные буквы, без изменений здесь en_us
  • 0x79, 0,0x1D, переключатель z, y
  • 0x7A, 0,0x1C
  • 0x7B, altgr, 0x24, {
  • 0x7C, altgr, 0x64, |
  • 0x7D, altgr, 0x27,}
  • 0x7E, altgr, 0x30, ~ * 0x80 до 0x9F не используется 0xA0 Не существует "не пробел"
  • еще не сделал
  • 0xC4, смещение, 0x34, Ä
  • еще не сделал
  • 0xD6, смещение, 0x33, ...
  • еще не сделал
  • 0xDC, смещение, 0x2F, Ü
  • еще не сделали
  • 0xE4, 0,0x34,
  • еще не сделал
  • 0xF5, 0,0x33, ö
  • еще не сделал
  • 0xFC, 0,0x2F, ü
  • еще не сделал

Надеюсь, что это поможет вам или следующему наткнуться на эту проблему

С уважением

...