Commit 1561dad82c1932aca80edb15abe2395b933b525c
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 | -} |