Xinput et DirectInput : les joies des manettes sous Windows

Dans Canard PC Hardware 30, nous avons testé la dernière version de la manette Xbox One de Microsoft. Et elle a une particularité : connectée en Bluetooth, elle apparaît comme un périphérique HID et comme un périphérique Xinput. Mais qu’est-ce que ça veut dire ?

tl;dr : En 2005, Microsoft a sorti une API pour simplifier la vie des développeurs (Xinput) qui ne fonctionne qu’avec les manettes de Xbox 360. Les manettes au standard HID (plus courant) ne fonctionnent donc pas directement avec les jeux qui utilisent Xinput.

La gestion des manettes, joysticks et autres périphériques de joueurs sur PC a toujours été un peu compliquée. Alors que la majorité des ordinateurs des années 80 (et plusieurs consoles) utilisait le standard Atari, le PC disposait de son propre connecteur 15 broches, souvent présent sur les cartes son, le port jeu (Game Port). Analogique, il gérait deux joysticks (4 axes, plus exactement) et quatre boutons. Dans les années 90, le port jeu passe en semi-numérique avec certains joysticks (notamment chez Microsoft) mais avec l’obligation d’installer un pilote ou d’utiliser un jeu capable de reconnaître le modèle utilisé.

La manette Xbox, HID avec une prise USB propriétaire

La manette Xbox, HID avec une prise USB propriétaire

Avec DirectX, en 1995, Microsoft essaye de standardiser un peu le fonctionnement des périphériques en proposant des API qui évitent d’accéder directement au matériel. Avec un pilote compatible, il devient possible d’utiliser en théorie n’importe quel appareil sans se soucier de son fonctionnement interne. L’arrivée de l’USB simplifie encore un peu les choses : une manette à la norme HID (Human Interface Device) indique au système combien elle possède de boutons, d’axes, de fonctions, etc. La norme HID s’utilise aussi en Bluetooth, seule la liaison physique diffère. DirectInput et HID ne sont pas totalement liés, mais tous les périphériques HID sont accessibles via DirectInput (certains périphériques DirectInput ne sont pas HID, comme la manette de la Xbox 360). Globalement, la majorité des périphériques du marché utilise le standard HID (et donc DirectInput sous Windows) : la Dual Shock 4 (pour PlayStation 4), la WiiMote (Nintendo), une bonne partie des manettes PC, les manettes de la Xbox, etc.

Une Dual Shock 4, uniquement HID

Une Dual Shock 4, uniquement HID

En 2005, avec la Xbox 360, Microsoft décide pourtant de changer les choses. La société ajoute alors une nouvelle API, Xinput. Dédiée au départ à la manette de la Xbox 360 uniquement, elle évoluera (un peu) avec la manette de la Xbox One. Xinput offre (paradoxalement) moins de flexibilité que DirectInput, mais c’est dans un sens un avantage : une manette compatible Xinput doit offrir tous les boutons et les axes présents sur la manette. Avec DirectInput et HID, deux manettes semblables en apparence peuvent ne pas fonctionner de la même façon : le bouton « 1 » d’une n’est pas nécessairement le bouton « 1 » de l’autre. Avec DirectInput, une phase de configuration des boutons va être une étape quasi obligatoire pour faire correspondre les boutons physiques et ce que le jeu propose. Et si elle ne propose pas tous les boutons nécessaires ou une gestion atypique de certaines choses (notamment les sticks analogiques)… et bien c’est un problème. Avec Xinput, le problème ne se pose pas : le bouton « A » est toujours présent, et au même endroit. De plus, Xinput est beaucoup moins verbeux pour les développeurs et simplifie grandement la programmation.

Cette manette Logitech propose le choix

Cette manette Logitech propose le choix

En pratique, en 2016, Xinput reste toujours un problème. Certains développeurs se contentent d’utiliser cette API – et c’est en partie à cause d’eux que nous vous conseillons une manette Microsoft – et empêchent donc les joueurs de brancher une manette de PlayStation 4 ou une manette PC qui n’est pas compatible Xinput. Dans les anciens jeux, qui n’utilisent que DirectInput, le support des manettes de Xbox 360/One pose aussi des soucis : certains boutons réagissent différemment et les vibrations ne fonctionnent pas. Pour en revenir au début, la manette de la Xbox One en version 2016 pose quelques problèmes à cause de cette dualité : elle est vue par le système comme une manette HID et comme une manette Xinput. Et pour beaucoup de logiciels (comme Steam, mais pas que) ça implique un résultat… logique : la présence de deux manettes différentes. D’autres sociétés, comme Logitech, proposent une solution plus propre : un switch qui permet de forcer un mode précis. Il existe bien évidemment des logiciels qui simulent une manette Xinput à partir d’une manette HID (comme une Dual Shock) mais ils nécessitent un périphérique qui propose au moins toutes les fonctions d’une manette de Xbox 360. Et comme Microsoft considère que DirectInput est obsolète (deprecated) et ne devrait plus être utilisé, les soucis de compatibilité ne risquent pas de s’arranger.

La manette de la Xbox One S

La manette de la Xbox One S

Enfin, Xinput – en dehors de ses limites – a le gros désavantage de ne pas fonctionner en dehors de Windows. Les manettes Xinput ne sont en effet pas HID, ce qui complique la configuration avec les autres OS. S’il existe des pilotes pour Linux ou macOS et que certains jeux intègrent même directement le support des manettes de Xbox 360 (en accès direct, à la manière des programmes des années 80), la sortie d’une nouvelle version – comme celle testée récemment, donc – casse souvent la compatibilité.

About the Author

Dandu
Espion de Cupertino dans la rédac' de Canard PC Hardware. Aime beaucoup les formats totalement obsolètes ainsi que les technologies bizarres et oubliées. Possède un chien robot, des lapins Wi-Fi et un vrai perroquet.