diff options
author | Sugandha Gupta <sugandha.gupta@ettus.com> | 2019-10-15 11:52:46 -0700 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2019-11-26 12:21:32 -0800 |
commit | a801d6b046743140e9a50c7788dd17dd71f5540a (patch) | |
tree | 58d164e1b4cb2a8d871ca532287699f3912ae3d8 /host/examples/rfnoc-example/apps/init_gain_block.cpp | |
parent | 2a7e69d862f661075b98bab19e58d958c28a9af8 (diff) | |
download | uhd-a801d6b046743140e9a50c7788dd17dd71f5540a.tar.gz uhd-a801d6b046743140e9a50c7788dd17dd71f5540a.tar.bz2 uhd-a801d6b046743140e9a50c7788dd17dd71f5540a.zip |
examples: Add example out-of-tree module for RFNoC modules
This subdirectory is its own, self-contained project. It is supposed to
work against the UHD version it is shipped with.
Co-Authored-By: Martin Braun <martin.braun@ettus.com>
Co-Authored-By: Wade Fife <wade.fife@ni.com>
Diffstat (limited to 'host/examples/rfnoc-example/apps/init_gain_block.cpp')
-rw-r--r-- | host/examples/rfnoc-example/apps/init_gain_block.cpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/host/examples/rfnoc-example/apps/init_gain_block.cpp b/host/examples/rfnoc-example/apps/init_gain_block.cpp new file mode 100644 index 000000000..f9de5f92c --- /dev/null +++ b/host/examples/rfnoc-example/apps/init_gain_block.cpp @@ -0,0 +1,77 @@ +// +// Copyright 2019 Ettus Research, a National Instruments Brand +// +// SPDX-License-Identifier: GPL-3.0-or-later +// + +// Example application to show how to write applications that depend on both UHD +// and out-of-tree RFNoC modules. +// +// It will see if a USRP is runnging the gain block, if so, it will test to see +// if it can change the gain. + +#include <uhd/exception.hpp> +#include <uhd/rfnoc_graph.hpp> +#include <uhd/utils/safe_main.hpp> +#include <rfnoc/example/gain_block_control.hpp> +#include <boost/program_options.hpp> + +namespace po = boost::program_options; + +int UHD_SAFE_MAIN(int argc, char* argv[]) +{ + std::string args; + + // setup the program options + po::options_description desc("Allowed options"); + // clang-format off + desc.add_options() + ("help", "help message") + ("args", po::value<std::string>(&args)->default_value(""), "USRP device address args") + ; + // clang-format on + po::variables_map vm; + po::store(po::parse_command_line(argc, argv, desc), vm); + po::notify(vm); + + // print the help message + if (vm.count("help")) { + std::cout << "Init RFNoC gain block " << desc << std::endl; + std::cout << std::endl + << "This application attempts to find a gain block in a USRP " + "and tries to peek/poke registers..\n" + << std::endl; + return EXIT_SUCCESS; + } + + // Create RFNoC graph object: + auto graph = uhd::rfnoc::rfnoc_graph::make(args); + + // Verify we have a gain block: + auto gain_blocks = graph->find_blocks<rfnoc::example::gain_block_control>(""); + if (gain_blocks.empty()) { + std::cout << "No gain block found." << std::endl; + return EXIT_FAILURE; + } + + auto gain_block = + graph->get_block<rfnoc::example::gain_block_control>(gain_blocks.front()); + if (!gain_block) { + std::cout << "ERROR: Failed to extract block controller!" << std::endl; + return EXIT_FAILURE; + } + constexpr uint32_t new_gain_value = 42; + gain_block->set_gain_value(new_gain_value); + const uint32_t gain_value_read = gain_block->get_gain_value(); + + if (gain_value_read != new_gain_value) { + std::cout << "ERROR: Readback of gain value not working! " + << "Expected: " << new_gain_value << " Read: " << gain_value_read + << std::endl; + return EXIT_FAILURE; + } else { + std::cout << "Gain value read/write loopback successful!" << std::endl; + } + + return EXIT_SUCCESS; +} |