libusb.h revision 277847
1224857Snwhitehorn/* $FreeBSD: stable/10/lib/libusb/libusb.h 277847 2015-01-28 19:49:53Z hselasky $ */ 2224857Snwhitehorn/*- 3224857Snwhitehorn * Copyright (c) 2009 Sylvestre Gallon. All rights reserved. 4224857Snwhitehorn * 5224857Snwhitehorn * Redistribution and use in source and binary forms, with or without 6224857Snwhitehorn * modification, are permitted provided that the following conditions 7224857Snwhitehorn * are met: 8224857Snwhitehorn * 1. Redistributions of source code must retain the above copyright 9224857Snwhitehorn * notice, this list of conditions and the following disclaimer. 10224857Snwhitehorn * 2. Redistributions in binary form must reproduce the above copyright 11224857Snwhitehorn * notice, this list of conditions and the following disclaimer in the 12224857Snwhitehorn * documentation and/or other materials provided with the distribution. 13224857Snwhitehorn * 14224857Snwhitehorn * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15224857Snwhitehorn * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16224857Snwhitehorn * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17224857Snwhitehorn * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18224857Snwhitehorn * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19224857Snwhitehorn * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20224857Snwhitehorn * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21224857Snwhitehorn * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22224857Snwhitehorn * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23224857Snwhitehorn * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24224857Snwhitehorn * SUCH DAMAGE. 25224857Snwhitehorn */ 26224857Snwhitehorn 27224857Snwhitehorn#ifndef __LIBUSB_H__ 28224857Snwhitehorn#define __LIBUSB_H__ 29224857Snwhitehorn 30224857Snwhitehorn#ifndef LIBUSB_GLOBAL_INCLUDE_FILE 31224857Snwhitehorn#include <stdint.h> 32224857Snwhitehorn#include <sys/time.h> 33224857Snwhitehorn#include <sys/types.h> 34224857Snwhitehorn#endif 35224857Snwhitehorn 36224857Snwhitehorn#define LIBUSB_CALL 37224857Snwhitehorn 38224857Snwhitehorn#ifdef __cplusplus 39224857Snwhitehornextern "C" { 40224857Snwhitehorn#endif 41224857Snwhitehorn#if 0 42224857Snwhitehorn} /* indent fix */ 43224857Snwhitehorn 44224857Snwhitehorn#endif 45224857Snwhitehorn 46224857Snwhitehorn/* libusb enums */ 47224857Snwhitehorn 48224857Snwhitehornenum libusb_class_code { 49224857Snwhitehorn LIBUSB_CLASS_PER_INTERFACE = 0, 50224857Snwhitehorn LIBUSB_CLASS_AUDIO = 1, 51224857Snwhitehorn LIBUSB_CLASS_COMM = 2, 52224857Snwhitehorn LIBUSB_CLASS_HID = 3, 53224857Snwhitehorn LIBUSB_CLASS_PTP = 6, 54224857Snwhitehorn LIBUSB_CLASS_IMAGE = 6, 55224857Snwhitehorn LIBUSB_CLASS_PRINTER = 7, 56224857Snwhitehorn LIBUSB_CLASS_MASS_STORAGE = 8, 57224857Snwhitehorn LIBUSB_CLASS_HUB = 9, 58224857Snwhitehorn LIBUSB_CLASS_DATA = 10, 59224857Snwhitehorn LIBUSB_CLASS_SMART_CARD = 11, 60224857Snwhitehorn LIBUSB_CLASS_CONTENT_SECURITY = 13, 61224857Snwhitehorn LIBUSB_CLASS_VIDEO = 14, 62224857Snwhitehorn LIBUSB_CLASS_PERSONAL_HEALTHCARE = 15, 63224857Snwhitehorn LIBUSB_CLASS_DIAGNOSTIC_DEVICE = 0xdc, 64224857Snwhitehorn LIBUSB_CLASS_WIRELESS = 0xe0, 65224857Snwhitehorn LIBUSB_CLASS_APPLICATION = 0xfe, 66224857Snwhitehorn LIBUSB_CLASS_VENDOR_SPEC = 0xff, 67224857Snwhitehorn}; 68224857Snwhitehorn 69224857Snwhitehornenum libusb_descriptor_type { 70224857Snwhitehorn LIBUSB_DT_DEVICE = 0x01, 71224857Snwhitehorn LIBUSB_DT_CONFIG = 0x02, 72224857Snwhitehorn LIBUSB_DT_STRING = 0x03, 73224857Snwhitehorn LIBUSB_DT_INTERFACE = 0x04, 74224857Snwhitehorn LIBUSB_DT_ENDPOINT = 0x05, 75224857Snwhitehorn LIBUSB_DT_HID = 0x21, 76224857Snwhitehorn LIBUSB_DT_REPORT = 0x22, 77224857Snwhitehorn LIBUSB_DT_PHYSICAL = 0x23, 78224857Snwhitehorn LIBUSB_DT_HUB = 0x29, 79224857Snwhitehorn LIBUSB_DT_BOS = 0x0f, 80224857Snwhitehorn LIBUSB_DT_DEVICE_CAPABILITY = 0x10, 81224857Snwhitehorn LIBUSB_DT_SS_ENDPOINT_COMPANION = 0x30, 82224857Snwhitehorn}; 83224857Snwhitehorn 84224857Snwhitehornenum libusb_device_capability_type { 85224857Snwhitehorn LIBUSB_WIRELESS_USB_DEVICE_CAPABILITY = 0x1, 86224857Snwhitehorn LIBUSB_USB_2_0_EXTENSION_DEVICE_CAPABILITY = 0x2, 87224857Snwhitehorn LIBUSB_SS_USB_DEVICE_CAPABILITY = 0x3, 88224857Snwhitehorn LIBUSB_CONTAINER_ID_DEVICE_CAPABILITY = 0x4, 89224857Snwhitehorn}; 90224857Snwhitehorn 91224857Snwhitehorn#define LIBUSB_DT_DEVICE_SIZE 18 92224857Snwhitehorn#define LIBUSB_DT_CONFIG_SIZE 9 93224857Snwhitehorn#define LIBUSB_DT_INTERFACE_SIZE 9 94224857Snwhitehorn#define LIBUSB_DT_ENDPOINT_SIZE 7 95224857Snwhitehorn#define LIBUSB_DT_ENDPOINT_AUDIO_SIZE 9 96224857Snwhitehorn#define LIBUSB_DT_HUB_NONVAR_SIZE 7 97224857Snwhitehorn#define LIBUSB_DT_SS_ENDPOINT_COMPANION_SIZE 6 98224857Snwhitehorn#define LIBUSB_DT_BOS_SIZE 5 99224857Snwhitehorn#define LIBUSB_USB_2_0_EXTENSION_DEVICE_CAPABILITY_SIZE 7 100224857Snwhitehorn#define LIBUSB_SS_USB_DEVICE_CAPABILITY_SIZE 10 101224857Snwhitehorn 102224857Snwhitehorn#define LIBUSB_ENDPOINT_ADDRESS_MASK 0x0f 103224857Snwhitehorn#define LIBUSB_ENDPOINT_DIR_MASK 0x80 104224857Snwhitehorn 105224857Snwhitehornenum libusb_endpoint_direction { 106224857Snwhitehorn LIBUSB_ENDPOINT_IN = 0x80, 107224857Snwhitehorn LIBUSB_ENDPOINT_OUT = 0x00, 108224857Snwhitehorn}; 109224857Snwhitehorn 110224857Snwhitehorn#define LIBUSB_TRANSFER_TYPE_MASK 0x03 111224857Snwhitehorn 112224857Snwhitehornenum libusb_transfer_type { 113224857Snwhitehorn LIBUSB_TRANSFER_TYPE_CONTROL = 0, 114224857Snwhitehorn LIBUSB_TRANSFER_TYPE_ISOCHRONOUS = 1, 115224857Snwhitehorn LIBUSB_TRANSFER_TYPE_BULK = 2, 116224857Snwhitehorn LIBUSB_TRANSFER_TYPE_INTERRUPT = 3, 117224857Snwhitehorn}; 118224857Snwhitehorn 119224857Snwhitehornenum libusb_standard_request { 120224857Snwhitehorn LIBUSB_REQUEST_GET_STATUS = 0x00, 121224857Snwhitehorn LIBUSB_REQUEST_CLEAR_FEATURE = 0x01, 122224857Snwhitehorn LIBUSB_REQUEST_SET_FEATURE = 0x03, 123224857Snwhitehorn LIBUSB_REQUEST_SET_ADDRESS = 0x05, 124224857Snwhitehorn LIBUSB_REQUEST_GET_DESCRIPTOR = 0x06, 125224857Snwhitehorn LIBUSB_REQUEST_SET_DESCRIPTOR = 0x07, 126224857Snwhitehorn LIBUSB_REQUEST_GET_CONFIGURATION = 0x08, 127224857Snwhitehorn LIBUSB_REQUEST_SET_CONFIGURATION = 0x09, 128224857Snwhitehorn LIBUSB_REQUEST_GET_INTERFACE = 0x0A, 129224857Snwhitehorn LIBUSB_REQUEST_SET_INTERFACE = 0x0B, 130224857Snwhitehorn LIBUSB_REQUEST_SYNCH_FRAME = 0x0C, 131224857Snwhitehorn LIBUSB_REQUEST_SET_SEL = 0x30, 132224857Snwhitehorn LIBUSB_REQUEST_SET_ISOCH_DELAY = 0x31, 133224857Snwhitehorn}; 134224857Snwhitehorn 135224857Snwhitehornenum libusb_request_type { 136224857Snwhitehorn LIBUSB_REQUEST_TYPE_STANDARD = (0x00 << 5), 137224857Snwhitehorn LIBUSB_REQUEST_TYPE_CLASS = (0x01 << 5), 138224857Snwhitehorn LIBUSB_REQUEST_TYPE_VENDOR = (0x02 << 5), 139224857Snwhitehorn LIBUSB_REQUEST_TYPE_RESERVED = (0x03 << 5), 140224857Snwhitehorn}; 141224857Snwhitehorn 142224857Snwhitehornenum libusb_request_recipient { 143224857Snwhitehorn LIBUSB_RECIPIENT_DEVICE = 0x00, 144224857Snwhitehorn LIBUSB_RECIPIENT_INTERFACE = 0x01, 145224857Snwhitehorn LIBUSB_RECIPIENT_ENDPOINT = 0x02, 146224857Snwhitehorn LIBUSB_RECIPIENT_OTHER = 0x03, 147224857Snwhitehorn}; 148224857Snwhitehorn 149224857Snwhitehorn#define LIBUSB_ISO_SYNC_TYPE_MASK 0x0C 150224857Snwhitehorn 151224857Snwhitehornenum libusb_iso_sync_type { 152224857Snwhitehorn LIBUSB_ISO_SYNC_TYPE_NONE = 0, 153224857Snwhitehorn LIBUSB_ISO_SYNC_TYPE_ASYNC = 1, 154224857Snwhitehorn LIBUSB_ISO_SYNC_TYPE_ADAPTIVE = 2, 155224857Snwhitehorn LIBUSB_ISO_SYNC_TYPE_SYNC = 3, 156224857Snwhitehorn}; 157224857Snwhitehorn 158224857Snwhitehorn#define LIBUSB_ISO_USAGE_TYPE_MASK 0x30 159224857Snwhitehorn 160224857Snwhitehornenum libusb_iso_usage_type { 161224857Snwhitehorn LIBUSB_ISO_USAGE_TYPE_DATA = 0, 162224857Snwhitehorn LIBUSB_ISO_USAGE_TYPE_FEEDBACK = 1, 163224857Snwhitehorn LIBUSB_ISO_USAGE_TYPE_IMPLICIT = 2, 164224857Snwhitehorn}; 165224857Snwhitehorn 166224857Snwhitehornenum libusb_error { 167224857Snwhitehorn LIBUSB_SUCCESS = 0, 168224857Snwhitehorn LIBUSB_ERROR_IO = -1, 169224857Snwhitehorn LIBUSB_ERROR_INVALID_PARAM = -2, 170224857Snwhitehorn LIBUSB_ERROR_ACCESS = -3, 171224857Snwhitehorn LIBUSB_ERROR_NO_DEVICE = -4, 172224857Snwhitehorn LIBUSB_ERROR_NOT_FOUND = -5, 173224857Snwhitehorn LIBUSB_ERROR_BUSY = -6, 174224857Snwhitehorn LIBUSB_ERROR_TIMEOUT = -7, 175224857Snwhitehorn LIBUSB_ERROR_OVERFLOW = -8, 176224857Snwhitehorn LIBUSB_ERROR_PIPE = -9, 177224857Snwhitehorn LIBUSB_ERROR_INTERRUPTED = -10, 178224857Snwhitehorn LIBUSB_ERROR_NO_MEM = -11, 179224857Snwhitehorn LIBUSB_ERROR_NOT_SUPPORTED = -12, 180224857Snwhitehorn LIBUSB_ERROR_OTHER = -99, 181224857Snwhitehorn}; 182224857Snwhitehorn 183224857Snwhitehornenum libusb_speed { 184224857Snwhitehorn LIBUSB_SPEED_UNKNOWN = 0, 185224857Snwhitehorn LIBUSB_SPEED_LOW = 1, 186224857Snwhitehorn LIBUSB_SPEED_FULL = 2, 187224857Snwhitehorn LIBUSB_SPEED_HIGH = 3, 188224857Snwhitehorn LIBUSB_SPEED_SUPER = 4, 189224857Snwhitehorn}; 190224857Snwhitehorn 191224857Snwhitehornenum libusb_transfer_status { 192224857Snwhitehorn LIBUSB_TRANSFER_COMPLETED, 193224857Snwhitehorn LIBUSB_TRANSFER_ERROR, 194224857Snwhitehorn LIBUSB_TRANSFER_TIMED_OUT, 195224857Snwhitehorn LIBUSB_TRANSFER_CANCELLED, 196224857Snwhitehorn LIBUSB_TRANSFER_STALL, 197224857Snwhitehorn LIBUSB_TRANSFER_NO_DEVICE, 198224857Snwhitehorn LIBUSB_TRANSFER_OVERFLOW, 199224857Snwhitehorn}; 200224857Snwhitehorn 201224857Snwhitehornenum libusb_transfer_flags { 202224857Snwhitehorn LIBUSB_TRANSFER_SHORT_NOT_OK = 1 << 0, 203224857Snwhitehorn LIBUSB_TRANSFER_FREE_BUFFER = 1 << 1, 204224857Snwhitehorn LIBUSB_TRANSFER_FREE_TRANSFER = 1 << 2, 205224857Snwhitehorn}; 206224857Snwhitehorn 207224857Snwhitehornenum libusb_log_level { 208224857Snwhitehorn LIBUSB_LOG_LEVEL_NONE = 0, 209224857Snwhitehorn LIBUSB_LOG_LEVEL_ERROR, 210224857Snwhitehorn LIBUSB_LOG_LEVEL_WARNING, 211224857Snwhitehorn LIBUSB_LOG_LEVEL_INFO, 212224857Snwhitehorn LIBUSB_LOG_LEVEL_DEBUG 213224857Snwhitehorn}; 214224857Snwhitehorn 215224857Snwhitehorn/* XXX */ 216224857Snwhitehorn/* libusb_set_debug should take parameters from libusb_log_level 217224857Snwhitehorn * above according to 218224857Snwhitehorn * http://libusb.sourceforge.net/api-1.0/group__lib.html 219224857Snwhitehorn */ 220224857Snwhitehornenum libusb_debug_level { 221224857Snwhitehorn LIBUSB_DEBUG_NO=0, 222224857Snwhitehorn LIBUSB_DEBUG_FUNCTION=1, 223224857Snwhitehorn LIBUSB_DEBUG_TRANSFER=2, 224224857Snwhitehorn}; 225224857Snwhitehorn 226224857Snwhitehorn/* libusb structures */ 227224857Snwhitehorn 228224857Snwhitehornstruct libusb_context; 229224857Snwhitehornstruct libusb_device; 230224857Snwhitehornstruct libusb_transfer; 231224857Snwhitehornstruct libusb_device_handle; 232224857Snwhitehorn 233224857Snwhitehornstruct libusb_pollfd { 234224857Snwhitehorn int fd; 235224857Snwhitehorn short events; 236224857Snwhitehorn}; 237224857Snwhitehorn 238224857Snwhitehorntypedef struct libusb_context libusb_context; 239224857Snwhitehorntypedef struct libusb_device libusb_device; 240224857Snwhitehorntypedef struct libusb_device_handle libusb_device_handle; 241224857Snwhitehorntypedef struct libusb_pollfd libusb_pollfd; 242224857Snwhitehorntypedef void (*libusb_pollfd_added_cb) (int fd, short events, void *user_data); 243224857Snwhitehorntypedef void (*libusb_pollfd_removed_cb) (int fd, void *user_data); 244224857Snwhitehorn 245224857Snwhitehorntypedef struct libusb_device_descriptor { 246224857Snwhitehorn uint8_t bLength; 247224857Snwhitehorn uint8_t bDescriptorType; 248224857Snwhitehorn uint16_t bcdUSB; 249224857Snwhitehorn uint8_t bDeviceClass; 250224857Snwhitehorn uint8_t bDeviceSubClass; 251224857Snwhitehorn uint8_t bDeviceProtocol; 252224857Snwhitehorn uint8_t bMaxPacketSize0; 253224857Snwhitehorn uint16_t idVendor; 254224857Snwhitehorn uint16_t idProduct; 255224857Snwhitehorn uint16_t bcdDevice; 256224857Snwhitehorn uint8_t iManufacturer; 257224857Snwhitehorn uint8_t iProduct; 258224857Snwhitehorn uint8_t iSerialNumber; 259224857Snwhitehorn uint8_t bNumConfigurations; 260224857Snwhitehorn} libusb_device_descriptor; 261224857Snwhitehorn 262224857Snwhitehorntypedef struct libusb_endpoint_descriptor { 263224857Snwhitehorn uint8_t bLength; 264224857Snwhitehorn uint8_t bDescriptorType; 265224857Snwhitehorn uint8_t bEndpointAddress; 266224857Snwhitehorn uint8_t bmAttributes; 267224857Snwhitehorn uint16_t wMaxPacketSize; 268224857Snwhitehorn uint8_t bInterval; 269224857Snwhitehorn uint8_t bRefresh; 270224857Snwhitehorn uint8_t bSynchAddress; 271224857Snwhitehorn uint8_t *extra; 272224857Snwhitehorn int extra_length; 273224857Snwhitehorn} libusb_endpoint_descriptor __aligned(sizeof(void *)); 274224857Snwhitehorn 275224857Snwhitehorntypedef struct libusb_ss_endpoint_companion_descriptor { 276224857Snwhitehorn uint8_t bLength; 277224857Snwhitehorn uint8_t bDescriptorType; 278224857Snwhitehorn uint8_t bMaxBurst; 279224857Snwhitehorn uint8_t bmAttributes; 280224857Snwhitehorn uint16_t wBytesPerInterval; 281224857Snwhitehorn} libusb_ss_endpoint_companion_descriptor __aligned(sizeof(void *)); 282224857Snwhitehorn 283224857Snwhitehorntypedef struct libusb_interface_descriptor { 284224857Snwhitehorn uint8_t bLength; 285224857Snwhitehorn uint8_t bDescriptorType; 286224857Snwhitehorn uint8_t bInterfaceNumber; 287224857Snwhitehorn uint8_t bAlternateSetting; 288224857Snwhitehorn uint8_t bNumEndpoints; 289224857Snwhitehorn uint8_t bInterfaceClass; 290224857Snwhitehorn uint8_t bInterfaceSubClass; 291224857Snwhitehorn uint8_t bInterfaceProtocol; 292224857Snwhitehorn uint8_t iInterface; 293224857Snwhitehorn struct libusb_endpoint_descriptor *endpoint; 294224857Snwhitehorn uint8_t *extra; 295224857Snwhitehorn int extra_length; 296224857Snwhitehorn} libusb_interface_descriptor __aligned(sizeof(void *)); 297224857Snwhitehorn 298224857Snwhitehorntypedef struct libusb_interface { 299224857Snwhitehorn struct libusb_interface_descriptor *altsetting; 300224857Snwhitehorn int num_altsetting; 301224857Snwhitehorn} libusb_interface __aligned(sizeof(void *)); 302224857Snwhitehorn 303224857Snwhitehorntypedef struct libusb_config_descriptor { 304224857Snwhitehorn uint8_t bLength; 305224857Snwhitehorn uint8_t bDescriptorType; 306224857Snwhitehorn uint16_t wTotalLength; 307224857Snwhitehorn uint8_t bNumInterfaces; 308224857Snwhitehorn uint8_t bConfigurationValue; 309224857Snwhitehorn uint8_t iConfiguration; 310224857Snwhitehorn uint8_t bmAttributes; 311224857Snwhitehorn uint8_t MaxPower; 312224857Snwhitehorn struct libusb_interface *interface; 313224857Snwhitehorn uint8_t *extra; 314224857Snwhitehorn int extra_length; 315224857Snwhitehorn} libusb_config_descriptor __aligned(sizeof(void *)); 316224857Snwhitehorn 317224857Snwhitehorntypedef struct libusb_usb_2_0_device_capability_descriptor { 318224857Snwhitehorn uint8_t bLength; 319224857Snwhitehorn uint8_t bDescriptorType; 320224857Snwhitehorn uint8_t bDevCapabilityType; 321224857Snwhitehorn uint32_t bmAttributes; 322224857Snwhitehorn#define LIBUSB_USB_2_0_CAPABILITY_LPM_SUPPORT (1 << 1) 323224857Snwhitehorn} libusb_usb_2_0_device_capability_descriptor __aligned(sizeof(void *)); 324224857Snwhitehorn 325224857Snwhitehorntypedef struct libusb_ss_usb_device_capability_descriptor { 326224857Snwhitehorn uint8_t bLength; 327224857Snwhitehorn uint8_t bDescriptorType; 328224857Snwhitehorn uint8_t bDevCapabilityType; 329224857Snwhitehorn uint8_t bmAttributes; 330224857Snwhitehorn#define LIBUSB_SS_USB_CAPABILITY_LPM_SUPPORT (1 << 1) 331224857Snwhitehorn uint16_t wSpeedSupported; 332224857Snwhitehorn#define LIBUSB_CAPABILITY_LOW_SPEED_OPERATION (1) 333224857Snwhitehorn#define LIBUSB_CAPABILITY_FULL_SPEED_OPERATION (1 << 1) 334224857Snwhitehorn#define LIBUSB_CAPABILITY_HIGH_SPEED_OPERATION (1 << 2) 335224857Snwhitehorn#define LIBUSB_CAPABILITY_5GBPS_OPERATION (1 << 3) 336224857Snwhitehorn uint8_t bFunctionalitySupport; 337224857Snwhitehorn uint8_t bU1DevExitLat; 338224857Snwhitehorn uint16_t wU2DevExitLat; 339224857Snwhitehorn} libusb_ss_usb_device_capability_descriptor __aligned(sizeof(void *)); 340224857Snwhitehorn 341224857Snwhitehorntypedef struct libusb_bos_descriptor { 342224857Snwhitehorn uint8_t bLength; 343224857Snwhitehorn uint8_t bDescriptorType; 344224857Snwhitehorn uint16_t wTotalLength; 345224857Snwhitehorn uint8_t bNumDeviceCapabilities; 346224857Snwhitehorn struct libusb_usb_2_0_device_capability_descriptor *usb_2_0_ext_cap; 347224857Snwhitehorn struct libusb_ss_usb_device_capability_descriptor *ss_usb_cap; 348224857Snwhitehorn} libusb_bos_descriptor __aligned(sizeof(void *)); 349224857Snwhitehorn 350224857Snwhitehorntypedef struct libusb_control_setup { 351224857Snwhitehorn uint8_t bmRequestType; 352224857Snwhitehorn uint8_t bRequest; 353224857Snwhitehorn uint16_t wValue; 354224857Snwhitehorn uint16_t wIndex; 355224857Snwhitehorn uint16_t wLength; 356224857Snwhitehorn} libusb_control_setup; 357224857Snwhitehorn 358224857Snwhitehorn#define LIBUSB_CONTROL_SETUP_SIZE 8 /* bytes */ 359224857Snwhitehorn 360224857Snwhitehorntypedef struct libusb_iso_packet_descriptor { 361224857Snwhitehorn uint32_t length; 362224857Snwhitehorn uint32_t actual_length; 363224857Snwhitehorn enum libusb_transfer_status status; 364224857Snwhitehorn} libusb_iso_packet_descriptor __aligned(sizeof(void *)); 365224857Snwhitehorn 366224857Snwhitehorntypedef void (*libusb_transfer_cb_fn) (struct libusb_transfer *transfer); 367224857Snwhitehorn 368224857Snwhitehorntypedef struct libusb_transfer { 369224857Snwhitehorn libusb_device_handle *dev_handle; 370224857Snwhitehorn uint8_t flags; 371224857Snwhitehorn uint8_t endpoint; 372251874Sscottl uint8_t type; 373251874Sscottl uint32_t timeout; 374224857Snwhitehorn enum libusb_transfer_status status; 375224857Snwhitehorn int length; 376224857Snwhitehorn int actual_length; 377224857Snwhitehorn libusb_transfer_cb_fn callback; 378224857Snwhitehorn void *user_data; 379224857Snwhitehorn uint8_t *buffer; 380224857Snwhitehorn int num_iso_packets; 381224857Snwhitehorn struct libusb_iso_packet_descriptor iso_packet_desc[0]; 382224857Snwhitehorn} libusb_transfer __aligned(sizeof(void *)); 383224857Snwhitehorn 384224857Snwhitehorn/* Library initialisation */ 385224857Snwhitehorn 386224857Snwhitehornvoid libusb_set_debug(libusb_context * ctx, int level); 387224857Snwhitehornconst char *libusb_strerror(int code); 388224857Snwhitehornconst char *libusb_error_name(int code); 389224857Snwhitehornint libusb_init(libusb_context ** context); 390224857Snwhitehornvoid libusb_exit(struct libusb_context *ctx); 391224857Snwhitehorn 392224857Snwhitehorn/* Device handling and enumeration */ 393224857Snwhitehorn 394224857Snwhitehornssize_t libusb_get_device_list(libusb_context * ctx, libusb_device *** list); 395224857Snwhitehornvoid libusb_free_device_list(libusb_device ** list, int unref_devices); 396224857Snwhitehornuint8_t libusb_get_bus_number(libusb_device * dev); 397224857Snwhitehornint libusb_get_port_numbers(libusb_device *dev, uint8_t *buf, uint8_t bufsize); 398224857Snwhitehornint libusb_get_port_path(libusb_context *ctx, libusb_device *dev, uint8_t *buf, uint8_t bufsize); 399224857Snwhitehornuint8_t libusb_get_device_address(libusb_device * dev); 400224857Snwhitehornenum libusb_speed libusb_get_device_speed(libusb_device * dev); 401224857Snwhitehornint libusb_clear_halt(libusb_device_handle *devh, uint8_t endpoint); 402224857Snwhitehornint libusb_get_max_packet_size(libusb_device * dev, uint8_t endpoint); 403224857Snwhitehornint libusb_get_max_iso_packet_size(libusb_device * dev, uint8_t endpoint); 404224857Snwhitehornlibusb_device *libusb_ref_device(libusb_device * dev); 405224857Snwhitehornvoid libusb_unref_device(libusb_device * dev); 406224857Snwhitehornint libusb_open(libusb_device * dev, libusb_device_handle ** devh); 407224857Snwhitehornlibusb_device_handle *libusb_open_device_with_vid_pid(libusb_context * ctx, uint16_t vendor_id, uint16_t product_id); 408224857Snwhitehornvoid libusb_close(libusb_device_handle * devh); 409224857Snwhitehornlibusb_device *libusb_get_device(libusb_device_handle * devh); 410224857Snwhitehornint libusb_get_configuration(libusb_device_handle * devh, int *config); 411224857Snwhitehornint libusb_set_configuration(libusb_device_handle * devh, int configuration); 412224857Snwhitehornint libusb_claim_interface(libusb_device_handle * devh, int interface_number); 413224857Snwhitehornint libusb_release_interface(libusb_device_handle * devh, int interface_number); 414224857Snwhitehornint libusb_reset_device(libusb_device_handle * devh); 415224857Snwhitehornint libusb_check_connected(libusb_device_handle * devh); 416224857Snwhitehornint libusb_kernel_driver_active(libusb_device_handle * devh, int interface); 417224857Snwhitehornint libusb_get_driver_np(libusb_device_handle * devh, int interface, char *name, int namelen); 418224857Snwhitehornint libusb_get_driver(libusb_device_handle * devh, int interface, char *name, int namelen); 419224857Snwhitehornint libusb_detach_kernel_driver_np(libusb_device_handle * devh, int interface); 420224857Snwhitehornint libusb_detach_kernel_driver(libusb_device_handle * devh, int interface); 421224857Snwhitehornint libusb_attach_kernel_driver(libusb_device_handle * devh, int interface); 422224857Snwhitehornint libusb_set_interface_alt_setting(libusb_device_handle * devh, int interface_number, int alternate_setting); 423224857Snwhitehorn 424224857Snwhitehorn/* USB Descriptors */ 425224857Snwhitehorn 426224857Snwhitehornint libusb_get_device_descriptor(libusb_device * dev, struct libusb_device_descriptor *desc); 427224857Snwhitehornint libusb_get_active_config_descriptor(libusb_device * dev, struct libusb_config_descriptor **config); 428224857Snwhitehornint libusb_get_config_descriptor(libusb_device * dev, uint8_t config_index, struct libusb_config_descriptor **config); 429224857Snwhitehornint libusb_get_config_descriptor_by_value(libusb_device * dev, uint8_t bConfigurationValue, struct libusb_config_descriptor **config); 430224857Snwhitehornvoid libusb_free_config_descriptor(struct libusb_config_descriptor *config); 431224857Snwhitehornint libusb_get_string_descriptor(libusb_device_handle * devh, uint8_t desc_index, uint16_t langid, unsigned char *data, int length); 432224857Snwhitehornint libusb_get_string_descriptor_ascii(libusb_device_handle * devh, uint8_t desc_index, uint8_t *data, int length); 433224857Snwhitehornint libusb_get_descriptor(libusb_device_handle * devh, uint8_t desc_type, uint8_t desc_index, uint8_t *data, int length); 434224857Snwhitehornint libusb_parse_ss_endpoint_comp(const void *buf, int len, struct libusb_ss_endpoint_companion_descriptor **ep_comp); 435224857Snwhitehornvoid libusb_free_ss_endpoint_comp(struct libusb_ss_endpoint_companion_descriptor *ep_comp); 436224857Snwhitehornint libusb_parse_bos_descriptor(const void *buf, int len, struct libusb_bos_descriptor **bos); 437224857Snwhitehornvoid libusb_free_bos_descriptor(struct libusb_bos_descriptor *bos); 438224857Snwhitehorn 439224857Snwhitehorn/* Asynchronous device I/O */ 440224857Snwhitehorn 441224857Snwhitehornstruct libusb_transfer *libusb_alloc_transfer(int iso_packets); 442224857Snwhitehornvoid libusb_free_transfer(struct libusb_transfer *transfer); 443224857Snwhitehornint libusb_submit_transfer(struct libusb_transfer *transfer); 444224857Snwhitehornint libusb_cancel_transfer(struct libusb_transfer *transfer); 445224857Snwhitehornuint8_t *libusb_get_iso_packet_buffer(struct libusb_transfer *transfer, uint32_t index); 446224857Snwhitehornuint8_t *libusb_get_iso_packet_buffer_simple(struct libusb_transfer *transfer, uint32_t index); 447224857Snwhitehornvoid libusb_set_iso_packet_lengths(struct libusb_transfer *transfer, uint32_t length); 448224857Snwhitehornuint8_t *libusb_control_transfer_get_data(struct libusb_transfer *transfer); 449224857Snwhitehornstruct libusb_control_setup *libusb_control_transfer_get_setup(struct libusb_transfer *transfer); 450224857Snwhitehornvoid libusb_fill_control_setup(uint8_t *buf, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint16_t wLength); 451224857Snwhitehornvoid 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); 452224857Snwhitehornvoid 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); 453224857Snwhitehornvoid 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); 454224857Snwhitehornvoid 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); 455224857Snwhitehorn 456224857Snwhitehorn/* Polling and timing */ 457224857Snwhitehorn 458224857Snwhitehornint libusb_try_lock_events(libusb_context * ctx); 459224857Snwhitehornvoid libusb_lock_events(libusb_context * ctx); 460224857Snwhitehornvoid libusb_unlock_events(libusb_context * ctx); 461224857Snwhitehornint libusb_event_handling_ok(libusb_context * ctx); 462224857Snwhitehornint libusb_event_handler_active(libusb_context * ctx); 463224857Snwhitehornvoid libusb_lock_event_waiters(libusb_context * ctx); 464224857Snwhitehornvoid libusb_unlock_event_waiters(libusb_context * ctx); 465224857Snwhitehornint libusb_wait_for_event(libusb_context * ctx, struct timeval *tv); 466224857Snwhitehornint libusb_handle_events_timeout_completed(libusb_context * ctx, struct timeval *tv, int *completed); 467224857Snwhitehornint libusb_handle_events_completed(libusb_context * ctx, int *completed); 468224857Snwhitehornint libusb_handle_events_timeout(libusb_context * ctx, struct timeval *tv); 469224857Snwhitehornint libusb_handle_events(libusb_context * ctx); 470224857Snwhitehornint libusb_handle_events_locked(libusb_context * ctx, struct timeval *tv); 471224857Snwhitehornint libusb_get_next_timeout(libusb_context * ctx, struct timeval *tv); 472224857Snwhitehornvoid libusb_set_pollfd_notifiers(libusb_context * ctx, libusb_pollfd_added_cb added_cb, libusb_pollfd_removed_cb removed_cb, void *user_data); 473224857Snwhitehornconst struct libusb_pollfd **libusb_get_pollfds(libusb_context * ctx); 474224857Snwhitehorn 475224857Snwhitehorn/* Synchronous device I/O */ 476224857Snwhitehorn 477224857Snwhitehornint 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); 478224857Snwhitehornint libusb_bulk_transfer(libusb_device_handle * devh, uint8_t endpoint, uint8_t *data, int length, int *transferred, uint32_t timeout); 479224857Snwhitehornint libusb_interrupt_transfer(libusb_device_handle * devh, uint8_t endpoint, uint8_t *data, int length, int *transferred, uint32_t timeout); 480224857Snwhitehorn 481224857Snwhitehorn/* Byte-order */ 482224857Snwhitehorn 483224857Snwhitehornuint16_t libusb_cpu_to_le16(uint16_t x); 484224857Snwhitehornuint16_t libusb_le16_to_cpu(uint16_t x); 485224857Snwhitehorn 486224857Snwhitehorn#if 0 487224857Snwhitehorn{ /* indent fix */ 488224857Snwhitehorn#endif 489224857Snwhitehorn#ifdef __cplusplus 490224857Snwhitehorn} 491224857Snwhitehorn 492224857Snwhitehorn#endif 493224857Snwhitehorn 494224857Snwhitehorn#endif /* __LIBUSB_H__ */ 495224857Snwhitehorn