diff options
Diffstat (limited to 'host/lib')
-rw-r--r-- | host/lib/rfnoc/legacy_compat.cpp | 24 | ||||
-rw-r--r-- | host/lib/usrp/gps_ctrl.cpp | 24 | ||||
-rw-r--r-- | host/lib/usrp/x300/x300_impl.cpp | 4 |
3 files changed, 36 insertions, 16 deletions
diff --git a/host/lib/rfnoc/legacy_compat.cpp b/host/lib/rfnoc/legacy_compat.cpp index a8b6d4f68..4060c62ae 100644 --- a/host/lib/rfnoc/legacy_compat.cpp +++ b/host/lib/rfnoc/legacy_compat.cpp @@ -458,17 +458,25 @@ private: // methods // If it's not provided, we provide our own spp value. const size_t args_spp = args.args.cast<size_t>("spp", 0); if (dir == uhd::RX_DIRECTION) { + size_t target_spp = _rx_spp; if (args.args.has_key("spp") and args_spp != _rx_spp) { + target_spp = args_spp; + // TODO: Update flow control on the blocks + } else { for (size_t mboard = 0; mboard < _num_mboards; mboard++) { for (size_t radio = 0; radio < _num_radios_per_board; radio++) { - get_block_ctrl<radio_ctrl>(mboard, RADIO_BLOCK_NAME, radio)->set_arg<int>("spp", args_spp); + const size_t this_spp = get_block_ctrl<radio_ctrl>(mboard, RADIO_BLOCK_NAME, radio)->get_arg<int>("spp"); + target_spp = std::min(this_spp, target_spp); } } - _rx_spp = args_spp; - // TODO: Update flow control on the blocks - } else { - args.args["spp"] = str(boost::format("%d") % _rx_spp); } + for (size_t mboard = 0; mboard < _num_mboards; mboard++) { + for (size_t radio = 0; radio < _num_radios_per_board; radio++) { + get_block_ctrl<radio_ctrl>(mboard, RADIO_BLOCK_NAME, radio)->set_arg<int>("spp", target_spp); + } + } + _rx_spp = target_spp; + args.args["spp"] = str(boost::format("%d") % _rx_spp); } else { if (args.args.has_key("spp") and args_spp != _tx_spp) { _tx_spp = args_spp; @@ -565,10 +573,10 @@ private: // methods const size_t this_spp = get_block_ctrl<radio_ctrl>(i, RADIO_BLOCK_NAME, k)->get_arg<int>("spp"); if (this_spp != _rx_spp) { - throw uhd::runtime_error(str( - boost::format("[legacy compat] Radios have differing spp values: %s has %d, others have %d") + UHD_LOG << str( + boost::format("[legacy compat] Radios have differing spp values: %s has %d, others have %d. UHD will use smaller spp value for all connections. Performance might be not optimal.") % radio_block_id.to_string() % this_spp % _rx_spp - )); + ); } } } diff --git a/host/lib/usrp/gps_ctrl.cpp b/host/lib/usrp/gps_ctrl.cpp index f4a42af34..447a13c33 100644 --- a/host/lib/usrp/gps_ctrl.cpp +++ b/host/lib/usrp/gps_ctrl.cpp @@ -203,13 +203,15 @@ public: //first we look for an internal GPSDO _flush(); //get whatever junk is in the rx buffer right now, and throw it away + _send("*IDN?\r\n"); //request identity from the GPSDO //then we loop until we either timeout, or until we get a response that indicates we're a JL device - const boost::system_time comm_timeout = boost::get_system_time() + milliseconds(GPS_COMM_TIMEOUT_MS); + //maximum response time was measured at ~320ms, so we set the timeout at 650ms + const boost::system_time comm_timeout = boost::get_system_time() + milliseconds(650); while(boost::get_system_time() < comm_timeout) { reply = _recv(); - //known devices are JL "FireFly" and "LC_XO" + //known devices are JL "FireFly", "GPSTCXO", and "LC_XO" if(reply.find("FireFly") != std::string::npos or reply.find("LC_XO") != std::string::npos or reply.find("GPSTCXO") != std::string::npos) { @@ -218,14 +220,22 @@ public: } else if(reply.substr(0, 3) == "$GP") { i_heard_some_nmea = true; //but keep looking } else if(not reply.empty()) { - i_heard_something_weird = true; //probably wrong baud rate + // wrong baud rate or firmware still initializing + i_heard_something_weird = true; + _send("*IDN?\r\n"); //re-send identity request + } else { + // _recv timed out + _send("*IDN?\r\n"); //re-send identity request } } - if((i_heard_some_nmea) && (_gps_type != GPS_TYPE_INTERNAL_GPSDO)) _gps_type = GPS_TYPE_GENERIC_NMEA; - - if((_gps_type == GPS_TYPE_NONE) && i_heard_something_weird) { - UHD_MSG(error) << "GPS invalid reply \"" << reply << "\", assuming none available" << std::endl; + if (_gps_type == GPS_TYPE_NONE) + { + if(i_heard_some_nmea) { + _gps_type = GPS_TYPE_GENERIC_NMEA; + } else if(i_heard_something_weird) { + UHD_MSG(error) << "GPS invalid reply \"" << reply << "\", assuming none available" << std::endl; + } } switch(_gps_type) { diff --git a/host/lib/usrp/x300/x300_impl.cpp b/host/lib/usrp/x300/x300_impl.cpp index aa54c2228..edf254130 100644 --- a/host/lib/usrp/x300/x300_impl.cpp +++ b/host/lib/usrp/x300/x300_impl.cpp @@ -1072,7 +1072,9 @@ x300_impl::~x300_impl(void) release(mb.zpu_ctrl); //If the process is killed, the entire registry will disappear so we //don't need to worry about unclean shutdowns here. - get_pcie_zpu_iface_registry().pop(mb.get_pri_eth().addr); + if (get_pcie_zpu_iface_registry().has_key(mb.get_pri_eth().addr)) { + get_pcie_zpu_iface_registry().pop(mb.get_pri_eth().addr); + } } } } |