X-Git-Url: http://developer.intra2net.com/git/?p=libftdi;a=blobdiff_plain;f=ftdipp%2Fftdi.cpp;h=e5a8966991cb07dcc04d547df8912a8e2dd3caf4;hp=584a04a044b9237b92b72a81f06aa3b98ea958f9;hb=2f6b4bb6a67d7b3a0d4b0ba216637c8bdaac728f;hpb=a14193ac17be8cf781feeea182a5e56582d4e0a6 diff --git a/ftdipp/ftdi.cpp b/ftdipp/ftdi.cpp index 584a04a..e5a8966 100644 --- a/ftdipp/ftdi.cpp +++ b/ftdipp/ftdi.cpp @@ -81,37 +81,39 @@ int Context::open(int vendor, int product, const std::string& description, const { int ret = 0; + // Open device if (description.empty() && serial.empty()) ret = ftdi_usb_open(d->ftdi, vendor, product); else ret = ftdi_usb_open_desc(d->ftdi, vendor, product, description.c_str(), serial.c_str()); - d->dev = usb_device(d->ftdi->usb_dev); + if (ret < 0) + return ret; - if ((ret = ftdi_usb_open_dev(d->ftdi, d->dev)) >= 0) - { - d->open = true; - get_strings(); - } + // Get device strings (closes device) + get_strings(); + + // Reattach device + ret = ftdi_usb_open_dev(d->ftdi, d->dev); + d->open = (ret >= 0); return ret; } int Context::open(struct usb_device *dev) { - int ret = 0; - if (dev != 0) d->dev = dev; if (d->dev == 0) return -1; - if ((ret = ftdi_usb_open_dev(d->ftdi, d->dev)) >= 0) - { - d->open = true; - get_strings(); - } + // Get device strings (closes device) + get_strings(); + + // Reattach device + int ret = ftdi_usb_open_dev(d->ftdi, d->dev); + d->open = (ret >= 0); return ret; }