Configurar un mando o joystick en Kodi de RetroPie

Una de las opciones más interesantes que ofrece RetroPie es la posibilidad de tener instalado Kodi en el sistema. Ya que con él, podremos disfrutar de ver contenido multimedia, entre otras cosas, (películas, series, pordede, youtube, twitch, estaciones de radio, contenido en la nube, etc) directamente en internet. Todo esto manejado mediante el mando o joystick con el que jugamos en RetroPie, directamente en la tele de nuestro salón.

No es esta la única opción que tenemos disponible para poder tener Kodi en nuestro salón sin tener que conectar un ordenador de sobremesa o portátil a la tele. Tenemos pinchos Android, tablets o incluso pinchos con Windows 10. Pero para aquellos que somos auténticos retro gamers, ninguna opción va a ser mejor que RetroPie, ya que podremos disfrutar de un abanico enorme de videojuegos, aparte de Kodi y su contenido multimedia.

La mayoría de “kits” en venta que podemos encontrar por internet que llevan la Raspberry Pi con RetroPie preparado, acostumbran a llevar una réplica del mando de la SNES. No entiendo del todo muy bien a que se debe esto. Ya que, desde mi punto de vista, el mando réplica de la SNES es totalmente insuficiente para sacar verdadero provecho a los emuladores contenidos en RetroPie. Algunos juegos de emuladores tales como: Nintendo 64, Playstation 1 (psx), PSP o Dreamcast entre otros, pueden ser difíciles de jugar por falta de botones o de analógicos.

Lo bueno es que podemos utilizar cualquier mando USB que nos apetezca. Lo malo es que en algunos casos, estos mandos requieren repasar la configuración. Quizá esa es una de las razones por las que se utilizan los mandos réplica de SNES. Ya que estos funcionan a la perfección con Kodi sin requerir ninguna configuración específica. Pero suponiendo que vamos a cambiar el mando por otro, nos va a tocar reconfigurar los botones en Kodi o más bien lo que técnicamente sería: mapear lo controles. En este caso yo voy a utilizar 2 mandos diferentes réplica de Nintendo 64. Pero este “tutorial” es perfectamente aplicable a cualquier otro mando USB.

Configurando los joystick Réplica de Nintendo 64 en Kodi

mandos decorados de nintendo 64

Lo primero que tenemos que hacer es encender nuestra máquina y conectarnos a ella vía FTP. Sino sabéis como, podéis ver el video de nuestro canal de Como Meter Videojuegos a las Consolas ArcadeGamer (RetroPie) a partir del minuto 4:40. Donde se explica como conectarse a ella vía FTP.

Una vez dentro de la máquina, hay que identificar en mando con el que estamos trabajando. Para ello tenemos que abrir 2 archivos. El primero se encuentra en la siguiente ruta:

/opt/retropie/configs/all/retroarch/autoconfig

En mi caso, como podéis ver a continuación, me aparece un mando llamado DragonRiseInc.GenericUSBJoystick.cfg. Puede que tengáis más de un mando diferente conectado. Os aparecerán varios archivo en tal caso. Tenéis que identificar el que corresponde al que queréis utilizar en Kodi y abrirlo.

Configurar un mando o joystick en Kodi de RetroPie

Una vez identificado, lo abrimos. En mi caso muestra la siguiente información:

input_device = "DragonRise Inc.   Generic   USB  Joystick  "
input_driver = "udev"
input_l_btn = "2"
input_load_state_btn = "2"
input_start_btn = "9"
input_exit_emulator_btn = "9"
input_up_axis = "-3"
input_a_btn = "5"
input_b_btn = "4"
input_reset_btn = "4"
input_down_axis = "+3"
input_r_btn = "1"
input_save_state_btn = "1"
input_r2_btn = "7"
input_right_axis = "+0"
input_state_slot_increase_axis = "+0"
input_x_btn = "3"
input_menu_toggle_btn = "3"
input_select_btn = "8"
input_enable_hotkey_btn = "8"
input_y_btn = "0"
input_left_axis = "-0"
input_state_slot_decrease_axis = "-0"
input_l2_btn = "6"

