14eaae44dSAndrew Thompson.\" 2a5118bdfSAndrew Thompson.\" Copyright (c) 2009 Sylvestre Gallon 34eaae44dSAndrew Thompson.\" 44eaae44dSAndrew Thompson.\" Redistribution and use in source and binary forms, with or without 54eaae44dSAndrew Thompson.\" modification, are permitted provided that the following conditions 64eaae44dSAndrew Thompson.\" are met: 74eaae44dSAndrew Thompson.\" 1. Redistributions of source code must retain the above copyright 84eaae44dSAndrew Thompson.\" notice, this list of conditions and the following disclaimer. 94eaae44dSAndrew Thompson.\" 2. Redistributions in binary form must reproduce the above copyright 104eaae44dSAndrew Thompson.\" notice, this list of conditions and the following disclaimer in the 114eaae44dSAndrew Thompson.\" documentation and/or other materials provided with the distribution. 124eaae44dSAndrew Thompson.\" 134eaae44dSAndrew Thompson.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 144eaae44dSAndrew Thompson.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 154eaae44dSAndrew Thompson.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 164eaae44dSAndrew Thompson.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 174eaae44dSAndrew Thompson.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 184eaae44dSAndrew Thompson.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 194eaae44dSAndrew Thompson.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 204eaae44dSAndrew Thompson.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 214eaae44dSAndrew Thompson.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 224eaae44dSAndrew Thompson.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 234eaae44dSAndrew Thompson.\" SUCH DAMAGE. 244eaae44dSAndrew Thompson.\" 25*b74aaa1aSGraham Percival.Dd January 26, 2023 264eaae44dSAndrew Thompson.Dt LIBUSB 3 274eaae44dSAndrew Thompson.Os 284eaae44dSAndrew Thompson.Sh NAME 294eaae44dSAndrew Thompson.Nm libusb 304eaae44dSAndrew Thompson.Nd "USB access library" 314eaae44dSAndrew Thompson.Sh LIBRARY 3211867070SHans Petter SelaskyUSB access library 3311867070SHans Petter Selasky.Pq libusb, -lusb 344eaae44dSAndrew Thompson.Sh SYNOPSIS 35a5118bdfSAndrew Thompson.In libusb.h 364eaae44dSAndrew Thompson.Sh DESCRIPTION 374eaae44dSAndrew ThompsonThe 384eaae44dSAndrew Thompson.Nm 39a5118bdfSAndrew Thompsonlibrary contains interfaces for directly managing a usb device. 40a5118bdfSAndrew ThompsonThe current implementation supports v1.0 of the libusb API. 41930a4206SHans Petter Selasky.Sh LIBRARY INITIALISATION AND DEINITIALISATION 4214b896ceSHans Petter Selasky.Ft "const struct libusb_version *" 4314b896ceSHans Petter Selasky.Fn libusb_get_version "void" 4414b896ceSHans Petter SelaskyThis function returns version information about LibUSB. 4514b896ceSHans Petter Selasky.Pp 46a5118bdfSAndrew Thompson.Ft int 47930a4206SHans Petter Selasky.Fn libusb_init "libusb_context **ctx" 484c6bcffdSHans Petter SelaskyCall this function before any other libusb v1.0 API function, to 494c6bcffdSHans Petter Selaskyinitialise a valid libusb v1.0 context. 504c6bcffdSHans Petter SelaskyIf the 514c6bcffdSHans Petter Selasky.Fa ctx 524c6bcffdSHans Petter Selaskyargument is non-NULL, a pointer to the libusb context is stored at 534c6bcffdSHans Petter Selaskythe given location. 544c6bcffdSHans Petter SelaskyThis function returns 0 upon success or LIBUSB_ERROR on failure. 554c6bcffdSHans Petter Selasky.Pp 564c6bcffdSHans Petter Selasky.Ft int 574c6bcffdSHans Petter Selasky.Fn libusb_init_context "libusb_context **ctx" "const struct libusb_init_option []" "int num_options" 584c6bcffdSHans Petter SelaskyCall this function before any other libusb v1.0 API function, to 594c6bcffdSHans Petter Selaskyinitialise a valid libusb v1.0 context. 604c6bcffdSHans Petter SelaskyIf the 614c6bcffdSHans Petter Selasky.Fa ctx 624c6bcffdSHans Petter Selaskyargument is non-NULL, a pointer to the libusb context is stored at 634c6bcffdSHans Petter Selaskythe given location. 644c6bcffdSHans Petter SelaskyAdditional options, like the USB debug level, may be given using the 654c6bcffdSHans Petter Selaskysecond and third argument. 664c6bcffdSHans Petter SelaskyIf no options are needed, simply use libusb_init(). 674c6bcffdSHans Petter SelaskyThis function returns 0 upon success or a LIBUSB_ERROR value on failure. 684eaae44dSAndrew Thompson.Pp 69a5118bdfSAndrew Thompson.Ft void 70a5118bdfSAndrew Thompson.Fn libusb_exit "libusb_context *ctx" 71c8c1f2ecSHans Petter SelaskyDeinitialise libusb. 72c8c1f2ecSHans Petter SelaskyMust be called at the end of the application. 7311867070SHans Petter SelaskyOther libusb routines may not be called after this function. 74a5118bdfSAndrew Thompson.Pp 7504391da3SKyle Evans.Ft int 7604391da3SKyle Evans.Fn libusb_has_capability "uint32_t capability" 7704391da3SKyle EvansThis function checks the runtime capabilities of 7804391da3SKyle Evans.Nm . 7904391da3SKyle EvansThis function will return non-zero if the given 8004391da3SKyle Evans.Fa capability 8104391da3SKyle Evansis supported, 0 if it is not supported. 8204391da3SKyle EvansThe valid values for 8304391da3SKyle Evans.Fa capability 8404391da3SKyle Evansare: 8504391da3SKyle Evans.Bl -tag -width LIBUSB_CAP -offset indent 8604391da3SKyle Evans.It Va LIBUSB_CAP_HAS_CAPABILITY 8704391da3SKyle Evans.Nm 8804391da3SKyle Evanssupports 8904391da3SKyle Evans.Fn libusb_has_capability . 9004391da3SKyle Evans.It Va LIBUSB_CAP_HAS_HOTPLUG 9104391da3SKyle Evans.Nm 9204391da3SKyle Evanssupports hotplug notifications. 9304391da3SKyle Evans.It Va LIBUSB_CAP_HAS_HID_ACCESS 9404391da3SKyle Evans.Nm 9504391da3SKyle Evanscan access HID devices without requiring user intervention. 9604391da3SKyle Evans.It Va LIBUSB_CAP_SUPPORTS_DETACH_KERNEL_DRIVER 9704391da3SKyle Evans.Nm 9804391da3SKyle Evanssupports detaching of the default USB driver with 9904391da3SKyle Evans.Fn libusb_detach_kernel_driver . 10004391da3SKyle Evans.El 10104391da3SKyle Evans.Pp 102698e791aSHans Petter Selasky.Ft const char * 103698e791aSHans Petter Selasky.Fn libusb_strerror "int code" 10411867070SHans Petter SelaskyGet the ASCII representation of the error given by the 105698e791aSHans Petter Selasky.Fa code 106698e791aSHans Petter Selaskyargument. 107c61f2561SHans Petter SelaskyThis function does not return NULL. 108c61f2561SHans Petter Selasky.Pp 109c61f2561SHans Petter Selasky.Ft const char * 110c61f2561SHans Petter Selasky.Fn libusb_error_name "int code" 111c61f2561SHans Petter SelaskyGet the ASCII representation of the error enum given by the 112c61f2561SHans Petter Selasky.Fa code 113c61f2561SHans Petter Selaskyargument. 114c61f2561SHans Petter SelaskyThis function does not return NULL. 115698e791aSHans Petter Selasky.Pp 116a5118bdfSAndrew Thompson.Ft void 117a5118bdfSAndrew Thompson.Fn libusb_set_debug "libusb_context *ctx" "int level" 11811867070SHans Petter SelaskySet the debug level to 11911867070SHans Petter Selasky.Fa level . 120a5118bdfSAndrew Thompson.Pp 121a5118bdfSAndrew Thompson.Ft ssize_t 122a5118bdfSAndrew Thompson.Fn libusb_get_device_list "libusb_context *ctx" "libusb_device ***list" 12311867070SHans Petter SelaskyPopulate 124a5118bdfSAndrew Thompson.Fa list 12511867070SHans Petter Selaskywith the list of usb devices available, adding a reference to each 12611867070SHans Petter Selaskydevice in the list. 12711867070SHans Petter SelaskyAll the list entries created by this 12811867070SHans Petter Selaskyfunction must have their reference counter 12911867070SHans Petter Selaskydecremented when you are done with them, 13011867070SHans Petter Selaskyand the list itself must be freed. 131c8c1f2ecSHans Petter SelaskyThis 13211867070SHans Petter Selaskyfunction returns the number of devices in the list or a LIBUSB_ERROR code. 133a5118bdfSAndrew Thompson.Pp 134a5118bdfSAndrew Thompson.Ft void 135a5118bdfSAndrew Thompson.Fn libusb_free_device_list "libusb_device **list" "int unref_devices" 136c8c1f2ecSHans Petter SelaskyFree the list of devices discovered by libusb_get_device_list. 137c8c1f2ecSHans Petter SelaskyIf 138a5118bdfSAndrew Thompson.Fa unref_device 13911867070SHans Petter Selaskyis set to 1 all devices in the list have their reference 14011867070SHans Petter Selaskycounter decremented once. 141a5118bdfSAndrew Thompson.Pp 142a5118bdfSAndrew Thompson.Ft uint8_t 143a5118bdfSAndrew Thompson.Fn libusb_get_bus_number "libusb_device *dev" 144a5118bdfSAndrew ThompsonReturns the number of the bus contained by the device 145a5118bdfSAndrew Thompson.Fa dev . 146a5118bdfSAndrew Thompson.Pp 1470f2c7066SHans Petter Selasky.Ft uint8_t 1480f2c7066SHans Petter Selasky.Fn libusb_get_port_number "libusb_device *dev" 1490f2c7066SHans Petter SelaskyReturns the port number which the device given by 1500f2c7066SHans Petter Selasky.Fa dev 1510f2c7066SHans Petter Selaskyis attached to. 1520f2c7066SHans Petter Selasky.Pp 1535906bf49SEd Maste.Ft int 154a9205626SEd Maste.Fn libusb_get_port_numbers "libusb_device *dev" "uint8_t *buf" "uint8_t bufsize" 1555906bf49SEd MasteStores, in the buffer 1565906bf49SEd Maste.Fa buf 1575906bf49SEd Masteof size 1585906bf49SEd Maste.Fa bufsize , 1595906bf49SEd Mastethe list of all port numbers from root for the device 1605906bf49SEd Maste.Fa dev . 1615906bf49SEd Maste.Pp 162a9205626SEd Maste.Ft int 163a9205626SEd Maste.Fn libusb_get_port_path "libusb_context *ctx" "libusb_device *dev" "uint8_t *buf" "uint8_t bufsize" 164a9205626SEd MasteDeprecated function equivalent to libusb_get_port_numbers. 165a9205626SEd Maste.Pp 166a5118bdfSAndrew Thompson.Ft uint8_t 167a5118bdfSAndrew Thompson.Fn libusb_get_device_address "libusb_device *dev" 168ca96e26aSHans Petter SelaskyReturns the device_address contained by the device 169a5118bdfSAndrew Thompson.Fa dev . 170a5118bdfSAndrew Thompson.Pp 171ca96e26aSHans Petter Selasky.Ft enum libusb_speed 172ca96e26aSHans Petter Selasky.Fn libusb_get_device_speed "libusb_device *dev" 173ca96e26aSHans Petter SelaskyReturns the wire speed at which the device is connected. 174ca96e26aSHans Petter SelaskySee the LIBUSB_SPEED_XXX enums for more information. 175ca96e26aSHans Petter SelaskyLIBUSB_SPEED_UNKNOWN is returned in case of unknown wire speed. 176ca96e26aSHans Petter Selasky.Pp 177a5118bdfSAndrew Thompson.Ft int 178a5118bdfSAndrew Thompson.Fn libusb_get_max_packet_size "libusb_device *dev" "unsigned char endpoint" 179ca96e26aSHans Petter SelaskyReturns the wMaxPacketSize value on success, LIBUSB_ERROR_NOT_FOUND if the 180a5118bdfSAndrew Thompsonendpoint does not exist and LIBUSB_ERROR_OTHERS on other failure. 181a5118bdfSAndrew Thompson.Pp 182748205a3SHans Petter Selasky.Ft int 183748205a3SHans Petter Selasky.Fn libusb_get_max_iso_packet_size "libusb_device *dev" "unsigned char endpoint" 184748205a3SHans Petter SelaskyReturns the packet size multiplied by the packet multiplier on success, 185748205a3SHans Petter SelaskyLIBUSB_ERROR_NOT_FOUND if the endpoint does not exist and 186748205a3SHans Petter SelaskyLIBUSB_ERROR_OTHERS on other failure. 187748205a3SHans Petter Selasky.Pp 188a5118bdfSAndrew Thompson.Ft libusb_device * 189a5118bdfSAndrew Thompson.Fn libusb_ref_device "libusb_device *dev" 190a5118bdfSAndrew ThompsonIncrement the reference counter of the device 191a5118bdfSAndrew Thompson.Fa dev . 192a5118bdfSAndrew Thompson.Pp 193a5118bdfSAndrew Thompson.Ft void 194a5118bdfSAndrew Thompson.Fn libusb_unref_device "libusb_device *dev" 195a5118bdfSAndrew ThompsonDecrement the reference counter of the device 196a5118bdfSAndrew Thompson.Fa dev . 197a5118bdfSAndrew Thompson.Pp 198a5118bdfSAndrew Thompson.Ft int 199a5118bdfSAndrew Thompson.Fn libusb_open "libusb_device *dev" "libusb_device_handle **devh" 200c8c1f2ecSHans Petter SelaskyOpen a device and obtain a device_handle. 201c8c1f2ecSHans Petter SelaskyReturns 0 on success, 20211867070SHans Petter SelaskyLIBUSB_ERROR_NO_MEM on memory allocation problems, LIBUSB_ERROR_ACCESS 20311867070SHans Petter Selaskyon permissions problems, LIBUSB_ERROR_NO_DEVICE if the device has been 20411867070SHans Petter Selaskydisconnected and a LIBUSB_ERROR code on other errors. 205a5118bdfSAndrew Thompson.Pp 206a5118bdfSAndrew Thompson.Ft libusb_device_handle * 207a5118bdfSAndrew Thompson.Fn libusb_open_device_with_vid_pid "libusb_context *ctx" "uint16_t vid" "uint16_t pid" 20811867070SHans Petter SelaskyA convenience function to open a device by vendor and product IDs 209a5118bdfSAndrew Thompson.Fa vid 2104eaae44dSAndrew Thompsonand 211a5118bdfSAndrew Thompson.Fa pid . 212ca96e26aSHans Petter SelaskyReturns NULL on error. 2134eaae44dSAndrew Thompson.Pp 214a5118bdfSAndrew Thompson.Ft void 215a5118bdfSAndrew Thompson.Fn libusb_close "libusb_device_handle *devh" 216a5118bdfSAndrew ThompsonClose a device handle. 2174eaae44dSAndrew Thompson.Pp 218a5118bdfSAndrew Thompson.Ft libusb_device * 219ca96e26aSHans Petter Selasky.Fn libusb_get_device "libusb_device_handle *devh" 220ca96e26aSHans Petter SelaskyGet the device contained by devh. 221ca96e26aSHans Petter SelaskyReturns NULL on error. 2224eaae44dSAndrew Thompson.Pp 223a5118bdfSAndrew Thompson.Ft int 224a5118bdfSAndrew Thompson.Fn libusb_get_configuration "libusb_device_handle *devh" "int *config" 225a3fb6da9SGlen BarberReturns the value of the current configuration. 226c8c1f2ecSHans Petter SelaskyReturns 0 227a5118bdfSAndrew Thompsonon success, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected 228a5118bdfSAndrew Thompsonand a LIBUSB_ERROR code on error. 2294eaae44dSAndrew Thompson.Pp 230a5118bdfSAndrew Thompson.Ft int 231a5118bdfSAndrew Thompson.Fn libusb_set_configuration "libusb_device_handle *devh" "int config" 23211867070SHans Petter SelaskySet the active configuration to 233a5118bdfSAndrew Thompson.Fa config 234a5118bdfSAndrew Thompsonfor the device contained by 235a5118bdfSAndrew Thompson.Fa devh . 236ca96e26aSHans Petter SelaskyThis function returns 0 on success, LIBUSB_ERROR_NOT_FOUND if the requested 237a5118bdfSAndrew Thompsonconfiguration does not exist, LIBUSB_ERROR_BUSY if the interfaces are currently 238a5118bdfSAndrew Thompsonclaimed, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and a 239a5118bdfSAndrew ThompsonLIBUSB_ERROR code on failure. 2404eaae44dSAndrew Thompson.Pp 241a5118bdfSAndrew Thompson.Ft int 242a5118bdfSAndrew Thompson.Fn libusb_claim_interface "libusb_device_handle *devh" "int interface_number" 243a5118bdfSAndrew ThompsonClaim an interface in a given libusb_handle 244a5118bdfSAndrew Thompson.Fa devh . 245c8c1f2ecSHans Petter SelaskyThis is a non-blocking function. 24611867070SHans Petter SelaskyIt returns 0 on success, LIBUSB_ERROR_NOT_FOUND 247a5118bdfSAndrew Thompsonif the requested interface does not exist, LIBUSB_ERROR_BUSY if a program or 248a5118bdfSAndrew Thompsondriver has claimed the interface, LIBUSB_ERROR_NO_DEVICE if the device has 249a5118bdfSAndrew Thompsonbeen disconnected and a LIBUSB_ERROR code on failure. 2504eaae44dSAndrew Thompson.Pp 251a5118bdfSAndrew Thompson.Ft int 252a5118bdfSAndrew Thompson.Fn libusb_release_interface "libusb_device_handle *devh" "int interface_number" 25311867070SHans Petter SelaskyThis function releases an interface. 25411867070SHans Petter SelaskyAll the claimed interfaces on a device must be released 25511867070SHans Petter Selaskybefore closing the device. 256c8c1f2ecSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NOT_FOUND if the 257799162a6SJoel Dahlinterface was not claimed, LIBUSB_ERROR_NO_DEVICE if the device has been 258a5118bdfSAndrew Thompsondisconnected and LIBUSB_ERROR on failure. 2594eaae44dSAndrew Thompson.Pp 260a5118bdfSAndrew Thompson.Ft int 261a5118bdfSAndrew Thompson.Fn libusb_set_interface_alt_setting "libusb_device_handle *dev" "int interface_number" "int alternate_setting" 262c8c1f2ecSHans Petter SelaskyActivate an alternate setting for an interface. 263c8c1f2ecSHans Petter SelaskyReturns 0 on success, 264a5118bdfSAndrew ThompsonLIBUSB_ERROR_NOT_FOUND if the interface was not claimed or the requested 265a5118bdfSAndrew Thompsonsetting does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been 26611867070SHans Petter Selaskydisconnected and a LIBUSB_ERROR code on failure. 2674eaae44dSAndrew Thompson.Pp 268a5118bdfSAndrew Thompson.Ft int 269a5118bdfSAndrew Thompson.Fn libusb_clear_halt "libusb_device_handle *devh" "unsigned char endpoint" 270c8c1f2ecSHans Petter SelaskyClear an halt/stall for a endpoint. 271c8c1f2ecSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NOT_FOUND 272a5118bdfSAndrew Thompsonif the endpoint does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been 273a5118bdfSAndrew Thompsondisconnected and a LIBUSB_ERROR code on failure. 2744eaae44dSAndrew Thompson.Pp 275a5118bdfSAndrew Thompson.Ft int 276a5118bdfSAndrew Thompson.Fn libusb_reset_device "libusb_device_handle *devh" 277c8c1f2ecSHans Petter SelaskyPerform an USB port reset for an usb device. 278c8c1f2ecSHans Petter SelaskyReturns 0 on success, 279a5118bdfSAndrew ThompsonLIBUSB_ERROR_NOT_FOUND if re-enumeration is required or if the device has 280a5118bdfSAndrew Thompsonbeen disconnected and a LIBUSB_ERROR code on failure. 2814eaae44dSAndrew Thompson.Pp 282a5118bdfSAndrew Thompson.Ft int 283f1b5fa6eSHans Petter Selasky.Fn libusb_check_connected "libusb_device_handle *devh" 28411867070SHans Petter SelaskyTest if the USB device is still connected. 285c8c1f2ecSHans Petter SelaskyReturns 0 on success, 28611867070SHans Petter SelaskyLIBUSB_ERROR_NO_DEVICE if it has been disconnected and a LIBUSB_ERROR 287f1b5fa6eSHans Petter Selaskycode on failure. 288f1b5fa6eSHans Petter Selasky.Pp 289f1b5fa6eSHans Petter Selasky.Ft int 290a5118bdfSAndrew Thompson.Fn libusb_kernel_driver_active "libusb_device_handle *devh" "int interface" 291c8c1f2ecSHans Petter SelaskyDetermine if a driver is active on a interface. 2924d2472aaSHans Petter SelaskyReturns 0 if no kernel driver is active 2934d2472aaSHans Petter Selaskyand 1 if a kernel driver is active, LIBUSB_ERROR_NO_DEVICE 29411867070SHans Petter Selaskyif the device has been disconnected and a LIBUSB_ERROR code on failure. 2954eaae44dSAndrew Thompson.Pp 296a5118bdfSAndrew Thompson.Ft int 297698e791aSHans Petter Selasky.Fn libusb_get_driver "libusb_device_handle *devh" "int interface" "char *name" "int namelen" 298698e791aSHans Petter Selaskyor 299698e791aSHans Petter Selasky.Ft int 300698e791aSHans Petter Selasky.Fn libusb_get_driver_np "libusb_device_handle *devh" "int interface" "char *name" "int namelen" 30111867070SHans Petter SelaskyCopy the name of the driver attached to the given 302698e791aSHans Petter Selasky.Fa device 303698e791aSHans Petter Selaskyand 304698e791aSHans Petter Selasky.Fa interface 30511867070SHans Petter Selaskyinto the buffer 306698e791aSHans Petter Selasky.Fa name 30711867070SHans Petter Selaskyof length 308698e791aSHans Petter Selasky.Fa namelen . 309698e791aSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NOT_FOUND if no kernel driver is attached 310698e791aSHans Petter Selaskyto the given interface and LIBUSB_ERROR_INVALID_PARAM if the interface does 311698e791aSHans Petter Selaskynot exist. 312698e791aSHans Petter SelaskyThis function is non-portable. 313698e791aSHans Petter SelaskyThe buffer pointed to by 314698e791aSHans Petter Selasky.Fa name 315698e791aSHans Petter Selaskyis only zero terminated on success. 316698e791aSHans Petter Selasky.Pp 317698e791aSHans Petter Selasky.Ft int 318a5118bdfSAndrew Thompson.Fn libusb_detach_kernel_driver "libusb_device_handle *devh" "int interface" 319698e791aSHans Petter Selaskyor 320698e791aSHans Petter Selasky.Ft int 321698e791aSHans Petter Selasky.Fn libusb_detach_kernel_driver_np "libusb_device_handle *devh" "int interface" 322698e791aSHans Petter SelaskyDetach a kernel driver from an interface. 32311867070SHans Petter SelaskyThis is needed to claim an interface already claimed by a kernel driver. 324698e791aSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NOT_FOUND if no kernel driver was active, 325c8c1f2ecSHans Petter SelaskyLIBUSB_ERROR_INVALID_PARAM if the interface does not exist, 326c8c1f2ecSHans Petter SelaskyLIBUSB_ERROR_NO_DEVICE if the device has been disconnected 327c8c1f2ecSHans Petter Selaskyand a LIBUSB_ERROR code on failure. 328c8c1f2ecSHans Petter SelaskyThis function is non-portable. 3294eaae44dSAndrew Thompson.Pp 330a5118bdfSAndrew Thompson.Ft int 331a5118bdfSAndrew Thompson.Fn libusb_attach_kernel_driver "libusb_device_handle *devh" "int interface" 33211867070SHans Petter SelaskyRe-attach an interface kernel driver that was previously detached. 333c8c1f2ecSHans Petter SelaskyReturns 0 on success, 334c8c1f2ecSHans Petter SelaskyLIBUSB_ERROR_INVALID_PARAM if the interface does not exist, 335c8c1f2ecSHans Petter SelaskyLIBUSB_ERROR_NO_DEVICE 33611867070SHans Petter Selaskyif the device has been disconnected, LIBUSB_ERROR_BUSY if the driver cannot be 337a5118bdfSAndrew Thompsonattached because the interface is claimed by a program or driver and a 338a5118bdfSAndrew ThompsonLIBUSB_ERROR code on failure. 3395b40d960SHans Petter Selasky.Pp 3405b40d960SHans Petter Selasky.Ft int 3415b40d960SHans Petter Selasky.Fn libusb_set_auto_detach_kernel_driver "libusb_device_handle *devh" "int enable" 3425b40d960SHans Petter SelaskyThis function enables automatic kernel interface driver detach when an 3435b40d960SHans Petter Selaskyinterface is claimed. 3445b40d960SHans Petter SelaskyWhen the interface is restored the kernel driver is allowed to be re-attached. 3455b40d960SHans Petter SelaskyIf the 3465b40d960SHans Petter Selasky.Fa enable 3475b40d960SHans Petter Selaskyargument is non-zero the feature is enabled. 3485b40d960SHans Petter SelaskyElse disabled. 3495b40d960SHans Petter SelaskyReturns 0 on success and a LIBUSB_ERROR code on 3505b40d960SHans Petter Selaskyfailure. 351a5118bdfSAndrew Thompson.Sh USB DESCRIPTORS 352a5118bdfSAndrew Thompson.Ft int 353a5118bdfSAndrew Thompson.Fn libusb_get_device_descriptor "libusb_device *dev" "libusb_device_descriptor *desc" 354a5118bdfSAndrew ThompsonGet the USB device descriptor for the device 355a5118bdfSAndrew Thompson.Fa dev . 356c8c1f2ecSHans Petter SelaskyThis is a non-blocking function. 357c8c1f2ecSHans Petter SelaskyReturns 0 on success and a LIBUSB_ERROR code on 358a5118bdfSAndrew Thompsonfailure. 3594eaae44dSAndrew Thompson.Pp 360a5118bdfSAndrew Thompson.Ft int 361cb0df9e8SHans Petter Selasky.Fn libusb_get_active_config_descriptor "libusb_device *dev" "struct libusb_config_descriptor **config" 362c8c1f2ecSHans Petter SelaskyGet the USB configuration descriptor for the active configuration. 363c8c1f2ecSHans Petter SelaskyReturns 0 on 36411867070SHans Petter Selaskysuccess, LIBUSB_ERROR_NOT_FOUND if the device is in 36511867070SHans Petter Selaskyan unconfigured state 36611867070SHans Petter Selaskyand a LIBUSB_ERROR code on error. 3674eaae44dSAndrew Thompson.Pp 368a5118bdfSAndrew Thompson.Ft int 369a5118bdfSAndrew Thompson.Fn libusb_get_config_descriptor "libusb_device *dev" "uint8_t config_index" "libusb_config_descriptor **config" 37011867070SHans Petter SelaskyGet a USB configuration descriptor based on its index 371a5118bdfSAndrew Thompson.Fa idx . 372a5118bdfSAndrew ThompsonReturns 0 on success, LIBUSB_ERROR_NOT_FOUND if the configuration does not exist 37311867070SHans Petter Selaskyand a LIBUSB_ERROR code on error. 374545b01adSAndrew Thompson.Pp 375a5118bdfSAndrew Thompson.Ft int 376a5118bdfSAndrew Thompson.Fn libusb_get_config_descriptor_by_value "libusb_device *dev" "uint8 bConfigurationValue" "libusb_config_descriptor **config" 377c8c1f2ecSHans Petter SelaskyGet a USB configuration descriptor with a specific bConfigurationValue. 378c8c1f2ecSHans Petter SelaskyThis is 37911867070SHans Petter Selaskya non-blocking function which does not send a request through the device. 380c8c1f2ecSHans Petter SelaskyReturns 0 381c8c1f2ecSHans Petter Selaskyon success, LIBUSB_ERROR_NOT_FOUND if the configuration 38211867070SHans Petter Selaskydoes not exist and a 383a5118bdfSAndrew ThompsonLIBUSB_ERROR code on failure. 3844eaae44dSAndrew Thompson.Pp 385a5118bdfSAndrew Thompson.Ft void 386390065b1SAlfred Perlstein.Fn libusb_free_config_descriptor "libusb_config_descriptor *config" 387a5118bdfSAndrew ThompsonFree a configuration descriptor. 3884eaae44dSAndrew Thompson.Pp 389a5118bdfSAndrew Thompson.Ft int 39078ed0e49SHans Petter Selasky.Fn libusb_get_string_descriptor "libusb_device_handle *devh" "uint8_t desc_idx" "uint16_t langid" "unsigned char *data" "int length" 39178ed0e49SHans Petter SelaskyRetrieve a string descriptor in raw format. 39278ed0e49SHans Petter SelaskyReturns the number of bytes actually transferred on success 39378ed0e49SHans Petter Selaskyor a negative LIBUSB_ERROR code on failure. 39478ed0e49SHans Petter Selasky.Pp 39578ed0e49SHans Petter Selasky.Ft int 396a5118bdfSAndrew Thompson.Fn libusb_get_string_descriptor_ascii "libusb_device_handle *devh" "uint8_t desc_idx" "unsigned char *data" "int length" 39711867070SHans Petter SelaskyRetrieve a string descriptor in C style ASCII. 39811867070SHans Petter SelaskyReturns the positive number of bytes in the resulting ASCII string 399c8c1f2ecSHans Petter Selaskyon success and a LIBUSB_ERROR code on failure. 4004eaae44dSAndrew Thompson.Pp 4014c0392e6SHans Petter Selasky.Ft int 4024c0392e6SHans Petter Selasky.Fn libusb_parse_ss_endpoint_comp "const void *buf" "int len" "libusb_ss_endpoint_companion_descriptor **ep_comp" 4034c0392e6SHans Petter SelaskyThis function parses the USB 3.0 endpoint companion descriptor in host endian format pointed to by 4044c0392e6SHans Petter Selasky.Fa buf 4054c0392e6SHans Petter Selaskyand having a length of 4064c0392e6SHans Petter Selasky.Fa len . 4074c0392e6SHans Petter SelaskyTypically these arguments are the extra and extra_length fields of the 4084c0392e6SHans Petter Selaskyendpoint descriptor. 4094c0392e6SHans Petter SelaskyOn success the pointer to resulting descriptor is stored at the location given by 4104c0392e6SHans Petter Selasky.Fa ep_comp . 4114c0392e6SHans Petter SelaskyReturns zero on success and a LIBUSB_ERROR code on failure. 4124c0392e6SHans Petter SelaskyOn success the parsed USB 3.0 endpoint companion descriptor must be 4134c0392e6SHans Petter Selaskyfreed using the libusb_free_ss_endpoint_comp function. 4144c0392e6SHans Petter Selasky.Pp 4154c0392e6SHans Petter Selasky.Ft void 4164c0392e6SHans Petter Selasky.Fn libusb_free_ss_endpoint_comp "libusb_ss_endpoint_companion_descriptor *ep_comp" 41737d0636aSHans Petter SelaskyThis function is NULL safe and frees a parsed USB 3.0 endpoint companion descriptor given by 41837d0636aSHans Petter Selasky.Fa ep_comp . 41937d0636aSHans Petter Selasky.Pp 42037d0636aSHans Petter Selasky.Ft int 42137d0636aSHans 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" 42237d0636aSHans Petter SelaskyThis function finds and parses the USB 3.0 endpoint companion descriptor given by 42337d0636aSHans Petter Selasky.Fa endpoint . 42437d0636aSHans Petter SelaskyReturns zero on success and a LIBUSB_ERROR code on failure. 42537d0636aSHans Petter SelaskyOn success the parsed USB 3.0 endpoint companion descriptor must be 42637d0636aSHans Petter Selaskyfreed using the libusb_free_ss_endpoint_companion_descriptor function. 42737d0636aSHans Petter Selasky.Pp 42837d0636aSHans Petter Selasky.Ft void 42937d0636aSHans Petter Selasky.Fn libusb_free_ss_endpoint_companion_descriptor "struct libusb_ss_endpoint_companion_descriptor *ep_comp" 43037d0636aSHans Petter SelaskyThis function is NULL safe and frees a parsed USB 3.0 endpoint companion descriptor given by 43137d0636aSHans Petter Selasky.Fa ep_comp . 43237d0636aSHans Petter Selasky.Pp 43337d0636aSHans Petter Selasky.Ft int 43437d0636aSHans Petter Selasky.Fn libusb_get_bos_descriptor "libusb_device_handle *handle" "struct libusb_bos_descriptor **bos" 43537d0636aSHans Petter SelaskyThis function queries the USB device given by 43637d0636aSHans Petter Selasky.Fa handle 43737d0636aSHans Petter Selaskyand stores a pointer to a parsed BOS descriptor into 43837d0636aSHans Petter Selasky.Fa bos . 43937d0636aSHans Petter SelaskyReturns zero on success and a LIBUSB_ERROR code on failure. 44037d0636aSHans Petter SelaskyOn success the parsed BOS descriptor must be 44137d0636aSHans Petter Selaskyfreed using the libusb_free_bos_descriptor function. 4424c0392e6SHans Petter Selasky.Pp 4434c0392e6SHans Petter Selasky.Ft int 4444c0392e6SHans Petter Selasky.Fn libusb_parse_bos_descriptor "const void *buf" "int len" "libusb_bos_descriptor **bos" 4454c0392e6SHans Petter SelaskyThis function parses a Binary Object Store, BOS, descriptor into host endian format pointed to by 4464c0392e6SHans Petter Selasky.Fa buf 4474c0392e6SHans Petter Selaskyand having a length of 4484c0392e6SHans Petter Selasky.Fa len . 4494c0392e6SHans Petter SelaskyOn success the pointer to resulting descriptor is stored at the location given by 4504c0392e6SHans Petter Selasky.Fa bos . 4514c0392e6SHans Petter SelaskyReturns zero on success and a LIBUSB_ERROR code on failure. 4524c0392e6SHans Petter SelaskyOn success the parsed BOS descriptor must be freed using the 4534c0392e6SHans Petter Selaskylibusb_free_bos_descriptor function. 4544c0392e6SHans Petter Selasky.Pp 4554c0392e6SHans Petter Selasky.Ft void 4564c0392e6SHans Petter Selasky.Fn libusb_free_bos_descriptor "libusb_bos_descriptor *bos" 45737d0636aSHans Petter SelaskyThis function is NULL safe and frees a parsed BOS descriptor given by 45837d0636aSHans Petter Selasky.Fa bos . 45937d0636aSHans Petter Selasky.Pp 46037d0636aSHans Petter Selasky.Ft int 46137d0636aSHans 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" 46237d0636aSHans Petter SelaskyThis function parses the USB 2.0 extension descriptor from the descriptor given by 46337d0636aSHans Petter Selasky.Fa dev_cap 46437d0636aSHans Petter Selaskyand stores a pointer to the parsed descriptor into 46537d0636aSHans Petter Selasky.Fa usb_2_0_extension . 46637d0636aSHans Petter SelaskyReturns zero on success and a LIBUSB_ERROR code on failure. 46737d0636aSHans Petter SelaskyOn success the parsed USB 2.0 extension descriptor must be freed using the 46837d0636aSHans Petter Selaskylibusb_free_usb_2_0_extension_descriptor function. 46937d0636aSHans Petter Selasky.Pp 47037d0636aSHans Petter Selasky.Ft void 47137d0636aSHans Petter Selasky.Fn libusb_free_usb_2_0_extension_descriptor "struct libusb_usb_2_0_extension_descriptor *usb_2_0_extension" 47237d0636aSHans Petter SelaskyThis function is NULL safe and frees a parsed USB 2.0 extension descriptor given by 47337d0636aSHans Petter Selasky.Fa usb_2_0_extension . 47437d0636aSHans Petter Selasky.Pp 47537d0636aSHans Petter Selasky.Ft int 47637d0636aSHans 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" 47737d0636aSHans Petter SelaskyThis function parses the SuperSpeed device capability descriptor from the descriptor given by 47837d0636aSHans Petter Selasky.Fa dev_cap 47937d0636aSHans Petter Selaskyand stores a pointer to the parsed descriptor into 48037d0636aSHans Petter Selasky.Fa ss_usb_device_capability . 48137d0636aSHans Petter SelaskyReturns zero on success and a LIBUSB_ERROR code on failure. 48237d0636aSHans Petter SelaskyOn success the parsed SuperSpeed device capability descriptor must be freed using the 48337d0636aSHans Petter Selaskylibusb_free_ss_usb_device_capability_descriptor function. 48437d0636aSHans Petter Selasky.Pp 48537d0636aSHans Petter Selasky.Ft void 48637d0636aSHans Petter Selasky.Fn libusb_free_ss_usb_device_capability_descriptor "struct libusb_ss_usb_device_capability_descriptor *ss_usb_device_capability" 48737d0636aSHans Petter SelaskyThis function is NULL safe and frees a parsed SuperSpeed device capability descriptor given by 48837d0636aSHans Petter Selasky.Fa ss_usb_device_capability . 48937d0636aSHans Petter Selasky.Pp 49037d0636aSHans Petter Selasky.Ft int 49137d0636aSHans 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" 49237d0636aSHans Petter SelaskyThis function parses the container ID descriptor from the descriptor given by 49337d0636aSHans Petter Selasky.Fa dev_cap 49437d0636aSHans Petter Selaskyand stores a pointer to the parsed descriptor into 49537d0636aSHans Petter Selasky.Fa container_id . 49637d0636aSHans Petter SelaskyReturns zero on success and a LIBUSB_ERROR code on failure. 49737d0636aSHans Petter SelaskyOn success the parsed container ID descriptor must be freed using the 49837d0636aSHans Petter Selaskylibusb_free_container_id_descriptor function. 49937d0636aSHans Petter Selasky.Pp 50037d0636aSHans Petter Selasky.Ft void 50137d0636aSHans Petter Selasky.Fn libusb_free_container_id_descriptor "struct libusb_container_id_descriptor *container_id" 50237d0636aSHans Petter SelaskyThis function is NULL safe and frees a parsed container ID descriptor given by 50337d0636aSHans Petter Selasky.Fa container_id . 504a5118bdfSAndrew Thompson.Sh USB ASYNCHRONOUS I/O 505a5118bdfSAndrew Thompson.Ft struct libusb_transfer * 506a5118bdfSAndrew Thompson.Fn libusb_alloc_transfer "int iso_packets" 50711867070SHans Petter SelaskyAllocate a transfer with the number of isochronous packet descriptors 50811867070SHans Petter Selaskyspecified by 50911867070SHans Petter Selasky.Fa iso_packets . 510ca96e26aSHans Petter SelaskyReturns NULL on error. 5114eaae44dSAndrew Thompson.Pp 512a5118bdfSAndrew Thompson.Ft void 513a5118bdfSAndrew Thompson.Fn libusb_free_transfer "struct libusb_transfer *tr" 514a5118bdfSAndrew ThompsonFree a transfer. 5154eaae44dSAndrew Thompson.Pp 516a5118bdfSAndrew Thompson.Ft int 517a5118bdfSAndrew Thompson.Fn libusb_submit_transfer "struct libusb_transfer *tr" 518ca96e26aSHans Petter SelaskyThis function will submit a transfer and returns immediately. 519c8c1f2ecSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NO_DEVICE if 52011867070SHans Petter Selaskythe device has been disconnected and a 521a5118bdfSAndrew ThompsonLIBUSB_ERROR code on other failure. 5224eaae44dSAndrew Thompson.Pp 523a5118bdfSAndrew Thompson.Ft int 524a5118bdfSAndrew Thompson.Fn libusb_cancel_transfer "struct libusb_transfer *tr" 52511867070SHans Petter SelaskyThis function asynchronously cancels a transfer. 52611867070SHans Petter SelaskyReturns 0 on success and a LIBUSB_ERROR code on failure. 527a5118bdfSAndrew Thompson.Sh USB SYNCHRONOUS I/O 528a5118bdfSAndrew Thompson.Ft int 529698e791aSHans 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" 530ca96e26aSHans Petter SelaskyPerform a USB control transfer. 531ca96e26aSHans Petter SelaskyReturns the actual number of bytes 53211867070SHans Petter Selaskytransferred on success, in the range from and including zero up to and 533c865d740SHans Petter Selaskyincluding 534892f4806SHans Petter Selasky.Fa wLength . 53511867070SHans Petter SelaskyOn error a LIBUSB_ERROR code is returned, for example 53611867070SHans Petter SelaskyLIBUSB_ERROR_TIMEOUT if the transfer timed out, LIBUSB_ERROR_PIPE if the 537c865d740SHans Petter Selaskycontrol request was not supported, LIBUSB_ERROR_NO_DEVICE if the 53811867070SHans Petter Selaskydevice has been disconnected and another LIBUSB_ERROR code on other failures. 53911867070SHans Petter SelaskyThe LIBUSB_ERROR codes are all negative. 5404eaae44dSAndrew Thompson.Pp 541a5118bdfSAndrew Thompson.Ft int 542a5118bdfSAndrew Thompson.Fn libusb_bulk_transfer "struct libusb_device_handle *devh" "unsigned char endpoint" "unsigned char *data" "int length" "int *transferred" "unsigned int timeout" 543892f4806SHans Petter SelaskyPerform an USB bulk 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. 5514eaae44dSAndrew Thompson.Pp 552a5118bdfSAndrew Thompson.Ft int 553a5118bdfSAndrew Thompson.Fn libusb_interrupt_transfer "struct libusb_device_handle *devh" "unsigned char endpoint" "unsigned char *data" "int length" "int *transferred" "unsigned int timeout" 554892f4806SHans Petter SelaskyPerform an USB Interrupt transfer. 555892f4806SHans Petter SelaskyA timeout value of zero means no timeout. 556892f4806SHans Petter SelaskyThe timeout value is given in milliseconds. 557892f4806SHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_TIMEOUT 55811867070SHans Petter Selaskyif the transfer timed out, LIBUSB_ERROR_PIPE if the control request was not 559a5118bdfSAndrew Thompsonsupported, LIBUSB_ERROR_OVERFLOW if the device offered more data, 560a5118bdfSAndrew ThompsonLIBUSB_ERROR_NO_DEVICE if the device has been disconnected and 56111867070SHans Petter Selaskya LIBUSB_ERROR code on other failure. 562a0c93fa3SHans Petter Selasky.Sh USB STREAMS SUPPORT 563a0c93fa3SHans Petter Selasky.Ft int 564a0c93fa3SHans Petter Selasky.Fn libusb_alloc_streams "libusb_device_handle *dev" "uint32_t num_streams" "unsigned char *endpoints" "int num_endpoints" 565a0c93fa3SHans Petter SelaskyThis function verifies that the given number of streams using the 566a0c93fa3SHans Petter Selaskygiven number of endpoints is allowed and allocates the resources 567a0c93fa3SHans Petter Selaskyneeded to use so-called USB streams. 568a0c93fa3SHans Petter SelaskyCurrently only a single stream per endpoint is supported to simplify 569a0c93fa3SHans Petter Selaskythe internals of LibUSB. 570a0c93fa3SHans Petter SelaskyThis function returns 0 on success or a LIBUSB_ERROR code on failure. 571a0c93fa3SHans Petter Selasky.Pp 572a0c93fa3SHans Petter Selasky.Ft int 573a0c93fa3SHans Petter Selasky.Fn libusb_free_streams "libusb_device_handle *dev" "unsigned char *endpoints" "int num_endpoints" 574a0c93fa3SHans Petter SelaskyThis function release resources needed for streams usage. 575a0c93fa3SHans Petter SelaskyReturns 0 on success or a LIBUSB_ERROR code on failure. 576a0c93fa3SHans Petter Selasky.Pp 577a0c93fa3SHans Petter Selasky.Ft void 578a0c93fa3SHans Petter Selasky.Fn libusb_transfer_set_stream_id "struct libusb_transfer *transfer" "uint32_t stream_id" 579a0c93fa3SHans Petter SelaskyThis function sets the stream ID for the given USB transfer. 580a0c93fa3SHans Petter Selasky.Pp 581a0c93fa3SHans Petter Selasky.Ft uint32_t 582a0c93fa3SHans Petter Selasky.Fn libusb_transfer_get_stream_id "struct libusb_transfer *transfer" 583a0c93fa3SHans Petter SelaskyThis function returns the stream ID for the given USB transfer. 584a0c93fa3SHans Petter SelaskyIf no stream ID is used a value of zero is returned. 585a5118bdfSAndrew Thompson.Sh USB EVENTS 586a5118bdfSAndrew Thompson.Ft int 587a5118bdfSAndrew Thompson.Fn libusb_try_lock_events "libusb_context *ctx" 588ca96e26aSHans Petter SelaskyTry to acquire the event handling lock. 589ca96e26aSHans Petter SelaskyReturns 0 if the lock was obtained and 1 if not. 5904eaae44dSAndrew Thompson.Pp 591a5118bdfSAndrew Thompson.Ft void 592a5118bdfSAndrew Thompson.Fn libusb_lock_events "libusb_context *ctx" 593c8c1f2ecSHans Petter SelaskyAcquire the event handling lock. 594c8c1f2ecSHans Petter SelaskyThis function is blocking. 5954eaae44dSAndrew Thompson.Pp 596a5118bdfSAndrew Thompson.Ft void 597a5118bdfSAndrew Thompson.Fn libusb_unlock_events "libusb_context *ctx" 598c8c1f2ecSHans Petter SelaskyRelease the event handling lock. 599c8c1f2ecSHans Petter SelaskyThis will wake up any thread blocked 60011867070SHans Petter Selaskyon 601d284271aSJoel Dahl.Fn libusb_wait_for_event . 6024eaae44dSAndrew Thompson.Pp 603a5118bdfSAndrew Thompson.Ft int 604a5118bdfSAndrew Thompson.Fn libusb_event_handling_ok "libusb_context *ctx" 605c8c1f2ecSHans Petter SelaskyDetermine if it still OK for this thread to be doing event handling. 606c8c1f2ecSHans Petter SelaskyReturns 1 607c8c1f2ecSHans Petter Selaskyif event handling can start or continue. 608c8c1f2ecSHans Petter SelaskyReturns 0 if this thread must give up 609a5118bdfSAndrew Thompsonthe events lock. 6104eaae44dSAndrew Thompson.Pp 611a5118bdfSAndrew Thompson.Ft int 612a5118bdfSAndrew Thompson.Fn libusb_event_handler_active "libusb_context *ctx" 613c8c1f2ecSHans Petter SelaskyDetermine if an active thread is handling events. 61411867070SHans Petter SelaskyReturns 1 if there is a thread handling events and 0 if there 615a5118bdfSAndrew Thompsonare no threads currently handling events. 6164eaae44dSAndrew Thompson.Pp 617a5118bdfSAndrew Thompson.Ft void 618aa87aa52SHans Petter Selasky.Fn libusb_interrupt_event_handler "libusb_context *ctx" 619aa87aa52SHans Petter SelaskyCauses the 620aa87aa52SHans Petter Selasky.Fn libusb_handle_events 621aa87aa52SHans Petter Selaskyfamiliy of functions to return to the caller one time. 622aa87aa52SHans Petter SelaskyThe 623aa87aa52SHans Petter Selasky.Fn libusb_handle_events 624aa87aa52SHans Petter Selaskyfunctions may be called again after calling this function. 625aa87aa52SHans Petter Selasky.Pp 626aa87aa52SHans Petter Selasky.Ft void 627a5118bdfSAndrew Thompson.Fn libusb_lock_event_waiters "libusb_context *ctx" 628c8c1f2ecSHans Petter SelaskyAcquire the event_waiters lock. 62911867070SHans Petter SelaskyThis lock is designed to be obtained in the 630a5118bdfSAndrew Thompsonsituation where you want to be aware when events are completed, but some other 631882764c1SMateusz Piotrowskithread is event handling so calling 632882764c1SMateusz Piotrowski.Fn libusb_handle_events 633882764c1SMateusz Piotrowskiis not allowed. 634545b01adSAndrew Thompson.Pp 635a5118bdfSAndrew Thompson.Ft void 636a5118bdfSAndrew Thompson.Fn libusb_unlock_event_waiters "libusb_context *ctx" 637a5118bdfSAndrew ThompsonRelease the event_waiters lock. 6384eaae44dSAndrew Thompson.Pp 639a5118bdfSAndrew Thompson.Ft int 640a5118bdfSAndrew Thompson.Fn libusb_wait_for_event "libusb_context *ctx" "struct timeval *tv" 641c8c1f2ecSHans Petter SelaskyWait for another thread to signal completion of an event. 642c8c1f2ecSHans Petter SelaskyMust be called 643882764c1SMateusz Piotrowskiwith the event waiters lock held, see 644882764c1SMateusz Piotrowski.Fn libusb_lock_event_waiters . 645c8c1f2ecSHans Petter SelaskyThis will 646a5118bdfSAndrew Thompsonblock until the timeout expires or a transfer completes or a thread releases 647882764c1SMateusz Piotrowskithe event handling lock through 648882764c1SMateusz Piotrowski.Fn libusb_unlock_events . 649c8c1f2ecSHans Petter SelaskyReturns 0 after a 65011867070SHans Petter Selaskytransfer completes or another thread stops event handling, and 1 if the 651a5118bdfSAndrew Thompsontimeout expired. 6524eaae44dSAndrew Thompson.Pp 653a5118bdfSAndrew Thompson.Ft int 65403205428SHans Petter Selasky.Fn libusb_handle_events_timeout_completed "libusb_context *ctx" "struct timeval *tv" "int *completed" 65503205428SHans Petter SelaskyHandle any pending events by checking if timeouts have expired and by 65603205428SHans Petter Selaskychecking the set of file descriptors for activity. 65703205428SHans Petter SelaskyIf the 65803205428SHans Petter Selasky.Fa completed 65903205428SHans Petter Selaskyargument is not equal to NULL, this function will 66003205428SHans Petter Selaskyloop until a transfer completion callback sets the variable pointed to 66103205428SHans Petter Selaskyby the 66203205428SHans Petter Selasky.Fa completed 66303205428SHans Petter Selaskyargument to non-zero. 66403205428SHans Petter SelaskyIf the 66503205428SHans Petter Selasky.Fa tv 66603205428SHans Petter Selaskyargument is not equal to NULL, this function will return 66703205428SHans Petter SelaskyLIBUSB_ERROR_TIMEOUT after the given timeout. 66803205428SHans Petter SelaskyReturns 0 on success, or a LIBUSB_ERROR code on failure or timeout. 66903205428SHans Petter Selasky.Pp 67003205428SHans Petter Selasky.Ft int 67103205428SHans Petter Selasky.Fn libusb_handle_events_completed "libusb_context *ctx" "int *completed" 67203205428SHans Petter SelaskyHandle any pending events by checking the set of file descriptors for activity. 67303205428SHans Petter SelaskyIf the 67403205428SHans Petter Selasky.Fa completed 67503205428SHans Petter Selaskyargument is not equal to NULL, this function will 67603205428SHans Petter Selaskyloop until a transfer completion callback sets the variable pointed to 67703205428SHans Petter Selaskyby the 67803205428SHans Petter Selasky.Fa completed 67903205428SHans Petter Selaskyargument to non-zero. 68003205428SHans Petter SelaskyReturns 0 on success, or a LIBUSB_ERROR code on failure. 68103205428SHans Petter Selasky.Pp 68203205428SHans Petter Selasky.Ft int 683a5118bdfSAndrew Thompson.Fn libusb_handle_events_timeout "libusb_context *ctx" "struct timeval *tv" 684a5118bdfSAndrew ThompsonHandle any pending events by checking if timeouts have expired and by 685c8c1f2ecSHans Petter Selaskychecking the set of file descriptors for activity. 686c8c1f2ecSHans Petter SelaskyReturns 0 on success, or a 68703205428SHans Petter SelaskyLIBUSB_ERROR code on failure or timeout. 6884eaae44dSAndrew Thompson.Pp 689a5118bdfSAndrew Thompson.Ft int 690a5118bdfSAndrew Thompson.Fn libusb_handle_events "libusb_context *ctx" 691c8c1f2ecSHans Petter SelaskyHandle any pending events in blocking mode with a sensible timeout. 692c8c1f2ecSHans Petter SelaskyReturns 0 69311867070SHans Petter Selaskyon success and a LIBUSB_ERROR code on failure. 6944eaae44dSAndrew Thompson.Pp 695a5118bdfSAndrew Thompson.Ft int 696a5118bdfSAndrew Thompson.Fn libusb_handle_events_locked "libusb_context *ctx" "struct timeval *tv" 6973102cfe2SGlen BarberHandle any pending events by polling file descriptors, without checking if 69811867070SHans Petter Selaskyanother thread is already doing so. 699c8c1f2ecSHans Petter SelaskyMust be called with the event lock held. 7004eaae44dSAndrew Thompson.Pp 701a5118bdfSAndrew Thompson.Ft int 702a5118bdfSAndrew Thompson.Fn libusb_get_next_timeout "libusb_context *ctx" "struct timeval *tv" 703c8c1f2ecSHans Petter SelaskyDetermine the next internal timeout that libusb needs to handle. 704c8c1f2ecSHans Petter SelaskyReturns 0 70511867070SHans Petter Selaskyif there are no pending timeouts, 1 if a timeout was returned, or a LIBUSB_ERROR 70603205428SHans Petter Selaskycode on failure or timeout. 7074eaae44dSAndrew Thompson.Pp 708a5118bdfSAndrew Thompson.Ft void 709a5118bdfSAndrew Thompson.Fn libusb_set_pollfd_notifiers "libusb_context *ctx" "libusb_pollfd_added_cb added_cb" "libusb_pollfd_removed_cb remove_cb" "void *user_data" 710a5118bdfSAndrew ThompsonRegister notification functions for file descriptor additions/removals. 711a5118bdfSAndrew ThompsonThese functions will be invoked for every new or removed file descriptor 712a5118bdfSAndrew Thompsonthat libusb uses as an event source. 7134eaae44dSAndrew Thompson.Pp 714a5118bdfSAndrew Thompson.Ft const struct libusb_pollfd ** 715a5118bdfSAndrew Thompson.Fn libusb_get_pollfds "libusb_context *ctx" 716882764c1SMateusz PiotrowskiRetrieve a list of file descriptors that should be polled by your main loop as 717c8c1f2ecSHans Petter Selaskylibusb event sources. 718c8c1f2ecSHans Petter SelaskyReturns a NULL-terminated list on success or NULL on failure. 7197bdc064bSHans Petter Selasky.Pp 7207bdc064bSHans Petter Selasky.Ft int 7217bdc064bSHans 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" 7227bdc064bSHans Petter SelaskyThis function registers a hotplug filter. 7237bdc064bSHans Petter SelaskyThe 7247bdc064bSHans Petter Selasky.Fa events 7257bdc064bSHans Petter Selaskyargument select which events makes the hotplug filter trigger. 7267bdc064bSHans Petter SelaskyAvailable event values are LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED and LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT. 7277bdc064bSHans Petter SelaskyOne or more events must be specified. 7287bdc064bSHans Petter SelaskyThe 7297bdc064bSHans Petter Selasky.Fa vendor_id , 7307bdc064bSHans Petter Selasky.Fa product_id 7317bdc064bSHans Petter Selaskyand 7327bdc064bSHans Petter Selasky.Fa dev_class 7337bdc064bSHans Petter Selaskyarguments can be set to LIBUSB_HOTPLUG_MATCH_ANY to match any value in the USB device descriptor. 7347bdc064bSHans Petter SelaskyElse the specified value is used for matching. 7357bdc064bSHans Petter SelaskyIf the 7367bdc064bSHans Petter Selasky.Fa flags 7377bdc064bSHans 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 7387bdc064bSHans Petter Selasky.Fa cb_fn 7397bdc064bSHans Petter Selaskyargument. 7407bdc064bSHans Petter SelaskyElse the 7417bdc064bSHans Petter Selasky.Fa flags 7427bdc064bSHans Petter Selaskyargument should be set to LIBUSB_HOTPLUG_NO_FLAGS. 7437bdc064bSHans Petter SelaskyThis function returns 0 upon success or a LIBUSB_ERROR code on failure. 7447bdc064bSHans Petter Selasky.Pp 7457bdc064bSHans Petter Selasky.Ft int 7467bdc064bSHans Petter Selasky.Fn libusb_hotplug_callback_fn "libusb_context *ctx" "libusb_device *device" "libusb_hotplug_event event" "void *user_data" 7477bdc064bSHans Petter SelaskyThe hotplug filter function. 7487bdc064bSHans Petter SelaskyIf this function returns non-zero, the filter is removed. 7497bdc064bSHans Petter SelaskyElse the filter is kept and can receive more events. 7507bdc064bSHans Petter SelaskyThe 7517bdc064bSHans Petter Selasky.Fa user_data 7527bdc064bSHans Petter Selaskyargument is the same as given when the filter was registered. 7537bdc064bSHans Petter SelaskyThe 7547bdc064bSHans Petter Selasky.Fa event 7557bdc064bSHans Petter Selaskyargument can be either of LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED or LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT. 7567bdc064bSHans Petter Selasky.Pp 7577bdc064bSHans Petter Selasky.Ft void 7587bdc064bSHans Petter Selasky.Fn libusb_hotplug_deregister_callback "libusb_context *ctx" "libusb_hotplug_callback_handle handle" 7597bdc064bSHans Petter SelaskyThis function unregisters a hotplug filter. 7604eaae44dSAndrew Thompson.Sh LIBUSB VERSION 0.1 COMPATIBILITY 761a5118bdfSAndrew ThompsonThe library is also compliant with LibUSB version 0.1.12. 762a5118bdfSAndrew Thompson.Pp 7634eaae44dSAndrew Thompson.Fn usb_open 7644eaae44dSAndrew Thompson.Fn usb_close 7654eaae44dSAndrew Thompson.Fn usb_get_string 7664eaae44dSAndrew Thompson.Fn usb_get_string_simple 7674eaae44dSAndrew Thompson.Fn usb_get_descriptor_by_endpoint 7684eaae44dSAndrew Thompson.Fn usb_get_descriptor 7694eaae44dSAndrew Thompson.Fn usb_parse_descriptor 7704eaae44dSAndrew Thompson.Fn usb_parse_configuration 7714eaae44dSAndrew Thompson.Fn usb_destroy_configuration 7724eaae44dSAndrew Thompson.Fn usb_fetch_and_parse_descriptors 7734eaae44dSAndrew Thompson.Fn usb_bulk_write 7744eaae44dSAndrew Thompson.Fn usb_bulk_read 7754eaae44dSAndrew Thompson.Fn usb_interrupt_write 7764eaae44dSAndrew Thompson.Fn usb_interrupt_read 7774eaae44dSAndrew Thompson.Fn usb_control_msg 7784eaae44dSAndrew Thompson.Fn usb_set_configuration 7794eaae44dSAndrew Thompson.Fn usb_claim_interface 7804eaae44dSAndrew Thompson.Fn usb_release_interface 7814eaae44dSAndrew Thompson.Fn usb_set_altinterface 7824eaae44dSAndrew Thompson.Fn usb_resetep 7834eaae44dSAndrew Thompson.Fn usb_clear_halt 7844eaae44dSAndrew Thompson.Fn usb_reset 7854eaae44dSAndrew Thompson.Fn usb_strerror 7864eaae44dSAndrew Thompson.Fn usb_init 7874eaae44dSAndrew Thompson.Fn usb_set_debug 7884eaae44dSAndrew Thompson.Fn usb_find_busses 7894eaae44dSAndrew Thompson.Fn usb_find_devices 7904eaae44dSAndrew Thompson.Fn usb_device 7914eaae44dSAndrew Thompson.Fn usb_get_busses 792f1b5fa6eSHans Petter Selasky.Fn usb_check_connected 7934eb5923dSHans Petter Selasky.Fn usb_get_driver_np 7944eb5923dSHans Petter Selasky.Fn usb_detach_kernel_driver_np 7954eaae44dSAndrew Thompson.Sh SEE ALSO 796a5118bdfSAndrew Thompson.Xr libusb20 3 , 797c54c1f7cSAndrew Thompson.Xr usb 4 , 798c61f2561SHans Petter Selasky.Xr usbconfig 8 , 799c61f2561SHans Petter Selasky.Xr usbdump 8 800a5118bdfSAndrew Thompson.Pp 801882764c1SMateusz Piotrowski.Lk https://libusb.info/ 8024eaae44dSAndrew Thompson.Sh HISTORY 8034eaae44dSAndrew Thompson.Nm 804a5118bdfSAndrew Thompsonsupport first appeared in 805a5118bdfSAndrew Thompson.Fx 8.0 . 806