Commit 3966cf832747682d6e7156b8c4bf7b8f0dfae5ee
1 parent
c0369a17
modifs diverses : valeur octet début de trame, main.c, débogage init_USB.c, README
Showing
6 changed files
with
54 additions
and
34 deletions
Show diff stats
Pgm PC/init_USB.c
@@ -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(); |
README.md
@@ -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 | { |