GCC 13 (as usual for new compiler releases) shuffles around some
internal includes and so <cstdint> is no longer transitively included.
Explicitly include <cstdint> for uint8_t.
```
/var/tmp/portage/net-wireless/uhd-4.3.0.0/work/uhd-4.3.0.0/host/include/uhd/rfnoc/defaults.hpp:43:14: error: 'uint32_t' does not name a type
43 | static const uint32_t DEFAULT_NOC_ID = 0xFFFFFFFF;
| ^~~~~~~~
/var/tmp/portage/net-wireless/uhd-4.3.0.0/work/uhd-4.3.0.0/host/include/uhd/rfnoc/defaults.hpp:1:1: note: 'uint32_t' is defined in header '<cstdint>'; did you forget to '#include <cstdint>'?
+++ |+#include <cstdint>
1 | //
```
Signed-off-by: Sam James <sam@gentoo.org>
Change type of internal sensor value to unique_ptr (from raw ptr)
This avoids double-free issues after querying a non-existant
sensor value.
Co-authored-by: Martin Anderseck <martin.anderseck@ni.com>
Co-authored-by: Martin Braun <martin.braun@ettus.com>
Co-authored-by: Michael Dickens <michael.dickens@ni.com>
This change adds the extension framwork that enables external libraries
to extend the UHD functionality in MultiUSRP and RFNoC. Its main purpose
is to be able to use external frontend modules, signal conditioning
modules etc. and to control them together with the USRP device. To make
it easier to install into the correct directory the UHD_MODULE_PATH gets
exported in CMake.
In multithreaded situations, property propagation can break
when a property is marked dirty during another thread's propagation.
This prevents that by acquiring a global mutex on the graph when
setting properties and property propagation.
Signed-off-by: Steven Koo <steven.koo@ni.com>
The tune map for ZBX included some mixer values which were redundant and
which didn't have a self-explaining name. This commit improves the
naming and makes the zbx_tune_map_item_t a public type so it can be
accessed from non-UHD applications because it is in the property tree
already anyway. While removing the redundancy some calculations in the
ZBX expert have been rewritten to be more readable.
To enable third party components (e.g. frontend modules) to use the
experts framework the headers need to be placed in the public API.
This change does this and fixes all dependencies. The experts
framework has been kept as internal API to enable changes more
easily, however it has been there without major changes for quite
a while already and therefore it should be safe to publish it.
It's no use talking about racism and then continue using
terms like master and slave. The X400 SPI interface is still
pretty new, so without interfering with too much legacy we
should still be able to jump onto a new, better naming scheme
for the SPI signals. Following the Open Source Hardware
Association's Resolution to Redefine SPI Signal Names
<https://www.oshwa.org/a-resolution-to-redefine-spi-signal-names/>
we will use Controller and Peripheral, Serial Data Out
(SDO) and Serial Data In (SDI) and Chip Select (CS).
Leftovers like MISO and MOSI are legacy from long existing
APIs which cannot be changed easily without breaking user
applications.
`skip_property_propagation` was always a bad choice for a name, but
since 3930a615, it is completely wrong.
In the C++ API, there is no change in API or ABI, because the argument
name is not part of API/ABI, although the documentation strings were
modified.
In the Python API, the argument name and default value are also modified
to match the C++ API. Scripts using named arguments may have to be
modified to track this change.
When resolving properties, it is important to retain the order of
properties. In this patch, this is achieved by changing prop_ptrs_t from
being an unordered_set into a vector.
The biggest effect is that node_t::filter_props() now returns filtered
properties in the order they were added.
Resolving properties in the order they were added, and not in any random
order, is very helpful when designing property resolvers. For the MTU
property, however, it is almost always a requirement. That's because the
the MTU property is added first (via noc_block_base), but also, its
resolution already assumes execution of resolvers in a certain order
(see the long comment towards the end of
noc_block_base::noc_block_base()). Execution of resolvers in a certain
order can only be guaranteed if properties are also in a certain order.
A particular issue this resolves is the ability to have properties that
both depend on atomic_item_size and the MTU. Because blocks have no way
of reading the current MTU other than calling
`noc_block_base::get_mtu()`, resolvers requiring access to the MTU
assume that the MTU properties are always resolved first.
The majority of this patch revolves around syntactical differences
between std::vector and std::unordered_set, like using `push_back()`
instead of `insert()` for adding to `prop_ptrs_t`.
0cf8a60 introduces Python binding for the digital filter
classes. This does not compile under Windows because the
digital filter classes are header only classes but are
declared as UHD_API. They must be declared as UHD_API_HEADER.
See also 1b3ed20.
C++20 no longer allows redundant template parameter lists. The
template parameter list must be removed from the property_impl
constructor to allow C++20 projects to include UHD.
Signed-off-by: Clayton Smith <argilo@gmail.com>
- Add ability to get current record position.
- Add ability to get current play position.
- Track space in play command FIFO and throw uhd::op_failed error when
command requested would overflow the command FIFO.
Signed-off-by: michael-west <michael.west@ettus.com>
Clang provides the same macros as GCC, so if we're differentiating between these compilers then we need to get the compiler checking macros in the correct order
The block descriptions radio_1x64.yml and radio_2x64.yml are subsets
of radio.yml. Similarly, axi_ram_fifo_2x64.yml and
axi_ram_fifo_4x64.yml are subsets of axi_ram_fifo.yml. This commit
removes the redundant YAML descriptions in favor of the
parameterizable versions.
Update all USRPs to use the same names for the same port types.
For example, instead of "ctrl_port" and "ctrlport" use "ctrlport".
Instead "timekeeper" and "time_keeper", use "timekeeper". Etc.
- Add action handlers to the replay block to store TX and RX events.
- Adds two new APIs: get_{record,play}_async_metadata() to read back
async info.
- Add unit tests.
In order to perform certain operations (start/stop/step), meta_range_t
objects must be "monotonic", meaning that the subranges composing it
are sorted and non-overlapping. This commit creates a method which
takes a non-monotonic meta_range_t containing no non-continuous
subranges and converts it into a monotonic meta_range_t.
- rfnoc_replay_samples_from_file still had UHD3-vestiges for selecting
block port and ID
- The documentation for stream_args_t also included block port and ID
examples
In the HDL, the parameter named 'MTU' is clog2 of the size of the
desired MTU. For example, when the 'MTU' parameter is 10, that means
the actual MTU setting is 2**MTU or 1024. So we need to set our
buffers to 2**MTU if we want them to be one MTU in size.
rfnoc::connect_through_blocks(), unlike rfnoc_graph::connect(), did not
have an argument to declare a back-edge. This patch remedies this
situation by adding a skip_property_propagation argument that works
exactly as with rfnoc_graph::connect().
This adds DRAM support to E31x devices. Due to the size of the DDR3
memory controller, it is not enabled by default. You can include the
memory controller IP in the build by adding the DRAM environment
variable to your build. For example:
DRAM=1 make E310_SG3