diff options
author | Daniel Drake <dsd@gentoo.org> | 2008-05-29 12:35:01 +0100 |
---|---|---|
committer | Daniel Drake <dsd@gentoo.org> | 2008-05-29 12:35:01 +0100 |
commit | 514bb8790cfe8b93ccfff82bc17081b1030acce0 (patch) | |
tree | 8a59c368cbca414f2dc46532593ee7be463d5934 /libusb/os/linux_usbfs.c | |
parent | d1292f8e7300051239a7ed2769d221dc7a6f9fca (diff) | |
download | libusb-514bb8790cfe8b93ccfff82bc17081b1030acce0.tar.gz |
Refine libusb_set_configuration() semantics
Applications will generally want to set a configuration before claiming
interfaces. The problem is that the interface may already be set, and
someone else may have claimed an interface (meaning that all calls to
set_configuration will fail, even if it's for the same configuration).
There are now 2 options:
1. Use the new libusb_get_configuration() to determine active
configuration before calling libusb_set_configuration()
2. Or just call libusb_set_configuration() as usual, which will do
nothing if that configuration is already active.
Diffstat (limited to 'libusb/os/linux_usbfs.c')
-rw-r--r-- | libusb/os/linux_usbfs.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/libusb/os/linux_usbfs.c b/libusb/os/linux_usbfs.c index 7dc6b6c..2e9e0e2 100644 --- a/libusb/os/linux_usbfs.c +++ b/libusb/os/linux_usbfs.c @@ -904,6 +904,20 @@ static void op_close(struct libusb_device_handle *dev_handle) close(fd); } +static int op_get_configuration(struct libusb_device_handle *handle, + int *config) +{ + int r; + if (sysfs_can_relate_devices != 1) + return LIBUSB_ERROR_NOT_SUPPORTED; + + r = sysfs_get_active_config(handle->dev, config); + if (*config == -1) + *config = 0; + + return 0; +} + static int op_set_configuration(struct libusb_device_handle *handle, int config) { struct linux_device_priv *priv = __device_priv(handle->dev); @@ -1827,6 +1841,7 @@ const struct usbi_os_backend linux_usbfs_backend = { .open = op_open, .close = op_close, + .get_configuration = op_get_configuration, .set_configuration = op_set_configuration, .claim_interface = op_claim_interface, .release_interface = op_release_interface, |