Objetivo: Conseguir que funcione un teclado de ordenador en Openwrt. Esto nos servirá para por ejemplo que el router ante la presión de una tecla realice una acción.
Firmware: Openwrt Chaos Calmer 15.05
Dificultad: Media
Necesitamos: En nuestro caso está hecho con un router Huawei HG553 con Openwrt y un teclado USB conectado al mismo.
Software necesario: Navegador Web, cliente SSH Putty (sólo para Windows).
Más información: Foro Openwrt, Openwrt USB essentials, http://h-wrt.com/en/doc/kb, triggerhappy.
Paso 1 – Instalación de paquetes para que reconozca el teclado
Accedemos por ssh al router y en el terminal ejecutamos las siguientes instrucciones para la instalación.
opkg update opkg install kmod-usb-uhci opkg install kmod-usb-ohci opkg install kmod-usb2
#Para que reconozca teclado
opkg install kmod-usb-hid opkg install kmod-hid opkg install kmod-hid-generic
Para comprobar si nos ha reconocido el teclado haremos:
ls /dev/input/*
Nos debe devolver algo como:
/dev/input/event0
En caso contrario sacamos y metemos el teclado o reiniciamos el router y volvemos a probar si lo ha reconocido.
Paso 2 – Instalación de aplicación que recoge cada pulsación (eventos).
Usaremos una aplicación llamada triggerhappy que captura los eventos y permite ejecutar un comando o conjunto de acciones ante los eventos de pulsar tecla, soltar tecla y mantener pulsada.
opkg update opkg install triggerhappy
Paso 3 – Prueba de funcionamiento.
Escribimos en el terminal:
thd --dump /dev/input/event*
Iremos presionando teclas para ver como se llama cada tecla y comprobar que los eventos son los correctos:
Los valores son:
– 0 -> quitar pulsado
– 1 -> pulsado
– 2 -> Mantener pulsado
Veamos un ejemplo de respuesta:
EV_KEY KEY_1 1 /dev/input/event0 # KEY_1 1 command EV_KEY KEY_1 0 /dev/input/event0 # KEY_1 0 command EV_KEY KEY_KP1 1 /dev/input/event0 # KEY_KP1 1 command EV_KEY KEY_KP1 0 /dev/input/event0 # KEY_KP1 0 command
En rojo vemos que la tecla presionada es el 1 (KEY_1).
En verde vemos que el evento fue de Pulsado (1)
Ejemplo de configuración de triggerhappy
Ahora nos metemos en el archivo de configuracion:
nano /etc/triggerhappy/triggers.d/example.conf
############################################################
# This is an example configuration for the triggerhappy daemon (thd) # please note that every file to be processed must end in ".conf" # # To view a list of supported event codes, use "thd --listevents" or # "thd --dump /dev/input/event*" # # Format: # <eventcode> <value> <command> # # values for key events are 1 (pressed), 0 (released) or 2 (held) # ## control an mpd instance # KEY_NEXTSONG 1 /usr/bin/mpc next # KEY_PREVSONG 1 /usr/bin/mpc prev
###############################################################
Veremos esto, y le añadimos al final:
KEY_KP1 1 echo 1 > /sys/devices/gpio-leds/leds/HW553:red:hspa/brightness KEY_KP2 0 echo 0 > /sys/devices/gpio-leds/leds/HW553:red:hspa/brightness
Aquí le estamos diciendo que; cuando pulsemos la tecla numérica 1 encenderá la luz de hspa…
y la tecla numérica 2, apagará la luz…
TO-DO
Inyectar eventos directamente sin teclado en /dev/input/