Lectura RFID: datos directos a tu app

Fuentes: Reading input from an USB Rfid Card Reader

Este artículo explica cómo leer datos de un lector de tarjetas RFID USB y procesarlos en una aplicación, evitando que los datos se envíen a otras aplicaciones. La idea surgió de un lector RFID USB barato que el autor tenía disponible y quería utilizar para un proyecto de software. La clave es que el lector se comporta como un teclado estándar al conectarse; al pasar una tarjeta, los datos se escriben en la entrada estándar (terminal, aplicación, etc.).

Para evitar que los datos de la tarjeta interfieran con otras aplicaciones, el autor descubrió un mecanismo llamado EVIOCGRAB ioctl. Este ioctl (un tipo de llamada al sistema en sistemas Unix-like) permite obtener acceso exclusivo al dispositivo de entrada, impidiendo que el kernel (el núcleo del sistema operativo) envíe los eventos de entrada a otras aplicaciones, como el servidor X (el sistema de ventanas en Linux). Aunque existen soluciones en Python, el autor prefirió implementar la solución en Go (Golang) para evitar dependencias externas.

El proceso implica primero identificar el dispositivo de entrada USB. Esto se hace utilizando el comando find /dev/input/by-id, que devuelve una ruta como /dev/input/by-id/usb-something_Barcode_Reader-event-kbd. Luego, se abre este dispositivo y se utiliza el EVIOCGRAB ioctl para obtener el acceso exclusivo. El código Go proporcionado lee los eventos de entrada del dispositivo, buscando eventos de pulsación de tecla ( EV_KEY con Value == 1). Cada tecla se mapea a un carácter usando un map (un diccionario en Go). Los lectores RFID suelen terminar la entrada de cada tarjeta con un carácter de retorno de carro (Enter), que se interpreta como el final de la lectura de la tarjeta. El código imprime el valor leído y lo limpia para la siguiente lectura. Finalmente, se libera el acceso exclusivo al dispositivo.

Casos de uso: Esta técnica es útil para cualquier aplicación que necesite leer datos de un lector RFID USB de forma exclusiva, como sistemas de control de acceso, inventario, o puntos de venta. Podría ser utilizada por desarrolladores de software que crean aplicaciones personalizadas para interactuar con lectores RFID.

Consideraciones: El uso de EVIOCGRAB requiere privilegios de root o permisos especiales en el sistema operativo. Si no se libera el acceso exclusivo al dispositivo, otras aplicaciones no podrán usarlo. Existen alternativas, como usar bibliotecas de Python que encapsulan esta funcionalidad, pero esto introduce dependencias externas. Además, el código proporcionado es un ejemplo básico y puede necesitar ajustes para manejar diferentes tipos de lectores RFID o caracteres especiales.