diff options
| -rw-r--r-- | host/lib/usrp/b100/b100_impl.cpp | 42 | ||||
| -rw-r--r-- | host/lib/usrp/usrp1/usrp1_impl.cpp | 42 | 
2 files changed, 50 insertions, 34 deletions
| diff --git a/host/lib/usrp/b100/b100_impl.cpp b/host/lib/usrp/b100/b100_impl.cpp index b7ab8c28a..83f54046a 100644 --- a/host/lib/usrp/b100/b100_impl.cpp +++ b/host/lib/usrp/b100/b100_impl.cpp @@ -44,6 +44,7 @@ const boost::uint16_t B100_VENDOR_ID  = 0x2500;  const boost::uint16_t B100_PRODUCT_ID = 0x0002;  const boost::uint16_t FX2_VENDOR_ID    = 0x04b4;  const boost::uint16_t FX2_PRODUCT_ID   = 0x8613; +static const boost::posix_time::milliseconds REENUMERATION_TIMEOUT_MS(3000);  /***********************************************************************   * Discovery @@ -102,23 +103,30 @@ static device_addrs_t b100_find(const device_addr_t &hint)      vid = B100_VENDOR_ID;      pid = B100_PRODUCT_ID; -    BOOST_FOREACH(usb_device_handle::sptr handle, usb_device_handle::get_device_list(vid, pid)) { -        usb_control::sptr control; -        try{control = usb_control::make(handle, 0);} -        catch(const uhd::exception &){continue;} //ignore claimed - -        fx2_ctrl::sptr fx2_ctrl = fx2_ctrl::make(control); -        const mboard_eeprom_t mb_eeprom = mboard_eeprom_t(*fx2_ctrl, mboard_eeprom_t::MAP_B100); -        device_addr_t new_addr; -        new_addr["type"] = "b100"; -        new_addr["name"] = mb_eeprom["name"]; -        new_addr["serial"] = handle->get_serial(); -        //this is a found b100 when the hint serial and name match or blank -        if ( -            (not hint.has_key("name")   or hint["name"]   == new_addr["name"]) and -            (not hint.has_key("serial") or hint["serial"] == new_addr["serial"]) -        ){ -            b100_addrs.push_back(new_addr); +    const boost::system_time timeout_time = boost::get_system_time() + REENUMERATION_TIMEOUT_MS; + +    //search for the device until found or timeout +    while (boost::get_system_time() < timeout_time and b100_addrs.empty()) +    { +        BOOST_FOREACH(usb_device_handle::sptr handle, usb_device_handle::get_device_list(vid, pid)) +        { +            usb_control::sptr control; +            try{control = usb_control::make(handle, 0);} +            catch(const uhd::exception &){continue;} //ignore claimed + +            fx2_ctrl::sptr fx2_ctrl = fx2_ctrl::make(control); +            const mboard_eeprom_t mb_eeprom = mboard_eeprom_t(*fx2_ctrl, mboard_eeprom_t::MAP_B100); +            device_addr_t new_addr; +            new_addr["type"] = "b100"; +            new_addr["name"] = mb_eeprom["name"]; +            new_addr["serial"] = handle->get_serial(); +            //this is a found b100 when the hint serial and name match or blank +            if ( +                (not hint.has_key("name")   or hint["name"]   == new_addr["name"]) and +                (not hint.has_key("serial") or hint["serial"] == new_addr["serial"]) +            ){ +                b100_addrs.push_back(new_addr); +            }          }      } diff --git a/host/lib/usrp/usrp1/usrp1_impl.cpp b/host/lib/usrp/usrp1/usrp1_impl.cpp index 85ead4eb4..e40dd001d 100644 --- a/host/lib/usrp/usrp1/usrp1_impl.cpp +++ b/host/lib/usrp/usrp1/usrp1_impl.cpp @@ -44,6 +44,7 @@ const boost::uint16_t USRP1_VENDOR_ID  = 0xfffe;  const boost::uint16_t USRP1_PRODUCT_ID = 0x0002;  const boost::uint16_t FX2_VENDOR_ID    = 0x04b4;  const boost::uint16_t FX2_PRODUCT_ID   = 0x8613; +static const boost::posix_time::milliseconds REENUMERATION_TIMEOUT_MS(3000);  const std::vector<usrp1_impl::dboard_slot_t> usrp1_impl::_dboard_slots = boost::assign::list_of      (usrp1_impl::DBOARD_SLOT_A)(usrp1_impl::DBOARD_SLOT_B) @@ -106,23 +107,30 @@ static device_addrs_t usrp1_find(const device_addr_t &hint)      vid = USRP1_VENDOR_ID;      pid = USRP1_PRODUCT_ID; -    BOOST_FOREACH(usb_device_handle::sptr handle, usb_device_handle::get_device_list(vid, pid)) { -        usb_control::sptr control; -        try{control = usb_control::make(handle, 0);} -        catch(const uhd::exception &){continue;} //ignore claimed - -        fx2_ctrl::sptr fx2_ctrl = fx2_ctrl::make(control); -        const mboard_eeprom_t mb_eeprom(*fx2_ctrl, mboard_eeprom_t::MAP_B000); -        device_addr_t new_addr; -        new_addr["type"] = "usrp1"; -        new_addr["name"] = mb_eeprom["name"]; -        new_addr["serial"] = handle->get_serial(); -        //this is a found usrp1 when the hint serial and name match or blank -        if ( -            (not hint.has_key("name")   or hint["name"]   == new_addr["name"]) and -            (not hint.has_key("serial") or hint["serial"] == new_addr["serial"]) -        ){ -            usrp1_addrs.push_back(new_addr); +    const boost::system_time timeout_time = boost::get_system_time() + REENUMERATION_TIMEOUT_MS; + +    //search for the device until found or timeout +    while (boost::get_system_time() < timeout_time and usrp1_addrs.empty()) +    { +        BOOST_FOREACH(usb_device_handle::sptr handle, usb_device_handle::get_device_list(vid, pid)) +        { +            usb_control::sptr control; +            try{control = usb_control::make(handle, 0);} +            catch(const uhd::exception &){continue;} //ignore claimed + +            fx2_ctrl::sptr fx2_ctrl = fx2_ctrl::make(control); +            const mboard_eeprom_t mb_eeprom(*fx2_ctrl, mboard_eeprom_t::MAP_B000); +            device_addr_t new_addr; +            new_addr["type"] = "usrp1"; +            new_addr["name"] = mb_eeprom["name"]; +            new_addr["serial"] = handle->get_serial(); +            //this is a found usrp1 when the hint serial and name match or blank +            if ( +                (not hint.has_key("name")   or hint["name"]   == new_addr["name"]) and +                (not hint.has_key("serial") or hint["serial"] == new_addr["serial"]) +            ){ +                usrp1_addrs.push_back(new_addr); +            }          }      } | 
