This adds a basic check for the correct format of Doxygen comments.
Since there were comments that started with `//!` and continued in the
next line with `//`, but Doxygen only used the first line, this ensures
that there aren't any such comments anymore. Refer to the coding
guidelines to see the correct format for documentation in the code.
This enables the ref_clk_calibration_iface discoverable feature in
Python. It can be used like this:
```python
mb_ctrl = graph.get_mb_controller(0)
ref_cal = mb_ctrl.get_ref_clk_calibration()
ref_cal.set_ref_clk_tuning_word(0x24a)
word = ref_cal.get_ref_clk_tuning_word()
ref_cal.store_ref_clk_tuning_word(word)
```
This feature is also exposed as a devtest.
The previous value of 20 ms caused spurious timeout errors under load.
The ZBX LO lock consistently completes within 30 ms in integration
testing. 50 ms provides adequate margin without masking genuine LO lock
failures.
After FPGA image reload, the FPGA resets its CHDR sequence counter to
zero. Stale ACKs from the old session can then arrive with a seq_num
matching a pending request in the new session.
Tighten the match check: also require op_code, address, and (for
WRITE/BLOCK_WRITE) data payload to agree. Mismatches are dropped and
ctrl_out_of_sequence is incremented. Add unit tests for both mismatch
cases.
These time functions are specific to libusb1_zero_copy, which is used
for B2xx USB streaming. These functions are rarely used, don't compile
when enabled, and rely on Boost. If we ever need them again, we'll need
to put them back in using std equivalents.
The logging macros are not affected.
This is an API change, because the logging_info object is modified, and
this object is part of uhd::_log::log. However, neither of those objects
are supposed to be used directly, the only correct usage of those is via
the logging macros.
The exception is uhd::log::add_logger(). To not break the add_logger()
API, we create a backward compatibility layer and provide an add_logger()
API call that still supports the old version (that uses
boost::posix_time).
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.
- 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 the DRAM receiver was introduced in the DRAM utils, property
propagation needed to be turned off in the reconnect() method to avoid a
circular and thus unresolvable graph. However if resamplers are in the
graph that leads to the sample rate not being propagated properly and
thus leaving it at 1, so we get far less data than expected. By only
skipping the property propagation in the TX direction both issues are
resolved and this is what this commit does.
Boost threads are no longer used, so this function is no longer
necessary. Because it's in a public header, it's turned into a nop
function and flagged deprecated. Its implementation is removed.
Within the nirio library, the following changes are applied to reduce
the Boost footprint:
- boost::condition is replaced with std::condition_variable
- In some places, this requires shifting from boost::posix_time to
std::chrono
- Note that boost::condition::timed_wait() is replaced with
std::condition_variable::wait_for(), which has a different return
value when used without a predicate (std::cv_status vs. bool).
- boost::thread is replaced with std::thread
- boost::shared_lock (and share_mutex) are replaced with
std::shared_lock
- The "writer lock" becomes a simple std::unique_lock