xref: /dflybsd-src/lib/libusb/usb.h (revision 9b0c1abe99cfd7e619068968896b466f0d1d6f69)
1*9b0c1abeSSascha Wildner /* $FreeBSD: head/lib/libusb/usb.h 248236 2013-03-13 12:23:14Z hselasky $ */
21d96047eSMarkus Pfeiffer /*-
31d96047eSMarkus Pfeiffer  * Copyright (c) 2008 Hans Petter Selasky. All rights reserved.
41d96047eSMarkus Pfeiffer  *
51d96047eSMarkus Pfeiffer  * Redistribution and use in source and binary forms, with or without
61d96047eSMarkus Pfeiffer  * modification, are permitted provided that the following conditions
71d96047eSMarkus Pfeiffer  * are met:
81d96047eSMarkus Pfeiffer  * 1. Redistributions of source code must retain the above copyright
91d96047eSMarkus Pfeiffer  *    notice, this list of conditions and the following disclaimer.
101d96047eSMarkus Pfeiffer  * 2. Redistributions in binary form must reproduce the above copyright
111d96047eSMarkus Pfeiffer  *    notice, this list of conditions and the following disclaimer in the
121d96047eSMarkus Pfeiffer  *    documentation and/or other materials provided with the distribution.
131d96047eSMarkus Pfeiffer  *
141d96047eSMarkus Pfeiffer  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
151d96047eSMarkus Pfeiffer  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
161d96047eSMarkus Pfeiffer  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
171d96047eSMarkus Pfeiffer  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
181d96047eSMarkus Pfeiffer  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
191d96047eSMarkus Pfeiffer  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
201d96047eSMarkus Pfeiffer  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
211d96047eSMarkus Pfeiffer  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
221d96047eSMarkus Pfeiffer  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
231d96047eSMarkus Pfeiffer  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
241d96047eSMarkus Pfeiffer  * SUCH DAMAGE.
251d96047eSMarkus Pfeiffer  */
261d96047eSMarkus Pfeiffer 
271d96047eSMarkus Pfeiffer #ifndef _LIBUSB20_COMPAT_01_H_
281d96047eSMarkus Pfeiffer #define	_LIBUSB20_COMPAT_01_H_
291d96047eSMarkus Pfeiffer 
30*9b0c1abeSSascha Wildner #ifndef LIBUSB_GLOBAL_INCLUDE_FILE
31*9b0c1abeSSascha Wildner #include <stdint.h>
321d96047eSMarkus Pfeiffer #include <sys/param.h>
331d96047eSMarkus Pfeiffer #include <sys/endian.h>
34*9b0c1abeSSascha Wildner #endif
351d96047eSMarkus Pfeiffer 
361d96047eSMarkus Pfeiffer /* USB interface class codes */
371d96047eSMarkus Pfeiffer 
381d96047eSMarkus Pfeiffer #define	USB_CLASS_PER_INTERFACE         0
391d96047eSMarkus Pfeiffer #define	USB_CLASS_AUDIO                 1
401d96047eSMarkus Pfeiffer #define	USB_CLASS_COMM                  2
411d96047eSMarkus Pfeiffer #define	USB_CLASS_HID                   3
421d96047eSMarkus Pfeiffer #define	USB_CLASS_PRINTER               7
431d96047eSMarkus Pfeiffer #define	USB_CLASS_PTP                   6
441d96047eSMarkus Pfeiffer #define	USB_CLASS_MASS_STORAGE          8
451d96047eSMarkus Pfeiffer #define	USB_CLASS_HUB                   9
461d96047eSMarkus Pfeiffer #define	USB_CLASS_DATA                  10
471d96047eSMarkus Pfeiffer #define	USB_CLASS_VENDOR_SPEC           0xff
481d96047eSMarkus Pfeiffer 
491d96047eSMarkus Pfeiffer /* USB descriptor types */
501d96047eSMarkus Pfeiffer 
511d96047eSMarkus Pfeiffer #define	USB_DT_DEVICE                   0x01
521d96047eSMarkus Pfeiffer #define	USB_DT_CONFIG                   0x02
531d96047eSMarkus Pfeiffer #define	USB_DT_STRING                   0x03
541d96047eSMarkus Pfeiffer #define	USB_DT_INTERFACE                0x04
551d96047eSMarkus Pfeiffer #define	USB_DT_ENDPOINT                 0x05
561d96047eSMarkus Pfeiffer 
571d96047eSMarkus Pfeiffer #define	USB_DT_HID                      0x21
581d96047eSMarkus Pfeiffer #define	USB_DT_REPORT                   0x22
591d96047eSMarkus Pfeiffer #define	USB_DT_PHYSICAL                 0x23
601d96047eSMarkus Pfeiffer #define	USB_DT_HUB                      0x29
611d96047eSMarkus Pfeiffer 
621d96047eSMarkus Pfeiffer /* USB descriptor type sizes */
631d96047eSMarkus Pfeiffer 
641d96047eSMarkus Pfeiffer #define	USB_DT_DEVICE_SIZE              18
651d96047eSMarkus Pfeiffer #define	USB_DT_CONFIG_SIZE              9
661d96047eSMarkus Pfeiffer #define	USB_DT_INTERFACE_SIZE           9
671d96047eSMarkus Pfeiffer #define	USB_DT_ENDPOINT_SIZE            7
681d96047eSMarkus Pfeiffer #define	USB_DT_ENDPOINT_AUDIO_SIZE      9
691d96047eSMarkus Pfeiffer #define	USB_DT_HUB_NONVAR_SIZE          7
701d96047eSMarkus Pfeiffer 
711d96047eSMarkus Pfeiffer /* USB descriptor header */
721d96047eSMarkus Pfeiffer struct usb_descriptor_header {
731d96047eSMarkus Pfeiffer 	uint8_t	bLength;
741d96047eSMarkus Pfeiffer 	uint8_t	bDescriptorType;
751d96047eSMarkus Pfeiffer };
761d96047eSMarkus Pfeiffer 
771d96047eSMarkus Pfeiffer /* USB string descriptor */
781d96047eSMarkus Pfeiffer struct usb_string_descriptor {
791d96047eSMarkus Pfeiffer 	uint8_t	bLength;
801d96047eSMarkus Pfeiffer 	uint8_t	bDescriptorType;
811d96047eSMarkus Pfeiffer 	uint16_t wData[1];
821d96047eSMarkus Pfeiffer };
831d96047eSMarkus Pfeiffer 
841d96047eSMarkus Pfeiffer /* USB HID descriptor */
851d96047eSMarkus Pfeiffer struct usb_hid_descriptor {
861d96047eSMarkus Pfeiffer 	uint8_t	bLength;
871d96047eSMarkus Pfeiffer 	uint8_t	bDescriptorType;
881d96047eSMarkus Pfeiffer 	uint16_t bcdHID;
891d96047eSMarkus Pfeiffer 	uint8_t	bCountryCode;
901d96047eSMarkus Pfeiffer 	uint8_t	bNumDescriptors;
911d96047eSMarkus Pfeiffer 	/* uint8_t  bReportDescriptorType; */
921d96047eSMarkus Pfeiffer 	/* uint16_t wDescriptorLength; */
931d96047eSMarkus Pfeiffer 	/* ... */
941d96047eSMarkus Pfeiffer };
951d96047eSMarkus Pfeiffer 
961d96047eSMarkus Pfeiffer /* USB endpoint descriptor */
971d96047eSMarkus Pfeiffer #define	USB_MAXENDPOINTS        32
981d96047eSMarkus Pfeiffer struct usb_endpoint_descriptor {
991d96047eSMarkus Pfeiffer 	uint8_t	bLength;
1001d96047eSMarkus Pfeiffer 	uint8_t	bDescriptorType;
1011d96047eSMarkus Pfeiffer 	uint8_t	bEndpointAddress;
1021d96047eSMarkus Pfeiffer #define	USB_ENDPOINT_ADDRESS_MASK       0x0f
1031d96047eSMarkus Pfeiffer #define	USB_ENDPOINT_DIR_MASK           0x80
1041d96047eSMarkus Pfeiffer 	uint8_t	bmAttributes;
1051d96047eSMarkus Pfeiffer #define	USB_ENDPOINT_TYPE_MASK          0x03
1061d96047eSMarkus Pfeiffer #define	USB_ENDPOINT_TYPE_CONTROL       0
1071d96047eSMarkus Pfeiffer #define	USB_ENDPOINT_TYPE_ISOCHRONOUS   1
1081d96047eSMarkus Pfeiffer #define	USB_ENDPOINT_TYPE_BULK          2
1091d96047eSMarkus Pfeiffer #define	USB_ENDPOINT_TYPE_INTERRUPT     3
1101d96047eSMarkus Pfeiffer 	uint16_t wMaxPacketSize;
1111d96047eSMarkus Pfeiffer 	uint8_t	bInterval;
1121d96047eSMarkus Pfeiffer 	uint8_t	bRefresh;
1131d96047eSMarkus Pfeiffer 	uint8_t	bSynchAddress;
1141d96047eSMarkus Pfeiffer 
1151d96047eSMarkus Pfeiffer 	uint8_t *extra;			/* Extra descriptors */
1161d96047eSMarkus Pfeiffer 	int	extralen;
1171d96047eSMarkus Pfeiffer };
1181d96047eSMarkus Pfeiffer 
1191d96047eSMarkus Pfeiffer /* USB interface descriptor */
1201d96047eSMarkus Pfeiffer #define	USB_MAXINTERFACES       32
1211d96047eSMarkus Pfeiffer struct usb_interface_descriptor {
1221d96047eSMarkus Pfeiffer 	uint8_t	bLength;
1231d96047eSMarkus Pfeiffer 	uint8_t	bDescriptorType;
1241d96047eSMarkus Pfeiffer 	uint8_t	bInterfaceNumber;
1251d96047eSMarkus Pfeiffer 	uint8_t	bAlternateSetting;
1261d96047eSMarkus Pfeiffer 	uint8_t	bNumEndpoints;
1271d96047eSMarkus Pfeiffer 	uint8_t	bInterfaceClass;
1281d96047eSMarkus Pfeiffer 	uint8_t	bInterfaceSubClass;
1291d96047eSMarkus Pfeiffer 	uint8_t	bInterfaceProtocol;
1301d96047eSMarkus Pfeiffer 	uint8_t	iInterface;
1311d96047eSMarkus Pfeiffer 
1321d96047eSMarkus Pfeiffer 	struct usb_endpoint_descriptor *endpoint;
1331d96047eSMarkus Pfeiffer 
1341d96047eSMarkus Pfeiffer 	uint8_t *extra;			/* Extra descriptors */
1351d96047eSMarkus Pfeiffer 	int	extralen;
1361d96047eSMarkus Pfeiffer };
1371d96047eSMarkus Pfeiffer 
1381d96047eSMarkus Pfeiffer #define	USB_MAXALTSETTING       128	/* Hard limit */
1391d96047eSMarkus Pfeiffer struct usb_interface {
1401d96047eSMarkus Pfeiffer 	struct usb_interface_descriptor *altsetting;
1411d96047eSMarkus Pfeiffer 
1421d96047eSMarkus Pfeiffer 	int	num_altsetting;
1431d96047eSMarkus Pfeiffer };
1441d96047eSMarkus Pfeiffer 
1451d96047eSMarkus Pfeiffer /* USB configuration descriptor */
1461d96047eSMarkus Pfeiffer #define	USB_MAXCONFIG           8
1471d96047eSMarkus Pfeiffer struct usb_config_descriptor {
1481d96047eSMarkus Pfeiffer 	uint8_t	bLength;
1491d96047eSMarkus Pfeiffer 	uint8_t	bDescriptorType;
1501d96047eSMarkus Pfeiffer 	uint16_t wTotalLength;
1511d96047eSMarkus Pfeiffer 	uint8_t	bNumInterfaces;
1521d96047eSMarkus Pfeiffer 	uint8_t	bConfigurationValue;
1531d96047eSMarkus Pfeiffer 	uint8_t	iConfiguration;
1541d96047eSMarkus Pfeiffer 	uint8_t	bmAttributes;
1551d96047eSMarkus Pfeiffer 	uint8_t	MaxPower;
1561d96047eSMarkus Pfeiffer 
1571d96047eSMarkus Pfeiffer 	struct usb_interface *interface;
1581d96047eSMarkus Pfeiffer 
1591d96047eSMarkus Pfeiffer 	uint8_t *extra;			/* Extra descriptors */
1601d96047eSMarkus Pfeiffer 	int	extralen;
1611d96047eSMarkus Pfeiffer };
1621d96047eSMarkus Pfeiffer 
1631d96047eSMarkus Pfeiffer /* USB device descriptor */
1641d96047eSMarkus Pfeiffer struct usb_device_descriptor {
1651d96047eSMarkus Pfeiffer 	uint8_t	bLength;
1661d96047eSMarkus Pfeiffer 	uint8_t	bDescriptorType;
1671d96047eSMarkus Pfeiffer 	uint16_t bcdUSB;
1681d96047eSMarkus Pfeiffer 	uint8_t	bDeviceClass;
1691d96047eSMarkus Pfeiffer 	uint8_t	bDeviceSubClass;
1701d96047eSMarkus Pfeiffer 	uint8_t	bDeviceProtocol;
1711d96047eSMarkus Pfeiffer 	uint8_t	bMaxPacketSize0;
1721d96047eSMarkus Pfeiffer 	uint16_t idVendor;
1731d96047eSMarkus Pfeiffer 	uint16_t idProduct;
1741d96047eSMarkus Pfeiffer 	uint16_t bcdDevice;
1751d96047eSMarkus Pfeiffer 	uint8_t	iManufacturer;
1761d96047eSMarkus Pfeiffer 	uint8_t	iProduct;
1771d96047eSMarkus Pfeiffer 	uint8_t	iSerialNumber;
1781d96047eSMarkus Pfeiffer 	uint8_t	bNumConfigurations;
1791d96047eSMarkus Pfeiffer };
1801d96047eSMarkus Pfeiffer 
1811d96047eSMarkus Pfeiffer /* USB setup packet */
1821d96047eSMarkus Pfeiffer struct usb_ctrl_setup {
1831d96047eSMarkus Pfeiffer 	uint8_t	bRequestType;
1841d96047eSMarkus Pfeiffer #define	USB_RECIP_DEVICE                0x00
1851d96047eSMarkus Pfeiffer #define	USB_RECIP_INTERFACE             0x01
1861d96047eSMarkus Pfeiffer #define	USB_RECIP_ENDPOINT              0x02
1871d96047eSMarkus Pfeiffer #define	USB_RECIP_OTHER                 0x03
1881d96047eSMarkus Pfeiffer #define	USB_TYPE_STANDARD               (0x00 << 5)
1891d96047eSMarkus Pfeiffer #define	USB_TYPE_CLASS                  (0x01 << 5)
1901d96047eSMarkus Pfeiffer #define	USB_TYPE_VENDOR                 (0x02 << 5)
1911d96047eSMarkus Pfeiffer #define	USB_TYPE_RESERVED               (0x03 << 5)
1921d96047eSMarkus Pfeiffer #define	USB_ENDPOINT_IN                 0x80
1931d96047eSMarkus Pfeiffer #define	USB_ENDPOINT_OUT                0x00
1941d96047eSMarkus Pfeiffer 	uint8_t	bRequest;
1951d96047eSMarkus Pfeiffer #define	USB_REQ_GET_STATUS              0x00
1961d96047eSMarkus Pfeiffer #define	USB_REQ_CLEAR_FEATURE           0x01
1971d96047eSMarkus Pfeiffer #define	USB_REQ_SET_FEATURE             0x03
1981d96047eSMarkus Pfeiffer #define	USB_REQ_SET_ADDRESS             0x05
1991d96047eSMarkus Pfeiffer #define	USB_REQ_GET_DESCRIPTOR          0x06
2001d96047eSMarkus Pfeiffer #define	USB_REQ_SET_DESCRIPTOR          0x07
2011d96047eSMarkus Pfeiffer #define	USB_REQ_GET_CONFIGURATION       0x08
2021d96047eSMarkus Pfeiffer #define	USB_REQ_SET_CONFIGURATION       0x09
2031d96047eSMarkus Pfeiffer #define	USB_REQ_GET_INTERFACE           0x0A
2041d96047eSMarkus Pfeiffer #define	USB_REQ_SET_INTERFACE           0x0B
2051d96047eSMarkus Pfeiffer #define	USB_REQ_SYNCH_FRAME             0x0C
2061d96047eSMarkus Pfeiffer 	uint16_t wValue;
2071d96047eSMarkus Pfeiffer 	uint16_t wIndex;
2081d96047eSMarkus Pfeiffer 	uint16_t wLength;
2091d96047eSMarkus Pfeiffer };
2101d96047eSMarkus Pfeiffer 
2111d96047eSMarkus Pfeiffer /* Error codes */
2121d96047eSMarkus Pfeiffer #define	USB_ERROR_BEGIN                 500000
2131d96047eSMarkus Pfeiffer 
2141d96047eSMarkus Pfeiffer /* Byte swapping */
2151d96047eSMarkus Pfeiffer #define	USB_LE16_TO_CPU(x) le16toh(x)
2161d96047eSMarkus Pfeiffer 
2171d96047eSMarkus Pfeiffer /* Data types */
2181d96047eSMarkus Pfeiffer struct usb_device;
2191d96047eSMarkus Pfeiffer struct usb_bus;
2201d96047eSMarkus Pfeiffer 
2211d96047eSMarkus Pfeiffer /*
2221d96047eSMarkus Pfeiffer  * To maintain compatibility with applications already built with libusb,
2231d96047eSMarkus Pfeiffer  * we must only add entries to the end of this structure. NEVER delete or
2241d96047eSMarkus Pfeiffer  * move members and only change types if you really know what you're doing.
2251d96047eSMarkus Pfeiffer  */
2261d96047eSMarkus Pfeiffer struct usb_device {
2271d96047eSMarkus Pfeiffer 	struct usb_device *next;
2281d96047eSMarkus Pfeiffer 	struct usb_device *prev;
2291d96047eSMarkus Pfeiffer 
2301d96047eSMarkus Pfeiffer 	char	filename[PATH_MAX + 1];
2311d96047eSMarkus Pfeiffer 
2321d96047eSMarkus Pfeiffer 	struct usb_bus *bus;
2331d96047eSMarkus Pfeiffer 
2341d96047eSMarkus Pfeiffer 	struct usb_device_descriptor descriptor;
2351d96047eSMarkus Pfeiffer 	struct usb_config_descriptor *config;
2361d96047eSMarkus Pfeiffer 
2371d96047eSMarkus Pfeiffer 	void   *dev;
2381d96047eSMarkus Pfeiffer 
2391d96047eSMarkus Pfeiffer 	uint8_t	devnum;
2401d96047eSMarkus Pfeiffer 
2411d96047eSMarkus Pfeiffer 	uint8_t	num_children;
2421d96047eSMarkus Pfeiffer 	struct usb_device **children;
2431d96047eSMarkus Pfeiffer };
2441d96047eSMarkus Pfeiffer 
2451d96047eSMarkus Pfeiffer struct usb_bus {
2461d96047eSMarkus Pfeiffer 	struct usb_bus *next;
2471d96047eSMarkus Pfeiffer 	struct usb_bus *prev;
2481d96047eSMarkus Pfeiffer 
2491d96047eSMarkus Pfeiffer 	char	dirname[PATH_MAX + 1];
2501d96047eSMarkus Pfeiffer 
2511d96047eSMarkus Pfeiffer 	struct usb_device *devices;
2521d96047eSMarkus Pfeiffer 	uint32_t location;
2531d96047eSMarkus Pfeiffer 
2541d96047eSMarkus Pfeiffer 	struct usb_device *root_dev;
2551d96047eSMarkus Pfeiffer };
2561d96047eSMarkus Pfeiffer 
2571d96047eSMarkus Pfeiffer struct usb_dev_handle;
2581d96047eSMarkus Pfeiffer typedef struct usb_dev_handle usb_dev_handle;
2591d96047eSMarkus Pfeiffer 
2601d96047eSMarkus Pfeiffer /* Variables */
2611d96047eSMarkus Pfeiffer extern struct usb_bus *usb_busses;
2621d96047eSMarkus Pfeiffer 
2631d96047eSMarkus Pfeiffer #ifdef __cplusplus
2641d96047eSMarkus Pfeiffer extern	"C" {
2651d96047eSMarkus Pfeiffer #endif
2661d96047eSMarkus Pfeiffer #if 0
2671d96047eSMarkus Pfeiffer }					/* style */
2681d96047eSMarkus Pfeiffer 
2691d96047eSMarkus Pfeiffer #endif
2701d96047eSMarkus Pfeiffer 
2711d96047eSMarkus Pfeiffer /* Function prototypes from "libusb20_compat01.c" */
2721d96047eSMarkus Pfeiffer 
2731d96047eSMarkus Pfeiffer usb_dev_handle *usb_open(struct usb_device *dev);
2741d96047eSMarkus Pfeiffer int	usb_close(usb_dev_handle * dev);
2751d96047eSMarkus Pfeiffer int	usb_get_string(usb_dev_handle * dev, int index, int langid, char *buf, size_t buflen);
2761d96047eSMarkus Pfeiffer int	usb_get_string_simple(usb_dev_handle * dev, int index, char *buf, size_t buflen);
2771d96047eSMarkus Pfeiffer int	usb_get_descriptor_by_endpoint(usb_dev_handle * udev, int ep, uint8_t type, uint8_t index, void *buf, int size);
2781d96047eSMarkus Pfeiffer int	usb_get_descriptor(usb_dev_handle * udev, uint8_t type, uint8_t index, void *buf, int size);
2791d96047eSMarkus Pfeiffer int	usb_parse_descriptor(uint8_t *source, char *description, void *dest);
2801d96047eSMarkus Pfeiffer int	usb_parse_configuration(struct usb_config_descriptor *config, uint8_t *buffer);
2811d96047eSMarkus Pfeiffer void	usb_destroy_configuration(struct usb_device *dev);
2821d96047eSMarkus Pfeiffer void	usb_fetch_and_parse_descriptors(usb_dev_handle * udev);
2831d96047eSMarkus Pfeiffer int	usb_bulk_write(usb_dev_handle * dev, int ep, char *bytes, int size, int timeout);
2841d96047eSMarkus Pfeiffer int	usb_bulk_read(usb_dev_handle * dev, int ep, char *bytes, int size, int timeout);
2851d96047eSMarkus Pfeiffer int	usb_interrupt_write(usb_dev_handle * dev, int ep, char *bytes, int size, int timeout);
2861d96047eSMarkus Pfeiffer int	usb_interrupt_read(usb_dev_handle * dev, int ep, char *bytes, int size, int timeout);
2871d96047eSMarkus Pfeiffer int	usb_control_msg(usb_dev_handle * dev, int requesttype, int request, int value, int index, char *bytes, int size, int timeout);
2881d96047eSMarkus Pfeiffer int	usb_set_configuration(usb_dev_handle * dev, int configuration);
2891d96047eSMarkus Pfeiffer int	usb_claim_interface(usb_dev_handle * dev, int interface);
2901d96047eSMarkus Pfeiffer int	usb_release_interface(usb_dev_handle * dev, int interface);
2911d96047eSMarkus Pfeiffer int	usb_set_altinterface(usb_dev_handle * dev, int alternate);
2921d96047eSMarkus Pfeiffer int	usb_resetep(usb_dev_handle * dev, unsigned int ep);
2931d96047eSMarkus Pfeiffer int	usb_clear_halt(usb_dev_handle * dev, unsigned int ep);
2941d96047eSMarkus Pfeiffer int	usb_reset(usb_dev_handle * dev);
2951d96047eSMarkus Pfeiffer int	usb_check_connected(usb_dev_handle * dev);
2961d96047eSMarkus Pfeiffer const char *usb_strerror(void);
2971d96047eSMarkus Pfeiffer void	usb_init(void);
2981d96047eSMarkus Pfeiffer void	usb_set_debug(int level);
2991d96047eSMarkus Pfeiffer int	usb_find_busses(void);
3001d96047eSMarkus Pfeiffer int	usb_find_devices(void);
3011d96047eSMarkus Pfeiffer struct usb_device *usb_device(usb_dev_handle * dev);
3021d96047eSMarkus Pfeiffer struct usb_bus *usb_get_busses(void);
3031d96047eSMarkus Pfeiffer int	usb_get_driver_np(usb_dev_handle * dev, int interface, char *name, int namelen);
3041d96047eSMarkus Pfeiffer int	usb_detach_kernel_driver_np(usb_dev_handle * dev, int interface);
3051d96047eSMarkus Pfeiffer 
3061d96047eSMarkus Pfeiffer #if 0
3071d96047eSMarkus Pfeiffer {					/* style */
3081d96047eSMarkus Pfeiffer #endif
3091d96047eSMarkus Pfeiffer #ifdef __cplusplus
3101d96047eSMarkus Pfeiffer }
3111d96047eSMarkus Pfeiffer 
3121d96047eSMarkus Pfeiffer #endif
3131d96047eSMarkus Pfeiffer 
3141d96047eSMarkus Pfeiffer #endif					/* _LIBUSB20_COMPAT01_H_ */
315