Barcode Scanner Emulator
Как работают сканеры штрихкодов
Сканирование штрихкода кажется мгновенным, но между физическим кодом и символом, который попадает в приложение, четыре отдельных этапа. Понимание каждого этапа сильно упрощает диагностику ошибок сканера.
Четыре этапа сканирования штрихкода
1. Подсветка и захват изображения
Лазерные сканеры проводят луч по штрихкоду и измеряют интенсивность отражённого света. Сканеры на основе имиджера (большинство современных ручных сканеров и камер телефона) снимают двумерное изображение кода небольшим датчиком CMOS, похожим на камеру низкого разрешения.
2. Декодирование
Встроенная прошивка анализирует ширину штрихов (или двумерное изображение для QR и Data Matrix) и декодирует их в исходные цифровые данные алгоритмом конкретной символики: Code 128, Code 39, EAN-13, QR и так далее. Всё это происходит внутри сканера, ещё до того как данные попадут на компьютер.
3. Передача
Декодированные данные передаются на компьютер-хост. Транспорт обычно USB, и подавляющее большинство бытовых и промышленных сканеров представляется операционной системе как клавиатура USB HID, а не как собственный класс USB. Некоторые сканеры поддерживают другие режимы, например последовательный USB (эмуляция порта COM) или Bluetooth HID, но эмуляция клавиатуры — режим по умолчанию почти у каждого сканера, который продаётся сегодня.
4. Ввод в приложение
Поскольку сканер действует как клавиатура, операционная система доставляет данные последовательностью событий клавиш тому приложению, у которого сейчас фокус клавиатуры. Приложение никогда не общается со сканером напрямую. Оно получает только нажатия клавиш, ровно так, как если бы их очень быстро набрал человек.
Почему большинство сканеров ведут себя как клавиатуры
Режим клавиатуры HID — конфигурация по умолчанию почти у всех коммерческих сканеров штрихкодов, потому что не требует установки драйвера. Любая операционная система, которая поддерживает клавиатуру USB, поддерживает сканер сразу.
Эмуляция клавиатуры USB означает, что прошивка сканера сопоставляет каждый декодированный символ с кодом клавиши USB HID, который клавиатура отправила бы для этого символа, и передаёт стандартные отчёты клавиатуры HID через конечную точку прерывания USB.
Почему это важно при тестировании: на уровне приложения сканер неотличим от клавиатуры, поэтому большую часть поведения, которым управляет сканер, можно проверить быстрым набором в поле с фокусом или инструментом браузера, который разбирает события клавиатуры (см. инструменты ниже).
Суффиксы ENTER и TAB
Большинство сканеров настроено добавлять после декодированных данных нажатие суффикса, чаще всего ENTER (возврат каретки, 0x0D), иногда TAB (0x09) или собственную последовательность. Так принимающее приложение понимает, где заканчивается считанное значение, без тайм-аута. Суффикс работает как сигнал отправки, похожий на нажатие Enter после ввода в текстовое поле.
Время сканера
Сканер передаёт всю полезную нагрузку штрихкода заметно быстрее одной секунды, часто с промежутками в несколько миллисекунд между символами. Человек, набирающий ту же строку, обычно делает паузы 100–300 мс и больше. Эта разница во времени лежит в основе логики «обнаружения сканера» во многих приложениях POS и склада: они следят за необычно быстрыми пачками ввода, за которыми сразу идёт клавиша суффикса.
Для приложения это значит: если нужно отличить ввод со сканера от ручного набора, измеряйте время между нажатиями, а не ищите особый признак, потому что обычные события клавиатуры в браузере не сообщают источник ввода.
Попробуйте сами
Используйте тестер ввода штрихкода, чтобы считать настоящий код и в реальном времени увидеть захваченное значение, время и обнаружение суффикса. Чтобы подробнее разобрать именно клавиатурный клин, перейдите к Пояснению клавиатурного клина HID.