Barcode Scanner Emulator
Пояснение клавиатурного клина HID
Клавиатурный клин — режим работы по умолчанию у подавляющего большинства сканеров штрихкодов. Это руководство объясняет, что это такое, как он работает на уровне USB и что это значит при тестировании приложения.
Что такое клавиатурный клин?
Термин идёт от старых сканеров последовательного порта, которые буквально «вклинивались» (wedged) между клавиатурой и портом компьютера, перехватывали сигнал клавиатуры и вставляли в него считанные символы. Современным сканерам физический клин не нужен. Теперь так называют любой сканер, который предъявляет считанные данные так, будто они пришли с клавиатуры, независимо от типа подключения.
USB HID и эмуляция клавиатуры
USB определяет класс Human Interface Device (HID) специально для клавиатур, мышей и похожих устройств ввода. Когда сканер перечисляется по USB как клавиатура HID, операционная система загружает свой общий встроенный драйвер клавиатуры. Отдельный драйвер сканера не нужен. Прошивка превращает каждый декодированный символ в код клавиши HID, который отправила бы физическая клавиатура, а отчёты доставляются тем же механизмом передачи по прерыванию, что и у любой клавиатуры USB.
Как приложение видит ввод со сканера
Быстрая пачка нажатий вместо человеческого набора: сканер отправляет всю нагрузку быстрой последовательностью пар keydown/keyup и обычно заканчивает меньше чем за секунду, какой бы ни была длина штрихкода.
Нет событий мыши: сканеры в режиме клавиатуры HID никогда не создают события указателя, щелчка или фокуса. Если в момент сканирования у поля нет фокуса, ввод теряется или попадает в тот элемент, у которого фокус есть.
Нет событий вставки: данные приходят отдельными нажатиями, а не операцией буфера обмена, поэтому обработчики paste не увидят ввод со сканера, а маски, которые слушают только paste, молча его пропустят.
Проблемы раскладки клавиатуры
Почему появляются неверные символы: сканер сопоставляет декодированные символы с кодами клавиш HID по своей настроенной раскладке. Если эта раскладка не совпадает с раскладкой операционной системы, символы могут поменяться местами. Классический признак — цифры или знаки препинания, которые на системах QWERTY и AZERTY считываются как другой символ.
Несовпадение локали: это проблема настройки сканера, а не ошибка программы. Большинство сканеров меняет локаль конфигурационными штрихкодами из руководства, и исправление состоит в перепрограммировании сканера под локаль системы, а не в изменении кода приложения.
Префиксы и суффиксы
Сканеры обычно поддерживают настраиваемые последовательности префикса и суффикса вокруг данных. Самые частые суффиксы — ENTER (CR, 0x0D), TAB (0x09) и иногда полная пара CR+LF. Префиксы встречаются реже, но иногда направляют сканирования в конкретные поля старых терминальных приложений.
Ограничения тестов в браузере
Браузер не видит сырые пакеты USB HID, не может перечислить подключённые устройства HID именно как сканер (кроме API WebHID, через который большинство сканеров данные не отдаёт) и не отличает сканер в режиме клавиатуры HID от настоящей клавиатуры. JavaScript доступны только события клавиатуры, видимые браузеру (keydown, keyup, keypress), и именно их разбирают инструменты этого сайта.
Связанные материалы
Используйте тестер событий клавиатуры, чтобы разобрать сырые события клавиатуры, или прочитайте руководство Суффиксы ENTER и TAB о настройке суффикса.