This is an old revision of the document!
Kodi con USB Wireless Gamepad
Vogliamo utilizzare un Gamepad come telecomando per Kodi su Raspberry Pi, la distribuzione di riferimento è RaspiOS basata su Debian 10 Buster.
Abbiamo acquistato un controller SNES wireless a 2.4 GHz con micro ricevitore USB. Sul bus viene riconosciuto come:
Bus 001 Device 015: ID 0079:0011 DragonRise Inc. Gamepad
Sono necessari i seguenti pacchetti:
- kodi-peripheral-joystick
Altri pacchetti sono utili a individuare eventuali problemi:
- input-utils - Contiene i tool lsinput e input-events per visualizzare gli eventi input prodotti dal gamepad.
- evtest - Contiene il tool evtest per monitorare gli eventi input.
In generale, dopo aver installato il pacchetto kodi-peripheral-joystick e riavviato Kodi, è sufficiente andare nel menu Settings ⇒ System settings ⇒ Input ⇒ Configure attached controller. In questa schermata è possibile scegliere il tipo di controller: Kodi 17 dispone del generico controller Kodi 17.6, mentre Kodi 18.7 consente di scegliere fra il generico Kodi oppure lo specifico controller SNES.
È possibile riprogrammare la funzione di ciascun tasto, ma le impostazioni predefinite dovrebbero andare bene. In generale saranno necessarie le seguenti funzioni:
Tasto | Funzione |
---|---|
A | Selezione / conferma |
B | Indietro |
X | Menu contestuale |
Y | |
Start | |
Select | |
4 frecce | Spostamento |
La configurazione personalizzata viene salvata in un file nella cartella $HOME/.kodi/userdata/peripheral_data/, ad esempio nel nostro caso il file si chiama addon_YSTEK_MICREAL_USB_Gamepad.xml.
Problema sull'asse X
Tutto ha funzionato correttamente su un sistema Raspberry Pi 3, RaspiOS basato su Debian 9.11 Stretch e Kodi 17.6.
Ci sono dei problemi invece con un sistema Raspberry Pi 4, RaspiOS basato su Debian 10.8 e Kodi 18.7: i tasti Left e Right non funzionano.
Eseguendo il comando lsinput si vede che il gamepad è stato associato al device event5:
/dev/input/event5 bustype : BUS_USB vendor : 0x79 product : 0x11 version : 272 name : "YSTEK MICREAL USB Gamepad" phys : "usb-0000:01:00.0-1.3/input0" uniq : "" bits ev : EV_SYN EV_KEY EV_ABS EV_MSC
Quindi è possibile monitorare gli eventi per 300 secondi eseguendo il comando:
input-events -t 300 5
Quando ad esempio si preme e si rilascia il tasto freccia su si ottiene:
07:58:36.696246: EV_ABS ABS_Y 0 07:58:36.696246: EV_SYN code=0 value=0 07:58:36.816264: EV_ABS ABS_Y 127 07:58:36.816264: EV_SYN code=0 value=0
L'evento EV_ABS (cambio di valore di un absolute axis) ci segnala che lasse ABS_Y ha assunto il valore 0 (zero). Quando il tasto viene rilasciato il valore torna a 127 (posizione neutra). Analogamente se si prema il tasto freccia giù il valore diventa 255. In pratica i tasti freccia simulano un joystick analogico, ma gli unici valori possibili sono:
0 | Posizione estrema in alto |
---|---|
127 | Posizione centrale |
255 | Posizione estrema in basso |
In maniera del tutto analoga dovrebbero funzionare i tasti freccia destra e sinistra, generando un evento EV_ABS di ABS_X. Peccato che questo non avvenga: nessun evento viene mostrato da input-events.
Qualche informazione in più viene mostrata da evtest:
Input driver version is 1.0.1 Input device ID: bus 0x3 vendor 0x79 product 0x11 version 0x110 Input device name: "YSTEK MICREAL USB Gamepad" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 288 (BTN_TRIGGER) Event code 289 (BTN_THUMB) Event code 290 (BTN_THUMB2) Event code 291 (BTN_TOP) Event code 292 (BTN_TOP2) Event code 293 (BTN_PINKIE) Event code 294 (BTN_BASE) Event code 295 (BTN_BASE2) Event code 296 (BTN_BASE3) Event code 297 (BTN_BASE4) Event code 298 (BTN_BASE5) Event code 299 (BTN_BASE6) Event code 300 (?) Event code 301 (?) Event type 3 (EV_ABS) Event code 0 (ABS_X) Value 1 Min 0 Max 255 Flat 15 Event code 1 (ABS_Y) Value 127 Min 0 Max 255 Flat 15 Event type 4 (EV_MSC) Event code 4 (MSC_SCAN)
Si vede che nella posizione a riposo dell'asse ABS_X il Value è 1 invece dell'atteso 127.
Il problema non è circoscritto al Raspberry Pi, lo stesso malfunzionamento si riscontra anche su un sistema Debian 10.8, kernel 4.19.160 su PC amd64.