diff options
author | Thomas Tsou <ttsou@vt.edu> | 2010-08-27 13:27:32 -0700 |
---|---|---|
committer | Thomas Tsou <ttsou@vt.edu> | 2010-08-27 14:59:12 -0700 |
commit | b6099569e31705174920f44083f7f1bc22c445c7 (patch) | |
tree | 522db9a9a5a45a6644a194c774145401439ed5f6 /host/lib/transport/libusb1_device_handle.cpp | |
parent | c30cbf651ba5efc734faa96c1b12a99b15b6e41e (diff) | |
download | uhd-b6099569e31705174920f44083f7f1bc22c445c7.tar.gz uhd-b6099569e31705174920f44083f7f1bc22c445c7.tar.bz2 uhd-b6099569e31705174920f44083f7f1bc22c445c7.zip |
usrp1: Cleanup libusb device handling
This patch limits all libusb device enumeration operations to FSF
(Vendor ID = 0xfffe) devices, which removes a lot of unncessary
libusb output when debug mode is enabled. The reference counts
held by the libusb device list are also reduced, which prevents
holding references to unused devices.
Diffstat (limited to 'host/lib/transport/libusb1_device_handle.cpp')
-rw-r--r-- | host/lib/transport/libusb1_device_handle.cpp | 31 |
1 files changed, 7 insertions, 24 deletions
diff --git a/host/lib/transport/libusb1_device_handle.cpp b/host/lib/transport/libusb1_device_handle.cpp index 5289f668f..4885099eb 100644 --- a/host/lib/transport/libusb1_device_handle.cpp +++ b/host/lib/transport/libusb1_device_handle.cpp @@ -88,38 +88,21 @@ usb_device_handle::sptr make_usb_device_handle(libusb_device *dev) device_addr)); } -bool check_fsf_device(libusb_device *dev) -{ - libusb_device_descriptor desc; - - if (libusb_get_device_descriptor(dev, &desc) < 0) { - UHD_ASSERT_THROW("USB: failed to get device descriptor"); - } - - return desc.idVendor == 0xfffe; -} - std::vector<usb_device_handle::sptr> usb_device_handle::get_device_list() { libusb_context *ctx = NULL; - libusb_device **list; - std::vector<usb_device_handle::sptr> device_list; + std::vector<libusb_device *> libusb_device_list; + std::vector<usb_device_handle::sptr> device_handle_list; libusb::init(&ctx, libusb_debug_level); - ssize_t cnt = libusb_get_device_list(ctx, &list); - - if (cnt < 0) - throw std::runtime_error("USB: enumeration failed"); + libusb_device_list = libusb::get_fsf_device_list(ctx); - ssize_t i = 0; - for (i = 0; i < cnt; i++) { - libusb_device *dev = list[i]; - if (check_fsf_device(dev)) - device_list.push_back(make_usb_device_handle(dev)); + for (size_t i = 0; i < libusb_device_list.size(); i++) { + libusb_device *dev = libusb_device_list[i]; + device_handle_list.push_back(make_usb_device_handle(dev)); } - libusb_free_device_list(list, 0); libusb_exit(ctx); - return device_list; + return device_handle_list; } |