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 | 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 | { | ... | ... |