En este caso no me lo he encontrado. Pero si vosotros veis algo similar a esto en este documento:

input_up_btn = "h0up"
input_down_btn = "h0down"
input_right_btn = "h0right"
input_left_btn = "h0left"

Significa que tenéis una cruceta de tipo “hat” para las direcciones. Esto se puede corresponder a la cruceta normal del dispositivo o a la analógica. Veremos como se configura justo al final.
Ahora, para continuar con el tema de la configuración, yo acostumbro (aunque podría decirse que no es necesario) a abrir también el archivo:

/opt/retropie/configs/all/emulationstation

Dentro abrimos el archivo:

es_input.cfg

El cual nos arroja el siguiente resultado:

 
<?xml version="1.0"?>
<inputList>
 <inputAction type="onfinish">
 <command>/opt/retropie/supplementary/emulationstation/scripts/inputconfiguration.sh</command>
 </inputAction>
 <inputConfig type="keyboard" deviceName="Keyboard">
 <input name="pageup" type="key" id="118" value="1"/>
 <input name="start" type="key" id="1073742094" value="1"/>
 <input name="up" type="key" id="1073742082" value="1"/>
 <input name="a" type="key" id="1073741942" value="1"/>
 <input name="b" type="key" id="115" value="1"/>
 <input name="down" type="key" id="1073742083" value="1"/>
 <input name="pagedown" type="key" id="103" value="1"/>
 <input name="right" type="key" id="1073741952" value="1"/>
 <input name="select" type="key" id="1073741953" value="1"/>
 <input name="left" type="key" id="1073742085" value="1"/>
 </inputConfig>
 <inputConfig type="joystick" deviceName="DragonRise Inc.   Generic   USB  Joystick  ">
 <input name="pageup" type="button" id="2" value="1"/>
 <input name="start" type="button" id="9" value="1"/>
 <input name="up" type="axis" id="3" value="-1"/>
 <input name="a" type="button" id="5" value="1"/>
 <input name="b" type="button" id="4" value="1"/>
 <input name="down" type="axis" id="3" value="1"/>
 <input name="pagedown" type="button" id="1" value="1"/>
 <input name="right" type="axis" id="0" value="1"/>
 <input name="x" type="button" id="3" value="1"/>
 <input name="select" type="button" id="8" value="1"/>
 <input name="y" type="button" id="0" value="1"/>
 <input name="left" type="axis" id="0" value="-1"/>
 </inputConfig>
</inputList>

Una vez que tenemos estos documentos abiertos, toca crear el archivo xml que Kodi va a utilizar para mapear los botones de nuestro joystick. A este archivo lo vamos a llamar joystick.xml y hay que meterlo en la siguiente ruta:

/home/pi/.kodi/userdata/keymaps

Tal que así:

Configurar un mando o joystick en Kodi de RetroPie

Toca ahora crear la estructura del archivo joystick.xml. Yo utilizo generalmente una estructura muy muy simple. Vosotros podéis consulta la tabla de controles de Kodi en la que podréis ver todas las opciones disponibles por si queréis añadir alguna funcionalidad extra. En este punto es importante que le conectéis un teclado al RetroPie. Ya que realmente, vamos a hacer una configuración basada en ensayo – error. Por lo que vais a tener que utilizar un dispositivo que si que funcione para poder salir de Kodi. Este proceso puede ser lento. no desesperéis. La estructura de mi joystick.xml en principio va a ser la siguiente:

 <?xml version="1.0" encoding="UTF-8"?>
<keymap>
 <global>
<joystick name="">
 <axis id="" limit="">Right</axis>
 <axis id="" limit="">Left</axis> 
 <axis id="" limit="">Up</axis>
 <axis id="" limit="">Down</axis>
</joystick>
 </global>
</keymap>

Lo primero que vamos a rellenar es la opción joystick name. Para ello nos vamos al primero documento que abrimos que en mi caso es: /opt/retropie/configs/all/retroarch/autoconfig/DragonRiseInc.GenericUSBJoystick.cfg
Y copiamos el contenido de input_device. Que en mi caso es:

