Ir para o conteúdo

Barcode Scanner Emulator

Como os leitores de código de barras funcionam

Uma leitura de código de barras parece instantânea, mas há quatro etapas distintas entre o código físico e o caractere que chega ao aplicativo. Entender cada etapa torna os bugs do leitor bem mais fáceis de diagnosticar.

As quatro etapas de uma leitura de código de barras

1. Iluminação e captura de imagem

Leitores a laser varrem um feixe sobre o código e medem a intensidade da luz refletida. Leitores por imagem (a maioria dos leitores de mão modernos e das câmeras de celular) capturam uma imagem 2D do código com um sensor CMOS pequeno, parecido com uma câmera de baixa resolução.

2. Decodificação

O firmware interno analisa as larguras das barras (ou a imagem 2D, no caso de QR e Data Matrix) e as decodifica na carga digital original, com o algoritmo da simbologia específica: Code 128, Code 39, EAN-13, QR e assim por diante. Tudo isso acontece dentro do próprio leitor, antes de qualquer dado chegar ao computador.

3. Comunicação

A carga decodificada é enviada ao computador host. O transporte costuma ser USB, e a grande maioria dos leitores de consumo e industriais se apresenta ao sistema operacional como um teclado USB HID, e não como uma classe USB personalizada. Alguns leitores aceitam modos alternativos, como serial USB (emulação de porta COM) ou Bluetooth HID, mas a emulação de teclado é o padrão em quase todo leitor vendido hoje.

4. Entrada no aplicativo

Como o leitor age como teclado, o sistema operacional entrega a carga como uma sequência de eventos de tecla para o aplicativo que tem o foco do teclado. O aplicativo nunca fala direto com o leitor. Ele só recebe pressionamentos de tecla, exatamente como se alguém tivesse digitado muito rápido.

Por que a maioria dos leitores se comporta como teclado

Modo teclado HID é a configuração padrão de quase todos os leitores comerciais de código de barras porque não exige instalação de driver. Qualquer sistema operacional que aceite teclado USB aceita o leitor na hora.

Emulação de teclado USB significa que o firmware do leitor mapeia cada caractere decodificado para o código de tecla USB HID que um teclado enviaria para aquele caractere e transmite relatórios padrão de teclado HID pelo endpoint de interrupção USB.

Por que isso importa nos testes: como, na camada do aplicativo, o leitor é indistinguível de um teclado, dá para testar boa parte do comportamento guiado pelo leitor digitando rápido em um campo com foco, ou com uma ferramenta de navegador que inspeciona eventos de teclado (veja as ferramentas abaixo).

Sufixos ENTER e TAB

A maioria dos leitores é configurada para acrescentar um pressionamento de sufixo depois da carga decodificada, em geral ENTER (retorno de carro, 0x0D), às vezes TAB (0x09) ou uma sequência personalizada. Isso existe para o aplicativo receptor saber onde o valor lido termina sem precisar de tempo limite. O sufixo funciona como sinal de envio, parecido com pressionar Enter depois de digitar em um campo de texto.

Tempo do leitor

Um leitor transmite a carga inteira do código em bem menos de um segundo, muitas vezes com intervalos de poucos milissegundos entre os caracteres. Uma pessoa digitando a mesma sequência costuma ter intervalos de 100–300 ms ou mais. Essa diferença de tempo é a base da lógica de "detecção de leitor" em muitos aplicativos de POS e estoque, que observam rajadas de entrada anormalmente rápidas seguidas na hora por uma tecla de sufixo.

Para o aplicativo, isso significa: se você quer diferenciar a entrada do leitor da digitação manual, meça o tempo entre os pressionamentos em vez de procurar uma flag especial, porque os eventos de teclado padrão do navegador não trazem informação sobre a origem da entrada.

Experimente

Use o testador de entrada de código de barras para ler um código real e ver em tempo real o valor capturado, o tempo e a detecção do sufixo. Para ir mais a fundo no comportamento da cunha de teclado, continue em Cunha de teclado HID explicada.