diff options
Diffstat (limited to 'host')
-rw-r--r-- | host/include/uhd/rfnoc/node_ctrl_base.hpp | 30 | ||||
-rw-r--r-- | host/include/uhd/rfnoc/node_ctrl_base.ipp | 4 | ||||
-rw-r--r-- | host/lib/rfnoc/block_ctrl_base.cpp | 2 | ||||
-rw-r--r-- | host/lib/rfnoc/source_block_ctrl_base.cpp | 2 |
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; } |