diff options
Diffstat (limited to 'host/lib/rfnoc/logpwr_block_control.cpp')
| -rw-r--r-- | host/lib/rfnoc/logpwr_block_control.cpp | 58 | 
1 files changed, 58 insertions, 0 deletions
diff --git a/host/lib/rfnoc/logpwr_block_control.cpp b/host/lib/rfnoc/logpwr_block_control.cpp new file mode 100644 index 000000000..4f18dab81 --- /dev/null +++ b/host/lib/rfnoc/logpwr_block_control.cpp @@ -0,0 +1,58 @@ +// +// Copyright 2019 Ettus Research, a National Instruments Brand +// +// SPDX-License-Identifier: GPL-3.0-or-later +// + +#include <uhd/convert.hpp> +#include <uhd/exception.hpp> +#include <uhd/rfnoc/defaults.hpp> +#include <uhd/rfnoc/logpwr_block_control.hpp> +#include <uhd/rfnoc/property.hpp> +#include <uhd/rfnoc/registry.hpp> +#include <string> + +using namespace uhd::rfnoc; + + +class logpwr_block_control_impl : public logpwr_block_control +{ +public: +    RFNOC_BLOCK_CONSTRUCTOR(logpwr_block_control) +    { +        const size_t num_input_ports  = get_num_input_ports(); +        const size_t num_output_ports = get_num_output_ports(); +        UHD_ASSERT_THROW(num_output_ports == num_input_ports); + +        _prop_type_in.reserve(num_input_ports); +        _prop_type_out.reserve(num_output_ports); + +        for (size_t chan = 0; chan < num_input_ports; chan++) { +            // register edge properties +            _prop_type_in.emplace_back(property_t<std::string>{ +                PROP_KEY_TYPE, IO_TYPE_SC16, {res_source_info::INPUT_EDGE, chan}}); +            _prop_type_out.emplace_back(property_t<std::string>{ +                PROP_KEY_TYPE, IO_TYPE_S16, {res_source_info::OUTPUT_EDGE, chan}}); +            register_property(&_prop_type_in.back()); +            register_property(&_prop_type_out.back()); + +            // add resolvers for type +            add_property_resolver({&_prop_type_in.back()}, +                {&_prop_type_in.back()}, +                [this, chan]() { _prop_type_in.at(chan).set(IO_TYPE_SC16); }); +            add_property_resolver({&_prop_type_out.back()}, +                {&_prop_type_out.back()}, +                [this, chan]() { _prop_type_out.at(chan).set(IO_TYPE_S16); }); +        } +    } + +private: +    /************************************************************************** +     * Attributes +     *************************************************************************/ +    std::vector<property_t<std::string>> _prop_type_in; +    std::vector<property_t<std::string>> _prop_type_out; +}; + +UHD_RFNOC_BLOCK_REGISTER_DIRECT( +    logpwr_block_control, LOGPWR_BLOCK, "LogPwr", CLOCK_KEY_GRAPH, "bus_clk")  | 
