User Tools

Site Tools


doc:appunti:software:usb_wireless_gamepad

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:software:usb_wireless_gamepad [2021/02/11 09:03] niccolodoc:appunti:software:usb_wireless_gamepad [2021/02/13 08:33] (current) – [Kernel funzionanti e kernel non funzionanti] niccolo
Line 1: Line 1:
-====== Kodi con USB Wireless Gamepad ======+====== Kodi con Gamepad Wireless USB ======
  
-Vogliamo utilizzare un **Gamepad** come telecomando per **Kodi** su **Raspberry Pi**, la distribuzione di riferimento è RaspiOS basata su **Debian 10 Buster**.+Vogliamo utilizzare questo **Gamepad** come telecomando per **Kodi** su **Raspberry Pi**, la distribuzione di riferimento è RaspiOS basata su **Debian 10 Buster**. Si tratta un controller **SNES wireless a 2.4 GHz** con micro ricevitore **USB** per PC, nella confezione è compreso anche un ricevitore per Nintendo. Il produttore si chiama **YSTEK** e il prodotto **MICREAL**, Linux lo supporta tramite il modulo kernel DragonRise **hid_dr**.
  
-Abbiamo acquistato un controller **SNES wireless a 2.4 GHz** con micro ricevitore **USB**. Sul bus viene riconosciuto come:+{{.:kodi:micreal-usb-gamepad.jpg?400|The Micreal USB Gamepad using DragonRise driver}} 
 + 
 +Viene riconosciuto dal comando **lsusb** come:
  
 <code> <code>
Line 9: Line 11:
 </code> </code>
  
-Sono necessari i seguenti pacchetti:+La periferica dovrebbe essere riconosciuta in automatico e quindi i **moduli kernel** necessari dovrebbero essere caricati automaticamente (verificare i moduli **hid_dr**, **ff_memless** e **hid**). 
 + 
 +Per effettuare il **pairing** tra gamepad e ricevitore USB si procede anzitutto scollegando il dongle USB dell'host. Quindi si premono contemporaneamente i tasti **Start**, **Select** e **Up** sul gamepad; il LED rosso inizia a lampeggiare rapidamente. Durante i 10 secondi successivi si deve inserire il ricevitore USB nella porta dell'host, il pairing avviene automaticamente. 
 + 
 +Sono necessari i seguenti pacchetti Debian:
  
   * **kodi-peripheral-joystick**   * **kodi-peripheral-joystick**
Line 18: Line 24:
   * **evtest** - Contiene il tool **evtest** per monitorare gli eventi input.   * **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**.+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 **Super Nintendo**.
  
 È possibile riprogrammare la funzione di ciascun tasto, ma le impostazioni predefinite dovrebbero andare bene. In generale saranno necessarie le seguenti funzioni: È possibile riprogrammare la funzione di ciascun tasto, ma le impostazioni predefinite dovrebbero andare bene. In generale saranno necessarie le seguenti funzioni:
Line 33: Line 39:
 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**. 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 =====+Il gamepad va in modalità **stand-by** dopo poco tempo di non utilizzo, per risvegliarlo è necessario premere il pulsante **start**. Il LED rosso si accende e i tasti funzionano nuovamente.
  
-Non abbiamo avuto problemi su un sistema **Raspberry Pi 3**, RaspiOS basato su **Debian 9.11 Stretch** **Kodi 17.6**. Tutto ha funzionato correttamente.+===== Problema freccia destra sinistra non funzionanti =====
  
-Ci sono 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.+Tutto funziona 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 freccia **Left** e **Right** non funzionano. 
 + 
 +C'è chi ha riscontrato lo stesso problema utilizzando Retropie: **[[https://retropie.org.uk/forum/topic/25657/controler-issue-no-left-and-right-not-working-at-all/| Controler Issue (no left and right not working at all)]]**. 
 + 
 +==== Debug con input-events ed evtest ====
  
 Eseguendo il comando **lsinput** si vede che il gamepad è stato associato al device **event5**: Eseguendo il comando **lsinput** si vede che il gamepad è stato associato al device **event5**:
