From: Gerd von Egidy Date: Mon, 2 Jun 2008 10:57:20 +0000 (+0000) Subject: libftdi: (gerd) tolerate EBUSY when setting configuration (EBUSY will be returned... X-Git-Tag: v0.13~3 X-Git-Url: http://developer.intra2net.com/git/?a=commitdiff_plain;h=b57aedfd2cb169c10f9800ea13eba1da1bee88d7;p=libftdi libftdi: (gerd) tolerate EBUSY when setting configuration (EBUSY will be returned for the second interface if the first one is already open) compile with async mode --- diff --git a/libftdi.spec b/libftdi.spec index 52ba933..18a9b50 100644 --- a/libftdi.spec +++ b/libftdi.spec @@ -26,7 +26,7 @@ Header files and static libraries for libftdi %setup -q %build -./configure --prefix=%{prefix} +./configure --prefix=%{prefix} --with-async-mode make %install diff --git a/src/ftdi.c b/src/ftdi.c index 56fea0c..e269021 100644 --- a/src/ftdi.c +++ b/src/ftdi.c @@ -360,7 +360,13 @@ int ftdi_usb_open_dev(struct ftdi_context *ftdi, struct usb_device *dev) detach_errno = errno; #endif - if (usb_set_configuration(ftdi->usb_dev, dev->config[0].bConfigurationValue)) { + // set configuration (needed especially for windows) + // tolerate EBUSY: one device with one configuration, but two interfaces + // and libftdi sessions to both interfaces (e.g. FT2232) + if (dev->descriptor.bNumConfigurations > 0 && + usb_set_configuration(ftdi->usb_dev, dev->config[0].bConfigurationValue) && + errno != EBUSY) + { usb_close (ftdi->usb_dev); if (detach_errno == EPERM) { ftdi_error_return(-8, "inappropriate permissions on device!");