1#![allow(non_camel_case_types)]
2
3extern crate libc;
4
5use libc::{c_void, c_int, c_uint, c_char, c_uchar, c_short, ssize_t, timeval};
6
7
8#[repr(C)]
9pub struct libusb_context {
10 __private: c_void
11}
12
13#[repr(C)]
14pub struct libusb_device {
15 __private: c_void
16}
17
18#[repr(C)]
19pub struct libusb_device_handle {
20 __private: c_void
21}
22
23#[repr(C)]
24pub struct libusb_version {
25 pub major: u16,
26 pub minor: u16,
27 pub micro: u16,
28 pub nano: u16,
29 pub rc: *const c_char,
30 pub describe: *const c_char,
31}
32
33#[allow(non_snake_case)]
34#[repr(C)]
35pub struct libusb_device_descriptor {
36 pub bLength: u8,
37 pub bDescriptorType: u8,
38 pub bcdUSB: u16,
39 pub bDeviceClass: u8,
40 pub bDeviceSubClass: u8,
41 pub bDeviceProtocol: u8,
42 pub bMaxPacketSize0: u8,
43 pub idVendor: u16,
44 pub idProduct: u16,
45 pub bcdDevice: u16,
46 pub iManufacturer: u8,
47 pub iProduct: u8,
48 pub iSerialNumber: u8,
49 pub bNumConfigurations: u8,
50}
51
52#[allow(non_snake_case)]
53#[repr(C)]
54pub struct libusb_config_descriptor {
55 pub bLength: u8,
56 pub bDescriptorType: u8,
57 pub wTotalLength: u16,
58 pub bNumInterfaces: u8,
59 pub bConfigurationValue: u8,
60 pub iConfiguration: u8,
61 pub bmAttributes: u8,
62 pub bMaxPower: u8,
63 pub interface: *const libusb_interface,
64 pub extra: *const c_uchar,
65 pub extra_length: c_int,
66}
67
68#[repr(C)]
69pub struct libusb_interface {
70 pub altsetting: *const libusb_interface_descriptor,
71 pub num_altsetting: c_int,
72}
73
74#[allow(non_snake_case)]
75#[repr(C)]
76pub struct libusb_interface_descriptor {
77 pub bLength: u8,
78 pub bDescriptorType: u8,
79 pub bInterfaceNumber: u8,
80 pub bAlternateSetting: u8,
81 pub bNumEndpoints: u8,
82 pub bInterfaceClass: u8,
83 pub bInterfaceSubClass: u8,
84 pub bInterfaceProtocol: u8,
85 pub iInterface: u8,
86 pub endpoint: *const libusb_endpoint_descriptor,
87 pub extra: *const c_uchar,
88 pub extra_length: c_int,
89}
90
91#[allow(non_snake_case)]
92#[repr(C)]
93pub struct libusb_endpoint_descriptor {
94 pub bLength: u8,
95 pub bDescriptorType: u8,
96 pub bEndpointAddress: u8,
97 pub bmAttributes: u8,
98 pub wMaxPacketSize: u16,
99 pub bInterval: u8,
100 pub bRefresh: u8,
101 pub bSynchAddress: u8,
102 pub extra: *const c_uchar,
103 pub extra_length: c_int,
104}
105
106#[repr(C)]
107pub struct libusb_iso_packet_descriptor {
108 pub length: c_uint,
109 pub actual_length: c_uint,
110 pub status: c_int,
111}
112
113#[allow(non_snake_case)]
114#[repr(C)]
115pub struct libusb_ss_endpoint_companion_descriptor {
116 pub bLength: u8,
117 pub bDescriptorType: u8,
118 pub bMaxBurst: u8,
119 pub bmAttributes: u8,
120 pub wBytesPerInterval: u16,
121}
122
123#[allow(non_snake_case)]
124#[repr(C)]
125pub struct libusb_bos_dev_capability_descriptor {
126 pub bLength: u8,
127 pub bDescriptorType: u8,
128 pub bDevCapabilityType: u8,
129}
130
131#[allow(non_snake_case)]
132#[repr(C)]
133pub struct libusb_bos_descriptor {
134 pub bLength: u8,
135 pub bDescriptorType: u8,
136 pub wTotalLength: u16,
137 pub bNumDeviceCaps: u8,
138}
139
140#[allow(non_snake_case)]
141#[repr(C)]
142pub struct libusb_usb_2_0_extension_descriptor {
143 pub bLength: u8,
144 pub bDescriptorType: u8,
145 pub bDevCapabilityType: u8,
146 pub bmAttributes: u32,
147}
148
149#[allow(non_snake_case)]
150#[repr(C)]
151pub struct libusb_ss_usb_device_capability_descriptor {
152 pub bLength: u8,
153 pub bDescriptorType: u8,
154 pub bDevCapabilityType: u8,
155 pub bmAttributes: u8,
156 pub wSpeedSupported: u16,
157 pub bFunctionalitySupport: u8,
158 pub bU1DevExitLat: u8,
159 pub bU2DevExitLat: u8,
160}
161
162#[allow(non_snake_case)]
163#[repr(C)]
164pub struct libusb_container_id_descriptor {
165 pub bLength: u8,
166 pub bDescriptorType: u8,
167 pub bDevCapabilityType: u8,
168 pub bReserved: u8,
169 pub ContainerId: [u8; 16],
170}
171
172#[repr(C)]
173pub struct libusb_transfer {
174 pub dev_handle: *mut libusb_device_handle,
175 pub flags: u8,
176 pub endpoint: c_uchar,
177 pub transfer_type: c_uchar,
178 pub timeout: c_uint,
179 pub status: c_int,
180 pub length: c_int,
181 pub actual_length: c_int,
182 pub callback: libusb_transfer_cb_fn,
183 pub user_data: *mut c_void,
184 pub buffer: *mut c_uchar,
185 pub num_iso_packets: c_int,
186 pub iso_packet_desc: [libusb_iso_packet_descriptor; 0],
187}
188
189#[repr(C)]
190pub struct libusb_pollfd {
191 pub fd: c_int,
192 pub events: c_short,
193}
194
195pub type libusb_transfer_cb_fn = extern "C" fn(*mut libusb_transfer);
196pub type libusb_pollfd_added_cb = extern "C" fn(c_int, c_short, *mut c_void);
197pub type libusb_pollfd_removed_cb = extern "C" fn(c_int, *mut c_void);
198
199pub const LIBUSB_SUCCESS: c_int = 0;
201pub const LIBUSB_ERROR_IO: c_int = -1;
202pub const LIBUSB_ERROR_INVALID_PARAM: c_int = -2;
203pub const LIBUSB_ERROR_ACCESS: c_int = -3;
204pub const LIBUSB_ERROR_NO_DEVICE: c_int = -4;
205pub const LIBUSB_ERROR_NOT_FOUND: c_int = -5;
206pub const LIBUSB_ERROR_BUSY: c_int = -6;
207pub const LIBUSB_ERROR_TIMEOUT: c_int = -7;
208pub const LIBUSB_ERROR_OVERFLOW: c_int = -8;
209pub const LIBUSB_ERROR_PIPE: c_int = -9;
210pub const LIBUSB_ERROR_INTERRUPTED: c_int = -10;
211pub const LIBUSB_ERROR_NO_MEM: c_int = -11;
212pub const LIBUSB_ERROR_NOT_SUPPORTED: c_int = -12;
213pub const LIBUSB_ERROR_OTHER: c_int = -99;
214
215pub const LIBUSB_TRANSFER_COMPLETED: c_int = 0;
217pub const LIBUSB_TRANSFER_ERROR: c_int = 1;
218pub const LIBUSB_TRANSFER_TIMED_OUT: c_int = 2;
219pub const LIBUSB_TRANSFER_CANCELLED: c_int = 3;
220pub const LIBUSB_TRANSFER_STALL: c_int = 4;
221pub const LIBUSB_TRANSFER_NO_DEVICE: c_int = 5;
222pub const LIBUSB_TRANSFER_OVERFLOW: c_int = 6;
223
224pub const LIBUSB_TRANSFER_SHORT_NOT_OK: u8 = 1<<0;
225pub const LIBUSB_TRANSFER_FREE_BUFFER : u8 = 1<<1;
226pub const LIBUSB_TRANSFER_FREE_TRANSFER : u8 = 1<<2;
227pub const LIBUSB_TRANSFER_ADD_ZERO_PACKET: u8 = 1<<3;
228
229pub const LIBUSB_CAP_HAS_CAPABILITY: u32 = 0x0000;
231pub const LIBUSB_CAP_HAS_HOTPLUG: u32 = 0x0001;
232pub const LIBUSB_CAP_HAS_HID_ACCESS: u32 = 0x0100;
233pub const LIBUSB_CAP_SUPPORTS_DETACH_KERNEL_DRIVER: u32 = 0x0101;
234
235
236pub const LIBUSB_LOG_LEVEL_NONE: c_int = 0;
238pub const LIBUSB_LOG_LEVEL_ERROR: c_int = 1;
239pub const LIBUSB_LOG_LEVEL_WARNING: c_int = 2;
240pub const LIBUSB_LOG_LEVEL_INFO: c_int = 3;
241pub const LIBUSB_LOG_LEVEL_DEBUG: c_int = 4;
242
243
244pub const LIBUSB_CLASS_PER_INTERFACE: u8 = 0;
246pub const LIBUSB_CLASS_AUDIO: u8 = 1;
247pub const LIBUSB_CLASS_COMM: u8 = 2;
248pub const LIBUSB_CLASS_HID: u8 = 3;
249pub const LIBUSB_CLASS_PHYSICAL: u8 = 5;
250pub const LIBUSB_CLASS_PRINTER: u8 = 7;
251pub const LIBUSB_CLASS_IMAGE: u8 = 6;
252pub const LIBUSB_CLASS_MASS_STORAGE: u8 = 8;
253pub const LIBUSB_CLASS_HUB: u8 = 9;
254pub const LIBUSB_CLASS_DATA: u8 = 10;
255pub const LIBUSB_CLASS_SMART_CARD: u8 = 0x0B;
256pub const LIBUSB_CLASS_CONTENT_SECURITY: u8 = 0x0D;
257pub const LIBUSB_CLASS_VIDEO: u8 = 0x0E;
258pub const LIBUSB_CLASS_PERSONAL_HEALTHCARE: u8 = 0x0F;
259pub const LIBUSB_CLASS_DIAGNOSTIC_DEVICE: u8 = 0xDC;
260pub const LIBUSB_CLASS_WIRELESS: u8 = 0xE0;
261pub const LIBUSB_CLASS_APPLICATION: u8 = 0xFE;
262pub const LIBUSB_CLASS_VENDOR_SPEC: u8 = 0xFF;
263
264
265pub const LIBUSB_SPEED_UNKNOWN: c_int = 0;
267pub const LIBUSB_SPEED_LOW: c_int = 1;
268pub const LIBUSB_SPEED_FULL: c_int = 2;
269pub const LIBUSB_SPEED_HIGH: c_int = 3;
270pub const LIBUSB_SPEED_SUPER: c_int = 4;
271
272
273pub const LIBUSB_DT_DEVICE: u8 = 0x01;
275pub const LIBUSB_DT_CONFIG: u8 = 0x02;
276pub const LIBUSB_DT_STRING: u8 = 0x03;
277pub const LIBUSB_DT_INTERFACE: u8 = 0x04;
278pub const LIBUSB_DT_ENDPOINT: u8 = 0x05;
279pub const LIBUSB_DT_BOS: u8 = 0x0F;
280pub const LIBUSB_DT_DEVICE_CAPABILITY: u8 = 0x10;
281pub const LIBUSB_DT_HID: u8 = 0x21;
282pub const LIBUSB_DT_REPORT: u8 = 0x22;
283pub const LIBUSB_DT_PHYSICAL: u8 = 0x23;
284pub const LIBUSB_DT_HUB: u8 = 0x29;
285pub const LIBUSB_DT_SUPERSPEED_HUB: u8 = 0x2A;
286pub const LIBUSB_DT_SS_ENDPOINT_COMPANION: u8 = 0x30;
287
288
289pub const LIBUSB_ENDPOINT_ADDRESS_MASK: u8 = 0x0F;
291pub const LIBUSB_ENDPOINT_DIR_MASK: u8 = 0x80;
292pub const LIBUSB_ENDPOINT_IN: u8 = 0x80;
293pub const LIBUSB_ENDPOINT_OUT: u8 = 0x00;
294
295
296pub const LIBUSB_TRANSFER_TYPE_MASK: u8 = 0x03;
298pub const LIBUSB_TRANSFER_TYPE_CONTROL: u8 = 0;
299pub const LIBUSB_TRANSFER_TYPE_ISOCHRONOUS: u8 = 1;
300pub const LIBUSB_TRANSFER_TYPE_BULK: u8 = 2;
301pub const LIBUSB_TRANSFER_TYPE_INTERRUPT: u8 = 3;
302pub const LIBUSB_TRANSFER_TYPE_BULK_STREAM: u8 = 4;
303
304
305pub const LIBUSB_ISO_SYNC_TYPE_MASK: u8 = 0x0C;
307pub const LIBUSB_ISO_SYNC_TYPE_NONE: u8 = 0;
308pub const LIBUSB_ISO_SYNC_TYPE_ASYNC: u8 = 1;
309pub const LIBUSB_ISO_SYNC_TYPE_ADAPTIVE: u8 = 2;
310pub const LIBUSB_ISO_SYNC_TYPE_SYNC: u8 = 3;
311
312
313pub const LIBUSB_ISO_USAGE_TYPE_MASK: u8 = 0x30;
315pub const LIBUSB_ISO_USAGE_TYPE_DATA: u8 = 0;
316pub const LIBUSB_ISO_USAGE_TYPE_FEEDBACK: u8 = 1;
317pub const LIBUSB_ISO_USAGE_TYPE_IMPLICIT: u8 = 2;
318
319
320pub const LIBUSB_REQUEST_TYPE_STANDARD: u8 = 0x00 << 5;
322pub const LIBUSB_REQUEST_TYPE_CLASS: u8 = 0x01 << 5;
323pub const LIBUSB_REQUEST_TYPE_VENDOR: u8 = 0x02 << 5;
324pub const LIBUSB_REQUEST_TYPE_RESERVED: u8 = 0x03 << 5;
325
326
327pub const LIBUSB_RECIPIENT_DEVICE: u8 = 0x00;
329pub const LIBUSB_RECIPIENT_INTERFACE: u8 = 0x01;
330pub const LIBUSB_RECIPIENT_ENDPOINT: u8 = 0x02;
331pub const LIBUSB_RECIPIENT_OTHER: u8 = 0x03;
332
333
334pub const LIBUSB_REQUEST_GET_STATUS: u8 = 0x00;
336pub const LIBUSB_REQUEST_CLEAR_FEATURE: u8 = 0x01;
337pub const LIBUSB_REQUEST_SET_FEATURE: u8 = 0x03;
338pub const LIBUSB_REQUEST_SET_ADDRESS: u8 = 0x05;
339pub const LIBUSB_REQUEST_GET_DESCRIPTOR: u8 = 0x06;
340pub const LIBUSB_REQUEST_SET_DESCRIPTOR: u8 = 0x07;
341pub const LIBUSB_REQUEST_GET_CONFIGURATION: u8 = 0x08;
342pub const LIBUSB_REQUEST_SET_CONFIGURATION: u8 = 0x09;
343pub const LIBUSB_REQUEST_GET_INTERFACE: u8 = 0x0A;
344pub const LIBUSB_REQUEST_SET_INTERFACE: u8 = 0x0B;
345pub const LIBUSB_REQUEST_SYNCH_FRAME: u8 = 0x0C;
346pub const LIBUSB_REQUEST_SET_SEL: u8 = 0x30;
347pub const LIBUSB_SET_ISOCH_DELAY: u8 = 0x31;
348
349
350extern "C" {
351 pub fn libusb_get_version() -> *const libusb_version;
352 pub fn libusb_has_capability(capability: u32) -> c_int;
353 pub fn libusb_error_name(errcode: c_int) -> *const c_char;
354 pub fn libusb_setlocale(locale: *const c_char) -> c_int;
355 pub fn libusb_strerror(errcode: c_int) -> *const c_char;
356
357 pub fn libusb_init(context: *mut *mut libusb_context) -> c_int;
358 pub fn libusb_exit(context: *mut libusb_context);
359 pub fn libusb_set_debug(context: *mut libusb_context, level: c_int);
360
361 pub fn libusb_get_device_list(context: *mut libusb_context, list: *mut *const *mut libusb_device) -> ssize_t;
362 pub fn libusb_free_device_list(list: *const *mut libusb_device, unref_devices: c_int);
363 pub fn libusb_get_parent(dev: *mut libusb_device) -> *mut libusb_device;
364 pub fn libusb_get_device(dev_handle: *mut libusb_device_handle) -> *mut libusb_device;
365
366 pub fn libusb_ref_device(dev: *mut libusb_device) -> *mut libusb_device;
367 pub fn libusb_unref_device(dev: *mut libusb_device);
368
369 pub fn libusb_get_device_descriptor(dev: *const libusb_device, desc: *mut libusb_device_descriptor) -> c_int;
370 pub fn libusb_get_config_descriptor(dev: *const libusb_device, index: u8, config: *mut *const libusb_config_descriptor) -> c_int;
371 pub fn libusb_get_active_config_descriptor(dev: *const libusb_device, config: *mut *const libusb_config_descriptor) -> c_int;
372 pub fn libusb_get_config_descriptor_by_value(dev: *const libusb_device, bConfigurationValue: u8, config: *mut *const libusb_config_descriptor) -> c_int;
373 pub fn libusb_free_config_descriptor(config: *const libusb_config_descriptor);
374
375 pub fn libusb_get_bus_number(dev: *const libusb_device) -> u8;
376 pub fn libusb_get_port_number(dev: *mut libusb_device) -> u8;
377 pub fn libusb_get_port_numbers(dev: *mut libusb_device, port_numbers: *mut u8, port_numbers_len: c_int) -> c_int;
378 pub fn libusb_get_device_address(dev: *const libusb_device) -> u8;
379 pub fn libusb_get_device_speed(dev: *const libusb_device) -> c_int;
380 pub fn libusb_get_max_packet_size(dev: *const libusb_device, endpoint: c_uchar) -> c_int;
381 pub fn libusb_get_max_iso_packet_size(dev: *const libusb_device, endpoint: c_uchar) -> c_int;
382
383 pub fn libusb_open(dev: *const libusb_device, handle: *mut *mut libusb_device_handle) -> c_int;
384 pub fn libusb_close(dev_handle: *mut libusb_device_handle);
385 pub fn libusb_open_device_with_vid_pid(context: *mut libusb_context, vendor_id: u16, product_id: u16) -> *mut libusb_device_handle;
386 pub fn libusb_reset_device(dev_handle: *mut libusb_device_handle) -> c_int;
387 pub fn libusb_clear_halt(dev_handle: *mut libusb_device_handle, endpoint: c_uchar) -> c_int;
388 pub fn libusb_alloc_streams(dev_handle: *mut libusb_device_handle, num_streams: u32, endpoints: *mut c_uchar, num_endpoints: c_int) -> c_int;
389 pub fn libusb_free_streams(dev_handle: *mut libusb_device_handle, endpoints: *mut c_uchar, num_endpoints: c_int) -> c_int;
390 pub fn libusb_get_string_descriptor_ascii(dev_handle: *mut libusb_device_handle, desc_index: u8, data: *mut c_uchar, length: c_int) -> c_int;
391
392 pub fn libusb_get_configuration(dev_handle: *mut libusb_device_handle, config: *mut c_int) -> c_int;
393 pub fn libusb_set_configuration(dev_handle: *mut libusb_device_handle, config: c_int) -> c_int;
394
395 pub fn libusb_get_ss_endpoint_companion_descriptor(context: *mut libusb_context, endpoint: *const libusb_endpoint_descriptor, ep_comp: *mut *const libusb_ss_endpoint_companion_descriptor) -> c_int;
396 pub fn libusb_free_ss_endpoint_companion_descriptor(ep_comp: *mut libusb_ss_endpoint_companion_descriptor);
397 pub fn libusb_get_bos_descriptor(dev_handle: *mut libusb_device_handle, bos: *mut *const libusb_bos_descriptor) -> c_int;
398 pub fn libusb_free_bos_descriptor(bos: *mut libusb_bos_descriptor);
399 pub fn libusb_get_usb_2_0_extension_descriptor(context: *mut libusb_context, dev_cap: *mut libusb_bos_dev_capability_descriptor, usb_2_0_extension: *mut *const libusb_usb_2_0_extension_descriptor) -> c_int;
400 pub fn libusb_free_usb_2_0_extension_descriptor(usb_2_0_extension: *mut libusb_usb_2_0_extension_descriptor);
401 pub fn libusb_get_ss_usb_device_capability_descriptor(context: *mut libusb_context, dev_cap: *mut libusb_bos_dev_capability_descriptor, ss_usb_device_cap: *mut *const libusb_ss_usb_device_capability_descriptor) -> c_int;
402 pub fn libusb_free_ss_usb_device_capability_descriptor(ss_usb_device_cap: *mut libusb_ss_usb_device_capability_descriptor);
403 pub fn libusb_get_container_id_descriptor(context: *mut libusb_context, dev_cap: *mut libusb_bos_dev_capability_descriptor, container_id: *mut *const libusb_container_id_descriptor) -> c_int;
404 pub fn libusb_free_container_id_descriptor(container_id: *mut libusb_container_id_descriptor);
405
406 pub fn libusb_set_auto_detach_kernel_driver(dev_handle: *mut libusb_device_handle, enable: c_int) -> c_int;
407 pub fn libusb_kernel_driver_active(dev_handle: *mut libusb_device_handle, interface_number: c_int) -> c_int;
408 pub fn libusb_detach_kernel_driver(dev_handle: *mut libusb_device_handle, interface_number: c_int) -> c_int;
409 pub fn libusb_attach_kernel_driver(dev_handle: *mut libusb_device_handle, interface_number: c_int) -> c_int;
410
411 pub fn libusb_claim_interface(dev_handle: *mut libusb_device_handle, interface_number: c_int) -> c_int;
412 pub fn libusb_release_interface(dev_handle: *mut libusb_device_handle, interface_number: c_int) -> c_int;
413 pub fn libusb_set_interface_alt_setting(dev_handle: *mut libusb_device_handle, interface_number: c_int, alternate_setting: c_int) -> c_int;
414
415 pub fn libusb_interrupt_transfer(dev_handle: *mut libusb_device_handle, endpoint: c_uchar, data: *mut c_uchar, length: c_int, transferred: *mut c_int, timeout: c_uint) -> c_int;
416 pub fn libusb_bulk_transfer(dev_handle: *mut libusb_device_handle, endpoint: c_uchar, data: *mut c_uchar, length: c_int, transferred: *mut c_int, timeout: c_uint) -> c_int;
417 pub fn libusb_control_transfer(dev_handle: *mut libusb_device_handle, request_type: u8, request: u8, value: u16, index: u16, data: *mut c_uchar, length: u16, timeout: c_uint) -> c_int;
418
419 pub fn libusb_alloc_transfer(iso_packets: c_int) -> *mut libusb_transfer;
420 pub fn libusb_submit_transfer(transfer: *mut libusb_transfer) -> c_int;
421 pub fn libusb_cancel_transfer(transfer: *mut libusb_transfer) -> c_int;
422 pub fn libusb_free_transfer(transfer: *mut libusb_transfer);
423 pub fn libusb_transfer_set_stream_id(transfer: *mut libusb_transfer, stream_id: u32);
424 pub fn libusb_transfer_get_stream_id(transfer: *mut libusb_transfer) -> u32;
425
426 pub fn libusb_handle_events(context: *mut libusb_context) -> c_int;
427 pub fn libusb_handle_events_timeout(context: *mut libusb_context, tv: *const timeval) -> c_int;
428 pub fn libusb_handle_events_completed(context: *mut libusb_context, completed: *mut c_int) -> c_int;
429 pub fn libusb_handle_events_timeout_completed(context: *mut libusb_context, tv: *const timeval, completed: *mut c_int) -> c_int;
430 pub fn libusb_handle_events_locked(context: *mut libusb_context, tv: *const timeval) -> c_int;
431
432 pub fn libusb_try_lock_events(context: *mut libusb_context) -> c_int;
433 pub fn libusb_lock_events(context: *mut libusb_context);
434 pub fn libusb_unlock_events(context: *mut libusb_context);
435 pub fn libusb_event_handling_ok(context: *mut libusb_context) -> c_int;
436 pub fn libusb_event_handler_active(context: *mut libusb_context) -> c_int;
437 pub fn libusb_lock_event_waiters(context: *mut libusb_context);
438 pub fn libusb_unlock_event_waiters(context: *mut libusb_context);
439 pub fn libusb_wait_for_event(context: *mut libusb_context, tv: *const timeval) -> c_int;
440
441 pub fn libusb_pollfds_handle_timeouts(context: *mut libusb_context) -> c_int;
442 pub fn libusb_get_next_timeout(context: *mut libusb_context, tv: *mut timeval) -> c_int;
443 pub fn libusb_get_pollfds(context: *mut libusb_context) -> *const *mut libusb_pollfd;
444 pub fn libusb_set_pollfd_notifiers(context: *mut libusb_context, added_cb: libusb_pollfd_added_cb, removed_cb: libusb_pollfd_removed_cb, user_data: *mut c_void);
445}
446
447
448pub unsafe fn libusb_get_string_descriptor(dev_handle: *mut libusb_device_handle, desc_index: u8, langid: u16, data: *mut c_uchar, length: c_int) -> c_int
450{
451 libusb_control_transfer(dev_handle, LIBUSB_ENDPOINT_IN, LIBUSB_REQUEST_GET_DESCRIPTOR, (LIBUSB_DT_STRING as u16) << 8 | desc_index as u16, langid, data, length as u16, 1000)
452}