17 de Mayo, 2004

Haciendo funcionar el Gamepad en Linux

Para poder desarrollar el soporte para joystick de DD2 necesito que mi joystick funcione, ¿no? :P

Vamos por partes, porque la cosa no está nada clara.

Mi gamepad

Estoy usando Debian 3.0 (estable, aka Woody) con el kernel 2.4.26. Mi joystick es un gamepad (económico) de 3 ejes y 4 botones, y lo voy a hacer funcionar a través de mi tarjeta Sound Blaster PCI, que tiene gameport.

La tarjeta de sonido funciona con el driver es1371, y este driver también gestiona el gameport donde va conectado el mando. Esto suele ser así para todas las tarjetas de sonido, salvo algunas excepciones (como la SB Live!). Además de este módulo necesitaremos input, joydev, gameport y analog.

input gestiona diferentes dispositivos de entrada, como en este caso nuestro joystick. joystick controla los distintos tipos de joystick, aquí emplearemos el 'puerto de juegos' de la tarjeta de audio así que necesitamos gameport. Por último analog, que entiende el protocolo de nuestro pad. Más o menos esa es la explicación :D.

En /etc/modules:

# tarjeta de sonido SB PCI
es1371
# gamepad
joydev
gameport
analog

Ahora hay que asegurarse de que le pasamos como parámetro a es1371 que nuestro joystick se encuentra en la dirección 0x200 (es un estándar, no se porqué no lo toma por defecto cuando detecta un gameport :S). Para ello empleamos /etc/modules.conf. Como uso Debian edito /etc/modutils/aliases:

options es1371 joystick=0x200

Y ejecuto update-modules para que se regenere el modules.conf adecuadamente. En otras distribuciones puede que vaya de forma diferente.

Instalamos jstest y jscal, que suelen ir en un paquete llamado joystick (claro), y que están disponibles para cualquier distribución. Ahora podemos probar si el dispositivo funciona:

# jstest /dev/input/js0

Que nos dirá qué joystick tenemos y algunos datos más.

Finalmente preparamos el entorno para que nuestros usuarios jugones puedan manejar el pad sin ser root.

Primero creamos unos enlaces simbólicos por conveniencia (compatibilidad con estructuras de /dev de núcleos anteriores):

# cd /dev
ln -s input/js0 js0
ln -s input/js1 js1
ln -s input/js2 js2
ln -s input/js3 js3

Ahora cambiamos los manejadores del joystick al grupo games:

# chgrp games /dev/input/js*

Y añadimos al usuario jugón al grupo en cuestión:

# useradd sonia games

Y para mi sorpresa el gamepad va perfectamente con mi juego. ¿Sin calibrar nada? Tendré que investigarlo :D.

En cualquier caso no resulta nada sencillo, y lamentablemente no he encontrado la documentación adecuada (el 0x200 me ha llevado de cabeza un buen rato). Problema resuelto y ¡a jugar!

Anotación por Juan J. Martínez.

Hay 2 comentarios

Gravatar

Te aconsejo el snes9x para viciarte al mando :)
Yo empezé jugando al Super Mario World y no veas que vicio :D
Suerte!

por natxo, en 2004-05-18 10:37:33

Gravatar

Pues si te gusta el Super Mario, agárrate:
http://super-tux.sourceforge.net/news.html

Está genial, teniendo en cuenta que es la segunda milestone y que aun le falta para estar acabado.

La pega: no tiene soporte para joystick (todavía).

por Juanjo, en 2004-05-18 10:55:38

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.