Utilisation d'adaptateurs raphnet-tech sur RetroPie
Introduction

Puisque RetroPie est basé sur Linux, la totalité des adaptateurs USB raphnet-tech sont supportés nativement. Mais comme j'ai appris qu'il y avait certaines complications avec les adaptateurs multi-joueurs, j'ai créé cette page pour aider.
Les adaptateurs qui fonctionnent tel quel
La bonne nouvelle est que la plupart de nos adaptateurs fonctionneront sans rien faire de spécial. Par exemple:- Adaptateur manette NES à USB
- Adaptateur manette SNES à USB (version mono-joueur)
- Adaptateur manette Megadrive/SMS/Atari à USB
- Adaptateur manette Sega saturn à USB
- ... Et tout autre adaptateur ou circuit pour un seul joueur.
Adaptateurs multi-joueurs : Problème de valeurs initiales (mouvement vers le nord-ouest)
Les symptômes
Mouvement constant dans les menus de jeux, défilement inattendu lors du retour au menu d'EmulationStation...La cause
Sous Linux (kernel 4.4), les valeurs initiales des joysticks USB HID ne sont pas initialisées correctement. Telles que sont les choses présentement, bien que des valeurs initiales soient demandées à l'adaptateur lors de son branchement, la réponse en est ignorée. Résultat: Des valeurs d'axe initiales pointant au nord-ouest.Lorsqu'on utilise plusieurs manettes ou adaptateurs, or lorsqu'un adaptateur multi-manettes est utilisé, cela a des conséquences inattendues. Imaginez qu'avec la manette 1 vous contrôliez le menu EmulationStation. Vous démarrez un jeu supportant deux joueurs. Vous-vous êtes servi de la première manette seulement, ce qui a eu pour effet de remplacer ses valeurs initiales incorrectes. Mais deuxième manette à laquelle vous n'avez pas encore touché pointe toujours au nord-ouest. Si le menu principal de ce jeu permet aux deux joueurs de le contrôler, le résultat est un curseur se déplaçant en continu jusqu'à ce que vous touchiez, enfin, à un des boutons de la deuxième manette. Ceci n'est pas agréable, mais on s'en sort facilement.
Mais qu'arrive-t-il si vous avez un adaptateur à quatre manettes auquel vous n'avez câblé que les ports 1 et 2? Comment faire pour appuyer sur un bouton des manettes 3 et 4 si jamais les valeurs d'axes nord-ouest qu'elles rapportent ont un effet indésirables? Vous ne pouvez rien faire alors c'est grave!
Solution: Patch de kernel
J'ai créé les 3 patchs suivants qui ensemble corrigent le problème:- usbhid_iostart.diff : Fait en sorte que la réponse au GET_REPORT envoyé aux manettes ne soit pas rejetée en raison d'un verrou.
- usbhid_start_before_connect.diff : Fait en sorte que l'événement résultant du patch ci-dessus arrive après que le sous-système gérant les périphériques d'entrée soit activé. (Sans quoi les événements ne vont nulle part et le problème continue d'être présent)
- jsdev_initial_value.diff : Fait en sorte que les événements initiaux générés par jsdev soient représentatif de l'état le plus récent. Ce dernier patch n'est pas strictement nécessaire car EmulationStation semble utiliser evdev, mais mieux vaut prévenir.
https://www.raspberrypi.org/documentation/linux/kernel/building.md
# Obtention des sources du kernel
$ git clone ... # (Voir la page sur raspberrypi.org mentionnée ci-dessus)
# Téléchargement des patchs
$ wget www.raphnet-tech.com/support/retropie/usbhid_iostart.diff
$ wget www.raphnet-tech.com/support/retropie/usbhid_start_before_connect.diff
$ wget www.raphnet-tech.com/support/retropie/jsdev_initial_value.diff
# Application des patchs
$ cd linux
$ patch -p1 < ../usbhid_iostart.diff
$ patch -p1 < ../usbhid_start_before_connect.diff
$ patch -p1 < ../jsdev_initial_value.diff
Suivez les directives de la page susmentionnée pour compiler et installer votre kernel, redémarrez et amusez vous!
Adaptateurs multi-joueurs et les kernels avant 4.2 (vieux)
Note: Cette section ne s'applique pas aux récentes images de carte SD RetroPie 3.8 car elles utilisent un kernel de la série 4.4.

Cela est vérifiable via la commande jstest:
pi@retropie:~ $ jstest /dev/input/js0
Driver version is 2.1.0.
Joystick (raphnet.net 4nes4snes) has 2 axes (X, Y) and 32 buttons (...)
Pour corriger ce problème, en mars 2015 j'ai réalisé un patch kernel afin que l'adaptateur apparaisse en tant que plusieurs manettes indépemndantes. Ce patch a été inclu dans le kernel 4.2.0. Avec ce patch, les choses sont mieux qu'elles ne l'ont jamais été. Mais malheureusement, en date du 2 Mai 2016, les images de cartes SD incluses avec RetroPie contiennent encore un kernel de la série 4.1... Outre attendre, que pouvons nous faire? Doit-on absolument récupérer les sources du kernel, appliquer le patch, compiler le tout et installer? Heureusement non, il y a un moyen plus facile.
Il suffit d'ajouter ceci à la ligne de commande du kernel, l'effet sera le même que le patch.
usbhid.quirks=0x289b:0x0002:0x40,0x289b:0x0003:0x40,0x1781:0x0a9d:0x40
Il se peut que vous ne soyez pas très à l'aise avec l'idée de modifier le fichier /boot/cmdline.txt manuellement, car après tout
une erreur ici peut empêcher votre système de démarrer. J'ai donc créé un petit script qui peut s'en charger:Script: addRaphnetQuirks.sh
Transférez le script vers votre Pi, et branchez-vous y par ssh. Assurez-vous que le script est exécutable en utilisant chmod, puis exécutez-le.
pi@retropie:~ $ sudo chmod +x addRaphnetQuirks.sh
pi@retropie:~ $ sudo ./addRaphnetQuirks.sh
Raphnet-tech cmdline.txt updater script for USB HID quirks, v0.1
www.raphnet-tech.com/support/retropie/
Successfully updated /boot/cmdline.txt
Reste à redémarrer le Pi, et votre adaptateur sera vu comme autant de manettes! Amusez-vous bien!