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 --------- 4 files changed, 29 insertions(+), 24 deletions(-) (limited to 'host/include') 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 -- cgit v1.2.3