Barcode Scanner Emulator
Emulación de teclado HID explicada
La emulación de teclado, también llamada keyboard wedge, es el modo de trabajo de la enorme mayoría de los escáneres de códigos de barras. Esta guía explica qué es, cómo opera a nivel de USB y qué significa al probar tu app.
¿Qué es la emulación de teclado?
El nombre en inglés, keyboard wedge, viene de los escáneres viejos de puerto serial que se intercalaban de verdad entre el teclado y el puerto de la computadora: interceptaban la señal del teclado y metían ahí los caracteres escaneados. Los escáneres de ahora ya no necesitan ese intercalado físico. Hoy la frase describe cualquier escáner que entrega los datos escaneados como si hubieran salido de un teclado, sin importar cómo esté conectado.
USB HID y emulación de teclado
USB define una clase Human Interface Device (HID) para teclados, mouse y dispositivos de entrada parecidos. Cuando un escáner se enumera en USB como teclado HID, el sistema operativo carga su driver de teclado genérico, el que ya trae integrado. No hace falta un driver propio del escáner. El firmware convierte cada carácter decodificado en el código de tecla HID que enviaría un teclado físico, y los reportes viajan por la misma transferencia por interrupción que usa cualquier teclado USB.
Cómo ve tu app la entrada del escáner
Una ráfaga rápida de teclazos, no una escritura humana: el escáner manda toda la carga como una secuencia veloz de pares keydown/keyup y, por lo general, termina en menos de un segundo, sin importar qué tan largo sea el código.
No hay eventos de mouse: un escáner en modo de teclado HID nunca genera eventos de puntero, clic o foco. Si tu campo no está enfocado cuando ocurre el escaneo, la entrada se pierde o cae en el elemento que sí tiene el foco.
No hay eventos de pegado: los datos llegan como teclazos sueltos, no como una operación del portapapeles. Por eso los manejadores del evento paste no ven la entrada del escáner, y las máscaras que solo escuchan paste la dejan pasar en silencio.
Problemas con el diseño del teclado
Por qué salen caracteres equivocados: el escáner mapea los caracteres decodificados a códigos de tecla HID con el diseño de teclado que tiene configurado. Si ese diseño no coincide con el del sistema operativo, los caracteres se cruzan. Un síntoma clásico es que los dígitos o la puntuación se escaneen como otro carácter al pasar de QWERTY a AZERTY.
La configuración regional no coincide: es un tema de configuración del escáner, no un bug del software. Casi todos los escáneres permiten cambiar la configuración regional con códigos de configuración impresos en el manual. La corrección consiste en reprogramar el escáner para que iguale la configuración regional del sistema operativo, no en tocar el código de la app.
Prefijos y sufijos
Los escáneres suelen permitir secuencias de prefijo y sufijo alrededor de la carga. Los sufijos más usados son ENTER (CR, 0x0D), TAB (0x09) y, de vez en cuando, un par completo CR+LF. Los prefijos son menos frecuentes, pero a veces sirven para mandar el escaneo a un campo concreto en apps de terminal viejas.
Límites al probar en el navegador
El navegador no puede ver los paquetes USB HID en crudo, no puede enumerar los dispositivos HID conectados como si fueran un escáner (salvo con la API WebHID, por la que la mayoría de los escáneres no exponen datos) y no puede distinguir un escáner en modo de teclado HID de un teclado de verdad. JavaScript solo alcanza los eventos de teclado que el navegador deja ver (keydown, keyup, keypress), y eso es justo lo que revisan las herramientas de este sitio.
Relacionado
Usa el Inspector de eventos de teclado para revisar los eventos de teclado en crudo, o lee la guía Sufijos ENTER y TAB si necesitas el detalle de la configuración del sufijo.