Commit 0fd27a37e7cd495112f24958b18d3c939ed0468c
1 parent
c22ab230
fix
Showing
2 changed files
with
41 additions
and
68 deletions
Show diff stats
Pgm PC/init_USB.c
@@ -12,27 +12,6 @@ libusb_device *device=NULL; | @@ -12,27 +12,6 @@ libusb_device *device=NULL; | ||
12 | libusb_device *found=NULL; //notre périphérique | 12 | libusb_device *found=NULL; //notre périphérique |
13 | libusb_context *context; | 13 | libusb_context *context; |
14 | 14 | ||
15 | -/* | ||
16 | -struct TABLEAU{ | ||
17 | - struct EP *tableau[3]; //tableau des points d'accès en interruption | ||
18 | - int dernier; | ||
19 | -}; | ||
20 | - | ||
21 | -struct EP { | ||
22 | - uint8_t ep; //adresse d'accès de l'endpoint | ||
23 | - unsigned char io; //décrit si c'est une entrée ou une sortie | ||
24 | -}; | ||
25 | - | ||
26 | -//init structure tableau | ||
27 | -struct TABLEAU tab_pa; | ||
28 | - | ||
29 | -void init_tableau(){ | ||
30 | - for (int i=0;i<3;i++){ | ||
31 | - tab_pa.tableau[i]=NULL; | ||
32 | - } | ||
33 | - tab_pa.dernier=0; | ||
34 | -} | ||
35 | -*/ | ||
36 | 15 | ||
37 | /*énumération des périphériques USB*/ | 16 | /*énumération des périphériques USB*/ |
38 | void enum_periph(){ | 17 | void enum_periph(){ |
@@ -60,7 +39,8 @@ void enum_periph(){ | @@ -60,7 +39,8 @@ void enum_periph(){ | ||
60 | /* Recherche de notre périphérique et sauvegarde dans 'found' */ | 39 | /* Recherche de notre périphérique et sauvegarde dans 'found' */ |
61 | if(desc.idVendor == VENDOR_ID && desc.idProduct == PRODUCT_ID){ | 40 | if(desc.idVendor == VENDOR_ID && desc.idProduct == PRODUCT_ID){ |
62 | found = device; | 41 | found = device; |
63 | - printf("\nPériphérique trouvé @ (Bus:Adresse) %d:%d\n", bus, address); //test si le "found" reste le meme | 42 | + printf("\nPériphérique trouvé @ (Bus:Adresse) %d:%d\n", bus, address); |
43 | + //printf("handle %d\n",found); | ||
64 | break; | 44 | break; |
65 | } | 45 | } |
66 | } | 46 | } |
@@ -128,22 +108,6 @@ void config_periph(unsigned char tab_PA[TAB_PA_SIZE]){ | @@ -128,22 +108,6 @@ void config_periph(unsigned char tab_PA[TAB_PA_SIZE]){ | ||
128 | dernier_PA++; | 108 | dernier_PA++; |
129 | tab_PA[dernier_PA] = adresse_PA; | 109 | tab_PA[dernier_PA] = adresse_PA; |
130 | printf("\t\tPoint d'accès numéro %d sauvegardé. Adresse : %d\n", dernier_PA, adresse_PA); | 110 | printf("\t\tPoint d'accès numéro %d sauvegardé. Adresse : %d\n", dernier_PA, adresse_PA); |
131 | - | ||
132 | - /* | ||
133 | - ep1.ep=config_desc->interface[indice_intf].altsetting[0].endpoint->bEndpointAddress; | ||
134 | - if (indice_intf==0){ | ||
135 | - tab_pa.tableau[indice_intf]->ep=ep1.ep; | ||
136 | - tab_pa.tableau[indice_intf]->io=1; | ||
137 | - tab_pa.dernier++; | ||
138 | - } | ||
139 | - else{ | ||
140 | - tab_pa.tableau[indice_intf]->ep=ep1.ep; | ||
141 | - tab_pa.tableau[indice_intf]->io=0; | ||
142 | - tab_pa.dernier++; | ||
143 | - if (num_ep >2)break; //entrée => io=0 | ||
144 | - | ||
145 | - // Le if et else ci-dessus doivent pouvoir être simplifiés. | ||
146 | - */ | ||
147 | } | 111 | } |
148 | 112 | ||
149 | } | 113 | } |
@@ -181,7 +145,7 @@ void send_data(unsigned char tab_PA[TAB_PA_SIZE], unsigned char data){ | @@ -181,7 +145,7 @@ void send_data(unsigned char tab_PA[TAB_PA_SIZE], unsigned char data){ | ||
181 | unsigned char PA = tab_PA[0]; //LEDs sur le premier point d'accès | 145 | unsigned char PA = tab_PA[0]; //LEDs sur le premier point d'accès |
182 | printf("adresse PA %d\n", tab_PA[0]); | 146 | printf("adresse PA %d\n", tab_PA[0]); |
183 | int transferred = 1; //nombre d'octets transférés | 147 | int transferred = 1; //nombre d'octets transférés |
184 | - unsigned int timeout = 1000; //temps avant un timeout | 148 | + unsigned int timeout = 100; //temps avant un timeout |
185 | int status = libusb_interrupt_transfer(handle, PA, &data, sizeof(data), &transferred, timeout); | 149 | int status = libusb_interrupt_transfer(handle, PA, &data, sizeof(data), &transferred, timeout); |
186 | if(status!=0){perror("libusb_interrupt_transfer");exit(-1);} | 150 | if(status!=0){perror("libusb_interrupt_transfer");exit(-1);} |
187 | } | 151 | } |
@@ -189,28 +153,36 @@ void send_data(unsigned char tab_PA[TAB_PA_SIZE], unsigned char data){ | @@ -189,28 +153,36 @@ void send_data(unsigned char tab_PA[TAB_PA_SIZE], unsigned char data){ | ||
189 | 153 | ||
190 | /* Lis le contenu des points d'accès de l'interface IN (boutons et joystick) */ | 154 | /* Lis le contenu des points d'accès de l'interface IN (boutons et joystick) */ |
191 | void receive_data(unsigned char tab_PA[TAB_PA_SIZE], unsigned char *boutons, unsigned char *joystick_x, unsigned char *joystick_y){ | 155 | void receive_data(unsigned char tab_PA[TAB_PA_SIZE], unsigned char *boutons, unsigned char *joystick_x, unsigned char *joystick_y){ |
192 | - | 156 | + |
157 | + unsigned char PA; | ||
158 | + int length, transferred; | ||
159 | + unsigned int timeout; | ||
160 | + | ||
193 | /* Lecture du point d'accès des boutons */ | 161 | /* Lecture du point d'accès des boutons */ |
194 | - unsigned char PA = tab_PA[1]; //LEDs sur le premier point d'accès | ||
195 | - printf("adresse PA %d\n", tab_PA[1]); | ||
196 | - int transferred = 1; //nombre d'octets transférés | ||
197 | - unsigned int timeout = 1000; //temps avant un timeout | 162 | + PA = tab_PA[1]; //LEDs sur le premier point d'accès |
198 | 163 | ||
199 | - int status = libusb_interrupt_transfer(handle, PA, boutons, sizeof(boutons), &transferred, timeout); | ||
200 | - if(status!=0){perror("libusb_interrupt_transfer");printf("erreur lecture boutons, adresse PA %d\n",tab_PA[1]);exit(-1);} | 164 | + //printf("adresse PA %d\n", tab_PA[1]); |
165 | + //printf("handle %d\n",found); | ||
166 | + //printf("boutons %p\n", boutons); | ||
167 | + | ||
168 | + length = 1; | ||
169 | + timeout = 100; //temps avant un timeout | ||
170 | + | ||
171 | + int status = libusb_interrupt_transfer(handle, PA, boutons, length, &transferred, timeout); | ||
172 | + if(status!=0){perror("libusb_interrupt_transfer");exit(-1);} | ||
201 | 173 | ||
202 | /* Lecture du point d'accès du joystick */ | 174 | /* Lecture du point d'accès du joystick */ |
203 | - unsigned char *joystick_xy=NULL; //stocke la donnée du point d'accès (1 octet pour chaque axe) | 175 | + unsigned char joystick_xy[2]; //stocke la donnée du point d'accès (1 octet pour chaque axe) |
204 | 176 | ||
205 | PA = tab_PA[2]; //LEDs sur le premier point d'accès | 177 | PA = tab_PA[2]; //LEDs sur le premier point d'accès |
206 | - printf("adresse PA %d\n", tab_PA[2]); | ||
207 | - transferred = 2; //nombre d'octets transférés | ||
208 | - timeout = 1000; //temps avant un timeout | 178 | + //printf("adresse PA %d\n", tab_PA[2]); |
179 | + length = 2; | ||
180 | + timeout = 100; //temps avant un timeout | ||
209 | 181 | ||
210 | - status = libusb_interrupt_transfer(handle, PA, joystick_xy, sizeof(joystick_xy), &transferred, timeout); | 182 | + status = libusb_interrupt_transfer(handle, PA, joystick_xy, length, &transferred, timeout); |
211 | if(status!=0){perror("libusb_interrupt_transfer");exit(-1);} | 183 | if(status!=0){perror("libusb_interrupt_transfer");exit(-1);} |
212 | 184 | ||
213 | - //TODO Pas sûr !!! | 185 | + //TODO Pas sûr ! |
214 | if (joystick_xy !=NULL){ | 186 | if (joystick_xy !=NULL){ |
215 | *joystick_x = joystick_xy[0]; //On sépare la data de chaque axe | 187 | *joystick_x = joystick_xy[0]; //On sépare la data de chaque axe |
216 | *joystick_y = joystick_xy[1]; | 188 | *joystick_y = joystick_xy[1]; |
@@ -239,9 +211,9 @@ int main(){ | @@ -239,9 +211,9 @@ int main(){ | ||
239 | unsigned char tab_PA[TAB_PA_SIZE]; | 211 | unsigned char tab_PA[TAB_PA_SIZE]; |
240 | config_periph(tab_PA); | 212 | config_periph(tab_PA); |
241 | 213 | ||
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; | 214 | + unsigned char boutons, boutons_anc=0xff; |
215 | + unsigned char joystick_x, joystick_x_anc=0xff; | ||
216 | + unsigned char joystick_y, joystick_y_anc=0xff; | ||
245 | unsigned char caractere; | 217 | unsigned char caractere; |
246 | 218 | ||
247 | 219 | ||
@@ -249,21 +221,22 @@ int main(){ | @@ -249,21 +221,22 @@ int main(){ | ||
249 | //TODO "pas d'arrêt" = appui sur 's' par exemple | 221 | //TODO "pas d'arrêt" = appui sur 's' par exemple |
250 | 222 | ||
251 | while(1){ | 223 | while(1){ |
252 | - /*if (appui sur une touche){ | 224 | + /*// si un caractère intéressant est tapé au clavier, l'envoie à la carte. |
225 | + if (((c=getchar())>='a' && (c=getchar())<='f') || ((c=getchar())>='A' && (c=getchar())<='F')) { | ||
253 | //récupération caractère | 226 | //récupération caractère |
254 | - send_data(tab_PA, caractere); //Envoi de la commande des leds | 227 | + send_data(tab_PA, c); //Envoi de la commande des leds |
255 | } | 228 | } |
256 | else { | 229 | else { |
257 | */ | 230 | */ |
258 | - printf("début rcpt\n"); | ||
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"); | ||
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 | 231 | + //printf("début rcpt\n"); |
232 | + receive_data(tab_PA, &boutons, &joystick_x, &joystick_y); //Réception des boutons et joystick | ||
233 | + //printf("fin rcpt\n"); | ||
234 | + printf("Boutons : %02x, Joystick_x : %02x, Joystick_y :%02x\n", boutons, joystick_x, joystick_y); //Affichage si changement | ||
235 | + if ((boutons != boutons_anc) || (joystick_x != joystick_x_anc) || (joystick_y != joystick_y_anc)) printf("Boutons : %02x, Joystick_x : %02x, Joystick_y :%c\n", boutons, joystick_x, joystick_y); //Affichage si changement | ||
263 | 236 | ||
264 | - *boutons_anc = *boutons; | ||
265 | - *joystick_x_anc = *joystick_x; | ||
266 | - *joystick_y_anc = *joystick_y; | 237 | + boutons_anc = boutons; |
238 | + joystick_x_anc = joystick_x; | ||
239 | + joystick_y_anc = joystick_y; | ||
267 | //} | 240 | //} |
268 | 241 | ||
269 | } | 242 | } |
lufa-master/PolytechLille/PAD/PAD.c
@@ -40,9 +40,9 @@ | @@ -40,9 +40,9 @@ | ||
40 | 40 | ||
41 | #define debut_rcpt 0x40 //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; | ||
44 | -uint8_t joystick_x; | ||
45 | -uint8_t joystick_y; | 43 | +uint8_t boutons=0xaa; |
44 | +uint8_t joystick_x=0xbb; | ||
45 | +uint8_t joystick_y=0xcc; | ||
46 | 46 | ||
47 | 47 | ||
48 | /** Main program entry point. This routine contains the overall program flow, including initial | 48 | /** Main program entry point. This routine contains the overall program flow, including initial |