Barcode Scanner Emulator
Come funzionano i lettori di codici a barre
Una scansione di un codice a barre sembra immediata, ma tra il codice fisico e il carattere che arriva nell'applicazione ci sono quattro fasi distinte. Capire ciascuna fase rende molto più semplice diagnosticare i bug legati al lettore.
Le quattro fasi di una scansione di codice a barre
1. Illuminazione e acquisizione dell'immagine
I lettori laser spazzano un fascio sul codice a barre e misurano l'intensità della luce riflessa. I lettori a imager (la maggior parte delle pistole moderne e dei lettori con fotocamera del telefono) catturano un'immagine 2D del codice a barre con un piccolo sensore CMOS, simile a una fotocamera a bassa risoluzione.
2. Decodifica
Il firmware di bordo analizza le larghezze delle barre (o l'immagine 2D, per i codici QR e Data Matrix) e le decodifica nel payload digitale originale, usando l'algoritmo della simbologia specifica — Code 128, Code 39, EAN-13, QR e così via. Tutto questo avviene dentro il lettore, prima che qualsiasi dato raggiunga il computer.
3. Comunicazione
Il payload decodificato viene trasmesso al computer host. Il trasporto è di solito USB e la grande maggioranza dei lettori consumer e industriali si presenta al sistema operativo come una tastiera USB HID, non come una classe USB personalizzata. Alcuni lettori supportano modalità alternative come USB seriale (emulazione di porta COM) o Bluetooth HID, ma la modalità di emulazione tastiera è l'impostazione predefinita di quasi tutti i lettori in vendita oggi.
4. Input dell'applicazione
Poiché il lettore agisce come una tastiera, il sistema operativo consegna il payload come sequenza di eventi tastiera all'applicazione che ha il focus della tastiera. L'applicazione non parla mai direttamente con il lettore: riceve soltanto pressioni di tasti, esattamente come se qualcuno li avesse digitati molto in fretta.
Perché la maggior parte dei lettori si comporta come una tastiera
La modalità tastiera HID è la configurazione predefinita di quasi tutti i lettori di codici a barre commerciali perché non richiede l'installazione di un driver. Qualsiasi sistema operativo che supporta una tastiera USB supporta il lettore appena collegato.
L'emulazione di tastiera USB significa che il firmware del lettore associa ogni carattere decodificato al keycode USB HID che una tastiera invierebbe per quel carattere, poi trasmette report tastiera HID standard sull'endpoint di interrupt USB.
Perché conta nei test: poiché a livello applicativo il lettore è indistinguibile da una tastiera, puoi testare gran parte del comportamento guidato dal lettore digitando in fretta in un campo con il focus, oppure usando uno strumento del browser che ispeziona gli eventi tastiera (vedi gli strumenti collegati sotto).
Suffissi ENTER e TAB
La maggior parte dei lettori è configurata per aggiungere una pressione di suffisso dopo il payload decodificato, di solito ENTER (ritorno a capo, 0x0D), a volte TAB (0x09) o una sequenza personalizzata. Serve perché l'applicazione ricevente capisca dove finisce il valore letto senza un timeout: il suffisso agisce come segnale di invio, simile alla pressione di Invio dopo aver digitato in un campo di testo.
Temporizzazione del lettore
Un lettore trasmette l'intero payload di un codice a barre in molto meno di un secondo, spesso con pochi millisecondi tra un carattere e l'altro. Una persona che digita la stessa stringa lascia di solito 100–300 ms o più tra le pressioni. Questa differenza di tempo è la base della logica di "rilevamento del lettore" in molte applicazioni POS e di magazzino, che osservano raffiche di input insolitamente rapide seguite subito da un tasto di suffisso.
Per la tua applicazione significa: se vuoi distinguere l'input del lettore dalla digitazione manuale, misura il tempo tra le pressioni invece di cercare un flag speciale, perché gli eventi tastiera standard del browser non portano informazioni sulla sorgente dell'input.
Provalo tu
Usa il tester di input dei codici a barre per leggere un codice a barre reale e vedere in tempo reale il valore acquisito, la temporizzazione e il rilevamento del suffisso. Per un approfondimento sul comportamento del keyboard wedge, continua con Emulazione tastiera HID spiegata.