Commit 3966cf832747682d6e7156b8c4bf7b8f0dfae5ee

Authored by rguillom
1 parent c0369a17

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

@@ -69,7 +69,7 @@ void enum_periph(){ @@ -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 /* Récupération de la 1ère configuration du périphérique (indice 0) */ 74 /* Récupération de la 1ère configuration du périphérique (indice 0) */
75 struct libusb_config_descriptor *config_desc=NULL; 75 struct libusb_config_descriptor *config_desc=NULL;
@@ -93,6 +93,8 @@ void config_periph(char tab_PA[TAB_PA_SIZE]){ @@ -93,6 +93,8 @@ void config_periph(char tab_PA[TAB_PA_SIZE]){
93 93
94 94
95 /* Utilisation de la configuration */ 95 /* Utilisation de la configuration */
  96 +
  97 + int dernier_PA=-1;
96 int configuration=config_desc->bConfigurationValue; 98 int configuration=config_desc->bConfigurationValue;
97 99
98 //printf("valeur config %d\n", configuration); // Affichage valeur de la configuration 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,15 +114,15 @@ void config_periph(char tab_PA[TAB_PA_SIZE]){
112 114
113 115
114 /* Parcours des points d'accès (Endpoint) pour chaque interface*/ 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 int type_PA = config_desc->interface[indice_intf].altsetting[0].endpoint[num_PA].bmAttributes; 120 int type_PA = config_desc->interface[indice_intf].altsetting[0].endpoint[num_PA].bmAttributes;
118 uint8_t adresse_PA = config_desc->interface[indice_intf].altsetting[0].endpoint[num_PA].bEndpointAddress; 121 uint8_t adresse_PA = config_desc->interface[indice_intf].altsetting[0].endpoint[num_PA].bEndpointAddress;
119 printf("\t\tPoint d'accès trouvé. Adresse : %d\n",adresse_PA); 122 printf("\t\tPoint d'accès trouvé. Adresse : %d\n",adresse_PA);
120 123
121 /* Regarde si le point d'accès est de type interruption. 124 /* Regarde si le point d'accès est de type interruption.
122 Si oui, on le sauvegarde. */ 125 Si oui, on le sauvegarde. */
123 - int dernier_PA=-1;  
124 if((type_PA & 0b11)==LIBUSB_TRANSFER_TYPE_INTERRUPT){ 126 if((type_PA & 0b11)==LIBUSB_TRANSFER_TYPE_INTERRUPT){
125 //struct EP ep1; 127 //struct EP ep1;
126 dernier_PA++; 128 dernier_PA++;
@@ -143,8 +145,10 @@ void config_periph(char tab_PA[TAB_PA_SIZE]){ @@ -143,8 +145,10 @@ void config_periph(char tab_PA[TAB_PA_SIZE]){
143 // Le if et else ci-dessus doivent pouvoir être simplifiés. 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,6 +179,7 @@ void liberer_interfaces(){
175 void send_data(unsigned char tab_PA[TAB_PA_SIZE], unsigned char data){ 179 void send_data(unsigned char tab_PA[TAB_PA_SIZE], unsigned char data){
176 180
177 unsigned char PA = tab_PA[0]; //LEDs sur le premier point d'accès 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 int transferred = 1; //nombre d'octets transférés 183 int transferred = 1; //nombre d'octets transférés
179 unsigned int timeout = 1000; //temps avant un timeout 184 unsigned int timeout = 1000; //temps avant un timeout
180 int status = libusb_interrupt_transfer(handle, PA, &data, sizeof(data), &transferred, timeout); 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,16 +192,18 @@ void receive_data(unsigned char tab_PA[TAB_PA_SIZE], unsigned char *boutons, uns
187 192
188 /* Lecture du point d'accès des boutons */ 193 /* Lecture du point d'accès des boutons */
189 unsigned char PA = tab_PA[1]; //LEDs sur le premier point d'accès 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 int transferred = 1; //nombre d'octets transférés 196 int transferred = 1; //nombre d'octets transférés
191 unsigned int timeout = 1000; //temps avant un timeout 197 unsigned int timeout = 1000; //temps avant un timeout
192 198
193 int status = libusb_interrupt_transfer(handle, PA, boutons, sizeof(boutons), &transferred, timeout); 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 /* Lecture du point d'accès du joystick */ 202 /* Lecture du point d'accès du joystick */
197 unsigned char *joystick_xy=NULL; //stocke la donnée du point d'accès (1 octet pour chaque axe) 203 unsigned char *joystick_xy=NULL; //stocke la donnée du point d'accès (1 octet pour chaque axe)
198 204
199 PA = tab_PA[2]; //LEDs sur le premier point d'accès 205 PA = tab_PA[2]; //LEDs sur le premier point d'accès
  206 + printf("adresse PA %d\n", tab_PA[2]);
200 transferred = 2; //nombre d'octets transférés 207 transferred = 2; //nombre d'octets transférés
201 timeout = 1000; //temps avant un timeout 208 timeout = 1000; //temps avant un timeout
202 209
@@ -229,33 +236,38 @@ int main(){ @@ -229,33 +236,38 @@ int main(){
229 if(status_ouv!=0){ perror("libusb_open"); exit(-1); } 236 if(status_ouv!=0){ perror("libusb_open"); exit(-1); }
230 237
231 /* Configuration du périphérique et sauvegarde des points d'accès */ 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 config_periph(tab_PA); 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 unsigned char caractere; 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 //récupération caractère 253 //récupération caractère
246 send_data(tab_PA, caractere); //Envoi de la commande des leds 254 send_data(tab_PA, caractere); //Envoi de la commande des leds
247 } 255 }
248 else { 256 else {
  257 + */
  258 + printf("début rcpt\n");
249 receive_data(tab_PA, boutons, joystick_x, joystick_y); //Réception des boutons et joystick 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 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 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 *boutons_anc = *boutons; 264 *boutons_anc = *boutons;
253 *joystick_x_anc = *joystick_x; 265 *joystick_x_anc = *joystick_x;
254 *joystick_y_anc = *joystick_y; 266 *joystick_y_anc = *joystick_y;
255 - }  
256 - 267 + //}
257 268
258 - */ 269 + }
  270 + //*/
259 271
260 /* Libération des interfaces*/ 272 /* Libération des interfaces*/
261 liberer_interfaces(); 273 liberer_interfaces();
@@ -12,9 +12,11 @@ Pour compiler, lancer et ultiliser les programmes : @@ -12,9 +12,11 @@ Pour compiler, lancer et ultiliser les programmes :
12 12
13 \>lsusb 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 Puis écrire : 21 Puis écrire :
20 22
@@ -24,40 +26,45 @@ Puis écrire : @@ -24,40 +26,45 @@ Puis écrire :
24 26
25 \>dfu-programmer atmega16u2 reset 27 \>dfu-programmer atmega16u2 reset
26 28
  29 +Débrancher et rebrancher le port USB de la carte.
27 30
28 Étape 2 : 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 \>make all 34 \>make all
34 35
35 \>make upload 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 Le programme est maintenant sur l'Arduino. 45 Le programme est maintenant sur l'Arduino.
42 46
43 Étape 3: 47 Étape 3:
44 Flasher la carte 48 Flasher la carte
45 49
46 -\>cd lufa-master/  
47 -  
48 -\>cd PolytechLille PAD/ 50 +\>cd lufa-master/PolytechLille/PAD/
49 51
50 \>make all 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 \>dfu-programmer atmega16u2 erase 56 \>dfu-programmer atmega16u2 erase
53 57
54 \>dfu-programmer atmega16u2 flash PAD.hex 58 \>dfu-programmer atmega16u2 flash PAD.hex
55 59
56 \>dfu-programmer atmega16u2 reset 60 \>dfu-programmer atmega16u2 reset
57 61
  62 +Débrancher et rebrancher le port USB de la carte.
  63 +
58 Étape 4: 64 Étape 4:
59 Compiler la partie 1 et l'exécuter. 65 Compiler la partie 1 et l'exécuter.
60 66
  67 +\>cd ../../../Pgm\ PC/
61 \>gcc -o exe init_USB.c -lusb-1.0 -Wall -Wextra 68 \>gcc -o exe init_USB.c -lusb-1.0 -Wall -Wextra
62 69
63 \>./exe 70 \>./exe
@@ -68,4 +75,4 @@ Ce qui marche : @@ -68,4 +75,4 @@ Ce qui marche :
68 _ La Partie 2, fonctionne correctement et compile sans warnings. 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 \ No newline at end of file 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,7 +153,7 @@ const USB_Descriptor_Configuration_t PROGMEM RelayBoard_ConfigurationDescriptor
153 .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), 153 .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
154 .EndpointSize = JOYSTICK_EPSIZE, 154 .EndpointSize = JOYSTICK_EPSIZE,
155 .PollingIntervalMS = 0x05 155 .PollingIntervalMS = 0x05
156 - }, 156 + }
157 }; 157 };
158 158
159 /** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests 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,7 +56,7 @@
56 56
57 USB_Descriptor_Interface_t InterfaceIN; 57 USB_Descriptor_Interface_t InterfaceIN;
58 USB_Descriptor_Endpoint_t ReportINEndpointBoutons; 58 USB_Descriptor_Endpoint_t ReportINEndpointBoutons;
59 - USB_Descriptor_Endpoint_t ReportOUTEndpointJoystick; 59 + USB_Descriptor_Endpoint_t ReportINEndpointJoystick;
60 } USB_Descriptor_Configuration_t; 60 } USB_Descriptor_Configuration_t;
61 61
62 /** Enum for the device interface descriptor IDs within the device. Each interface descriptor 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,7 +38,7 @@
38 #include "PAD.h" 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 uint8_t boutons; 43 uint8_t boutons;
44 uint8_t joystick_x; 44 uint8_t joystick_x;
@@ -59,6 +59,7 @@ int main(void) @@ -59,6 +59,7 @@ int main(void)
59 { 59 {
60 USB_USBTask(); 60 USB_USBTask();
61 //HID_Task(); 61 //HID_Task();
  62 + PAD_Task();
62 } 63 }
63 } 64 }
64 65
@@ -138,7 +139,7 @@ void Send_EP_IN_Report(void) @@ -138,7 +139,7 @@ void Send_EP_IN_Report(void)
138 Endpoint_SelectEndpoint(KEYBOARD_IN_Bout_EPADDR); 139 Endpoint_SelectEndpoint(KEYBOARD_IN_Bout_EPADDR);
139 140
140 /* Check if Keyboard Endpoint Ready for Read/Write and if we should send a new report */ 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 /* Save the current report data for later comparison to check for changes */ 144 /* Save the current report data for later comparison to check for changes */
144 //PrevKeyboardReportData = KeyboardReportData; 145 //PrevKeyboardReportData = KeyboardReportData;
@@ -157,7 +158,7 @@ void Send_EP_IN_Report(void) @@ -157,7 +158,7 @@ void Send_EP_IN_Report(void)
157 Endpoint_SelectEndpoint(KEYBOARD_IN_Joy_EPADDR); 158 Endpoint_SelectEndpoint(KEYBOARD_IN_Joy_EPADDR);
158 159
159 /* Check if Keyboard Endpoint Ready for Read/Write and if we should send a new report */ 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 /* Save the current report data for later comparison to check for changes */ 163 /* Save the current report data for later comparison to check for changes */
163 //PrevKeyboardReportData = KeyboardReportData; 164 //PrevKeyboardReportData = KeyboardReportData;
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 #define CPU_FREQ 16000000L // Assume a CPU frequency of 16Mhz 6 #define CPU_FREQ 16000000L // Assume a CPU frequency of 16Mhz
7 #define tempo 25 7 #define tempo 25
8 #define debit 9600 //débit liaison série en bauds 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 void init_serial(int speed) 11 void init_serial(int speed)
12 { 12 {