Commit 864b2b8dd2c00ad2f31cc913c8c3eb29759fe4b0

Authored by rguillom
1 parent 813e00af

ajout mineurs

Showing 1 changed file with 0 additions and 158 deletions   Show diff stats
lufa-master/PolytechLille/PAD/init_USB.c deleted
@@ -1,158 +0,0 @@ @@ -1,158 +0,0 @@
1 -#include <libusb-1.0/libusb.h>  
2 -#include <stdio.h>  
3 -#include <stdlib.h>  
4 -  
5 -libusb_device_handle *handle=NULL;  
6 -libusb_device *device=NULL;  
7 -libusb_device *found=NULL; //notre périphérique  
8 -  
9 -struct TABLEAU{  
10 - struct EP *tableau[3]; //tableau des points d'accès en interruption  
11 - int dernier;  
12 -};  
13 -  
14 -struct EP {  
15 - uint8_t ep; //adresse d'accès de l'endpoint  
16 - unsigned char io; //décrit si c'est une entrée ou une sortie  
17 -};  
18 -  
19 -//init structure tableau  
20 -struct TABLEAU tab_pa;  
21 -  
22 -void init_tableau(){  
23 - for (int i=0;i<3;i++){  
24 - tab_pa.tableau[i]=NULL;  
25 - }  
26 - tab_pa.dernier=0;  
27 -}  
28 -  
29 -/*énumération des périphériques USB*/  
30 -void enum_periph(libusb_context *context){  
31 - libusb_device **list;  
32 - ssize_t count=libusb_get_device_list(context,&list);  
33 - if(count<0) {perror("libusb_get_device_list"); exit(-1);}  
34 - ssize_t i=0;  
35 - for(i=0;i<count;i++){  
36 - libusb_device *device=list[i]; //enregistre l'appareil i dans la liste list  
37 - struct libusb_device_descriptor desc;  
38 - int status=libusb_get_device_descriptor(device,&desc); //enregistre le descripteur d'appareil  
39 - if(status!=0) continue;  
40 - uint8_t bus=libusb_get_bus_number(device); //num bus  
41 - uint8_t address=libusb_get_device_address(device); //num adresse  
42 - printf("Device Found @ (Bus:Address) %d:%d\n",bus,address);  
43 - printf("Vendor ID 0x0%x\n",desc.idVendor);  
44 - printf("Product ID 0x0%x\n",desc.idProduct);  
45 -  
46 - /* PEUT VARIER D'UNE CARTE A L'AUTRE ?*/  
47 - if(desc.idVendor == 0x2341 && desc.idProduct == 0x0001) found = device; //recherche de notre périphérique et sauvegarde dans found  
48 - //printf("device :%d \n handle : %d\n", device, found); //test si le "found" reste le meme  
49 - }  
50 - libusb_free_device_list(list,1);  
51 -}  
52 -  
53 -  
54 -void config_periph(){  
55 - struct libusb_config_descriptor *config=NULL;  
56 - libusb_get_active_config_descriptor(found,&config); //on récupère la structure config_descriptor config dans found  
57 -  
58 - int interface;  
59 -  
60 - for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){  
61 -  
62 - //Si le méchant noyau est passé avant nous  
63 -  
64 - //On récupère tous les numéros des alt_settings numéro 0 => for et détach  
65 -  
66 - interface=config->interface[num_intf].altsetting[0].bInterfaceNumber;  
67 -  
68 - // on detache cette interface  
69 - if(libusb_kernel_driver_active(handle,interface)){  
70 - int status=libusb_detach_kernel_driver(handle,interface);  
71 - if(status!=0){ perror("libusb_detach_kernel_driver"); exit(-1); } //si status!=0 il y a une erreur  
72 - }  
73 - printf("indice intf trouvée %d\n",interface);  
74 - }  
75 -  
76 -  
77 - //Utilisation d'une configuration du périphérique  
78 - int configuration=config->bConfigurationValue;  
79 - printf("valeur config %d\n", config->bConfigurationValue); // Affichage valeur de la configuration  
80 - int status=libusb_set_configuration(handle,configuration);  
81 - if(status!=0){ perror("libusb_set_configuration"); exit(-1); }  
82 -  
83 - //Appropriation de toutes les interfaces (fonctionnalité USB)  
84 - for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){  
85 - status=libusb_claim_interface(handle,num_intf);  
86 - if(status!=0){ perror("libusb_claim_interface"); exit(-1); } //si status!=0 il y a une erreur  
87 - printf("indice interface claim %d\n",num_intf);  
88 - }  
89 -  
90 -  
91 -  
92 - //Sauvegarde des points d'accès  
93 - for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){  
94 - for(int num_ep=0;num_ep<config->interface[num_intf].altsetting[0].bNumEndpoints ;num_ep++){  
95 - int eptype = config->interface[num_intf].altsetting[0].endpoint->bDescriptorType;  
96 -  
97 - // Regarde si les endpoint sont de type interruption.  
98 - if((eptype & 0b11)==LIBUSB_TRANSFER_TYPE_INTERRUPT){ //sauvegarde dans tab_pa du point d'accès qui est une interruption  
99 - struct EP ep1;  
100 -  
101 - //met les endpoint dans un tableau en indiquant arbitrairement si on le veut en sortie ou non (voir les struct du début)  
102 - ep1.ep=config->interface[num_intf].altsetting[0].endpoint.bEndpointAddress;  
103 - if (num_intf==0){  
104 - tab_pa.tableau[num_intf].ep=ep1.ep;  
105 - tab_pa.tableau[num_intf].io=1;  
106 - tab_pa.dernier++;  
107 - }  
108 - else{  
109 -  
110 - tab_pa.tableau[num_intf].ep=ep1.ep;  
111 - tab_pa.tableau[num_intf].io=0;  
112 - tab_pa.dernier++;  
113 - if (num_ep >2)break;//entrée => io=0  
114 - } // Le if et else ci-dessus doivent pouvoir être simplifiés.  
115 - }  
116 - }  
117 - if (num_intf == 3) break;  
118 - }  
119 -  
120 -  
121 -  
122 -  
123 - //release des interfaces  
124 - for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){  
125 - status=libusb_release_interface(handle,interface);  
126 - if(status!=0){ perror("libusb_release_interface"); exit(-1); }  
127 -  
128 - }  
129 -}  
130 -  
131 -  
132 -  
133 -  
134 -int main(){  
135 - init_tableau(); // initialisation tableau point d'accès endpoint  
136 - //initialisation de la bibliothèque libusb-1.0  
137 - libusb_context *context;  
138 - int status=libusb_init(&context);  
139 - if(status!=0) {perror("libusb_init"); exit(-1);}  
140 - //fin inititialisation  
141 -  
142 - enum_periph(context); //énumération périphériques USB  
143 -  
144 - //ouverture du périphérique  
145 - //libusb_device_handle *handle;  
146 - int status_ouv=libusb_open(found,&handle);  
147 - if(status_ouv!=0){ perror("libusb_open"); exit(-1); } //status_ouv!=0 => erreur d'ouverture  
148 -  
149 - config_periph();  
150 -  
151 -  
152 -  
153 - /*fermeture du périphérique*/  
154 - libusb_close(handle);  
155 -  
156 - libusb_exit(context); //fermeture de la bibliothèque  
157 - return 0;  
158 -}  
159 \ No newline at end of file 0 \ No newline at end of file