Refine libusb_set_configuration() semantics
[platform/upstream/libusb.git] / libusb / core.c
1 /*
2  * Core functions for libusb
3  * Copyright (C) 2007-2008 Daniel Drake <dsd@gentoo.org>
4  * Copyright (c) 2001 Johannes Erdfelt <johannes@erdfelt.com>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20
21 #include <config.h>
22
23 #include <errno.h>
24 #include <poll.h>
25 #include <stdarg.h>
26 #include <stdio.h>
27 #include <stdlib.h>
28 #include <string.h>
29 #include <sys/types.h>
30
31 #include "libusb.h"
32 #include "libusbi.h"
33
34 static int usbi_debug = 0;
35 static int debug_fixed = 0;
36
37 #ifdef OS_LINUX
38 const struct usbi_os_backend * const usbi_backend = &linux_usbfs_backend;
39 #else
40 #error "Unsupported OS"
41 #endif
42
43 static struct list_head usb_devs;
44 static pthread_mutex_t usb_devs_lock = PTHREAD_MUTEX_INITIALIZER;
45
46 /* A list of open handles. Backends are free to traverse this if required. */
47 struct list_head usbi_open_devs;
48 pthread_mutex_t usbi_open_devs_lock = PTHREAD_MUTEX_INITIALIZER;
49
50 /**
51  * \mainpage libusb-1.0 API Reference
52  *
53  * \section intro Introduction
54  *
55  * libusb is an open source library that allows you to communicate with USB
56  * devices from userspace. For more info, see the
57  * <a href="http://libusb.sourceforge.net">libusb homepage</a>.
58  *
59  * This documentation is aimed at application developers wishing to
60  * communicate with USB peripherals from their own software. After reviewing
61  * this documentation, feedback and questions can be sent to the
62  * <a href="http://sourceforge.net/mail/?group_id=1674">libusb-devel mailing
63  * list</a>.
64  *
65  * This documentation assumes knowledge of how to operate USB devices from
66  * a software standpoint (descriptors, configurations, interfaces, endpoints,
67  * control/bulk/interrupt/isochronous transfers, etc). Full information
68  * can be found in the <a href="http://www.usb.org/developers/docs/">USB 2.0
69  * Specification</a> which is available for free download. You can probably
70  * find less verbose introductions by searching the web.
71  *
72  * \section features Library features
73  *
74  * - All transfer types supported (control/bulk/interrupt/isochronous)
75  * - 2 transfer interfaces:
76  *    -# Synchronous (simple)
77  *    -# Asynchronous (more complicated, but more powerful)
78  * - Thread safe (although the asynchronous interface means that you
79  *   usually won't need to thread)
80  * - Lightweight with lean API
81  * - Compatible with libusb-0.1 through the libusb-compat-0.1 translation layer
82  *
83  * \section gettingstarted Getting Started
84  *
85  * To begin reading the API documentation, start with the Modules page which
86  * links to the different categories of libusb's functionality.
87  *
88  * One decision you will have to make is whether to use the synchronous
89  * or the asynchronous data transfer interface. The \ref io documentation
90  * provides some insight into this topic.
91  *
92  * Some example programs can be found in the libusb source distribution under
93  * the "examples" subdirectory. The libusb homepage includes a list of
94  * real-life project examples which use libusb.
95  *
96  * \section errorhandling Error handling
97  *
98  * libusb functions typically return 0 on success or a negative error code
99  * on failure. These negative error codes relate to LIBUSB_ERROR constants
100  * which are listed on the \ref misc "miscellaneous" documentation page.
101  *
102  * \section msglog Debug message logging
103  *
104  * libusb does not log any messages by default. Your application is therefore
105  * free to close stdout/stderr and those descriptors may be reused without
106  * worry.
107  *
108  * The libusb_set_debug() function can be used to enable stdout/stderr logging
109  * of certain messages. Under standard configuration, libusb doesn't really
110  * log much at all, so you are advised to use this function to enable all
111  * error/warning/informational messages. It will help you debug problems with
112  * your software.
113  *
114  * The LIBUSB_DEBUG environment variable can be used to enable message logging
115  * at run-time. This environment variable should be set to a number, which is
116  * interpreted the same as the libusb_set_debug() parameter. When this
117  * environment variable is set, the message logging verbosity level is fixed
118  * and libusb_set_debug() effectively does nothing.
119  *
120  * libusb can be compiled without any logging functions, useful for embedded
121  * systems. In this case, libusb_set_debug() and the LIBUSB_DEBUG environment
122  * variable have no effects.
123  *
124  * libusb can also be compiled with verbose debugging messages. When the
125  * library is compiled in this way, all messages of all verbosities are always
126  * logged.  libusb_set_debug() and the LIBUSB_DEBUG environment variable have
127  * no effects.
128  *
129  * \section remarks Other remarks
130  *
131  * libusb does have imperfections. The \ref caveats "caveats" page attempts
132  * to document these.
133  */
134
135 /**
136  * \page caveats Caveats
137  *
138  * \section devresets Device resets
139  *
140  * The libusb_reset_device() function allows you to reset a device. If your
141  * program has to call such a function, it should obviously be aware that
142  * the reset will cause device state to change (e.g. register values may be
143  * reset).
144  *
145  * The problem is that any other program could reset the device your program
146  * is working with, at any time. libusb does not offer a mechanism to inform
147  * you when this has happened, so if someone else resets your device it will
148  * not be clear to your own program why the device state has changed.
149  *
150  * Ultimately, this is a limitation of writing drivers in userspace.
151  * Separation from the USB stack in the underlying kernel makes it difficult
152  * for the operating system to deliver such notifications to your program.
153  * The Linux kernel USB stack allows such reset notifications to be delivered
154  * to in-kernel USB drivers, but it is not clear how such notifications could
155  * be delivered to second-class drivers that live in userspace.
156  *
157  * \section blockonly Blocking-only functionality
158  *
159  * The functionality listed below is only available through synchronous,
160  * blocking functions. There are no asynchronous/non-blocking alternatives,
161  * and no clear ways of implementing these.
162  *
163  * - Configuration activation (libusb_set_configuration())
164  * - Interface/alternate setting activation (libusb_set_interface_alt_setting())
165  * - Releasing of interfaces (libusb_release_interface())
166  * - Clearing of halt/stall condition (libusb_clear_halt())
167  * - Device resets (libusb_reset_device())
168  *
169  * \section nohotplug No hotplugging
170  *
171  * libusb-1.0 lacks functionality for providing notifications of when devices
172  * are added or removed. This functionality is planned to be implemented
173  * for libusb-1.1.
174  *
175  * That said, there is basic disconnection handling for open device handles:
176  *  - If there are ongoing transfers, libusb's handle_events loop will detect
177  *    disconnections and complete ongoing transfers with the
178  *    LIBUSB_TRANSFER_NO_DEVICE status code.
179  *  - Many functions such as libusb_set_configuration() return the special
180  *    LIBUSB_ERROR_NO_DEVICE error code when the device has been disconnected.
181  */
182
183 /**
184  * @defgroup lib Library initialization/deinitialization
185  * This page details how to initialize and deinitialize libusb. Initialization
186  * must be performed before using any libusb functionality, and similarly you
187  * must not call any libusb functions after deinitialization.
188  */
189
190 /**
191  * @defgroup dev Device handling and enumeration
192  * The functionality documented below is designed to help with the following
193  * operations:
194  * - Enumerating the USB devices currently attached to the system
195  * - Choosing a device to operate from your software
196  * - Opening and closing the chosen device
197  *
198  * \section nutshell In a nutshell...
199  *
200  * The description below really makes things sound more complicated than they
201  * actually are. The following sequence of function calls will be suitable
202  * for almost all scenarios and does not require you to have such a deep
203  * understanding of the resource management issues:
204  * \code
205 // discover devices
206 libusb_device **list;
207 libusb_device *found = NULL;
208 size_t cnt = libusb_get_device_list(&list);
209 size_t i = 0;
210 if (cnt < 0)
211         error();
212
213 for (i = 0; i < cnt; i++) {
214         libusb_device *device = list[i];
215         if (is_interesting(device)) {
216                 found = device;
217                 break;
218         }
219 }
220
221 if (found) {
222         libusb_device_handle *handle = libusb_open(found);
223         // etc
224 }
225
226 libusb_free_device_list(list, 1);
227 \endcode
228  *
229  * The two important points:
230  * - You asked libusb_free_device_list() to unreference the devices (2nd
231  *   parameter)
232  * - You opened the device before freeing the list and unreferencing the
233  *   devices
234  *
235  * If you ended up with a handle, you can now proceed to perform I/O on the
236  * device.
237  *
238  * \section devshandles Devices and device handles
239  * libusb has a concept of a USB device, represented by the
240  * \ref libusb_device opaque type. A device represents a USB device that
241  * is currently or was previously connected to the system. Using a reference
242  * to a device, you can determine certain information about the device (e.g.
243  * you can read the descriptor data).
244  *
245  * The libusb_get_device_list() function can be used to obtain a list of
246  * devices currently connected to the system. This is known as device
247  * discovery.
248  *
249  * Just because you have a reference to a device does not mean it is
250  * necessarily usable. The device may have been unplugged, you may not have
251  * permission to operate such device, or another program or driver may be
252  * using the device.
253  *
254  * When you've found a device that you'd like to operate, you must ask
255  * libusb to open the device using the libusb_open() function. Assuming
256  * success, libusb then returns you a <em>device handle</em>
257  * (a \ref libusb_device_handle pointer). All "real" I/O operations then
258  * operate on the handle rather than the original device pointer.
259  *
260  * \section devref Device discovery and reference counting
261  *
262  * Device discovery (i.e. calling libusb_get_device_list()) returns a
263  * freshly-allocated list of devices. The list itself must be freed when
264  * you are done with it. libusb also needs to know when it is OK to free
265  * the contents of the list - the devices themselves.
266  *
267  * To handle these issues, libusb provides you with two separate items:
268  * - A function to free the list itself
269  * - A reference counting system for the devices inside
270  *
271  * New devices presented by the libusb_get_device_list() function all have a
272  * reference count of 1. You can increase and decrease reference count using
273  * libusb_ref_device() and libusb_unref_device(). A device is destroyed when
274  * it's reference count reaches 0.
275  *
276  * With the above information in mind, the process of opening a device can
277  * be viewed as follows:
278  * -# Discover devices using libusb_get_device_list().
279  * -# Choose the device that you want to operate, and call libusb_open().
280  * -# Unref all devices in the discovered device list.
281  * -# Free the discovered device list.
282  *
283  * The order is important - you must not unreference the device before
284  * attempting to open it, because unreferencing it may destroy the device.
285  *
286  * For convenience, the libusb_free_device_list() function includes a
287  * parameter to optionally unreference all the devices in the list before
288  * freeing the list itself. This combines steps 3 and 4 above.
289  *
290  * As an implementation detail, libusb_open() actually adds a reference to
291  * the device in question. This is because the device remains available
292  * through the handle via libusb_get_device(). The reference is deleted during
293  * libusb_close().
294  */
295
296 /** @defgroup misc Miscellaneous */
297
298 /* we traverse usbfs without knowing how many devices we are going to find.
299  * so we create this discovered_devs model which is similar to a linked-list
300  * which grows when required. it can be freed once discovery has completed,
301  * eliminating the need for a list node in the libusb_device structure
302  * itself. */
303 #define DISCOVERED_DEVICES_SIZE_STEP 8
304
305 static struct discovered_devs *discovered_devs_alloc(void)
306 {
307         struct discovered_devs *ret =
308                 malloc(sizeof(*ret) + (sizeof(void *) * DISCOVERED_DEVICES_SIZE_STEP));
309
310         if (ret) {
311                 ret->len = 0;
312                 ret->capacity = DISCOVERED_DEVICES_SIZE_STEP;
313         }
314         return ret;
315 }
316
317 /* append a device to the discovered devices collection. may realloc itself,
318  * returning new discdevs. returns NULL on realloc failure. */
319 struct discovered_devs *discovered_devs_append(
320         struct discovered_devs *discdevs, struct libusb_device *dev)
321 {
322         size_t len = discdevs->len;
323         size_t capacity;
324
325         /* if there is space, just append the device */
326         if (len < discdevs->capacity) {
327                 discdevs->devices[len] = libusb_ref_device(dev);
328                 discdevs->len++;
329                 return discdevs;
330         }
331
332         /* exceeded capacity, need to grow */
333         usbi_dbg("need to increase capacity");
334         capacity = discdevs->capacity + DISCOVERED_DEVICES_SIZE_STEP;
335         discdevs = realloc(discdevs,
336                 sizeof(*discdevs) + (sizeof(void *) * capacity));
337         if (discdevs) {
338                 discdevs->capacity = capacity;
339                 discdevs->devices[len] = libusb_ref_device(dev);
340                 discdevs->len++;
341         }
342
343         return discdevs;
344 }
345
346 static void discovered_devs_free(struct discovered_devs *discdevs)
347 {
348         size_t i;
349
350         for (i = 0; i < discdevs->len; i++)
351                 libusb_unref_device(discdevs->devices[i]);
352
353         free(discdevs);
354 }
355
356 /* Allocate a new device with a specific session ID. The returned device has
357  * a reference count of 1. */
358 struct libusb_device *usbi_alloc_device(unsigned long session_id)
359 {
360         size_t priv_size = usbi_backend->device_priv_size;
361         struct libusb_device *dev = malloc(sizeof(*dev) + priv_size);
362         int r;
363
364         if (!dev)
365                 return NULL;
366
367         r = pthread_mutex_init(&dev->lock, NULL);
368         if (r)
369                 return NULL;
370
371         dev->refcnt = 1;
372         dev->session_data = session_id;
373         memset(&dev->os_priv, 0, priv_size);
374
375         pthread_mutex_lock(&usb_devs_lock);
376         list_add(&dev->list, &usb_devs);
377         pthread_mutex_unlock(&usb_devs_lock);
378         return dev;
379 }
380
381 /* Perform some final sanity checks on a newly discovered device. If this
382  * function fails (negative return code), the device should not be added
383  * to the discovered device list. */
384 int usbi_sanitize_device(struct libusb_device *dev)
385 {
386         int r;
387         unsigned char raw_desc[DEVICE_DESC_LENGTH];
388         uint8_t num_configurations;
389         int host_endian;
390
391         r = usbi_backend->get_device_descriptor(dev, raw_desc, &host_endian);
392         if (r < 0)
393                 return r;
394
395         num_configurations = raw_desc[DEVICE_DESC_LENGTH - 1];
396         if (num_configurations > USB_MAXCONFIG) {
397                 usbi_err("too many configurations");
398                 return LIBUSB_ERROR_IO;
399         } else if (num_configurations < 1) {
400                 usbi_dbg("no configurations?");
401                 return LIBUSB_ERROR_IO;
402         }
403
404         dev->num_configurations = num_configurations;
405         return 0;
406 }
407
408 /* Examine libusb's internal list of known devices, looking for one with
409  * a specific session ID. Returns the matching device if it was found, and
410  * NULL otherwise. */
411 struct libusb_device *usbi_get_device_by_session_id(unsigned long session_id)
412 {
413         struct libusb_device *dev;
414         struct libusb_device *ret = NULL;
415
416         pthread_mutex_lock(&usb_devs_lock);
417         list_for_each_entry(dev, &usb_devs, list)
418                 if (dev->session_data == session_id) {
419                         ret = dev;
420                         break;
421                 }
422         pthread_mutex_unlock(&usb_devs_lock);
423
424         return ret;
425 }
426
427 /** @ingroup dev
428  * Returns a list of USB devices currently attached to the system. This is
429  * your entry point into finding a USB device to operate.
430  *
431  * You are expected to unreference all the devices when you are done with
432  * them, and then free the list with libusb_free_device_list(). Note that
433  * libusb_free_device_list() can unref all the devices for you. Be careful
434  * not to unreference a device you are about to open until after you have
435  * opened it.
436  *
437  * This return value of this function indicates the number of devices in
438  * the resultant list. The list is actually one element larger, as it is
439  * NULL-terminated.
440  *
441  * \param list output location for a list of devices. Must be later freed with
442  * libusb_free_device_list().
443  * \returns the number of devices in the outputted list, or LIBUSB_ERROR_NO_MEM
444  * on memory allocation failure.
445  */
446 API_EXPORTED ssize_t libusb_get_device_list(libusb_device ***list)
447 {
448         struct discovered_devs *discdevs = discovered_devs_alloc();
449         struct libusb_device **ret;
450         int r = 0;
451         size_t i;
452         ssize_t len;
453         usbi_dbg("");
454
455         if (!discdevs)
456                 return LIBUSB_ERROR_NO_MEM;
457
458         r = usbi_backend->get_device_list(&discdevs);
459         if (r < 0) {
460                 len = r;
461                 goto out;
462         }
463
464         /* convert discovered_devs into a list */
465         len = discdevs->len;
466         ret = malloc(sizeof(void *) * (len + 1));
467         if (!ret) {
468                 len = LIBUSB_ERROR_NO_MEM;
469                 goto out;
470         }
471
472         ret[len] = NULL;
473         for (i = 0; i < len; i++) {
474                 struct libusb_device *dev = discdevs->devices[i];
475                 ret[i] = libusb_ref_device(dev);
476         }
477         *list = ret;
478
479 out:
480         discovered_devs_free(discdevs);
481         return len;
482 }
483
484 /** \ingroup dev
485  * Frees a list of devices previously discovered using
486  * libusb_get_device_list(). If the unref_devices parameter is set, the
487  * reference count of each device in the list is decremented by 1.
488  * \param list the list to free
489  * \param unref_devices whether to unref the devices in the list
490  */
491 API_EXPORTED void libusb_free_device_list(libusb_device **list,
492         int unref_devices)
493 {
494         if (!list)
495                 return;
496
497         if (unref_devices) {
498                 int i = 0;
499                 struct libusb_device *dev;
500
501                 while ((dev = list[i++]) != NULL)
502                         libusb_unref_device(dev);
503         }
504         free(list);
505 }
506
507 /** \ingroup dev
508  * Get the number of the bus that a device is connected to.
509  * \param dev a device
510  * \returns the bus number
511  */
512 API_EXPORTED uint8_t libusb_get_bus_number(libusb_device *dev)
513 {
514         return dev->bus_number;
515 }
516
517 /** \ingroup dev
518  * Get the address of the device on the bus it is connected to.
519  * \param dev a device
520  * \returns the device address
521  */
522 API_EXPORTED uint8_t libusb_get_device_address(libusb_device *dev)
523 {
524         return dev->device_address;
525 }
526
527 /** \ingroup dev
528  * Convenience function to retrieve the wMaxPacketSize value for a particular
529  * endpoint in the active device configuration. This is useful for setting up
530  * isochronous transfers.
531  *
532  * \param dev a device
533  * \param endpoint address of the endpoint in question
534  * \returns the wMaxPacketSize value
535  * \returns LIBUSB_ERROR_NOT_FOUND if the endpoint does not exist
536  * \returns LIBUSB_ERROR_OTHER on other failure
537  */
538 API_EXPORTED int libusb_get_max_packet_size(libusb_device *dev,
539         unsigned char endpoint)
540 {
541         int iface_idx;
542         struct libusb_config_descriptor *config;
543         int r;
544         
545         r = libusb_get_active_config_descriptor(dev, &config);
546         if (r < 0) {
547                 usbi_err("could not retrieve active config descriptor");
548                 return LIBUSB_ERROR_OTHER;
549         }
550
551         r = LIBUSB_ERROR_NOT_FOUND;
552         for (iface_idx = 0; iface_idx < config->bNumInterfaces; iface_idx++) {
553                 const struct libusb_interface *iface = &config->interface[iface_idx];
554                 int altsetting_idx;
555
556                 for (altsetting_idx = 0; altsetting_idx < iface->num_altsetting;
557                                 altsetting_idx++) {
558                         const struct libusb_interface_descriptor *altsetting
559                                 = &iface->altsetting[altsetting_idx];
560                         int ep_idx;
561
562                         for (ep_idx = 0; ep_idx < altsetting->bNumEndpoints; ep_idx++) {
563                                 const struct libusb_endpoint_descriptor *ep =
564                                         &altsetting->endpoint[ep_idx];
565                                 if (ep->bEndpointAddress == endpoint) {
566                                         r = ep->wMaxPacketSize;
567                                         goto out;
568                                 }
569                         }
570                 }
571         }
572
573 out:
574         libusb_free_config_descriptor(config);
575         return r;
576 }
577
578 /** \ingroup dev
579  * Increment the reference count of a device.
580  * \param dev the device to reference
581  * \returns the same device
582  */
583 API_EXPORTED libusb_device *libusb_ref_device(libusb_device *dev)
584 {
585         pthread_mutex_lock(&dev->lock);
586         dev->refcnt++;
587         pthread_mutex_unlock(&dev->lock);
588         return dev;
589 }
590
591 /** \ingroup dev
592  * Decrement the reference count of a device. If the decrement operation
593  * causes the reference count to reach zero, the device shall be destroyed.
594  * \param dev the device to unreference
595  */
596 API_EXPORTED void libusb_unref_device(libusb_device *dev)
597 {
598         int refcnt;
599
600         if (!dev)
601                 return;
602
603         pthread_mutex_lock(&dev->lock);
604         refcnt = --dev->refcnt;
605         pthread_mutex_unlock(&dev->lock);
606
607         if (refcnt == 0) {
608                 usbi_dbg("destroy device %d.%d", dev->bus_number, dev->device_address);
609
610                 if (usbi_backend->destroy_device)
611                         usbi_backend->destroy_device(dev);
612
613                 pthread_mutex_lock(&usb_devs_lock);
614                 list_del(&dev->list);
615                 pthread_mutex_unlock(&usb_devs_lock);
616
617                 free(dev);
618         }
619 }
620
621 /** \ingroup dev
622  * Open a device and obtain a device handle. A handle allows you to perform
623  * I/O on the device in question.
624  *
625  * Internally, this function adds a reference to the device and makes it
626  * available to you through libusb_get_device(). This reference is removed
627  * during libusb_close().
628  *
629  * This is a non-blocking function; no requests are sent over the bus.
630  *
631  * \param dev the device to open
632  * \param handle output location for the returned device handle pointer. Only
633  * populated when the return code is 0.
634  * \returns 0 on success
635  * \returns LIBUSB_ERROR_NO_MEM on memory allocation failure
636  * \returns LIBUSB_ERROR_ACCESS if the user has insufficient permissions
637  * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected
638  * \returns another LIBUSB_ERROR code on other failure
639  */
640 API_EXPORTED int libusb_open(libusb_device *dev, libusb_device_handle **handle)
641 {
642         struct libusb_device_handle *_handle;
643         size_t priv_size = usbi_backend->device_handle_priv_size;
644         int r;
645         usbi_dbg("open %d.%d", dev->bus_number, dev->device_address);
646
647         _handle = malloc(sizeof(*_handle) + priv_size);
648         if (!_handle)
649                 return LIBUSB_ERROR_NO_MEM;
650
651         r = pthread_mutex_init(&_handle->lock, NULL);
652         if (r)
653                 return LIBUSB_ERROR_OTHER;
654
655         _handle->dev = libusb_ref_device(dev);
656         _handle->claimed_interfaces = 0;
657         memset(&_handle->os_priv, 0, priv_size);
658
659         r = usbi_backend->open(_handle);
660         if (r < 0) {
661                 libusb_unref_device(dev);
662                 free(_handle);
663                 return r;
664         }
665
666         pthread_mutex_lock(&usbi_open_devs_lock);
667         list_add(&_handle->list, &usbi_open_devs);
668         pthread_mutex_unlock(&usbi_open_devs_lock);
669         *handle = _handle;
670         return 0;
671 }
672
673 /** \ingroup dev
674  * Convenience function for finding a device with a particular
675  * <tt>idVendor</tt>/<tt>idProduct</tt> combination. This function is intended
676  * for those scenarios where you are using libusb to knock up a quick test
677  * application - it allows you to avoid calling libusb_get_device_list() and
678  * worrying about traversing/freeing the list.
679  *
680  * This function has limitations and is hence not intended for use in real
681  * applications: if multiple devices have the same IDs it will only
682  * give you the first one, etc.
683  *
684  * \param vendor_id the idVendor value to search for
685  * \param product_id the idProduct value to search for
686  * \returns a handle for the first found device, or NULL on error or if the
687  * device could not be found. */
688 API_EXPORTED libusb_device_handle *libusb_open_device_with_vid_pid(
689         uint16_t vendor_id, uint16_t product_id)
690 {
691         struct libusb_device **devs;
692         struct libusb_device *found = NULL;
693         struct libusb_device *dev;
694         struct libusb_device_handle *handle = NULL;
695         size_t i = 0;
696         int r;
697
698         if (libusb_get_device_list(&devs) < 0)
699                 return NULL;
700
701         while ((dev = devs[i++]) != NULL) {
702                 struct libusb_device_descriptor desc;
703                 r = libusb_get_device_descriptor(dev, &desc);
704                 if (r < 0)
705                         goto out;
706                 if (desc.idVendor == vendor_id && desc.idProduct == product_id) {
707                         found = dev;
708                         break;
709                 }
710         }
711
712         if (found) {
713                 r = libusb_open(found, &handle);
714                 if (r < 0)
715                         handle = NULL;
716         }
717
718 out:
719         libusb_free_device_list(devs, 1);
720         return handle;
721 }
722
723 static void do_close(struct libusb_device_handle *dev_handle)
724 {
725         usbi_backend->close(dev_handle);
726         libusb_unref_device(dev_handle->dev);
727 }
728
729 /** \ingroup dev
730  * Close a device handle. Should be called on all open handles before your
731  * application exits.
732  *
733  * Internally, this function destroys the reference that was added by
734  * libusb_open() on the given device.
735  *
736  * This is a non-blocking function; no requests are sent over the bus.
737  *
738  * \param dev_handle the handle to close
739  */
740 API_EXPORTED void libusb_close(libusb_device_handle *dev_handle)
741 {
742         if (!dev_handle)
743                 return;
744         usbi_dbg("");
745
746         pthread_mutex_lock(&usbi_open_devs_lock);
747         list_del(&dev_handle->list);
748         pthread_mutex_unlock(&usbi_open_devs_lock);
749
750         do_close(dev_handle);
751         free(dev_handle);
752 }
753
754 /** \ingroup dev
755  * Get the underlying device for a handle. This function does not modify
756  * the reference count of the returned device, so do not feel compelled to
757  * unreference it when you are done.
758  * \param dev_handle a device handle
759  * \returns the underlying device
760  */
761 API_EXPORTED libusb_device *libusb_get_device(libusb_device_handle *dev_handle)
762 {
763         return dev_handle->dev;
764 }
765
766 /** \ingroup dev
767  * Determine the bConfigurationValue of the currently active configuration.
768  *
769  * You could formulate your own control request to obtain this information,
770  * but this function has the advantage that it may be able to retrieve the
771  * information from operating system caches (no I/O involved).
772  *
773  * If the OS does not cache this information, then this function will block
774  * while a control transfer is submitted to retrieve the information.
775  *
776  * This function will return a value of 0 in the <tt>config</tt> output
777  * parameter if the device is in unconfigured state.
778  *
779  * \param dev a device handle
780  * \param config output location for the bConfigurationValue of the active
781  * configuration (only valid for return code 0)
782  * \returns 0 on success
783  * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected
784  * \returns another LIBUSB_ERROR code on other failure
785  */
786 API_EXPORTED int libusb_get_configuration(libusb_device_handle *dev,
787         int *config)
788 {
789         int r = LIBUSB_ERROR_NOT_SUPPORTED;
790
791         usbi_dbg("");
792         if (usbi_backend->get_configuration)
793                 r = usbi_backend->get_configuration(dev, config);
794
795         if (r == LIBUSB_ERROR_NOT_SUPPORTED) {
796                 uint8_t tmp = 0;
797                 usbi_dbg("falling back to control message");
798                 r = libusb_control_transfer(dev, LIBUSB_ENDPOINT_IN,
799                         LIBUSB_REQUEST_GET_CONFIGURATION, 0, 0, &tmp, 1, 1000);
800                 if (r == 0) {
801                         usbi_err("zero bytes returned in ctrl transfer?");
802                         r = LIBUSB_ERROR_IO;
803                 } else if (r == 1) {
804                         r = 0;
805                         *config = tmp;
806                 } else {
807                         usbi_dbg("control failed, error %d", r);
808                 }
809         }
810
811         if (r == 0)
812                 usbi_dbg("active config %d", *config);
813
814         return r;
815 }
816
817 /** \ingroup dev
818  * Set the active configuration for a device. The operating system may have
819  * already set an active configuration on the device, but for portability
820  * reasons you should use this function to select the configuration you want
821  * before claiming any interfaces.
822  *
823  * If you wish to change to another configuration at some later time, you
824  * must release all claimed interfaces using libusb_release_interface() before
825  * setting a new active configuration. Also, consider that other applications
826  * or drivers may have claimed interfaces, in which case you are unable to
827  * change the configuration.
828  *
829  * A configuration value of -1 will put the device in unconfigured state.
830  * The USB specifications state that a configuration value of 0 does this,
831  * however buggy devices exist which actually have a configuration 0.
832  *
833  * This function checks the current active configuration before setting the
834  * new one. If the requested configuration is already active, this function
835  * does nothing more.
836  *
837  * This function is inherently racy: there is a small chance that someone may
838  * change the configuration after libusb has determined the active
839  * configuration but before the new one has been applied (or not applied, if
840  * libusb thinks the specified configuration is already active). After changing
841  * configuration, you may choose to claim an interface and then call
842  * libusb_get_configuration() to ensure that the requested change actually took
843  * place. The fact that you have now claimed an interface means that nobody
844  * else can change the configuration.
845  *
846  * You should always use this function rather than formulating your own
847  * SET_CONFIGURATION control request. This is because the underlying operating
848  * system needs to know when such changes happen.
849  *
850  * This is a blocking function.
851  *
852  * \param dev a device handle
853  * \param configuration the bConfigurationValue of the configuration you
854  * wish to activate, or -1 if you wish to put the device in unconfigured state
855  * \returns 1 if the configuration was changed
856  * \returns 0 if the configuration was already active
857  * \returns LIBUSB_ERROR_NOT_FOUND if the requested configuration does not exist
858  * \returns LIBUSB_ERROR_BUSY if interfaces are currently claimed
859  * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected
860  * \returns another LIBUSB_ERROR code on other failure
861  */
862 API_EXPORTED int libusb_set_configuration(libusb_device_handle *dev,
863         int configuration)
864 {
865         int r;
866         int active;
867
868         usbi_dbg("configuration %d", configuration);
869         r = libusb_get_configuration(dev, &active);
870         if (r < 0)
871                 return r;
872         if (active == 0)
873                 active = -1;
874         if (active == configuration) {
875                 usbi_dbg("already active");
876                 return 0;
877         }
878
879         r = usbi_backend->set_configuration(dev, configuration);
880         if (r == 0)
881                 r = 1;
882         return r;
883 }
884
885 /** \ingroup dev
886  * Claim an interface on a given device handle. You must claim the interface
887  * you wish to use before you can perform I/O on any of its endpoints.
888  *
889  * It is legal to attempt to claim an already-claimed interface, in which
890  * case libusb just returns 0 without doing anything.
891  *
892  * Claiming of interfaces is a purely logical operation; it does not cause
893  * any requests to be sent over the bus. Interface claiming is used to
894  * instruct the underlying operating system that your application wishes
895  * to take ownership of the interface.
896  *
897  * This is a non-blocking function.
898  *
899  * \param dev a device handle
900  * \param interface_number the <tt>bInterfaceNumber</tt> of the interface you
901  * wish to claim
902  * \returns 0 on success
903  * \returns LIBUSB_ERROR_NOT_FOUND if the requested interface does not exist
904  * \returns LIBUSB_ERROR_BUSY if another program or driver has claimed the
905  * interface
906  * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected
907  * \returns a LIBUSB_ERROR code on other failure
908  */
909 API_EXPORTED int libusb_claim_interface(libusb_device_handle *dev,
910         int interface_number)
911 {
912         int r = 0;
913
914         usbi_dbg("interface %d", interface_number);
915         if (interface_number >= sizeof(dev->claimed_interfaces) * 8)
916                 return LIBUSB_ERROR_INVALID_PARAM;
917
918         pthread_mutex_lock(&dev->lock);
919         if (dev->claimed_interfaces & (1 << interface_number))
920                 goto out;
921
922         r = usbi_backend->claim_interface(dev, interface_number);
923         if (r == 0)
924                 dev->claimed_interfaces |= 1 << interface_number;
925
926 out:
927         pthread_mutex_unlock(&dev->lock);
928         return r;
929 }
930
931 /** \ingroup dev
932  * Release an interface previously claimed with libusb_claim_interface(). You
933  * should release all claimed interfaces before closing a device handle.
934  *
935  * This is a blocking function. A SET_INTERFACE control request will be sent
936  * to the device, resetting interface state to the first alternate setting.
937  *
938  * \param dev a device handle
939  * \param interface_number the <tt>bInterfaceNumber</tt> of the
940  * previously-claimed interface
941  * \returns 0 on success
942  * \returns LIBUSB_ERROR_NOT_FOUND if the interface was not claimed
943  * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected
944  * \returns another LIBUSB_ERROR code on other failure
945  */
946 API_EXPORTED int libusb_release_interface(libusb_device_handle *dev,
947         int interface_number)
948 {
949         int r;
950
951         usbi_dbg("interface %d", interface_number);
952         if (interface_number >= sizeof(dev->claimed_interfaces) * 8)
953                 return LIBUSB_ERROR_INVALID_PARAM;
954
955         pthread_mutex_lock(&dev->lock);
956         if (!(dev->claimed_interfaces & (1 << interface_number))) {
957                 r = LIBUSB_ERROR_NOT_FOUND;
958                 goto out;
959         }
960
961         r = usbi_backend->release_interface(dev, interface_number);
962         if (r == 0)
963                 dev->claimed_interfaces &= ~(1 << interface_number);
964
965 out:
966         pthread_mutex_unlock(&dev->lock);
967         return r;
968 }
969
970 /** \ingroup dev
971  * Activate an alternate setting for an interface. The interface must have
972  * been previously claimed with libusb_claim_interface().
973  *
974  * You should always use this function rather than formulating your own
975  * SET_INTERFACE control request. This is because the underlying operating
976  * system needs to know when such changes happen.
977  *
978  * This is a blocking function.
979  *
980  * \param dev a device handle
981  * \param interface_number the <tt>bInterfaceNumber</tt> of the
982  * previously-claimed interface
983  * \param alternate_setting the <tt>bAlternateSetting</tt> of the alternate
984  * setting to activate
985  * \returns 0 on success
986  * \returns LIBUSB_ERROR_NOT_FOUND if the interface was not claimed, or the
987  * requested alternate setting does not exist
988  * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected
989  * \returns another LIBUSB_ERROR code on other failure
990  */
991 API_EXPORTED int libusb_set_interface_alt_setting(libusb_device_handle *dev,
992         int interface_number, int alternate_setting)
993 {
994         usbi_dbg("interface %d altsetting %d", interface_number, alternate_setting);
995         if (interface_number >= sizeof(dev->claimed_interfaces) * 8)
996                 return LIBUSB_ERROR_INVALID_PARAM;
997
998         pthread_mutex_lock(&dev->lock);
999         if (!(dev->claimed_interfaces & (1 << interface_number))) {
1000                 pthread_mutex_unlock(&dev->lock);       
1001                 return LIBUSB_ERROR_NOT_FOUND;
1002         }
1003         pthread_mutex_unlock(&dev->lock);
1004
1005         return usbi_backend->set_interface_altsetting(dev, interface_number,
1006                 alternate_setting);
1007 }
1008
1009 /** \ingroup dev
1010  * Clear the halt/stall condition for an endpoint. Endpoints with halt status
1011  * are unable to receive or transmit data until the halt condition is stalled.
1012  *
1013  * You should cancel all pending transfers before attempting to clear the halt
1014  * condition.
1015  *
1016  * This is a blocking function.
1017  *
1018  * \param dev a device handle
1019  * \param endpoint the endpoint to clear halt status
1020  * \returns 0 on success
1021  * \returns LIBUSB_ERROR_NOT_FOUND if the endpoint does not exist
1022  * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected
1023  * \returns another LIBUSB_ERROR code on other failure
1024  */
1025 API_EXPORTED int libusb_clear_halt(libusb_device_handle *dev,
1026         unsigned char endpoint)
1027 {
1028         usbi_dbg("endpoint %x", endpoint);
1029         return usbi_backend->clear_halt(dev, endpoint);
1030 }
1031
1032 /** \ingroup dev
1033  * Perform a USB port reset to reinitialize a device. The system will attempt
1034  * to restore the previous configuration and alternate settings after the
1035  * reset has completed.
1036  *
1037  * If the reset fails, the descriptors change, or the previous state cannot be
1038  * restored, the device will appear to be disconnected and reconnected. This
1039  * means that the device handle is no longer valid (you should close it) and
1040  * rediscover the device. A return code of LIBUSB_ERROR_NOT_FOUND indicates
1041  * when this is the case.
1042  *
1043  * This is a blocking function which usually incurs a noticeable delay.
1044  *
1045  * \param dev a handle of the device to reset
1046  * \returns 0 on success
1047  * \returns LIBUSB_ERROR_NOT_FOUND if re-enumeration is required, or if the
1048  * device has been disconnected
1049  * \returns another LIBUSB_ERROR code on other failure
1050  */
1051 API_EXPORTED int libusb_reset_device(libusb_device_handle *dev)
1052 {
1053         usbi_dbg("");
1054         return usbi_backend->reset_device(dev);
1055 }
1056
1057 /** \ingroup dev
1058  * Determine if a kernel driver is active on an interface. If a kernel driver
1059  * is active, you cannot claim the interface, and libusb will be unable to
1060  * perform I/O.
1061  *
1062  * \param dev a device handle
1063  * \param interface the interface to check
1064  * \returns 0 if no kernel driver is active
1065  * \returns 1 if a kernel driver is active
1066  * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected
1067  * \returns another LIBUSB_ERROR code on other failure
1068  * \see libusb_detach_kernel_driver()
1069  */
1070 API_EXPORTED int libusb_kernel_driver_active(libusb_device_handle *dev,
1071         int interface)
1072 {
1073         usbi_dbg("interface %d", interface);
1074         if (usbi_backend->kernel_driver_active)
1075                 return usbi_backend->kernel_driver_active(dev, interface);
1076         else
1077                 return LIBUSB_ERROR_NOT_SUPPORTED;
1078 }
1079
1080 /** \ingroup dev
1081  * Detach a kernel driver from an interface. If successful, you will then be
1082  * able to claim the interface and perform I/O.
1083  *
1084  * \param dev a device handle
1085  * \param interface the interface to detach the driver from
1086  * \returns 0 on success
1087  * \returns LIBUSB_ERROR_NOT_FOUND if no kernel driver was active
1088  * \returns LIBUSB_ERROR_INVALID_PARAM if the interface does not exist
1089  * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected
1090  * \returns another LIBUSB_ERROR code on other failure
1091  * \see libusb_kernel_driver_active()
1092  */
1093 API_EXPORTED int libusb_detach_kernel_driver(libusb_device_handle *dev,
1094         int interface)
1095 {
1096         usbi_dbg("interface %d", interface);
1097         if (usbi_backend->detach_kernel_driver)
1098                 return usbi_backend->detach_kernel_driver(dev, interface);
1099         else
1100                 return LIBUSB_ERROR_NOT_SUPPORTED;
1101 }
1102
1103 /** \ingroup lib
1104  * Set message verbosity.
1105  *  - Level 0: no messages ever printed by the library (default)
1106  *  - Level 1: error messages are printed to stderr
1107  *  - Level 2: warning and error messages are printed to stderr
1108  *  - Level 3: informational messages are printed to stdout, warning and error
1109  *    messages are printed to stderr
1110  *
1111  * The default level is 0, which means no messages are ever printed. If you
1112  * choose to increase the message verbosity level, ensure that your
1113  * application does not close the stdout/stderr file descriptors.
1114  *
1115  * You are advised to set level 3. libusb is conservative with it's message
1116  * logging and most of the time, will only log messages that explain error
1117  * conditions and other oddities. This will help you debug your software.
1118  *
1119  * If the LIBUSB_DEBUG environment variable was set when libusb was
1120  * initialized, this function does nothing: the message verbosity is fixed
1121  * to the value in the environment variable.
1122  *
1123  * If libusb was compiled without any message logging, this function does
1124  * nothing: you'll never get any messages.
1125  *
1126  * If libusb was compiled with verbose debug message logging, this function
1127  * does nothing: you'll always get messages from all levels.
1128  *
1129  * \param level debug level to set
1130  */
1131 API_EXPORTED void libusb_set_debug(int level)
1132 {
1133         if (!debug_fixed)
1134                 usbi_debug = level;
1135 }
1136
1137 /** \ingroup lib
1138  * Initialize libusb. This function must be called before calling any other
1139  * libusb function.
1140  * \returns 0 on success, or a LIBUSB_ERROR code on failure
1141  */
1142 API_EXPORTED int libusb_init(void)
1143 {
1144         char *dbg = getenv("LIBUSB_DEBUG");
1145         if (dbg) {
1146                 usbi_debug = atoi(dbg);
1147                 if (usbi_debug)
1148                         debug_fixed = 1;
1149         }
1150
1151         usbi_dbg("");
1152         if (usbi_backend->init) {
1153                 int r = usbi_backend->init();
1154                 if (r)
1155                         return r;
1156         }
1157
1158         list_init(&usb_devs);
1159         list_init(&usbi_open_devs);
1160         usbi_io_init();
1161         return 0;
1162 }
1163
1164 /** \ingroup lib
1165  * Deinitialize libusb. Should be called after closing all open devices and
1166  * before your application terminates.
1167  */
1168 API_EXPORTED void libusb_exit(void)
1169 {
1170         usbi_dbg("");
1171
1172         pthread_mutex_lock(&usbi_open_devs_lock);
1173         if (!list_empty(&usbi_open_devs)) {
1174                 struct libusb_device_handle *devh;
1175                 struct libusb_device_handle *tmp;
1176
1177                 usbi_dbg("naughty app left some devices open!");
1178                 list_for_each_entry_safe(devh, tmp, &usbi_open_devs, list) {
1179                         list_del(&devh->list);
1180                         do_close(devh);
1181                         free(devh);
1182                 }
1183         }
1184         pthread_mutex_unlock(&usbi_open_devs_lock);
1185
1186         if (usbi_backend->exit)
1187                 usbi_backend->exit();
1188 }
1189
1190 void usbi_log(enum usbi_log_level level, const char *function,
1191         const char *format, ...)
1192 {
1193         va_list args;
1194         FILE *stream = stdout;
1195         const char *prefix;
1196
1197 #ifndef ENABLE_DEBUG_LOGGING
1198         if (!usbi_debug)
1199                 return;
1200         if (level == LOG_LEVEL_WARNING && usbi_debug < 2)
1201                 return;
1202         if (level == LOG_LEVEL_INFO && usbi_debug < 3)
1203                 return;
1204 #endif
1205
1206         switch (level) {
1207         case LOG_LEVEL_INFO:
1208                 prefix = "info";
1209                 break;
1210         case LOG_LEVEL_WARNING:
1211                 stream = stderr;
1212                 prefix = "warning";
1213                 break;
1214         case LOG_LEVEL_ERROR:
1215                 stream = stderr;
1216                 prefix = "error";
1217                 break;
1218         case LOG_LEVEL_DEBUG:
1219                 stream = stderr;
1220                 prefix = "debug";
1221                 break;
1222         default:
1223                 stream = stderr;
1224                 prefix = "unknown";
1225                 break;
1226         }
1227
1228         fprintf(stream, "libusb:%s [%s] ", prefix, function);
1229
1230         va_start (args, format);
1231         vfprintf(stream, format, args);
1232         va_end (args);
1233
1234         fprintf(stream, "\n");
1235 }
1236