Commit 3966cf832747682d6e7156b8c4bf7b8f0dfae5ee

Authored by rguillom
1 parent c0369a17

modifs diverses : valeur octet début de trame, main.c, débogage init_USB.c, README

Pgm PC/init_USB.c
... ... @@ -69,7 +69,7 @@ void enum_periph(){
69 69 }
70 70  
71 71  
72   -void config_periph(char tab_PA[TAB_PA_SIZE]){
  72 +void config_periph(unsigned char tab_PA[TAB_PA_SIZE]){
73 73  
74 74 /* Récupération de la 1ère configuration du périphérique (indice 0) */
75 75 struct libusb_config_descriptor *config_desc=NULL;
... ... @@ -93,6 +93,8 @@ void config_periph(char tab_PA[TAB_PA_SIZE]){
93 93  
94 94  
95 95 /* Utilisation de la configuration */
  96 +
  97 + int dernier_PA=-1;
96 98 int configuration=config_desc->bConfigurationValue;
97 99  
98 100 //printf("valeur config %d\n", configuration); // Affichage valeur de la configuration
... ... @@ -112,15 +114,15 @@ void config_periph(char tab_PA[TAB_PA_SIZE]){
112 114  
113 115  
114 116 /* Parcours des points d'accès (Endpoint) pour chaque interface*/
115   - for(int num_PA=0;num_PA<config_desc->interface[indice_intf].altsetting[0].bNumEndpoints ;num_PA++){
116 117  
  118 + for(int num_PA=0;num_PA<config_desc->interface[indice_intf].altsetting[0].bNumEndpoints ;num_PA++){
  119 +
117 120 int type_PA = config_desc->interface[indice_intf].altsetting[0].endpoint[num_PA].bmAttributes;
118 121 uint8_t adresse_PA = config_desc->interface[indice_intf].altsetting[0].endpoint[num_PA].bEndpointAddress;
119 122 printf("\t\tPoint d'accès trouvé. Adresse : %d\n",adresse_PA);
120 123  
121 124 /* Regarde si le point d'accès est de type interruption.
122 125 Si oui, on le sauvegarde. */
123   - int dernier_PA=-1;
124 126 if((type_PA & 0b11)==LIBUSB_TRANSFER_TYPE_INTERRUPT){
125 127 //struct EP ep1;
126 128 dernier_PA++;
... ... @@ -143,8 +145,10 @@ void config_periph(char tab_PA[TAB_PA_SIZE]){
143 145 // Le if et else ci-dessus doivent pouvoir être simplifiés.
144 146 */
145 147 }
146   - }
  148 +
  149 + }
147 150 }
  151 + //printf("dernier indice tab_PA : %d\n", dernier_PA);
148 152 }
149 153  
150 154  
... ... @@ -175,6 +179,7 @@ void liberer_interfaces(){
175 179 void send_data(unsigned char tab_PA[TAB_PA_SIZE], unsigned char data){
176 180  
177 181 unsigned char PA = tab_PA[0]; //LEDs sur le premier point d'accès
  182 + printf("adresse PA %d\n", tab_PA[0]);
178 183 int transferred = 1; //nombre d'octets transférés
179 184 unsigned int timeout = 1000; //temps avant un timeout
180 185 int status = libusb_interrupt_transfer(handle, PA, &data, sizeof(data), &transferred, timeout);
... ... @@ -187,16 +192,18 @@ void receive_data(unsigned char tab_PA[TAB_PA_SIZE], unsigned char *boutons, uns
187 192  
188 193 /* Lecture du point d'accès des boutons */
189 194 unsigned char PA = tab_PA[1]; //LEDs sur le premier point d'accès
  195 + printf("adresse PA %d\n", tab_PA[1]);
190 196 int transferred = 1; //nombre d'octets transférés
191 197 unsigned int timeout = 1000; //temps avant un timeout
192 198  
193 199 int status = libusb_interrupt_transfer(handle, PA, boutons, sizeof(boutons), &transferred, timeout);
194   - if(status!=0){perror("libusb_interrupt_transfer");exit(-1);}
  200 + if(status!=0){perror("libusb_interrupt_transfer");printf("erreur lecture boutons, adresse PA %d\n",tab_PA[1]);exit(-1);}
195 201  
196 202 /* Lecture du point d'accès du joystick */
197 203 unsigned char *joystick_xy=NULL; //stocke la donnée du point d'accès (1 octet pour chaque axe)
198 204  
199 205 PA = tab_PA[2]; //LEDs sur le premier point d'accès
  206 + printf("adresse PA %d\n", tab_PA[2]);
200 207 transferred = 2; //nombre d'octets transférés
201 208 timeout = 1000; //temps avant un timeout
202 209  
... ... @@ -229,33 +236,38 @@ int main(){
229 236 if(status_ouv!=0){ perror("libusb_open"); exit(-1); }
230 237  
231 238 /* Configuration du périphérique et sauvegarde des points d'accès */
232   - char tab_PA[TAB_PA_SIZE];
  239 + unsigned char tab_PA[TAB_PA_SIZE];
233 240 config_periph(tab_PA);
234 241  
235   - unsigned char *boutons, *boutons_anc = NULL;
236   - unsigned char *joystick_x, *joystick_x_anc = NULL;
237   - unsigned char *joystick_y, *joystick_y_anc = NULL;
  242 + unsigned char *boutons = NULL, *boutons_anc = NULL;
  243 + unsigned char *joystick_x = NULL, *joystick_x_anc = NULL;
  244 + unsigned char *joystick_y = NULL, *joystick_y_anc = NULL;
238 245 unsigned char caractere;
239 246  
240   - /*
241   - //boucle while(pas d'arrêt), envoi et rcpt
242   - // "pas d'arrêt" = appui sur 's' par exemple
243   -
244   - if (appui sur une touche){
  247 +
  248 + //TODO boucle while(pas d'arrêt), envoi et rcpt
  249 + //TODO "pas d'arrêt" = appui sur 's' par exemple
  250 +
  251 + while(1){
  252 + /*if (appui sur une touche){
245 253 //récupération caractère
246 254 send_data(tab_PA, caractere); //Envoi de la commande des leds
247 255 }
248 256 else {
  257 + */
  258 + printf("début rcpt\n");
249 259 receive_data(tab_PA, boutons, joystick_x, joystick_y); //Réception des boutons et joystick
  260 + printf("fin rcpt\n");
  261 + if ((boutons == NULL) || (joystick_x == NULL) || (joystick_y == NULL)) printf("Erreur réception : pointeurs boutons ou joystick nul\n");
250 262 if ((*boutons != *boutons_anc) || (joystick_x != joystick_x_anc) || (joystick_y != joystick_y_anc)) printf("Boutons : %c, Joystick_x : %c, Joystick_y :%c\n", *boutons, *joystick_x, *joystick_y); //Affichage si changement
251 263  
252 264 *boutons_anc = *boutons;
253 265 *joystick_x_anc = *joystick_x;
254 266 *joystick_y_anc = *joystick_y;
255   - }
256   -
  267 + //}
257 268  
258   - */
  269 + }
  270 + //*/
259 271  
260 272 /* Libération des interfaces*/
261 273 liberer_interfaces();
... ...
README.md
... ... @@ -12,9 +12,11 @@ Pour compiler, lancer et ultiliser les programmes :
12 12  
13 13 \>lsusb
14 14  
15   -On doit voir Arduino apparaitre.
  15 +On doit voir une ligne "Arduino SA Uno (CDC ACM)" apparaître.
16 16  
17   -Si flashée : enregistrer le binaire du lien : https://raw.githubusercontent.com/arduino/ArduinoCore-avr/master/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-uno.hex
  17 +Si elle est déjà flashée, il faut enregistrer le binaire du lien : https://raw.githubusercontent.com/arduino/ArduinoCore-avr/master/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-uno.hex
  18 +
  19 +Court-circuiter les broches GND et RESET de l'ATMega16U2 sur l'ICSP de ce micro-contrôleur
18 20  
19 21 Puis écrire :
20 22  
... ... @@ -24,40 +26,45 @@ Puis écrire :
24 26  
25 27 \>dfu-programmer atmega16u2 reset
26 28  
  29 +Débrancher et rebrancher le port USB de la carte.
27 30  
28 31 Étape 2 :
29   -Compiler et Upload le programme main.c sur l'arduino.
30   -
31   -\>gcc -o main main.c -Wall (pas sur que ce soit nécessaire)
  32 +Compiler et charger le programme main.c sur l'arduino.
32 33  
33 34 \>make all
34 35  
35 36 \>make upload
36 37  
37   -(Remarque : On peut tester ce progrmme directement avec :)
  38 +Passer en root pour l'upload si nécessaire.
  39 +
  40 +Remarque : Nous pouvons tester ce progrmme directement avec :
  41 +
  42 +\>minicom -8 -o -b 9600 -D /dev/ttyACM0
38 43  
39   -\>minicom -8 -o -b 9600 -D /dev/ttyACM0
40 44  
41 45 Le programme est maintenant sur l'Arduino.
42 46  
43 47 Étape 3:
44 48 Flasher la carte
45 49  
46   -\>cd lufa-master/
47   -
48   -\>cd PolytechLille PAD/
  50 +\>cd lufa-master/PolytechLille/PAD/
49 51  
50 52 \>make all
51 53  
  54 +Court-circuiter les broches GND et RESET de l'ATMega16U2 sur l'ICSP de ce micro-contrôleur
  55 +
52 56 \>dfu-programmer atmega16u2 erase
53 57  
54 58 \>dfu-programmer atmega16u2 flash PAD.hex
55 59  
56 60 \>dfu-programmer atmega16u2 reset
57 61  
  62 +Débrancher et rebrancher le port USB de la carte.
  63 +
58 64 Étape 4:
59 65 Compiler la partie 1 et l'exécuter.
60 66  
  67 +\>cd ../../../Pgm\ PC/
61 68 \>gcc -o exe init_USB.c -lusb-1.0 -Wall -Wextra
62 69  
63 70 \>./exe
... ... @@ -68,4 +75,4 @@ Ce qui marche :
68 75 _ La Partie 2, fonctionne correctement et compile sans warnings.
69 76  
70 77  
71   -Ce qui ne marche pas : (La partie 3 marche-t-elle ?)
72 78 \ No newline at end of file
  79 +Ce qui ne marche pas : (La partie 3 marche-t-elle ?)
... ...
lufa-master/PolytechLille/PAD/Descriptors.c
... ... @@ -153,7 +153,7 @@ const USB_Descriptor_Configuration_t PROGMEM RelayBoard_ConfigurationDescriptor
153 153 .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
154 154 .EndpointSize = JOYSTICK_EPSIZE,
155 155 .PollingIntervalMS = 0x05
156   - },
  156 + }
157 157 };
158 158  
159 159 /** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
... ...
lufa-master/PolytechLille/PAD/Descriptors.h
... ... @@ -56,7 +56,7 @@
56 56  
57 57 USB_Descriptor_Interface_t InterfaceIN;
58 58 USB_Descriptor_Endpoint_t ReportINEndpointBoutons;
59   - USB_Descriptor_Endpoint_t ReportOUTEndpointJoystick;
  59 + USB_Descriptor_Endpoint_t ReportINEndpointJoystick;
60 60 } USB_Descriptor_Configuration_t;
61 61  
62 62 /** Enum for the device interface descriptor IDs within the device. Each interface descriptor
... ...
lufa-master/PolytechLille/PAD/PAD.c
... ... @@ -38,7 +38,7 @@
38 38 #include "PAD.h"
39 39  
40 40  
41   -#define debut_rcpt 0xff //valeur arbitraire pour détecter un début de trame
  41 +#define debut_rcpt 0x40 //valeur arbitraire pour détecter un début de trame
42 42  
43 43 uint8_t boutons;
44 44 uint8_t joystick_x;
... ... @@ -59,6 +59,7 @@ int main(void)
59 59 {
60 60 USB_USBTask();
61 61 //HID_Task();
  62 + PAD_Task();
62 63 }
63 64 }
64 65  
... ... @@ -138,7 +139,7 @@ void Send_EP_IN_Report(void)
138 139 Endpoint_SelectEndpoint(KEYBOARD_IN_Bout_EPADDR);
139 140  
140 141 /* Check if Keyboard Endpoint Ready for Read/Write and if we should send a new report */
141   - if (Endpoint_IsReadWriteAllowed() && Endpoint_IsINReady)
  142 + if (Endpoint_IsReadWriteAllowed() && Endpoint_IsINReady())
142 143 {
143 144 /* Save the current report data for later comparison to check for changes */
144 145 //PrevKeyboardReportData = KeyboardReportData;
... ... @@ -157,7 +158,7 @@ void Send_EP_IN_Report(void)
157 158 Endpoint_SelectEndpoint(KEYBOARD_IN_Joy_EPADDR);
158 159  
159 160 /* Check if Keyboard Endpoint Ready for Read/Write and if we should send a new report */
160   - if (Endpoint_IsReadWriteAllowed() && Endpoint_IsINReady)
  161 + if (Endpoint_IsReadWriteAllowed() && Endpoint_IsINReady())
161 162 {
162 163 /* Save the current report data for later comparison to check for changes */
163 164 //PrevKeyboardReportData = KeyboardReportData;
... ...
... ... @@ -6,7 +6,7 @@
6 6 #define CPU_FREQ 16000000L // Assume a CPU frequency of 16Mhz
7 7 #define tempo 25
8 8 #define debit 9600 //débit liaison série en bauds
9   -#define debut_serial_tx 0xff //pour détecter la transmission d'une trame pour le 16u2
  9 +#define debut_serial_tx 0x40 //pour détecter la transmission d'une trame pour le 16u2
10 10  
11 11 void init_serial(int speed)
12 12 {
... ...