aboutsummaryrefslogtreecommitdiffstats
path: root/host/examples
Commit message (Collapse)AuthorAgeFilesLines
* examples: Add min dynamic range limit to ascii art DFT exampleLane Kolbly2021-04-152-3/+9
| | | | | | The DFT plotting routine hangs when the dynamic range equals zero, so this change adds a limit so that the dynamic range never goes below 10.
* examples: Add IP to OOT RFNoC gain exampleWade Fife2021-03-175-39/+335
| | | | | This updates the gain example to show how to use RFNoC IP, in-tree Xilinx IP, and out-of-tree Xilinx IP in a custom RFNoC block.
* examples: Remove unused arguments for rfnoc_radio_loopbackLane Kolbly2021-03-111-3/+14
|
* host: Update code base using clang-tidyMartin Braun2021-03-042-5/+5
| | | | | | | | | The checks from the new clang-tidy file are applied to the source tree using: $ find . -name "*.cpp" | sort -u | xargs \ --max-procs 8 --max-args 1 clang-tidy --format-style=file \ --fix -p /path/to/compile_commands.json
* examples: Fix PPS option in rfnoc_radio_loopbackLane Kolbly2020-11-171-1/+1
|
* examples: Fix --random option in benchmark_ratemichael-west2020-10-121-5/+11
| | | | | | | | The implementation was not properly configuring the stream command if the --random flag was used. It was especially bad when multiple channels were specified. Signed-off-by: michael-west <michael.west@ettus.com>
* Examples: Fix install paths in OOT RFNoC examplemichael-west2020-09-133-10/+14
| | | | | | | | - Add missing "uhd/" subdirectory. - Update install path for YAML file. - Fix include directories and link libraries for init_gain_block. Signed-off-by: michael-west <michael.west@ettus.com>
* examples: replay samples from filemattprost2020-08-113-414/+424
| | | | | | | This example exercises the Replay Block RFNoC API. The Replay records IQ data from a file and plays it back into a Radio for transmitting. Signed-off-by: mattprost <matt.prost@ni.com>
* example: Check for failure in tx_samples_from_fileSamuel O'Brien2020-07-311-3/+9
| | | | | | | | | | | I was using this example for testing with the simulator. If there is a flow control failure, the original example would just silently finish, outputing the message "Done!" (Not even printing a timeout message). This commit asserts that the number of samples sent is equal to the number of samples provided. Signed-off-by: Samuel O'Brien <sam.obrien@ni.com>
* examples: Fix usrp_power_meter exampleLars Amsel2020-06-111-16/+23
| | | | | | This PR applies antenna channel settings before available calibration data, and moves initialization code to setup_device, returning necessary settings in a tuple.
* host/examples/ascii_art_dft.hpp: fix and modernize example mainEtienne Wodey2020-05-261-1/+6
| | | | | | | Refresh screen after printing the DFT data. Use C++14 std::this_thread::sleep_for to control the refresh rate. Signed-off-by: Etienne Wodey <wodey@iqo.uni-hannover.de>
* examples: Add usrp_power_meter exampleMartin Braun2020-05-192-1/+135
| | | | | | | | | | | This is a utility that can be used to measure received power, assuming a calibrated device. For example, it can be called like this: usrp_power_meter.py -a type=x300 -f 1e9 --mode continuous To continuously measure input power at 1 GHz.
* Remove remaining Python 2 referencesMartin Braun2020-05-074-4/+4
| | | | | | | This changes two things in all applicable files: - Remove imports from __future__ - Change default shebangs from /usr/bin/env python to /usr/bin/env python3
* rfnoc-example: Removed DRAM from image coreMartin Braun2020-05-051-24/+11
| | | | | The DRAM was incorrectly connected, but it's also not necessary for this example and is hence removed.
* examples: Update test_messages exampleMichael West2020-04-301-12/+23
| | | | | | | | The example assumed that there was always at least one TX and on RX channel. Since that is not always true, this change checks for TX and RX channels and only exucutes tests for what exists on the device. Signed-off-by: Michael West <michael.west@ettus.com>
* examples: Update gpio exampleMichael West2020-04-301-92/+117
| | | | | | | | | | The example assumed that there was always at least one TX and on RX channel. Since that is not always true, this change checks for TX and RX channels and only exucutes tests for what exists on the device. Applied clang format. Signed-off-by: Michael West <michael.west@ettus.com>
* examples: Add --power command line option to tx_waveformsMartin Braun2020-04-172-18/+54
| | | | | | | | | | | | | | If you run tx_waveforms --power -20 [other args] it will try to set the out power to -20 dBm. The signal amplitude is factored in, so changing --ampl will not change the actual TX power unless it causes clipping, or becomes too low. If the USRP does not support setting a power, the program will terminate early. If it does support setting a power, but can't reach the requested power, it will coerce, and print the actual, available power.
* examples: wavetable: Modify wave tables to ease power calculationsMartin Braun2020-04-151-19/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | The existing implementation would create a real signal for any type of signal (CONST, RAMP, SQUARE, and SINE), and then create the complex signal by simply delaying the Q value by a 90 degree phase. This had surprising results for all waveforms: - CONST waveforms would have a baseband value of ampl + j ampl, thus increasing the output power by 3 dB vs. what one would expect when setting an amplitude. It is now ampl + j * 0, and the power is ampl**2. This now makes the power consistent with SINE, which it was not, even though a const signal is a sine signal with a frequency of zero. - SQUARE waveforms would phase-delay the Q part, thus resulting in three power output levels (when both phases are zero, when both phases are ampl, and when one of them is zero and other is ampl). However, the square signal is useful for watching it in the scope, and there, it helps if the power is predictably either high or low within the selected frequency. The Q value is now always zero. - RAMP waveforms had the same issue and were also resolved by setting Q to zero. - SINE signals were fine, although the implementation used sin + j cos to calculate a complex sine, not cos + j sin according to Euler's formula. To make this wavetable more useful with absolute power settings, the changes mentioned above were implemented. The dBFs power of CONST and SINE can now be calculated by using ampl**2, SQUARE by using (ampl**2)/2, and RAMP by solving the integral over a ramp from -1 to 1.
* examples: Change benchmark_rate default thread priorityAaron Rossetto2020-03-271-1/+1
| | | | | | | | | | | | | | | | | | This commit modifies the benchmark_rate example to use the operating system's default thread priority, instead of real-time thread priority, by default. UHD 4.0 includes a number of significant improvements to the streaming architecture that allow for best performance to be achieved without having to resort to elevating the process thread priority to real-time. Internal testing shows degraded streaming performance in common use cases (i.e. non-DPDK) when the process thread priority is set to real-time. It should be noted that applications which use DPDK may still experience better performance when the process thread priority is set to real-time. Users may continue to manually override the process thread priority in benchmark_rate using the --priority=high command-line option. The need to elevate the process thread priority will be application- and deployment-dependent.
* examples: Update gain block testbench to use samplesWade Fife2020-03-091-25/+24
|
* sim: Parameterize chdr_word_t data typeWade Fife2020-03-091-1/+6
| | | | | | | | | | | | | | | | | | This replaces chdr_word_t, which was a statically defined 64-bit data type, with a paramaterizable data type that matches the defined CHDR_W. Code that formerly referenced the chdr_word_t data type can now define the data type for their desired CHDR_W and ITEM_W as follows: // Define the CHDR word and item/sample data types typedef ChdrData #(CHDR_W, ITEM_W)::chdr_word_t chdr_word_t; typedef ChdrData #(CHDR_W, ITEM_W)::item_t item_t; ITEM_W is optional when defining chdr_word_t if items are not needed. Static methods in the ChdrData class also provide the ability to convert between CHDR words and data items. For example: // Convert CHDR data buffer to a buffer of samples samples = ChdrData#(CHDR_W, ITEM_W)::chdr_to_item(data);
* uhd: Apply clang-format against all .cpp and .hpp files in host/Martin Braun2020-03-038-17/+17
| | | | | Note: template_lvbitx.{cpp,hpp} need to be excluded from the list of files that clang-format gets applied against.
* examples: Wrap get_gpio_src() with try/catch blocksteviez2020-02-191-7/+14
| | | | | Non-RFNoC devices do not support get_gpio_src() entrypoing so wrap call with a try/catch block
* x300: add front-panel GPIO source controleklai2020-02-181-4/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Adds a ZPU register to control the FP GPIO source. These are 2bits per GPIO pin, totalling 24 bits. 0 corresponds to RF-A, 1 corresponds to RF-B. The following Python code will control the upper 6 bits of the front-panel GPIO from the B-side radio on an X300: >>> import uhd >>> U = uhd.usrp.MultiUSRP("type=x300") >>> U.get_gpio_src_banks() ['FP0'] >>> U.get_gpio_src("FP0") ['RFA', 'RFA', 'RFA', 'RFA', 'RFA', 'RFA', 'RFA', 'RFA', 'RFA', 'RFA', 'RFA', 'RFA'] >>> U.set_gpio_src("FP0", ['RFA', 'RFA', 'RFA', 'RFA', 'RFA', 'RFA', 'RFB', 'RFB', 'RFB', 'RFB', 'RFB', 'RFB']) >>> U.get_gpio_src("FP0") ['RFA', 'RFA', 'RFA', 'RFA', 'RFA', 'RFA', 'RFB', 'RFB', 'RFB', 'RFB', 'RFB', 'RFB'] >>> # Make all GPIOs outputs: >>> U.set_gpio_attr("FP0A", "DDR", 0xFFF) >>> U.set_gpio_attr("FP0B", "DDR", 0xFFF) >>> # Control all GPIOs from software (not ATR): >>> U.set_gpio_attr("FP0A", "CTRL", 0x000) >>> U.set_gpio_attr("FP0B", "CTRL", 0x000) >>> # Bottom 3 pins go high from radio A >>> U.set_gpio_attr("FP0A", "OUT", 0x007) >>> # Top 3 pins go high from radio B >>> U.set_gpio_attr("FP0B", "OUT", 0xE00) Amends the gpio.cpp example to allow switching the source. Co-authored-by: Brent Stapleton <brent.stapleton@ettus.com>
* examples: benchmark_rate clean print outmattprost2020-02-041-8/+12
| | | | | | Cleans up the print out for the benchmark rate example. Removes race condition that would cause send and receive initialization messages to interleave to stdout.
* examples: Fix tx timeout caused by initial delayCiro Nishiguchi2020-01-201-3/+4
| | | | | | Using default values, the initial delay for tx is larger than the default timeout of tx_streamer::send. Changing the example to always specify a timeout in send.
* uhd: fixing MSVC warningsBrent Stapleton2020-01-092-7/+10
| | | | | | | | | | | Small changes to remove various compiler warnings found in MSVC - Adding uhd::narrow_cast to verious spots - wavetable.hpp: all floats literals in the wavetable. - paths_test: unnecessary character escape - replay example: remove unreferenced noc_id - adfXXXX: Fixing qualifiers to match between parent and derived classes - rpc, block_id: Removing unused name in try...catch
* examples: Add options to benchmark_rateMichael West2020-01-021-19/+39
| | | | | | | | - Add option for high or normal thread priority with default set to high - Add rx_delay and tx_delay options to dynamically set start delays (default of 0.25 seconds for TX and 0.05 seconds for RX) Signed-off-by: Michael West <michael.west@ettus.com>
* examples: benchmark_rate dpdk recv/send thread priority elevationmattprost2019-12-201-0/+13
| | | | | | | | | | Improves dpdk streaming performance for benchmark_rate by elevating thread priority of the send and recv threads. It does this conditionally, if use_dpdk=1 was passed in through the command line args. Admittedly, this is not a perfect solution, as it does not account for the case when a dpdk user is utilizing a config file to pass in that information. The scope of this fix does seem appropriate for an example.
* examples: gpio: Replace get_time_now() with steady_clock::now()Martin Braun2019-11-261-12/+17
| | | | | | | | | | The gpio example would continously call get_time_now() to time a loop. There is no need to query a device here, so we query the system timer instead. This fixes an issue where the large amounts of control traffic could slow down TX, causing the TX and FDX tests to fail. This was only ever seen on the X300_HG over 1GigE.
* examples: gpio: Fix minor issuesMartin Braun2019-11-261-3/+3
| | | | | - Use GPIO_BIT(x) instead of 1<<x where appropriate - Correctly use rx_buff/tx_buff in recv/send, respectively
* examples: benchmark_rate.py: Add ?x_stream_args argsMartin Braun2019-11-261-2/+9
| | | | | | | | | | | | | This allows adding stream args to the Python version of benchmark_rate in the same way as for the C++ version, e.g.: python3 ./benchmark_rate.py \ --args addr=192.168.40.2,num_poll_offload_threads=4 \ --rx_stream_args \ recv_offload=1,num_recv_frames=32,recv_offload_wait_mode=poll \ --tx_stream_args \ send_offload=1,num_send_frames=32,send_offload_wait_mode=poll \ [... other arguments ...]
* examples: gpio: Add note on which bank is being usedMartin Braun2019-11-261-0/+1
| | | | | This will print the currently-used GPIO bank's name before starting the test.
* examples: Send only single packets in test_messagesMartin Braun2019-11-261-3/+3
| | | | | | | | | | | | | | | | For the burst ACK test, test_messages would send 3 packets. However, that assumes that the underlying link is fast enough to send three packets in time, and some devices are hard to operate without underruns without also specifying a start-of burst timestamp. Often, test_messages would report that no ACK was received, but instead, an underrun was received. test_messages also doesn't need to send three packets. The three packets came from the "start of burst" flag, which no device in UHD supports. The change is thus to send a single packet with an EOB marker for the burst ACK test. This will work regardless of the link speed and CPU power.
* examples: Update x310_rfnoc_image_core.yml exampleWade Fife2019-11-261-82/+99
|
* examples: gpio: Add --list-banks optionMartin Braun2019-11-261-0/+9
| | | | | | | The gpio example can now list all available banks before running tests. Use like this: gpio --args $args --list-banks
* examples: benchmark_rate: Add --rx_spp and --tx_sppMartin Braun2019-11-261-5/+23
| | | | These command line arguments control the spp values used for streaming.
* examples: Add example out-of-tree module for RFNoC modulesSugandha Gupta2019-11-2624-0/+1811
| | | | | | | | 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>
* uhd: Replace all occurrences of boost::bind with std::bindMartin Braun2019-11-265-7/+11
| | | | | | | | | | | | | | | | | | | | | Note: Replacing everything with a lambda would be even better, but that can't be easily scripted so we'll do this as a first step to reduce the Boost footprint. This also removes occurences of #include <boost/bind.hpp>, and makes sure all usages of std::bind have an #include <functional>. clang-format wasn't always applied to minimize the changeset in this commit, however, it was applied to the blocks of #includes. Due to conflicts with other Boost libraries, the placeholders _1, _2, etc. could not be directly used, but had to be explicitly called out (as std::placeholders::_1, etc.). This makes the use of std::bind even uglier, which serves as another reminder that using std::bind (and even more so, boost::bind) should be avoided. nirio/rpc/rpc_client.cpp still contains a reference to boost::bind. It was not possible to remove it by simply doing a search and replace, so it will be removed in a separate commit.
* examples: updating radio loopbackBrent Stapleton2019-11-262-113/+155
| | | | Modified to run with the new RFNoC API.
* examples: benchmark_rate: Remove usage of boost::posix_timeMartin Braun2019-11-261-18/+25
| | | | | Replace with std::chrono functions instead, in our effort to reduce Boost footprint.
* examples: Add Rx/Tx stream args parameters to benchmark_rateAaron Rossetto2019-11-261-0/+5
|
* uhd: Replace boost::function with std::functionMartin Braun2019-11-261-1/+1
| | | | | | | This is mostly a search-and-replace operation, with few exceptions: - boost::function has a clear() method. In C++11, this is achieved by assigning nullptr to the std::function object. - The empty() method is replaced by std::function's bool() operator
* uhd: Replace BOOST_FOREACH(v, c) with for(v : c)Martin Braun2019-11-262-3/+2
| | | | | Also removes all references to boost/foreach.hpp. BOOST_FOREACH is no longer necessary since all headers require C++11 anyway.
* uhd: Replace usage of boost smart pointers with C++11 counterpartsMartin Braun2019-11-264-12/+12
| | | | | | | | | | | | | | | | | | | This removes the following Boost constructs: - boost::shared_ptr, boost::weak_ptr - boost::enable_shared_from_this - boost::static_pointer_cast, boost::dynamic_pointer_cast The appropriate includes were also removed. All C++11 versions of these require #include <memory>. Note that the stdlib and Boost versions have the exact same syntax, they only differ in the namespace (boost vs. std). The modifications were all done using sed, with the exception of boost::scoped_ptr, which was replaced by std::unique_ptr. References to boost::smart_ptr were also removed. boost::intrusive_ptr is not removed in this commit, since it does not have a 1:1 mapping to a C++11 construct.
* Remove proto-RFNoC filesMartin Braun2019-11-264-14/+5
| | | | | | | This commit removes all files and parts of files that are used by proto-RFNoC only. uhd: Fix include CMakeLists.txt, add missing files
* rfnoc: examples: Porting examples to new RFNoCBrent Stapleton2019-11-263-206/+203
| | | | | | | | | | | | | rfnoc_nullsource_ce_rx, rfnoc_rx_to_file: These examples are modified so they can be run with the new RFNoC API. test_messages: Fixes failures in the time test when it is executed immediately after an underrun test. The DUC considers time specs on a per burst basis, so when the underrun test leaves a burst unfinished, a time spec on the next burst is ignored.
* uhd: Remove deprecated objects and methodsMartin Braun2019-11-263-19/+1
| | | | | | | | | This removes the following symbols: - otw_type_t - clock_config_t - Any functions that use those symbols - Non-standard args from examples (e.g., --total-time is deprecated in favour of --duration)
* cmake: Bump dependency versions for UHD 4.0.0.0Martin Braun2019-11-261-2/+2
| | | | | | | | | | | | - Boost >= 1.58 - CMake >= 3.5.1 - gcc >= 5.4.0 - Clang >= 3.8, AppleClang >= 600 - Python >= 3.5 (Py2k no longer supported) - Numpy >= 1.11 - C++14 for lib, include may now use C++11 constructs. - Because there is no more code requiring C++03 syntax, we remove the include-specific clang-format file
* Examples: wrap up ref setting with option checknatetemple2019-11-247-10/+24
|