Tslib: librería para la pantalla táctil del Chumby

ChumbyArco

Cuando tienes un dispositivo con pantalla táctil y quieres programar algo para él siempre puede ser de ayuda tener un método de entrada tan fácil como la propia pantalla del dispositivo. Si nuestro aparato tiene, como en el caso del Chumby, un Linux metido dentro y tienes forma de compilar software para él, Tslib es tu respuesta.

Tslib se suele utilizar en muchos dispositivos embebidos para proporcionar la funcionalidad de la pantalla táctil a los programadores. Se utiliza en muchos dispositivos de este tipo, entre ellos el TomTom, el Nokia 770 o el que nos ocupará en esta receta: el Chumby

Preparándolo todo

Para poder compilar esta librería para el Chumby necesitarás tener lo siguiente:

  1. Un Chumby con acceso por SSH.
  2. Un entorno de desarrollo preparado para el Chumby.
  3. Un directorio compartido por NFS para pasarle al Chumby los ficheros (no es obligatorio, se puede hacer con un pendrive USB)

Una vez tengas todos estos ingredientes solo te queda ponerte manos a la obra:

Compilando Tslib

Para realizar la compilación primero entra en la jaula chroot para no guarrear nada. Supondré que has creado tu jaula en un directorio llamado chumby.

$ sudo chroot chumby

Una vez allí ve a tu home (con el fin de guarrear el sistema de ficheros lo menos posible) y descarga allí el código fuente. En este punto tienes dos posibles opciones: la versión publicada actualmente (1.0) o bajar la versión del repositorio subversion.

Opción A
CHROOT@Chumby:~# wget http://prdownload.berlios.de/tslib/tslib-1.0.tar.bz2

Opción B
CHROOT@Chumby:~# svn co svn://svn.berlios.de/tslib/trunk/tslib tslib-svn

Sobra decir que si el comando anterior no te funciona tienes que instalar subversion dentro de tu chroot.

Usando el método que hayas usado conseguirás tener un directorio con el código fuente de Tslib en tu home. Entremos y realicemos lo siguiente:

CHROOT@Chumby:~# cd tslib-XXXX
CHROOT@Chumby:tslib-XXXX# ./autogen.sh

Tras ello se creará en el directorio un script configure. Este script requiere de las autotools para utilizarse, así que ya sabes lo que tienes que instalar dentro de tu chroot, si no lo hiciste ya.

El script configure acepta multitud de argumentos. Para que funcione nuestra compilación cruzada, los parámetros que debemos decirle son:

CHROOT@Chumby:tslib-XXXX# ./configure --build=i686-pc-linux-gnu --host=arm-linux --prefix=/mnt/nfs

Las opciones significan lo siguiente:

  • —build=i686-pc-linux-gnu: es la arquitectura y SO dónde estás compilando. Si es diferente deberías cambiarla (utiliza la salida del script config.guess).
  • —host=arm-linux: arquitectura y sistema operativo destino de la compilación. Hará que se busque si existe un compilador cruzado para esa arquitectura.
  • —prefix=/mnt/nfs: es la ruta donde se copiarán los ficheros cuando hagamos la instalación. Es recomendable (aunque ni mucho menos obligatorio) que esta ruta sea la misma para el Chumby. Yo por ejemplo, dado que los ficheros se los paso al Chumby por NFS creo este directorio en el chroot y lo monto por NFS desde el Chumby en la misma ubicación.

Una vez hayas ejecutado el configure tan solo te quedarán los dos pasos más sencillos (pero más lentos) de todo el proceso:

CHROOT@Chumby:tslib-XXXX# make
CHROOT@Chumby:tslib-XXXX# make install

¡OJO! Si al hacer make tienes un error relacionado con la funció rpl_malloc deberás abrir el fichero config.h y comentar la línea dónde aparece lo siguiente:

#define malloc rpl_malloc

Una vez comentada vuelve a ejecutar make y todo debería ir bien. Por otra parte, make install copiará los ficheros generados a la ruta especificada por —prefix en el configure anterior.

Preparar el Chumby

Conéctate a tu Chumby por SSH y monta tu directorio por NFS en /mnt/nfs (o dónde más rabia te de) o pincha tu pendrive USB:

chumby:~# mount -t nfs -o nolock usuario@host:/home/usuario/chumby/mnt/nfs /mnt/nfs

Para calibrar la pantalla ejecutaremos un programa con interfaz gráfica, por lo que es recomendable que matemos el panel de control del Chumby y habilitemos el FrameBuffer 0, que es dónde se mostrará esa interfaz:

chumby:~# stop_control_panel
chumby:~# echo 0 > /proc/driver/imxfb/enable

Antes de intentar calibrar la pantalla debes asegurarte de lo siguiente:

  • Tienes permiso de escritura en el directorio NFS/pincho USB desde el Chumby y NFS te lo permite.
  • Edita el fichero /mnt/nfs/etc/ts.conf y des-comenta la línea del module_raw input
  • Configura las variables de entorno para poder ejecutar el programa sin necesidad de indicarle la ruta completa ni dónde se encuentran las librerías. Para esto puedes crearte un fichero de configuración de las variables de entornos necesarias y ponerlo en tu directorio NFS/pincho USB para usarlo siempre que lo necesitemos:

export HOME=/mnt/nfs/root
export PATH=$PATH:/mnt/nfs/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/nfs/lib
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_PLUGINDIR=/mnt/nfs/lib/ts
export TSLIB_CONSOLEDEVICE=/dev/ttyS0
export TSLIB_CONFFILE=/mnt/nfs/etc/ts.conf
export TSLIB_CALIBFILE=/mnt/nfs/etc/pointercal
export POINTERCAL_FILE=/mnt/nfs/etc/pointercal
export QWS_MOUSE_PROTO=Tslib:/dev/input/event0
export QWS_KEYBOARD=USB:/dev/input/event1

Para no tener que ejecutar esto cada vez que quieras hacer alguna prueba puedes guardar las líneas anteriores en un fichero (por ejemplo, enviroment) y ejecutarlo cada vez que nos haga falta con:

chumby:~# source enviroment

Probando el invento

Para probar si hemos compilado/instalado todo correctamente necesitarías crear y compilar un programa usando las librerías de Tslib. Si tienes prisa y quieres probarlo ya Sticking out tongue estás de suerte: junto con la librería se compilan unos programas (que están en el directorio bin). Uno de ellos es el primero que tendrás que ejecutar: ts_calibrate

Cuando lo ejecutes deberá aparecerte en la pantalla del Chumby algo como esto:

Simplemente tienes que pulsar en la cruz tantas veces como va cambiando de sitio. En la terminal SSH podrśa ver cuando termina el proceso. Es importante que cuando termines compruebes que se ha creado un fichero llamado pointercal en el directorio /etc de tu directorio NFS/pincho USB.