Commit 0fd27a37e7cd495112f24958b18d3c939ed0468c

Authored by rguillom
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 12 libusb_device *found=NULL; //notre périphérique
13 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 16 /*énumération des périphériques USB*/
38 17 void enum_periph(){
... ... @@ -60,7 +39,8 @@ void enum_periph(){
60 39 /* Recherche de notre périphérique et sauvegarde dans 'found' */
61 40 if(desc.idVendor == VENDOR_ID && desc.idProduct == PRODUCT_ID){
62 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 44 break;
65 45 }
66 46 }
... ... @@ -128,22 +108,6 @@ void config_periph(unsigned char tab_PA[TAB_PA_SIZE]){
128 108 dernier_PA++;
129 109 tab_PA[dernier_PA] = adresse_PA;
130 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 145 unsigned char PA = tab_PA[0]; //LEDs sur le premier point d'accès
182 146 printf("adresse PA %d\n", tab_PA[0]);
183 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 149 int status = libusb_interrupt_transfer(handle, PA, &data, sizeof(data), &transferred, timeout);
186 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 153  
190 154 /* Lis le contenu des points d'accès de l'interface IN (boutons et joystick) */
191 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 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 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 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 183 if(status!=0){perror("libusb_interrupt_transfer");exit(-1);}
212 184  
213   - //TODO Pas sûr !!!
  185 + //TODO Pas sûr !
214 186 if (joystick_xy !=NULL){
215 187 *joystick_x = joystick_xy[0]; //On sépare la data de chaque axe
216 188 *joystick_y = joystick_xy[1];
... ... @@ -239,9 +211,9 @@ int main(){
239 211 unsigned char tab_PA[TAB_PA_SIZE];
240 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 217 unsigned char caractere;
246 218  
247 219  
... ... @@ -249,21 +221,22 @@ int main(){
249 221 //TODO "pas d'arrêt" = appui sur 's' par exemple
250 222  
251 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 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 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 40  
41 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 48 /** Main program entry point. This routine contains the overall program flow, including initial
... ...