DragonRise Inc.   Generic   USB  Joystick

Es de vital importancia que lo copiéis tal cual. Osea, respetando incluso los espacios de más que como podéis ver tiene. En caso de no copiarlo exactamente igual, no va a funcionar. Lo añadimos al código del joystick.xml dando como resultado:

 <?xml version="1.0" encoding="UTF-8"?>
<keymap>
 <global>
<joystick name="DragonRise Inc.   Generic   USB  Joystick  ">
 <axis id="" limit="">Right</axis>
 <axis id="" limit="">Left</axis> 
 <axis id="" limit="">Up</axis>
 <axis id="" limit="">Down</axis>
</joystick>
 </global>
</keymap>

Configurando la Cruceta

Vamos ahora a definir los axis (cruceta) del mando. Volviendo al archivo anterior encontramos la siguiente información que es la referente a los axis.

input_up_axis = "-3"
input_down_axis = "+3"
input_right_axis = "+0"
input_state_slot_increase_axis = "+0"

(Recordad que si tenéis en el archivo de configuración algo como h0down, h0up, h0right, h0left, significa que tenéis una cruceta o analogico hat. Por lo que si veis que por más cambio que hagáis la cruceta no reacciona, teéeis que ir a la parte final de este tutorial para configurar el hat).

Aquí empezamos con los problemas. Ya que esto es en el fondo una “lotería“. Los valores anteriores corresponden a los limit. Pero no tenemos ni idea de cuales son los id correspondientes. Así que sólo queda una opción. Ir probando. La manera más rápida es asignar un número diferente a casa axis. De esa manera, si alguno reacciona de alguna manera, podemos empezar con ese a afinar. En mi caso yo he probado de la siguiente manera:

 <?xml version="1.0" encoding="UTF-8"?>
<keymap>
 <global>
<joystick name="DragonRise Inc.   Generic   USB  Joystick  ">
 <axis id="1" limit="-0">Right</axis>
 <axis id="2" limit="3">Left</axis> 
 <axis id="3" limit="-3">Up</axis>
 <axis id="4" limit="0">Down</axis>
</joystick>
 </global>
</keymap>

Con esta combinación, lo que me ha ocurrido es que:

Cruceta izquierda mueve a la izquierda.
Cruceta derecha mueve a la derecha.
Cruceta arriba mueve hacia abajo.
Cruceta abajo mueve hacia abajo.

Salimos de Kodi.

Como el único que está fallando es el “arriba“, debería de cambiar esa posición. Pero lo lógico es que cada pareja de axis (izquierda – derecha, arriba – abajo) tengan el mismo ID. Por lo que ahora vamos a probar a usar sólo el ID 1 para izquierda – derecha y sólo el iD 4 para arriba – abajo. Quedando tal que así.

 <?xml version="1.0" encoding="UTF-8"?>
<keymap>
 <global>
<joystick name="DragonRise Inc.   Generic   USB  Joystick  ">
 <axis id="1" limit="-0">Right</axis>
 <axis id="1" limit="3">Left</axis> 
 <axis id="4" limit="-3">Up</axis>
 <axis id="4" limit="0">Down</axis>
</joystick>
 </global>
</keymap>

Volvemos a abrir Kodi. Esto es importante. Cada vez que hagáis cambios, tenéis que salir y volver a entrar a Kodi para que los reconozca.

En este nuevo caso he tenido bastante suerte ya que la cruceta se me ha quedado en perfecto estado. En caso de que el mando no reaccione, seguid incrementando los ID hasta que deis con los correctos. Una vez hecho eso, vamos a proceder a configurar los botones.

Configurando los botones del mando

Al igual que en el caso anterior, lo primero que tenemos que hacer es averiguar como lee Kodi los botones. Así que volvemos a hacer “ensayo – error”. Aunque en este caso es más sencillo. Nunca he visto a Kodi utilizar un “botón 0”. Pero como nunca se sabe, vamos a empezar por el botón 0. Vamos a dejar el documento de la siguiente manera:

 <?xml version="1.0" encoding="UTF-8"?>
