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