libusb.h revision 227404
1194676Sthompsa/* $FreeBSD: head/lib/libusb/libusb.h 227404 2011-11-09 19:03:26Z hselasky $ */
2194676Sthompsa/*-
3194676Sthompsa * Copyright (c) 2009 Sylvestre Gallon. All rights reserved.
4194676Sthompsa *
5194676Sthompsa * Redistribution and use in source and binary forms, with or without
6194676Sthompsa * modification, are permitted provided that the following conditions
7194676Sthompsa * are met:
8194676Sthompsa * 1. Redistributions of source code must retain the above copyright
9194676Sthompsa *    notice, this list of conditions and the following disclaimer.
10194676Sthompsa * 2. Redistributions in binary form must reproduce the above copyright
11194676Sthompsa *    notice, this list of conditions and the following disclaimer in the
12194676Sthompsa *    documentation and/or other materials provided with the distribution.
13194676Sthompsa *
14194676Sthompsa * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15194676Sthompsa * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16194676Sthompsa * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17194676Sthompsa * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18194676Sthompsa * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19194676Sthompsa * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20194676Sthompsa * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21194676Sthompsa * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22194676Sthompsa * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23194676Sthompsa * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24194676Sthompsa * SUCH DAMAGE.
25194676Sthompsa */
26194676Sthompsa
27194676Sthompsa#ifndef __LIBUSB_H__
28194676Sthompsa#define	__LIBUSB_H__
29194676Sthompsa
30195560Sthompsa#include <sys/time.h>
31195560Sthompsa#include <sys/types.h>
32195560Sthompsa
33194676Sthompsa#ifdef __cplusplus
34194676Sthompsaextern	"C" {
35194676Sthompsa#endif
36194676Sthompsa#if 0
37194676Sthompsa}					/* indent fix */
38194676Sthompsa
39194676Sthompsa#endif
40194676Sthompsa
41194676Sthompsa/* libusb enums */
42194676Sthompsa
43194676Sthompsaenum libusb_class_code {
44194676Sthompsa	LIBUSB_CLASS_PER_INTERFACE = 0,
45194676Sthompsa	LIBUSB_CLASS_AUDIO = 1,
46194676Sthompsa	LIBUSB_CLASS_COMM = 2,
47194676Sthompsa	LIBUSB_CLASS_HID = 3,
48194676Sthompsa	LIBUSB_CLASS_PTP = 6,
49194676Sthompsa	LIBUSB_CLASS_PRINTER = 7,
50194676Sthompsa	LIBUSB_CLASS_MASS_STORAGE = 8,
51194676Sthompsa	LIBUSB_CLASS_HUB = 9,
52194676Sthompsa	LIBUSB_CLASS_DATA = 10,
53194676Sthompsa	LIBUSB_CLASS_VENDOR_SPEC = 0xff,
54194676Sthompsa};
55194676Sthompsa
56194676Sthompsaenum libusb_descriptor_type {
57194676Sthompsa	LIBUSB_DT_DEVICE = 0x01,
58194676Sthompsa	LIBUSB_DT_CONFIG = 0x02,
59194676Sthompsa	LIBUSB_DT_STRING = 0x03,
60194676Sthompsa	LIBUSB_DT_INTERFACE = 0x04,
61194676Sthompsa	LIBUSB_DT_ENDPOINT = 0x05,
62194676Sthompsa	LIBUSB_DT_HID = 0x21,
63194676Sthompsa	LIBUSB_DT_REPORT = 0x22,
64194676Sthompsa	LIBUSB_DT_PHYSICAL = 0x23,
65194676Sthompsa	LIBUSB_DT_HUB = 0x29,
66227404Shselasky	LIBUSB_DT_BOS = 0x0f,
67227404Shselasky	LIBUSB_DT_DEVICE_CAPABILITY = 0x10,
68227404Shselasky	LIBUSB_DT_SS_ENDPOINT_COMPANION = 0x30,
69194676Sthompsa};
70194676Sthompsa
71227404Shselaskyenum libusb_device_capability_type {
72227404Shselasky	LIBUSB_WIRELESS_USB_DEVICE_CAPABILITY = 0x1,
73227404Shselasky	LIBUSB_USB_2_0_EXTENSION_DEVICE_CAPABILITY = 0x2,
74227404Shselasky	LIBUSB_SS_USB_DEVICE_CAPABILITY = 0x3,
75227404Shselasky	LIBUSB_CONTAINER_ID_DEVICE_CAPABILITY = 0x4,
76227404Shselasky};
77227404Shselasky
78194676Sthompsa#define	LIBUSB_DT_DEVICE_SIZE		18
79194676Sthompsa#define	LIBUSB_DT_CONFIG_SIZE		9
80194676Sthompsa#define	LIBUSB_DT_INTERFACE_SIZE	9
81194676Sthompsa#define	LIBUSB_DT_ENDPOINT_SIZE		7
82194676Sthompsa#define	LIBUSB_DT_ENDPOINT_AUDIO_SIZE	9
83194676Sthompsa#define	LIBUSB_DT_HUB_NONVAR_SIZE	7
84227404Shselasky#define	LIBUSB_DT_SS_ENDPOINT_COMPANION_SIZE	6
85227404Shselasky#define	LIBUSB_DT_BOS_SIZE		5
86227404Shselasky#define	LIBUSB_USB_2_0_EXTENSION_DEVICE_CAPABILITY_SIZE	7
87227404Shselasky#define	LIBUSB_SS_USB_DEVICE_CAPABILITY_SIZE	10
88194676Sthompsa
89194676Sthompsa#define	LIBUSB_ENDPOINT_ADDRESS_MASK	0x0f
90194676Sthompsa#define	LIBUSB_ENDPOINT_DIR_MASK	0x80
91194676Sthompsa
92194676Sthompsaenum libusb_endpoint_direction {
93194676Sthompsa	LIBUSB_ENDPOINT_IN = 0x80,
94194676Sthompsa	LIBUSB_ENDPOINT_OUT = 0x00,
95194676Sthompsa};
96194676Sthompsa
97194676Sthompsa#define	LIBUSB_TRANSFER_TYPE_MASK	0x03
98194676Sthompsa
99194676Sthompsaenum libusb_transfer_type {
100194676Sthompsa	LIBUSB_TRANSFER_TYPE_CONTROL = 0,
101194676Sthompsa	LIBUSB_TRANSFER_TYPE_ISOCHRONOUS = 1,
102194676Sthompsa	LIBUSB_TRANSFER_TYPE_BULK = 2,
103194676Sthompsa	LIBUSB_TRANSFER_TYPE_INTERRUPT = 3,
104194676Sthompsa};
105194676Sthompsa
106194676Sthompsaenum libusb_standard_request {
107194676Sthompsa	LIBUSB_REQUEST_GET_STATUS = 0x00,
108194676Sthompsa	LIBUSB_REQUEST_CLEAR_FEATURE = 0x01,
109194676Sthompsa	LIBUSB_REQUEST_SET_FEATURE = 0x03,
110194676Sthompsa	LIBUSB_REQUEST_SET_ADDRESS = 0x05,
111194676Sthompsa	LIBUSB_REQUEST_GET_DESCRIPTOR = 0x06,
112194676Sthompsa	LIBUSB_REQUEST_SET_DESCRIPTOR = 0x07,
113194676Sthompsa	LIBUSB_REQUEST_GET_CONFIGURATION = 0x08,
114194676Sthompsa	LIBUSB_REQUEST_SET_CONFIGURATION = 0x09,
115194676Sthompsa	LIBUSB_REQUEST_GET_INTERFACE = 0x0A,
116194676Sthompsa	LIBUSB_REQUEST_SET_INTERFACE = 0x0B,
117194676Sthompsa	LIBUSB_REQUEST_SYNCH_FRAME = 0x0C,
118194676Sthompsa};
119194676Sthompsa
120194676Sthompsaenum libusb_request_type {
121194676Sthompsa	LIBUSB_REQUEST_TYPE_STANDARD = (0x00 << 5),
122194676Sthompsa	LIBUSB_REQUEST_TYPE_CLASS = (0x01 << 5),
123194676Sthompsa	LIBUSB_REQUEST_TYPE_VENDOR = (0x02 << 5),
124194676Sthompsa	LIBUSB_REQUEST_TYPE_RESERVED = (0x03 << 5),
125194676Sthompsa};
126194676Sthompsa
127194676Sthompsaenum libusb_request_recipient {
128194676Sthompsa	LIBUSB_RECIPIENT_DEVICE = 0x00,
129194676Sthompsa	LIBUSB_RECIPIENT_INTERFACE = 0x01,
130194676Sthompsa	LIBUSB_RECIPIENT_ENDPOINT = 0x02,
131194676Sthompsa	LIBUSB_RECIPIENT_OTHER = 0x03,
132194676Sthompsa};
133194676Sthompsa
134194676Sthompsa#define	LIBUSB_ISO_SYNC_TYPE_MASK	0x0C
135194676Sthompsa
136194676Sthompsaenum libusb_iso_sync_type {
137194676Sthompsa	LIBUSB_ISO_SYNC_TYPE_NONE = 0,
138194676Sthompsa	LIBUSB_ISO_SYNC_TYPE_ASYNC = 1,
139194676Sthompsa	LIBUSB_ISO_SYNC_TYPE_ADAPTIVE = 2,
140194676Sthompsa	LIBUSB_ISO_SYNC_TYPE_SYNC = 3,
141194676Sthompsa};
142194676Sthompsa
143194676Sthompsa#define	LIBUSB_ISO_USAGE_TYPE_MASK 0x30
144194676Sthompsa
145194676Sthompsaenum libusb_iso_usage_type {
146194676Sthompsa	LIBUSB_ISO_USAGE_TYPE_DATA = 0,
147194676Sthompsa	LIBUSB_ISO_USAGE_TYPE_FEEDBACK = 1,
148194676Sthompsa	LIBUSB_ISO_USAGE_TYPE_IMPLICIT = 2,
149194676Sthompsa};
150194676Sthompsa
151194676Sthompsaenum libusb_error {
152194676Sthompsa	LIBUSB_SUCCESS = 0,
153194676Sthompsa	LIBUSB_ERROR_IO = -1,
154194676Sthompsa	LIBUSB_ERROR_INVALID_PARAM = -2,
155194676Sthompsa	LIBUSB_ERROR_ACCESS = -3,
156194676Sthompsa	LIBUSB_ERROR_NO_DEVICE = -4,
157194676Sthompsa	LIBUSB_ERROR_NOT_FOUND = -5,
158194676Sthompsa	LIBUSB_ERROR_BUSY = -6,
159194676Sthompsa	LIBUSB_ERROR_TIMEOUT = -7,
160194676Sthompsa	LIBUSB_ERROR_OVERFLOW = -8,
161194676Sthompsa	LIBUSB_ERROR_PIPE = -9,
162194676Sthompsa	LIBUSB_ERROR_INTERRUPTED = -10,
163194676Sthompsa	LIBUSB_ERROR_NO_MEM = -11,
164194676Sthompsa	LIBUSB_ERROR_NOT_SUPPORTED = -12,
165194676Sthompsa	LIBUSB_ERROR_OTHER = -99,
166194676Sthompsa};
167194676Sthompsa
168224903Shselaskyenum libusb_speed {
169224903Shselasky	LIBUSB_SPEED_UNKNOWN = 0,
170224903Shselasky	LIBUSB_SPEED_LOW = 1,
171224903Shselasky	LIBUSB_SPEED_FULL = 2,
172224903Shselasky	LIBUSB_SPEED_HIGH = 3,
173224903Shselasky	LIBUSB_SPEED_SUPER = 4,
174224903Shselasky};
175224903Shselasky
176194676Sthompsaenum libusb_transfer_status {
177194676Sthompsa	LIBUSB_TRANSFER_COMPLETED,
178194676Sthompsa	LIBUSB_TRANSFER_ERROR,
179194676Sthompsa	LIBUSB_TRANSFER_TIMED_OUT,
180194676Sthompsa	LIBUSB_TRANSFER_CANCELLED,
181194676Sthompsa	LIBUSB_TRANSFER_STALL,
182194676Sthompsa	LIBUSB_TRANSFER_NO_DEVICE,
183194676Sthompsa	LIBUSB_TRANSFER_OVERFLOW,
184194676Sthompsa};
185194676Sthompsa
186194676Sthompsaenum libusb_transfer_flags {
187194676Sthompsa	LIBUSB_TRANSFER_SHORT_NOT_OK = 1 << 0,
188194676Sthompsa	LIBUSB_TRANSFER_FREE_BUFFER = 1 << 1,
189194676Sthompsa	LIBUSB_TRANSFER_FREE_TRANSFER = 1 << 2,
190194676Sthompsa};
191194676Sthompsa
192194676Sthompsaenum libusb_debug_level {
193194676Sthompsa	LIBUSB_DEBUG_NO=0,
194194676Sthompsa	LIBUSB_DEBUG_FUNCTION=1,
195194676Sthompsa	LIBUSB_DEBUG_TRANSFER=2,
196194676Sthompsa};
197194676Sthompsa
198195957Salfred/* libusb structures */
199195560Sthompsa
200195957Salfredstruct libusb_context;
201195957Salfredstruct libusb_device;
202195957Salfredstruct libusb_transfer;
203208020Sthompsastruct libusb_device_handle;
204195957Salfred
205195957Salfredstruct libusb_pollfd {
206195560Sthompsa	int	fd;
207195560Sthompsa	short	events;
208195560Sthompsa};
209195560Sthompsa
210195957Salfredtypedef struct libusb_context libusb_context;
211195957Salfredtypedef struct libusb_device libusb_device;
212208020Sthompsatypedef struct libusb_device_handle libusb_device_handle;
213195957Salfredtypedef struct libusb_pollfd libusb_pollfd;
214194676Sthompsatypedef void (*libusb_pollfd_added_cb) (int fd, short events, void *user_data);
215194676Sthompsatypedef void (*libusb_pollfd_removed_cb) (int fd, void *user_data);
216194676Sthompsa
217194676Sthompsatypedef struct libusb_device_descriptor {
218194676Sthompsa	uint8_t	bLength;
219194676Sthompsa	uint8_t	bDescriptorType;
220194676Sthompsa	uint16_t bcdUSB;
221194676Sthompsa	uint8_t	bDeviceClass;
222194676Sthompsa	uint8_t	bDeviceSubClass;
223194676Sthompsa	uint8_t	bDeviceProtocol;
224194676Sthompsa	uint8_t	bMaxPacketSize0;
225194676Sthompsa	uint16_t idVendor;
226194676Sthompsa	uint16_t idProduct;
227194676Sthompsa	uint16_t bcdDevice;
228194676Sthompsa	uint8_t	iManufacturer;
229194676Sthompsa	uint8_t	iProduct;
230194676Sthompsa	uint8_t	iSerialNumber;
231194676Sthompsa	uint8_t	bNumConfigurations;
232194676Sthompsa}	libusb_device_descriptor;
233194676Sthompsa
234194676Sthompsatypedef struct libusb_endpoint_descriptor {
235194676Sthompsa	uint8_t	bLength;
236194676Sthompsa	uint8_t	bDescriptorType;
237194676Sthompsa	uint8_t	bEndpointAddress;
238194676Sthompsa	uint8_t	bmAttributes;
239194676Sthompsa	uint16_t wMaxPacketSize;
240194676Sthompsa	uint8_t	bInterval;
241194676Sthompsa	uint8_t	bRefresh;
242194676Sthompsa	uint8_t	bSynchAddress;
243195957Salfred	uint8_t *extra;
244194676Sthompsa	int	extra_length;
245194676Sthompsa}	libusb_endpoint_descriptor __aligned(sizeof(void *));
246194676Sthompsa
247227404Shselaskytypedef struct libusb_ss_endpoint_companion_descriptor {
248227404Shselasky	uint8_t bLength;
249227404Shselasky	uint8_t bDescriptorType;
250227404Shselasky	uint8_t bMaxBurst;
251227404Shselasky	uint8_t bmAttributes;
252227404Shselasky	uint16_t wBytesPerInterval;
253227404Shselasky}	libusb_ss_endpoint_companion_descriptor __aligned(sizeof(void *));
254227404Shselasky
255194676Sthompsatypedef struct libusb_interface_descriptor {
256194676Sthompsa	uint8_t	bLength;
257194676Sthompsa	uint8_t	bDescriptorType;
258194676Sthompsa	uint8_t	bInterfaceNumber;
259194676Sthompsa	uint8_t	bAlternateSetting;
260194676Sthompsa	uint8_t	bNumEndpoints;
261194676Sthompsa	uint8_t	bInterfaceClass;
262194676Sthompsa	uint8_t	bInterfaceSubClass;
263194676Sthompsa	uint8_t	bInterfaceProtocol;
264194676Sthompsa	uint8_t	iInterface;
265194676Sthompsa	struct libusb_endpoint_descriptor *endpoint;
266195957Salfred	uint8_t *extra;
267194676Sthompsa	int	extra_length;
268194676Sthompsa}	libusb_interface_descriptor __aligned(sizeof(void *));
269194676Sthompsa
270194676Sthompsatypedef struct libusb_interface {
271194676Sthompsa	struct libusb_interface_descriptor *altsetting;
272194676Sthompsa	int	num_altsetting;
273194676Sthompsa}	libusb_interface __aligned(sizeof(void *));
274194676Sthompsa
275194676Sthompsatypedef struct libusb_config_descriptor {
276194676Sthompsa	uint8_t	bLength;
277194676Sthompsa	uint8_t	bDescriptorType;
278194676Sthompsa	uint16_t wTotalLength;
279194676Sthompsa	uint8_t	bNumInterfaces;
280194676Sthompsa	uint8_t	bConfigurationValue;
281194676Sthompsa	uint8_t	iConfiguration;
282194676Sthompsa	uint8_t	bmAttributes;
283194676Sthompsa	uint8_t	MaxPower;
284194676Sthompsa	struct libusb_interface *interface;
285195957Salfred	uint8_t *extra;
286194676Sthompsa	int	extra_length;
287194676Sthompsa}	libusb_config_descriptor __aligned(sizeof(void *));
288194676Sthompsa
289227404Shselaskytypedef struct libusb_usb_2_0_device_capability_descriptor {
290227404Shselasky	uint8_t bLength;
291227404Shselasky	uint8_t bDescriptorType;
292227404Shselasky	uint8_t bDevCapabilityType;
293227404Shselasky	uint32_t bmAttributes;
294227404Shselasky#define LIBUSB_USB_2_0_CAPABILITY_LPM_SUPPORT  (1 << 1)
295227404Shselasky}	libusb_usb_2_0_device_capability_descriptor __aligned(sizeof(void *));
296227404Shselasky
297227404Shselaskytypedef struct libusb_ss_usb_device_capability_descriptor {
298227404Shselasky	uint8_t bLength;
299227404Shselasky	uint8_t bDescriptorType;
300227404Shselasky	uint8_t bDevCapabilityType;
301227404Shselasky	uint8_t bmAttributes;
302227404Shselasky#define LIBUSB_SS_USB_CAPABILITY_LPM_SUPPORT   (1 << 1)
303227404Shselasky	uint16_t wSpeedSupported;
304227404Shselasky#define LIBUSB_CAPABILITY_LOW_SPEED_OPERATION  (1)
305227404Shselasky#define LIBUSB_CAPABILITY_FULL_SPEED_OPERATION (1 << 1)
306227404Shselasky#define LIBUSB_CAPABILITY_HIGH_SPEED_OPERATION (1 << 2)
307227404Shselasky#define LIBUSB_CAPABILITY_5GBPS_OPERATION      (1 << 3)
308227404Shselasky	uint8_t bFunctionalitySupport;
309227404Shselasky	uint8_t bU1DevExitLat;
310227404Shselasky	uint16_t wU2DevExitLat;
311227404Shselasky}	libusb_ss_usb_device_capability_descriptor __aligned(sizeof(void *));
312227404Shselasky
313227404Shselaskytypedef struct libusb_bos_descriptor {
314227404Shselasky	uint8_t bLength;
315227404Shselasky	uint8_t bDescriptorType;
316227404Shselasky	uint16_t wTotalLength;
317227404Shselasky	uint8_t bNumDeviceCapabilities;
318227404Shselasky	struct libusb_usb_2_0_device_capability_descriptor *usb_2_0_ext_cap;
319227404Shselasky	struct libusb_ss_usb_device_capability_descriptor *ss_usb_cap;
320227404Shselasky}	libusb_bos_descriptor __aligned(sizeof(void *));
321227404Shselasky
322194676Sthompsatypedef struct libusb_control_setup {
323194676Sthompsa	uint8_t	bmRequestType;
324194676Sthompsa	uint8_t	bRequest;
325194676Sthompsa	uint16_t wValue;
326194676Sthompsa	uint16_t wIndex;
327194676Sthompsa	uint16_t wLength;
328194676Sthompsa}	libusb_control_setup;
329194676Sthompsa
330199055Sthompsa#define	LIBUSB_CONTROL_SETUP_SIZE	8	/* bytes */
331199055Sthompsa
332194676Sthompsatypedef struct libusb_iso_packet_descriptor {
333199055Sthompsa	uint32_t length;
334199055Sthompsa	uint32_t actual_length;
335194676Sthompsa	enum libusb_transfer_status status;
336194676Sthompsa}	libusb_iso_packet_descriptor __aligned(sizeof(void *));
337194676Sthompsa
338194676Sthompsatypedef void (*libusb_transfer_cb_fn) (struct libusb_transfer *transfer);
339194676Sthompsa
340194676Sthompsatypedef struct libusb_transfer {
341194676Sthompsa	libusb_device_handle *dev_handle;
342194676Sthompsa	uint8_t	flags;
343199055Sthompsa	uint32_t endpoint;
344195957Salfred	uint8_t type;
345199055Sthompsa	uint32_t timeout;
346194676Sthompsa	enum libusb_transfer_status status;
347194676Sthompsa	int	length;
348194676Sthompsa	int	actual_length;
349194676Sthompsa	libusb_transfer_cb_fn callback;
350194676Sthompsa	void   *user_data;
351195957Salfred	uint8_t *buffer;
352194676Sthompsa	void *os_priv;
353194676Sthompsa	int	num_iso_packets;
354194676Sthompsa	struct libusb_iso_packet_descriptor iso_packet_desc[0];
355194676Sthompsa}	libusb_transfer __aligned(sizeof(void *));
356194676Sthompsa
357194676Sthompsa/* Library initialisation */
358194676Sthompsa
359194676Sthompsavoid	libusb_set_debug(libusb_context * ctx, int level);
360213853Shselaskyconst char *libusb_strerror(int code);
361225659Shselaskyconst char *libusb_error_name(int code);
362194676Sthompsaint	libusb_init(libusb_context ** context);
363194676Sthompsavoid	libusb_exit(struct libusb_context *ctx);
364194676Sthompsa
365194676Sthompsa/* Device handling and enumeration */
366194676Sthompsa
367194676Sthompsassize_t libusb_get_device_list(libusb_context * ctx, libusb_device *** list);
368194676Sthompsavoid	libusb_free_device_list(libusb_device ** list, int unref_devices);
369194676Sthompsauint8_t	libusb_get_bus_number(libusb_device * dev);
370194676Sthompsauint8_t	libusb_get_device_address(libusb_device * dev);
371224903Shselaskyenum libusb_speed libusb_get_device_speed(libusb_device * dev);
372195957Salfredint	libusb_clear_halt(libusb_device_handle *devh, uint8_t endpoint);
373195957Salfredint	libusb_get_max_packet_size(libusb_device * dev, uint8_t endpoint);
374194676Sthompsalibusb_device *libusb_ref_device(libusb_device * dev);
375194676Sthompsavoid	libusb_unref_device(libusb_device * dev);
376194676Sthompsaint	libusb_open(libusb_device * dev, libusb_device_handle ** devh);
377194676Sthompsalibusb_device_handle *libusb_open_device_with_vid_pid(libusb_context * ctx, uint16_t vendor_id, uint16_t product_id);
378194676Sthompsavoid	libusb_close(libusb_device_handle * devh);
379194676Sthompsalibusb_device *libusb_get_device(libusb_device_handle * devh);
380194676Sthompsaint	libusb_get_configuration(libusb_device_handle * devh, int *config);
381194676Sthompsaint	libusb_set_configuration(libusb_device_handle * devh, int configuration);
382194676Sthompsaint	libusb_claim_interface(libusb_device_handle * devh, int interface_number);
383194676Sthompsaint	libusb_release_interface(libusb_device_handle * devh, int interface_number);
384199055Sthompsaint	libusb_reset_device(libusb_device_handle * devh);
385213848Shselaskyint	libusb_check_connected(libusb_device_handle * devh);
386194676Sthompsaint 	libusb_kernel_driver_active(libusb_device_handle * devh, int interface);
387213853Shselaskyint	libusb_get_driver_np(libusb_device_handle * devh, int interface, char *name, int namelen);
388213853Shselaskyint	libusb_get_driver(libusb_device_handle * devh, int interface, char *name, int namelen);
389213853Shselaskyint 	libusb_detach_kernel_driver_np(libusb_device_handle * devh, int interface);
390194676Sthompsaint 	libusb_detach_kernel_driver(libusb_device_handle * devh, int interface);
391194676Sthompsaint 	libusb_attach_kernel_driver(libusb_device_handle * devh, int interface);
392194676Sthompsaint	libusb_set_interface_alt_setting(libusb_device_handle * devh, int interface_number, int alternate_setting);
393194676Sthompsa
394194676Sthompsa/* USB Descriptors */
395194676Sthompsa
396194676Sthompsaint	libusb_get_device_descriptor(libusb_device * dev, struct libusb_device_descriptor *desc);
397194676Sthompsaint	libusb_get_active_config_descriptor(libusb_device * dev, struct libusb_config_descriptor **config);
398194676Sthompsaint	libusb_get_config_descriptor(libusb_device * dev, uint8_t config_index, struct libusb_config_descriptor **config);
399194676Sthompsaint	libusb_get_config_descriptor_by_value(libusb_device * dev, uint8_t bConfigurationValue, struct libusb_config_descriptor **config);
400194676Sthompsavoid	libusb_free_config_descriptor(struct libusb_config_descriptor *config);
401199055Sthompsaint	libusb_get_string_descriptor_ascii(libusb_device_handle * devh, uint8_t desc_index, uint8_t *data, int length);
402199055Sthompsaint	libusb_get_descriptor(libusb_device_handle * devh, uint8_t desc_type, uint8_t desc_index, uint8_t *data, int length);
403227404Shselaskyint	libusb_parse_ss_endpoint_comp(const void *buf, int len, struct libusb_ss_endpoint_companion_descriptor **ep_comp);
404227404Shselaskyvoid	libusb_free_ss_endpoint_comp(struct libusb_ss_endpoint_companion_descriptor *ep_comp);
405227404Shselaskyint	libusb_parse_bos_descriptor(const void *buf, int len, struct libusb_bos_descriptor **bos);
406227404Shselaskyvoid	libusb_free_bos_descriptor(struct libusb_bos_descriptor *bos);
407194676Sthompsa
408195957Salfred/* Asynchronous device I/O */
409194676Sthompsa
410194676Sthompsastruct libusb_transfer *libusb_alloc_transfer(int iso_packets);
411194676Sthompsavoid	libusb_free_transfer(struct libusb_transfer *transfer);
412194676Sthompsaint	libusb_submit_transfer(struct libusb_transfer *transfer);
413194676Sthompsaint	libusb_cancel_transfer(struct libusb_transfer *transfer);
414199055Sthompsauint8_t *libusb_get_iso_packet_buffer(struct libusb_transfer *transfer, uint32_t index);
415199055Sthompsauint8_t *libusb_get_iso_packet_buffer_simple(struct libusb_transfer *transfer, uint32_t index);
416199055Sthompsavoid	libusb_set_iso_packet_lengths(struct libusb_transfer *transfer, uint32_t length);
417199055Sthompsauint8_t *libusb_control_transfer_get_data(struct libusb_transfer *transfer);
418199055Sthompsastruct libusb_control_setup *libusb_control_transfer_get_setup(struct libusb_transfer *transfer);
419199055Sthompsavoid	libusb_fill_control_setup(uint8_t *buf, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint16_t wLength);
420199055Sthompsavoid	libusb_fill_control_transfer(struct libusb_transfer *transfer, libusb_device_handle *devh, uint8_t *buf, libusb_transfer_cb_fn callback, void *user_data, uint32_t timeout);
421199055Sthompsavoid	libusb_fill_bulk_transfer(struct libusb_transfer *transfer, libusb_device_handle *devh, uint8_t endpoint, uint8_t *buf, int length, libusb_transfer_cb_fn callback, void *user_data, uint32_t timeout);
422199055Sthompsavoid	libusb_fill_interrupt_transfer(struct libusb_transfer *transfer, libusb_device_handle *devh, uint8_t endpoint, uint8_t *buf, int length, libusb_transfer_cb_fn callback, void *user_data, uint32_t timeout);
423199055Sthompsavoid	libusb_fill_iso_transfer(struct libusb_transfer *transfer, libusb_device_handle *devh, uint8_t endpoint, uint8_t *buf, int length, int npacket, libusb_transfer_cb_fn callback, void *user_data, uint32_t timeout);
424194676Sthompsa
425194676Sthompsa/* Polling and timing */
426194676Sthompsa
427194676Sthompsaint	libusb_try_lock_events(libusb_context * ctx);
428194676Sthompsavoid	libusb_lock_events(libusb_context * ctx);
429194676Sthompsavoid	libusb_unlock_events(libusb_context * ctx);
430194676Sthompsaint	libusb_event_handling_ok(libusb_context * ctx);
431194676Sthompsaint	libusb_event_handler_active(libusb_context * ctx);
432194676Sthompsavoid	libusb_lock_event_waiters(libusb_context * ctx);
433194676Sthompsavoid	libusb_unlock_event_waiters(libusb_context * ctx);
434194676Sthompsaint	libusb_wait_for_event(libusb_context * ctx, struct timeval *tv);
435194676Sthompsaint	libusb_handle_events_timeout(libusb_context * ctx, struct timeval *tv);
436194676Sthompsaint	libusb_handle_events(libusb_context * ctx);
437194676Sthompsaint	libusb_handle_events_locked(libusb_context * ctx, struct timeval *tv);
438194676Sthompsaint	libusb_get_next_timeout(libusb_context * ctx, struct timeval *tv);
439194676Sthompsavoid	libusb_set_pollfd_notifiers(libusb_context * ctx, libusb_pollfd_added_cb added_cb, libusb_pollfd_removed_cb removed_cb, void *user_data);
440194676Sthompsastruct libusb_pollfd **libusb_get_pollfds(libusb_context * ctx);
441194676Sthompsa
442194676Sthompsa/* Synchronous device I/O */
443194676Sthompsa
444199055Sthompsaint	libusb_control_transfer(libusb_device_handle * devh, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint8_t *data, uint16_t wLength, uint32_t timeout);
445199055Sthompsaint	libusb_bulk_transfer(libusb_device_handle * devh, uint8_t endpoint, uint8_t *data, int length, int *transferred, uint32_t timeout);
446199055Sthompsaint	libusb_interrupt_transfer(libusb_device_handle * devh, uint8_t endpoint, uint8_t *data, int length, int *transferred, uint32_t timeout);
447194676Sthompsa
448199055Sthompsa/* Byte-order */
449199055Sthompsa
450199055Sthompsauint16_t libusb_cpu_to_le16(uint16_t x);
451199055Sthompsauint16_t libusb_le16_to_cpu(uint16_t x);
452199055Sthompsa
453194676Sthompsa#if 0
454194676Sthompsa{					/* indent fix */
455194676Sthompsa#endif
456194676Sthompsa#ifdef __cplusplus
457194676Sthompsa}
458194676Sthompsa
459194676Sthompsa#endif
460194676Sthompsa
461194676Sthompsa#endif					/* __LIBUSB_H__ */
462