diff options
Diffstat (limited to 'host')
| -rw-r--r-- | host/lib/rfnoc/legacy_compat.cpp | 32 | 
1 files changed, 32 insertions, 0 deletions
| diff --git a/host/lib/rfnoc/legacy_compat.cpp b/host/lib/rfnoc/legacy_compat.cpp index e1eff757e..b660a21c7 100644 --- a/host/lib/rfnoc/legacy_compat.cpp +++ b/host/lib/rfnoc/legacy_compat.cpp @@ -103,6 +103,15 @@ uhd::meta_range_t lambda_const_meta_range(const double start, const double stop,  {      return uhd::meta_range_t(start, stop, step);  } + +/*! Recreate passed property without bound subscribers. Maintains current property value. +*/ +template <typename T> +static void recreate_property(const uhd::fs_path &path, uhd::property_tree::sptr &tree) { +    T temp = tree->access<T>(path).get(); +    tree->remove(path); +    tree->create<T>(path).set(temp); +}  /************************************************************************   * Class Definition   ***********************************************************************/ @@ -169,6 +178,11 @@ public:          }      } +    ~legacy_compat_impl() +    { +       remove_prop_subscribers(); +    } +      /************************************************************************       * API Calls       ***********************************************************************/ @@ -590,6 +604,24 @@ private: // methods          }      } + +    /*! Remove properties with bound functions in property tree and recreate +     */ +    void remove_prop_subscribers() +    { +        for (size_t mboard_idx = 0; mboard_idx < _num_mboards; mboard_idx++) { +            uhd::fs_path root = mb_root(mboard_idx); +            // Subdev specs +            if (_tree->exists(root / "tx_subdev_spec")) { +               recreate_property<subdev_spec_t>(root / "tx_subdev_spec", _tree); +            } + +            if (_tree->exists(root / "rx_subdev_spec")) { +               recreate_property<subdev_spec_t>(root / "rx_subdev_spec", _tree); +            } +        } +    } +      /*! Default block connections.       *       * Tx connections: | 
