Add convenience factory for making a gain group that has a single
zero-valued element. This factory requires a name, which should
probably be ALL_GAINS, or something similar (these constants are
device-specific).
Using this new make_zero factory in the X300 radio control when we
don't find any gain elements so that our gain groups aren't empty. This
simplifies our later setters/getters because we know that we'll always
have _something_ cached.
Note that we only register this zero value gain group for TX, as our
ADC is registered as a gain element, so our RX gain groups are never
empty.
The difference between the _chdr converters and the _item32_ converters
is that the former do not require item32 boundaries, they do not require
endianness swapping, and they don't use IQ swapping either.
This is possible because the FPGA will do byte-swapping.
The custom copy ctor for dirty_tracked was using the = operator, which
wouldn't necessarily copy the dirty flag. By removing it (and thus using
the default copy ctor), the copied dirty_tracked object now has the same
value *and* dirty flag as the original.
Add the following exception types:
- rfnoc_error
- op_failed
- op_seqerr
- op_timeout
- op_timeerr
- access_error
- It is meant to be used when access violations have taken place,
i.e., when a resource is being accessed without appropriate
permissions.
- resolve_error
- This is a derivative of rfnoc_error, and will be used when a
property resolution fails unexpectedly.
- routing_error
- For use when the framework has path setup issues or general
routing-related errors
This removes the following symbols:
- otw_type_t
- clock_config_t
- Any functions that use those symbols
- Non-standard args from examples (e.g., --total-time is deprecated in
favour of --duration)
- Boost >= 1.58
- CMake >= 3.5.1
- gcc >= 5.4.0
- Clang >= 3.8, AppleClang >= 600
- Python >= 3.5 (Py2k no longer supported)
- Numpy >= 1.11
- C++14 for lib, include may now use C++11 constructs.
- Because there is no more code requiring C++03 syntax, we remove the
include-specific clang-format file
-Added test cases for the 184.32MHz clock rate.
-Removed some extra test cases for 200MHz clock rate in order to
cut down on test time.
-Added DPDK test cases (copied from 10gige and 2x_10gige test cases).
The code was broken when converting from BOOST_FOREACH to a range-based
for loop.
Without this fix, the board initialization would crash with an error
like this:
[ERROR] [DBMGR] The daughterboard manager encountered a recoverable
error in init.
Loading the "unknown" daughterboard implementations to continue.
The daughterboard cannot operate until this error is resolved.
LookupError: KeyError: key "0" not found in dict(i,
N14adf4360_regs_t17prescaler_value_tE)
The old loop didn't have any output, and had an inaccurate timeout. We
now use a timer for a 30 second timeout, and print a . every time we
poll the sensor.
The E31x will always have a valid PPS, because it is generated
internally. The external PPS however is used to drive the ppsloop, which
means the ref_locked sensor can be a substitute for the PPS, but only on
in this case.
This commit also removes some superfluous includes from this example.
The send_waveform() function takes the waveform_proto array and if it
has only 1 channel, explicitly reshapes it to be
(1, waveform_proto.size), or uses np.tile to replicate the
waveform_proto array over X channels. It then proceeds to loop over the
waveform_proto array, but attempts to do so over the channel dimension
instead of looping over the actual samples. This results in sending the
entire waveform_proto array regardless of the duration specified.
The fix is to specify the dimension in which it crops, and not crop in
dimension of the channels.
Usually, devtest is run via make (or ninja), and will use the correct
Python interpreter. When running directly on the command line, it is
important to pick the right Python interpreter so it will work with the
Python API.
Here, we change the default interpreter from Python 2 to 3, because
that's the more common version, and will be the only option for upcoming
UHD 4.0 anyway.
By using the conversion ability to std::map<>, we can make the Python
versions of get_?x_usrp_info() return a dict in Python.
Sample Python session:
>>> import uhd
>>> U = uhd.usrp.MultiUsrp(args)
>>> U.get_usrp_rx_info()
{'mboard_id': 'B200', 'rx_subdev_name': 'FE-RX2', ...}
When updating a component like the FPGA, the timeouts for reclaiming get
disabled, because the update can potentially take a long time, during
which the RPC server might not be available.
There was a bug that didn't re-enable the timeouts. The most common case
where this causes issues was when the Ethernet connection was severed
during FPGA reloading, which could lead to UHD losing connection with
MPM altogether (for example because SFPs would come up with a different
IP address). In that case, MPM would remain unreachable until the next
reboot.
Remove UHD call to elevate thread priority to realtime. Setting all
threads to the same realtime priority can cause the threads to not share
access to the network interface fairly, which adversely affects
operation of the worker threads in UHD.
- Reduce long tests from 3600 seconds to 600 seconds.
- Remove 2xRX@153.6e6 test for N310 10 GbE (not practical).
Signed-off-by: michael-west <michael.west@ettus.com>
Added configuration of version.cpp file so @UHD_VERSION@ would be
properly replaced by the version string and @UHD_COMPONENT@ would
be properly replaced by the component string.
Signed-off-by: michael-west <michael.west@ettus.com>
Added cmake variable to set the component (currently UHD or MPM).
so the banner printed by the log_resource would reference the correct
component. Added accessor function and appropriate calls in log.cpp.
Signed-off-by: michael-west <michael.west@ettus.com>
Provides a more useful error message if the EEPROM cannot be found at
the specified address. Without this change a generic index out of range
error is raised.
Signed-off-by: michael-west <michael.west@ettus.com>