14eaae44dSAndrew Thompson.\" 2a5118bdfSAndrew Thompson.\" Copyright (c) 2009 Sylvestre Gallon 34eaae44dSAndrew Thompson.\" 44eaae44dSAndrew Thompson.\" All rights reserved. 54eaae44dSAndrew Thompson.\" 64eaae44dSAndrew Thompson.\" Redistribution and use in source and binary forms, with or without 74eaae44dSAndrew Thompson.\" modification, are permitted provided that the following conditions 84eaae44dSAndrew Thompson.\" are met: 94eaae44dSAndrew Thompson.\" 1. Redistributions of source code must retain the above copyright 104eaae44dSAndrew Thompson.\" notice, this list of conditions and the following disclaimer. 114eaae44dSAndrew Thompson.\" 2. Redistributions in binary form must reproduce the above copyright 124eaae44dSAndrew Thompson.\" notice, this list of conditions and the following disclaimer in the 134eaae44dSAndrew Thompson.\" documentation and/or other materials provided with the distribution. 144eaae44dSAndrew Thompson.\" 154eaae44dSAndrew Thompson.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 164eaae44dSAndrew Thompson.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 174eaae44dSAndrew Thompson.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 184eaae44dSAndrew Thompson.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 194eaae44dSAndrew Thompson.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 204eaae44dSAndrew Thompson.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 214eaae44dSAndrew Thompson.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 224eaae44dSAndrew Thompson.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 234eaae44dSAndrew Thompson.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 244eaae44dSAndrew Thompson.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 254eaae44dSAndrew Thompson.\" SUCH DAMAGE. 264eaae44dSAndrew Thompson.\" 274eaae44dSAndrew Thompson.\" $FreeBSD$ 284eaae44dSAndrew Thompson.\" 29*04391da3SKyle Evans.Dd June 9, 2020 304eaae44dSAndrew Thompson.Dt LIBUSB 3 314eaae44dSAndrew Thompson.Os 324eaae44dSAndrew Thompson.Sh NAME 334eaae44dSAndrew Thompson.Nm libusb 344eaae44dSAndrew Thompson.Nd "USB access library" 354eaae44dSAndrew Thompson.Sh LIBRARY 3611867070SHans Petter SelaskyUSB access library 3711867070SHans Petter Selasky.Pq libusb, -lusb 384eaae44dSAndrew Thompson.Sh SYNOPSIS 39a5118bdfSAndrew Thompson.In libusb.h 404eaae44dSAndrew Thompson.Sh DESCRIPTION 414eaae44dSAndrew ThompsonThe 424eaae44dSAndrew Thompson.Nm 43a5118bdfSAndrew Thompsonlibrary contains interfaces for directly managing a usb device. 44a5118bdfSAndrew ThompsonThe current implementation supports v1.0 of the libusb API. 45930a4206SHans Petter Selasky.Sh LIBRARY INITIALISATION AND DEINITIALISATION 4614b896ceSHans Petter Selasky.Ft "const struct libusb_version *" 4714b896ceSHans Petter Selasky.Fn libusb_get_version "void" 4814b896ceSHans Petter SelaskyThis function returns version information about LibUSB. 4914b896ceSHans Petter Selasky.Pp 50a5118bdfSAndrew Thompson.Ft int 51930a4206SHans Petter Selasky.Fn libusb_init "libusb_context **ctx" 52c8c1f2ecSHans Petter SelaskyThis function initialises libusb. 5311867070SHans Petter SelaskyIt must be called at the beginning 5411867070SHans Petter Selaskyof the program, before other libusb routines are used. 55c8c1f2ecSHans Petter SelaskyThis function returns 0 on success or LIBUSB_ERROR on 56a5118bdfSAndrew Thompsonfailure. 574eaae44dSAndrew Thompson.Pp 58a5118bdfSAndrew Thompson.Ft void 59a5118bdfSAndrew Thompson.Fn libusb_exit "libusb_context *ctx" 60c8c1f2ecSHans Petter SelaskyDeinitialise libusb. 61c8c1f2ecSHans Petter SelaskyMust be called at the end of the application. 6211867070SHans Petter SelaskyOther libusb routines may not be called after this function. 63a5118bdfSAndrew Thompson.Pp 64*04391da3SKyle Evans.Ft int 65*04391da3SKyle Evans.Fn libusb_has_capability "uint32_t capability" 66*04391da3SKyle EvansThis function checks the runtime capabilities of 67*04391da3SKyle Evans.Nm . 68*04391da3SKyle EvansThis function will return non-zero if the given 69*04391da3SKyle Evans.Fa capability 70*04391da3SKyle Evansis supported, 0 if it is not supported. 71*04391da3SKyle EvansThe valid values for 72*04391da3SKyle Evans.Fa capability 73*04391da3SKyle Evansare: 74*04391da3SKyle Evans.Bl -tag -width LIBUSB_CAP -offset indent 75*04391da3SKyle Evans.It Va LIBUSB_CAP_HAS_CAPABILITY 76*04391da3SKyle Evans.Nm 77*04391da3SKyle Evanssupports 78*04391da3SKyle Evans.Fn libusb_has_capability . 79*04391da3SKyle Evans.It Va LIBUSB_CAP_HAS_HOTPLUG 80*04391da3SKyle Evans.Nm 81*04391da3SKyle Evanssupports hotplug notifications. 82*04391da3SKyle Evans.It Va LIBUSB_CAP_HAS_HID_ACCESS 83*04391da3SKyle Evans.Nm 84*04391da3SKyle Evanscan access HID devices without requiring user intervention. 85*04391da3SKyle Evans.It Va LIBUSB_CAP_SUPPORTS_DETACH_KERNEL_DRIVER 86*04391da3SKyle Evans.Nm 87*04391da3SKyle Evanssupports detaching of the default USB driver with 88*04391da3SKyle Evans.Fn libusb_detach_kernel_driver . 89*04391da3SKyle Evans.El 90*04391da3SKyle Evans.Pp 91698e791aSHans Petter Selasky.Ft const char * 92698e791aSHans Petter Selasky.Fn libusb_strerror "int code" 9311867070SHans Petter SelaskyGet the ASCII representation of the error given by the 94698e791aSHans Petter Selasky.Fa code 95698e791aSHans Petter Selaskyargument. 96c61f2561SHans Petter SelaskyThis function does not return NULL. 97c61f2561SHans Petter Selasky.Pp 98c61f2561SHans Petter Selasky.Ft const char * 99c61f2561SHans Petter Selasky.Fn libusb_error_name "int code" 100c61f2561SHans Petter SelaskyGet the ASCII representation of the error enum given by the 101c61f2561SHans Petter Selasky.Fa code 102c61f2561SHans Petter Selaskyargument. 103c61f2561SHans Petter SelaskyThis function does not return NULL. 104698e791aSHans Petter Selasky.Pp 105a5118bdfSAndrew Thompson.Ft void 106a5118bdfSAndrew Thompson.Fn libusb_set_debug "libusb_context *ctx" "int level" 10711867070SHans Petter SelaskySet the debug level to 10811867070SHans Petter Selasky.Fa level . 109a5118bdfSAndrew Thompson.Pp 110a5118bdfSAndrew Thompson.Ft ssize_t 111a5118bdfSAndrew Thompson.Fn libusb_get_device_list "libusb_context *ctx" "libusb_device ***list" 11211867070SHans Petter SelaskyPopulate 113a5118bdfSAndrew Thompson.Fa list 11411867070SHans Petter Selaskywith the list of usb devices available, adding a reference to each 11511867070SHans Petter Selaskydevice in the list. 11611867070SHans Petter SelaskyAll the list entries created by this 11711867070SHans Petter Selaskyfunction must have their reference counter 11811867070SHans Petter Selaskydecremented when you are done with them, 11911867070SHans Petter Selaskyand the list itself must be freed. 120c8c1f2ecSHans Petter SelaskyThis 12111867070SHans Petter Selaskyfunction returns the number of devices in the list or a LIBUSB_ERROR code. 122a5118bdfSAndrew Thompson.Pp 123a5118bdfSAndrew Thompson.Ft void 124a5118bdfSAndrew Thompson.Fn libusb_free_device_list "libusb_device **list" "int unref_devices" 125c8c1f2ecSHans Petter SelaskyFree the list of devices discovered by libusb_get_device_list. 126c8c1f2ecSHans Petter SelaskyIf 127a5118bdfSAndrew Thompson.Fa unref_device 12811867070SHans Petter Selaskyis set to 1 all devices in the list have their reference 12911867070SHans Petter Selaskycounter decremented once. 130a5118bdfSAndrew Thompson.Pp 131a5118bdfSAndrew Thompson.Ft uint8_t 132a5118bdfSAndrew Thompson.Fn libusb_get_bus_number "libusb_device *dev" 133a5118bdfSAndrew ThompsonReturns the number of the bus contained by the device 134a5118bdfSAndrew Thompson.Fa dev . 135a5118bdfSAndrew Thompson.Pp 1360f2c7066SHans Petter Selasky.Ft uint8_t 1370f2c7066SHans Petter Selasky.Fn libusb_get_port_number "libusb_device *dev" 1380f2c7066SHans Petter SelaskyReturns the port number which the device given by 1390f2c7066SHans Petter Selasky.Fa dev 1400f2c7066SHans Petter Selaskyis attached to. 1410f2c7066SHans Petter Selasky.Pp 1425906bf49SEd Maste.Ft int 143a9205626SEd Maste.Fn libusb_get_port_numbers "libusb_device *dev" "uint8_t *buf" "uint8_t bufsize" 1445906bf49SEd MasteStores, in the buffer 1455906bf49SEd Maste.Fa buf 1465906bf49SEd Masteof size 1475906bf49SEd Maste.Fa bufsize , 1485906bf49SEd Mastethe list of all port numbers from root for the device 1495906bf49SEd Maste.Fa dev . 1505906bf49SEd Maste.Pp 151a9205626SEd Maste.Ft int 152a9205626SEd Maste.Fn libusb_get_port_path "libusb_context *ctx" "libusb_device *dev" "uint8_t *buf" "uint8_t bufsize" 153a9205626SEd MasteDeprecated function equivalent to libusb_get_port_numbers. 154a9205626SEd Maste.Pp 155a5118bdfSAndrew Thompson.Ft uint8_t 156a5118bdfSAndrew Thompson.Fn libusb_get_device_address "libusb_device *dev" 157ca96e26aSHans Petter SelaskyReturns the device_address contained by the device 158a5118bdfSAndrew Thompson.Fa dev . 159a5118bdfSAndrew Thompson.Pp 160ca96e26aSHans Petter Selasky.Ft enum libusb_speed 161ca96e26aSHans Petter Selasky.Fn libusb_get_device_speed "libusb_device *dev" 162ca96e26aSHans Petter SelaskyReturns the wire speed at which the device is connected. 163ca96e26aSHans Petter SelaskySee the LIBUSB_SPEED_XXX enums for more information. 164ca96e26aSHans Petter SelaskyLIBUSB_SPEED_UNKNOWN is returned in case of unknown wire speed. 165ca96e26aSHans Petter Selasky.Pp 166a5118bdfSAndrew Thompson.Ft int 167a5118bdfSAndrew Thompson.Fn libusb_get_max_packet_size "libusb_device *dev" "unsigned char endpoint" 168ca96e26aSHans Petter SelaskyReturns the wMaxPacketSize value on success, LIBUSB_ERROR_NOT_FOUND if the 169a5118bdfSAndrew Thompsonendpoint does not exist and LIBUSB_ERROR_OTHERS on other failure. 170a5118bdfSAndrew Thompson.Pp 171748205a3SHans Petter Selasky.Ft int 172748205a3SHans Petter Selasky.Fn libusb_get_max_iso_packet_size "libusb_device *dev" "unsigned char endpoint" 173748205a3SHans Petter SelaskyReturns the packet size multiplied by the packet multiplier on success, 174748205a3SHans Petter SelaskyLIBUSB_ERROR_NOT_FOUND if the endpoint does not exist and 175748205a3SHans Petter SelaskyLIBUSB_ERROR_OTHERS on other failure. 176748205a3SHans Petter Selasky.Pp 177a5118bdfSAndrew Thompson.Ft libusb_device * 178a5118bdfSAndrew Thompson.Fn libusb_ref_device "libusb_device *dev" 179a5118bdfSAndrew ThompsonIncrement the reference counter of the device 180a5118bdfSAndrew Thompson.Fa dev . 181a5118bdfSAndrew Thompson.Pp 182a5118bdfSAndrew Thompson.Ft void 183a5118bdfSAndrew Thompson.Fn libusb_unref_device "libusb_device *dev" 184a5118bdfSAndrew ThompsonDecrement the reference counter of the device 185a5118bdfSAndrew Thompson.Fa dev . 186a5118bdfSAndrew Thompson.Pp 187a5118bdfSAndrew Thompson.Ft int 188a5118bdfSAndrew Thompson.Fn libusb_open "libusb_device *dev" "libusb_device_handle **devh" 189c8c1f2ecSHans Petter SelaskyOpen a device and obtain a device_handle. 190c8c1f2ecSHans Petter SelaskyReturns 0 on success, 19111867070SHans Petter SelaskyLIBUSB_ERROR_NO_MEM on memory allocation problems, LIBUSB_ERROR_ACCESS 19211867070SHans Petter Selaskyon permissions problems, LIBUSB_ERROR_NO_DEVICE if the device has been 19311867070SHans Petter Selaskydisconnected and a LIBUSB_ERROR code on other errors. 194a5118bdfSAndrew Thompson.Pp 195a5118bdfSAndrew Thompson.Ft libusb_device_handle * 196a5118bdfSAndrew Thompson.Fn libusb_open_device_with_vid_pid "libusb_context *ctx" "uint16_t vid" "uint16_t pid" 19711867070SHans Petter SelaskyA convenience function to open a device by vendor and product IDs 198a5118bdfSAndrew Thompson.Fa vid 1994eaae44dSAndrew Thompsonand 200a5118bdfSAndrew Thompson.Fa pid . 201ca96e26aSHans Petter SelaskyReturns NULL on error. 2024eaae44dSAndrew Thompson.Pp 203a5118bdfSAndrew Thompson.Ft void 204a5118bdfSAndrew Thompson.Fn libusb_close "libusb_device_handle *devh" 205a5118bdfSAndrew ThompsonClose a device handle. 2064eaae44dSAndrew Thompson.Pp 207a5118bdfSAndrew Thompson.Ft libusb_device * 208ca96e26aSHans Petter Selasky.Fn libusb_get_device "libusb_device_handle *devh" 209ca96e26aSHans Petter SelaskyGet the device contained by devh. 210ca96e26aSHans Petter SelaskyReturns NULL on error. 2114eaae44dSAndrew Thompson.Pp 212a5118bdfSAndrew Thompson.Ft int 213a5118bdfSAndrew Thompson.Fn libusb_get_configuration "libusb_device_handle *devh" "int *config" 214a3fb6da9SGlen BarberReturns the value of the current configuration. 215c8c1f2ecSHans Petter SelaskyReturns 0 216a5118bdfSAndrew Thompsonon success, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected 217a5118bdfSAndrew Thompsonand a LIBUSB_ERROR code on error. 2184eaae44dSAndrew Thompson.Pp 219a5118bdfSAndrew Thompson.Ft int 220a5118bdfSAndrew Thompson.Fn libusb_set_configuration "libusb_device_handle *devh" "int config" 22111867070SHans Petter SelaskySet the active configuration to 222a5118bdfSAndrew Thompson.Fa config 223a5118bdfSAndrew Thompsonfor the device contained by 224a5118bdfSAndrew Thompson.Fa devh . 225ca96e26aSHans Petter SelaskyThis function returns 0 on success, LIBUSB_ERROR_NOT_FOUND if the requested 226a5118bdfSAndrew Thompsonconfiguration does not exist, LIBUSB_ERROR_BUSY if the interfaces are currently 227a5118bdfSAndrew Thompsonclaimed, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and a 228a5118bdfSAndrew ThompsonLIBUSB_ERROR code on failure. 2294eaae44dSAndrew Thompson.Pp 230a5118bdfSAndrew Thompson.Ft int 231a5118bdfSAndrew Thompson.Fn libusb_claim_interface "libusb_device_handle *devh" "int interface_number" 232a5118bdfSAndrew ThompsonClaim an interface in a given libusb_handle 233a5118bdfSAndrew Thompson.Fa devh . 234c8c1f2ecSHans Petter SelaskyThis is a non-blocking function. 23511867070SHans Petter SelaskyIt returns 0 on success, LIBUSB_ERROR_NOT_FOUND 236a5118bdfSAndrew Thompsonif the requested interface does not exist, LIBUSB_ERROR_BUSY if a program or 237a5118bdfSAndrew Thompsondriver has claimed the interface, LIBUSB_ERROR_NO_DEVICE if the device has 238a5118bdfSAndrew Thompsonbeen disconnected and a LIBUSB_ERROR code on failure. 2394eaae44dSAndrew Thompson.Pp 240a5118bdfSAndrew Thompson.Ft int 241a5118bdfSAndrew Thompson.Fn libusb_release_interface "libusb_device_handle *devh" "int interface_number" 24211867070SHans Petter SelaskyThis function releases an interface. 24311867070SHans Petter SelaskyAll the claimed interfaces on a device must be released 24411867070SHans Petter Selaskybefore closing the device. 245c8c1f2ecSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NOT_FOUND if the 246799162a6SJoel Dahlinterface was not claimed, LIBUSB_ERROR_NO_DEVICE if the device has been 247a5118bdfSAndrew Thompsondisconnected and LIBUSB_ERROR on failure. 2484eaae44dSAndrew Thompson.Pp 249a5118bdfSAndrew Thompson.Ft int 250a5118bdfSAndrew Thompson.Fn libusb_set_interface_alt_setting "libusb_device_handle *dev" "int interface_number" "int alternate_setting" 251c8c1f2ecSHans Petter SelaskyActivate an alternate setting for an interface. 252c8c1f2ecSHans Petter SelaskyReturns 0 on success, 253a5118bdfSAndrew ThompsonLIBUSB_ERROR_NOT_FOUND if the interface was not claimed or the requested 254a5118bdfSAndrew Thompsonsetting does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been 25511867070SHans Petter Selaskydisconnected and a LIBUSB_ERROR code on failure. 2564eaae44dSAndrew Thompson.Pp 257a5118bdfSAndrew Thompson.Ft int 258a5118bdfSAndrew Thompson.Fn libusb_clear_halt "libusb_device_handle *devh" "unsigned char endpoint" 259c8c1f2ecSHans Petter SelaskyClear an halt/stall for a endpoint. 260c8c1f2ecSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NOT_FOUND 261a5118bdfSAndrew Thompsonif the endpoint does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been 262a5118bdfSAndrew Thompsondisconnected and a LIBUSB_ERROR code on failure. 2634eaae44dSAndrew Thompson.Pp 264a5118bdfSAndrew Thompson.Ft int 265a5118bdfSAndrew Thompson.Fn libusb_reset_device "libusb_device_handle *devh" 266c8c1f2ecSHans Petter SelaskyPerform an USB port reset for an usb device. 267c8c1f2ecSHans Petter SelaskyReturns 0 on success, 268a5118bdfSAndrew ThompsonLIBUSB_ERROR_NOT_FOUND if re-enumeration is required or if the device has 269a5118bdfSAndrew Thompsonbeen disconnected and a LIBUSB_ERROR code on failure. 2704eaae44dSAndrew Thompson.Pp 271a5118bdfSAndrew Thompson.Ft int 272f1b5fa6eSHans Petter Selasky.Fn libusb_check_connected "libusb_device_handle *devh" 27311867070SHans Petter SelaskyTest if the USB device is still connected. 274c8c1f2ecSHans Petter SelaskyReturns 0 on success, 27511867070SHans Petter SelaskyLIBUSB_ERROR_NO_DEVICE if it has been disconnected and a LIBUSB_ERROR 276f1b5fa6eSHans Petter Selaskycode on failure. 277f1b5fa6eSHans Petter Selasky.Pp 278f1b5fa6eSHans Petter Selasky.Ft int 279a5118bdfSAndrew Thompson.Fn libusb_kernel_driver_active "libusb_device_handle *devh" "int interface" 280c8c1f2ecSHans Petter SelaskyDetermine if a driver is active on a interface. 2814d2472aaSHans Petter SelaskyReturns 0 if no kernel driver is active 2824d2472aaSHans Petter Selaskyand 1 if a kernel driver is active, LIBUSB_ERROR_NO_DEVICE 28311867070SHans Petter Selaskyif the device has been disconnected and a LIBUSB_ERROR code on failure. 2844eaae44dSAndrew Thompson.Pp 285a5118bdfSAndrew Thompson.Ft int 286698e791aSHans Petter Selasky.Fn libusb_get_driver "libusb_device_handle *devh" "int interface" "char *name" "int namelen" 287698e791aSHans Petter Selaskyor 288698e791aSHans Petter Selasky.Ft int 289698e791aSHans Petter Selasky.Fn libusb_get_driver_np "libusb_device_handle *devh" "int interface" "char *name" "int namelen" 29011867070SHans Petter SelaskyCopy the name of the driver attached to the given 291698e791aSHans Petter Selasky.Fa device 292698e791aSHans Petter Selaskyand 293698e791aSHans Petter Selasky.Fa interface 29411867070SHans Petter Selaskyinto the buffer 295698e791aSHans Petter Selasky.Fa name 29611867070SHans Petter Selaskyof length 297698e791aSHans Petter Selasky.Fa namelen . 298698e791aSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NOT_FOUND if no kernel driver is attached 299698e791aSHans Petter Selaskyto the given interface and LIBUSB_ERROR_INVALID_PARAM if the interface does 300698e791aSHans Petter Selaskynot exist. 301698e791aSHans Petter SelaskyThis function is non-portable. 302698e791aSHans Petter SelaskyThe buffer pointed to by 303698e791aSHans Petter Selasky.Fa name 304698e791aSHans Petter Selaskyis only zero terminated on success. 305698e791aSHans Petter Selasky.Pp 306698e791aSHans Petter Selasky.Ft int 307a5118bdfSAndrew Thompson.Fn libusb_detach_kernel_driver "libusb_device_handle *devh" "int interface" 308698e791aSHans Petter Selaskyor 309698e791aSHans Petter Selasky.Ft int 310698e791aSHans Petter Selasky.Fn libusb_detach_kernel_driver_np "libusb_device_handle *devh" "int interface" 311698e791aSHans Petter SelaskyDetach a kernel driver from an interface. 31211867070SHans Petter SelaskyThis is needed to claim an interface already claimed by a kernel driver. 313698e791aSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NOT_FOUND if no kernel driver was active, 314c8c1f2ecSHans Petter SelaskyLIBUSB_ERROR_INVALID_PARAM if the interface does not exist, 315c8c1f2ecSHans Petter SelaskyLIBUSB_ERROR_NO_DEVICE if the device has been disconnected 316c8c1f2ecSHans Petter Selaskyand a LIBUSB_ERROR code on failure. 317c8c1f2ecSHans Petter SelaskyThis function is non-portable. 3184eaae44dSAndrew Thompson.Pp 319a5118bdfSAndrew Thompson.Ft int 320a5118bdfSAndrew Thompson.Fn libusb_attach_kernel_driver "libusb_device_handle *devh" "int interface" 32111867070SHans Petter SelaskyRe-attach an interface kernel driver that was previously detached. 322c8c1f2ecSHans Petter SelaskyReturns 0 on success, 323c8c1f2ecSHans Petter SelaskyLIBUSB_ERROR_INVALID_PARAM if the interface does not exist, 324c8c1f2ecSHans Petter SelaskyLIBUSB_ERROR_NO_DEVICE 32511867070SHans Petter Selaskyif the device has been disconnected, LIBUSB_ERROR_BUSY if the driver cannot be 326a5118bdfSAndrew Thompsonattached because the interface is claimed by a program or driver and a 327a5118bdfSAndrew ThompsonLIBUSB_ERROR code on failure. 3285b40d960SHans Petter Selasky.Pp 3295b40d960SHans Petter Selasky.Ft int 3305b40d960SHans Petter Selasky.Fn libusb_set_auto_detach_kernel_driver "libusb_device_handle *devh" "int enable" 3315b40d960SHans Petter SelaskyThis function enables automatic kernel interface driver detach when an 3325b40d960SHans Petter Selaskyinterface is claimed. 3335b40d960SHans Petter SelaskyWhen the interface is restored the kernel driver is allowed to be re-attached. 3345b40d960SHans Petter SelaskyIf the 3355b40d960SHans Petter Selasky.Fa enable 3365b40d960SHans Petter Selaskyargument is non-zero the feature is enabled. 3375b40d960SHans Petter SelaskyElse disabled. 3385b40d960SHans Petter SelaskyReturns 0 on success and a LIBUSB_ERROR code on 3395b40d960SHans Petter Selaskyfailure. 340a5118bdfSAndrew Thompson.Sh USB DESCRIPTORS 341a5118bdfSAndrew Thompson.Ft int 342a5118bdfSAndrew Thompson.Fn libusb_get_device_descriptor "libusb_device *dev" "libusb_device_descriptor *desc" 343a5118bdfSAndrew ThompsonGet the USB device descriptor for the device 344a5118bdfSAndrew Thompson.Fa dev . 345c8c1f2ecSHans Petter SelaskyThis is a non-blocking function. 346c8c1f2ecSHans Petter SelaskyReturns 0 on success and a LIBUSB_ERROR code on 347a5118bdfSAndrew Thompsonfailure. 3484eaae44dSAndrew Thompson.Pp 349a5118bdfSAndrew Thompson.Ft int 350cb0df9e8SHans Petter Selasky.Fn libusb_get_active_config_descriptor "libusb_device *dev" "struct libusb_config_descriptor **config" 351c8c1f2ecSHans Petter SelaskyGet the USB configuration descriptor for the active configuration. 352c8c1f2ecSHans Petter SelaskyReturns 0 on 35311867070SHans Petter Selaskysuccess, LIBUSB_ERROR_NOT_FOUND if the device is in 35411867070SHans Petter Selaskyan unconfigured state 35511867070SHans Petter Selaskyand a LIBUSB_ERROR code on error. 3564eaae44dSAndrew Thompson.Pp 357a5118bdfSAndrew Thompson.Ft int 358a5118bdfSAndrew Thompson.Fn libusb_get_config_descriptor "libusb_device *dev" "uint8_t config_index" "libusb_config_descriptor **config" 35911867070SHans Petter SelaskyGet a USB configuration descriptor based on its index 360a5118bdfSAndrew Thompson.Fa idx . 361a5118bdfSAndrew ThompsonReturns 0 on success, LIBUSB_ERROR_NOT_FOUND if the configuration does not exist 36211867070SHans Petter Selaskyand a LIBUSB_ERROR code on error. 363545b01adSAndrew Thompson.Pp 364a5118bdfSAndrew Thompson.Ft int 365a5118bdfSAndrew Thompson.Fn libusb_get_config_descriptor_by_value "libusb_device *dev" "uint8 bConfigurationValue" "libusb_config_descriptor **config" 366c8c1f2ecSHans Petter SelaskyGet a USB configuration descriptor with a specific bConfigurationValue. 367c8c1f2ecSHans Petter SelaskyThis is 36811867070SHans Petter Selaskya non-blocking function which does not send a request through the device. 369c8c1f2ecSHans Petter SelaskyReturns 0 370c8c1f2ecSHans Petter Selaskyon success, LIBUSB_ERROR_NOT_FOUND if the configuration 37111867070SHans Petter Selaskydoes not exist and a 372a5118bdfSAndrew ThompsonLIBUSB_ERROR code on failure. 3734eaae44dSAndrew Thompson.Pp 374a5118bdfSAndrew Thompson.Ft void 375390065b1SAlfred Perlstein.Fn libusb_free_config_descriptor "libusb_config_descriptor *config" 376a5118bdfSAndrew ThompsonFree a configuration descriptor. 3774eaae44dSAndrew Thompson.Pp 378a5118bdfSAndrew Thompson.Ft int 37978ed0e49SHans Petter Selasky.Fn libusb_get_string_descriptor "libusb_device_handle *devh" "uint8_t desc_idx" "uint16_t langid" "unsigned char *data" "int length" 38078ed0e49SHans Petter SelaskyRetrieve a string descriptor in raw format. 38178ed0e49SHans Petter SelaskyReturns the number of bytes actually transferred on success 38278ed0e49SHans Petter Selaskyor a negative LIBUSB_ERROR code on failure. 38378ed0e49SHans Petter Selasky.Pp 38478ed0e49SHans Petter Selasky.Ft int 385a5118bdfSAndrew Thompson.Fn libusb_get_string_descriptor_ascii "libusb_device_handle *devh" "uint8_t desc_idx" "unsigned char *data" "int length" 38611867070SHans Petter SelaskyRetrieve a string descriptor in C style ASCII. 38711867070SHans Petter SelaskyReturns the positive number of bytes in the resulting ASCII string 388c8c1f2ecSHans Petter Selaskyon success and a LIBUSB_ERROR code on failure. 3894eaae44dSAndrew Thompson.Pp 3904c0392e6SHans Petter Selasky.Ft int 3914c0392e6SHans Petter Selasky.Fn libusb_parse_ss_endpoint_comp "const void *buf" "int len" "libusb_ss_endpoint_companion_descriptor **ep_comp" 3924c0392e6SHans Petter SelaskyThis function parses the USB 3.0 endpoint companion descriptor in host endian format pointed to by 3934c0392e6SHans Petter Selasky.Fa buf 3944c0392e6SHans Petter Selaskyand having a length of 3954c0392e6SHans Petter Selasky.Fa len . 3964c0392e6SHans Petter SelaskyTypically these arguments are the extra and extra_length fields of the 3974c0392e6SHans Petter Selaskyendpoint descriptor. 3984c0392e6SHans Petter SelaskyOn success the pointer to resulting descriptor is stored at the location given by 3994c0392e6SHans Petter Selasky.Fa ep_comp . 4004c0392e6SHans Petter SelaskyReturns zero on success and a LIBUSB_ERROR code on failure. 4014c0392e6SHans Petter SelaskyOn success the parsed USB 3.0 endpoint companion descriptor must be 4024c0392e6SHans Petter Selaskyfreed using the libusb_free_ss_endpoint_comp function. 4034c0392e6SHans Petter Selasky.Pp 4044c0392e6SHans Petter Selasky.Ft void 4054c0392e6SHans Petter Selasky.Fn libusb_free_ss_endpoint_comp "libusb_ss_endpoint_companion_descriptor *ep_comp" 40637d0636aSHans Petter SelaskyThis function is NULL safe and frees a parsed USB 3.0 endpoint companion descriptor given by 40737d0636aSHans Petter Selasky.Fa ep_comp . 40837d0636aSHans Petter Selasky.Pp 40937d0636aSHans Petter Selasky.Ft int 41037d0636aSHans Petter Selasky.Fn libusb_get_ss_endpoint_companion_descriptor "struct libusb_context *ctx" "const struct libusb_endpoint_descriptor *endpoint" "struct libusb_ss_endpoint_companion_descriptor **ep_comp" 41137d0636aSHans Petter SelaskyThis function finds and parses the USB 3.0 endpoint companion descriptor given by 41237d0636aSHans Petter Selasky.Fa endpoint . 41337d0636aSHans Petter SelaskyReturns zero on success and a LIBUSB_ERROR code on failure. 41437d0636aSHans Petter SelaskyOn success the parsed USB 3.0 endpoint companion descriptor must be 41537d0636aSHans Petter Selaskyfreed using the libusb_free_ss_endpoint_companion_descriptor function. 41637d0636aSHans Petter Selasky.Pp 41737d0636aSHans Petter Selasky.Ft void 41837d0636aSHans Petter Selasky.Fn libusb_free_ss_endpoint_companion_descriptor "struct libusb_ss_endpoint_companion_descriptor *ep_comp" 41937d0636aSHans Petter SelaskyThis function is NULL safe and frees a parsed USB 3.0 endpoint companion descriptor given by 42037d0636aSHans Petter Selasky.Fa ep_comp . 42137d0636aSHans Petter Selasky.Pp 42237d0636aSHans Petter Selasky.Ft int 42337d0636aSHans Petter Selasky.Fn libusb_get_bos_descriptor "libusb_device_handle *handle" "struct libusb_bos_descriptor **bos" 42437d0636aSHans Petter SelaskyThis function queries the USB device given by 42537d0636aSHans Petter Selasky.Fa handle 42637d0636aSHans Petter Selaskyand stores a pointer to a parsed BOS descriptor into 42737d0636aSHans Petter Selasky.Fa bos . 42837d0636aSHans Petter SelaskyReturns zero on success and a LIBUSB_ERROR code on failure. 42937d0636aSHans Petter SelaskyOn success the parsed BOS descriptor must be 43037d0636aSHans Petter Selaskyfreed using the libusb_free_bos_descriptor function. 4314c0392e6SHans Petter Selasky.Pp 4324c0392e6SHans Petter Selasky.Ft int 4334c0392e6SHans Petter Selasky.Fn libusb_parse_bos_descriptor "const void *buf" "int len" "libusb_bos_descriptor **bos" 4344c0392e6SHans Petter SelaskyThis function parses a Binary Object Store, BOS, descriptor into host endian format pointed to by 4354c0392e6SHans Petter Selasky.Fa buf 4364c0392e6SHans Petter Selaskyand having a length of 4374c0392e6SHans Petter Selasky.Fa len . 4384c0392e6SHans Petter SelaskyOn success the pointer to resulting descriptor is stored at the location given by 4394c0392e6SHans Petter Selasky.Fa bos . 4404c0392e6SHans Petter SelaskyReturns zero on success and a LIBUSB_ERROR code on failure. 4414c0392e6SHans Petter SelaskyOn success the parsed BOS descriptor must be freed using the 4424c0392e6SHans Petter Selaskylibusb_free_bos_descriptor function. 4434c0392e6SHans Petter Selasky.Pp 4444c0392e6SHans Petter Selasky.Ft void 4454c0392e6SHans Petter Selasky.Fn libusb_free_bos_descriptor "libusb_bos_descriptor *bos" 44637d0636aSHans Petter SelaskyThis function is NULL safe and frees a parsed BOS descriptor given by 44737d0636aSHans Petter Selasky.Fa bos . 44837d0636aSHans Petter Selasky.Pp 44937d0636aSHans Petter Selasky.Ft int 45037d0636aSHans Petter Selasky.Fn libusb_get_usb_2_0_extension_descriptor "struct libusb_context *ctx" "struct libusb_bos_dev_capability_descriptor *dev_cap" "struct libusb_usb_2_0_extension_descriptor **usb_2_0_extension" 45137d0636aSHans Petter SelaskyThis function parses the USB 2.0 extension descriptor from the descriptor given by 45237d0636aSHans Petter Selasky.Fa dev_cap 45337d0636aSHans Petter Selaskyand stores a pointer to the parsed descriptor into 45437d0636aSHans Petter Selasky.Fa usb_2_0_extension . 45537d0636aSHans Petter SelaskyReturns zero on success and a LIBUSB_ERROR code on failure. 45637d0636aSHans Petter SelaskyOn success the parsed USB 2.0 extension descriptor must be freed using the 45737d0636aSHans Petter Selaskylibusb_free_usb_2_0_extension_descriptor function. 45837d0636aSHans Petter Selasky.Pp 45937d0636aSHans Petter Selasky.Ft void 46037d0636aSHans Petter Selasky.Fn libusb_free_usb_2_0_extension_descriptor "struct libusb_usb_2_0_extension_descriptor *usb_2_0_extension" 46137d0636aSHans Petter SelaskyThis function is NULL safe and frees a parsed USB 2.0 extension descriptor given by 46237d0636aSHans Petter Selasky.Fa usb_2_0_extension . 46337d0636aSHans Petter Selasky.Pp 46437d0636aSHans Petter Selasky.Ft int 46537d0636aSHans Petter Selasky.Fn libusb_get_ss_usb_device_capability_descriptor "struct libusb_context *ctx" "struct libusb_bos_dev_capability_descriptor *dev_cap" "struct libusb_ss_usb_device_capability_descriptor **ss_usb_device_capability" 46637d0636aSHans Petter SelaskyThis function parses the SuperSpeed device capability descriptor from the descriptor given by 46737d0636aSHans Petter Selasky.Fa dev_cap 46837d0636aSHans Petter Selaskyand stores a pointer to the parsed descriptor into 46937d0636aSHans Petter Selasky.Fa ss_usb_device_capability . 47037d0636aSHans Petter SelaskyReturns zero on success and a LIBUSB_ERROR code on failure. 47137d0636aSHans Petter SelaskyOn success the parsed SuperSpeed device capability descriptor must be freed using the 47237d0636aSHans Petter Selaskylibusb_free_ss_usb_device_capability_descriptor function. 47337d0636aSHans Petter Selasky.Pp 47437d0636aSHans Petter Selasky.Ft void 47537d0636aSHans Petter Selasky.Fn libusb_free_ss_usb_device_capability_descriptor "struct libusb_ss_usb_device_capability_descriptor *ss_usb_device_capability" 47637d0636aSHans Petter SelaskyThis function is NULL safe and frees a parsed SuperSpeed device capability descriptor given by 47737d0636aSHans Petter Selasky.Fa ss_usb_device_capability . 47837d0636aSHans Petter Selasky.Pp 47937d0636aSHans Petter Selasky.Ft int 48037d0636aSHans Petter Selasky.Fn libusb_get_container_id_descriptor "struct libusb_context *ctx" "struct libusb_bos_dev_capability_descriptor *dev_cap" "struct libusb_container_id_descriptor **container_id" 48137d0636aSHans Petter SelaskyThis function parses the container ID descriptor from the descriptor given by 48237d0636aSHans Petter Selasky.Fa dev_cap 48337d0636aSHans Petter Selaskyand stores a pointer to the parsed descriptor into 48437d0636aSHans Petter Selasky.Fa container_id . 48537d0636aSHans Petter SelaskyReturns zero on success and a LIBUSB_ERROR code on failure. 48637d0636aSHans Petter SelaskyOn success the parsed container ID descriptor must be freed using the 48737d0636aSHans Petter Selaskylibusb_free_container_id_descriptor function. 48837d0636aSHans Petter Selasky.Pp 48937d0636aSHans Petter Selasky.Ft void 49037d0636aSHans Petter Selasky.Fn libusb_free_container_id_descriptor "struct libusb_container_id_descriptor *container_id" 49137d0636aSHans Petter SelaskyThis function is NULL safe and frees a parsed container ID descriptor given by 49237d0636aSHans Petter Selasky.Fa container_id . 493a5118bdfSAndrew Thompson.Sh USB ASYNCHRONOUS I/O 494a5118bdfSAndrew Thompson.Ft struct libusb_transfer * 495a5118bdfSAndrew Thompson.Fn libusb_alloc_transfer "int iso_packets" 49611867070SHans Petter SelaskyAllocate a transfer with the number of isochronous packet descriptors 49711867070SHans Petter Selaskyspecified by 49811867070SHans Petter Selasky.Fa iso_packets . 499ca96e26aSHans Petter SelaskyReturns NULL on error. 5004eaae44dSAndrew Thompson.Pp 501a5118bdfSAndrew Thompson.Ft void 502a5118bdfSAndrew Thompson.Fn libusb_free_transfer "struct libusb_transfer *tr" 503a5118bdfSAndrew ThompsonFree a transfer. 5044eaae44dSAndrew Thompson.Pp 505a5118bdfSAndrew Thompson.Ft int 506a5118bdfSAndrew Thompson.Fn libusb_submit_transfer "struct libusb_transfer *tr" 507ca96e26aSHans Petter SelaskyThis function will submit a transfer and returns immediately. 508c8c1f2ecSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NO_DEVICE if 50911867070SHans Petter Selaskythe device has been disconnected and a 510a5118bdfSAndrew ThompsonLIBUSB_ERROR code on other failure. 5114eaae44dSAndrew Thompson.Pp 512a5118bdfSAndrew Thompson.Ft int 513a5118bdfSAndrew Thompson.Fn libusb_cancel_transfer "struct libusb_transfer *tr" 51411867070SHans Petter SelaskyThis function asynchronously cancels a transfer. 51511867070SHans Petter SelaskyReturns 0 on success and a LIBUSB_ERROR code on failure. 516a5118bdfSAndrew Thompson.Sh USB SYNCHRONOUS I/O 517a5118bdfSAndrew Thompson.Ft int 518698e791aSHans Petter Selasky.Fn libusb_control_transfer "libusb_device_handle *devh" "uint8_t bmRequestType" "uint8_t bRequest" "uint16_t wValue" "uint16_t wIndex" "unsigned char *data" "uint16_t wLength" "unsigned int timeout" 519ca96e26aSHans Petter SelaskyPerform a USB control transfer. 520ca96e26aSHans Petter SelaskyReturns the actual number of bytes 52111867070SHans Petter Selaskytransferred on success, in the range from and including zero up to and 522c865d740SHans Petter Selaskyincluding 523892f4806SHans Petter Selasky.Fa wLength . 52411867070SHans Petter SelaskyOn error a LIBUSB_ERROR code is returned, for example 52511867070SHans Petter SelaskyLIBUSB_ERROR_TIMEOUT if the transfer timed out, LIBUSB_ERROR_PIPE if the 526c865d740SHans Petter Selaskycontrol request was not supported, LIBUSB_ERROR_NO_DEVICE if the 52711867070SHans Petter Selaskydevice has been disconnected and another LIBUSB_ERROR code on other failures. 52811867070SHans Petter SelaskyThe LIBUSB_ERROR codes are all negative. 5294eaae44dSAndrew Thompson.Pp 530a5118bdfSAndrew Thompson.Ft int 531a5118bdfSAndrew Thompson.Fn libusb_bulk_transfer "struct libusb_device_handle *devh" "unsigned char endpoint" "unsigned char *data" "int length" "int *transferred" "unsigned int timeout" 532892f4806SHans Petter SelaskyPerform an USB bulk transfer. 533892f4806SHans Petter SelaskyA timeout value of zero means no timeout. 534892f4806SHans Petter SelaskyThe timeout value is given in milliseconds. 535892f4806SHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_TIMEOUT 53611867070SHans Petter Selaskyif the transfer timed out, LIBUSB_ERROR_PIPE if the control request was not 537a5118bdfSAndrew Thompsonsupported, LIBUSB_ERROR_OVERFLOW if the device offered more data, 538a5118bdfSAndrew ThompsonLIBUSB_ERROR_NO_DEVICE if the device has been disconnected and 53911867070SHans Petter Selaskya LIBUSB_ERROR code on other failure. 5404eaae44dSAndrew Thompson.Pp 541a5118bdfSAndrew Thompson.Ft int 542a5118bdfSAndrew Thompson.Fn libusb_interrupt_transfer "struct libusb_device_handle *devh" "unsigned char endpoint" "unsigned char *data" "int length" "int *transferred" "unsigned int timeout" 543892f4806SHans Petter SelaskyPerform an USB Interrupt transfer. 544892f4806SHans Petter SelaskyA timeout value of zero means no timeout. 545892f4806SHans Petter SelaskyThe timeout value is given in milliseconds. 546892f4806SHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_TIMEOUT 54711867070SHans Petter Selaskyif the transfer timed out, LIBUSB_ERROR_PIPE if the control request was not 548a5118bdfSAndrew Thompsonsupported, LIBUSB_ERROR_OVERFLOW if the device offered more data, 549a5118bdfSAndrew ThompsonLIBUSB_ERROR_NO_DEVICE if the device has been disconnected and 55011867070SHans Petter Selaskya LIBUSB_ERROR code on other failure. 551a0c93fa3SHans Petter Selasky.Sh USB STREAMS SUPPORT 552a0c93fa3SHans Petter Selasky.Ft int 553a0c93fa3SHans Petter Selasky.Fn libusb_alloc_streams "libusb_device_handle *dev" "uint32_t num_streams" "unsigned char *endpoints" "int num_endpoints" 554a0c93fa3SHans Petter SelaskyThis function verifies that the given number of streams using the 555a0c93fa3SHans Petter Selaskygiven number of endpoints is allowed and allocates the resources 556a0c93fa3SHans Petter Selaskyneeded to use so-called USB streams. 557a0c93fa3SHans Petter SelaskyCurrently only a single stream per endpoint is supported to simplify 558a0c93fa3SHans Petter Selaskythe internals of LibUSB. 559a0c93fa3SHans Petter SelaskyThis function returns 0 on success or a LIBUSB_ERROR code on failure. 560a0c93fa3SHans Petter Selasky.Pp 561a0c93fa3SHans Petter Selasky.Ft int 562a0c93fa3SHans Petter Selasky.Fn libusb_free_streams "libusb_device_handle *dev" "unsigned char *endpoints" "int num_endpoints" 563a0c93fa3SHans Petter SelaskyThis function release resources needed for streams usage. 564a0c93fa3SHans Petter SelaskyReturns 0 on success or a LIBUSB_ERROR code on failure. 565a0c93fa3SHans Petter Selasky.Pp 566a0c93fa3SHans Petter Selasky.Ft void 567a0c93fa3SHans Petter Selasky.Fn libusb_transfer_set_stream_id "struct libusb_transfer *transfer" "uint32_t stream_id" 568a0c93fa3SHans Petter SelaskyThis function sets the stream ID for the given USB transfer. 569a0c93fa3SHans Petter Selasky.Pp 570a0c93fa3SHans Petter Selasky.Ft uint32_t 571a0c93fa3SHans Petter Selasky.Fn libusb_transfer_get_stream_id "struct libusb_transfer *transfer" 572a0c93fa3SHans Petter SelaskyThis function returns the stream ID for the given USB transfer. 573a0c93fa3SHans Petter SelaskyIf no stream ID is used a value of zero is returned. 574a5118bdfSAndrew Thompson.Sh USB EVENTS 575a5118bdfSAndrew Thompson.Ft int 576a5118bdfSAndrew Thompson.Fn libusb_try_lock_events "libusb_context *ctx" 577ca96e26aSHans Petter SelaskyTry to acquire the event handling lock. 578ca96e26aSHans Petter SelaskyReturns 0 if the lock was obtained and 1 if not. 5794eaae44dSAndrew Thompson.Pp 580a5118bdfSAndrew Thompson.Ft void 581a5118bdfSAndrew Thompson.Fn libusb_lock_events "libusb_context *ctx" 582c8c1f2ecSHans Petter SelaskyAcquire the event handling lock. 583c8c1f2ecSHans Petter SelaskyThis function is blocking. 5844eaae44dSAndrew Thompson.Pp 585a5118bdfSAndrew Thompson.Ft void 586a5118bdfSAndrew Thompson.Fn libusb_unlock_events "libusb_context *ctx" 587c8c1f2ecSHans Petter SelaskyRelease the event handling lock. 588c8c1f2ecSHans Petter SelaskyThis will wake up any thread blocked 58911867070SHans Petter Selaskyon 590d284271aSJoel Dahl.Fn libusb_wait_for_event . 5914eaae44dSAndrew Thompson.Pp 592a5118bdfSAndrew Thompson.Ft int 593a5118bdfSAndrew Thompson.Fn libusb_event_handling_ok "libusb_context *ctx" 594c8c1f2ecSHans Petter SelaskyDetermine if it still OK for this thread to be doing event handling. 595c8c1f2ecSHans Petter SelaskyReturns 1 596c8c1f2ecSHans Petter Selaskyif event handling can start or continue. 597c8c1f2ecSHans Petter SelaskyReturns 0 if this thread must give up 598a5118bdfSAndrew Thompsonthe events lock. 5994eaae44dSAndrew Thompson.Pp 600a5118bdfSAndrew Thompson.Ft int 601a5118bdfSAndrew Thompson.Fn libusb_event_handler_active "libusb_context *ctx" 602c8c1f2ecSHans Petter SelaskyDetermine if an active thread is handling events. 60311867070SHans Petter SelaskyReturns 1 if there is a thread handling events and 0 if there 604a5118bdfSAndrew Thompsonare no threads currently handling events. 6054eaae44dSAndrew Thompson.Pp 606a5118bdfSAndrew Thompson.Ft void 607a5118bdfSAndrew Thompson.Fn libusb_lock_event_waiters "libusb_context *ctx" 608c8c1f2ecSHans Petter SelaskyAcquire the event_waiters lock. 60911867070SHans Petter SelaskyThis lock is designed to be obtained in the 610a5118bdfSAndrew Thompsonsituation where you want to be aware when events are completed, but some other 611882764c1SMateusz Piotrowskithread is event handling so calling 612882764c1SMateusz Piotrowski.Fn libusb_handle_events 613882764c1SMateusz Piotrowskiis not allowed. 614545b01adSAndrew Thompson.Pp 615a5118bdfSAndrew Thompson.Ft void 616a5118bdfSAndrew Thompson.Fn libusb_unlock_event_waiters "libusb_context *ctx" 617a5118bdfSAndrew ThompsonRelease the event_waiters lock. 6184eaae44dSAndrew Thompson.Pp 619a5118bdfSAndrew Thompson.Ft int 620a5118bdfSAndrew Thompson.Fn libusb_wait_for_event "libusb_context *ctx" "struct timeval *tv" 621c8c1f2ecSHans Petter SelaskyWait for another thread to signal completion of an event. 622c8c1f2ecSHans Petter SelaskyMust be called 623882764c1SMateusz Piotrowskiwith the event waiters lock held, see 624882764c1SMateusz Piotrowski.Fn libusb_lock_event_waiters . 625c8c1f2ecSHans Petter SelaskyThis will 626a5118bdfSAndrew Thompsonblock until the timeout expires or a transfer completes or a thread releases 627882764c1SMateusz Piotrowskithe event handling lock through 628882764c1SMateusz Piotrowski.Fn libusb_unlock_events . 629c8c1f2ecSHans Petter SelaskyReturns 0 after a 63011867070SHans Petter Selaskytransfer completes or another thread stops event handling, and 1 if the 631a5118bdfSAndrew Thompsontimeout expired. 6324eaae44dSAndrew Thompson.Pp 633a5118bdfSAndrew Thompson.Ft int 63403205428SHans Petter Selasky.Fn libusb_handle_events_timeout_completed "libusb_context *ctx" "struct timeval *tv" "int *completed" 63503205428SHans Petter SelaskyHandle any pending events by checking if timeouts have expired and by 63603205428SHans Petter Selaskychecking the set of file descriptors for activity. 63703205428SHans Petter SelaskyIf the 63803205428SHans Petter Selasky.Fa completed 63903205428SHans Petter Selaskyargument is not equal to NULL, this function will 64003205428SHans Petter Selaskyloop until a transfer completion callback sets the variable pointed to 64103205428SHans Petter Selaskyby the 64203205428SHans Petter Selasky.Fa completed 64303205428SHans Petter Selaskyargument to non-zero. 64403205428SHans Petter SelaskyIf the 64503205428SHans Petter Selasky.Fa tv 64603205428SHans Petter Selaskyargument is not equal to NULL, this function will return 64703205428SHans Petter SelaskyLIBUSB_ERROR_TIMEOUT after the given timeout. 64803205428SHans Petter SelaskyReturns 0 on success, or a LIBUSB_ERROR code on failure or timeout. 64903205428SHans Petter Selasky.Pp 65003205428SHans Petter Selasky.Ft int 65103205428SHans Petter Selasky.Fn libusb_handle_events_completed "libusb_context *ctx" "int *completed" 65203205428SHans Petter SelaskyHandle any pending events by checking the set of file descriptors for activity. 65303205428SHans Petter SelaskyIf the 65403205428SHans Petter Selasky.Fa completed 65503205428SHans Petter Selaskyargument is not equal to NULL, this function will 65603205428SHans Petter Selaskyloop until a transfer completion callback sets the variable pointed to 65703205428SHans Petter Selaskyby the 65803205428SHans Petter Selasky.Fa completed 65903205428SHans Petter Selaskyargument to non-zero. 66003205428SHans Petter SelaskyReturns 0 on success, or a LIBUSB_ERROR code on failure. 66103205428SHans Petter Selasky.Pp 66203205428SHans Petter Selasky.Ft int 663a5118bdfSAndrew Thompson.Fn libusb_handle_events_timeout "libusb_context *ctx" "struct timeval *tv" 664a5118bdfSAndrew ThompsonHandle any pending events by checking if timeouts have expired and by 665c8c1f2ecSHans Petter Selaskychecking the set of file descriptors for activity. 666c8c1f2ecSHans Petter SelaskyReturns 0 on success, or a 66703205428SHans Petter SelaskyLIBUSB_ERROR code on failure or timeout. 6684eaae44dSAndrew Thompson.Pp 669a5118bdfSAndrew Thompson.Ft int 670a5118bdfSAndrew Thompson.Fn libusb_handle_events "libusb_context *ctx" 671c8c1f2ecSHans Petter SelaskyHandle any pending events in blocking mode with a sensible timeout. 672c8c1f2ecSHans Petter SelaskyReturns 0 67311867070SHans Petter Selaskyon success and a LIBUSB_ERROR code on failure. 6744eaae44dSAndrew Thompson.Pp 675a5118bdfSAndrew Thompson.Ft int 676a5118bdfSAndrew Thompson.Fn libusb_handle_events_locked "libusb_context *ctx" "struct timeval *tv" 6773102cfe2SGlen BarberHandle any pending events by polling file descriptors, without checking if 67811867070SHans Petter Selaskyanother thread is already doing so. 679c8c1f2ecSHans Petter SelaskyMust be called with the event lock held. 6804eaae44dSAndrew Thompson.Pp 681a5118bdfSAndrew Thompson.Ft int 682a5118bdfSAndrew Thompson.Fn libusb_get_next_timeout "libusb_context *ctx" "struct timeval *tv" 683c8c1f2ecSHans Petter SelaskyDetermine the next internal timeout that libusb needs to handle. 684c8c1f2ecSHans Petter SelaskyReturns 0 68511867070SHans Petter Selaskyif there are no pending timeouts, 1 if a timeout was returned, or a LIBUSB_ERROR 68603205428SHans Petter Selaskycode on failure or timeout. 6874eaae44dSAndrew Thompson.Pp 688a5118bdfSAndrew Thompson.Ft void 689a5118bdfSAndrew Thompson.Fn libusb_set_pollfd_notifiers "libusb_context *ctx" "libusb_pollfd_added_cb added_cb" "libusb_pollfd_removed_cb remove_cb" "void *user_data" 690a5118bdfSAndrew ThompsonRegister notification functions for file descriptor additions/removals. 691a5118bdfSAndrew ThompsonThese functions will be invoked for every new or removed file descriptor 692a5118bdfSAndrew Thompsonthat libusb uses as an event source. 6934eaae44dSAndrew Thompson.Pp 694a5118bdfSAndrew Thompson.Ft const struct libusb_pollfd ** 695a5118bdfSAndrew Thompson.Fn libusb_get_pollfds "libusb_context *ctx" 696882764c1SMateusz PiotrowskiRetrieve a list of file descriptors that should be polled by your main loop as 697c8c1f2ecSHans Petter Selaskylibusb event sources. 698c8c1f2ecSHans Petter SelaskyReturns a NULL-terminated list on success or NULL on failure. 6997bdc064bSHans Petter Selasky.Pp 7007bdc064bSHans Petter Selasky.Ft int 7017bdc064bSHans Petter Selasky.Fn libusb_hotplug_register_callback "libusb_context *ctx" "libusb_hotplug_event events" "libusb_hotplug_flag flags" "int vendor_id" "int product_id" "int dev_class" "libusb_hotplug_callback_fn cb_fn" "void *user_data" "libusb_hotplug_callback_handle *handle" 7027bdc064bSHans Petter SelaskyThis function registers a hotplug filter. 7037bdc064bSHans Petter SelaskyThe 7047bdc064bSHans Petter Selasky.Fa events 7057bdc064bSHans Petter Selaskyargument select which events makes the hotplug filter trigger. 7067bdc064bSHans Petter SelaskyAvailable event values are LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED and LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT. 7077bdc064bSHans Petter SelaskyOne or more events must be specified. 7087bdc064bSHans Petter SelaskyThe 7097bdc064bSHans Petter Selasky.Fa vendor_id , 7107bdc064bSHans Petter Selasky.Fa product_id 7117bdc064bSHans Petter Selaskyand 7127bdc064bSHans Petter Selasky.Fa dev_class 7137bdc064bSHans Petter Selaskyarguments can be set to LIBUSB_HOTPLUG_MATCH_ANY to match any value in the USB device descriptor. 7147bdc064bSHans Petter SelaskyElse the specified value is used for matching. 7157bdc064bSHans Petter SelaskyIf the 7167bdc064bSHans Petter Selasky.Fa flags 7177bdc064bSHans Petter Selaskyargument is set to LIBUSB_HOTPLUG_ENUMERATE, all currently attached and matching USB devices will be passed to the hotplug filter, given by the 7187bdc064bSHans Petter Selasky.Fa cb_fn 7197bdc064bSHans Petter Selaskyargument. 7207bdc064bSHans Petter SelaskyElse the 7217bdc064bSHans Petter Selasky.Fa flags 7227bdc064bSHans Petter Selaskyargument should be set to LIBUSB_HOTPLUG_NO_FLAGS. 7237bdc064bSHans Petter SelaskyThis function returns 0 upon success or a LIBUSB_ERROR code on failure. 7247bdc064bSHans Petter Selasky.Pp 7257bdc064bSHans Petter Selasky.Ft int 7267bdc064bSHans Petter Selasky.Fn libusb_hotplug_callback_fn "libusb_context *ctx" "libusb_device *device" "libusb_hotplug_event event" "void *user_data" 7277bdc064bSHans Petter SelaskyThe hotplug filter function. 7287bdc064bSHans Petter SelaskyIf this function returns non-zero, the filter is removed. 7297bdc064bSHans Petter SelaskyElse the filter is kept and can receive more events. 7307bdc064bSHans Petter SelaskyThe 7317bdc064bSHans Petter Selasky.Fa user_data 7327bdc064bSHans Petter Selaskyargument is the same as given when the filter was registered. 7337bdc064bSHans Petter SelaskyThe 7347bdc064bSHans Petter Selasky.Fa event 7357bdc064bSHans Petter Selaskyargument can be either of LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED or LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT. 7367bdc064bSHans Petter Selasky.Pp 7377bdc064bSHans Petter Selasky.Ft void 7387bdc064bSHans Petter Selasky.Fn libusb_hotplug_deregister_callback "libusb_context *ctx" "libusb_hotplug_callback_handle handle" 7397bdc064bSHans Petter SelaskyThis function unregisters a hotplug filter. 7404eaae44dSAndrew Thompson.Sh LIBUSB VERSION 0.1 COMPATIBILITY 741a5118bdfSAndrew ThompsonThe library is also compliant with LibUSB version 0.1.12. 742a5118bdfSAndrew Thompson.Pp 7434eaae44dSAndrew Thompson.Fn usb_open 7444eaae44dSAndrew Thompson.Fn usb_close 7454eaae44dSAndrew Thompson.Fn usb_get_string 7464eaae44dSAndrew Thompson.Fn usb_get_string_simple 7474eaae44dSAndrew Thompson.Fn usb_get_descriptor_by_endpoint 7484eaae44dSAndrew Thompson.Fn usb_get_descriptor 7494eaae44dSAndrew Thompson.Fn usb_parse_descriptor 7504eaae44dSAndrew Thompson.Fn usb_parse_configuration 7514eaae44dSAndrew Thompson.Fn usb_destroy_configuration 7524eaae44dSAndrew Thompson.Fn usb_fetch_and_parse_descriptors 7534eaae44dSAndrew Thompson.Fn usb_bulk_write 7544eaae44dSAndrew Thompson.Fn usb_bulk_read 7554eaae44dSAndrew Thompson.Fn usb_interrupt_write 7564eaae44dSAndrew Thompson.Fn usb_interrupt_read 7574eaae44dSAndrew Thompson.Fn usb_control_msg 7584eaae44dSAndrew Thompson.Fn usb_set_configuration 7594eaae44dSAndrew Thompson.Fn usb_claim_interface 7604eaae44dSAndrew Thompson.Fn usb_release_interface 7614eaae44dSAndrew Thompson.Fn usb_set_altinterface 7624eaae44dSAndrew Thompson.Fn usb_resetep 7634eaae44dSAndrew Thompson.Fn usb_clear_halt 7644eaae44dSAndrew Thompson.Fn usb_reset 7654eaae44dSAndrew Thompson.Fn usb_strerror 7664eaae44dSAndrew Thompson.Fn usb_init 7674eaae44dSAndrew Thompson.Fn usb_set_debug 7684eaae44dSAndrew Thompson.Fn usb_find_busses 7694eaae44dSAndrew Thompson.Fn usb_find_devices 7704eaae44dSAndrew Thompson.Fn usb_device 7714eaae44dSAndrew Thompson.Fn usb_get_busses 772f1b5fa6eSHans Petter Selasky.Fn usb_check_connected 7734eb5923dSHans Petter Selasky.Fn usb_get_driver_np 7744eb5923dSHans Petter Selasky.Fn usb_detach_kernel_driver_np 7754eaae44dSAndrew Thompson.Sh SEE ALSO 776a5118bdfSAndrew Thompson.Xr libusb20 3 , 777c54c1f7cSAndrew Thompson.Xr usb 4 , 778c61f2561SHans Petter Selasky.Xr usbconfig 8 , 779c61f2561SHans Petter Selasky.Xr usbdump 8 780a5118bdfSAndrew Thompson.Pp 781882764c1SMateusz Piotrowski.Lk https://libusb.info/ 7824eaae44dSAndrew Thompson.Sh HISTORY 7834eaae44dSAndrew Thompson.Nm 784a5118bdfSAndrew Thompsonsupport first appeared in 785a5118bdfSAndrew Thompson.Fx 8.0 . 786