diff options
Diffstat (limited to 'host/lib')
| -rw-r--r-- | host/lib/transport/libusb1_base.cpp | 17 | ||||
| -rw-r--r-- | host/lib/transport/libusb1_control.cpp | 1 | ||||
| -rw-r--r-- | host/lib/transport/libusb1_device_handle.cpp | 9 | 
3 files changed, 13 insertions, 14 deletions
| diff --git a/host/lib/transport/libusb1_base.cpp b/host/lib/transport/libusb1_base.cpp index 1f816c6e2..cd3e4adcf 100644 --- a/host/lib/transport/libusb1_base.cpp +++ b/host/lib/transport/libusb1_base.cpp @@ -30,9 +30,7 @@ using namespace uhd::transport;   **********************************************************/  void libusb::init(libusb_context **ctx, int debug_level)  { -    if (libusb_init(ctx) < 0) -        std::cerr << "error: libusb_init" << std::endl; - +    UHD_ASSERT_THROW(libusb_init(ctx) == 0);      libusb_set_debug(*ctx, debug_level);  } @@ -48,14 +46,13 @@ libusb_device_handle *libusb::open_device(libusb_context *ctx,          libusb_device *dev = libusb_dev_list[i];          if (compare_device(dev, handle)) { -            libusb_open(dev, &dev_handle); -            libusb_unref_device(dev); -            break; +            if (libusb_open(dev, &dev_handle) == 0) break;          } -             -        libusb_unref_device(dev);      } +    libusb_free_device_list(libusb_dev_list, true); +    if(dev_handle == NULL) +        throw std::runtime_error("USB: cannot open device handle");      return dev_handle;  } @@ -70,12 +67,12 @@ bool libusb::compare_device(libusb_device *dev,      boost::uint16_t device_addr = handle->get_device_addr();      libusb_device_descriptor libusb_desc; -    if (libusb_get_device_descriptor(dev, &libusb_desc) < 0) +    if (libusb_get_device_descriptor(dev, &libusb_desc) != 0)          return false;      if (vendor_id != libusb_desc.idVendor)          return false;      if (product_id != libusb_desc.idProduct) -        return false;  +        return false;      if (serial != get_serial(dev))          return false;      if (device_addr != libusb_get_device_address(dev)) diff --git a/host/lib/transport/libusb1_control.cpp b/host/lib/transport/libusb1_control.cpp index 3531128b2..be9b51111 100644 --- a/host/lib/transport/libusb1_control.cpp +++ b/host/lib/transport/libusb1_control.cpp @@ -46,6 +46,7 @@ private:  libusb_control_impl::libusb_control_impl(usb_device_handle::sptr handle)  { +    _ctx = NULL;      libusb::init(&_ctx, libusb_debug_level);      // Find and open the libusb_device corresponding to the diff --git a/host/lib/transport/libusb1_device_handle.cpp b/host/lib/transport/libusb1_device_handle.cpp index 7efddd410..6bef37ed2 100644 --- a/host/lib/transport/libusb1_device_handle.cpp +++ b/host/lib/transport/libusb1_device_handle.cpp @@ -77,7 +77,7 @@ usb_device_handle::sptr make_usb_device_handle(libusb_device *dev)      libusb_device_descriptor desc;      if (libusb_get_device_descriptor(dev, &desc) < 0) { -        UHD_ASSERT_THROW("USB: failed to get device descriptor"); +        throw std::runtime_error("USB: failed to get device descriptor");      }      std::string     serial      = libusb::get_serial(dev); @@ -104,14 +104,15 @@ std::vector<usb_device_handle::sptr> usb_device_handle::get_device_list(boost::u      size_t dev_size = libusb_get_device_list(ctx, &libusb_device_list);      for (size_t i = 0; i < dev_size; i++) {          libusb_device *dev = libusb_device_list[i]; -        if(libusb_get_device_descriptor(dev, &desc) < 0) { -          UHD_ASSERT_THROW("USB: failed to get device descriptor"); +        if(libusb_get_device_descriptor(dev, &desc) != 0) { +            continue; //just try the next device, do not throw          }          if(desc.idVendor == vid && desc.idProduct == pid) { -          device_handle_list.push_back(make_usb_device_handle(dev)); +            device_handle_list.push_back(make_usb_device_handle(dev));          }      } +    libusb_free_device_list(libusb_device_list, true);      libusb_exit(ctx);      return device_handle_list;   } | 
