Revision b6099569 host/lib/transport/libusb1_device_handle.cpp

b/host/lib/transport/libusb1_device_handle.cpp
88 88
        device_addr));
89 89
}
90 90

  
91
bool check_fsf_device(libusb_device *dev)
92
{
93
    libusb_device_descriptor desc;
94

  
95
    if (libusb_get_device_descriptor(dev, &desc) < 0) {
96
        UHD_ASSERT_THROW("USB: failed to get device descriptor");
97
    }
98

  
99
    return desc.idVendor == 0xfffe;
100
}
101

  
102 91
std::vector<usb_device_handle::sptr> usb_device_handle::get_device_list()
103 92
{
104 93
    libusb_context *ctx = NULL;
105
    libusb_device **list;
106
    std::vector<usb_device_handle::sptr> device_list;
94
    std::vector<libusb_device *> libusb_device_list;
95
    std::vector<usb_device_handle::sptr> device_handle_list;
107 96

  
108 97
    libusb::init(&ctx, libusb_debug_level);
109 98

  
110
    ssize_t cnt = libusb_get_device_list(ctx, &list);
111

  
112
    if (cnt < 0)
113
        throw std::runtime_error("USB: enumeration failed");
99
    libusb_device_list = libusb::get_fsf_device_list(ctx);
114 100

  
115
    ssize_t i = 0;
116
    for (i = 0; i < cnt; i++) {
117
        libusb_device *dev = list[i];
118
        if (check_fsf_device(dev)) 
119
            device_list.push_back(make_usb_device_handle(dev));
101
    for (size_t i = 0; i < libusb_device_list.size(); i++) {
102
        libusb_device *dev = libusb_device_list[i];
103
        device_handle_list.push_back(make_usb_device_handle(dev));
120 104
    }
121 105

  
122
    libusb_free_device_list(list, 0);
123 106
    libusb_exit(ctx);
124
    return device_list; 
107
    return device_handle_list; 
125 108
}

Also available in: Unified diff