Commit 1561dad82c1932aca80edb15abe2395b933b525c

Authored by rguillom
1 parent fe51ebfb

Plus besoin (parti dans /LUFA/PAD)

Showing 1 changed file with 0 additions and 147 deletions   Show diff stats
init_USB.c deleted
@@ -1,147 +0,0 @@ @@ -1,147 +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 == 0x413c && desc.idProduct == 0x2003) 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 - for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){  
59 -  
60 - //Si le méchant noyau est passé avant nous  
61 - int interface; //on récupère tous les numéros des alt_settings numéro 0 => for et détach  
62 -  
63 - interface=config->interface[num_intf].altsetting[0].bInterfaceNumber;  
64 -  
65 - // on detache cette interface  
66 - if(libusb_kernel_driver_active(handle,interface)){  
67 - int status=libusb_detach_kernel_driver(handle,interface);  
68 - if(status!=0){ perror("libusb_detach_kernel_driver"); exit(-1); } //si status!=0 il y a une erreur  
69 - }  
70 - printf("indice intf trouvée %d\n",interface);  
71 - }  
72 -  
73 -  
74 - //Utilisation d'une configuration du périphérique  
75 - int configuration=config->bConfigurationValue;  
76 - int status=libusb_set_configuration(handle,configuration);  
77 - if(status!=0){ perror("libusb_set_configuration"); exit(-1); }  
78 -  
79 - //Appropriation d'une interface (fonctionnalité USB)  
80 - status=libusb_claim_interface(handle,interface);  
81 - if(status!=0){ perror("libusb_claim_interface"); exit(-1); } //si status!=0 il y a une erreur  
82 -  
83 - printf("indice interface claim %d",interface);  
84 -  
85 -  
86 - //Sauvegarde des points d'accès  
87 - for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){  
88 - for(num_ep=0;num_ep<config->interface[num_intf].altsetting[0].bNumEndpoints ;num_ep++){  
89 - int eptype = config->interface[num_intf].altsetting[0].endpoint.bDescriptorType;  
90 - if(eptype & 0b11==LIBUSB_TRANSFER_TYPE_INTERRUPT){ //sauvegarde dans tab_pa du point d'accès qui est une interruption  
91 - struct EP ep1;  
92 -  
93 - //LAISSER TOMBER INPUT OUTPUT  
94 - ep1.ep=config->interface[num_intf].altsetting[0].endpoint.bEndpointAddress;  
95 - if (num_intf==0){  
96 - if (eptype & 0b10000000 == LIBUSB_ENDPOINT_OUT){  
97 - tab_pa.tableau[num_intf].ep=ep1.ep;  
98 - tab_pa.tableau[num_intf].io=1;  
99 - tab_pa.dernier++;  
100 - break;  
101 - } //sortie => io=1  
102 - }  
103 - else{  
104 - if (eptype & 0b10000000 == LIBUSB_ENDPOINT_IN) {  
105 - tab_pa.tableau[num_intf].ep=ep1.ep;  
106 - tab_pa.tableau[num_intf].io=0;  
107 - tab_pa.dernier++;  
108 - if (num_ep >2)break;//entrée => io=0  
109 - }  
110 - }  
111 - }  
112 - }  
113 - if (num_intf = 3) break;  
114 - }  
115 -  
116 - //release des interfaces  
117 - for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){  
118 - status=libusb_release_interface(handle,interface);  
119 - if(status!=0){ perror("libusb_release_interface"); exit(-1); }  
120 -  
121 - }  
122 -}  
123 -  
124 -int main(){  
125 - init_tableau(); // initialisation tableau point d'accès endpoint  
126 - //initialisation de la bibliothèque libusb-1.0  
127 - libusb_context *context;  
128 - int status=libusb_init(&context);  
129 - if(status!=0) {perror("libusb_init"); exit(-1);}  
130 - //fin inititialisation  
131 -  
132 - enum_periph(context); //énumération périphériques USB  
133 -  
134 - //ouverture du périphérique  
135 - //libusb_device_handle *handle;  
136 - int status_ouv=libusb_open(found,&handle);  
137 - if(status_ouv!=0){ perror("libusb_open"); exit(-1); } //status_ouv!=0 => erreur d'ouverture  
138 -  
139 -  
140 -  
141 -  
142 - /*fermeture du périphérique*/  
143 - libusb_close(handle);  
144 -  
145 - libusb_exit(context); //fermeture de la bibliothèque  
146 - return 0;  
147 -}