xref: /freebsd/lib/libusb/libusb.3 (revision 4d2472aa7bc90cbd437975f90cd2da0ba1b1f534)
14eaae44dSAndrew Thompson.\"
2a5118bdfSAndrew Thompson.\" Copyright (c) 2009 Sylvestre Gallon
34eaae44dSAndrew Thompson.\"
44eaae44dSAndrew Thompson.\" All rights reserved.
54eaae44dSAndrew Thompson.\"
64eaae44dSAndrew Thompson.\" Redistribution and use in source and binary forms, with or without
74eaae44dSAndrew Thompson.\" modification, are permitted provided that the following conditions
84eaae44dSAndrew Thompson.\" are met:
94eaae44dSAndrew Thompson.\" 1. Redistributions of source code must retain the above copyright
104eaae44dSAndrew Thompson.\"    notice, this list of conditions and the following disclaimer.
114eaae44dSAndrew Thompson.\" 2. Redistributions in binary form must reproduce the above copyright
124eaae44dSAndrew Thompson.\"    notice, this list of conditions and the following disclaimer in the
134eaae44dSAndrew Thompson.\"    documentation and/or other materials provided with the distribution.
144eaae44dSAndrew Thompson.\"
154eaae44dSAndrew Thompson.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
164eaae44dSAndrew Thompson.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
174eaae44dSAndrew Thompson.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
184eaae44dSAndrew Thompson.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
194eaae44dSAndrew Thompson.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
204eaae44dSAndrew Thompson.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
214eaae44dSAndrew Thompson.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
224eaae44dSAndrew Thompson.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
234eaae44dSAndrew Thompson.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
244eaae44dSAndrew Thompson.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
254eaae44dSAndrew Thompson.\" SUCH DAMAGE.
264eaae44dSAndrew Thompson.\"
274eaae44dSAndrew Thompson.\" $FreeBSD$
284eaae44dSAndrew Thompson.\"
29ca96e26aSHans Petter Selasky.Dd August 16, 2011
304eaae44dSAndrew Thompson.Dt LIBUSB 3
314eaae44dSAndrew Thompson.Os
324eaae44dSAndrew Thompson.Sh NAME
334eaae44dSAndrew Thompson.Nm libusb
344eaae44dSAndrew Thompson.Nd "USB access library"
354eaae44dSAndrew Thompson.Sh LIBRARY
3611867070SHans Petter SelaskyUSB access library
3711867070SHans Petter Selasky.Pq libusb, -lusb
384eaae44dSAndrew Thompson.Sh SYNOPSIS
39a5118bdfSAndrew Thompson.In libusb.h
404eaae44dSAndrew Thompson.Sh DESCRIPTION
414eaae44dSAndrew ThompsonThe
424eaae44dSAndrew Thompson.Nm
43a5118bdfSAndrew Thompsonlibrary contains interfaces for directly managing a usb device.
44a5118bdfSAndrew ThompsonThe current implementation supports v1.0 of the libusb API.
45a5118bdfSAndrew Thompson.Sh LIBRARY INITIALISATION / DEINITIALISATION
464eaae44dSAndrew Thompson.Pp
47a5118bdfSAndrew Thompson.Ft int
48a5118bdfSAndrew Thompson.Fn libusb_init libusb_context **ctx
49c8c1f2ecSHans Petter SelaskyThis function initialises libusb.
5011867070SHans Petter SelaskyIt must be called at the beginning
5111867070SHans Petter Selaskyof the program, before other libusb routines are used.
52c8c1f2ecSHans Petter SelaskyThis function returns 0 on success or LIBUSB_ERROR on
53a5118bdfSAndrew Thompsonfailure.
544eaae44dSAndrew Thompson.Pp
55a5118bdfSAndrew Thompson.Ft void
56a5118bdfSAndrew Thompson.Fn libusb_exit "libusb_context *ctx"
57c8c1f2ecSHans Petter SelaskyDeinitialise libusb.
58c8c1f2ecSHans Petter SelaskyMust be called at the end of the application.
5911867070SHans Petter SelaskyOther libusb routines may not be called after this function.
60a5118bdfSAndrew Thompson.Pp
61698e791aSHans Petter Selasky.Ft const char *
62698e791aSHans Petter Selasky.Fn libusb_strerror "int code"
6311867070SHans Petter SelaskyGet the ASCII representation of the error given by the
64698e791aSHans Petter Selasky.Fa code
65698e791aSHans Petter Selaskyargument.
66c61f2561SHans Petter SelaskyThis function does not return NULL.
67c61f2561SHans Petter Selasky.Pp
68c61f2561SHans Petter Selasky.Ft const char *
69c61f2561SHans Petter Selasky.Fn libusb_error_name "int code"
70c61f2561SHans Petter SelaskyGet the ASCII representation of the error enum given by the
71c61f2561SHans Petter Selasky.Fa code
72c61f2561SHans Petter Selaskyargument.
73c61f2561SHans Petter SelaskyThis function does not return NULL.
74698e791aSHans Petter Selasky.Pp
75a5118bdfSAndrew Thompson.Ft void
76a5118bdfSAndrew Thompson.Fn libusb_set_debug "libusb_context *ctx" "int level"
7711867070SHans Petter SelaskySet the debug level to
7811867070SHans Petter Selasky.Fa level .
79a5118bdfSAndrew Thompson.Pp
80a5118bdfSAndrew Thompson.Ft ssize_t
81a5118bdfSAndrew Thompson.Fn libusb_get_device_list "libusb_context *ctx" "libusb_device ***list"
8211867070SHans Petter SelaskyPopulate
83a5118bdfSAndrew Thompson.Fa list
8411867070SHans Petter Selaskywith the list of usb devices available, adding a reference to each
8511867070SHans Petter Selaskydevice in the list.
8611867070SHans Petter SelaskyAll the list entries created by this
8711867070SHans Petter Selaskyfunction must have their reference counter
8811867070SHans Petter Selaskydecremented when you are done with them,
8911867070SHans Petter Selaskyand the list itself must be freed.
90c8c1f2ecSHans Petter SelaskyThis
9111867070SHans Petter Selaskyfunction returns the number of devices in the list or a LIBUSB_ERROR code.
92a5118bdfSAndrew Thompson.Pp
93a5118bdfSAndrew Thompson.Ft void
94a5118bdfSAndrew Thompson.Fn libusb_free_device_list "libusb_device **list" "int unref_devices"
95c8c1f2ecSHans Petter SelaskyFree the list of devices discovered by libusb_get_device_list.
96c8c1f2ecSHans Petter SelaskyIf
97a5118bdfSAndrew Thompson.Fa unref_device
9811867070SHans Petter Selaskyis set to 1 all devices in the list have their reference
9911867070SHans Petter Selaskycounter decremented once.
100a5118bdfSAndrew Thompson.Pp
101a5118bdfSAndrew Thompson.Ft uint8_t
102a5118bdfSAndrew Thompson.Fn libusb_get_bus_number "libusb_device *dev"
103a5118bdfSAndrew ThompsonReturns the number of the bus contained by the device
104a5118bdfSAndrew Thompson.Fa dev.
105a5118bdfSAndrew Thompson.Pp
106a5118bdfSAndrew Thompson.Ft uint8_t
107a5118bdfSAndrew Thompson.Fn libusb_get_device_address "libusb_device *dev"
108ca96e26aSHans Petter SelaskyReturns the device_address contained by the device
109a5118bdfSAndrew Thompson.Fa dev.
110a5118bdfSAndrew Thompson.Pp
111ca96e26aSHans Petter Selasky.Ft enum libusb_speed
112ca96e26aSHans Petter Selasky.Fn libusb_get_device_speed "libusb_device *dev"
113ca96e26aSHans Petter SelaskyReturns the wire speed at which the device is connected.
114ca96e26aSHans Petter SelaskySee the LIBUSB_SPEED_XXX enums for more information.
115ca96e26aSHans Petter SelaskyLIBUSB_SPEED_UNKNOWN is returned in case of unknown wire speed.
116ca96e26aSHans Petter Selasky.Pp
117a5118bdfSAndrew Thompson.Ft int
118a5118bdfSAndrew Thompson.Fn libusb_get_max_packet_size "libusb_device *dev" "unsigned char endpoint"
119ca96e26aSHans Petter SelaskyReturns the wMaxPacketSize value on success, LIBUSB_ERROR_NOT_FOUND if the
120a5118bdfSAndrew Thompsonendpoint does not exist and LIBUSB_ERROR_OTHERS on other failure.
121a5118bdfSAndrew Thompson.Pp
122a5118bdfSAndrew Thompson.Ft libusb_device *
123a5118bdfSAndrew Thompson.Fn libusb_ref_device "libusb_device *dev"
124a5118bdfSAndrew ThompsonIncrement the reference counter of the device
125a5118bdfSAndrew Thompson.Fa dev.
126a5118bdfSAndrew Thompson.Pp
127a5118bdfSAndrew Thompson.Ft void
128a5118bdfSAndrew Thompson.Fn libusb_unref_device "libusb_device *dev"
129a5118bdfSAndrew ThompsonDecrement the reference counter of the device
130a5118bdfSAndrew Thompson.Fa dev.
131a5118bdfSAndrew Thompson.Pp
132a5118bdfSAndrew Thompson.Ft int
133a5118bdfSAndrew Thompson.Fn libusb_open "libusb_device *dev" "libusb_device_handle **devh"
134c8c1f2ecSHans Petter SelaskyOpen a device and obtain a device_handle.
135c8c1f2ecSHans Petter SelaskyReturns 0 on success,
13611867070SHans Petter SelaskyLIBUSB_ERROR_NO_MEM on memory allocation problems, LIBUSB_ERROR_ACCESS
13711867070SHans Petter Selaskyon permissions problems, LIBUSB_ERROR_NO_DEVICE if the device has been
13811867070SHans Petter Selaskydisconnected and a LIBUSB_ERROR code on other errors.
139a5118bdfSAndrew Thompson.Pp
140a5118bdfSAndrew Thompson.Ft libusb_device_handle *
141a5118bdfSAndrew Thompson.Fn libusb_open_device_with_vid_pid "libusb_context *ctx" "uint16_t vid" "uint16_t pid"
14211867070SHans Petter SelaskyA convenience function to open a device by vendor and product IDs
143a5118bdfSAndrew Thompson.Fa vid
1444eaae44dSAndrew Thompsonand
145a5118bdfSAndrew Thompson.Fa pid.
146ca96e26aSHans Petter SelaskyReturns NULL on error.
1474eaae44dSAndrew Thompson.Pp
148a5118bdfSAndrew Thompson.Ft void
149a5118bdfSAndrew Thompson.Fn libusb_close "libusb_device_handle *devh"
150a5118bdfSAndrew ThompsonClose a device handle.
1514eaae44dSAndrew Thompson.Pp
152a5118bdfSAndrew Thompson.Ft libusb_device *
153ca96e26aSHans Petter Selasky.Fn libusb_get_device "libusb_device_handle *devh"
154ca96e26aSHans Petter SelaskyGet the device contained by devh.
155ca96e26aSHans Petter SelaskyReturns NULL on error.
1564eaae44dSAndrew Thompson.Pp
157a5118bdfSAndrew Thompson.Ft int
158a5118bdfSAndrew Thompson.Fn libusb_get_configuration "libusb_device_handle *devh" "int *config"
159c8c1f2ecSHans Petter SelaskyReturns the bConfiguration value of the current configuration.
160c8c1f2ecSHans Petter SelaskyReturns 0
161a5118bdfSAndrew Thompsonon success, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected
162a5118bdfSAndrew Thompsonand a LIBUSB_ERROR code on error.
1634eaae44dSAndrew Thompson.Pp
164a5118bdfSAndrew Thompson.Ft int
165a5118bdfSAndrew Thompson.Fn libusb_set_configuration "libusb_device_handle *devh" "int config"
16611867070SHans Petter SelaskySet the active configuration to
167a5118bdfSAndrew Thompson.Fa config
168a5118bdfSAndrew Thompsonfor the device contained by
169a5118bdfSAndrew Thompson.Fa devh.
170ca96e26aSHans Petter SelaskyThis function returns 0 on success, LIBUSB_ERROR_NOT_FOUND if the requested
171a5118bdfSAndrew Thompsonconfiguration does not exist, LIBUSB_ERROR_BUSY if the interfaces are currently
172a5118bdfSAndrew Thompsonclaimed, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and a
173a5118bdfSAndrew ThompsonLIBUSB_ERROR code on failure.
1744eaae44dSAndrew Thompson.Pp
175a5118bdfSAndrew Thompson.Ft int
176a5118bdfSAndrew Thompson.Fn libusb_claim_interface "libusb_device_handle *devh" "int interface_number"
177a5118bdfSAndrew ThompsonClaim an interface in a given libusb_handle
178a5118bdfSAndrew Thompson.Fa devh.
179c8c1f2ecSHans Petter SelaskyThis is a non-blocking function.
18011867070SHans Petter SelaskyIt returns 0 on success, LIBUSB_ERROR_NOT_FOUND
181a5118bdfSAndrew Thompsonif the requested interface does not exist, LIBUSB_ERROR_BUSY if a program or
182a5118bdfSAndrew Thompsondriver has claimed the interface, LIBUSB_ERROR_NO_DEVICE if the device has
183a5118bdfSAndrew Thompsonbeen disconnected and a LIBUSB_ERROR code on failure.
1844eaae44dSAndrew Thompson.Pp
185a5118bdfSAndrew Thompson.Ft int
186a5118bdfSAndrew Thompson.Fn libusb_release_interface "libusb_device_handle *devh" "int interface_number"
18711867070SHans Petter SelaskyThis function releases an interface.
18811867070SHans Petter SelaskyAll the claimed interfaces on a device must be released
18911867070SHans Petter Selaskybefore closing the device.
190c8c1f2ecSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NOT_FOUND if the
191799162a6SJoel Dahlinterface was not claimed, LIBUSB_ERROR_NO_DEVICE if the device has been
192a5118bdfSAndrew Thompsondisconnected and LIBUSB_ERROR on failure.
1934eaae44dSAndrew Thompson.Pp
194a5118bdfSAndrew Thompson.Ft int
195a5118bdfSAndrew Thompson.Fn libusb_set_interface_alt_setting "libusb_device_handle *dev" "int interface_number" "int alternate_setting"
196c8c1f2ecSHans Petter SelaskyActivate an alternate setting for an interface.
197c8c1f2ecSHans Petter SelaskyReturns 0 on success,
198a5118bdfSAndrew ThompsonLIBUSB_ERROR_NOT_FOUND if the interface was not claimed or the requested
199a5118bdfSAndrew Thompsonsetting does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been
20011867070SHans Petter Selaskydisconnected and a LIBUSB_ERROR code on failure.
2014eaae44dSAndrew Thompson.Pp
202a5118bdfSAndrew Thompson.Ft int
203a5118bdfSAndrew Thompson.Fn libusb_clear_halt "libusb_device_handle *devh" "unsigned char endpoint"
204c8c1f2ecSHans Petter SelaskyClear an halt/stall for a endpoint.
205c8c1f2ecSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NOT_FOUND
206a5118bdfSAndrew Thompsonif the endpoint does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been
207a5118bdfSAndrew Thompsondisconnected and a LIBUSB_ERROR code on failure.
2084eaae44dSAndrew Thompson.Pp
209a5118bdfSAndrew Thompson.Ft int
210a5118bdfSAndrew Thompson.Fn libusb_reset_device "libusb_device_handle *devh"
211c8c1f2ecSHans Petter SelaskyPerform an USB port reset for an usb device.
212c8c1f2ecSHans Petter SelaskyReturns 0 on success,
213a5118bdfSAndrew ThompsonLIBUSB_ERROR_NOT_FOUND if re-enumeration is required or if the device has
214a5118bdfSAndrew Thompsonbeen disconnected and a LIBUSB_ERROR code on failure.
2154eaae44dSAndrew Thompson.Pp
216a5118bdfSAndrew Thompson.Ft int
217f1b5fa6eSHans Petter Selasky.Fn libusb_check_connected "libusb_device_handle *devh"
21811867070SHans Petter SelaskyTest if the USB device is still connected.
219c8c1f2ecSHans Petter SelaskyReturns 0 on success,
22011867070SHans Petter SelaskyLIBUSB_ERROR_NO_DEVICE if it has been disconnected and a LIBUSB_ERROR
221f1b5fa6eSHans Petter Selaskycode on failure.
222f1b5fa6eSHans Petter Selasky.Pp
223f1b5fa6eSHans Petter Selasky.Ft int
224a5118bdfSAndrew Thompson.Fn libusb_kernel_driver_active "libusb_device_handle *devh" "int interface"
225c8c1f2ecSHans Petter SelaskyDetermine if a driver is active on a interface.
226*4d2472aaSHans Petter SelaskyReturns 0 if no kernel driver is active
227*4d2472aaSHans Petter Selaskyand 1 if a kernel driver is active, LIBUSB_ERROR_NO_DEVICE
22811867070SHans Petter Selaskyif the device has been disconnected and a LIBUSB_ERROR code on failure.
2294eaae44dSAndrew Thompson.Pp
230a5118bdfSAndrew Thompson.Ft int
231698e791aSHans Petter Selasky.Fn libusb_get_driver "libusb_device_handle *devh" "int interface" "char *name" "int namelen"
232698e791aSHans Petter Selaskyor
233698e791aSHans Petter Selasky.Ft int
234698e791aSHans Petter Selasky.Fn libusb_get_driver_np "libusb_device_handle *devh" "int interface" "char *name" "int namelen"
23511867070SHans Petter SelaskyCopy the name of the driver attached to the given
236698e791aSHans Petter Selasky.Fa device
237698e791aSHans Petter Selaskyand
238698e791aSHans Petter Selasky.Fa interface
23911867070SHans Petter Selaskyinto the buffer
240698e791aSHans Petter Selasky.Fa name
24111867070SHans Petter Selaskyof length
242698e791aSHans Petter Selasky.Fa namelen .
243698e791aSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NOT_FOUND if no kernel driver is attached
244698e791aSHans Petter Selaskyto the given interface and LIBUSB_ERROR_INVALID_PARAM if the interface does
245698e791aSHans Petter Selaskynot exist.
246698e791aSHans Petter SelaskyThis function is non-portable.
247698e791aSHans Petter SelaskyThe buffer pointed to by
248698e791aSHans Petter Selasky.Fa name
249698e791aSHans Petter Selaskyis only zero terminated on success.
250698e791aSHans Petter Selasky.Pp
251698e791aSHans Petter Selasky.Ft int
252a5118bdfSAndrew Thompson.Fn libusb_detach_kernel_driver "libusb_device_handle *devh" "int interface"
253698e791aSHans Petter Selaskyor
254698e791aSHans Petter Selasky.Ft int
255698e791aSHans Petter Selasky.Fn libusb_detach_kernel_driver_np "libusb_device_handle *devh" "int interface"
256698e791aSHans Petter SelaskyDetach a kernel driver from an interface.
25711867070SHans Petter SelaskyThis is needed to claim an interface already claimed by a kernel driver.
258698e791aSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NOT_FOUND if no kernel driver was active,
259c8c1f2ecSHans Petter SelaskyLIBUSB_ERROR_INVALID_PARAM if the interface does not exist,
260c8c1f2ecSHans Petter SelaskyLIBUSB_ERROR_NO_DEVICE if the device has been disconnected
261c8c1f2ecSHans Petter Selaskyand a LIBUSB_ERROR code on failure.
262c8c1f2ecSHans Petter SelaskyThis function is non-portable.
2634eaae44dSAndrew Thompson.Pp
264a5118bdfSAndrew Thompson.Ft int
265a5118bdfSAndrew Thompson.Fn libusb_attach_kernel_driver "libusb_device_handle *devh" "int interface"
26611867070SHans Petter SelaskyRe-attach an interface kernel driver that was previously detached.
267c8c1f2ecSHans Petter SelaskyReturns 0 on success,
268c8c1f2ecSHans Petter SelaskyLIBUSB_ERROR_INVALID_PARAM if the interface does not exist,
269c8c1f2ecSHans Petter SelaskyLIBUSB_ERROR_NO_DEVICE
27011867070SHans Petter Selaskyif the device has been disconnected, LIBUSB_ERROR_BUSY if the driver cannot be
271a5118bdfSAndrew Thompsonattached because the interface is claimed by a program or driver and a
272a5118bdfSAndrew ThompsonLIBUSB_ERROR code on failure.
2734eaae44dSAndrew Thompson.Pp
274a5118bdfSAndrew Thompson.Sh USB DESCRIPTORS
2754eaae44dSAndrew Thompson.Pp
276a5118bdfSAndrew Thompson.Ft int
277a5118bdfSAndrew Thompson.Fn libusb_get_device_descriptor "libusb_device *dev" "libusb_device_descriptor *desc"
278a5118bdfSAndrew ThompsonGet the USB device descriptor for the device
279a5118bdfSAndrew Thompson.Fa dev.
280c8c1f2ecSHans Petter SelaskyThis is a non-blocking function.
281c8c1f2ecSHans Petter SelaskyReturns 0 on success and a LIBUSB_ERROR code on
282a5118bdfSAndrew Thompsonfailure.
2834eaae44dSAndrew Thompson.Pp
284a5118bdfSAndrew Thompson.Ft int
285698e791aSHans Petter Selasky.Fn libsub_get_active_config_descriptor "libusb_device *dev" "struct libusb_config_descriptor **config"
286c8c1f2ecSHans Petter SelaskyGet the USB configuration descriptor for the active configuration.
287c8c1f2ecSHans Petter SelaskyReturns 0 on
28811867070SHans Petter Selaskysuccess, LIBUSB_ERROR_NOT_FOUND if the device is in
28911867070SHans Petter Selaskyan unconfigured state
29011867070SHans Petter Selaskyand a LIBUSB_ERROR code on error.
2914eaae44dSAndrew Thompson.Pp
292a5118bdfSAndrew Thompson.Ft int
293a5118bdfSAndrew Thompson.Fn libusb_get_config_descriptor "libusb_device *dev" "uint8_t config_index" "libusb_config_descriptor **config"
29411867070SHans Petter SelaskyGet a USB configuration descriptor based on its index
295a5118bdfSAndrew Thompson.Fa idx.
296a5118bdfSAndrew ThompsonReturns 0 on success, LIBUSB_ERROR_NOT_FOUND if the configuration does not exist
29711867070SHans Petter Selaskyand a LIBUSB_ERROR code on error.
298545b01adSAndrew Thompson.Pp
299a5118bdfSAndrew Thompson.Ft int
300a5118bdfSAndrew Thompson.Fn libusb_get_config_descriptor_by_value "libusb_device *dev" "uint8 bConfigurationValue" "libusb_config_descriptor **config"
301c8c1f2ecSHans Petter SelaskyGet a USB configuration descriptor with a specific bConfigurationValue.
302c8c1f2ecSHans Petter SelaskyThis is
30311867070SHans Petter Selaskya non-blocking function which does not send a request through the device.
304c8c1f2ecSHans Petter SelaskyReturns 0
305c8c1f2ecSHans Petter Selaskyon success, LIBUSB_ERROR_NOT_FOUND if the configuration
30611867070SHans Petter Selaskydoes not exist and a
307a5118bdfSAndrew ThompsonLIBUSB_ERROR code on failure.
3084eaae44dSAndrew Thompson.Pp
309a5118bdfSAndrew Thompson.Ft void
310390065b1SAlfred Perlstein.Fn libusb_free_config_descriptor "libusb_config_descriptor *config"
311a5118bdfSAndrew ThompsonFree a configuration descriptor.
3124eaae44dSAndrew Thompson.Pp
313a5118bdfSAndrew Thompson.Ft int
314a5118bdfSAndrew Thompson.Fn libusb_get_string_descriptor_ascii "libusb_device_handle *devh" "uint8_t desc_idx" "unsigned char *data" "int length"
31511867070SHans Petter SelaskyRetrieve a string descriptor in C style ASCII.
31611867070SHans Petter SelaskyReturns the positive number of bytes in the resulting ASCII string
317c8c1f2ecSHans Petter Selaskyon success and a LIBUSB_ERROR code on failure.
3184eaae44dSAndrew Thompson.Pp
319a5118bdfSAndrew Thompson.Sh USB ASYNCHRONOUS I/O
3204eaae44dSAndrew Thompson.Pp
321a5118bdfSAndrew Thompson.Ft struct libusb_transfer *
322a5118bdfSAndrew Thompson.Fn libusb_alloc_transfer "int iso_packets"
32311867070SHans Petter SelaskyAllocate a transfer with the number of isochronous packet descriptors
32411867070SHans Petter Selaskyspecified by
32511867070SHans Petter Selasky.Fa iso_packets .
326ca96e26aSHans Petter SelaskyReturns NULL on error.
3274eaae44dSAndrew Thompson.Pp
328a5118bdfSAndrew Thompson.Ft void
329a5118bdfSAndrew Thompson.Fn libusb_free_transfer "struct libusb_transfer *tr"
330a5118bdfSAndrew ThompsonFree a transfer.
3314eaae44dSAndrew Thompson.Pp
332a5118bdfSAndrew Thompson.Ft int
333a5118bdfSAndrew Thompson.Fn libusb_submit_transfer "struct libusb_transfer *tr"
334ca96e26aSHans Petter SelaskyThis function will submit a transfer and returns immediately.
335c8c1f2ecSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NO_DEVICE if
33611867070SHans Petter Selaskythe device has been disconnected and a
337a5118bdfSAndrew ThompsonLIBUSB_ERROR code on other failure.
3384eaae44dSAndrew Thompson.Pp
339a5118bdfSAndrew Thompson.Ft int
340a5118bdfSAndrew Thompson.Fn libusb_cancel_transfer "struct libusb_transfer *tr"
34111867070SHans Petter SelaskyThis function asynchronously cancels a transfer.
34211867070SHans Petter SelaskyReturns 0 on success and a LIBUSB_ERROR code on failure.
3434eaae44dSAndrew Thompson.Pp
344a5118bdfSAndrew Thompson.Sh USB SYNCHRONOUS I/O
3454eaae44dSAndrew Thompson.Pp
346a5118bdfSAndrew Thompson.Ft int
347698e791aSHans 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"
348ca96e26aSHans Petter SelaskyPerform a USB control transfer.
349ca96e26aSHans Petter SelaskyReturns the actual number of bytes
35011867070SHans Petter Selaskytransferred on success, in the range from and including zero up to and
351c865d740SHans Petter Selaskyincluding
352892f4806SHans Petter Selasky.Fa wLength .
35311867070SHans Petter SelaskyOn error a LIBUSB_ERROR code is returned, for example
35411867070SHans Petter SelaskyLIBUSB_ERROR_TIMEOUT if the transfer timed out, LIBUSB_ERROR_PIPE if the
355c865d740SHans Petter Selaskycontrol request was not supported, LIBUSB_ERROR_NO_DEVICE if the
35611867070SHans Petter Selaskydevice has been disconnected and another LIBUSB_ERROR code on other failures.
35711867070SHans Petter SelaskyThe LIBUSB_ERROR codes are all negative.
3584eaae44dSAndrew Thompson.Pp
359a5118bdfSAndrew Thompson.Ft int
360a5118bdfSAndrew Thompson.Fn libusb_bulk_transfer "struct libusb_device_handle *devh" "unsigned char endpoint" "unsigned char *data" "int length" "int *transferred" "unsigned int timeout"
361892f4806SHans Petter SelaskyPerform an USB bulk transfer.
362892f4806SHans Petter SelaskyA timeout value of zero means no timeout.
363892f4806SHans Petter SelaskyThe timeout value is given in milliseconds.
364892f4806SHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_TIMEOUT
36511867070SHans Petter Selaskyif the transfer timed out, LIBUSB_ERROR_PIPE if the control request was not
366a5118bdfSAndrew Thompsonsupported, LIBUSB_ERROR_OVERFLOW if the device offered more data,
367a5118bdfSAndrew ThompsonLIBUSB_ERROR_NO_DEVICE if the device has been disconnected and
36811867070SHans Petter Selaskya LIBUSB_ERROR code on other failure.
3694eaae44dSAndrew Thompson.Pp
370a5118bdfSAndrew Thompson.Ft int
371a5118bdfSAndrew Thompson.Fn libusb_interrupt_transfer "struct libusb_device_handle *devh" "unsigned char endpoint" "unsigned char *data" "int length" "int *transferred" "unsigned int timeout"
372892f4806SHans Petter SelaskyPerform an USB Interrupt transfer.
373892f4806SHans Petter SelaskyA timeout value of zero means no timeout.
374892f4806SHans Petter SelaskyThe timeout value is given in milliseconds.
375892f4806SHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_TIMEOUT
37611867070SHans Petter Selaskyif the transfer timed out, LIBUSB_ERROR_PIPE if the control request was not
377a5118bdfSAndrew Thompsonsupported, LIBUSB_ERROR_OVERFLOW if the device offered more data,
378a5118bdfSAndrew ThompsonLIBUSB_ERROR_NO_DEVICE if the device has been disconnected and
37911867070SHans Petter Selaskya LIBUSB_ERROR code on other failure.
3804eaae44dSAndrew Thompson.Pp
381a5118bdfSAndrew Thompson.Sh USB EVENTS
3824eaae44dSAndrew Thompson.Pp
383a5118bdfSAndrew Thompson.Ft int
384a5118bdfSAndrew Thompson.Fn libusb_try_lock_events "libusb_context *ctx"
385ca96e26aSHans Petter SelaskyTry to acquire the event handling lock.
386ca96e26aSHans Petter SelaskyReturns 0 if the lock was obtained and 1 if not.
3874eaae44dSAndrew Thompson.Pp
388a5118bdfSAndrew Thompson.Ft void
389a5118bdfSAndrew Thompson.Fn libusb_lock_events "libusb_context *ctx"
390c8c1f2ecSHans Petter SelaskyAcquire the event handling lock.
391c8c1f2ecSHans Petter SelaskyThis function is blocking.
3924eaae44dSAndrew Thompson.Pp
393a5118bdfSAndrew Thompson.Ft void
394a5118bdfSAndrew Thompson.Fn libusb_unlock_events "libusb_context *ctx"
395c8c1f2ecSHans Petter SelaskyRelease the event handling lock.
396c8c1f2ecSHans Petter SelaskyThis will wake up any thread blocked
39711867070SHans Petter Selaskyon
39811867070SHans Petter Selasky.B libusb_wait_for_event() .
3994eaae44dSAndrew Thompson.Pp
400a5118bdfSAndrew Thompson.Ft int
401a5118bdfSAndrew Thompson.Fn libusb_event_handling_ok "libusb_context *ctx"
402c8c1f2ecSHans Petter SelaskyDetermine if it still OK for this thread to be doing event handling.
403c8c1f2ecSHans Petter SelaskyReturns 1
404c8c1f2ecSHans Petter Selaskyif event handling can start or continue.
405c8c1f2ecSHans Petter SelaskyReturns 0 if this thread must give up
406a5118bdfSAndrew Thompsonthe events lock.
4074eaae44dSAndrew Thompson.Pp
408a5118bdfSAndrew Thompson.Ft int
409a5118bdfSAndrew Thompson.Fn libusb_event_handler_active "libusb_context *ctx"
410c8c1f2ecSHans Petter SelaskyDetermine if an active thread is handling events.
41111867070SHans Petter SelaskyReturns 1 if there is a thread handling events and 0 if there
412a5118bdfSAndrew Thompsonare no threads currently handling events.
4134eaae44dSAndrew Thompson.Pp
414a5118bdfSAndrew Thompson.Ft void
415a5118bdfSAndrew Thompson.Fn libusb_lock_event_waiters "libusb_context *ctx"
416c8c1f2ecSHans Petter SelaskyAcquire the event_waiters lock.
41711867070SHans Petter SelaskyThis lock is designed to be obtained in the
418a5118bdfSAndrew Thompsonsituation where you want to be aware when events are completed, but some other
419a5118bdfSAndrew Thompsonthread is event handling so calling libusb_handle_events() is not allowed.
420545b01adSAndrew Thompson.Pp
421a5118bdfSAndrew Thompson.Ft void
422a5118bdfSAndrew Thompson.Fn libusb_unlock_event_waiters "libusb_context *ctx"
423a5118bdfSAndrew ThompsonRelease the event_waiters lock.
4244eaae44dSAndrew Thompson.Pp
425a5118bdfSAndrew Thompson.Ft int
426a5118bdfSAndrew Thompson.Fn libusb_wait_for_event "libusb_context *ctx" "struct timeval *tv"
427c8c1f2ecSHans Petter SelaskyWait for another thread to signal completion of an event.
428c8c1f2ecSHans Petter SelaskyMust be called
429c8c1f2ecSHans Petter Selaskywith the event waiters lock held, see libusb_lock_event_waiters().
430c8c1f2ecSHans Petter SelaskyThis will
431a5118bdfSAndrew Thompsonblock until the timeout expires or a transfer completes or a thread releases
432c8c1f2ecSHans Petter Selaskythe event handling lock through libusb_unlock_events().
433c8c1f2ecSHans Petter SelaskyReturns 0 after a
43411867070SHans Petter Selaskytransfer completes or another thread stops event handling, and 1 if the
435a5118bdfSAndrew Thompsontimeout expired.
4364eaae44dSAndrew Thompson.Pp
437a5118bdfSAndrew Thompson.Ft int
438a5118bdfSAndrew Thompson.Fn libusb_handle_events_timeout "libusb_context *ctx" "struct timeval *tv"
439a5118bdfSAndrew ThompsonHandle any pending events by checking if timeouts have expired and by
440c8c1f2ecSHans Petter Selaskychecking the set of file descriptors for activity.
441c8c1f2ecSHans Petter SelaskyReturns 0 on success, or a
442a5118bdfSAndrew ThompsonLIBUSB_ERROR code on failure.
4434eaae44dSAndrew Thompson.Pp
444a5118bdfSAndrew Thompson.Ft int
445a5118bdfSAndrew Thompson.Fn libusb_handle_events "libusb_context *ctx"
446c8c1f2ecSHans Petter SelaskyHandle any pending events in blocking mode with a sensible timeout.
447c8c1f2ecSHans Petter SelaskyReturns 0
44811867070SHans Petter Selaskyon success and a LIBUSB_ERROR code on failure.
4494eaae44dSAndrew Thompson.Pp
450a5118bdfSAndrew Thompson.Ft int
451a5118bdfSAndrew Thompson.Fn libusb_handle_events_locked "libusb_context *ctx" "struct timeval *tv"
452a5118bdfSAndrew ThompsonHandle any pending events by polling file desciptors, without checking if
45311867070SHans Petter Selaskyanother thread is already doing so.
454c8c1f2ecSHans Petter SelaskyMust be called with the event lock held.
4554eaae44dSAndrew Thompson.Pp
456a5118bdfSAndrew Thompson.Ft int
457a5118bdfSAndrew Thompson.Fn libusb_get_next_timeout "libusb_context *ctx" "struct timeval *tv"
458c8c1f2ecSHans Petter SelaskyDetermine the next internal timeout that libusb needs to handle.
459c8c1f2ecSHans Petter SelaskyReturns 0
46011867070SHans Petter Selaskyif there are no pending timeouts, 1 if a timeout was returned, or a LIBUSB_ERROR
461a5118bdfSAndrew Thompsoncode on failure.
4624eaae44dSAndrew Thompson.Pp
463a5118bdfSAndrew Thompson.Ft void
464a5118bdfSAndrew Thompson.Fn libusb_set_pollfd_notifiers "libusb_context *ctx" "libusb_pollfd_added_cb added_cb" "libusb_pollfd_removed_cb remove_cb" "void *user_data"
465a5118bdfSAndrew ThompsonRegister notification functions for file descriptor additions/removals.
466a5118bdfSAndrew ThompsonThese functions will be invoked for every new or removed file descriptor
467a5118bdfSAndrew Thompsonthat libusb uses as an event source.
4684eaae44dSAndrew Thompson.Pp
469a5118bdfSAndrew Thompson.Ft const struct libusb_pollfd **
470a5118bdfSAndrew Thompson.Fn libusb_get_pollfds "libusb_context *ctx"
471a5118bdfSAndrew ThompsonRetrive a list of file descriptors that should be polled by your main loop as
472c8c1f2ecSHans Petter Selaskylibusb event sources.
473c8c1f2ecSHans Petter SelaskyReturns a NULL-terminated list on success or NULL on failure.
4744eaae44dSAndrew Thompson.Sh LIBUSB VERSION 0.1 COMPATIBILITY
475a5118bdfSAndrew Thompson.Pp
476a5118bdfSAndrew ThompsonThe library is also compliant with LibUSB version 0.1.12.
477a5118bdfSAndrew Thompson.Pp
4784eaae44dSAndrew Thompson.Fn usb_open
4794eaae44dSAndrew Thompson.Fn usb_close
4804eaae44dSAndrew Thompson.Fn usb_get_string
4814eaae44dSAndrew Thompson.Fn usb_get_string_simple
4824eaae44dSAndrew Thompson.Fn usb_get_descriptor_by_endpoint
4834eaae44dSAndrew Thompson.Fn usb_get_descriptor
4844eaae44dSAndrew Thompson.Fn usb_parse_descriptor
4854eaae44dSAndrew Thompson.Fn usb_parse_configuration
4864eaae44dSAndrew Thompson.Fn usb_destroy_configuration
4874eaae44dSAndrew Thompson.Fn usb_fetch_and_parse_descriptors
4884eaae44dSAndrew Thompson.Fn usb_bulk_write
4894eaae44dSAndrew Thompson.Fn usb_bulk_read
4904eaae44dSAndrew Thompson.Fn usb_interrupt_write
4914eaae44dSAndrew Thompson.Fn usb_interrupt_read
4924eaae44dSAndrew Thompson.Fn usb_control_msg
4934eaae44dSAndrew Thompson.Fn usb_set_configuration
4944eaae44dSAndrew Thompson.Fn usb_claim_interface
4954eaae44dSAndrew Thompson.Fn usb_release_interface
4964eaae44dSAndrew Thompson.Fn usb_set_altinterface
4974eaae44dSAndrew Thompson.Fn usb_resetep
4984eaae44dSAndrew Thompson.Fn usb_clear_halt
4994eaae44dSAndrew Thompson.Fn usb_reset
5004eaae44dSAndrew Thompson.Fn usb_strerror
5014eaae44dSAndrew Thompson.Fn usb_init
5024eaae44dSAndrew Thompson.Fn usb_set_debug
5034eaae44dSAndrew Thompson.Fn usb_find_busses
5044eaae44dSAndrew Thompson.Fn usb_find_devices
5054eaae44dSAndrew Thompson.Fn usb_device
5064eaae44dSAndrew Thompson.Fn usb_get_busses
507f1b5fa6eSHans Petter Selasky.Fn usb_check_connected
5084eb5923dSHans Petter Selasky.Fn usb_get_driver_np
5094eb5923dSHans Petter Selasky.Fn usb_detach_kernel_driver_np
5104eaae44dSAndrew Thompson.Sh SEE ALSO
511a5118bdfSAndrew Thompson.Xr libusb20 3 ,
512c54c1f7cSAndrew Thompson.Xr usb 4 ,
513c61f2561SHans Petter Selasky.Xr usbconfig 8 ,
514c61f2561SHans Petter Selasky.Xr usbdump 8
515a5118bdfSAndrew Thompson.Pp
516a5118bdfSAndrew Thompson.Pa http://libusb.sourceforge.net/
5174eaae44dSAndrew Thompson.Sh HISTORY
5184eaae44dSAndrew Thompson.Nm
519a5118bdfSAndrew Thompsonsupport first appeared in
520a5118bdfSAndrew Thompson.Fx 8.0 .
521