libftdi Archives

Subject: Re: Any reason to call usb_set_configuration()

From: Xiaofan Chen <xiaofanc@xxxxxxxxx>
To: libftdi@xxxxxxxxxxxxxxxxxxxxxxx
Cc: Thomas Jarosch <thomas.jarosch@xxxxxxxxxxxxx>, "Richard A. Smith" <richard@xxxxxxxxxx>
Date: Tue, 28 Jul 2009 07:55:04 +0800
On Tue, Jul 28, 2009 at 12:14 AM, Uwe
Bonnes<bon@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> wrote:
>    Xiaofan> If libftdi switches to libusb 1.0 (it should be trival to
>    Xiaofan> switch to the synchronous API of libusb 1.0), then you can use
>    Xiaofan> this API function: libusb_get_configuration. You check if the
>    Xiaofan> configuration is valid (typically 1), then you can skip
>    Xiaofan> libusb_set_configuration(). If it is zero, then you call
>    Xiaofan> libusb_set_configuration().
>    Xiaofan> http://libusb.sourceforge.net/api-1.0/group__dev.html
>
>    Xiaofan> There are other advantages to switch to libusb 1.0 since it
>    Xiaofan> supports asynchronous transfer. Currently it is only working
>    Xiaofan> under Linux and Mac OS X.
>
>    Xiaofan> For libusb 0.1, there is no direct API function to do this.
>    Xiaofan> But you can probably do similar things.
>
> There is one disadvantage:
>
> There is libusb-0.1 for Win32, but no libusb-1 yet.
>
> For example my xc3sprog uses libusb-0.1 for Win32.

I know that. But libftdi is already using platform specific code
like the Linux sysfs for async mode. It can always choose
to use libusb 1.0 for Linux and Mac OS X; and libusb 0.1
for Windows and BSDs.

By the way, libusb-win32 0.1 does support async mode
with the following APIs (not well documented).

http://libusb-win32.svn.sourceforge.net/viewvc/libusb-win32/trunk/libusb/src/usb.h?view=markup
  375   int usb_isochronous_setup_async(usb_dev_handle *dev, void **context,
  376                                   unsigned char ep, int pktsize);
  377   int usb_bulk_setup_async(usb_dev_handle *dev, void **context,
  378                            unsigned char ep);
  379   int usb_interrupt_setup_async(usb_dev_handle *dev, void **context,
  380                                 unsigned char ep);
  381
  382   int usb_submit_async(void *context, char *bytes, int size);
  383   int usb_reap_async(void *context, int timeout);
  384   int usb_reap_async_nocancel(void *context, int timeout);
  385   int usb_cancel_async(void *context);
  386   int usb_free_async(void **context);

-- 
Xiaofan http://mcuee.blogspot.com

--
libftdi - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to libftdi+unsubscribe@xxxxxxxxxxxxxxxxxxxxxxx

Current Thread