From 2228c5c95c2c03bf4b453a14d38f43514603337b Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Tue, 27 Sep 2016 14:44:18 -0700 Subject: Legacy: Improve awareness of tick rates in a streamer Prevents incorrect errors about conflicting tickrates in a streamer --- host/include/uhd/rfnoc/node_ctrl_base.hpp | 28 +++++++++++++++++++++++----- host/include/uhd/rfnoc/node_ctrl_base.ipp | 7 ++++++- host/include/uhd/rfnoc/sink_node_ctrl.hpp | 9 --------- host/include/uhd/rfnoc/source_node_ctrl.hpp | 9 --------- host/lib/rfnoc/tick_node_ctrl.cpp | 4 ++-- 5 files changed, 31 insertions(+), 26 deletions(-) (limited to 'host') diff --git a/host/include/uhd/rfnoc/node_ctrl_base.hpp b/host/include/uhd/rfnoc/node_ctrl_base.hpp index 071de803c..bf799d2c2 100644 --- a/host/include/uhd/rfnoc/node_ctrl_base.hpp +++ b/host/include/uhd/rfnoc/node_ctrl_base.hpp @@ -119,17 +119,17 @@ public: * Search only goes downstream. */ template - UHD_INLINE std::vector< boost::shared_ptr > find_downstream_node() + UHD_INLINE std::vector< boost::shared_ptr > find_downstream_node(bool active_only = false) { - return _find_child_node(); + return _find_child_node(active_only); } /*! Same as find_downstream_node(), but only search upstream. */ template - UHD_INLINE std::vector< boost::shared_ptr > find_upstream_node() + UHD_INLINE std::vector< boost::shared_ptr > find_upstream_node(bool active_only = false) { - return _find_child_node(); + return _find_child_node(active_only); } /*! Checks if downstream nodes share a common, unique property. @@ -186,6 +186,24 @@ protected: //! List of downstream nodes node_map_t _downstream_nodes; + /*! For every output port, store rx streamer activity. + * + * If _rx_streamer_active[0] == true, this means that an active rx + * streamer is operating on port 0. If it is false, or if the entry + * does not exist, there is no streamer. + * Values are toggled by set_rx_streamer(). + */ + std::map _rx_streamer_active; + + /*! For every input port, store tx streamer activity. + * + * If _tx_streamer_active[0] == true, this means that an active tx + * streamer is operating on port 0. If it is false, or if the entry + * does not exist, there is no streamer. + * Values are toggled by set_tx_streamer(). + */ + std::map _tx_streamer_active; + /*********************************************************************** * Connections **********************************************************************/ @@ -221,7 +239,7 @@ private: * \param downstream Set to true if search goes downstream, false for upstream. */ template - std::vector< boost::shared_ptr > _find_child_node(); + std::vector< boost::shared_ptr > _find_child_node(bool active_only = false); /*! Implements the search algorithm for find_downstream_unique_property() and * find_upstream_unique_property(). diff --git a/host/include/uhd/rfnoc/node_ctrl_base.ipp b/host/include/uhd/rfnoc/node_ctrl_base.ipp index 136354cd2..4ab25c597 100644 --- a/host/include/uhd/rfnoc/node_ctrl_base.ipp +++ b/host/include/uhd/rfnoc/node_ctrl_base.ipp @@ -29,7 +29,7 @@ namespace uhd { namespace rfnoc { template - std::vector< boost::shared_ptr > node_ctrl_base::_find_child_node() + std::vector< boost::shared_ptr > node_ctrl_base::_find_child_node(bool active_only) { typedef boost::shared_ptr T_sptr; static const size_t MAX_ITER = 20; @@ -57,6 +57,11 @@ namespace uhd { it != all_next_nodes.end(); ++it ) { + size_t our_port = it->first; + if (active_only + and not (downstream ? _tx_streamer_active[our_port] : _tx_streamer_active[our_port] )) { + continue; + } sptr one_next_node = it->second.lock(); if (not one_next_node or explored.count(one_next_node)) { continue; diff --git a/host/include/uhd/rfnoc/sink_node_ctrl.hpp b/host/include/uhd/rfnoc/sink_node_ctrl.hpp index 5142a269e..90d617bb7 100644 --- a/host/include/uhd/rfnoc/sink_node_ctrl.hpp +++ b/host/include/uhd/rfnoc/sink_node_ctrl.hpp @@ -75,15 +75,6 @@ public: protected: - /*! For every input port, store tx streamer activity. - * - * If _tx_streamer_active[0] == true, this means that an active tx - * streamer is operating on port 0. If it is false, or if the entry - * does not exist, there is no streamer. - * Values are toggled by set_tx_streamer(). - */ - std::map _tx_streamer_active; - /*! Ask for a port number to connect an upstream block to. * * Typically, this will be overridden for custom behaviour. diff --git a/host/include/uhd/rfnoc/source_node_ctrl.hpp b/host/include/uhd/rfnoc/source_node_ctrl.hpp index a351f6c8e..cacbcbb47 100644 --- a/host/include/uhd/rfnoc/source_node_ctrl.hpp +++ b/host/include/uhd/rfnoc/source_node_ctrl.hpp @@ -83,15 +83,6 @@ public: protected: - /*! For every output port, store rx streamer activity. - * - * If _rx_streamer_active[0] == true, this means that an active rx - * streamer is operating on port 0. If it is false, or if the entry - * does not exist, there is no streamer. - * Values are toggled by set_rx_streamer(). - */ - std::map _rx_streamer_active; - /*! Ask for a port number to connect a downstream block to. * * See sink_node_ctrl::_request_input_port(). This is the same diff --git a/host/lib/rfnoc/tick_node_ctrl.cpp b/host/lib/rfnoc/tick_node_ctrl.cpp index fa5c7b6a1..5548194ae 100644 --- a/host/lib/rfnoc/tick_node_ctrl.cpp +++ b/host/lib/rfnoc/tick_node_ctrl.cpp @@ -37,9 +37,9 @@ double tick_node_ctrl::get_tick_rate( std::set< node_ctrl_base::sptr > explored_nodes(_explored_nodes); explored_nodes.insert(shared_from_this()); // Here, we need all up- and downstream nodes - std::vector< sptr > neighbouring_tick_nodes = find_downstream_node(); + std::vector< sptr > neighbouring_tick_nodes = find_downstream_node(true); { - std::vector< sptr > upstream_neighbouring_tick_nodes = find_upstream_node(); + std::vector< sptr > upstream_neighbouring_tick_nodes = find_upstream_node(true); neighbouring_tick_nodes.insert( neighbouring_tick_nodes.end(), upstream_neighbouring_tick_nodes.begin(), -- cgit v1.2.3 From d96950503bec5feef0704fe476d0ebe4c4787c3d Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Thu, 29 Sep 2016 11:59:20 -0700 Subject: Fix warning in e300_remote_codec_ctrl.cpp for gcc. The bigger question is why uhd forces the e300 code to have an implementation of an empty function. But, suppress the warning and let people fight about design later. Signed-off-by: Philip Balister --- host/lib/usrp/e300/e300_remote_codec_ctrl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'host') diff --git a/host/lib/usrp/e300/e300_remote_codec_ctrl.cpp b/host/lib/usrp/e300/e300_remote_codec_ctrl.cpp index cb2583b1b..6ec39131d 100644 --- a/host/lib/usrp/e300/e300_remote_codec_ctrl.cpp +++ b/host/lib/usrp/e300/e300_remote_codec_ctrl.cpp @@ -36,8 +36,8 @@ public: { } - void set_timed_spi(uhd::spi_iface::sptr spi_iface, boost::uint32_t slave_num) {}; - void set_safe_spi(uhd::spi_iface::sptr spi_iface, boost::uint32_t slave_num) {}; + void set_timed_spi(uhd::spi_iface::sptr, boost::uint32_t ) {}; + void set_safe_spi(uhd::spi_iface::sptr, boost::uint32_t ) {}; double set_gain(const std::string &which, const double value) { -- cgit v1.2.3 From 3660cc42cc98e1e1055340d06281b00fc8a78ecd Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Tue, 18 Oct 2016 10:20:10 -0700 Subject: Preparing branch for 3.10.1.0 release - Updated CHANGELOG - Updated fpga-src submodule pointer - Updated images package - Updated version string --- CHANGELOG | 26 ++++++++++++++++++++++++++ fpga-src | 2 +- host/CMakeLists.txt | 4 ++-- host/cmake/Modules/UHDVersion.cmake | 2 +- 4 files changed, 30 insertions(+), 4 deletions(-) (limited to 'host') diff --git a/CHANGELOG b/CHANGELOG index a791ce365..1e1469f3f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,32 @@ Change Log for Releases ============================== +## 003.010.001.000 + +- Fixed multiple compiler warnings +- Multiple documentation fixes +- X300: RX strobe lines are always in sync on device initialization. DB EEPROM + now properly written. ignore-cal-file no longer ignored. Fixed case where too + large recv_frame_size settings could break things. Reduced ZPU clock speed + (helps FPGA timing). Added area constraints for AXI interconnect. Improved + halfband scaling in rx_frontend. +- B2xx: Clear sequence numbers in idle state. +- RFNoC: Nodes disconnect on destruction. Fixed setting of correct bits on + sr_error_policy. DDC does no longer clear timed commands on EOB. DUC fixed + timed CORDIC tuning. Enable Noc-Shell response FIFOs (fixes simultaneous + commands on multiple channels). +- UBX: Changed default performance parameters +- TwinRX: LEDs properly light up depending on channels. Fixed issue of multiple + (redundant) writes. +- XCVR: Query dboard clock instead of DAC clock. Helps in X3x0s. +- GPS: Fixed message for case when no GPS is present. Fixed multiple GPS-related + issues. +- Converters: Fixed floating point rounding error in tests. +- Utils: uhd_usrp_probe can now query vectors +- Fixed issue that prevented soft_regs working on 32-bit systems +- Tools: Merged dissectors into common directory. +- CMake: -Og is the default now for gcc-based Debug builds. + ## 003.010.000.000 - Changed version string to quadruplets (Major.API.ABI.Patch) - Minimum dependencies bumped for gcc, Boost, CMake, clang and Python. diff --git a/fpga-src b/fpga-src index 3cf54867b..93808e8d5 160000 --- a/fpga-src +++ b/fpga-src @@ -1 +1 @@ -Subproject commit 3cf54867b7acb73d0fd885f3ede13739cbc231a5 +Subproject commit 93808e8d5b182c0eb00aabd4ca1030cf46777ac5 diff --git a/host/CMakeLists.txt b/host/CMakeLists.txt index 0c1c44844..1d3a6f5fc 100644 --- a/host/CMakeLists.txt +++ b/host/CMakeLists.txt @@ -338,8 +338,8 @@ UHD_INSTALL(FILES #{{{IMG_SECTION # This section is written automatically by /images/create_imgs_package.py # Any manual changes in here will be overwritten. -SET(UHD_IMAGES_MD5SUM "326cad67a75e60f365c3249f9fb3626a") -SET(UHD_IMAGES_DOWNLOAD_SRC "uhd-images_003.010.000.000-84-g006c321c.zip") +SET(UHD_IMAGES_MD5SUM "586c6f48f65ecfaeec3403a8b2780d72") +SET(UHD_IMAGES_DOWNLOAD_SRC "uhd-images_003.010.001.000-rc1.zip") #}}} ######################################################################## diff --git a/host/cmake/Modules/UHDVersion.cmake b/host/cmake/Modules/UHDVersion.cmake index 5b1c314f0..26dbfbb06 100644 --- a/host/cmake/Modules/UHDVersion.cmake +++ b/host/cmake/Modules/UHDVersion.cmake @@ -29,7 +29,7 @@ FIND_PACKAGE(Git QUIET) ######################################################################## SET(UHD_VERSION_MAJOR 003) SET(UHD_VERSION_API 010) -SET(UHD_VERSION_ABI 000) +SET(UHD_VERSION_ABI 001) SET(UHD_VERSION_PATCH 000) SET(UHD_VERSION_DEVEL FALSE) -- cgit v1.2.3 From ad5b10677c91494f87c363e9096b7a2e61e414f6 Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Tue, 18 Oct 2016 16:26:11 -0700 Subject: b200: Make sure no GPS settings are applied when no gpsdo present. This changes the exception message thrown when gpsdo is selected as a clock source, but does not change the exception. Note that before, during its first run, the B2x0 would happily accept gpsdo as a clock source even when none was present. --- host/lib/usrp/b200/b200_impl.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'host') diff --git a/host/lib/usrp/b200/b200_impl.cpp b/host/lib/usrp/b200/b200_impl.cpp index 33f0850eb..9bd2799c2 100644 --- a/host/lib/usrp/b200/b200_impl.cpp +++ b/host/lib/usrp/b200/b200_impl.cpp @@ -1041,8 +1041,11 @@ void b200_impl::update_clock_source(const std::string &source) } _adf4001_iface->set_lock_to_ext_ref(true); } - else if (_gps and source == "gpsdo") + else if (source == "gpsdo") { + if (not _gps or not _gps->gps_detected()) { + throw uhd::key_error("update_clock_source: gpsdo selected, but no gpsdo detected!"); + } if (_gpio_state.ref_sel != 1) { _gpio_state.ref_sel = 1; -- cgit v1.2.3