- Fix target link libraries (UHD::uhd instead of uhd)
- Updated README
- Better describe the different ways to build the FPGA bitfiles
- Mention pybind11 requirement
- Add x410 image core to CMakeList to enable using make for this image
Since with the availability of discoverable features in Python it is
possible to use the front panel SPI of the X4xx series from there, this
example shows how to do this. It is pretty much on par with the C++
version.
These changes are required to build on Ubuntu 26.04 cleanly while still
maintaining backwards compatibility until Ubuntu 22.04.
- Set CMP0167 to NEW in UHD CMake paths that resolve Boost
- Scope policy changes with guard checks so older CMake versions remain
compatible
- Ensure dependency resolution order applies policy before Boost
discovery in package config
- Reduce CMake 3.30+ FindBoost policy warnings without breaking Ubuntu
22.04-era toolchains
This fixes the segfault when calling into set_*x_antenna() within the
example extension and updates the C++ version to UHD default (20 at the
moment) to be able to build again.
The segfault was caused by the extension example never initializing the
pointers to _*x_antenna. It still doesn't do that but refers to the
radio's setter and getter methods now.
This PR fixes a bug in the goto cleanup waterfall within rx_samples_c.
Previously, the free_rx_streamer label was positioned above the
free_rx_metadata label. Because C executes sequentially, if an error
occurred after the metadata was successfully created (for example,
during uhd_usrp_set_rx_rate or uhd_usrp_get_rx_stream), the code would
jump to free_rx_metadata, fall through to free_usrp, and exit. It
completely skipped free_rx_streamer, silently leaking the streamer
memory and leaving the hardware handles dangling.
Changes:
- Reordered the cleanup labels to strictly follow the reverse-chronological
order of resource creation (Metadata -> Streamer -> USRP).
- Updated the corresponding EXECUTE_OR_GOTO jump targets for the stream
setup functions to match the new waterfall order.
This removes the option to use IP in-tree, because the IP in use is not
useful for UHD overall, and it doesn't have much utility for the example
either. By removing it from the example, we allow for the IP to be
deleted.
This fixes many documentation issues where in the Doxygen output
sentences were incomplete and information was missing that is there in
the source files actually.
These changes enable usage of OOT modules on Windows, and also fixes
issues with Python usage of OOT modules on all platforms. Note that
existing OOT modules will need to apply these patches manually.
These changes are backported from rfnoc-oot-blocks. The following fixes
are included:
- We require UHD 4.9 so that we can use the UHD::uhd target for linking
instead of using the older-style ${UHD_LIBRARIES}. This fixes some
linker issues.
- The symbol export macro name is fixed (missing "DLL")
- The Python module is explicitly linked against the OOT DLL
- The Python module forces a loading of the UHD Python module, which
helps resolve RTTI and allows blocks to be declared descendents of
noc_block_base.
- RFNoC OOTs with a module name that contains a hyphen (like
"oot-blocks") are now correctly generated (macro names, e.g., should
include the string OOT_BLOCKS in this case)
- We can provide a Pybind11 path, which is helpful on Windows, because
unlike UHD, OOTs don't carry their vendored version of that library.
Co-authored-by: Wade Fife <wade.fife@emerson.com>
Added missing Msps conversion for actual rx sampling rate print in
the rfnoc oot gain block example.
Also applied ni-python-styleguide changes for import order.
This commit aligns the documented and the actual default value for the
waveform duration and corrects the value to pass for infinite playback
to be 0. With duration = -1 it would stop with an error immediately.
Removed deprecated 'license classifiers' and updated license field with
valid SPDX license expression to to comply with Python packaging standards
(PEP 639).
This can be completely replaced with uhd::cast::to_str() and from_str().
In some cases, the UHD typecast functions are better, because they
support more UHD-specific types (e.g., device_addr_t, subdev_spec_t, and
so on).
noc_block_base::make_args_t used to be partially declared, requiring OOT
tests to implement a destructor for make_args_t so that its unique_ptr
type would not fail to compile.
However, make_args_t was declared deprecated and made entirely opaque.
UHD has a dummy make_args_t to allow existing OOTs to compile, but we
update the OOT structure (both the template for new OOTs, and
rfnoc-gain) to reflect the new changes.
The recommended loopback cabling requires wiring the lower half
of the GPIO pins to the upper half of the GPIO pins. This means
that the number of loopback bits needs to be half of the total
number of GPIO pins.
Example for 12 bits:
GPIO 0 --> 6
GPIO 1 --> 7
GPIO 2 --> 8
GPIO 3 --> 9
GPIO 4 --> 10
GPIO 5 --> 11
- Behavioral changes:
- Fixed check for LO Lock detect
- Added option --type to configure output file data type
- Added option --pps to allow to synchronize multiple USRPs to
an external time reference
- Replaced --tx-args and --rx-args by --args such that there
is just one multi_usrp instance to simplify multi USRP time
alignment (use the multi_usrp time alignment mechanism with no extra code)
- Reworked timing: all timed actions relate to start of TX streamer
- Extended capabilities to schedule TX/RX complex gains to also support
multiple gain adjustmens per channel at different delays
- Documentation:
- added program documentation
- added more examples on program usage
- updated documentation for program options
Changes in behavior when called with --repeat and --delay 0:
- Open file once and reuse file buffer for each repeated transmission,
avoiding repeated open/close operations.
- For continuous operation (--repeat with --delay 0), do not set the
end_of_burst flag in the metadata after each buffer transmission,
enabling uninterrupted RF output.
- In most cases, the replacements are straightforward:
boost::filesystem::* can be often simply replaced by
std::filesystem::*, and the include path is changed from
<boost/filesystem.hpp> to <filesystem>
- boost::filesystem::system_complete() is replaced with
std::filesystem::absolute().
- Note: For users including uhd/utils/paths.hpp, this is an API change
because the return value of get_module_paths() is now a vector of
std::filesystem::path.
- In rx_samples_to_file and fx2_init_eeprom, we keep Boost.Filesystem
for now because there is no direct equivalent to
boost::filesystem::unique_path(), but the main goal is to remove
libboost_filesystem as a link dependency from libuhd.
- Added program documentation string.
- Marked required options as required().
- Added short option strings for required options.
- Made individual option descriptions more descriptive.
- Harmonized naming of options where appropriate.
Introduced alias options for renamed options to keep
backward compatibility.
- Added program documentation string.
- Marked required options as required().
- Made individual option descriptions more descriptive.
- Harmonized naming of options: renamed ampl into wave-ampl.
- Added program documentation string.
- Marked required options as required().
- Added short option strings for required options.
- Made individual option descriptions more descriptive.
- Harmonized naming of options where appropriate.
Kept old option names as alias options not getting printed by --help.
- Added program documentation string.
- Marked required options as required().
- Added short option strings for required options.
- Made individual option descriptions more descriptive.
- Harmonized naming of options where appropriate.
If open output file failed (e.g. missing permission) this was not
tracked and the C rx example crashed when try to write to the
empty file descriptor. This checks the result of fopen and prints
the str error of the failure for graceful exit.
- Added program documentation string.
- Marked required options as required().
- Added short option strings for required options.
- Made individual option descriptions more descriptive.
Various sub-projects around the UHD repository specify their own minimum
CMake versions (independent of UHD). We modify the minimum CMake
versions in the following way:
- All CMake files under firmware/ are bumped from 2.6 to 3.5. This is to
allow newer CMake versions to work with these files (CMake 4 and
beyond do no longer work if the minimum version is below 3.5). However,
note that these CMake files are so simple they will keep working with
older CMake versions, but that will require manually demoting the
minimum version. Because more people are using CMake versions newer
than 3.5 (especially with recent checkouts of UHD), this seems the
more compatible solution.
- The CMake files for extension_example and init_usrp are bumped to
3.12. This matches the version that UHD uses, which increases
compatibility.
- Remove system and thread as a required component (UHD might need those,
but init_usrp does not and CMake should take care of linker flags
originating from UHD)
- Remove gratuitous usage of boost::format
- Instead of blindly linking against all ${Boost_LIBRARIES}, we
selectively specify the various Boost::* targets.
- Replace include_directories() or link_directories() with target_*()
CMake functions to avoid cluttering global scope.
- Specify PRIVATE vs. PUBLIC on all link targets.