Updated the references to DDC and DUC RFNoC blocks to reflect the
new split between legacy(singlesample) and wideband(multisample)
implementations.
Updated the related manual references as well as the C++ block
controller API comments that are pulled in by doxygen.
Also fixed a minor outdated comment in the FPGA source code.
- boost::optional is replaced by std::optional
- In public APIs, boost::optional is still usable, but it is declared
deprecated. That means this is no API break (but it is an ABI break).
- Within the library portion (host/lib/**) there is no more usage of
boost::optional. Some backward-compatibility code (in actions.cpp and
ctrlport_endpoint.cpp) was moved out to the header.
Note: The most difficult replacement was that for
parse_log_level_from_string(), where boost::optional is the return
value. To retain API compatibility, we had to create a helper function.
When creating an RFNoC streamer (using rfnoc_graph::create_?x_stream(),
or when calling multi_usrp::get_?x_stream() on an RFNoC device), the
argument `mtu` is now interpreted by the RFNoC infrastructure. It allows
overriding the MTU for a given connection, regardless of what the
underlying link is using.
A good reason to use this is when doing remote streaming, and the path
MTU differs between the USRP and the UHD host computer, and the USRP and
the remote destination. UHD will default to the path MTU between the
host computer and the USRP, but that may be too small (e.g., when
controlling a USRP X410 over its RJ45 port, which typically has an MTU
of 1500, but doing remote streaming over 100 GbE, which typically has an
MTU of 8000 or above).
Depending on the link type used, it may be useful to use
`recv_frame_size` instead (or `send_frame_size`). However, `mtu` is
a true override that will ignore any link settings, whereas
`recv_frame_size`/`send_frame_size` are hints for the underlying link
setup, and may not be honoured.
Use this like any other stream argument:
```cpp
uhd::stream_args_t s_args("sc16", "sc16");
s_args.args = uhd::device_addr_t("mtu=8000");
auto streamer = my_rfnoc_graph->create_rx_streamer(1, s_args);
```
The relevant manual pages are also updated.
Add a new section to the changelog regarding changed bitfile
behavior, specifically regarding the crossbar changes between
radio and replay block connections of the x440_X4_400 bitfile.
Change the standard bitfile description in manual to reflect
changes in x440_X4_400 bitfile behaviour changes. Add comment
to x440_X4_400 config regarding how to revert changes.
Update Changelog
- Add mention of new RFNoC OOT block repository to changelog.
Add link to RFNoC OOT block github repository to README.
Update Readme with reference to new OOT block repo
Update Manifest
Co-authored-by: Niels Garibaldi <niels.steffen.garibaldi@emerson.com>
Co-authored-by: Marian Koop <marian.koop@emerson.com>
Change binary installation instructions for Windows to reflect that
installation of Windows USB driver packages is now fully integrated
into UHD installer and this previous post installation step is
no longer needed.
This adds support for the OBX daughterboard, a new daughterboard
compatible with the USRP X3x0 series.
- Includes both UHD and CPLD codebases
- Includes CI hooks
Co-authored-by: Javier Valenzuela <javier.valenzuela@emerson.com>
- Added B206MINI_PRODUCT_ID and extend various defines
to enable B206 support in driver code
- Extend B200 devtest definition to include B206mini
- Extend B200Calibrator class to support B206mini
Co-authored-by: Lars Amsel <lars.amsel@emerson.com>
Co-authored-by: Abhishek Verma <abhishek.verma@emerson.com>
Co-authored-by: Marian Koop <marian.koop@emerson.com>
Removed obsolete workaround for X410 after fixing the NCO reset
mechanism that caused ADC self-cal errors to occur during reopening
of a UHD session when timed tune commands were previously used.
During redesign of the OOT module directory layout, the block YAMLs and
dts files were moved under `rfnoc/`, but the gateware was not. This
causes an inconsistency in the directory layout before and after
installation, making it hard to switch between installed and
not-installed versions of RFNoC modules.
For example, block YAMLs are in `./rfnoc/blocks/*.yml`, and gateware is
in `fpga/gain/rfnoc_block_gain/*`. After installation, block YAMLs are
in `$PREFIX/share/uhd/rfnoc/blocks/*.yml`, and gateware is in
`$PREFIX/share/uhd/rfnoc/fpga/gain/rfnoc_block_gain/*` -- note the
discrepancy.
This fixes two immediate issues:
- When building the X410 example in-tree, the DTS file was not being
found because it used the same finding logic as the gateware source files.
- When building any image core file post-installation, none of the
gateware could be found because it used the same logic for finding
gateware inside the OOT, which is in a different location relative to
the block YAMLs.
By removing the inconsistencies, both these use cases work.
A note on backward compatibility:
- Existing OOT modules already have the issue that building bitfiles
post-install does not work, and that will continue to not work.
However, otherwise, they will keep working as before.
- Because people may have gotten accustomed to specifying the RFNoC OOT
module as the include directory (e.g., `rfnoc_image_builder -I
/path/to/rfnoc-gain`), we allow for this use case, and auto-correct
the include path in this case with some backward compatibility code.
- Building the rfnoc-gain/icores/x410_XG_200_rfnoc_image_core.yml
example image core file now also works, even with older versions of
rfnoc-gain.
This tool was originally written to aid with X3x0 development, prior to
the development of current-day RFNoC. Basically, it's a poor-man's
version of Wireshark.
However, it implements an old version of the network protocol, which is
currently not in use. The tool is therefore obsolete, and our Wireshark
dissectors are a perfectly reasonable substitute. We therefore remove it
from UHD.
This allows sending arbitrary commands to a GPS device. There is no
guarantee that this will do anything useful or safe, and can put the
device in an unknown state. Use at your own discretion!
This lets you control the GPS device as such:
```cpp
auto my_usrp = uhd::usrp::multi_usrp("type=x300");
auto mb_ctrl = my_usrp->get_mb_controller(0);
if (mb_ctrl->has_feature<uhd::features::gps_iface>()) {
auto& gps = mb_ctrl->get_feature<uhd::features::gps_iface());
// We assume you really, really know what you're doing. Look up the
// commands in the GPSDO manual!
const std::string resp = gps->send_cmd("SERV:PHASECO 20.0");
std::cout << resp << std::endl;
}
```
Co-authored-by: Martin Braun <martin.braun@ettus.com>
This introduces a behavioural change in recv() (for RFNoC devices; older
devices are unaffected).
The behavioural changes depend on the way recv() was called:
- nsamps_per_buff > 0, timeout == 0: This is the busy-loop, or polling
use case. This is typically done in application that require best-case
latency.
- OLD CODE: Before this change, the streamer would artificially
increase the timeout value to 1ms (in order to increase the chance
of catching an overrun or late error).
- NEW CODE: After this change, the timeout of 0 is applied everywhere.
This means that if a timeout occurs while calling recv(), it is not
sufficient to call recv() again with a zero-timeout, zero-nsamps
value (see next case) to detect what error occurred.
- nsamps_per_buff == 0, timeout == 0: Within niuhd, this was used to
determine the error code if a regular call to recv() failed to
receive all expected samples. The assumption was that calling recv()
ones with these values (all zero) would suffice to figure out what the
problem was (i.e., if an overrun or other error had occurred). However,
this behaviour was never documented or declared to be valid!
- OLD CODE: In the old code, the timeout was artifically increased to
1ms, even if we would never process any packets. This was used to
force a short "sleep" of the recv call, which would increase the
chance that outstanding errors (overruns or lates) would be made
available to the recv() thread. However, if a timeout would occur,
then we would report back ERROR_CODE_NONE to the user, because they
were requesting zero samples anyway.
- NEW CODE: After the change, the timeout is not increased to 1ms any
longer, but the timeout-scrubbing behaviour is retained. Because we
don't artificially let the thread sleep, there is increased risk
of missing outstanding errors. If the intention was to always catch
those, call recv() with a non-zero timeout!
- nsamps_per_buff == 0, timeout > 0: This should be the right call to
"catch" any outstanding errors (overruns, lates) with an arbitrary
amount of waiting time.
- OLD CODE: Ironically, before this change, the code would fix the
timeout to 1ms, even if a bigger timeout was requested.
- NEW CODE: The desired timeout is applied, even though no packets
will be processed. This allows the call site, if they don't care
about latency, to increase the sleep duration to a safe margin.
- nsamps_per_buff > 0, timeout > 0: This is the normal streaming case,
and this remains unchanged.
On top of the changes to the RX streaming behaviour for RFNoC devices,
the documentation for recv() was made more detailed to better explain
the contract around recv().
Some background:
- In a2f10eed, a change was made to bump the minimum timeout to 1ms to
increase the chance that errors are propagated back the call site.
However, there was never a guarantee in the UHD API that recv() with
zero samples, zero timeout would return all errors.
- This change had the effect that recv() would return with
ERROR_CODE_TIMEOUT if nothing was available, which is also undesired.
So in 0382a1c, a change was made to fix the timeout to 1ms for
nsamps_per_buff == 0, regardless of the desired timeout.
This became possible with the new dependency on C++17, which added std::
gcm() and std::lcm(). The standard library has some advantages over our
version (e.g., constexpr) but most importantly, it allows us to remove
the (version dependent!) Boost dependency in math.hpp.
This breaks the public API: `uhd::math::{gcd,lcm}` were defined in the
public header uhd/utils/math.hpp.
- images: update manifest
- uhd: update changelog and version string
- debian: update changelog and installer version
Signed-off-by: Steven Koo <steven.koo@ni.com>