aboutsummaryrefslogtreecommitdiffstats
path: root/host
diff options
context:
space:
mode:
Diffstat (limited to 'host')
-rw-r--r--host/include/uhd/rfnoc/node_ctrl_base.hpp30
-rw-r--r--host/include/uhd/rfnoc/node_ctrl_base.ipp4
-rw-r--r--host/lib/rfnoc/block_ctrl_base.cpp2
-rw-r--r--host/lib/rfnoc/source_block_ctrl_base.cpp2
4 files changed, 34 insertions, 4 deletions
diff --git a/host/include/uhd/rfnoc/node_ctrl_base.hpp b/host/include/uhd/rfnoc/node_ctrl_base.hpp
index 0fed28bed..db552ff4c 100644
--- a/host/include/uhd/rfnoc/node_ctrl_base.hpp
+++ b/host/include/uhd/rfnoc/node_ctrl_base.hpp
@@ -166,11 +166,31 @@ public:
get_property, null_value, exclude_nodes);
}
+ UHD_INLINE size_t get_num_input_ports(void)
+ {
+ return _num_input_ports;
+ }
+
+ UHD_INLINE void set_num_input_ports(size_t num_ports)
+ {
+ _num_input_ports = num_ports;
+ }
+
+ UHD_INLINE size_t get_num_output_ports(void)
+ {
+ return _num_output_ports;
+ }
+
+ UHD_INLINE void set_num_output_ports(size_t num_ports)
+ {
+ _num_output_ports = num_ports;
+ }
+
protected:
/***********************************************************************
* Structors
**********************************************************************/
- node_ctrl_base(void) {}
+ node_ctrl_base(void) : _num_input_ports(0), _num_output_ports(0) {}
virtual ~node_ctrl_base()
{
disconnect();
@@ -263,6 +283,14 @@ private:
*/
std::map<size_t, size_t> _downstream_ports;
+ /*! Stores the number of input ports.
+ */
+ size_t _num_input_ports;
+
+ /*! Stores the number of output ports.
+ */
+ size_t _num_output_ports;
+
}; /* class node_ctrl_base */
}} /* namespace uhd::rfnoc */
diff --git a/host/include/uhd/rfnoc/node_ctrl_base.ipp b/host/include/uhd/rfnoc/node_ctrl_base.ipp
index cb56e2d90..43a3cb162 100644
--- a/host/include/uhd/rfnoc/node_ctrl_base.ipp
+++ b/host/include/uhd/rfnoc/node_ctrl_base.ipp
@@ -85,8 +85,8 @@ namespace uhd {
// map each input port directly to the same output
// port. This limits the graph traversal to prevent
// finding nodes that are not part of this chain.
- if (one_next_node->list_upstream_nodes().size() ==
- one_next_node->list_downstream_nodes().size())
+ if (one_next_node->get_num_input_ports() ==
+ one_next_node->get_num_output_ports())
{
next_port = (downstream ?
node->get_downstream_port(connected_port) :
diff --git a/host/lib/rfnoc/block_ctrl_base.cpp b/host/lib/rfnoc/block_ctrl_base.cpp
index ed9ab11d4..4137da9e3 100644
--- a/host/lib/rfnoc/block_ctrl_base.cpp
+++ b/host/lib/rfnoc/block_ctrl_base.cpp
@@ -125,6 +125,8 @@ block_ctrl_base::block_ctrl_base(const make_args_t& make_args)
/*** Init I/O port definitions ******************************************/
_init_port_defs("in", _block_def->get_input_ports());
_init_port_defs("out", _block_def->get_output_ports());
+ set_num_input_ports(_block_def->get_input_ports().size());
+ set_num_output_ports(_block_def->get_output_ports().size());
// FIXME this warning always fails until the input buffer code above is fixed
// if (_tree->list(_root_path / "ports/in").size() != n_valid_input_buffers) {
// UHD_LOGGER_WARNING(unique_id()) <<
diff --git a/host/lib/rfnoc/source_block_ctrl_base.cpp b/host/lib/rfnoc/source_block_ctrl_base.cpp
index 4097f3d7b..c3c6faf1f 100644
--- a/host/lib/rfnoc/source_block_ctrl_base.cpp
+++ b/host/lib/rfnoc/source_block_ctrl_base.cpp
@@ -34,7 +34,7 @@ void source_block_ctrl_base::issue_stream_cmd(
// if the number of upstream and downstream connections are the same.
// The stream command is limited to only that port to prevent issuing
// it on the wrong block and port.
- if (_upstream_nodes.size() == _downstream_nodes.size()
+ if (get_num_input_ports() == get_num_output_ports()
and upstream_node.first != chan) {
continue;
}