xref: /freebsd/lib/libusb/libusb.3 (revision b74aaa1a2199261f9078247d29481a994b6b5e42)
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