diff options
author | Lane Kolbly <lane.kolbly@ni.com> | 2021-12-08 14:12:28 -0600 |
---|---|---|
committer | Aaron Rossetto <aaron.rossetto@ni.com> | 2022-01-20 08:52:42 -0600 |
commit | 4e391500b54a22dbaae8692750ec25ae8a97ee6d (patch) | |
tree | 12907aaefb68f0d4825a8c9cb9ee2be9825d2542 /host/lib/include/uhdlib/rfnoc/rf_control | |
parent | 72e9ba55d6b144d456a644cb47f40522022d4fb6 (diff) | |
download | uhd-4e391500b54a22dbaae8692750ec25ae8a97ee6d.tar.gz uhd-4e391500b54a22dbaae8692750ec25ae8a97ee6d.tar.bz2 uhd-4e391500b54a22dbaae8692750ec25ae8a97ee6d.zip |
host: Implement nameless_gain_mixin
Diffstat (limited to 'host/lib/include/uhdlib/rfnoc/rf_control')
-rw-r--r-- | host/lib/include/uhdlib/rfnoc/rf_control/nameless_gain_mixin.hpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/host/lib/include/uhdlib/rfnoc/rf_control/nameless_gain_mixin.hpp b/host/lib/include/uhdlib/rfnoc/rf_control/nameless_gain_mixin.hpp new file mode 100644 index 000000000..149623352 --- /dev/null +++ b/host/lib/include/uhdlib/rfnoc/rf_control/nameless_gain_mixin.hpp @@ -0,0 +1,58 @@ +// +// Copyright 2021 Ettus Research, a National Instruments Brand +// +// SPDX-License-Identifier: GPL-3.0-or-later +// + +#pragma once + +#include <uhd/property_tree.hpp> +#include <uhd/rfnoc/rf_control/core_iface.hpp> +#include <uhd/types/direction.hpp> +#include <unordered_map> +#include <functional> +#include <memory> +#include <string> +#include <vector> + +namespace uhd { namespace rfnoc { namespace rf_control { + +/*! Partially implements core_iface for the gain functions which take no name parameter + */ +class nameless_gain_mixin : virtual public core_iface +{ +public: + using name_selector = + std::function<std::string(const uhd::direction_t trx, const size_t chan)>; + + /*! Sets the name selector for the mixin. The closure receives the direction + * of the call and the channel, and returns the gain to use for the call. The + * name selector may simply return a string, or may do a more complex algorithm. + */ + nameless_gain_mixin(name_selector name_selector); + + virtual ~nameless_gain_mixin() = default; + + double set_tx_gain(const double gain, const size_t chan) override; + double get_tx_gain(const size_t chan) override; + + double set_rx_gain(const double gain, const size_t chan) override; + double get_rx_gain(const size_t chan) override; + + // Getting the gain ranges is a bit different - these always use the empty name + gain_range_t get_tx_gain_range(const size_t chan) const override; + gain_range_t get_rx_gain_range(const size_t chan) const override; + +private: + name_selector _name_selector; + + using core_iface::get_tx_gain; + using core_iface::get_tx_gain_range; + using core_iface::set_tx_gain; + + using core_iface::get_rx_gain; + using core_iface::get_rx_gain_range; + using core_iface::set_rx_gain; +}; + +}}} // namespace uhd::rfnoc::rf_control |