XCORE SDK
XCORE Software Development Kit
libusb.h
1 /*
2  * Public libusb header file
3  * Copyright © 2001 Johannes Erdfelt <johannes@erdfelt.com>
4  * Copyright © 2007-2008 Daniel Drake <dsd@gentoo.org>
5  * Copyright © 2012 Pete Batard <pete@akeo.ie>
6  * Copyright © 2012 Nathan Hjelm <hjelmn@cs.unm.edu>
7  * For more information, please visit: http://libusb.info
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22  */
23 
24 #ifndef LIBUSB_H
25 #define LIBUSB_H
26 
27 #ifdef _MSC_VER
28 /* on MS environments, the inline keyword is available in C++ only */
29 #if !defined(__cplusplus)
30 #define inline __inline
31 #endif
32 /* ssize_t is also not available (copy/paste from MinGW) */
33 #ifndef _SSIZE_T_DEFINED
34 #define _SSIZE_T_DEFINED
35 #undef ssize_t
36 #ifdef _WIN64
37  typedef __int64 ssize_t;
38 #else
39  typedef int ssize_t;
40 #endif /* _WIN64 */
41 #endif /* _SSIZE_T_DEFINED */
42 #endif /* _MSC_VER */
43 
44 /* stdint.h is not available on older MSVC */
45 #if defined(_MSC_VER) && (_MSC_VER < 1600) && (!defined(_STDINT)) && (!defined(_STDINT_H))
46 typedef unsigned __int8 uint8_t;
47 typedef unsigned __int16 uint16_t;
48 typedef unsigned __int32 uint32_t;
49 #else
50 #include <stdint.h>
51 #endif
52 
53 #if !defined(_WIN32_WCE)
54 #include <sys/types.h>
55 #endif
56 
57 #if defined(__linux) || defined(__APPLE__) || defined(__CYGWIN__) || defined(__HAIKU__)
58 #include <sys/time.h>
59 #endif
60 
61 #include <time.h>
62 #include <limits.h>
63 
64 /* 'interface' might be defined as a macro on Windows, so we need to
65  * undefine it so as not to break the current libusb API, because
66  * libusb_config_descriptor has an 'interface' member
67  * As this can be problematic if you include windows.h after libusb.h
68  * in your sources, we force windows.h to be included first. */
69 #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
70 #include <windows.h>
71 #if defined(interface)
72 #undef interface
73 #endif
74 #if !defined(__CYGWIN__)
75 #include <winsock.h>
76 #endif
77 #endif
78 
79 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
80 #define LIBUSB_DEPRECATED_FOR(f) \
81  __attribute__((deprecated("Use " #f " instead")))
82 #else
83 #define LIBUSB_DEPRECATED_FOR(f)
84 #endif /* __GNUC__ */
85 
111 /* LIBUSB_CALL must be defined on both definition and declaration of libusb
112  * functions. You'd think that declaration would be enough, but cygwin will
113  * complain about conflicting types unless both are marked this way.
114  * The placement of this macro is important too; it must appear after the
115  * return type, before the function name. See internal documentation for
116  * API_EXPORTED.
117  */
118 #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
119 #define LIBUSB_CALL WINAPI
120 #else
121 #define LIBUSB_CALL
122 #endif
123 
144 #define LIBUSB_API_VERSION 0x01000104
145 
146 /* The following is kept for compatibility, but will be deprecated in the future */
147 #define LIBUSBX_API_VERSION LIBUSB_API_VERSION
148 
149 #if defined(__cplusplus) || defined(__XC__)
150 extern "C" {
151 #endif
152 
161 static inline uint16_t libusb_cpu_to_le16(const uint16_t x)
162 {
163  union {
164  uint8_t b8[2];
165  uint16_t b16;
166  } _tmp;
167  _tmp.b8[1] = (uint8_t) (x >> 8);
168  _tmp.b8[0] = (uint8_t) (x & 0xff);
169  return _tmp.b16;
170 }
171 
180 #define libusb_le16_to_cpu libusb_cpu_to_le16
181 
182 /* standard USB stuff */
183 
186 enum libusb_class_code {
191  LIBUSB_CLASS_PER_INTERFACE = 0,
192 
194  LIBUSB_CLASS_AUDIO = 1,
195 
197  LIBUSB_CLASS_COMM = 2,
198 
200  LIBUSB_CLASS_HID = 3,
201 
203  LIBUSB_CLASS_PHYSICAL = 5,
204 
206  LIBUSB_CLASS_PRINTER = 7,
207 
209  LIBUSB_CLASS_PTP = 6, /* legacy name from libusb-0.1 usb.h */
210  LIBUSB_CLASS_IMAGE = 6,
211 
213  LIBUSB_CLASS_MASS_STORAGE = 8,
214 
216  LIBUSB_CLASS_HUB = 9,
217 
219  LIBUSB_CLASS_DATA = 10,
220 
222  LIBUSB_CLASS_SMART_CARD = 0x0b,
223 
225  LIBUSB_CLASS_CONTENT_SECURITY = 0x0d,
226 
228  LIBUSB_CLASS_VIDEO = 0x0e,
229 
231  LIBUSB_CLASS_PERSONAL_HEALTHCARE = 0x0f,
232 
234  LIBUSB_CLASS_DIAGNOSTIC_DEVICE = 0xdc,
235 
237  LIBUSB_CLASS_WIRELESS = 0xe0,
238 
240  LIBUSB_CLASS_APPLICATION = 0xfe,
241 
243  LIBUSB_CLASS_VENDOR_SPEC = 0xff
244 };
245 
248 enum libusb_descriptor_type {
250  LIBUSB_DT_DEVICE = 0x01,
251 
253  LIBUSB_DT_CONFIG = 0x02,
254 
256  LIBUSB_DT_STRING = 0x03,
257 
259  LIBUSB_DT_INTERFACE = 0x04,
260 
262  LIBUSB_DT_ENDPOINT = 0x05,
263 
265  LIBUSB_DT_BOS = 0x0f,
266 
268  LIBUSB_DT_DEVICE_CAPABILITY = 0x10,
269 
271  LIBUSB_DT_HID = 0x21,
272 
274  LIBUSB_DT_REPORT = 0x22,
275 
277  LIBUSB_DT_PHYSICAL = 0x23,
278 
280  LIBUSB_DT_HUB = 0x29,
281 
283  LIBUSB_DT_SUPERSPEED_HUB = 0x2a,
284 
286  LIBUSB_DT_SS_ENDPOINT_COMPANION = 0x30
287 };
288 
289 /* Descriptor sizes per descriptor type */
290 #define LIBUSB_DT_DEVICE_SIZE 18
291 #define LIBUSB_DT_CONFIG_SIZE 9
292 #define LIBUSB_DT_INTERFACE_SIZE 9
293 #define LIBUSB_DT_ENDPOINT_SIZE 7
294 #define LIBUSB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */
295 #define LIBUSB_DT_HUB_NONVAR_SIZE 7
296 #define LIBUSB_DT_SS_ENDPOINT_COMPANION_SIZE 6
297 #define LIBUSB_DT_BOS_SIZE 5
298 #define LIBUSB_DT_DEVICE_CAPABILITY_SIZE 3
299 
300 /* BOS descriptor sizes */
301 #define LIBUSB_BT_USB_2_0_EXTENSION_SIZE 7
302 #define LIBUSB_BT_SS_USB_DEVICE_CAPABILITY_SIZE 10
303 #define LIBUSB_BT_CONTAINER_ID_SIZE 20
304 
305 /* We unwrap the BOS => define its max size */
306 #define LIBUSB_DT_BOS_MAX_SIZE ((LIBUSB_DT_BOS_SIZE) +\
307  (LIBUSB_BT_USB_2_0_EXTENSION_SIZE) +\
308  (LIBUSB_BT_SS_USB_DEVICE_CAPABILITY_SIZE) +\
309  (LIBUSB_BT_CONTAINER_ID_SIZE))
310 
311 #define LIBUSB_ENDPOINT_ADDRESS_MASK 0x0f /* in bEndpointAddress */
312 #define LIBUSB_ENDPOINT_DIR_MASK 0x80
313 
318 enum libusb_endpoint_direction {
320  LIBUSB_ENDPOINT_IN = 0x80,
321 
323  LIBUSB_ENDPOINT_OUT = 0x00
324 };
325 
326 #define LIBUSB_TRANSFER_TYPE_MASK 0x03 /* in bmAttributes */
327 
332 enum libusb_transfer_type {
334  LIBUSB_TRANSFER_TYPE_CONTROL = 0,
335 
337  LIBUSB_TRANSFER_TYPE_ISOCHRONOUS = 1,
338 
340  LIBUSB_TRANSFER_TYPE_BULK = 2,
341 
343  LIBUSB_TRANSFER_TYPE_INTERRUPT = 3,
344 
346  LIBUSB_TRANSFER_TYPE_BULK_STREAM = 4,
347 };
348 
351 enum libusb_standard_request {
353  LIBUSB_REQUEST_GET_STATUS = 0x00,
354 
356  LIBUSB_REQUEST_CLEAR_FEATURE = 0x01,
357 
358  /* 0x02 is reserved */
359 
361  LIBUSB_REQUEST_SET_FEATURE = 0x03,
362 
363  /* 0x04 is reserved */
364 
366  LIBUSB_REQUEST_SET_ADDRESS = 0x05,
367 
369  LIBUSB_REQUEST_GET_DESCRIPTOR = 0x06,
370 
372  LIBUSB_REQUEST_SET_DESCRIPTOR = 0x07,
373 
375  LIBUSB_REQUEST_GET_CONFIGURATION = 0x08,
376 
378  LIBUSB_REQUEST_SET_CONFIGURATION = 0x09,
379 
381  LIBUSB_REQUEST_GET_INTERFACE = 0x0A,
382 
384  LIBUSB_REQUEST_SET_INTERFACE = 0x0B,
385 
387  LIBUSB_REQUEST_SYNCH_FRAME = 0x0C,
388 
390  LIBUSB_REQUEST_SET_SEL = 0x30,
391 
394  LIBUSB_SET_ISOCH_DELAY = 0x31,
395 };
396 
401 enum libusb_request_type {
403  LIBUSB_REQUEST_TYPE_STANDARD = (0x00 << 5),
404 
406  LIBUSB_REQUEST_TYPE_CLASS = (0x01 << 5),
407 
409  LIBUSB_REQUEST_TYPE_VENDOR = (0x02 << 5),
410 
412  LIBUSB_REQUEST_TYPE_RESERVED = (0x03 << 5)
413 };
414 
419 enum libusb_request_recipient {
421  LIBUSB_RECIPIENT_DEVICE = 0x00,
422 
424  LIBUSB_RECIPIENT_INTERFACE = 0x01,
425 
427  LIBUSB_RECIPIENT_ENDPOINT = 0x02,
428 
430  LIBUSB_RECIPIENT_OTHER = 0x03,
431 };
432 
433 #define LIBUSB_ISO_SYNC_TYPE_MASK 0x0C
434 
440 enum libusb_iso_sync_type {
442  LIBUSB_ISO_SYNC_TYPE_NONE = 0,
443 
445  LIBUSB_ISO_SYNC_TYPE_ASYNC = 1,
446 
448  LIBUSB_ISO_SYNC_TYPE_ADAPTIVE = 2,
449 
451  LIBUSB_ISO_SYNC_TYPE_SYNC = 3
452 };
453 
454 #define LIBUSB_ISO_USAGE_TYPE_MASK 0x30
455 
461 enum libusb_iso_usage_type {
463  LIBUSB_ISO_USAGE_TYPE_DATA = 0,
464 
466  LIBUSB_ISO_USAGE_TYPE_FEEDBACK = 1,
467 
469  LIBUSB_ISO_USAGE_TYPE_IMPLICIT = 2,
470 };
471 
479  uint8_t bLength;
480 
485 
488  uint16_t bcdUSB;
489 
491  uint8_t bDeviceClass;
492 
496 
500 
503 
505  uint16_t idVendor;
506 
508  uint16_t idProduct;
509 
511  uint16_t bcdDevice;
512 
514  uint8_t iManufacturer;
515 
517  uint8_t iProduct;
518 
520  uint8_t iSerialNumber;
521 
524 };
525 
533  uint8_t bLength;
534 
539 
545 
553  uint8_t bmAttributes;
554 
556  uint16_t wMaxPacketSize;
557 
559  uint8_t bInterval;
560 
563  uint8_t bRefresh;
564 
566  uint8_t bSynchAddress;
567 
570  const unsigned char *extra;
571 
574 };
575 
583  uint8_t bLength;
584 
589 
592 
595 
598  uint8_t bNumEndpoints;
599 
602 
606 
610 
612  uint8_t iInterface;
613 
617 
620  const unsigned char *extra;
621 
624 };
625 
633 
636 };
637 
645  uint8_t bLength;
646 
651 
653  uint16_t wTotalLength;
654 
656  uint8_t bNumInterfaces;
657 
660 
662  uint8_t iConfiguration;
663 
665  uint8_t bmAttributes;
666 
671  uint8_t MaxPower;
672 
676 
679  const unsigned char *extra;
680 
683 };
684 
692 
694  uint8_t bLength;
695 
700 
701 
704  uint8_t bMaxBurst;
705 
710  uint8_t bmAttributes;
711 
715 };
716 
724  uint8_t bLength;
733 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
734  [] /* valid C99 code */
735 #else
736  [0] /* non-standard, but usually working code */
737 #endif
738  ;
739 };
740 
748  uint8_t bLength;
749 
754 
756  uint16_t wTotalLength;
757 
760  uint8_t bNumDeviceCaps;
761 
764 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
765  [] /* valid C99 code */
766 #else
767  [0] /* non-standard, but usually working code */
768 #endif
769  ;
770 };
771 
779  uint8_t bLength;
780 
785 
790 
795  uint32_t bmAttributes;
796 };
797 
805  uint8_t bLength;
806 
811 
816 
821  uint8_t bmAttributes;
822 
825  uint16_t wSpeedSupported;
826 
832 
834  uint8_t bU1DevExitLat;
835 
837  uint16_t bU2DevExitLat;
838 };
839 
847  uint8_t bLength;
848 
853 
858 
860  uint8_t bReserved;
861 
863  uint8_t ContainerID[16];
864 };
865 
874  uint8_t bmRequestType;
875 
881  uint8_t bRequest;
882 
884  uint16_t wValue;
885 
888  uint16_t wIndex;
889 
891  uint16_t wLength;
892 };
893 
894 #define LIBUSB_CONTROL_SETUP_SIZE (sizeof(struct libusb_control_setup))
895 
896 /* libusb */
897 
898 struct libusb_context;
899 struct libusb_device;
900 struct libusb_device_handle;
901 
907  const uint16_t major;
908 
910  const uint16_t minor;
911 
913  const uint16_t micro;
914 
916  const uint16_t nano;
917 
919  const char *rc;
920 
922  const char* describe;
923 };
924 
942 typedef struct libusb_context libusb_context;
943 
959 typedef struct libusb_device libusb_device;
960 
961 
970 typedef struct libusb_device_handle libusb_device_handle;
971 
975 enum libusb_speed {
977  LIBUSB_SPEED_UNKNOWN = 0,
978 
980  LIBUSB_SPEED_LOW = 1,
981 
983  LIBUSB_SPEED_FULL = 2,
984 
986  LIBUSB_SPEED_HIGH = 3,
987 
989  LIBUSB_SPEED_SUPER = 4,
990 };
991 
996 enum libusb_supported_speed {
998  LIBUSB_LOW_SPEED_OPERATION = 1,
999 
1001  LIBUSB_FULL_SPEED_OPERATION = 2,
1002 
1004  LIBUSB_HIGH_SPEED_OPERATION = 4,
1005 
1007  LIBUSB_SUPER_SPEED_OPERATION = 8,
1008 };
1009 
1015 enum libusb_usb_2_0_extension_attributes {
1017  LIBUSB_BM_LPM_SUPPORT = 2,
1018 };
1019 
1025 enum libusb_ss_usb_device_capability_attributes {
1027  LIBUSB_BM_LTM_SUPPORT = 2,
1028 };
1029 
1033 enum libusb_bos_type {
1035  LIBUSB_BT_WIRELESS_USB_DEVICE_CAPABILITY = 1,
1036 
1038  LIBUSB_BT_USB_2_0_EXTENSION = 2,
1039 
1041  LIBUSB_BT_SS_USB_DEVICE_CAPABILITY = 3,
1042 
1044  LIBUSB_BT_CONTAINER_ID = 4,
1045 };
1046 
1054 enum libusb_error {
1056  LIBUSB_SUCCESS = 0,
1057 
1059  LIBUSB_ERROR_IO = -1,
1060 
1062  LIBUSB_ERROR_INVALID_PARAM = -2,
1063 
1065  LIBUSB_ERROR_ACCESS = -3,
1066 
1068  LIBUSB_ERROR_NO_DEVICE = -4,
1069 
1071  LIBUSB_ERROR_NOT_FOUND = -5,
1072 
1074  LIBUSB_ERROR_BUSY = -6,
1075 
1077  LIBUSB_ERROR_TIMEOUT = -7,
1078 
1080  LIBUSB_ERROR_OVERFLOW = -8,
1081 
1083  LIBUSB_ERROR_PIPE = -9,
1084 
1086  LIBUSB_ERROR_INTERRUPTED = -10,
1087 
1089  LIBUSB_ERROR_NO_MEM = -11,
1090 
1092  LIBUSB_ERROR_NOT_SUPPORTED = -12,
1093 
1094  /* NB: Remember to update LIBUSB_ERROR_COUNT below as well as the
1095  message strings in strerror.c when adding new error codes here. */
1096 
1098  LIBUSB_ERROR_OTHER = -99,
1099 };
1100 
1101 /* Total number of error codes in enum libusb_error */
1102 #define LIBUSB_ERROR_COUNT 14
1103 
1106 enum libusb_transfer_status {
1109  LIBUSB_TRANSFER_COMPLETED,
1110 
1112  LIBUSB_TRANSFER_ERROR,
1113 
1115  LIBUSB_TRANSFER_TIMED_OUT,
1116 
1118  LIBUSB_TRANSFER_CANCELLED,
1119 
1122  LIBUSB_TRANSFER_STALL,
1123 
1125  LIBUSB_TRANSFER_NO_DEVICE,
1126 
1128  LIBUSB_TRANSFER_OVERFLOW,
1129 
1130  /* NB! Remember to update libusb_error_name()
1131  when adding new status codes here. */
1132 };
1133 
1136 enum libusb_transfer_flags {
1138  LIBUSB_TRANSFER_SHORT_NOT_OK = 1<<0,
1139 
1141  LIBUSB_TRANSFER_FREE_BUFFER = 1<<1,
1142 
1147  LIBUSB_TRANSFER_FREE_TRANSFER = 1<<2,
1148 
1172  LIBUSB_TRANSFER_ADD_ZERO_PACKET = 1 << 3,
1173 };
1174 
1179  unsigned int length;
1180 
1182  unsigned int actual_length;
1183 
1185  enum libusb_transfer_status status;
1186 };
1187 
1188 struct libusb_transfer;
1189 
1199 typedef void (LIBUSB_CALL *libusb_transfer_cb_fn)(struct libusb_transfer *transfer);
1200 
1209  libusb_device_handle *dev_handle;
1210 
1212  uint8_t flags;
1213 
1215  unsigned char endpoint;
1216 
1218  unsigned char type;
1219 
1222  unsigned int timeout;
1223 
1231  enum libusb_transfer_status status;
1232 
1234  int length;
1235 
1240 
1243  libusb_transfer_cb_fn callback;
1244 
1246  void *user_data;
1247 
1249  unsigned char *buffer;
1250 
1254 
1257 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
1258  [] /* valid C99 code */
1259 #else
1260  [0] /* non-standard, but usually working code */
1261 #endif
1262  ;
1263 };
1264 
1270 enum libusb_capability {
1272  LIBUSB_CAP_HAS_CAPABILITY = 0x0000,
1274  LIBUSB_CAP_HAS_HOTPLUG = 0x0001,
1279  LIBUSB_CAP_HAS_HID_ACCESS = 0x0100,
1282  LIBUSB_CAP_SUPPORTS_DETACH_KERNEL_DRIVER = 0x0101
1283 };
1284 
1295 enum libusb_log_level {
1296  LIBUSB_LOG_LEVEL_NONE = 0,
1297  LIBUSB_LOG_LEVEL_ERROR,
1298  LIBUSB_LOG_LEVEL_WARNING,
1299  LIBUSB_LOG_LEVEL_INFO,
1300  LIBUSB_LOG_LEVEL_DEBUG,
1301 };
1302 
1303 int LIBUSB_CALL libusb_init(libusb_context **ctx);
1304 void LIBUSB_CALL libusb_exit(libusb_context *ctx);
1305 void LIBUSB_CALL libusb_set_debug(libusb_context *ctx, int level);
1306 const struct libusb_version * LIBUSB_CALL libusb_get_version(void);
1307 int LIBUSB_CALL libusb_has_capability(uint32_t capability);
1308 const char * LIBUSB_CALL libusb_error_name(int errcode);
1309 int LIBUSB_CALL libusb_setlocale(const char *locale);
1310 const char * LIBUSB_CALL libusb_strerror(enum libusb_error errcode);
1311 
1312 ssize_t LIBUSB_CALL libusb_get_device_list(libusb_context *ctx,
1313  libusb_device ***list);
1314 void LIBUSB_CALL libusb_free_device_list(libusb_device **list,
1315  int unref_devices);
1316 libusb_device * LIBUSB_CALL libusb_ref_device(libusb_device *dev);
1317 void LIBUSB_CALL libusb_unref_device(libusb_device *dev);
1318 
1319 int LIBUSB_CALL libusb_get_configuration(libusb_device_handle *dev,
1320  int *config);
1321 int LIBUSB_CALL libusb_get_device_descriptor(libusb_device *dev,
1322  struct libusb_device_descriptor *desc);
1323 int LIBUSB_CALL libusb_get_active_config_descriptor(libusb_device *dev,
1324  struct libusb_config_descriptor **config);
1325 int LIBUSB_CALL libusb_get_config_descriptor(libusb_device *dev,
1326  uint8_t config_index, struct libusb_config_descriptor **config);
1327 int LIBUSB_CALL libusb_get_config_descriptor_by_value(libusb_device *dev,
1328  uint8_t bConfigurationValue, struct libusb_config_descriptor **config);
1329 void LIBUSB_CALL libusb_free_config_descriptor(
1330  struct libusb_config_descriptor *config);
1331 int LIBUSB_CALL libusb_get_ss_endpoint_companion_descriptor(
1332  struct libusb_context *ctx,
1333  const struct libusb_endpoint_descriptor *endpoint,
1334  struct libusb_ss_endpoint_companion_descriptor **ep_comp);
1335 void LIBUSB_CALL libusb_free_ss_endpoint_companion_descriptor(
1336  struct libusb_ss_endpoint_companion_descriptor *ep_comp);
1337 int LIBUSB_CALL libusb_get_bos_descriptor(libusb_device_handle *handle,
1338  struct libusb_bos_descriptor **bos);
1339 void LIBUSB_CALL libusb_free_bos_descriptor(struct libusb_bos_descriptor *bos);
1340 int LIBUSB_CALL libusb_get_usb_2_0_extension_descriptor(
1341  struct libusb_context *ctx,
1342  struct libusb_bos_dev_capability_descriptor *dev_cap,
1343  struct libusb_usb_2_0_extension_descriptor **usb_2_0_extension);
1344 void LIBUSB_CALL libusb_free_usb_2_0_extension_descriptor(
1345  struct libusb_usb_2_0_extension_descriptor *usb_2_0_extension);
1346 int LIBUSB_CALL libusb_get_ss_usb_device_capability_descriptor(
1347  struct libusb_context *ctx,
1348  struct libusb_bos_dev_capability_descriptor *dev_cap,
1349  struct libusb_ss_usb_device_capability_descriptor **ss_usb_device_cap);
1350 void LIBUSB_CALL libusb_free_ss_usb_device_capability_descriptor(
1351  struct libusb_ss_usb_device_capability_descriptor *ss_usb_device_cap);
1352 int LIBUSB_CALL libusb_get_container_id_descriptor(struct libusb_context *ctx,
1353  struct libusb_bos_dev_capability_descriptor *dev_cap,
1354  struct libusb_container_id_descriptor **container_id);
1355 void LIBUSB_CALL libusb_free_container_id_descriptor(
1356  struct libusb_container_id_descriptor *container_id);
1357 uint8_t LIBUSB_CALL libusb_get_bus_number(libusb_device *dev);
1358 uint8_t LIBUSB_CALL libusb_get_port_number(libusb_device *dev);
1359 int LIBUSB_CALL libusb_get_port_numbers(libusb_device *dev, uint8_t* port_numbers, int port_numbers_len);
1360 LIBUSB_DEPRECATED_FOR(libusb_get_port_numbers)
1361 int LIBUSB_CALL libusb_get_port_path(libusb_context *ctx, libusb_device *dev, uint8_t* path, uint8_t path_length);
1362 libusb_device * LIBUSB_CALL libusb_get_parent(libusb_device *dev);
1363 uint8_t LIBUSB_CALL libusb_get_device_address(libusb_device *dev);
1364 int LIBUSB_CALL libusb_get_device_speed(libusb_device *dev);
1365 int LIBUSB_CALL libusb_get_max_packet_size(libusb_device *dev,
1366  unsigned char endpoint);
1367 int LIBUSB_CALL libusb_get_max_iso_packet_size(libusb_device *dev,
1368  unsigned char endpoint);
1369 
1370 int LIBUSB_CALL libusb_open(libusb_device *dev, libusb_device_handle **handle);
1371 void LIBUSB_CALL libusb_close(libusb_device_handle *dev_handle);
1372 libusb_device * LIBUSB_CALL libusb_get_device(libusb_device_handle *dev_handle);
1373 
1374 int LIBUSB_CALL libusb_set_configuration(libusb_device_handle *dev,
1375  int configuration);
1376 int LIBUSB_CALL libusb_claim_interface(libusb_device_handle *dev,
1377  int interface_number);
1378 int LIBUSB_CALL libusb_release_interface(libusb_device_handle *dev,
1379  int interface_number);
1380 
1381 libusb_device_handle * LIBUSB_CALL libusb_open_device_with_vid_pid(
1382  libusb_context *ctx, uint16_t vendor_id, uint16_t product_id);
1383 
1384 int LIBUSB_CALL libusb_set_interface_alt_setting(libusb_device_handle *dev,
1385  int interface_number, int alternate_setting);
1386 int LIBUSB_CALL libusb_clear_halt(libusb_device_handle *dev,
1387  unsigned char endpoint);
1388 int LIBUSB_CALL libusb_reset_device(libusb_device_handle *dev);
1389 
1390 int LIBUSB_CALL libusb_alloc_streams(libusb_device_handle *dev,
1391  uint32_t num_streams, unsigned char *endpoints, int num_endpoints);
1392 int LIBUSB_CALL libusb_free_streams(libusb_device_handle *dev,
1393  unsigned char *endpoints, int num_endpoints);
1394 
1395 int LIBUSB_CALL libusb_kernel_driver_active(libusb_device_handle *dev,
1396  int interface_number);
1397 int LIBUSB_CALL libusb_detach_kernel_driver(libusb_device_handle *dev,
1398  int interface_number);
1399 int LIBUSB_CALL libusb_attach_kernel_driver(libusb_device_handle *dev,
1400  int interface_number);
1401 int LIBUSB_CALL libusb_set_auto_detach_kernel_driver(
1402  libusb_device_handle *dev, int enable);
1403 
1404 /* async I/O */
1405 
1418 static inline unsigned char *libusb_control_transfer_get_data(
1419  struct libusb_transfer *transfer)
1420 {
1421  return transfer->buffer + LIBUSB_CONTROL_SETUP_SIZE;
1422 }
1423 
1436 static inline struct libusb_control_setup *libusb_control_transfer_get_setup(
1437  struct libusb_transfer *transfer)
1438 {
1439  return (struct libusb_control_setup *)(void *) transfer->buffer;
1440 }
1441 
1465 static inline void libusb_fill_control_setup(unsigned char *buffer,
1466  uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex,
1467  uint16_t wLength)
1468 {
1469  struct libusb_control_setup *setup = (struct libusb_control_setup *)(void *) buffer;
1470  setup->bmRequestType = bmRequestType;
1471  setup->bRequest = bRequest;
1472  setup->wValue = libusb_cpu_to_le16(wValue);
1473  setup->wIndex = libusb_cpu_to_le16(wIndex);
1474  setup->wLength = libusb_cpu_to_le16(wLength);
1475 }
1476 
1477 struct libusb_transfer * LIBUSB_CALL libusb_alloc_transfer(int iso_packets);
1478 int LIBUSB_CALL libusb_submit_transfer(struct libusb_transfer *transfer);
1479 int LIBUSB_CALL libusb_cancel_transfer(struct libusb_transfer *transfer);
1480 void LIBUSB_CALL libusb_free_transfer(struct libusb_transfer *transfer);
1481 void LIBUSB_CALL libusb_transfer_set_stream_id(
1482  struct libusb_transfer *transfer, uint32_t stream_id);
1483 uint32_t LIBUSB_CALL libusb_transfer_get_stream_id(
1484  struct libusb_transfer *transfer);
1485 
1514 static inline void libusb_fill_control_transfer(
1515  struct libusb_transfer *transfer, libusb_device_handle *dev_handle,
1516  unsigned char *buffer, libusb_transfer_cb_fn callback, void *user_data,
1517  unsigned int timeout)
1518 {
1519  struct libusb_control_setup *setup = (struct libusb_control_setup *)(void *) buffer;
1520  transfer->dev_handle = dev_handle;
1521  transfer->endpoint = 0;
1522  transfer->type = LIBUSB_TRANSFER_TYPE_CONTROL;
1523  transfer->timeout = timeout;
1524  transfer->buffer = buffer;
1525  if (setup)
1526  transfer->length = (int) (LIBUSB_CONTROL_SETUP_SIZE
1527  + libusb_le16_to_cpu(setup->wLength));
1528  transfer->user_data = user_data;
1529  transfer->callback = callback;
1530 }
1531 
1545 static inline void libusb_fill_bulk_transfer(struct libusb_transfer *transfer,
1546  libusb_device_handle *dev_handle, unsigned char endpoint,
1547  unsigned char *buffer, int length, libusb_transfer_cb_fn callback,
1548  void *user_data, unsigned int timeout)
1549 {
1550  transfer->dev_handle = dev_handle;
1551  transfer->endpoint = endpoint;
1552  transfer->type = LIBUSB_TRANSFER_TYPE_BULK;
1553  transfer->timeout = timeout;
1554  transfer->buffer = buffer;
1555  transfer->length = length;
1556  transfer->user_data = user_data;
1557  transfer->callback = callback;
1558 }
1559 
1576 static inline void libusb_fill_bulk_stream_transfer(
1577  struct libusb_transfer *transfer, libusb_device_handle *dev_handle,
1578  unsigned char endpoint, uint32_t stream_id,
1579  unsigned char *buffer, int length, libusb_transfer_cb_fn callback,
1580  void *user_data, unsigned int timeout)
1581 {
1582  libusb_fill_bulk_transfer(transfer, dev_handle, endpoint, buffer,
1583  length, callback, user_data, timeout);
1584  transfer->type = LIBUSB_TRANSFER_TYPE_BULK_STREAM;
1585  libusb_transfer_set_stream_id(transfer, stream_id);
1586 }
1587 
1601 static inline void libusb_fill_interrupt_transfer(
1602  struct libusb_transfer *transfer, libusb_device_handle *dev_handle,
1603  unsigned char endpoint, unsigned char *buffer, int length,
1604  libusb_transfer_cb_fn callback, void *user_data, unsigned int timeout)
1605 {
1606  transfer->dev_handle = dev_handle;
1607  transfer->endpoint = endpoint;
1608  transfer->type = LIBUSB_TRANSFER_TYPE_INTERRUPT;
1609  transfer->timeout = timeout;
1610  transfer->buffer = buffer;
1611  transfer->length = length;
1612  transfer->user_data = user_data;
1613  transfer->callback = callback;
1614 }
1615 
1630 static inline void libusb_fill_iso_transfer(struct libusb_transfer *transfer,
1631  libusb_device_handle *dev_handle, unsigned char endpoint,
1632  unsigned char *buffer, int length, int num_iso_packets,
1633  libusb_transfer_cb_fn callback, void *user_data, unsigned int timeout)
1634 {
1635  transfer->dev_handle = dev_handle;
1636  transfer->endpoint = endpoint;
1637  transfer->type = LIBUSB_TRANSFER_TYPE_ISOCHRONOUS;
1638  transfer->timeout = timeout;
1639  transfer->buffer = buffer;
1640  transfer->length = length;
1641  transfer->num_iso_packets = num_iso_packets;
1642  transfer->user_data = user_data;
1643  transfer->callback = callback;
1644 }
1645 
1654 static inline void libusb_set_iso_packet_lengths(
1655  struct libusb_transfer *transfer, unsigned int length)
1656 {
1657  int i;
1658  for (i = 0; i < transfer->num_iso_packets; i++)
1659  transfer->iso_packet_desc[i].length = length;
1660 }
1661 
1678 static inline unsigned char *libusb_get_iso_packet_buffer(
1679  struct libusb_transfer *transfer, unsigned int packet)
1680 {
1681  int i;
1682  size_t offset = 0;
1683  int _packet;
1684 
1685  /* oops..slight bug in the API. packet is an unsigned int, but we use
1686  * signed integers almost everywhere else. range-check and convert to
1687  * signed to avoid compiler warnings. FIXME for libusb-2. */
1688  if (packet > INT_MAX)
1689  return NULL;
1690  _packet = (int) packet;
1691 
1692  if (_packet >= transfer->num_iso_packets)
1693  return NULL;
1694 
1695  for (i = 0; i < _packet; i++)
1696  offset += transfer->iso_packet_desc[i].length;
1697 
1698  return transfer->buffer + offset;
1699 }
1700 
1720 static inline unsigned char *libusb_get_iso_packet_buffer_simple(
1721  struct libusb_transfer *transfer, unsigned int packet)
1722 {
1723  int _packet;
1724 
1725  /* oops..slight bug in the API. packet is an unsigned int, but we use
1726  * signed integers almost everywhere else. range-check and convert to
1727  * signed to avoid compiler warnings. FIXME for libusb-2. */
1728  if (packet > INT_MAX)
1729  return NULL;
1730  _packet = (int) packet;
1731 
1732  if (_packet >= transfer->num_iso_packets)
1733  return NULL;
1734 
1735  return transfer->buffer + ((int) transfer->iso_packet_desc[0].length * _packet);
1736 }
1737 
1738 /* sync I/O */
1739 
1740 int LIBUSB_CALL libusb_control_transfer(libusb_device_handle *dev_handle,
1741  uint8_t request_type, uint8_t bRequest, uint16_t wValue, uint16_t wIndex,
1742  unsigned char *data, uint16_t wLength, unsigned int timeout);
1743 
1744 int LIBUSB_CALL libusb_bulk_transfer(libusb_device_handle *dev_handle,
1745  unsigned char endpoint, unsigned char *data, int length,
1746  int *actual_length, unsigned int timeout);
1747 
1748 int LIBUSB_CALL libusb_interrupt_transfer(libusb_device_handle *dev_handle,
1749  unsigned char endpoint, unsigned char *data, int length,
1750  int *actual_length, unsigned int timeout);
1751 
1764 static inline int libusb_get_descriptor(libusb_device_handle *dev,
1765  uint8_t desc_type, uint8_t desc_index, unsigned char *data, int length)
1766 {
1767  return libusb_control_transfer(dev, LIBUSB_ENDPOINT_IN,
1768  LIBUSB_REQUEST_GET_DESCRIPTOR, (uint16_t) ((desc_type << 8) | desc_index),
1769  0, data, (uint16_t) length, 1000);
1770 }
1771 
1786 static inline int libusb_get_string_descriptor(libusb_device_handle *dev,
1787  uint8_t desc_index, uint16_t langid, unsigned char *data, int length)
1788 {
1789  return libusb_control_transfer(dev, LIBUSB_ENDPOINT_IN,
1790  LIBUSB_REQUEST_GET_DESCRIPTOR, (uint16_t)((LIBUSB_DT_STRING << 8) | desc_index),
1791  langid, data, (uint16_t) length, 1000);
1792 }
1793 
1794 int LIBUSB_CALL libusb_get_string_descriptor_ascii(libusb_device_handle *dev,
1795  uint8_t desc_index, unsigned char *data, int length);
1796 
1797 /* polling and timeouts */
1798 
1799 int LIBUSB_CALL libusb_try_lock_events(libusb_context *ctx);
1800 void LIBUSB_CALL libusb_lock_events(libusb_context *ctx);
1801 void LIBUSB_CALL libusb_unlock_events(libusb_context *ctx);
1802 int LIBUSB_CALL libusb_event_handling_ok(libusb_context *ctx);
1803 int LIBUSB_CALL libusb_event_handler_active(libusb_context *ctx);
1804 void LIBUSB_CALL libusb_lock_event_waiters(libusb_context *ctx);
1805 void LIBUSB_CALL libusb_unlock_event_waiters(libusb_context *ctx);
1806 int LIBUSB_CALL libusb_wait_for_event(libusb_context *ctx, struct timeval *tv);
1807 
1808 int LIBUSB_CALL libusb_handle_events_timeout(libusb_context *ctx,
1809  struct timeval *tv);
1810 int LIBUSB_CALL libusb_handle_events_timeout_completed(libusb_context *ctx,
1811  struct timeval *tv, int *completed);
1812 int LIBUSB_CALL libusb_handle_events(libusb_context *ctx);
1813 int LIBUSB_CALL libusb_handle_events_completed(libusb_context *ctx, int *completed);
1814 int LIBUSB_CALL libusb_handle_events_locked(libusb_context *ctx,
1815  struct timeval *tv);
1816 int LIBUSB_CALL libusb_pollfds_handle_timeouts(libusb_context *ctx);
1817 int LIBUSB_CALL libusb_get_next_timeout(libusb_context *ctx,
1818  struct timeval *tv);
1819 
1825  int fd;
1826 
1831  short events;
1832 };
1833 
1844 typedef void (LIBUSB_CALL *libusb_pollfd_added_cb)(int fd, short events,
1845  void *user_data);
1846 
1856 typedef void (LIBUSB_CALL *libusb_pollfd_removed_cb)(int fd, void *user_data);
1857 
1858 const struct libusb_pollfd ** LIBUSB_CALL libusb_get_pollfds(
1859  libusb_context *ctx);
1860 void LIBUSB_CALL libusb_free_pollfds(const struct libusb_pollfd **pollfds);
1861 void LIBUSB_CALL libusb_set_pollfd_notifiers(libusb_context *ctx,
1862  libusb_pollfd_added_cb added_cb, libusb_pollfd_removed_cb removed_cb,
1863  void *user_data);
1864 
1877 typedef int libusb_hotplug_callback_handle;
1878 
1884 typedef enum {
1886  LIBUSB_HOTPLUG_NO_FLAGS = 0,
1887 
1889  LIBUSB_HOTPLUG_ENUMERATE = 1<<0,
1890 } libusb_hotplug_flag;
1891 
1897 typedef enum {
1899  LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED = 0x01,
1900 
1904  LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT = 0x02,
1905 } libusb_hotplug_event;
1906 
1909 #define LIBUSB_HOTPLUG_MATCH_ANY -1
1910 
1933 typedef int (LIBUSB_CALL *libusb_hotplug_callback_fn)(libusb_context *ctx,
1934  libusb_device *device,
1935  libusb_hotplug_event event,
1936  void *user_data);
1937 
1972 int LIBUSB_CALL libusb_hotplug_register_callback(libusb_context *ctx,
1973  libusb_hotplug_event events,
1974  libusb_hotplug_flag flags,
1975  int vendor_id, int product_id,
1976  int dev_class,
1977  libusb_hotplug_callback_fn cb_fn,
1978  void *user_data,
1979  libusb_hotplug_callback_handle *handle);
1980 
1992 void LIBUSB_CALL libusb_hotplug_deregister_callback(libusb_context *ctx,
1993  libusb_hotplug_callback_handle handle);
1994 
1995 #if defined(__cplusplus) || defined(__XC__)
1996 }
1997 #endif
1998 
1999 #endif
Definition: libusb.h:746
uint16_t wTotalLength
Definition: libusb.h:756
struct libusb_bos_dev_capability_descriptor * dev_capability[0]
Definition: libusb.h:763
uint8_t bNumDeviceCaps
Definition: libusb.h:760
uint8_t bLength
Definition: libusb.h:748
uint8_t bDescriptorType
Definition: libusb.h:753
Definition: libusb.h:722
uint8_t bLength
Definition: libusb.h:724
uint8_t bDescriptorType
Definition: libusb.h:728
uint8_t bDevCapabilityType
Definition: libusb.h:730
uint8_t dev_capability_data[0]
Definition: libusb.h:738
Definition: libusb.h:643
uint8_t bConfigurationValue
Definition: libusb.h:659
uint8_t iConfiguration
Definition: libusb.h:662
int extra_length
Definition: libusb.h:682
uint8_t bLength
Definition: libusb.h:645
uint8_t bNumInterfaces
Definition: libusb.h:656
uint8_t MaxPower
Definition: libusb.h:671
uint16_t wTotalLength
Definition: libusb.h:653
uint8_t bDescriptorType
Definition: libusb.h:650
const unsigned char * extra
Definition: libusb.h:679
uint8_t bmAttributes
Definition: libusb.h:665
const struct libusb_interface * interface
Definition: libusb.h:675
Definition: libusb.h:845
uint8_t ContainerID[16]
Definition: libusb.h:863
uint8_t bDescriptorType
Definition: libusb.h:852
uint8_t bDevCapabilityType
Definition: libusb.h:857
uint8_t bLength
Definition: libusb.h:847
uint8_t bReserved
Definition: libusb.h:860
Definition: libusb.h:868
uint8_t bRequest
Definition: libusb.h:881
uint8_t bmRequestType
Definition: libusb.h:874
uint16_t wLength
Definition: libusb.h:891
uint16_t wIndex
Definition: libusb.h:888
uint16_t wValue
Definition: libusb.h:884
Definition: libusb.h:477
uint8_t bNumConfigurations
Definition: libusb.h:523
uint8_t iProduct
Definition: libusb.h:517
uint8_t iSerialNumber
Definition: libusb.h:520
uint8_t bMaxPacketSize0
Definition: libusb.h:502
uint8_t bDeviceProtocol
Definition: libusb.h:499
uint16_t idProduct
Definition: libusb.h:508
uint8_t bDescriptorType
Definition: libusb.h:484
uint8_t bDeviceSubClass
Definition: libusb.h:495
uint8_t bDeviceClass
Definition: libusb.h:491
uint8_t iManufacturer
Definition: libusb.h:514
uint16_t idVendor
Definition: libusb.h:505
uint16_t bcdUSB
Definition: libusb.h:488
uint16_t bcdDevice
Definition: libusb.h:511
uint8_t bLength
Definition: libusb.h:479
Definition: libusb.h:531
int extra_length
Definition: libusb.h:573
uint8_t bEndpointAddress
Definition: libusb.h:544
const unsigned char * extra
Definition: libusb.h:570
uint8_t bInterval
Definition: libusb.h:559
uint8_t bDescriptorType
Definition: libusb.h:538
uint8_t bRefresh
Definition: libusb.h:563
uint8_t bmAttributes
Definition: libusb.h:553
uint8_t bLength
Definition: libusb.h:533
uint8_t bSynchAddress
Definition: libusb.h:566
uint16_t wMaxPacketSize
Definition: libusb.h:556
Definition: libusb.h:581
uint8_t bInterfaceSubClass
Definition: libusb.h:605
uint8_t iInterface
Definition: libusb.h:612
uint8_t bInterfaceClass
Definition: libusb.h:601
uint8_t bAlternateSetting
Definition: libusb.h:594
const struct libusb_endpoint_descriptor * endpoint
Definition: libusb.h:616
uint8_t bNumEndpoints
Definition: libusb.h:598
uint8_t bInterfaceProtocol
Definition: libusb.h:609
uint8_t bLength
Definition: libusb.h:583
uint8_t bInterfaceNumber
Definition: libusb.h:591
const unsigned char * extra
Definition: libusb.h:620
int extra_length
Definition: libusb.h:623
uint8_t bDescriptorType
Definition: libusb.h:588
Definition: libusb.h:629
const struct libusb_interface_descriptor * altsetting
Definition: libusb.h:632
int num_altsetting
Definition: libusb.h:635
Definition: libusb.h:1177
unsigned int actual_length
Definition: libusb.h:1182
unsigned int length
Definition: libusb.h:1179
enum libusb_transfer_status status
Definition: libusb.h:1185
Definition: libusb.h:1823
short events
Definition: libusb.h:1831
int fd
Definition: libusb.h:1825
uint16_t wBytesPerInterval
Definition: libusb.h:714
uint8_t bLength
Definition: libusb.h:694
uint8_t bDescriptorType
Definition: libusb.h:699
uint8_t bMaxBurst
Definition: libusb.h:704
uint8_t bmAttributes
Definition: libusb.h:710
uint8_t bDevCapabilityType
Definition: libusb.h:815
uint16_t wSpeedSupported
Definition: libusb.h:825
uint8_t bFunctionalitySupport
Definition: libusb.h:831
uint16_t bU2DevExitLat
Definition: libusb.h:837
uint8_t bLength
Definition: libusb.h:805
uint8_t bmAttributes
Definition: libusb.h:821
uint8_t bU1DevExitLat
Definition: libusb.h:834
uint8_t bDescriptorType
Definition: libusb.h:810
Definition: libusb.h:1207
struct libusb_iso_packet_descriptor iso_packet_desc[0]
Definition: libusb.h:1256
unsigned char endpoint
Definition: libusb.h:1215
enum libusb_transfer_status status
Definition: libusb.h:1231
int length
Definition: libusb.h:1234
libusb_transfer_cb_fn callback
Definition: libusb.h:1243
unsigned char type
Definition: libusb.h:1218
int actual_length
Definition: libusb.h:1239
unsigned char * buffer
Definition: libusb.h:1249
int num_iso_packets
Definition: libusb.h:1253
unsigned int timeout
Definition: libusb.h:1222
void * user_data
Definition: libusb.h:1246
libusb_device_handle * dev_handle
Definition: libusb.h:1209
uint8_t flags
Definition: libusb.h:1212
Definition: libusb.h:777
uint8_t bLength
Definition: libusb.h:779
uint8_t bDevCapabilityType
Definition: libusb.h:789
uint32_t bmAttributes
Definition: libusb.h:795
uint8_t bDescriptorType
Definition: libusb.h:784
Definition: libusb.h:905
const uint16_t micro
Definition: libusb.h:913
const uint16_t major
Definition: libusb.h:907
const char * rc
Definition: libusb.h:919
const uint16_t minor
Definition: libusb.h:910
const char * describe
Definition: libusb.h:922
const uint16_t nano
Definition: libusb.h:916