Barcode Scanner Emulator
バーコードスキャナーの仕組み
バーコードの読み取りは一瞬に見えますが、物理的なバーコードからアプリケーションに文字が入るまでには四つの段階があります。各段階を理解すると、スキャナー関連の不具合を診断しやすくなります。
バーコード読み取りの四つの段階
1. 照明と画像の取得
レーザスキャナーはビームをバーコード上で走査し、反射光の強度を測定します。イメージャ方式のスキャナー(最近のハンディスキャナーやスマートフォンのカメラスキャナーの大半)は、小型の CMOS センサーでバーコードの 2D 画像を取得します。低解像度のカメラに近い仕組みです。
2. 復号
内蔵ファームウェアがバーの幅(QR や Data Matrix では 2D 画像)を解析し、そのシンボル体系向けのアルゴリズムで元のデジタルデータへ復号します。Code 128、Code 39、EAN-13、QR などです。これはすべてスキャナー内部で行われ、データがコンピューターに届く前に完了します。
3. 通信
復号されたデータはホストコンピューターへ送信されます。伝送路は通常 USB で、一般向けおよび産業用スキャナーの大半は、独自の USB クラスではなく USB HID キーボードデバイスとして OS に認識されます。USB シリアル(COM ポートエミュレーション)や Bluetooth HID などの代替モードに対応する機種もありますが、今日販売されているほぼすべてのスキャナーでは、キーボードエミュレーションが既定です。
4. アプリケーション入力
スキャナーはキーボードとして動作するため、オペレーティングシステムは、現在キーボードフォーカスを持つアプリケーションへキーイベントの列としてデータを届けます。アプリケーションがスキャナーと直接通信することはありません。誰かが非常に速くタイプしたときと同じキー入力を受け取るだけです。
大半のスキャナーがキーボードのように振る舞う理由
HID キーボードモードは、ほぼすべての商用バーコードスキャナーの既定設定です。ドライバのインストールが不要なためです。USB キーボードに対応する OS であれば、スキャナーも最初から使えます。
USB キーボードエミュレーションでは、スキャナーのファームウェアが復号した各文字を、キーボードがその文字に対して送る USB HID キーコードへ対応づけ、USB の割り込みエンドポイント経由で標準の HID キーボードレポートを送信します。
テストでこれが重要な理由: アプリケーション層ではスキャナーとキーボードを区別できないため、フォーカスされたフィールドへ素早く入力するか、キーボードイベントを調べるブラウザツールを使うだけで、スキャナー由来の動作の大部分をテストできます(下記のツールを参照)。
ENTER と TAB の接尾辞
大半のスキャナーは、復号したデータの直後に接尾辞のキー入力を付けるよう設定されています。最も一般的なのは ENTER(キャリッジリターン、0x0D)で、TAB(0x09)や任意のシーケンスの場合もあります。これにより、受信側アプリケーションはタイムアウトに頼らず、スキャンした値の終わりを判断できます。接尾辞は、テキストフィールドへ入力したあと Enter を押すのと同じ送信信号として働きます。
スキャナーのタイミング
スキャナーはバーコード全体を 1 秒よりかなり短い時間で送り、文字と文字の間隔は数ミリ秒程度であることが多いです。人が同じ文字列を打つと、キーの間隔は通常 100〜300ms 以上になります。この時間差が、多くの POS や在庫アプリケーションにおける「スキャナー検出」の基礎です。異常に速い入力の連続の直後に接尾辞キーが来ることを監視します。
アプリケーション側では、スキャナー入力と手入力を区別したい場合、特別なフラグを探さずキー間隔を測ってください。標準のブラウザのキーボードイベントには、入力元を示す情報が含まれないためです。
自分で試す
バーコード入力テスターで実際のバーコードを読み取り、取得した値、タイミング、接尾辞の検出をリアルタイムで確認できます。キーボードウェッジの動作をさらに詳しく知るには、HID キーボードウェッジの解説へ進んでください。