aboutsummaryrefslogtreecommitdiffstats
path: root/host/include
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2016-09-27 14:44:18 -0700
committermbr0wn <martin.braun@ettus.com>2016-10-17 22:07:08 -0700
commit2228c5c95c2c03bf4b453a14d38f43514603337b (patch)
tree2dee011cf9c356a2f3a04537229005348c16a585 /host/include
parent9e73914791be936216ea11eea9bd38061ef5f323 (diff)
downloaduhd-2228c5c95c2c03bf4b453a14d38f43514603337b.tar.gz
uhd-2228c5c95c2c03bf4b453a14d38f43514603337b.tar.bz2
uhd-2228c5c95c2c03bf4b453a14d38f43514603337b.zip
Legacy: Improve awareness of tick rates in a streamer
Prevents incorrect errors about conflicting tickrates in a streamer
Diffstat (limited to 'host/include')
-rw-r--r--host/include/uhd/rfnoc/node_ctrl_base.hpp28
-rw-r--r--host/include/uhd/rfnoc/node_ctrl_base.ipp7
-rw-r--r--host/include/uhd/rfnoc/sink_node_ctrl.hpp9
-rw-r--r--host/include/uhd/rfnoc/source_node_ctrl.hpp9
4 files changed, 29 insertions, 24 deletions
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 <typename T>
- UHD_INLINE std::vector< boost::shared_ptr<T> > find_downstream_node()
+ UHD_INLINE std::vector< boost::shared_ptr<T> > find_downstream_node(bool active_only = false)
{
- return _find_child_node<T, true>();
+ return _find_child_node<T, true>(active_only);
}
/*! Same as find_downstream_node(), but only search upstream.
*/
template <typename T>
- UHD_INLINE std::vector< boost::shared_ptr<T> > find_upstream_node()
+ UHD_INLINE std::vector< boost::shared_ptr<T> > find_upstream_node(bool active_only = false)
{
- return _find_child_node<T, false>();
+ return _find_child_node<T, false>(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<size_t, bool> _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<size_t, bool> _tx_streamer_active;
+
/***********************************************************************
* Connections
**********************************************************************/
@@ -221,7 +239,7 @@ private:
* \param downstream Set to true if search goes downstream, false for upstream.
*/
template <typename T, bool downstream>
- std::vector< boost::shared_ptr<T> > _find_child_node();
+ std::vector< boost::shared_ptr<T> > _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 <typename T, bool downstream>
- std::vector< boost::shared_ptr<T> > node_ctrl_base::_find_child_node()
+ std::vector< boost::shared_ptr<T> > node_ctrl_base::_find_child_node(bool active_only)
{
typedef boost::shared_ptr<T> 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<size_t, bool> _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<size_t, bool> _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