aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--host/include/uhd/rfnoc/noc_block_base.hpp13
-rw-r--r--host/lib/rfnoc/noc_block_base.cpp5
2 files changed, 17 insertions, 1 deletions
diff --git a/host/include/uhd/rfnoc/noc_block_base.hpp b/host/include/uhd/rfnoc/noc_block_base.hpp
index fb26f6089..e951ffc72 100644
--- a/host/include/uhd/rfnoc/noc_block_base.hpp
+++ b/host/include/uhd/rfnoc/noc_block_base.hpp
@@ -8,6 +8,7 @@
#define INCLUDED_LIBUHD_NOC_BLOCK_BASE_HPP
#include <uhd/config.hpp>
+#include <uhd/property_tree.hpp>
#include <uhd/rfnoc/block_id.hpp>
#include <uhd/rfnoc/node.hpp>
#include <uhd/rfnoc/register_iface_holder.hpp>
@@ -105,6 +106,12 @@ public:
*/
uhd::device_addr_t get_block_args() const { return _block_args; }
+ //! Return a reference to this block's subtree
+ uhd::property_tree::sptr& get_tree() const { return _tree; }
+
+ //! Return a reference to this block's subtree (non-const version)
+ uhd::property_tree::sptr& get_tree() { return _tree; }
+
protected:
noc_block_base(make_args_ptr make_args);
@@ -192,6 +199,12 @@ private:
//! Arguments that were passed into this block
const uhd::device_addr_t _block_args;
+ //! Reference to this block's subtree
+ //
+ // It is mutable because _tree->access<>(..).get() is not const, but we
+ // need to do just that in some const contexts
+ mutable uhd::property_tree::sptr _tree;
+
}; // class noc_block_base
}} /* namespace uhd::rfnoc */
diff --git a/host/lib/rfnoc/noc_block_base.cpp b/host/lib/rfnoc/noc_block_base.cpp
index f99d5aae7..6e72decfe 100644
--- a/host/lib/rfnoc/noc_block_base.cpp
+++ b/host/lib/rfnoc/noc_block_base.cpp
@@ -26,6 +26,7 @@ noc_block_base::noc_block_base(make_args_ptr make_args)
, _clock_iface(make_args->clk_iface)
, _mb_controller(std::move(make_args->mb_control))
, _block_args(make_args->args)
+ , _tree(make_args->tree)
{
// First, create one tick_rate property for every port
_tick_rate_props.reserve(get_num_input_ports() + get_num_output_ports());
@@ -62,7 +63,9 @@ noc_block_base::noc_block_base(make_args_ptr make_args)
noc_block_base::~noc_block_base()
{
- // nop
+ for (const auto& node : _tree->list("")) {
+ _tree->remove(node);
+ }
}
void noc_block_base::set_num_input_ports(const size_t num_ports)