Commit 864b2b8dd2c00ad2f31cc913c8c3eb29759fe4b0
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 | -#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 | 0 | \ No newline at end of file |