Line 115: Line 127:
  
 Si vede che nella **posizione a riposo** dell'asse **ABS_X** il Value è **1** invece dell'atteso **127**. 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 **PC amd64** con sistema **Debian 10.8** e kernel **4.19.160**. Il problema esiste già con il kernel **4.19.98**. Il gamepad invece **funziona correttamente** sullo stesso PC, ma con il vecchio kernel **4.9.189**.
 +
 +I moduli kernel interessati dovrebbero essere: **hid_dr**, **ff_memless** e **hid**.
 +
 +Questo il dmesg per il **kernel 4.9.189** (funzionante):
 +
 +<file>
 +usb 2-1.3: new low-speed USB device number 4 using ehci-pci
 +usb 2-1.3: New USB device found, idVendor=0079, idProduct=0011
 +usb 2-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
 +usb 2-1.3: Product: MICREAL USB Gamepad
 +usb 2-1.3: Manufacturer: YSTEK
 +input: YSTEK MICREAL USB Gamepad as
 +    /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/0003:0079:0011.0003/input/input17
 +dragonrise 0003:0079:0011.0003: input,hidraw2: USB HID v1.10 Joystick [YSTEK MICREAL USB Gamepad]
 +    on usb-0000:00:1d.0-1.3/input0
 +</file>
 +
 +Questo invece il dmesg per il **kernel 4.19.98** (non funzionante):
 +
 +<file>
 +usb 2-1.3: new low-speed USB device number 9 using ehci-pci
 +usb 2-1.3: New USB device found, idVendor=0079, idProduct=0011, bcdDevice= 3.11
 +usb 2-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
 +usb 2-1.3: Product: MICREAL USB Gamepad
 +usb 2-1.3: Manufacturer: YSTEK
 +input: YSTEK MICREAL USB Gamepad as
 +    /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/0003:0079:0011.0008/input/input24
 +dragonrise 0003:0079:0011.0008: input,hidraw2: USB HID v1.10 Joystick [YSTEK MICREAL USB Gamepad]
 +    on usb-0000:00:1d.0-1.3/input0
 +</file>
 +
 +==== Debug con usbmon ====
 +
 +In teoria dovrebbe essere possibile **ispezionare il traffico** direttamente sul bus USB utilizzando la funzione **usbmon** del kernel Linux. Seguendo le istruzioni **[[https://www.kernel.org/doc/Documentation/usb/usbmon.txt|usbmon]]**:
 +
 +<code>
 +# Mount debugs, if not already mounted:
 +mount -t debugfs none_debugs /sys/kernel/debug
 +modprobe usbmon
 +</code>
 +
 +quindi si chiede l'elenco di tutte le periferiche USB:
 +
 +<code>
 +cat /sys/kernel/debug/usb/devices
 +...
 +T:  Bus=02 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#=  6 Spd=1.5  MxCh= 0
 +D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
 +P:  Vendor=0079 ProdID=0011 Rev= 3.11
 +S:  Manufacturer=YSTEK
 +S:  Product=MICREAL USB Gamepad
 +C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
 +I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid
 +E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=10ms
 +...
 +</code>
 +
 +È possibile ispezionare il traffico di **tutti i bus** (utilizzando il numero **0**), oppure solo quello del **bus #2**
 +
 +<code>
 +cat /sys/kernel/debug/usb/usbmon/2u
 +</code>
 +
 +Nel caso del nostro gamepad **non si ottiene alcun tracciato**, mentre si vede il **passaggio dei pacchetti** quando si **muove un mouse** collegato allo stesso bus.
 +
 +==== Kernel funzionanti e kernel non funzionanti ====
 +
 +^ System                ^ Kernel              ABS_X Working  ^
 +| Raspberry Pi 3        | 4.19.66-v7+        | Yes  |
 +| Raspberry Pi 4        | 5.10.11-v7l+       | No   |
 +| PC amd64 Debian 10.8  | 4.9.189-3+deb9u2   | Yes  |
 +| PC amd64 Debian 10.8  | 4.19.67-2+deb10u2  | Yes  |
 +| PC amd64 Debian 10.8  | 4.19.98-1+deb10u1  | No   |
 +| PC amd64 Debian 10.8  | 4.19.160-2         | No   |
 +
 +===== Web References =====
 +
 +  * **[[https://www.retropie-italia.it/viewtopic.php?f=19&t=702|[GUIDA] DragonRise Inc. Generic USB Joystick]]**
 +  * **[[https://retropie.org.uk/forum/topic/25657/controler-issue-no-left-and-right-not-working-at-all/|Controler Issue (no left and right not working at all)]]**
  
doc/appunti/software/usb_wireless_gamepad.1613030592.txt.gz · Last modified: 2021/02/11 09:03 by niccolo