libusb.h revision 261482
10Sduke/* $FreeBSD: stable/10/lib/libusb/libusb.h 261482 2014-02-04 10:18:29Z hselasky $ */ 212895Scoleenp/*- 30Sduke * Copyright (c) 2009 Sylvestre Gallon. All rights reserved. 40Sduke * 50Sduke * Redistribution and use in source and binary forms, with or without 60Sduke * modification, are permitted provided that the following conditions 70Sduke * are met: 80Sduke * 1. Redistributions of source code must retain the above copyright 90Sduke * notice, this list of conditions and the following disclaimer. 100Sduke * 2. Redistributions in binary form must reproduce the above copyright 110Sduke * notice, this list of conditions and the following disclaimer in the 120Sduke * documentation and/or other materials provided with the distribution. 130Sduke * 140Sduke * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 150Sduke * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 160Sduke * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 170Sduke * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 180Sduke * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 191472Strims * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 201472Strims * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 211472Strims * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 220Sduke * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 230Sduke * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 240Sduke * SUCH DAMAGE. 251879Sstefank */ 261879Sstefank 278413Spliden#ifndef __LIBUSB_H__ 281879Sstefank#define __LIBUSB_H__ 291879Sstefank 301879Sstefank#ifndef LIBUSB_GLOBAL_INCLUDE_FILE 317864Sstefank#include <stdint.h> 320Sduke#include <sys/time.h> 330Sduke#include <sys/types.h> 345589Sfarvidsson#endif 355589Sfarvidsson 365589Sfarvidsson#ifdef __cplusplus 375589Sfarvidssonextern "C" { 385589Sfarvidsson#endif 3912895Scoleenp#if 0 400Sduke} /* indent fix */ 415589Sfarvidsson 4212895Scoleenp#endif 4312895Scoleenp 445589Sfarvidsson/* libusb enums */ 455589Sfarvidsson 465589Sfarvidssonenum libusb_class_code { 475589Sfarvidsson LIBUSB_CLASS_PER_INTERFACE = 0, 4812895Scoleenp LIBUSB_CLASS_AUDIO = 1, 495589Sfarvidsson LIBUSB_CLASS_COMM = 2, 505589Sfarvidsson LIBUSB_CLASS_HID = 3, 515589Sfarvidsson LIBUSB_CLASS_PTP = 6, 525589Sfarvidsson LIBUSB_CLASS_PRINTER = 7, 535589Sfarvidsson LIBUSB_CLASS_MASS_STORAGE = 8, 545589Sfarvidsson LIBUSB_CLASS_HUB = 9, 555589Sfarvidsson LIBUSB_CLASS_DATA = 10, 565589Sfarvidsson LIBUSB_CLASS_VENDOR_SPEC = 0xff, 575589Sfarvidsson}; 585589Sfarvidsson 595589Sfarvidssonenum libusb_descriptor_type { 605589Sfarvidsson LIBUSB_DT_DEVICE = 0x01, 615589Sfarvidsson LIBUSB_DT_CONFIG = 0x02, 625589Sfarvidsson LIBUSB_DT_STRING = 0x03, 635589Sfarvidsson LIBUSB_DT_INTERFACE = 0x04, 645589Sfarvidsson LIBUSB_DT_ENDPOINT = 0x05, 655589Sfarvidsson LIBUSB_DT_HID = 0x21, 665589Sfarvidsson LIBUSB_DT_REPORT = 0x22, 675589Sfarvidsson LIBUSB_DT_PHYSICAL = 0x23, 685589Sfarvidsson LIBUSB_DT_HUB = 0x29, 695589Sfarvidsson LIBUSB_DT_BOS = 0x0f, 705589Sfarvidsson LIBUSB_DT_DEVICE_CAPABILITY = 0x10, 715589Sfarvidsson LIBUSB_DT_SS_ENDPOINT_COMPANION = 0x30, 720Sduke}; 7313353Scoleenp 740Sdukeenum libusb_device_capability_type { 750Sduke LIBUSB_WIRELESS_USB_DEVICE_CAPABILITY = 0x1, 760Sduke LIBUSB_USB_2_0_EXTENSION_DEVICE_CAPABILITY = 0x2, 770Sduke LIBUSB_SS_USB_DEVICE_CAPABILITY = 0x3, 780Sduke LIBUSB_CONTAINER_ID_DEVICE_CAPABILITY = 0x4, 790Sduke}; 800Sduke 810Sduke#define LIBUSB_DT_DEVICE_SIZE 18 820Sduke#define LIBUSB_DT_CONFIG_SIZE 9 830Sduke#define LIBUSB_DT_INTERFACE_SIZE 9 840Sduke#define LIBUSB_DT_ENDPOINT_SIZE 7 850Sduke#define LIBUSB_DT_ENDPOINT_AUDIO_SIZE 9 860Sduke#define LIBUSB_DT_HUB_NONVAR_SIZE 7 870Sduke#define LIBUSB_DT_SS_ENDPOINT_COMPANION_SIZE 6 880Sduke#define LIBUSB_DT_BOS_SIZE 5 890Sduke#define LIBUSB_USB_2_0_EXTENSION_DEVICE_CAPABILITY_SIZE 7 900Sduke#define LIBUSB_SS_USB_DEVICE_CAPABILITY_SIZE 10 910Sduke 920Sduke#define LIBUSB_ENDPOINT_ADDRESS_MASK 0x0f 930Sduke#define LIBUSB_ENDPOINT_DIR_MASK 0x80 940Sduke 950Sdukeenum libusb_endpoint_direction { 960Sduke LIBUSB_ENDPOINT_IN = 0x80, 970Sduke LIBUSB_ENDPOINT_OUT = 0x00, 980Sduke}; 990Sduke 1000Sduke#define LIBUSB_TRANSFER_TYPE_MASK 0x03 1010Sduke 1020Sdukeenum libusb_transfer_type { 1030Sduke LIBUSB_TRANSFER_TYPE_CONTROL = 0, 1040Sduke LIBUSB_TRANSFER_TYPE_ISOCHRONOUS = 1, 1050Sduke LIBUSB_TRANSFER_TYPE_BULK = 2, 1060Sduke LIBUSB_TRANSFER_TYPE_INTERRUPT = 3, 1070Sduke}; 1080Sduke 1090Sdukeenum libusb_standard_request { 1100Sduke LIBUSB_REQUEST_GET_STATUS = 0x00, 1110Sduke LIBUSB_REQUEST_CLEAR_FEATURE = 0x01, 1120Sduke LIBUSB_REQUEST_SET_FEATURE = 0x03, 1130Sduke LIBUSB_REQUEST_SET_ADDRESS = 0x05, 1140Sduke LIBUSB_REQUEST_GET_DESCRIPTOR = 0x06, 1150Sduke LIBUSB_REQUEST_SET_DESCRIPTOR = 0x07, 1160Sduke LIBUSB_REQUEST_GET_CONFIGURATION = 0x08, 1170Sduke LIBUSB_REQUEST_SET_CONFIGURATION = 0x09, 1180Sduke LIBUSB_REQUEST_GET_INTERFACE = 0x0A, 1190Sduke LIBUSB_REQUEST_SET_INTERFACE = 0x0B, 1200Sduke LIBUSB_REQUEST_SYNCH_FRAME = 0x0C, 1210Sduke}; 1220Sduke 1230Sdukeenum libusb_request_type { 1240Sduke LIBUSB_REQUEST_TYPE_STANDARD = (0x00 << 5), 1250Sduke LIBUSB_REQUEST_TYPE_CLASS = (0x01 << 5), 1260Sduke LIBUSB_REQUEST_TYPE_VENDOR = (0x02 << 5), 1270Sduke LIBUSB_REQUEST_TYPE_RESERVED = (0x03 << 5), 1280Sduke}; 1290Sduke 1300Sdukeenum libusb_request_recipient { 1310Sduke LIBUSB_RECIPIENT_DEVICE = 0x00, 1320Sduke LIBUSB_RECIPIENT_INTERFACE = 0x01, 1330Sduke LIBUSB_RECIPIENT_ENDPOINT = 0x02, 1340Sduke LIBUSB_RECIPIENT_OTHER = 0x03, 1350Sduke}; 1360Sduke 1370Sduke#define LIBUSB_ISO_SYNC_TYPE_MASK 0x0C 1380Sduke 1390Sdukeenum libusb_iso_sync_type { 1400Sduke LIBUSB_ISO_SYNC_TYPE_NONE = 0, 1410Sduke LIBUSB_ISO_SYNC_TYPE_ASYNC = 1, 1420Sduke LIBUSB_ISO_SYNC_TYPE_ADAPTIVE = 2, 1430Sduke LIBUSB_ISO_SYNC_TYPE_SYNC = 3, 1440Sduke}; 1450Sduke 1460Sduke#define LIBUSB_ISO_USAGE_TYPE_MASK 0x30 1470Sduke 1480Sdukeenum libusb_iso_usage_type { 1490Sduke LIBUSB_ISO_USAGE_TYPE_DATA = 0, 1500Sduke LIBUSB_ISO_USAGE_TYPE_FEEDBACK = 1, 1510Sduke LIBUSB_ISO_USAGE_TYPE_IMPLICIT = 2, 1520Sduke}; 1530Sduke 1540Sdukeenum libusb_error { 1550Sduke LIBUSB_SUCCESS = 0, 1560Sduke LIBUSB_ERROR_IO = -1, 1570Sduke LIBUSB_ERROR_INVALID_PARAM = -2, 1580Sduke LIBUSB_ERROR_ACCESS = -3, 1590Sduke LIBUSB_ERROR_NO_DEVICE = -4, 1600Sduke LIBUSB_ERROR_NOT_FOUND = -5, 1610Sduke LIBUSB_ERROR_BUSY = -6, 1620Sduke LIBUSB_ERROR_TIMEOUT = -7, 1630Sduke LIBUSB_ERROR_OVERFLOW = -8, 1640Sduke LIBUSB_ERROR_PIPE = -9, 1650Sduke LIBUSB_ERROR_INTERRUPTED = -10, 1660Sduke LIBUSB_ERROR_NO_MEM = -11, 1670Sduke LIBUSB_ERROR_NOT_SUPPORTED = -12, 1680Sduke LIBUSB_ERROR_OTHER = -99, 1690Sduke}; 1700Sduke 1710Sdukeenum libusb_speed { 1720Sduke LIBUSB_SPEED_UNKNOWN = 0, 1730Sduke LIBUSB_SPEED_LOW = 1, 1740Sduke LIBUSB_SPEED_FULL = 2, 1750Sduke LIBUSB_SPEED_HIGH = 3, 1760Sduke LIBUSB_SPEED_SUPER = 4, 1770Sduke}; 1780Sduke 1790Sdukeenum libusb_transfer_status { 1800Sduke LIBUSB_TRANSFER_COMPLETED, 1810Sduke LIBUSB_TRANSFER_ERROR, 1820Sduke LIBUSB_TRANSFER_TIMED_OUT, 1830Sduke LIBUSB_TRANSFER_CANCELLED, 1840Sduke LIBUSB_TRANSFER_STALL, 1850Sduke LIBUSB_TRANSFER_NO_DEVICE, 1860Sduke LIBUSB_TRANSFER_OVERFLOW, 1870Sduke}; 1880Sduke 1890Sdukeenum libusb_transfer_flags { 1900Sduke LIBUSB_TRANSFER_SHORT_NOT_OK = 1 << 0, 1910Sduke LIBUSB_TRANSFER_FREE_BUFFER = 1 << 1, 1920Sduke LIBUSB_TRANSFER_FREE_TRANSFER = 1 << 2, 1933465Szgu}; 1940Sduke 1950Sdukeenum libusb_debug_level { 1960Sduke LIBUSB_DEBUG_NO=0, 1970Sduke LIBUSB_DEBUG_FUNCTION=1, 1980Sduke LIBUSB_DEBUG_TRANSFER=2, 1990Sduke}; 2000Sduke 2010Sduke/* libusb structures */ 2020Sduke 2030Sdukestruct libusb_context; 2040Sdukestruct libusb_device; 2050Sdukestruct libusb_transfer; 20613353Scoleenpstruct libusb_device_handle; 2070Sduke 2083602Scoleenpstruct libusb_pollfd { 2093602Scoleenp int fd; 2103843Shseigel short events; 2110Sduke}; 2120Sduke 2130Sduketypedef struct libusb_context libusb_context; 2140Sduketypedef struct libusb_device libusb_device; 2150Sduketypedef struct libusb_device_handle libusb_device_handle; 21613353Scoleenptypedef struct libusb_pollfd libusb_pollfd; 2170Sduketypedef void (*libusb_pollfd_added_cb) (int fd, short events, void *user_data); 2180Sduketypedef void (*libusb_pollfd_removed_cb) (int fd, void *user_data); 2193602Scoleenp 2203602Scoleenptypedef struct libusb_device_descriptor { 22112895Scoleenp uint8_t bLength; 2223843Shseigel uint8_t bDescriptorType; 22312895Scoleenp uint16_t bcdUSB; 2240Sduke uint8_t bDeviceClass; 2250Sduke uint8_t bDeviceSubClass; 2260Sduke uint8_t bDeviceProtocol; 2270Sduke uint8_t bMaxPacketSize0; 2280Sduke uint16_t idVendor; 2290Sduke uint16_t idProduct; 2300Sduke uint16_t bcdDevice; 2310Sduke uint8_t iManufacturer; 2320Sduke uint8_t iProduct; 2330Sduke uint8_t iSerialNumber; 2343602Scoleenp uint8_t bNumConfigurations; 2350Sduke} libusb_device_descriptor; 2360Sduke 2373843Shseigeltypedef struct libusb_endpoint_descriptor { 2380Sduke uint8_t bLength; 2390Sduke uint8_t bDescriptorType; 2400Sduke uint8_t bEndpointAddress; 2410Sduke uint8_t bmAttributes; 2420Sduke uint16_t wMaxPacketSize; 2433602Scoleenp uint8_t bInterval; 2440Sduke uint8_t bRefresh; 2450Sduke uint8_t bSynchAddress; 2460Sduke uint8_t *extra; 24712895Scoleenp int extra_length; 2483843Shseigel} libusb_endpoint_descriptor __aligned(sizeof(void *)); 24912895Scoleenp 2500Sduketypedef struct libusb_ss_endpoint_companion_descriptor { 2510Sduke uint8_t bLength; 2520Sduke uint8_t bDescriptorType; 2530Sduke uint8_t bMaxBurst; 2540Sduke uint8_t bmAttributes; 2550Sduke uint16_t wBytesPerInterval; 2560Sduke} libusb_ss_endpoint_companion_descriptor __aligned(sizeof(void *)); 2570Sduke 2580Sduketypedef struct libusb_interface_descriptor { 2590Sduke uint8_t bLength; 26012895Scoleenp uint8_t bDescriptorType; 2610Sduke uint8_t bInterfaceNumber; 2620Sduke uint8_t bAlternateSetting; 2635589Sfarvidsson uint8_t bNumEndpoints; 2640Sduke uint8_t bInterfaceClass; 2655589Sfarvidsson uint8_t bInterfaceSubClass; 2665589Sfarvidsson uint8_t bInterfaceProtocol; 2675589Sfarvidsson uint8_t iInterface; 2685589Sfarvidsson struct libusb_endpoint_descriptor *endpoint; 2695589Sfarvidsson uint8_t *extra; 2700Sduke int extra_length; 2715589Sfarvidsson} libusb_interface_descriptor __aligned(sizeof(void *)); 2725589Sfarvidsson 2735589Sfarvidssontypedef struct libusb_interface { 2745589Sfarvidsson struct libusb_interface_descriptor *altsetting; 2755589Sfarvidsson int num_altsetting; 2765589Sfarvidsson} libusb_interface __aligned(sizeof(void *)); 2775589Sfarvidsson 2785589Sfarvidssontypedef struct libusb_config_descriptor { 2795589Sfarvidsson uint8_t bLength; 2805589Sfarvidsson uint8_t bDescriptorType; 2810Sduke uint16_t wTotalLength; 2825589Sfarvidsson uint8_t bNumInterfaces; 2830Sduke uint8_t bConfigurationValue; 2840Sduke uint8_t iConfiguration; 2850Sduke uint8_t bmAttributes; 2860Sduke uint8_t MaxPower; 2870Sduke struct libusb_interface *interface; 28813353Scoleenp uint8_t *extra; 2890Sduke int extra_length; 2900Sduke} libusb_config_descriptor __aligned(sizeof(void *)); 2910Sduke 2920Sduketypedef struct libusb_usb_2_0_device_capability_descriptor { 2930Sduke uint8_t bLength; 2940Sduke uint8_t bDescriptorType; 29513353Scoleenp uint8_t bDevCapabilityType; 2960Sduke uint32_t bmAttributes; 2970Sduke#define LIBUSB_USB_2_0_CAPABILITY_LPM_SUPPORT (1 << 1) 29813353Scoleenp} libusb_usb_2_0_device_capability_descriptor __aligned(sizeof(void *)); 2990Sduke 3000Sduketypedef struct libusb_ss_usb_device_capability_descriptor { 3010Sduke uint8_t bLength; 3020Sduke uint8_t bDescriptorType; 30313353Scoleenp uint8_t bDevCapabilityType; 3040Sduke uint8_t bmAttributes; 3050Sduke#define LIBUSB_SS_USB_CAPABILITY_LPM_SUPPORT (1 << 1) 3060Sduke uint16_t wSpeedSupported; 30713353Scoleenp#define LIBUSB_CAPABILITY_LOW_SPEED_OPERATION (1) 3080Sduke#define LIBUSB_CAPABILITY_FULL_SPEED_OPERATION (1 << 1) 3090Sduke#define LIBUSB_CAPABILITY_HIGH_SPEED_OPERATION (1 << 2) 3100Sduke#define LIBUSB_CAPABILITY_5GBPS_OPERATION (1 << 3) 3110Sduke uint8_t bFunctionalitySupport; 3120Sduke uint8_t bU1DevExitLat; 3130Sduke uint16_t wU2DevExitLat; 3140Sduke} libusb_ss_usb_device_capability_descriptor __aligned(sizeof(void *)); 3150Sduke 3160Sduketypedef struct libusb_bos_descriptor { 3170Sduke uint8_t bLength; 3180Sduke uint8_t bDescriptorType; 3190Sduke uint16_t wTotalLength; 3200Sduke uint8_t bNumDeviceCapabilities; 3210Sduke struct libusb_usb_2_0_device_capability_descriptor *usb_2_0_ext_cap; 3220Sduke struct libusb_ss_usb_device_capability_descriptor *ss_usb_cap; 3230Sduke} libusb_bos_descriptor __aligned(sizeof(void *)); 324 325typedef struct libusb_control_setup { 326 uint8_t bmRequestType; 327 uint8_t bRequest; 328 uint16_t wValue; 329 uint16_t wIndex; 330 uint16_t wLength; 331} libusb_control_setup; 332 333#define LIBUSB_CONTROL_SETUP_SIZE 8 /* bytes */ 334 335typedef struct libusb_iso_packet_descriptor { 336 uint32_t length; 337 uint32_t actual_length; 338 enum libusb_transfer_status status; 339} libusb_iso_packet_descriptor __aligned(sizeof(void *)); 340 341typedef void (*libusb_transfer_cb_fn) (struct libusb_transfer *transfer); 342 343typedef struct libusb_transfer { 344 libusb_device_handle *dev_handle; 345 uint8_t flags; 346 uint8_t endpoint; 347 uint8_t type; 348 uint32_t timeout; 349 enum libusb_transfer_status status; 350 int length; 351 int actual_length; 352 libusb_transfer_cb_fn callback; 353 void *user_data; 354 uint8_t *buffer; 355 int num_iso_packets; 356 struct libusb_iso_packet_descriptor iso_packet_desc[0]; 357} libusb_transfer __aligned(sizeof(void *)); 358 359/* Library initialisation */ 360 361void libusb_set_debug(libusb_context * ctx, int level); 362const char *libusb_strerror(int code); 363const char *libusb_error_name(int code); 364int libusb_init(libusb_context ** context); 365void libusb_exit(struct libusb_context *ctx); 366 367/* Device handling and enumeration */ 368 369ssize_t libusb_get_device_list(libusb_context * ctx, libusb_device *** list); 370void libusb_free_device_list(libusb_device ** list, int unref_devices); 371uint8_t libusb_get_bus_number(libusb_device * dev); 372int libusb_get_port_numbers(libusb_device *dev, uint8_t *buf, uint8_t bufsize); 373int libusb_get_port_path(libusb_context *ctx, libusb_device *dev, uint8_t *buf, uint8_t bufsize); 374uint8_t libusb_get_device_address(libusb_device * dev); 375enum libusb_speed libusb_get_device_speed(libusb_device * dev); 376int libusb_clear_halt(libusb_device_handle *devh, uint8_t endpoint); 377int libusb_get_max_packet_size(libusb_device * dev, uint8_t endpoint); 378int libusb_get_max_iso_packet_size(libusb_device * dev, uint8_t endpoint); 379libusb_device *libusb_ref_device(libusb_device * dev); 380void libusb_unref_device(libusb_device * dev); 381int libusb_open(libusb_device * dev, libusb_device_handle ** devh); 382libusb_device_handle *libusb_open_device_with_vid_pid(libusb_context * ctx, uint16_t vendor_id, uint16_t product_id); 383void libusb_close(libusb_device_handle * devh); 384libusb_device *libusb_get_device(libusb_device_handle * devh); 385int libusb_get_configuration(libusb_device_handle * devh, int *config); 386int libusb_set_configuration(libusb_device_handle * devh, int configuration); 387int libusb_claim_interface(libusb_device_handle * devh, int interface_number); 388int libusb_release_interface(libusb_device_handle * devh, int interface_number); 389int libusb_reset_device(libusb_device_handle * devh); 390int libusb_check_connected(libusb_device_handle * devh); 391int libusb_kernel_driver_active(libusb_device_handle * devh, int interface); 392int libusb_get_driver_np(libusb_device_handle * devh, int interface, char *name, int namelen); 393int libusb_get_driver(libusb_device_handle * devh, int interface, char *name, int namelen); 394int libusb_detach_kernel_driver_np(libusb_device_handle * devh, int interface); 395int libusb_detach_kernel_driver(libusb_device_handle * devh, int interface); 396int libusb_attach_kernel_driver(libusb_device_handle * devh, int interface); 397int libusb_set_interface_alt_setting(libusb_device_handle * devh, int interface_number, int alternate_setting); 398 399/* USB Descriptors */ 400 401int libusb_get_device_descriptor(libusb_device * dev, struct libusb_device_descriptor *desc); 402int libusb_get_active_config_descriptor(libusb_device * dev, struct libusb_config_descriptor **config); 403int libusb_get_config_descriptor(libusb_device * dev, uint8_t config_index, struct libusb_config_descriptor **config); 404int libusb_get_config_descriptor_by_value(libusb_device * dev, uint8_t bConfigurationValue, struct libusb_config_descriptor **config); 405void libusb_free_config_descriptor(struct libusb_config_descriptor *config); 406int libusb_get_string_descriptor(libusb_device_handle * devh, uint8_t desc_index, uint16_t langid, unsigned char *data, int length); 407int libusb_get_string_descriptor_ascii(libusb_device_handle * devh, uint8_t desc_index, uint8_t *data, int length); 408int libusb_get_descriptor(libusb_device_handle * devh, uint8_t desc_type, uint8_t desc_index, uint8_t *data, int length); 409int libusb_parse_ss_endpoint_comp(const void *buf, int len, struct libusb_ss_endpoint_companion_descriptor **ep_comp); 410void libusb_free_ss_endpoint_comp(struct libusb_ss_endpoint_companion_descriptor *ep_comp); 411int libusb_parse_bos_descriptor(const void *buf, int len, struct libusb_bos_descriptor **bos); 412void libusb_free_bos_descriptor(struct libusb_bos_descriptor *bos); 413 414/* Asynchronous device I/O */ 415 416struct libusb_transfer *libusb_alloc_transfer(int iso_packets); 417void libusb_free_transfer(struct libusb_transfer *transfer); 418int libusb_submit_transfer(struct libusb_transfer *transfer); 419int libusb_cancel_transfer(struct libusb_transfer *transfer); 420uint8_t *libusb_get_iso_packet_buffer(struct libusb_transfer *transfer, uint32_t index); 421uint8_t *libusb_get_iso_packet_buffer_simple(struct libusb_transfer *transfer, uint32_t index); 422void libusb_set_iso_packet_lengths(struct libusb_transfer *transfer, uint32_t length); 423uint8_t *libusb_control_transfer_get_data(struct libusb_transfer *transfer); 424struct libusb_control_setup *libusb_control_transfer_get_setup(struct libusb_transfer *transfer); 425void libusb_fill_control_setup(uint8_t *buf, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint16_t wLength); 426void 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); 427void 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); 428void 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); 429void 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); 430 431/* Polling and timing */ 432 433int libusb_try_lock_events(libusb_context * ctx); 434void libusb_lock_events(libusb_context * ctx); 435void libusb_unlock_events(libusb_context * ctx); 436int libusb_event_handling_ok(libusb_context * ctx); 437int libusb_event_handler_active(libusb_context * ctx); 438void libusb_lock_event_waiters(libusb_context * ctx); 439void libusb_unlock_event_waiters(libusb_context * ctx); 440int libusb_wait_for_event(libusb_context * ctx, struct timeval *tv); 441int libusb_handle_events_timeout_completed(libusb_context * ctx, struct timeval *tv, int *completed); 442int libusb_handle_events_completed(libusb_context * ctx, int *completed); 443int libusb_handle_events_timeout(libusb_context * ctx, struct timeval *tv); 444int libusb_handle_events(libusb_context * ctx); 445int libusb_handle_events_locked(libusb_context * ctx, struct timeval *tv); 446int libusb_get_next_timeout(libusb_context * ctx, struct timeval *tv); 447void libusb_set_pollfd_notifiers(libusb_context * ctx, libusb_pollfd_added_cb added_cb, libusb_pollfd_removed_cb removed_cb, void *user_data); 448const struct libusb_pollfd **libusb_get_pollfds(libusb_context * ctx); 449 450/* Synchronous device I/O */ 451 452int 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); 453int libusb_bulk_transfer(libusb_device_handle * devh, uint8_t endpoint, uint8_t *data, int length, int *transferred, uint32_t timeout); 454int libusb_interrupt_transfer(libusb_device_handle * devh, uint8_t endpoint, uint8_t *data, int length, int *transferred, uint32_t timeout); 455 456/* Byte-order */ 457 458uint16_t libusb_cpu_to_le16(uint16_t x); 459uint16_t libusb_le16_to_cpu(uint16_t x); 460 461#if 0 462{ /* indent fix */ 463#endif 464#ifdef __cplusplus 465} 466 467#endif 468 469#endif /* __LIBUSB_H__ */ 470