Издавать сигналы клавиатуры, не зависящие от региона
API Keyboard
позволяет платам Arduino, таким как Micro или Leonardo, излучать сигналы USB, имитируя физическую клавиатуру. Однако сигнал, похоже, передает нажатия клавиш, а не символы, а это означает, что машины с настройками разных регионов интерпретируют сигнал USB по-разному. Например, y
будет интерпретироваться как z
в немецкой ОС, поскольку в раскладке клавиатуры эти клавиши поменяны местами.
Есть ли способ вывести сигнал, который приведет к передаче правильного символа независимо от настроек ОС без каких-либо изменений в машине, к которой подключен Arduino?
@Philipp, 👍1
Обсуждение2 ответа
Нет. Такой возможности нет.
Если вы возьмете немецкую клавиатуру и подключите ее к компьютеру, настроенному для США, раскладка клавиш будет неправильной. Вы должны сообщить компьютеру, что используете немецкую клавиатуру.
Клавиатуры не знают, что напечатано на колпачках клавиш. Они понимают только то, где физически расположены кнопки.
То же самое и с Arduino. Он отправляет нажатия клавиш, соответствующие раскладке американской клавиатуры, и вам нужно сообщить компьютеру, что вы используете американскую клавиатуру, потому что это именно то, что вы используете.
Если вы хотите изменить раскладку клавиатуры, которую использует Arduino, вам придется вручную изменить библиотеку клавиатуры (файл Keyboard.cpp
, массив _asciimap[128]
).
Загрузить Определение класса устройства для устройств пользовательского интерфейса (HID)
https://www.usb.org/sites/default/files/documents/hid1_11 .pdf
См. раздел 6.2.1. Дескриптор HID
bCountryCode 0x09
немецкий
см. также раздел E.4 (стр. 67)
E.4 HID Descriptor (Keyboard)
Part Offset/Size Description Sample
(Bytes) Value
----------------------------------------------------------------------------------------
bLength 0/1 Size of this descriptor in bytes. 0x09
bDescriptorType 1/1 HID descriptor type (assigned by USB). 0x21
bcdHID 2/2 HID Class Specification release number
in binarycoded decimal—for example, 2.10 is 0x210). 0x101
bCountryCode 4/1 Hardware target country. 0x00
bNumDescriptors 5/1 Number of HID class descriptors to follow. 0x01
bDescriptorType 6/1 Report descriptor type. 0x22
wDescriptorLength 7/2 Total length of Report descriptor. 0x3F
Это поле игнорируется всеми операционными системами. Его планировали использовать, но никто этого не делает. Производители клавиатур не хотели создавать отдельные контроллеры для каждого языка клавиатуры — гораздо дешевле просто иметь один и менять то, что напечатано на клавиатуре. Кроме того, я не знаю ни одной операционной системы, которая могла бы применять раскладки клавиш к отдельным вводам — она устанавливается только для пользовательского сеанса в целом. Все входные данные сначала объединяются, а затем впоследствии преобразуются из кодов клавиш в символы., @Majenko
- STM32 в качестве клавиатуры
- Ввод текста в ESP8266 с помощью USB-клавиатуры
- Как преобразовать USB в PS/2?
- Можно ли создать устройство IP-to-USB HID (клавиатуру) с помощью Arduino?
- Вибрационный геймпад Arduino с силовой обратной связью
- Keyboard.print() пропускает клавиши
- Библиотека джойстиков Arduino не распознается играми (Steam)
- Разбудить компьютер из Uno
@jsotola AFAIK большинство клавиатур отправляют нажатую физическую клавишу, а не символ, представленный этой клавишей. Однако я слышал о попытках разрешить клавиатуре указывать свою раскладку и не нашел дополнительных ресурсов по этому поводу., @Philipp
сегодня наткнулся на это........ https://github.com/NicoHood/HID/blob/master/src/HID-Settings.h, @jsotola