<keymap>
 <global>
<joystick name="DragonRise Inc.   Generic   USB  Joystick  ">
 <button id="0">Back</button>
 <button id="1">Select</button>
 <button id="2">VolumeUp</button>
 <button id="3">VolumeDown</button>
 <button id="4"></button>
 <button id="5"></button>
 <button id="6"></button>
 <button id="7"></button>
 <button id="8"></button>
 <button id="9"></button>
 <button id="10"></button>
 <axis id="1" limit="-0">Right</axis>
 <axis id="1" limit="3">Left</axis> 
 <axis id="4" limit="-3">Up</axis>
 <axis id="4" limit="0">Down</axis>
</joystick>
 </global>
</keymap>

Yo me suelo hacer un dibujito de la distribución de los botones en un papel. Ahora dentro de Kodi, vamos probando los botones 1 a 1. Y el el papel vamos escribiendo lo que hace cada 1 de ellos. En mi caso ningún botón hacía la opción back. Lo que significa que no tengo “botón 0”. Tras probar los botones, los movemos de posición para probar otros 4:

 <?xml version="1.0" encoding="UTF-8"?>
<keymap>
 <global>
<joystick name="DragonRise Inc.   Generic   USB  Joystick  ">
 <button id="0"></button>
 <button id="1"></button>
 <button id="2"></button>
 <button id="3"></button>
 <button id="4">Back</button>
 <button id="5">Select</button>
 <button id="6">VolumeUp</button>
 <button id="7">VolumeDown</button>
 <button id="8"></button>
 <button id="9"></button>
 <button id="10"></button>
 <axis id="1" limit="-0">Right</axis>
 <axis id="1" limit="3">Left</axis> 
 <axis id="4" limit="-3">Up</axis>
 <axis id="4" limit="0">Down</axis>
</joystick>
 </global>
</keymap>

Volvemos a reiniciar Kodi y volvemos a probar. Así hasta haber encontrado la totalidad de los botones. Os debería de acabar quedando un esquema tal que así:

Configurar un mando o joystick en Kodi de RetroPie - Esquema de Botones

Una vez que tenemos el esquema, tan sólo hay que asignar las funciones que queremos que tenga cada botón para dejar el mando operativo. Como en mi caso es un mando replica de Nintendo 64, voy a tratar de conservar el funcionamiento similar a como lo tengo en RetroPie para así liarme lo menos posible. Dentro del sistema los botones para moverse son A (corresponde al botón 6) para seleccionar y B (corresponde al botón 5) para ir atrás. Así mismo, se usa Select + Start par salir. Así quíe la configuración la voy a poner de la siguiente manera:

 <?xml version="1.0" encoding="UTF-8"?>
<keymap>
<global>
<joystick name="DragonRise Inc.   Generic   USB  Joystick  ">
<button id="5">Back</button>
<button id="6">Select</button>
<button id="9">Quit</button>
<axis id="1" limit="-0">Right</axis>
<axis id="1" limit="3">Left</axis> 
<axis id="4" limit="-3">Up</axis>
<axis id="4" limit="0">Down</axis>
</joystick>
</global>
</keymap>

Y una vez definidos los comandos básicos de movimiento, vamos a añadir algunos extras. En este caso, para la parte de reproducción. Para tener mejores controles a la hora de reproducción. Teniendo en cuenta la distribución de los botones, la configuración quedará así:

 <?xml version="1.0" encoding="UTF-8"?>
<keymap>
<global>
<joystick name="DragonRise Inc.   Generic   USB  Joystick  ">
<button id="5">Back</button>
<button id="6">Select</button>
<button id="9">Quit</button>
<axis id="1" limit="-0">Right</axis>
<axis id="1" limit="3">Left</axis> 
<axis id="4" limit="-3">Up</axis>
<axis id="4" limit="0">Down</axis>
</joystick>
</global>
<FullscreenVideo>
<joystick name="DragonRise Inc. Generic USB Joystick ">
<button id="6">Pause</button>
<button id="4">FullScreen</button>
<button id="3">CodecInfo</button>
<button id="2">VolumeDown</button>
<button id="1">VolumeUp</button>
<button id="7">StepBack</button>
<button id="8">StepForward</button>
</joystick>
</FullscreenVideo>
</keymap>

