J'enquête sur une incompatibilité de certains Gamepads Bluetooth avec OSX : J'ai un Gamepad Bluetooth (NES30 Pro). Le problème est que si je le connecte en bluetooth, il ne fonctionne pas correctement sous OSX. J'ai déjà trouvé la cause et j'ai informé le fabricant, et ils ont promis de regarder pour corriger cela. Cependant, en attendant, j'aimerais trouver une solution de contournement.
La cause du problème est que le Gamepad n'envoie pas un descripteur d'utilisation HID correct lorsqu'il est connecté via Bluetooth. Le Gamepad devrait envoyer un descripteur d'utilisation HID qui signale qu'il s'agit d'une manette de jeu. Cependant, il envoie un descripteur d'utilisation HID qui signale qu'il s'agit d'un périphérique composé d'un clavier, d'une souris et d'un Gamepad en même temps.
À titre d'illustration, voici une capture d'écran du gestionnaire de périphériques de Windows, qui montre que le Gamepad agit comme plusieurs types de périphériques à la fois.
Windows et Linux créent simplement 3 périphériques, un périphérique clavier, un périphérique souris et un périphérique gamepad. Cependant, OSX crée un seul périphérique qui contient toutes les fonctionnalités à la fois, que la plupart des programmes ne reconnaissent pas comme un Gamepad. Jusqu'à présent, la seule application qui a pu me montrer que les données de position des axes analogiques et des boutons du gamepad sont effectivement transmises est l'application HID Explorer d'Apple ( http://developer.apple.com/mac/library/samplecode/HID_Explorer/HID_Explorer.zip )
Je suis maintenant à la recherche d'une solution de contournement sous OSX. Certains systèmes Linux ont également un problème avec le descripteur d'utilisation de wron HID. Cependant, ils peuvent généralement le résoudre en définissant une règle udev qui indique spécifiquement au système de traiter le périphérique comme gamepad/joystick, par exemple comme cela :
# 8Bitdo SFC30 GamePad Bluetooth mode(START)
SUBSYSTEM=="input", ATTRS{name}=="8Bitdo SFC30 GamePad", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1"
Bien sûr, OSX ne dispose pas de udev. Quelqu'un sait-il comment dire/forcer OSX à traiter un périphérique d'entrée comme un joystick/gamepad ? Ou peut-être comment créer un périphérique gamepad virtuel qui prend son entrée à partir des axes/boutons du périphérique composé clavier/souris/gamepad ? Ou toute autre idée pour résoudre ce problème ?
Note : Je suis particulièrement intéressé par l'utilisation des sticks analogiques. Il n'est donc pas question de les faire correspondre aux boutons du clavier. (Le gamepad dispose déjà d'un mode spécial pour le faire lui-même. Mais dans ce cas, les sticks analogiques ne fonctionnent évidemment pas).