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