Commit 16cfb9bfffdfe55056fae745e4afa9b59acec1a6
1 parent
56d9dc54
fix, oublis git rm
Showing
6 changed files
with
0 additions
and
542 deletions
Show diff stats
.gitignore deleted
Makefile deleted
... | ... | @@ -1,56 +0,0 @@ |
1 | -BIN = bin | |
2 | -OBJ = obj | |
3 | -SRC = src | |
4 | -INCLUDE = include | |
5 | -CFLAGS = | |
6 | -CLIBS = -lusb-1.0 -I"C:\Program Files\zLib\libusb-1.0.23\include" | |
7 | -#sur le Windows d'Axel : | |
8 | -#CLIBS := ${CLIBS} -B"C:\Program Files\zLib\libusb-1.0.23\MinGW32\static" | |
9 | -GNUMAKEFLAGS = --no-print-directory | |
10 | - | |
11 | -gcc = gcc | |
12 | -#sur le Windows d'Axel : | |
13 | -#gcc := "/mnt/c/Program Files (x86)/mingw-w64/i686-8.1.0-posix-dwarf-rt_v6-rev0/mingw32/bin/gcc.exe" | |
14 | - | |
15 | - | |
16 | -DEBUG?=0 | |
17 | -ifeq ($(DEBUG), 0) | |
18 | - CFLAGS = -W -Wall | |
19 | -else | |
20 | - CFLAGS = -W -Wall -g -O0 -DDEBUG | |
21 | -endif | |
22 | - | |
23 | - | |
24 | - | |
25 | -all : main | |
26 | - | |
27 | - | |
28 | -version : | |
29 | - ${gcc} -v | |
30 | - | |
31 | -main : bin libusb_wrapper ${SRC}/main.c | |
32 | - ${gcc} -o ${OBJ}/$@.o -c ${SRC}/$@.c -I ${INCLUDE} ${CLIBS} ${CFLAGS} | |
33 | - ${gcc} -o ${BIN}/$@.exe ${OBJ}/main.o ${OBJ}/libusb_wrapper.o ${CFLAGS} ${CLIBS} | |
34 | - | |
35 | -demostep : main | |
36 | - ${BIN}/main.exe demo4.1 | |
37 | - | |
38 | -libs: libusb_wrapper | |
39 | - | |
40 | -libusb_wrapper: obj ${SRC}/libusb_wrapper.c ${INCLUDE}/libusb_wrapper.h | |
41 | - ${gcc} -o ${OBJ}/$@.o -c ${SRC}/$@.c -I ${INCLUDE} ${CLIBS} ${CFLAGS} | |
42 | - | |
43 | - | |
44 | - | |
45 | -obj : | |
46 | - @-mkdir ${OBJ} | |
47 | - | |
48 | -bin : | |
49 | - @-mkdir ${BIN} | |
50 | - | |
51 | -clean : | |
52 | - rm -rf obj/*.o | |
53 | - | |
54 | -mrproper: clean | |
55 | - rm -rf bin | |
56 | - rm -rf obj |
hexToDec.sh deleted
include/libusb_wrapper.h deleted
... | ... | @@ -1,35 +0,0 @@ |
1 | -#ifndef LIBUSB_WRAPPER_H_ | |
2 | -#define LIBUSB_WRAPPER_H_ | |
3 | - | |
4 | -#include <libusb-1.0/libusb.h> | |
5 | -#include <stdbool.h> | |
6 | -#include <stdio.h> | |
7 | -#include <stdlib.h> | |
8 | - | |
9 | -void usbinit(libusb_context **context_ptr); | |
10 | -void usbclose(libusb_context *context); | |
11 | - | |
12 | -void interfaceclaim(libusb_device_handle *handle, | |
13 | - struct libusb_interface *interface); | |
14 | -void interfaceclose(libusb_device_handle *handle, | |
15 | - struct libusb_interface *interface); | |
16 | - | |
17 | -ssize_t getListDevices(libusb_context *context, libusb_device ***list_ptr); | |
18 | -void getFromKernel(libusb_device_handle *handle, int interface); | |
19 | - | |
20 | -void displayDevices(libusb_context *context); | |
21 | -void displayDevicesMore(libusb_context *context); | |
22 | - | |
23 | -void getFirstDeviceFromID(libusb_context *context, int vid, int pid, | |
24 | - libusb_device **device); | |
25 | - | |
26 | -void getOurInterfaces(libusb_device *device, | |
27 | - struct libusb_interface **int_hidjoy, | |
28 | - struct libusb_interface **int_leds, | |
29 | - struct libusb_interface **int_vibrators); | |
30 | - | |
31 | -void displayDeviceEndpoints(); | |
32 | - | |
33 | -char getOnlyEndpoint(struct libusb_interface *interface); | |
34 | - | |
35 | -#endif |
src/libusb_wrapper.c deleted
... | ... | @@ -1,307 +0,0 @@ |
1 | -#include "libusb_wrapper.h" | |
2 | - | |
3 | -void usbinit(libusb_context **context_ptr) { | |
4 | - // libusb_context *context; | |
5 | - int statusInit = libusb_init(context_ptr); | |
6 | - if (statusInit != LIBUSB_SUCCESS) { | |
7 | - perror("libusb_init"); | |
8 | - exit(-1); | |
9 | - } | |
10 | -} | |
11 | - | |
12 | -void usbclose(libusb_context *context) { libusb_exit(context); } | |
13 | - | |
14 | -void interfaceclaim(libusb_device_handle *handle, | |
15 | - struct libusb_interface *interface) { | |
16 | - const struct libusb_interface_descriptor *interface_desc = | |
17 | - &interface->altsetting[0]; // TODO enlever cette ligne, refactor | |
18 | - | |
19 | - if (interface_desc->bInterfaceClass == | |
20 | - LIBUSB_CLASS_VENDOR_SPEC) { // ON PEUT VERIFIER LA CLASS | |
21 | - printf("> vendor specific class\n"); | |
22 | - | |
23 | - int status = | |
24 | - libusb_claim_interface(handle, interface_desc->bInterfaceNumber); | |
25 | - if (status != 0) { | |
26 | - perror("libusb_claim_interface"); | |
27 | - exit(-1); | |
28 | - } | |
29 | - } | |
30 | -} | |
31 | - | |
32 | -void interfaceclose(libusb_device_handle *handle, | |
33 | - struct libusb_interface *interface) { | |
34 | - const struct libusb_interface_descriptor *interface_desc = | |
35 | - &interface->altsetting[0]; | |
36 | - int status = | |
37 | - libusb_release_interface(handle, interface_desc->bInterfaceNumber); | |
38 | - if (status != 0) { | |
39 | - perror("libusb_release_interface"); | |
40 | - exit(-1); | |
41 | - } | |
42 | -} | |
43 | - | |
44 | -// Si le méchant noyau est passé avant vous : | |
45 | -void getFromKernel(libusb_device_handle *handle, | |
46 | - int interface) { // private method for now | |
47 | - if (libusb_kernel_driver_active(handle, interface)) { | |
48 | - int statusKDriver = libusb_detach_kernel_driver(handle, interface); | |
49 | - if (statusKDriver != LIBUSB_SUCCESS) { | |
50 | - perror("libusb_detach_kernel_driver"); | |
51 | - exit(-1); | |
52 | - } | |
53 | - } | |
54 | -} | |
55 | - | |
56 | -ssize_t getListDevices(libusb_context *context, libusb_device ***list_ptr) { | |
57 | - ssize_t count = libusb_get_device_list(context, list_ptr); | |
58 | - if (count < 0) { | |
59 | - perror("libusb_get_device_list"); | |
60 | - exit(-1); | |
61 | - } | |
62 | - return count; | |
63 | -} | |
64 | - | |
65 | -void *_enumerateDevices(libusb_context *context, | |
66 | - void (*func)(libusb_device *device)) { | |
67 | - libusb_device **list; | |
68 | - ssize_t count = getListDevices(context, &list); | |
69 | - | |
70 | - ssize_t i = 0; | |
71 | - for (i = 0; i < count; i++) { | |
72 | - libusb_device *device = list[i]; | |
73 | - | |
74 | - func(device); | |
75 | - } | |
76 | - | |
77 | - libusb_free_device_list(list, 1); | |
78 | - | |
79 | - return NULL; // DBGONLY TEMP | |
80 | -} | |
81 | - | |
82 | -// print readable string, not asked for tutoring | |
83 | -void _printConfig(libusb_device *device) { // private method | |
84 | - // Ouverture du périphérique | |
85 | - libusb_device_handle *handle; | |
86 | - int statusDevice = libusb_open(device, &handle); | |
87 | - if (statusDevice != LIBUSB_SUCCESS) { | |
88 | - perror("libusb_open"); | |
89 | - // return; //exit(-1); | |
90 | - } | |
91 | - | |
92 | - int MAXLEN_DESCRIPTOR_STRING = 200; | |
93 | - uint8_t desc_idx = 2; | |
94 | - // uint16_t langid = 16; | |
95 | - unsigned char data[200]; | |
96 | - | |
97 | - // TEST 16 | |
98 | - for (desc_idx = 0; desc_idx < 16; desc_idx++) { | |
99 | - int statusAscii = libusb_get_string_descriptor_ascii( | |
100 | - handle, desc_idx, data, MAXLEN_DESCRIPTOR_STRING); | |
101 | - if (statusAscii == -9) // TEST seems to be LIBUSB_ERROR | |
102 | - break; | |
103 | - printf(" - Descriptor string : %s ; %i\n", data, statusAscii); | |
104 | - } | |
105 | - | |
106 | - libusb_close(handle); | |
107 | -} | |
108 | - | |
109 | -void _displayOneDevice(libusb_device *device) { | |
110 | - struct libusb_device_descriptor desc; | |
111 | - | |
112 | - int status = libusb_get_device_descriptor(device, &desc); | |
113 | - if (status != LIBUSB_SUCCESS) { | |
114 | - printf("Cannot get device desc : %s\n", | |
115 | - libusb_error_name(status)); // DBGONLY | |
116 | - perror("libusb_open"); | |
117 | - return; | |
118 | - } | |
119 | - | |
120 | - uint8_t bus = libusb_get_bus_number(device); | |
121 | - uint8_t address = libusb_get_device_address(device); | |
122 | - | |
123 | - printf("Device Found @ (Bus:Address) %d:%d\n", bus, address); | |
124 | - printf("Vendor ID 0x0%x\n", desc.idVendor); | |
125 | - printf("Product ID 0x0%x\n", desc.idProduct); | |
126 | - | |
127 | - // displayDeviceEndpoints(device); //Not really work on Axel@Alptop | |
128 | -} | |
129 | - | |
130 | -void displayDevices(libusb_context *context) { | |
131 | - _enumerateDevices(context, _displayOneDevice); | |
132 | -} | |
133 | - | |
134 | -void _displayOneDeviceMore(libusb_device *device) { | |
135 | - _displayOneDevice(device); | |
136 | - _printConfig(device); | |
137 | -} | |
138 | - | |
139 | -void displayDevicesMore(libusb_context *context) { | |
140 | - _enumerateDevices(context, _displayOneDeviceMore); | |
141 | -} | |
142 | - | |
143 | -// get device from iteration (and not from not recommanded function : | |
144 | -// ugly using global vars ?? Cannot communicate between getFirstDeviceFromID and | |
145 | -// _getFirstDeviceFromID | |
146 | -int g_vid; | |
147 | -int g_pid; | |
148 | -libusb_device *g_device = NULL; | |
149 | -void _getFirstDeviceFromID(libusb_device *device) { | |
150 | - struct libusb_device_descriptor desc; | |
151 | - | |
152 | - int status = libusb_get_device_descriptor(device, &desc); | |
153 | - if (status != LIBUSB_SUCCESS) { | |
154 | - printf("Cannot get device desc : %s\n", | |
155 | - libusb_error_name(status)); // DBGONLY | |
156 | - perror("libusb_open"); | |
157 | - return; | |
158 | - } | |
159 | - | |
160 | - if (desc.idVendor == g_vid && desc.idProduct == g_pid) { | |
161 | - g_device = device; | |
162 | - } | |
163 | -} | |
164 | - | |
165 | -void getFirstDeviceFromID(libusb_context *context, int vid, int pid, | |
166 | - libusb_device **device) { | |
167 | - g_vid = vid; // pass parameters for enumeration | |
168 | - g_pid = pid; // idem | |
169 | - _enumerateDevices(context, _getFirstDeviceFromID); | |
170 | - *device = g_device; // get return from enumeration | |
171 | -} | |
172 | - | |
173 | -// void getDevicesFromID(vid, pid) //return array | |
174 | - | |
175 | -void displayDeviceEndpoints(libusb_device_handle *handle) { | |
176 | - // recover pointer from handle | |
177 | - libusb_device *device; | |
178 | - device = libusb_get_device(handle); | |
179 | - | |
180 | - // lectures des configs => on prend la première configuration pour l'instant | |
181 | - /*int configuration = 0; // valueof("bConfigurationValue"); | |
182 | - int statusConfig = libusb_set_configuration(handle, configuration); | |
183 | - if (statusConfig != LIBUSB_SUCCESS) { | |
184 | - perror("libusb_set_configuration"); | |
185 | - return; | |
186 | - }*/ | |
187 | - | |
188 | - // 4.2 configuration du périph usb | |
189 | - struct libusb_config_descriptor *config; | |
190 | - int statusFetchConfig = libusb_get_active_config_descriptor(device, &config); | |
191 | - if (statusFetchConfig != LIBUSB_SUCCESS) { | |
192 | - perror("libusb_get_active_config_descriptor"); | |
193 | - return; | |
194 | - } | |
195 | - | |
196 | - // caractéristiques globales | |
197 | - printf("Config.bConfigurationValue : %d\n", config->bConfigurationValue); | |
198 | - printf("Config/ bLength:%d\nbDescriptorType:%d\nbNumInterfaces:%d\n", | |
199 | - config->bLength, config->bDescriptorType, config->bNumInterfaces); | |
200 | - | |
201 | - // itération des interfaces | |
202 | - printf("Itération de l'interface\n"); | |
203 | - for (int indexInterface = 0; indexInterface < config->bNumInterfaces; | |
204 | - indexInterface++) { | |
205 | - printf("-indexInterface=%d\n", indexInterface); | |
206 | - printf("-Altsetting=%d\n", | |
207 | - config->interface[indexInterface].num_altsetting); | |
208 | - | |
209 | - const struct libusb_interface *interface = | |
210 | - &config->interface[indexInterface]; | |
211 | - | |
212 | - // if 1 setting (or more) | |
213 | - if (interface->num_altsetting != 0) { | |
214 | - const struct libusb_interface_descriptor *interface_desc = | |
215 | - &interface->altsetting[0]; | |
216 | - | |
217 | - printf("--bNumEndpoints=%d\n", interface_desc->bNumEndpoints); | |
218 | - printf("--bDescriptorType=%d\n", interface_desc->bDescriptorType); | |
219 | - | |
220 | - for (int indexEndpoints = 0; | |
221 | - indexEndpoints < interface_desc->bNumEndpoints; indexEndpoints++) { | |
222 | - const struct libusb_endpoint_descriptor *endpoint_desc = | |
223 | - &interface_desc->endpoint[indexEndpoints]; | |
224 | - printf("---bDescriptorType=%d\n", endpoint_desc->bDescriptorType); | |
225 | - printf("---bEndpointAddress=%d\n", endpoint_desc->bEndpointAddress); | |
226 | - | |
227 | - if (endpoint_desc->extra != NULL) | |
228 | - printf("---extra: %s\n", endpoint_desc->extra); | |
229 | - if (endpoint_desc->bmAttributes == | |
230 | - LIBUSB_TRANSFER_TYPE_INTERRUPT) // TODO AJOUT MASQUE ? (voir doc) | |
231 | - printf("---is of type INTERRUPT\n"); | |
232 | - } | |
233 | - } | |
234 | - | |
235 | - // Affichez l’indice et le numéro de chaque interface détectée et réclamée. | |
236 | - // Affichez aussi les points d’accès trouvés en précisant ceux sauvés. | |
237 | - | |
238 | - /* | |
239 | - //int interface=valueof("bInterfaceNumber"); | |
240 | - int | |
241 | - status=libusb_claim_interface(handle,interface->bInterfaceNumber); | |
242 | - if(status!=0){ perror("libusb_claim_interface"); exit(-1); } | |
243 | - | |
244 | - status=libusb_release_interface(handle,interface->bInterfaceNumber); | |
245 | - if(status!=0){ perror("libusb_release_interface"); exit(-1); } | |
246 | - | |
247 | - //claim_interface(.., config interface altsetting bInterfaceNumber | |
248 | - //config interface altsetting endpoint bmAttributes == | |
249 | - LIBUSB_TRANSFER_TYPE_INTERRUPT | |
250 | - //add des enpoint unint8_t*/ | |
251 | - | |
252 | - // DESCRIPTOR.C /.H :décommenter | |
253 | - | |
254 | - // IL FAUT RELEASE UNIQUEMENT LES INTERFACES QUI NE SONT PAS DES HID | |
255 | - } | |
256 | - | |
257 | - printf("\n"); | |
258 | - | |
259 | - libusb_close(handle); | |
260 | -} | |
261 | - | |
262 | -void getOurInterfaces(libusb_device *device, | |
263 | - struct libusb_interface **int_hidjoy, | |
264 | - struct libusb_interface **int_leds, | |
265 | - struct libusb_interface **int_vibrators) { | |
266 | - struct libusb_config_descriptor *config; | |
267 | - int statusFetchConfig = libusb_get_active_config_descriptor(device, &config); | |
268 | - if (statusFetchConfig != LIBUSB_SUCCESS) { | |
269 | - perror("libusb_get_active_config_descriptor"); | |
270 | - return; | |
271 | - } | |
272 | - | |
273 | - // itération des interfaces | |
274 | - for (int indexInterface = 0; indexInterface < config->bNumInterfaces; | |
275 | - indexInterface++) { | |
276 | - | |
277 | - const struct libusb_interface *interface = | |
278 | - &config->interface[indexInterface]; | |
279 | - | |
280 | - // todo use le descriptor pour avoir bInterfaceNumber? | |
281 | - if (indexInterface == 0) { | |
282 | - *int_hidjoy = (struct libusb_interface *)interface; | |
283 | - } else if (indexInterface == 1) { | |
284 | - *int_leds = (struct libusb_interface *)interface; | |
285 | - } else if (indexInterface == 2) { | |
286 | - *int_vibrators = (struct libusb_interface *)interface; | |
287 | - } | |
288 | - | |
289 | - //#define pour les indices correspondants aux interfaces | |
290 | - // variables globales | |
291 | - } | |
292 | -} | |
293 | - | |
294 | -char getOnlyEndpoint(struct libusb_interface *interface) { | |
295 | - | |
296 | - const struct libusb_interface_descriptor *interface_desc = | |
297 | - &interface->altsetting[0]; | |
298 | - | |
299 | - const struct libusb_endpoint_descriptor *endpoint_desc = | |
300 | - &interface_desc->endpoint[0]; | |
301 | - | |
302 | - if (endpoint_desc->bmAttributes != | |
303 | - LIBUSB_TRANSFER_TYPE_INTERRUPT) // ON PEUT VERIFIER LE TRANSFER TYPE | |
304 | - printf("> is NOT of type INTERRUPT\n"); | |
305 | - | |
306 | - return (char)endpoint_desc->bEndpointAddress; | |
307 | -} |
src/main.c deleted
... | ... | @@ -1,132 +0,0 @@ |
1 | -#include "libusb_wrapper.h" | |
2 | -#include <stdio.h> | |
3 | -#include <string.h> | |
4 | - | |
5 | -#define VID 1003 | |
6 | -#define PID 8259 | |
7 | - | |
8 | -int main(int argc, char *argv[]) { | |
9 | - printf("Hello World :-|\n"); | |
10 | - | |
11 | - libusb_context *context; | |
12 | - usbinit(&context); | |
13 | -#ifdef DEBUG | |
14 | - libusb_set_option(context, LIBUSB_OPTION_LOG_LEVEL, LIBUSB_LOG_LEVEL_DEBUG); | |
15 | -#endif | |
16 | - | |
17 | - if (argc > 1) { | |
18 | - // command mode | |
19 | - if (strcmp(argv[1], "demo4.1") == 0) { // if 4.1 | |
20 | - printf("\e[91mDemo 4.1\e[39m\n"); | |
21 | - displayDevices(context); | |
22 | - } else if (strcmp(argv[1], "demo4.1plus") == 0) { // if 4.1 bonus | |
23 | - printf("\e[91mDemo 4.1\e[39m\n"); | |
24 | - displayDevicesMore(context); | |
25 | - } else if (strcmp(argv[1], "demo4.2") == 0) { // if 4.2 | |
26 | - printf("\e[91mDemo 4.2\e[39m\n"); | |
27 | - | |
28 | - if (argc > 3) { | |
29 | - uint16_t vendor_id; | |
30 | - uint16_t product_id; | |
31 | - sscanf(argv[2], "%hu", &vendor_id); | |
32 | - sscanf(argv[3], "%hu", &product_id); | |
33 | - | |
34 | - libusb_device_handle *handle; | |
35 | - handle = | |
36 | - libusb_open_device_with_vid_pid(context, vendor_id, product_id); | |
37 | - if (handle != NULL) { | |
38 | - printf("Show endpoints of VID:%hu;PID:%hu\n", vendor_id, product_id); | |
39 | - displayDeviceEndpoints(handle); | |
40 | - } else { | |
41 | - printf("Error while getting handle of VID:%hu;PID:%hu\n", vendor_id, | |
42 | - product_id); | |
43 | - } | |
44 | - } else { | |
45 | - printf("Error, need VID and PID\n"); | |
46 | - } | |
47 | - } else { | |
48 | - printf("Wrong command\n"); | |
49 | - } | |
50 | - | |
51 | - } else { | |
52 | - // interactive mode | |
53 | - printf("Welcome to interactive mode\n"); | |
54 | - printf("Compiled for VID:PID => %d:%d\n", VID, PID); | |
55 | - | |
56 | - // Find the device | |
57 | - printf("Iterate list of devices, and getting the right one\n"); | |
58 | - libusb_device *device = NULL; | |
59 | - getFirstDeviceFromID(context, VID, PID, &device); | |
60 | - // code | |
61 | - if (device == NULL) { | |
62 | - printf("Error : cannot find the device !\n"); | |
63 | - return 1; | |
64 | - } | |
65 | - | |
66 | - // take the handle | |
67 | - libusb_device_handle *device_handle = NULL; | |
68 | - if (libusb_open(device, &device_handle) != 0) { | |
69 | - printf("Error : cannot handle the device\n"); | |
70 | - return 1; | |
71 | - } | |
72 | - | |
73 | - // Take the interfaces | |
74 | - printf("\nSearch for interfaces\n"); | |
75 | - struct libusb_interface *int_hidjoy = NULL; | |
76 | - struct libusb_interface *int_leds = NULL; | |
77 | - struct libusb_interface *int_vibrators = NULL; | |
78 | - getOurInterfaces(device, &int_hidjoy, &int_leds, &int_vibrators); | |
79 | - | |
80 | - // Claim interface | |
81 | - printf("\nClaim interfaces ...\n"); | |
82 | - printf("-Leds\n"); | |
83 | - interfaceclaim(device_handle, int_leds); | |
84 | - printf("-Vibrators\n"); | |
85 | - interfaceclaim(device_handle, int_vibrators); | |
86 | - | |
87 | - // récupération des endpoints | |
88 | - printf("\nRécupération endpoints\n"); | |
89 | - printf("-Leds"); | |
90 | - int endpoint_leds = | |
91 | - getOnlyEndpoint(int_leds); /* ID of endpoint (bit 8 is 0) */ | |
92 | - printf(" is %d\n", endpoint_leds); | |
93 | - printf("-Vibrators"); | |
94 | - int endpoint_vibrators = | |
95 | - getOnlyEndpoint(int_vibrators); /* ID of endpoint (bit 8 is 0) */ | |
96 | - printf(" is %d\n", endpoint_vibrators); | |
97 | - | |
98 | - /*LE CODE UTILE*/ | |
99 | - int i; | |
100 | - for(i = 0 ; i<5 ; i++) { | |
101 | - unsigned char data[2] = {0xff, 0xff}; // data to send or to receive | |
102 | - int size = 2; // size to send or maximum size to receive | |
103 | - int timeout = 1000; // timeout in ms | |
104 | - | |
105 | - // OUT interrupt, from host to device | |
106 | - int bytes_out; | |
107 | - printf("%p %02X\n", device_handle, endpoint_leds); | |
108 | - int status = libusb_interrupt_transfer(device_handle, endpoint_leds, data, | |
109 | - size, &bytes_out, timeout); | |
110 | - if (status != 0) { | |
111 | - perror("libusb_interrupt_transfer"); | |
112 | - exit(-1); | |
113 | - } | |
114 | - | |
115 | - //sleep(1); demande l'ajout de macro pour la portabilité | |
116 | - } | |
117 | - /*FIN DU CODE UTILE*/ | |
118 | - | |
119 | - // Close | |
120 | - printf("\nUnclaim interfaces ...\n"); | |
121 | - printf("-Leds\n"); | |
122 | - interfaceclose(device_handle, int_leds); | |
123 | - printf("-Vibrators\n"); | |
124 | - interfaceclose(device_handle, int_vibrators); | |
125 | - | |
126 | - printf("Finished\n"); | |
127 | - } | |
128 | - | |
129 | - usbclose(context); | |
130 | - | |
131 | - return 0; | |
132 | -} |