| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Current implementation needed manual interaction to calibrate each
antenna. More sophisticated setups are able to switch between channels
and antennas programmatically.
This commit introduces a base class that handle the switch behaviour. The
previous implementation moved to a ManualSwitch class which is the
default switch. Without any options the previous flow remains unchanged.
A new class is able to handle NI switch models. The switch port can
be given via options parameter (comA is default). The channels are connected
in ascending order. The user has to ensure that the cable setup matches
the order given for channels and antennas.
Co-authored-by: Martin Braun <martin.braun@ettus.com>
|
|
|
|
|
|
|
|
|
|
| |
UHD has a custom file to find libusb. This fixes a warning coming from
that file caused by the fact that we're looking for a package called
LIBUSB, but the file was called FindUSB1 (i.e., we're expecting
a package name of USB1).
Common CMake calls were also moved to lowercase for CMake coding
guidelines consistency.
|
|
|
|
|
|
|
|
|
| |
The existing SPI core (simple_spi_slave.v) was limited to 32 bit. This
commit adds a second spi core with capability to transfer up to 64 bits
while keeping the same amount of resources when using generic setting
MAX_BITS = 32. Furthermore, the new module aligns mosi and miso with the
edges of sclk. The register stages were not aligned in the existing
version.
|
|
|
|
|
|
|
| |
During recreation of block diagrams any RTL modules will be kept in
hidden directories within the build directory. Updates of the RTL
sources might not be taken into account. Solution is to remove Xilinx's
hidden project directories before calling vivado.
|
|
|
|
|
|
|
|
|
| |
Add chapter to explain usage of supported switch classes which
handle connection of DUT and measurement devices. Documentation
is done for ManualSwitch (default) and NI switch for devices that
can be used by the niswitch Python package.
Co-authored-by: Martin Braun <martin.braun@ettus.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Add UHD_ADD_PYTEST() CMake macro
- Add CMake code to tests/CMakeLists.txt to auto-run all registered
Python unit tests
- Add a token unit test (it replicates parts of ranges_test.cpp)
The way Python-based unit tests are implemented in UHD is that they can
import uhd, and then operate on the module as usual.
Writing unit tests in Python instead of C++ can have multiple
advantages:
- If they test PyBind-wrapped C++ code, they can test both the binding
and the underlying C++ code at once
- Writing unit tests in Python may be more concise
|
|
|
|
|
| |
This avoids a dynamic linker error by copying the ALL_CHANS value into
the the Python bindings before using it.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The pca953x driver introduced a change for how the "label" property
populates. Instead of using the device model, it gives a device specific
name. As a replacement, use device/name. This affects the tca6424
and tca6408.
For the kernel change that causes this see:
https://github.com/torvalds/linux/commit/5128f8d4450159f59565d247437d3bedda3994cb
|
| |
|
| |
|
|
|
|
|
|
| |
This PR applies antenna channel settings before available calibration
data, and moves initialization code to setup_device, returning necessary
settings in a tuple.
|
|
|
|
| |
Before this, the python_api_test didn't assert an error when it failed.
|
|
|
|
|
|
|
|
| |
One of the devtests (the python_api_test) gets skipped without failures
if the uhd module can't be loaded. However, this can mask errors if the
uhd module can't be loaded because it's broken. This change will verify
if the uhd module should have been loaded, and throw an error if that's
the case.
|
| |
|
|
|
|
|
|
|
|
| |
This is a test that automatically executes API calls. The following
tests were broken:
- clock source: On B200mini, we need to set the time source back to
internal to test the clock source.
- The filter API call tests did not match the API calls themselves
|
|
|
|
|
|
|
|
|
|
|
| |
This fixes the following issues:
- The Python bindings did not declare parents for the various filter
object classes properly. This meant that set_?x_filter wouldn't work,
because the user would pass a specific type (e.g., analog_filter_lp),
but the class would not recognize it as a filter_info_base.
- In multi_usrp.cpp, filter names are also property tree paths to make
them unique. However, the setters and getters for filters would then
prepend the FE path again, thus breaking those calls.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Fix serial and PID info in get_usrp_xx_info methods
- Make defaults match multi_usrp base class
- Make support of ALL_MBOARDS and ALL_CHANS consistent across all set
methods
- Make set/clear_time_commands honor the mboard argument
- Fix get_rx_lo_sources() to use rx_chain.block_chan
- Fix typos in get_tx_freq_range that were calling rx functions instead
of tx
Signed-off-by: michael-west <michael.west@ettus.com>
|
|
|
|
|
|
| |
Store time source in set_time_source() call.
Signed-off-by: michael-west <michael.west@ettus.com>
|
|
|
|
| |
Signed-off-by: michael-west <michael.west@ettus.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Power measurements for TX calibration can be done using NI-RFSA devices
and the RFmx SpecAn library. Use "rfsa" as meas_device option for this.
The implementation mimics the behaviour of the "RFMXSpecAn TXP (Basic)"
example.
Signal generation for RX calibration can be done using NI-RFSG devices.
Use "rfsg" as meas_device option for this. The implementation mimics
the behaviour of the "RFSG Frequency Sweep" example.
The device can be selected by passing its name in the option string.
This is only necessary if more than one device of the same family is
installed in the system.
The support is limited to Windows operating System. Drivers for RFSA and
RFSG must be installed as well as the RFmx SpecAn library. The "nimodinst"
Python package must be installed to be able to detect the devices.
The implementation uses ctypes to call into the C-API of the device drivers.
Only the bare minimum to fulfill the calibration requirements is implemented.
|
|
|
|
|
|
|
|
|
| |
This enables the power calbration API for X300 and X310. The
uhd_power_cal.py script will be able to create calibration files for
X300 series USRPs.
The multi_usrp calls *_power_reference will be functional, assuming
there is calibration data available for the given system.
|
|
|
|
|
|
|
|
| |
The various implementations for the reference power APIs are always the
same, assuming the existence of a pwr_cal_mgr object. We therefore store
references to power cal managers in radio_control_impl, which radios can
choose to populate. The APIs then don't have to be reimplemented in the
various radio classes, unless they want to for whatever reason.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commit adds a __repr__ function to the noc_block_base bindings,
which helpfully displays the block's unique ID, e.g.:
>>> block = g.get_block('0/VectorIIR#0')
>>> block
<NocBlock for block ID '0/VectorIIR#0'>
Also added are get_property_ids and set_properties functions, so Python
clients can set block properties by string if desired, e.g.:
>>> block.get_property_ids()
['alpha', 'beta', 'delay', 'max_delay']
>>> block.set_properties('alpha=0.45,beta=0.77,delay=41')
>>> viir = uhd.rfnoc.VectorIirBlockControl(block)
>>> viir.get_alpha(0)
0.45
>>> viir.get_beta(0)
0.77
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commit adds a utility class for use with the Python RFNoC block
controller PyBind bindings which facilitates constructing instances of a
specific block controller type from its noc_block_base base class. This
allows Python code to create and configure specific block controller
instances by calling get_block on a uhd.rfnoc.RfnocGraph object with the
block ID of the block in question and then passing the result into the
constructor method of the block controller, e.g.:
graph = uhd.rfnoc.RfnocGraph("addr=...")
block = graph.get_block(uhd.rfnoc.BlockID("0/DDC#0"))
ddc = uhd.rfnoc.DdcBlockControl(block)
ddc.set_input_rate(10e6, 0)
|
|
|
|
|
| |
This commit returns information on the filesystem and mender artifact
versions to clients of the MPM RPC connection.
|
|
|
|
|
|
|
|
|
| |
Though this information is also returned via usrp_probe, it can be
useful to provide this information to trackers which scrape the
get_device_info RPC call.
The dboard information is split up and cast to string just to
simplify parsing on the receiving end.
|
| |
|
| |
|
|
|
|
|
|
|
| |
Previously, if a write occurred before the FIFO was ready then a
write could hang as the data channel would complete but leave the
address channel in a state where it would never complete. The fix is
to hold off acknowledging on the data channel until the FIFO is ready.
|
|
|
|
|
|
|
|
|
|
| |
- Remove some PyLint issues by aligning the argument list for
SignalGeneratorBase.enable()
- Improve an assertion: Since a valid power level is 0 dBm, we need to
explicitly check max power against None, not 0
- Improve the error message for when no device is found ("signal
generator" instead of "RX measurement device", since the latter is
confusing/ambiguous)
|
|
|
|
|
|
| |
This lets the B200 transmit and/or receive at given reference power
levels. Requirement is that the devices have been separately calibrated
with an external calibration device.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
get_tx_freq(), unlike get_rx_freq(), would not factor in the DSP
frequency. Before, this would happen:
>>> U = uhd.usrp.MultiUSRP("type=x300")
>>> tr = uhd.types.TuneRequest(1e9, 10e6)
>>> res = U.set_tx_freq(tr)
>>> res.clipped_rf_freq
1000000000.0
>>> U.get_tx_freq()
1010000000.0
In other words, the TuneResult object was correct, but the return value
of get_tx_freq() was not. This fixes the issue.
|
|
|
|
|
|
| |
Add DEFAULT_M and DEFAULT_N parameters for rate changing cores.
This allows the host to not need to configure fixed rate change
cores.
|
|
|
|
|
| |
This change allows detection of attempting to execute setupenv.sh
rather than sourcing it, which is required.
|
|
|
|
| |
This is a tool for running power calibration.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
This commit adds a unit test for the split stream RFNoC block.
|
|
|
|
|
|
|
|
| |
The split stream RFNoC block is an RFNoC block that takes in a single
CHDR stream and duplicates it, creating a number of output streams for
each input stream. Consult the split_stream_block_control class header
file for more details on block configuration and behavior, including how
property and action forwarding is handled by the block.
|
|
|
|
| |
This commit adds a unit test for the USE_MAP action forwarding policy.
|