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