De esta manera cuando tengamos un video en reproducción, utilizaremos los gatillos izquierdo y derecho para avanzar y retroceder la reproducción, el botón 6 para pausar y reproducir la grabación alternativamente y el botón 1 y 2 para subir y bajar el volumen.

Con esto podemos dar por terminada la configuración. Salvo que dispongáis de una cruceta/analógico tipo hat. Que en ese caso, os toca leer la última parte del tutorial.

Configurando una cruceta/analógico de tipo hat

Como hemos visto con anterioridad, si disponéis de botones tipo hat en vuestro mando, estos tiene una configuración ligeramente distinta. Una vez más, nos va a tocar buscarlos con el sistema ensayo – error. Para ello, metemos en código de la siguiente manera:

 <?xml version="1.0" encoding="UTF-8"?>
<keymap>
<global>
<joystick name="DragonRise Inc.   Generic   USB  Joystick  ">
<hat id="0" position="up">Up</hat>
<hat id="1" position="down">Down</hat>
<hat id="2" position="right">Right</hat>
<hat id="3" position="left">Left</hat>
</joystick>
</global>
</keymap>

Al igual que en el caso de la cruceta, vamos a buscar el id que corresponde a los hat probando poco a poco. De la manera que he puesto arriba, asignados un valor a cada dirección. Ahora tan sólo basta probar toda la cruceta a ver si ha habido suerte y alguna de las direcciones se mueve. En mi caso, se ha movido la dirección abajo. Lo que significa que el ID que corresponde a los hat es el 1. Por lo tanto, el código quedaría así:

 <?xml version="1.0" encoding="UTF-8"?>
<keymap>
<global>
<joystick name="DragonRise Inc.   Generic   USB  Joystick  ">
<hat id="1" position="up">Up</hat>
<hat id="1" position="down">Down</hat>
<hat id="1" position="right">Right</hat>
<hat id="1" position="left">Left</hat>
</joystick>
</global>
</keymap>

De esta forma quedaría configurada la cruceta correctamente. En caso de que no reaccionara, tendréis que probar con los demás ID: 4,5, 6, 7… aunque por línea general, suelen ser valores bajos. Por lo que lo normal es que aparezcan de 0 al 4. Una vez configurados los hat, se añaden al resto del código. Quedando mi mando configurado entero así:

 <?xml version="1.0" encoding="UTF-8"?>
<keymap>
<global>
<joystick name="DragonRise Inc.   Generic   USB  Joystick  ">
<button id="5">Back</button>
<button id="6">Select</button>
<button id="9">Quit</button>
<axis id="1" limit="-0">Right</axis>
<axis id="1" limit="3">Left</axis> 
<axis id="4" limit="-3">Up</axis>
<axis id="4" limit="0">Down</axis>
<hat id="1" position="up">Up</hat>
<hat id="1" position="down">Down</hat>
<hat id="1" position="right">Right</hat>
<hat id="1" position="left">Left</hat>
</joystick>
</global>
<FullscreenVideo>
<joystick name="DragonRise Inc. Generic USB Joystick ">
<button id="6">Pause</button>
<button id="4">FullScreen</button>
<button id="3">CodecInfo</button>
<button id="2">VolumeDown</button>
<button id="1">VolumeUp</button>
<button id="7">StepBack</button>
<button id="8">StepForward</button>
</joystick>
</FullscreenVideo>
</keymap>

Con esto si que podemos dar por configurado el mando por completo. Ahora podremos disfrutar tranquilamente del control de nuestro Kodi con el mando integrado. Lo cual hace más cómoda la situación. Ya que no requerimos colocar ningún teclado adicional. En el siguiente tutorial, os mostraré como controlar kodi utilizando un téfonelo móvil o tablet tipo Android. Mientras tanto, si tenéis cualquier duda, preguntádmela en os comentarios.

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *