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