Utilisez la bibliothèque USB libusb-1.0 pour écrire un programme C permettant de contrôler les LED et les vibreurs de la manette USB. Vous avez le manuel complet de la bibliothèque à l’URL http://libusb.sourceforge.net/api-1.0/modules.html. Vous trouverez un résumé de la bibliothèque à l’URL http://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/. Pour cette utilisation assez basique nous utiliserons les fonctions de communication bloquantes.
Ecrivez une fonction pour examiner tous les périphériques USB disponibles sur les bus USB
de votre machine de TP. Dès qu’un périphérique s’avère être un périphérique USB du type cherché,
sauvez la "poignée" (obtenue avec libusb_open) vers ce périphérique dans un tableau statique
global de type libusb_device_handle[].
Vous pouvez utiliser la commande lsusb pour trouver les identifiants USB de votre type de
périphérique. Pour chaque périphérique sélectionné, faites afficher le numéro du bus sur lequel
se trouve le périphérique ainsi que son adresse sur ce bus.
Une fois un périphérique détecté, il faut récupérer sa configuration. La fonction
libusb_get_active_config_descriptor qui permet cela nécessite un pointeur
sur périphérique de type libusb_device *. Vous pouvez retrouver ce pointeur en fonction de
la "poignée" par la fonction libusb_get_device. Faites afficher la valeur de cette configuration.
Il vous reste ensuite, à réclamer les interfaces nécessaires pour votre usage. Attention, la fonction
libusb_claim_interface nécessite le numéro de l’interface et pas son indice. Vous allez donc
parcourir la structure arborescente de description de configuration du périphérique de la façon suivante :
Affichez l’indice et le numéro de chaque interface détectée et réclamée. Affichez aussi le numéro du point d’accès trouvé.
Ecrivez une fonction qui libère les périphériques détectés. Pour cela, relachez toutes les interfaces réclamées puis fermez la "poignée". Vous allez devoir, à nouveau, explorer la structure arborescente de description de configuration du périphérique ou sauver les numéros des interfaces dans le tableau global. Affichez l’indice et le numéro de chaque interface libérée.
Dans un premier temps, testez les manettes en allumant des LED et en actionnant les vibreurs. Par exemple, réalisez un chenillard avec vibrations en fin de chaque balayage. Sur arrêt du programme par CTRL-C, éteignez les LED et désactivez les vibreurs et fermez le périphérique USB. La gestion des LED et des vibreurs des manettes doit être effectuée via le point d’accès OUT de l’interface spécifique. Pour communiquer avec les manettes vous utiliserez la fonction libusb_interrupt_transfer. Les LED et les vibreurs doivent être activés sur toutes les manettes connectées.