diff options
-rw-r--r-- | host/utils/b2xx_fx3_utils.cpp | 57 |
1 files changed, 30 insertions, 27 deletions
diff --git a/host/utils/b2xx_fx3_utils.cpp b/host/utils/b2xx_fx3_utils.cpp index 3bf4e1117..f958d1c9f 100644 --- a/host/utils/b2xx_fx3_utils.cpp +++ b/host/utils/b2xx_fx3_utils.cpp @@ -123,27 +123,38 @@ uhd::transport::usb_device_handle::sptr open_device(const boost::uint16_t vid, c std::vector<uhd::transport::usb_device_handle::sptr> handles; uhd::transport::usb_device_handle::sptr handle; - handles = uhd::transport::usb_device_handle::get_device_list(vid, pid); // try caller's VID/PID first - if (handles.size() == 0) - handles = uhd::transport::usb_device_handle::get_device_list(FX3_VID, FX3_DEFAULT_PID); // try default Cypress FX3 VID/PID next - if (handles.size() == 0) - handles = uhd::transport::usb_device_handle::get_device_list(FX3_VID, FX3_REENUM_PID); // try reenumerated Cypress FX3 VID/PID next - if (handles.size() == 0) - handles = uhd::transport::usb_device_handle::get_device_list(B200_VENDOR_ID, B200_PRODUCT_ID); // try default B200 VID/PID last + try { + handles = uhd::transport::usb_device_handle::get_device_list(vid, pid); // try caller's VID/PID first + if (handles.size() == 0) + handles = uhd::transport::usb_device_handle::get_device_list(FX3_VID, FX3_DEFAULT_PID); // try default Cypress FX3 VID/PID next + if (handles.size() == 0) + handles = uhd::transport::usb_device_handle::get_device_list(FX3_VID, FX3_REENUM_PID); // try reenumerated Cypress FX3 VID/PID next + if (handles.size() == 0) + handles = uhd::transport::usb_device_handle::get_device_list(B200_VENDOR_ID, B200_PRODUCT_ID); // try default B200 VID/PID last + + if (handles.size() > 0) + handle = handles[0]; - if (handles.size() > 0) - handle = handles[0]; - - if (!handle) - std::cerr << "Cannot open device" << std::endl; + if (!handle) + std::cerr << "Cannot open device" << std::endl; + } + catch(const std::exception &e) { + std::cerr << "Failed to communicate with the device!" << std::endl; + #ifdef UHD_PLATFORM_WIN32 + std::cerr << "The necessary drivers are not installed. Read the UHD Transport Application Notes for details." << std::endl; + #endif /* UHD_PLATFORM_WIN32 */ + handle.reset(); + } return handle; } b200_iface::sptr make_b200_iface(const uhd::transport::usb_device_handle::sptr &handle) { + b200_iface::sptr b200; + uhd::transport::usb_control::sptr usb_ctrl = uhd::transport::usb_control::make(handle, 0); - b200_iface::sptr b200 = b200_iface::make(usb_ctrl); + b200 = b200_iface::make(usb_ctrl); if (!b200) std::cerr << "Cannot create device interface" << std::endl; @@ -228,7 +239,7 @@ boost::int32_t main(boost::int32_t argc, char *argv[]) { // re-open device b200.reset(); handle.reset(); - usleep(2000000); // wait 2 seconds for FX3 to reset + boost::this_thread::sleep(boost::posix_time::seconds(2)); // wait 2 seconds for FX3 to reset handle = open_device(vid, pid); if (!handle) return -1; @@ -251,20 +262,12 @@ boost::int32_t main(boost::int32_t argc, char *argv[]) { // re-open device b200.reset(); handle.reset(); - try { - handle = open_device(vid, pid); - if (!handle) - return -1; - b200 = make_b200_iface(handle); - if (!b200) - return -1; - } catch(const std::exception &e) { - std::cerr << "Failed to communicate with the device!" << std::endl; - #ifdef UHD_PLATFORM_WIN32 - std::cerr << "The necessary drivers are not installed. Read the UHD Transport Application Notes for details." << std::endl; - #endif /* UHD_PLATFORM_WIN32 */ + handle = open_device(vid, pid); + if (!handle) + return -1; + b200 = make_b200_iface(handle); + if (!b200) return -1; - } } // Added for testing purposes - not exposed |