xref: /freebsd/lib/libusb/libusb.3 (revision a3fb6da9ba05cbeeab1d5bec46075916256d2fb0)
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.\"
2978ed0e49SHans Petter Selasky.Dd May 7, 2012
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
46a5118bdfSAndrew Thompson.Ft int
47a5118bdfSAndrew Thompson.Fn libusb_init libusb_context **ctx
48c8c1f2ecSHans Petter SelaskyThis function initialises libusb.
4911867070SHans Petter SelaskyIt must be called at the beginning
5011867070SHans Petter Selaskyof the program, before other libusb routines are used.
51c8c1f2ecSHans Petter SelaskyThis function returns 0 on success or LIBUSB_ERROR on
52a5118bdfSAndrew Thompsonfailure.
534eaae44dSAndrew Thompson.Pp
54a5118bdfSAndrew Thompson.Ft void
55a5118bdfSAndrew Thompson.Fn libusb_exit "libusb_context *ctx"
56c8c1f2ecSHans Petter SelaskyDeinitialise libusb.
57c8c1f2ecSHans Petter SelaskyMust be called at the end of the application.
5811867070SHans Petter SelaskyOther libusb routines may not be called after this function.
59a5118bdfSAndrew Thompson.Pp
60698e791aSHans Petter Selasky.Ft const char *
61698e791aSHans Petter Selasky.Fn libusb_strerror "int code"
6211867070SHans Petter SelaskyGet the ASCII representation of the error given by the
63698e791aSHans Petter Selasky.Fa code
64698e791aSHans Petter Selaskyargument.
65c61f2561SHans Petter SelaskyThis function does not return NULL.
66c61f2561SHans Petter Selasky.Pp
67c61f2561SHans Petter Selasky.Ft const char *
68c61f2561SHans Petter Selasky.Fn libusb_error_name "int code"
69c61f2561SHans Petter SelaskyGet the ASCII representation of the error enum given by the
70c61f2561SHans Petter Selasky.Fa code
71c61f2561SHans Petter Selaskyargument.
72c61f2561SHans Petter SelaskyThis function does not return NULL.
73698e791aSHans Petter Selasky.Pp
74a5118bdfSAndrew Thompson.Ft void
75a5118bdfSAndrew Thompson.Fn libusb_set_debug "libusb_context *ctx" "int level"
7611867070SHans Petter SelaskySet the debug level to
7711867070SHans Petter Selasky.Fa level .
78a5118bdfSAndrew Thompson.Pp
79a5118bdfSAndrew Thompson.Ft ssize_t
80a5118bdfSAndrew Thompson.Fn libusb_get_device_list "libusb_context *ctx" "libusb_device ***list"
8111867070SHans Petter SelaskyPopulate
82a5118bdfSAndrew Thompson.Fa list
8311867070SHans Petter Selaskywith the list of usb devices available, adding a reference to each
8411867070SHans Petter Selaskydevice in the list.
8511867070SHans Petter SelaskyAll the list entries created by this
8611867070SHans Petter Selaskyfunction must have their reference counter
8711867070SHans Petter Selaskydecremented when you are done with them,
8811867070SHans Petter Selaskyand the list itself must be freed.
89c8c1f2ecSHans Petter SelaskyThis
9011867070SHans Petter Selaskyfunction returns the number of devices in the list or a LIBUSB_ERROR code.
91a5118bdfSAndrew Thompson.Pp
92a5118bdfSAndrew Thompson.Ft void
93a5118bdfSAndrew Thompson.Fn libusb_free_device_list "libusb_device **list" "int unref_devices"
94c8c1f2ecSHans Petter SelaskyFree the list of devices discovered by libusb_get_device_list.
95c8c1f2ecSHans Petter SelaskyIf
96a5118bdfSAndrew Thompson.Fa unref_device
9711867070SHans Petter Selaskyis set to 1 all devices in the list have their reference
9811867070SHans Petter Selaskycounter decremented once.
99a5118bdfSAndrew Thompson.Pp
100a5118bdfSAndrew Thompson.Ft uint8_t
101a5118bdfSAndrew Thompson.Fn libusb_get_bus_number "libusb_device *dev"
102a5118bdfSAndrew ThompsonReturns the number of the bus contained by the device
103a5118bdfSAndrew Thompson.Fa dev .
104a5118bdfSAndrew Thompson.Pp
105a5118bdfSAndrew Thompson.Ft uint8_t
106a5118bdfSAndrew Thompson.Fn libusb_get_device_address "libusb_device *dev"
107ca96e26aSHans Petter SelaskyReturns the device_address contained by the device
108a5118bdfSAndrew Thompson.Fa dev .
109a5118bdfSAndrew Thompson.Pp
110ca96e26aSHans Petter Selasky.Ft enum libusb_speed
111ca96e26aSHans Petter Selasky.Fn libusb_get_device_speed "libusb_device *dev"
112ca96e26aSHans Petter SelaskyReturns the wire speed at which the device is connected.
113ca96e26aSHans Petter SelaskySee the LIBUSB_SPEED_XXX enums for more information.
114ca96e26aSHans Petter SelaskyLIBUSB_SPEED_UNKNOWN is returned in case of unknown wire speed.
115ca96e26aSHans Petter Selasky.Pp
116a5118bdfSAndrew Thompson.Ft int
117a5118bdfSAndrew Thompson.Fn libusb_get_max_packet_size "libusb_device *dev" "unsigned char endpoint"
118ca96e26aSHans Petter SelaskyReturns the wMaxPacketSize value on success, LIBUSB_ERROR_NOT_FOUND if the
119a5118bdfSAndrew Thompsonendpoint does not exist and LIBUSB_ERROR_OTHERS on other failure.
120a5118bdfSAndrew Thompson.Pp
121748205a3SHans Petter Selasky.Ft int
122748205a3SHans Petter Selasky.Fn libusb_get_max_iso_packet_size "libusb_device *dev" "unsigned char endpoint"
123748205a3SHans Petter SelaskyReturns the packet size multiplied by the packet multiplier on success,
124748205a3SHans Petter SelaskyLIBUSB_ERROR_NOT_FOUND if the endpoint does not exist and
125748205a3SHans Petter SelaskyLIBUSB_ERROR_OTHERS on other failure.
126748205a3SHans Petter Selasky.Pp
127a5118bdfSAndrew Thompson.Ft libusb_device *
128a5118bdfSAndrew Thompson.Fn libusb_ref_device "libusb_device *dev"
129a5118bdfSAndrew ThompsonIncrement the reference counter of the device
130a5118bdfSAndrew Thompson.Fa dev .
131a5118bdfSAndrew Thompson.Pp
132a5118bdfSAndrew Thompson.Ft void
133a5118bdfSAndrew Thompson.Fn libusb_unref_device "libusb_device *dev"
134a5118bdfSAndrew ThompsonDecrement the reference counter of the device
135a5118bdfSAndrew Thompson.Fa dev .
136a5118bdfSAndrew Thompson.Pp
137a5118bdfSAndrew Thompson.Ft int
138a5118bdfSAndrew Thompson.Fn libusb_open "libusb_device *dev" "libusb_device_handle **devh"
139c8c1f2ecSHans Petter SelaskyOpen a device and obtain a device_handle.
140c8c1f2ecSHans Petter SelaskyReturns 0 on success,
14111867070SHans Petter SelaskyLIBUSB_ERROR_NO_MEM on memory allocation problems, LIBUSB_ERROR_ACCESS
14211867070SHans Petter Selaskyon permissions problems, LIBUSB_ERROR_NO_DEVICE if the device has been
14311867070SHans Petter Selaskydisconnected and a LIBUSB_ERROR code on other errors.
144a5118bdfSAndrew Thompson.Pp
145a5118bdfSAndrew Thompson.Ft libusb_device_handle *
146a5118bdfSAndrew Thompson.Fn libusb_open_device_with_vid_pid "libusb_context *ctx" "uint16_t vid" "uint16_t pid"
14711867070SHans Petter SelaskyA convenience function to open a device by vendor and product IDs
148a5118bdfSAndrew Thompson.Fa vid
1494eaae44dSAndrew Thompsonand
150a5118bdfSAndrew Thompson.Fa pid .
151ca96e26aSHans Petter SelaskyReturns NULL on error.
1524eaae44dSAndrew Thompson.Pp
153a5118bdfSAndrew Thompson.Ft void
154a5118bdfSAndrew Thompson.Fn libusb_close "libusb_device_handle *devh"
155a5118bdfSAndrew ThompsonClose a device handle.
1564eaae44dSAndrew Thompson.Pp
157a5118bdfSAndrew Thompson.Ft libusb_device *
158ca96e26aSHans Petter Selasky.Fn libusb_get_device "libusb_device_handle *devh"
159ca96e26aSHans Petter SelaskyGet the device contained by devh.
160ca96e26aSHans Petter SelaskyReturns NULL on error.
1614eaae44dSAndrew Thompson.Pp
162a5118bdfSAndrew Thompson.Ft int
163a5118bdfSAndrew Thompson.Fn libusb_get_configuration "libusb_device_handle *devh" "int *config"
164*a3fb6da9SGlen BarberReturns the value of the current configuration.
165c8c1f2ecSHans Petter SelaskyReturns 0
166a5118bdfSAndrew Thompsonon success, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected
167a5118bdfSAndrew Thompsonand a LIBUSB_ERROR code on error.
1684eaae44dSAndrew Thompson.Pp
169a5118bdfSAndrew Thompson.Ft int
170a5118bdfSAndrew Thompson.Fn libusb_set_configuration "libusb_device_handle *devh" "int config"
17111867070SHans Petter SelaskySet the active configuration to
172a5118bdfSAndrew Thompson.Fa config
173a5118bdfSAndrew Thompsonfor the device contained by
174a5118bdfSAndrew Thompson.Fa devh .
175ca96e26aSHans Petter SelaskyThis function returns 0 on success, LIBUSB_ERROR_NOT_FOUND if the requested
176a5118bdfSAndrew Thompsonconfiguration does not exist, LIBUSB_ERROR_BUSY if the interfaces are currently
177a5118bdfSAndrew Thompsonclaimed, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and a
178a5118bdfSAndrew ThompsonLIBUSB_ERROR code on failure.
1794eaae44dSAndrew Thompson.Pp
180a5118bdfSAndrew Thompson.Ft int
181a5118bdfSAndrew Thompson.Fn libusb_claim_interface "libusb_device_handle *devh" "int interface_number"
182a5118bdfSAndrew ThompsonClaim an interface in a given libusb_handle
183a5118bdfSAndrew Thompson.Fa devh .
184c8c1f2ecSHans Petter SelaskyThis is a non-blocking function.
18511867070SHans Petter SelaskyIt returns 0 on success, LIBUSB_ERROR_NOT_FOUND
186a5118bdfSAndrew Thompsonif the requested interface does not exist, LIBUSB_ERROR_BUSY if a program or
187a5118bdfSAndrew Thompsondriver has claimed the interface, LIBUSB_ERROR_NO_DEVICE if the device has
188a5118bdfSAndrew Thompsonbeen disconnected and a LIBUSB_ERROR code on failure.
1894eaae44dSAndrew Thompson.Pp
190a5118bdfSAndrew Thompson.Ft int
191a5118bdfSAndrew Thompson.Fn libusb_release_interface "libusb_device_handle *devh" "int interface_number"
19211867070SHans Petter SelaskyThis function releases an interface.
19311867070SHans Petter SelaskyAll the claimed interfaces on a device must be released
19411867070SHans Petter Selaskybefore closing the device.
195c8c1f2ecSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NOT_FOUND if the
196799162a6SJoel Dahlinterface was not claimed, LIBUSB_ERROR_NO_DEVICE if the device has been
197a5118bdfSAndrew Thompsondisconnected and LIBUSB_ERROR on failure.
1984eaae44dSAndrew Thompson.Pp
199a5118bdfSAndrew Thompson.Ft int
200a5118bdfSAndrew Thompson.Fn libusb_set_interface_alt_setting "libusb_device_handle *dev" "int interface_number" "int alternate_setting"
201c8c1f2ecSHans Petter SelaskyActivate an alternate setting for an interface.
202c8c1f2ecSHans Petter SelaskyReturns 0 on success,
203a5118bdfSAndrew ThompsonLIBUSB_ERROR_NOT_FOUND if the interface was not claimed or the requested
204a5118bdfSAndrew Thompsonsetting does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been
20511867070SHans Petter Selaskydisconnected and a LIBUSB_ERROR code on failure.
2064eaae44dSAndrew Thompson.Pp
207a5118bdfSAndrew Thompson.Ft int
208a5118bdfSAndrew Thompson.Fn libusb_clear_halt "libusb_device_handle *devh" "unsigned char endpoint"
209c8c1f2ecSHans Petter SelaskyClear an halt/stall for a endpoint.
210c8c1f2ecSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NOT_FOUND
211a5118bdfSAndrew Thompsonif the endpoint does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been
212a5118bdfSAndrew Thompsondisconnected and a LIBUSB_ERROR code on failure.
2134eaae44dSAndrew Thompson.Pp
214a5118bdfSAndrew Thompson.Ft int
215a5118bdfSAndrew Thompson.Fn libusb_reset_device "libusb_device_handle *devh"
216c8c1f2ecSHans Petter SelaskyPerform an USB port reset for an usb device.
217c8c1f2ecSHans Petter SelaskyReturns 0 on success,
218a5118bdfSAndrew ThompsonLIBUSB_ERROR_NOT_FOUND if re-enumeration is required or if the device has
219a5118bdfSAndrew Thompsonbeen disconnected and a LIBUSB_ERROR code on failure.
2204eaae44dSAndrew Thompson.Pp
221a5118bdfSAndrew Thompson.Ft int
222f1b5fa6eSHans Petter Selasky.Fn libusb_check_connected "libusb_device_handle *devh"
22311867070SHans Petter SelaskyTest if the USB device is still connected.
224c8c1f2ecSHans Petter SelaskyReturns 0 on success,
22511867070SHans Petter SelaskyLIBUSB_ERROR_NO_DEVICE if it has been disconnected and a LIBUSB_ERROR
226f1b5fa6eSHans Petter Selaskycode on failure.
227f1b5fa6eSHans Petter Selasky.Pp
228f1b5fa6eSHans Petter Selasky.Ft int
229a5118bdfSAndrew Thompson.Fn libusb_kernel_driver_active "libusb_device_handle *devh" "int interface"
230c8c1f2ecSHans Petter SelaskyDetermine if a driver is active on a interface.
2314d2472aaSHans Petter SelaskyReturns 0 if no kernel driver is active
2324d2472aaSHans Petter Selaskyand 1 if a kernel driver is active, LIBUSB_ERROR_NO_DEVICE
23311867070SHans Petter Selaskyif the device has been disconnected and a LIBUSB_ERROR code on failure.
2344eaae44dSAndrew Thompson.Pp
235a5118bdfSAndrew Thompson.Ft int
236698e791aSHans Petter Selasky.Fn libusb_get_driver "libusb_device_handle *devh" "int interface" "char *name" "int namelen"
237698e791aSHans Petter Selaskyor
238698e791aSHans Petter Selasky.Ft int
239698e791aSHans Petter Selasky.Fn libusb_get_driver_np "libusb_device_handle *devh" "int interface" "char *name" "int namelen"
24011867070SHans Petter SelaskyCopy the name of the driver attached to the given
241698e791aSHans Petter Selasky.Fa device
242698e791aSHans Petter Selaskyand
243698e791aSHans Petter Selasky.Fa interface
24411867070SHans Petter Selaskyinto the buffer
245698e791aSHans Petter Selasky.Fa name
24611867070SHans Petter Selaskyof length
247698e791aSHans Petter Selasky.Fa namelen .
248698e791aSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NOT_FOUND if no kernel driver is attached
249698e791aSHans Petter Selaskyto the given interface and LIBUSB_ERROR_INVALID_PARAM if the interface does
250698e791aSHans Petter Selaskynot exist.
251698e791aSHans Petter SelaskyThis function is non-portable.
252698e791aSHans Petter SelaskyThe buffer pointed to by
253698e791aSHans Petter Selasky.Fa name
254698e791aSHans Petter Selaskyis only zero terminated on success.
255698e791aSHans Petter Selasky.Pp
256698e791aSHans Petter Selasky.Ft int
257a5118bdfSAndrew Thompson.Fn libusb_detach_kernel_driver "libusb_device_handle *devh" "int interface"
258698e791aSHans Petter Selaskyor
259698e791aSHans Petter Selasky.Ft int
260698e791aSHans Petter Selasky.Fn libusb_detach_kernel_driver_np "libusb_device_handle *devh" "int interface"
261698e791aSHans Petter SelaskyDetach a kernel driver from an interface.
26211867070SHans Petter SelaskyThis is needed to claim an interface already claimed by a kernel driver.
263698e791aSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NOT_FOUND if no kernel driver was active,
264c8c1f2ecSHans Petter SelaskyLIBUSB_ERROR_INVALID_PARAM if the interface does not exist,
265c8c1f2ecSHans Petter SelaskyLIBUSB_ERROR_NO_DEVICE if the device has been disconnected
266c8c1f2ecSHans Petter Selaskyand a LIBUSB_ERROR code on failure.
267c8c1f2ecSHans Petter SelaskyThis function is non-portable.
2684eaae44dSAndrew Thompson.Pp
269a5118bdfSAndrew Thompson.Ft int
270a5118bdfSAndrew Thompson.Fn libusb_attach_kernel_driver "libusb_device_handle *devh" "int interface"
27111867070SHans Petter SelaskyRe-attach an interface kernel driver that was previously detached.
272c8c1f2ecSHans Petter SelaskyReturns 0 on success,
273c8c1f2ecSHans Petter SelaskyLIBUSB_ERROR_INVALID_PARAM if the interface does not exist,
274c8c1f2ecSHans Petter SelaskyLIBUSB_ERROR_NO_DEVICE
27511867070SHans Petter Selaskyif the device has been disconnected, LIBUSB_ERROR_BUSY if the driver cannot be
276a5118bdfSAndrew Thompsonattached because the interface is claimed by a program or driver and a
277a5118bdfSAndrew ThompsonLIBUSB_ERROR code on failure.
278a5118bdfSAndrew Thompson.Sh USB DESCRIPTORS
279a5118bdfSAndrew Thompson.Ft int
280a5118bdfSAndrew Thompson.Fn libusb_get_device_descriptor "libusb_device *dev" "libusb_device_descriptor *desc"
281a5118bdfSAndrew ThompsonGet the USB device descriptor for the device
282a5118bdfSAndrew Thompson.Fa dev .
283c8c1f2ecSHans Petter SelaskyThis is a non-blocking function.
284c8c1f2ecSHans Petter SelaskyReturns 0 on success and a LIBUSB_ERROR code on
285a5118bdfSAndrew Thompsonfailure.
2864eaae44dSAndrew Thompson.Pp
287a5118bdfSAndrew Thompson.Ft int
288cb0df9e8SHans Petter Selasky.Fn libusb_get_active_config_descriptor "libusb_device *dev" "struct libusb_config_descriptor **config"
289c8c1f2ecSHans Petter SelaskyGet the USB configuration descriptor for the active configuration.
290c8c1f2ecSHans Petter SelaskyReturns 0 on
29111867070SHans Petter Selaskysuccess, LIBUSB_ERROR_NOT_FOUND if the device is in
29211867070SHans Petter Selaskyan unconfigured state
29311867070SHans Petter Selaskyand a LIBUSB_ERROR code on error.
2944eaae44dSAndrew Thompson.Pp
295a5118bdfSAndrew Thompson.Ft int
296a5118bdfSAndrew Thompson.Fn libusb_get_config_descriptor "libusb_device *dev" "uint8_t config_index" "libusb_config_descriptor **config"
29711867070SHans Petter SelaskyGet a USB configuration descriptor based on its index
298a5118bdfSAndrew Thompson.Fa idx.
299a5118bdfSAndrew ThompsonReturns 0 on success, LIBUSB_ERROR_NOT_FOUND if the configuration does not exist
30011867070SHans Petter Selaskyand a LIBUSB_ERROR code on error.
301545b01adSAndrew Thompson.Pp
302a5118bdfSAndrew Thompson.Ft int
303a5118bdfSAndrew Thompson.Fn libusb_get_config_descriptor_by_value "libusb_device *dev" "uint8 bConfigurationValue" "libusb_config_descriptor **config"
304c8c1f2ecSHans Petter SelaskyGet a USB configuration descriptor with a specific bConfigurationValue.
305c8c1f2ecSHans Petter SelaskyThis is
30611867070SHans Petter Selaskya non-blocking function which does not send a request through the device.
307c8c1f2ecSHans Petter SelaskyReturns 0
308c8c1f2ecSHans Petter Selaskyon success, LIBUSB_ERROR_NOT_FOUND if the configuration
30911867070SHans Petter Selaskydoes not exist and a
310a5118bdfSAndrew ThompsonLIBUSB_ERROR code on failure.
3114eaae44dSAndrew Thompson.Pp
312a5118bdfSAndrew Thompson.Ft void
313390065b1SAlfred Perlstein.Fn libusb_free_config_descriptor "libusb_config_descriptor *config"
314a5118bdfSAndrew ThompsonFree a configuration descriptor.
3154eaae44dSAndrew Thompson.Pp
316a5118bdfSAndrew Thompson.Ft int
31778ed0e49SHans Petter Selasky.Fn libusb_get_string_descriptor "libusb_device_handle *devh" "uint8_t desc_idx" "uint16_t langid" "unsigned char *data" "int length"
31878ed0e49SHans Petter SelaskyRetrieve a string descriptor in raw format.
31978ed0e49SHans Petter SelaskyReturns the number of bytes actually transferred on success
32078ed0e49SHans Petter Selaskyor a negative LIBUSB_ERROR code on failure.
32178ed0e49SHans Petter Selasky.Pp
32278ed0e49SHans Petter Selasky.Ft int
323a5118bdfSAndrew Thompson.Fn libusb_get_string_descriptor_ascii "libusb_device_handle *devh" "uint8_t desc_idx" "unsigned char *data" "int length"
32411867070SHans Petter SelaskyRetrieve a string descriptor in C style ASCII.
32511867070SHans Petter SelaskyReturns the positive number of bytes in the resulting ASCII string
326c8c1f2ecSHans Petter Selaskyon success and a LIBUSB_ERROR code on failure.
3274eaae44dSAndrew Thompson.Pp
3284c0392e6SHans Petter Selasky.Ft int
3294c0392e6SHans Petter Selasky.Fn libusb_parse_ss_endpoint_comp "const void *buf" "int len" "libusb_ss_endpoint_companion_descriptor **ep_comp"
3304c0392e6SHans Petter SelaskyThis function parses the USB 3.0 endpoint companion descriptor in host endian format pointed to by
3314c0392e6SHans Petter Selasky.Fa buf
3324c0392e6SHans Petter Selaskyand having a length of
3334c0392e6SHans Petter Selasky.Fa len .
3344c0392e6SHans Petter SelaskyTypically these arguments are the extra and extra_length fields of the
3354c0392e6SHans Petter Selaskyendpoint descriptor.
3364c0392e6SHans Petter SelaskyOn success the pointer to resulting descriptor is stored at the location given by
3374c0392e6SHans Petter Selasky.Fa ep_comp .
3384c0392e6SHans Petter SelaskyReturns zero on success and a LIBUSB_ERROR code on failure.
3394c0392e6SHans Petter SelaskyOn success the parsed USB 3.0 endpoint companion descriptor must be
3404c0392e6SHans Petter Selaskyfreed using the libusb_free_ss_endpoint_comp function.
3414c0392e6SHans Petter Selasky.Pp
3424c0392e6SHans Petter Selasky.Ft void
3434c0392e6SHans Petter Selasky.Fn libusb_free_ss_endpoint_comp "libusb_ss_endpoint_companion_descriptor *ep_comp"
3444c0392e6SHans Petter SelaskyThis function is NULL safe and frees a parsed USB 3.0 endpoint companion descriptor.
3454c0392e6SHans Petter Selasky.Pp
3464c0392e6SHans Petter Selasky.Ft int
3474c0392e6SHans Petter Selasky.Fn libusb_parse_bos_descriptor "const void *buf" "int len" "libusb_bos_descriptor **bos"
3484c0392e6SHans Petter SelaskyThis function parses a Binary Object Store, BOS, descriptor into host endian format pointed to by
3494c0392e6SHans Petter Selasky.Fa buf
3504c0392e6SHans Petter Selaskyand having a length of
3514c0392e6SHans Petter Selasky.Fa len .
3524c0392e6SHans Petter SelaskyOn success the pointer to resulting descriptor is stored at the location given by
3534c0392e6SHans Petter Selasky.Fa bos .
3544c0392e6SHans Petter SelaskyReturns zero on success and a LIBUSB_ERROR code on failure.
3554c0392e6SHans Petter SelaskyOn success the parsed BOS descriptor must be freed using the
3564c0392e6SHans Petter Selaskylibusb_free_bos_descriptor function.
3574c0392e6SHans Petter Selasky.Pp
3584c0392e6SHans Petter Selasky.Ft void
3594c0392e6SHans Petter Selasky.Fn libusb_free_bos_descriptor "libusb_bos_descriptor *bos"
3604c0392e6SHans Petter SelaskyThis function is NULL safe and frees a parsed BOS descriptor.
361a5118bdfSAndrew Thompson.Sh USB ASYNCHRONOUS I/O
362a5118bdfSAndrew Thompson.Ft struct libusb_transfer *
363a5118bdfSAndrew Thompson.Fn libusb_alloc_transfer "int iso_packets"
36411867070SHans Petter SelaskyAllocate a transfer with the number of isochronous packet descriptors
36511867070SHans Petter Selaskyspecified by
36611867070SHans Petter Selasky.Fa iso_packets .
367ca96e26aSHans Petter SelaskyReturns NULL on error.
3684eaae44dSAndrew Thompson.Pp
369a5118bdfSAndrew Thompson.Ft void
370a5118bdfSAndrew Thompson.Fn libusb_free_transfer "struct libusb_transfer *tr"
371a5118bdfSAndrew ThompsonFree a transfer.
3724eaae44dSAndrew Thompson.Pp
373a5118bdfSAndrew Thompson.Ft int
374a5118bdfSAndrew Thompson.Fn libusb_submit_transfer "struct libusb_transfer *tr"
375ca96e26aSHans Petter SelaskyThis function will submit a transfer and returns immediately.
376c8c1f2ecSHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_NO_DEVICE if
37711867070SHans Petter Selaskythe device has been disconnected and a
378a5118bdfSAndrew ThompsonLIBUSB_ERROR code on other failure.
3794eaae44dSAndrew Thompson.Pp
380a5118bdfSAndrew Thompson.Ft int
381a5118bdfSAndrew Thompson.Fn libusb_cancel_transfer "struct libusb_transfer *tr"
38211867070SHans Petter SelaskyThis function asynchronously cancels a transfer.
38311867070SHans Petter SelaskyReturns 0 on success and a LIBUSB_ERROR code on failure.
384a5118bdfSAndrew Thompson.Sh USB SYNCHRONOUS I/O
385a5118bdfSAndrew Thompson.Ft int
386698e791aSHans 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"
387ca96e26aSHans Petter SelaskyPerform a USB control transfer.
388ca96e26aSHans Petter SelaskyReturns the actual number of bytes
38911867070SHans Petter Selaskytransferred on success, in the range from and including zero up to and
390c865d740SHans Petter Selaskyincluding
391892f4806SHans Petter Selasky.Fa wLength .
39211867070SHans Petter SelaskyOn error a LIBUSB_ERROR code is returned, for example
39311867070SHans Petter SelaskyLIBUSB_ERROR_TIMEOUT if the transfer timed out, LIBUSB_ERROR_PIPE if the
394c865d740SHans Petter Selaskycontrol request was not supported, LIBUSB_ERROR_NO_DEVICE if the
39511867070SHans Petter Selaskydevice has been disconnected and another LIBUSB_ERROR code on other failures.
39611867070SHans Petter SelaskyThe LIBUSB_ERROR codes are all negative.
3974eaae44dSAndrew Thompson.Pp
398a5118bdfSAndrew Thompson.Ft int
399a5118bdfSAndrew Thompson.Fn libusb_bulk_transfer "struct libusb_device_handle *devh" "unsigned char endpoint" "unsigned char *data" "int length" "int *transferred" "unsigned int timeout"
400892f4806SHans Petter SelaskyPerform an USB bulk transfer.
401892f4806SHans Petter SelaskyA timeout value of zero means no timeout.
402892f4806SHans Petter SelaskyThe timeout value is given in milliseconds.
403892f4806SHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_TIMEOUT
40411867070SHans Petter Selaskyif the transfer timed out, LIBUSB_ERROR_PIPE if the control request was not
405a5118bdfSAndrew Thompsonsupported, LIBUSB_ERROR_OVERFLOW if the device offered more data,
406a5118bdfSAndrew ThompsonLIBUSB_ERROR_NO_DEVICE if the device has been disconnected and
40711867070SHans Petter Selaskya LIBUSB_ERROR code on other failure.
4084eaae44dSAndrew Thompson.Pp
409a5118bdfSAndrew Thompson.Ft int
410a5118bdfSAndrew Thompson.Fn libusb_interrupt_transfer "struct libusb_device_handle *devh" "unsigned char endpoint" "unsigned char *data" "int length" "int *transferred" "unsigned int timeout"
411892f4806SHans Petter SelaskyPerform an USB Interrupt transfer.
412892f4806SHans Petter SelaskyA timeout value of zero means no timeout.
413892f4806SHans Petter SelaskyThe timeout value is given in milliseconds.
414892f4806SHans Petter SelaskyReturns 0 on success, LIBUSB_ERROR_TIMEOUT
41511867070SHans Petter Selaskyif the transfer timed out, LIBUSB_ERROR_PIPE if the control request was not
416a5118bdfSAndrew Thompsonsupported, LIBUSB_ERROR_OVERFLOW if the device offered more data,
417a5118bdfSAndrew ThompsonLIBUSB_ERROR_NO_DEVICE if the device has been disconnected and
41811867070SHans Petter Selaskya LIBUSB_ERROR code on other failure.
419a5118bdfSAndrew Thompson.Sh USB EVENTS
420a5118bdfSAndrew Thompson.Ft int
421a5118bdfSAndrew Thompson.Fn libusb_try_lock_events "libusb_context *ctx"
422ca96e26aSHans Petter SelaskyTry to acquire the event handling lock.
423ca96e26aSHans Petter SelaskyReturns 0 if the lock was obtained and 1 if not.
4244eaae44dSAndrew Thompson.Pp
425a5118bdfSAndrew Thompson.Ft void
426a5118bdfSAndrew Thompson.Fn libusb_lock_events "libusb_context *ctx"
427c8c1f2ecSHans Petter SelaskyAcquire the event handling lock.
428c8c1f2ecSHans Petter SelaskyThis function is blocking.
4294eaae44dSAndrew Thompson.Pp
430a5118bdfSAndrew Thompson.Ft void
431a5118bdfSAndrew Thompson.Fn libusb_unlock_events "libusb_context *ctx"
432c8c1f2ecSHans Petter SelaskyRelease the event handling lock.
433c8c1f2ecSHans Petter SelaskyThis will wake up any thread blocked
43411867070SHans Petter Selaskyon
435d284271aSJoel Dahl.Fn libusb_wait_for_event .
4364eaae44dSAndrew Thompson.Pp
437a5118bdfSAndrew Thompson.Ft int
438a5118bdfSAndrew Thompson.Fn libusb_event_handling_ok "libusb_context *ctx"
439c8c1f2ecSHans Petter SelaskyDetermine if it still OK for this thread to be doing event handling.
440c8c1f2ecSHans Petter SelaskyReturns 1
441c8c1f2ecSHans Petter Selaskyif event handling can start or continue.
442c8c1f2ecSHans Petter SelaskyReturns 0 if this thread must give up
443a5118bdfSAndrew Thompsonthe events lock.
4444eaae44dSAndrew Thompson.Pp
445a5118bdfSAndrew Thompson.Ft int
446a5118bdfSAndrew Thompson.Fn libusb_event_handler_active "libusb_context *ctx"
447c8c1f2ecSHans Petter SelaskyDetermine if an active thread is handling events.
44811867070SHans Petter SelaskyReturns 1 if there is a thread handling events and 0 if there
449a5118bdfSAndrew Thompsonare no threads currently handling events.
4504eaae44dSAndrew Thompson.Pp
451a5118bdfSAndrew Thompson.Ft void
452a5118bdfSAndrew Thompson.Fn libusb_lock_event_waiters "libusb_context *ctx"
453c8c1f2ecSHans Petter SelaskyAcquire the event_waiters lock.
45411867070SHans Petter SelaskyThis lock is designed to be obtained in the
455a5118bdfSAndrew Thompsonsituation where you want to be aware when events are completed, but some other
456a5118bdfSAndrew Thompsonthread is event handling so calling libusb_handle_events() is not allowed.
457545b01adSAndrew Thompson.Pp
458a5118bdfSAndrew Thompson.Ft void
459a5118bdfSAndrew Thompson.Fn libusb_unlock_event_waiters "libusb_context *ctx"
460a5118bdfSAndrew ThompsonRelease the event_waiters lock.
4614eaae44dSAndrew Thompson.Pp
462a5118bdfSAndrew Thompson.Ft int
463a5118bdfSAndrew Thompson.Fn libusb_wait_for_event "libusb_context *ctx" "struct timeval *tv"
464c8c1f2ecSHans Petter SelaskyWait for another thread to signal completion of an event.
465c8c1f2ecSHans Petter SelaskyMust be called
466c8c1f2ecSHans Petter Selaskywith the event waiters lock held, see libusb_lock_event_waiters().
467c8c1f2ecSHans Petter SelaskyThis will
468a5118bdfSAndrew Thompsonblock until the timeout expires or a transfer completes or a thread releases
469c8c1f2ecSHans Petter Selaskythe event handling lock through libusb_unlock_events().
470c8c1f2ecSHans Petter SelaskyReturns 0 after a
47111867070SHans Petter Selaskytransfer completes or another thread stops event handling, and 1 if the
472a5118bdfSAndrew Thompsontimeout expired.
4734eaae44dSAndrew Thompson.Pp
474a5118bdfSAndrew Thompson.Ft int
475a5118bdfSAndrew Thompson.Fn libusb_handle_events_timeout "libusb_context *ctx" "struct timeval *tv"
476a5118bdfSAndrew ThompsonHandle any pending events by checking if timeouts have expired and by
477c8c1f2ecSHans Petter Selaskychecking the set of file descriptors for activity.
478c8c1f2ecSHans Petter SelaskyReturns 0 on success, or a
479a5118bdfSAndrew ThompsonLIBUSB_ERROR code on failure.
4804eaae44dSAndrew Thompson.Pp
481a5118bdfSAndrew Thompson.Ft int
482a5118bdfSAndrew Thompson.Fn libusb_handle_events "libusb_context *ctx"
483c8c1f2ecSHans Petter SelaskyHandle any pending events in blocking mode with a sensible timeout.
484c8c1f2ecSHans Petter SelaskyReturns 0
48511867070SHans Petter Selaskyon success and a LIBUSB_ERROR code on failure.
4864eaae44dSAndrew Thompson.Pp
487a5118bdfSAndrew Thompson.Ft int
488a5118bdfSAndrew Thompson.Fn libusb_handle_events_locked "libusb_context *ctx" "struct timeval *tv"
4893102cfe2SGlen BarberHandle any pending events by polling file descriptors, without checking if
49011867070SHans Petter Selaskyanother thread is already doing so.
491c8c1f2ecSHans Petter SelaskyMust be called with the event lock held.
4924eaae44dSAndrew Thompson.Pp
493a5118bdfSAndrew Thompson.Ft int
494a5118bdfSAndrew Thompson.Fn libusb_get_next_timeout "libusb_context *ctx" "struct timeval *tv"
495c8c1f2ecSHans Petter SelaskyDetermine the next internal timeout that libusb needs to handle.
496c8c1f2ecSHans Petter SelaskyReturns 0
49711867070SHans Petter Selaskyif there are no pending timeouts, 1 if a timeout was returned, or a LIBUSB_ERROR
498a5118bdfSAndrew Thompsoncode on failure.
4994eaae44dSAndrew Thompson.Pp
500a5118bdfSAndrew Thompson.Ft void
501a5118bdfSAndrew Thompson.Fn libusb_set_pollfd_notifiers "libusb_context *ctx" "libusb_pollfd_added_cb added_cb" "libusb_pollfd_removed_cb remove_cb" "void *user_data"
502a5118bdfSAndrew ThompsonRegister notification functions for file descriptor additions/removals.
503a5118bdfSAndrew ThompsonThese functions will be invoked for every new or removed file descriptor
504a5118bdfSAndrew Thompsonthat libusb uses as an event source.
5054eaae44dSAndrew Thompson.Pp
506a5118bdfSAndrew Thompson.Ft const struct libusb_pollfd **
507a5118bdfSAndrew Thompson.Fn libusb_get_pollfds "libusb_context *ctx"
508a5118bdfSAndrew ThompsonRetrive a list of file descriptors that should be polled by your main loop as
509c8c1f2ecSHans Petter Selaskylibusb event sources.
510c8c1f2ecSHans Petter SelaskyReturns a NULL-terminated list on success or NULL on failure.
5114eaae44dSAndrew Thompson.Sh LIBUSB VERSION 0.1 COMPATIBILITY
512a5118bdfSAndrew ThompsonThe library is also compliant with LibUSB version 0.1.12.
513a5118bdfSAndrew Thompson.Pp
5144eaae44dSAndrew Thompson.Fn usb_open
5154eaae44dSAndrew Thompson.Fn usb_close
5164eaae44dSAndrew Thompson.Fn usb_get_string
5174eaae44dSAndrew Thompson.Fn usb_get_string_simple
5184eaae44dSAndrew Thompson.Fn usb_get_descriptor_by_endpoint
5194eaae44dSAndrew Thompson.Fn usb_get_descriptor
5204eaae44dSAndrew Thompson.Fn usb_parse_descriptor
5214eaae44dSAndrew Thompson.Fn usb_parse_configuration
5224eaae44dSAndrew Thompson.Fn usb_destroy_configuration
5234eaae44dSAndrew Thompson.Fn usb_fetch_and_parse_descriptors
5244eaae44dSAndrew Thompson.Fn usb_bulk_write
5254eaae44dSAndrew Thompson.Fn usb_bulk_read
5264eaae44dSAndrew Thompson.Fn usb_interrupt_write
5274eaae44dSAndrew Thompson.Fn usb_interrupt_read
5284eaae44dSAndrew Thompson.Fn usb_control_msg
5294eaae44dSAndrew Thompson.Fn usb_set_configuration
5304eaae44dSAndrew Thompson.Fn usb_claim_interface
5314eaae44dSAndrew Thompson.Fn usb_release_interface
5324eaae44dSAndrew Thompson.Fn usb_set_altinterface
5334eaae44dSAndrew Thompson.Fn usb_resetep
5344eaae44dSAndrew Thompson.Fn usb_clear_halt
5354eaae44dSAndrew Thompson.Fn usb_reset
5364eaae44dSAndrew Thompson.Fn usb_strerror
5374eaae44dSAndrew Thompson.Fn usb_init
5384eaae44dSAndrew Thompson.Fn usb_set_debug
5394eaae44dSAndrew Thompson.Fn usb_find_busses
5404eaae44dSAndrew Thompson.Fn usb_find_devices
5414eaae44dSAndrew Thompson.Fn usb_device
5424eaae44dSAndrew Thompson.Fn usb_get_busses
543f1b5fa6eSHans Petter Selasky.Fn usb_check_connected
5444eb5923dSHans Petter Selasky.Fn usb_get_driver_np
5454eb5923dSHans Petter Selasky.Fn usb_detach_kernel_driver_np
5464eaae44dSAndrew Thompson.Sh SEE ALSO
547a5118bdfSAndrew Thompson.Xr libusb20 3 ,
548c54c1f7cSAndrew Thompson.Xr usb 4 ,
549c61f2561SHans Petter Selasky.Xr usbconfig 8 ,
550c61f2561SHans Petter Selasky.Xr usbdump 8
551a5118bdfSAndrew Thompson.Pp
552a5118bdfSAndrew Thompson.Pa http://libusb.sourceforge.net/
5534eaae44dSAndrew Thompson.Sh HISTORY
5544eaae44dSAndrew Thompson.Nm
555a5118bdfSAndrew Thompsonsupport first appeared in
556a5118bdfSAndrew Thompson.Fx 8.0 .
557