La historia empieza (más bien se ha vuelto intensa) a raíz de que le he comprado un gamepad a mi hijo para el portátil (reciclado con Linux) que le hemos dedicado. El gamepad en concreto es un Nacon GC-100, un gamepad estilo Xbox 360 con cable.
El gamepad en cuestión tiene detrás un interruptor curioso (y creo que muy útil): en una posición el gamepad se presenta como un dispositivo HID y en otro como un XInput. Ahí empieza a complicarse la vida: en modo HID, los botones están mapeados de una manera totalmente diferente a la de XInput. Por otro lado, el módulo xpad (que se encarga de los pads de Xbox en Linux) no reconoce el mando.
QUEJA 1: Modificar xpad.c para que reconozca mi mando es trivial; es más complicado mandar el parche para arriba y que lo incluyan en el kernel (aunque ya lo he hecho previamente). El problema es que probando el mando con LEGO Batman 2, descubrí que los botones X e Y están al revés. No parece un problema del mando, en Windows mi mando oficial de Xbox y el Nacon tienen el mismo mapeado.
Tengo que averiguar si esto es un fallo en xpad, en wine o un bug extraño en LEGO Batman 2... lo que en sí ya es un desafío. Si alguien tiene un mando oficial de Xbox con cable, me gustaría saber si tiene el mismo problema.
QUEJA 2: Cuando uso mi mando en Linux en modo HID, no tengo vibración (pendiente de comprobar si hay vibración en Windows, aunque lo dudo). Mi idea era hacer también un parche en alguno de los módulos que soportan vibración... pero no hay manera de localizar los drivers para mi mando (parece que no los distribuyen, al estar soportado por los drivers de Microsoft), así que no tendo ni idea de a qué se parece ni si admite comandos de vibración en modo HID. Así que ahora mismo no sé cómo ni si se puede meter soporte para vibración en modo HID en Linux.
(Curiosidad: hace años compré un mando Thrustmaster, lo incluí en la lista de mandos "autorizados" en el módulo adecuado... y por semejante tontería me han puesto en los créditos de Linux como desarrollador del núcleo

QUEJA 3: Recordando ese gamepad Thrustmaster y pensando en los extraños mapeos de botones de los gamepad... ODIO que todo esto no esté estandarizado. HID parece definir el modo de comunicación, pero no la posición física de los botones... por lo que si enchufas mandos de tres marcas diferentes en cualquier equipo tienes casi garantizado que va a haber un mínimo de dos mapeados diferentes.
Al parecer, Linux está intentando estandarizar eso en sus módulos. Ahora quieren llamar a los botones NORTE/SUR/ESTE/OESTE en vez de A, B, X, Y. Eso está bien porque describe la ubicación física del botón en vez de su número... pero no está demasiado extendido y habrá multitud de mandos que NO se actualicen a este estándar (por no hablar de que los mandos genéricos manejados por HID no tendrán esto). Por no hablar de que esto solo sirve para los mandos con cuatro botones a la derecha (p.ej.: Xbox o SNES)... habría que ver qué botón correspondería a ESTE en un mando de Megadrive.
QUEJA 4: Por todo esto, sería una gran idea que los sistemas incluyeran de serie algún tipo de mapeador de botones. Aunque hay paquetes tanto para Windows como para Linux, no es extraño (sobre todo en Windows) que dejen de funcionar al actualizar, o que el sistema proteste porque intentas instalar un controlador no firmado.
QUEJA 5: ¿Estaba patentada la distribución de botones del controlador de SNES? Siempre me ha chirriado que SNES y Xbox utilicen la denominación A, B, X, Y... con las letras en diferentes botones. Esto lleva a cierta "dislexia" si usas un mando de Xbox con un emulador de SNES... la X no solo no marca el lugar, sino que está adrede en un sitio diferente.