aboutsummaryrefslogtreecommitdiffstats
path: root/host/include
Commit message (Collapse)AuthorAgeFilesLines
* rfnoc: allow find_blocks to search by device number or block count.Lars Amsel2021-07-201-1/+5
| | | | | | | | | | | | | In current implementation it is not possible to find all blocks of a device by calling find_blocks("0/"). The same is true for the block count. This is caused by the valid block id regex which requires a block name. This regex is used to validate the block name as well as to match block ids in search. This fix looses the requirement for the block name to allow searches by device number and block count and also extends the is_valid_block_id method to require the block name match to be non empty (which restores the previous behaviour at this point).
* rfnoc: fix block id check to allow underscoreLars Amsel2021-07-141-1/+1
| | | | | | | We allow underscore in RFNoC's block names but the regular expressions only allowed the underscore in the block name RE. This fix adds the underscore to the block id RE as well as adapts the unit tests accordingly.
* host: Add static_assert to prevent meta_range_t(0,0)Lane Kolbly2021-07-141-0/+9
| | | | | | | meta_range_t(0,0) actually calls the iterator-based constructor for meta_range_t, which is almost certainly not the intended constructor for that call syntax. Therefore, we add a static_assert to prevent such usage, and fix all failing instances.
* uhd: Replace boost::thread::id with std::thread::idMartin Braun2021-07-141-5/+6
| | | | | | | | The Boost version is identical to the std:: version (which is available since C++11) and thus is no longer needed. Because of implicit includes, this breaks compilation in other parts. Appropriate includes were added there also.
* rfnoc: remove obsolete constantLars Amsel2021-07-121-3/+0
| | | | | | RFNoC 4.0 does not restrict the number of blocks. The constant is not used anywhere in the code and can therefore be removed savely.
* docs: fix typoMihai Turdean2021-07-091-1/+1
|
* docs: Fix typosf380cedric2021-06-221-3/+3
| | | | Signed-off-by: Aaron Rossetto <aaron.rossetto@ni.com>
* uhd: Add callback for setting sync_sourcesGrant Meyerhoff2021-06-171-0/+18
|
* uhd: Add support for the USRP X410Lars Amsel2021-06-1015-14/+681
| | | | | | | | | | | | | | | | Co-authored-by: Lars Amsel <lars.amsel@ni.com> Co-authored-by: Michael Auchter <michael.auchter@ni.com> Co-authored-by: Martin Braun <martin.braun@ettus.com> Co-authored-by: Paul Butler <paul.butler@ni.com> Co-authored-by: Cristina Fuentes <cristina.fuentes-curiel@ni.com> Co-authored-by: Humberto Jimenez <humberto.jimenez@ni.com> Co-authored-by: Virendra Kakade <virendra.kakade@ni.com> Co-authored-by: Lane Kolbly <lane.kolbly@ni.com> Co-authored-by: Max Köhler <max.koehler@ni.com> Co-authored-by: Andrew Lynch <andrew.lynch@ni.com> Co-authored-by: Grant Meyerhoff <grant.meyerhoff@ni.com> Co-authored-by: Ciro Nishiguchi <ciro.nishiguchi@ni.com> Co-authored-by: Thomas Vogel <thomas.vogel@ni.com>
* fpga: Change RFNoC YAML version numbers to stringsWade Fife2021-06-0822-44/+44
| | | | | Change version from a numeric to a string, in order to differentiate between versions like "1.1" and "1.10".
* types: Add mm_iface structsMartin Braun2021-05-202-0/+43
| | | | | This adds two structs (mm32_iface and mm32_iface_timed) which are a container for peek/poke interfaces.
* uhd: Reword log.hpp documentationLane Kolbly2021-05-191-7/+19
|
* rfnoc: noc_block_base: Throw if set_mtu_forwarding_policy() called multiplyAaron Rossetto2021-05-181-1/+6
|
* rfnoc: noc_block_base: Refactor MTU prop resolverAaron Rossetto2021-05-181-0/+6
| | | | | | | | | | | | | | | | | | | | | | Prior to this commit, the MTU property resolver in noc_block_base had an issue: for every MTU edge property (both input and output on each port) on the block, the property resolver listed every other MTU edge property in its output sensitivity list, regardless of whether or not the output edge properties would ever be affected by the current MTU forwarding policy. This breaks an inherent (and up until now, unwritten) contract between a property resolver and UHD that only properties that can be affected by the resolver should be included in the output sensitivity list. The result of breaking the contract leads to errors being thrown when committing an RFNoC graph in certain multi-channel use cases. This commit refactors the MTU property resolver to use the MTU forwarding policy to determine the correct set of edge properties to include in the output sensitivity list. The change also introduces a new restriction--the MTU forwarding policy may only be set once per instance of a noc_block_base. Typically, a subclass implementing an RFNoC block will call `set_mtu_forwarding_policy()` in its constructor to set a custom MTU forwarding policy (if desired) and leave it untouched for the lifetime of the block.
* uhd: Remove references to device3Martin Braun2021-04-302-11/+7
| | | | device3 was an object used in UHD-3 RFNoC. It is no longer required.
* uhd: Update all headers for setters on multi_usrp re coerce/throwMartin Braun2021-04-191-50/+144
| | | | | | | | | | | | | | | Our APIs are not consistent when it comes to handling invalid settings. Some setting (like antenna, LO name, ...) will trigger an exception when invalid. Other settings (gain, frequency, clock rate) will get coerced to a valid value. This behaviour does make sense for the most part (it is more intuitive that 81 dB gets coerced to 80 dB if that's the maximum, but coercing an invalid antenna value like "RX1" has no clear alternative). And in any case, this is the behaviour that UHD has always had. In this commit, all Doxygen headers in multi_usrp are updated to exactly describe their behaviour (coerce or throw).
* rfnoc: radio: Add getter for SPC valueMartin Braun2021-03-192-0/+27
| | | | | | This adds uhd::rfnoc::radio_control::get_spc(). It can be overridden by radio implementations, but radio_control_impl has a sensible default implementation, return the value that is in the SPC radio register.
* uhd: enable vcpkg support on windowsSteven Koo2021-03-192-4/+10
| | | | | | | | | | | | | | | | | | | | vcpkg can be used for the Windows C++ dependencies for uhd with this commit. To use vcpkg on Windows: 1) Copy the custom triplets in host/cmake/vcpkg/ to the vcpkg/triplets/ folder. 2) Install boost and libusb for the custom triplet "vcpkg install libusb:uhd-x64-windows-static-md boost:uhd-x64-windows-static-md" 3) Call CMake with vcpkg toolchain file flags: -DVCPKG_TARGET_TRIPLET=uhd-x64-windows-static-md -DCMAKE_TOOLCHAIN_FILE=%VCPKG_INSTALL_DIR%/scripts/buildsystems/vcpkg.cmake -G "Visual Studio 16 2019" -A x64 Replace the -G with the installed version of Visual Studio and matching architecture. Then build normally by running vcvarsall.bat and msbuild. Signed-off-by: Steven Koo <steven.koo@ni.com>
* uhd: Fix radio_control-related method constnessMartin Braun2021-03-171-3/+2
| | | | | | | | | | | | | | | | | The const-ness of some radio_control differed between base class and implementation. This fixes the consistency, but also makes sure these methods follow the rules for when to make methods 'const'. The following rules apply: - Methods that query static capabilities are const. Here, we made get_tx_lo_sources() const (the RX version was already const). - Getters that may have to interact with the device (e.g., peek a register) are not const, because the act of peeking is usually also non-const. Here, we changed get_rx_lo_export_enabled() to non-const. - All base classes are fixed such that the derived classes and the base classes have the same const-ness. Clang was warning about differences. This can cause very tricky bugs, where the radio_control_impl version can get called instead of the intended child class.
* host: Update code base using clang-tidyMartin Braun2021-03-0411-127/+127
| | | | | | | | | 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
* mpmd: Skip find if "resource" key is specifiedmichael-west2021-02-111-7/+0
| | | | | | | | | | | MPM devices were being discovered when trying to locate PCIe connected devices. Adding filter to exclude them if the "resource" key is specified in the device address arguments. Replaces "lib: disable non pcie types in find with resource" to reduce impact to older devices and remove API change. Signed-off-by: michael-west <michael.west@ettus.com>
* usrp: Remove old header file declarationsLane Kolbly2021-02-031-33/+0
| | | | | | The definitions of these functions were deleted in 23f4f8cf4ea72, and so now we can remove the declarations from the header file to prevent any confusion.
* sim: Fix CHDR header stringificationAaron Rossetto2021-01-211-4/+5
| | | | | | | | | | Prior to Boost 1.66, boost::format() did not support the %b format specifier, yet the minimum version of Boost required to build UHD is Boost 1.58 (as specified in the CMakeLists.txt file). Rather than force an upgrade of Boost on everyone, this commit replaces the %b format specifiers with %c and provides 'Y' or 'N' values based on the Booleans in the CHDR header being printed (EOV and EOB).
* mpmd: Add support to delay and trigger fpga/dts load after updateVirendra Kakade2021-01-111-0/+2
| | | | | | | | | Add a new image_loader argument delay_reload to provide a way to update components but optionally delay the actual load. Similarly add a new argument, just_reload, to enable uhd to reload the fpga/dts components. Signed-off-by: Virendra Kakade <virendra.kakade@ni.com>
* rfnoc: Make NIPC match CHDR width by default for NSS blockWade Fife2021-01-111-1/+1
|
* rfnoc: Add accessors for item width and nipc for NSSWade Fife2021-01-111-0/+8
| | | | | | - Add get_item_width() and get_nipc() methods to the Null/Source/Sink block controller. - Add missing enumerated types for get_count() method.
* uhd: Split radio_control into rf_control interfacesLane Kolbly2021-01-115-582/+657
| | | | | | These rf_control interfaces allow easier implementation of radio controls as well as allowing easier sharing of code for implementing e.g. gain_profile.
* uhd: revert "Check property type at access..."Steven Koo2021-01-082-11/+3
| | | | | | | | | | This change reverts cb9329a681552e6ac6277d16e1627afcbb23e637. The type checking is causing some conversion issues on clang/macos. The type_index checking doesn't work correctly across shared libraries and should not be relied on to verify type, since it can vary from compiler to compiler. Signed-off-by: Steven Koo <steven.koo@ni.com>
* uhd: clang: Fix fallthrough attributeMartin Braun2021-01-081-1/+1
| | | | | | | See also: https://clang.llvm.org/docs/AttributeReference.html#fallthrough The attribute was missing a semicolon.
* graph: Restore default resolver callback at node removalAaron Rossetto2020-11-201-1/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The default resolve callback behavior for a newly-instantiated `node_t` object resolves all dirty properties associated with the node, then marks the properties as clean. When the node is added to a graph, its resolver callback is updated to use the graph property propagation algorithm in `graph_t::resolve_all_properties()`, which is considerably more sophisticated and relies on the graph topology to do its work. When a connection between two nodes is broken via the `graph::disconnect()` method, nodes which no longer have incoming or outgoing edges (connections) are removed from the graph. Prior to this change, the removed node's resolver callback was left pointing at the graph property propagation algorithm. In certain use cases, this could result in unexpected client-facing behavior. Consider, for example, this code (incomplete and for illustrative purposes only) which creates a streamer on one transmit chain of a multi-channel device, destroys that streamer, then creates a stream on the other transmit chain. Attempting to set the TX rate on the first chain after destroying the streamer does not result in the expected rate change, despite the same code working correctly before creating the streamer: constexpr size_t CH0 = ..., CH1 = ...; uhd::usrp::multi_usrp::sptr usrp = uhd::usrp::multi_usrp::make(...); // Set a TX rate on both chains; this succeeds usrp->set_tx_rate(initial_rate, CH0); usrp->set_tx_rate(initial_rate, CH1); assert(initial_rate == usrp->get_tx_rate(CH0)); assert(initial_rate == usrp->get_tx_rate(CH1)); // Create a TX streamer for channel 0 std::vector<size_t> chain0_chans{CH0}; stream_args_t sa; sa.channels = chain0_chans; sa.otw_format = ...; sa.cpu_format = ...; uhd::tx_streamer::sptr txs = usrp->get_tx_stream(sa); // Destroy the first streamer (disconnecting the graph) and // create a streamer for channel 1 txs.reset(); std::vector<size_t> chain1_chans{CH1}; sa.channels = chain1_chans; txs = usrp->get_tx_stream(sa); // Now try to set a new TX rate on both chains usrp->set_tx_rate(updated_rate, CH0); usrp->set_tx_rate(updated_rate, CH1); assert(updated_rate == usrp->get_tx_rate(CH0)); // <--- FAILS assert(updated_rate == usrp->get_tx_rate(CH1)); The reason this fails is because the second call to `set_tx_rate()` on channel 0 internally sets the 'interp' (interpolation ratio) property on the DUC node via the call to the DUC block controller's `set_input_rate()` function. As the DUC node is no longer part of the graph, having been removed from it when the first streamer instance was destroyed, the graph property propagation algorithm doesn't 'see' the node with the dirty property, and the 'interp' property resolver callback is never invoked. As a result, the DUC's input rate property, which depends on the interpolation ratio value, is never updated, and thus calling the `get_tx_rate()` function to query the new rate of the TX chain results in an unexpected value. In fact, in this particular case, `set_tx_rate()` actually raises a warning that the TX rate couldn't be set, and a message is printed to the console. This commit remedies the situation by restoring the default resolve callback behavior for a node when it is removed from the graph. This allows the framework to be able to invoke the property resolver callback on that node when a property is updated, the expected behavior of a newly instantiated node.
* rfnoc: Add Makefile.srcs to switchboard.ymlWade Fife2020-11-191-0/+1
|
* tests: mock_block: Allow mock blocks to carry MB controllersMartin Braun2020-10-091-1/+3
|
* rfnoc: Alphabetize sections in CMakeLists.txtAaron Rossetto2020-10-091-22/+22
|
* rfnoc: Add add'l header files to CMakeLists.txtAaron Rossetto2020-10-091-0/+3
|
* lib: disable non pcie types in find with resourceSteven Koo2020-10-051-0/+7
| | | | | | | mpmd find doesn't respect the "resource" arg hint and can be detected when "resource" is set. This results in incorrect device selection when using PCIe. This change adds detection for "resource" as a prefix in the device hints for mpmd and the other devices.
* uhd: replace default initializers with named onesSteven Koo2020-09-251-1/+3
| | | | This resolves an issue with building on older compilers.
* multi_usrp: Add get_mb_controller() API callCristina Fuentes2020-09-241-0/+20
|
* fpga: Update DRAM IO signaturesWade Fife2020-09-037-147/+6
| | | | | | | | This updates the IO signatures so that all devices and RFNoC blocks use the same IO signature for the DRAM. This is needed because the IO signatures must match between the RFNoC blocks and the devices. This means that some devices have extra bits in the IO signature for the address, but the extra bits will simply be ignored.
* uhd: Add APIs for getting the available power rangeMartin Braun2020-08-172-0/+44
| | | | | | | | | The previously added APIs for getting/setting power reference levels was missing an option to read back the currently available power levels (minimum and maximum power levels). This adds getters for TX and RX power ranges to multi_usrp and radio_control. The power API is thus now more similar to the gain API, which always had getters for gain ranges.
* rfnoc: set a nop destructor for clang crashSteven Koo2020-08-121-0/+5
| | | | | Clang will generate an illegal instruction if a virtual destructor isn't defined.
* rfnoc: Resolves streamer/link segfaults on pythonSteven Koo2020-08-111-1/+1
| | | | | | | | | This commit resolves a segfault that occurs during teardown. Since teardown isn't detereministic in python, there were cases where the graph would destruct before the streamers or links got chance to cleanup. This would result in a segfault. This change gives the lambda a shared pointer to the object the callback method is calling on, so that it won't destruct before being called.
* rfnoc: Remove M_PI usage to fix Windows buildsSteven Koo2020-08-072-4/+5
| | | | | | M_PI may not exist if _USE_MATH_DEFINES isn't defined before the first include of math.h or cmath on Windows. This changes avoids the issue all together by defining our own PI.
* utils: Change template specialization namespacingBill Davis2020-08-051-8/+10
| | | | | There is a gcc bug for template specialization that causes compile errors. Reformatting the namespacing avoids the bug.
* rfnoc: Add Keep One in N block supportAaron Rossetto2020-08-053-0/+86
|
* fpga: rfnoc: Add RFNoC Keep One in N blockAaron Rossetto2020-08-051-0/+56
|
* RFNoC: Add disconnect methods to graphmichael-west2020-08-041-1/+39
| | | | | | | | | | - Added method to disconnect an edge - Added method to remove a node - Fixed algorithm to check edges during connect. Previous code was checking some edges twice and allowing duplicate edges to be created for existing edges. Signed-off-by: michael-west <michael.west@ettus.com>
* rfnoc: Add RFNoC replay blockmattprost2020-08-042-1/+326
| | | | Signed-off-by: mattprost <matt.prost@ni.com>
* fpga: rfnoc: Add RFNoC Replay blockWade Fife2020-08-041-0/+63
|
* rfnoc: Add siggen RFNoC block controller supportAaron Rossetto2020-07-303-0/+209
|
* fpga: rfnoc: Add Signal Generator RFNoC blockWade Fife2020-07-301-0/+55
|