Previous Up Next

4  Périphérique USB

Il s’agit du point le plus délicat du tutorat, la programmation du comportement USB de la manette. Cela va se faire sur le microcontrôleur ATMega32u4. Comme le u de son nom l’indique, ce microcontrôleur possède une gestion matérielle du bus USB (USB2.0).  
 
Sur le principe vous devez implanter un périphérique USB HID (périphérique d’interface homme-machine, Human Interface Device en patoi). Un tel périphérique comporte une interface de classe HID avec au minimum un point d’accès entrant (IN). Plutôt que d’utiliser le joystick de la carte pour votre HID, vous utiliserez l’accéléromètre.  
 
Vous allez ajouter à ce périphérique USB une interface supplémentaire pour gérer les LED et les vibreurs. L’interface supplémentaire doit présenter un point d’accès de type interruption en écriture (endpoint OUT). Les données envoyéies sur ce point d’accès doivent avoir une taille de deux octets. Organisez les bits correspondant aux LED et aux vibreurs comme vous l’entendez.

4.1  Téléversement du programme

Pour téléverser votre programme sur l’ATMega32u4, le paquetage Debian dfu-programmer est nécessaire. Installez le au besoin. La procédure à suivre pour charger votre programme sur l’ATMega32u4 est la suivante :

4.2  Prise en main

Commencez par un test basique de la clef : faites clignoter des LED, activez un vibreur. Testez aussi les boutons et l’accéléromètre. Pour le programme de test, vous pouvez partir du programme disponible sur la page de description de la carte.

4.3  Code LUFA d’exemple

Sur le site http://www.fourwalledcubicle.com/LUFA.php, téléchargez la dernière version de la bibliothèque USB LUFA. Créez un répertoire PolytechLille au même niveau que les répertoires Demos et Projects. Dans ce répertoire, copiez la démonstration du sous-chemin Device/ClassDriver/Joystick sous le nom, par exemple, Manette. Renommez aussi les fichiers dans le répertoire et modifiez le makefile. Au niveau du makefile indiquez atmega32u4 comme microcontrôleur, NONE comme platine, ajustez le chemin d’accès LUFA_PATH et passez à 16Mhz.

4.4  Adaptation du code à la manette

Importez les fonctions de gestion de la carte Polytech’Lille dans le répertoire PolytechLille/Manette. Modifiez le fichier makefile pour compiler ces sources. Modifiez ensuite le fichier Manette.c, en particulier la fonction CALLBACK_HID_Device_CreateHIDReport pour créer des rapports HID en fonction des valeurs retournées par l’accéléromètre.

4.5  Gestion des actionneurs

En toute théorie, il serait possible d’intégrer la gestion des LED et des vibreurs sous la classe USB HID. Le moins que l’on puisse dire c’est que cela complexifie considérablement le descripteur HID et encore il faut faire de l’ingéniérie inverse pour le constituer. Nous allons donc procéder autrement. Vous allez ajouter, à l’interface standard HID, une autre interface de classe spécifique au vendeur (USB_CSCP_VendorSpecificClass, pas de descripteur supplémentaire nécessaire) peuplée d’un point d’accès de type interruption en écriture (endpoint OUT). La communication sur ce point d’accès se fera sur deux octets. Le premier octet peut commander les 8 premières LED, le second octet peut commander les LED restantes et les deux vibreurs.  
 
Pour la gestion des points d’accès interruption, vous pouvez vous aider de la démonstration Keyboard dans le répertoire Device/LowLevel. La déclaration des interfaces et des points d’accès est clairement montrée dans les fichiers Descriptors.c et Descriptors.h de cette démonstration. La gestion de points d’accès de type interruption est montrée dans l’autre source C de la démonstration, cherchez les fonctions Endpoint_ConfigureEndpoint, Endpoint_SelectEndpoint, etc.  
 
N’hésitez pas à consulter la documentation de la bibliothèque sur Internet.


Previous Up Next