aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib
Commit message (Collapse)AuthorAgeFilesLines
* uhd: Create discoverable feature registry implementationLane Kolbly2020-06-254-0/+89
| | | | | | Classes which want to implement discoverable_feature can simply inherit from this registry and get access to an ergonomic map-backed registry of features.
* mpmd: Increase default long timeout to 30 secondsSteve Czabaniuk2020-06-221-2/+2
| | | | | Note: timeouts were occurring on n310 due to an increase in daughterboard re-initialization time.
* multi_usrp: Assert that edge_lists are non-empty before accessingSteve Czabaniuk2020-06-221-0/+2
| | | | | The edge_list for a given rx/tx chain should never be empty so this explicitly performs that check, which prevents a potential bad access.
* python: Add FFT RFNoC block controller bindingsAaron Rossetto2020-06-181-0/+46
|
* rfnoc: Augment FFT RFNoC block controllerAaron Rossetto2020-06-181-30/+120
| | | | | | | This commit augments the existing FFT RFNoC block controller with C++ functions through which the block can be configured, as well as adding range checking to the various properties that sit atop the FFT RFNoC block registers.
* cmake: Fix warning finding libusbMartin Braun2020-06-171-1/+1
| | | | | | | | | | 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.
* python: radio_control: Explicitly import ALL_CHANS into Python bindingsMartin Braun2020-06-151-1/+4
| | | | | This avoids a dynamic linker error by copying the ALL_CHANS value into the the Python bindings before using it.
* uhd: cal: Fix function binding in Python cal data container classLars Amsel2020-06-111-1/+1
|
* filter API: Fix Python bindings and multi_usrp callsMartin Braun2020-06-102-6/+5
| | | | | | | | | | | 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.
* multi_usrp: Various multi_usrp_rfnoc fixesmichael-west2020-06-101-134/+158
| | | | | | | | | | | | | - 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>
* X300: Fix get_time_source()michael-west2020-06-101-0/+2
| | | | | | Store time source in set_time_source() call. Signed-off-by: michael-west <michael.west@ettus.com>
* MPMD: Fix RPC call to get GPIO sourcemichael-west2020-06-101-1/+1
| | | | Signed-off-by: michael-west <michael.west@ettus.com>
* x300: Enable power reference APIMartin Braun2020-06-101-2/+63
| | | | | | | | | 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.
* radio_control: Provide default implementations for ref power APIsMartin Braun2020-06-102-22/+47
| | | | | | | | 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.
* python: Add __repr__, property bindings to NocBlockBaseAaron Rossetto2020-06-091-5/+17
| | | | | | | | | | | | | | | | | | | | | 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
* python: Add null RFNoC block controller bindingsAaron Rossetto2020-06-091-0/+27
|
* python: Add vector IIR RFNoC block controller bindingsAaron Rossetto2020-06-092-1/+27
|
* python: Add radio RFNoC block controller bindingsAaron Rossetto2020-06-092-1/+171
|
* python: Add FIR filter RFNoC block controller bindingsAaron Rossetto2020-06-091-0/+23
|
* python: Add Fosphor RFNoC block controller bindingsAaron Rossetto2020-06-091-0/+66
|
* python: Add DUC RFNoC block controller bindingsAaron Rossetto2020-06-091-0/+31
|
* python: Add DDC RFNoC block controller bindingsAaron Rossetto2020-06-091-0/+32
|
* python: Add block controller factory utilityAaron Rossetto2020-06-091-0/+30
| | | | | | | | | | | | | | | 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)
* b200: Enable power calibration APIMartin Braun2020-06-032-19/+98
| | | | | | 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.
* multi_usrp: Fix get_tx_freq() for RFNoC devicesMartin Braun2020-05-291-2/+8
| | | | | | | | | | | | | | | | 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.
* rfnoc: Add Add/Sub RFNoC block supportAaron Rossetto2020-05-282-0/+79
|
* rfnoc: Add support for Split Stream RFNoC blockAaron Rossetto2020-05-282-0/+110
| | | | | | | | 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.
* rfnoc: Add USE_MAP prop/action forwarding policyAaron Rossetto2020-05-281-17/+61
| | | | | | | | | | | | This commit adds a new forwarding policy for properties and actions, USE_MAP. This forwarding policy causes the node to consult a user-provided map to determine how to forward the property or action. The map's key is the source edge of the incoming property or action, while the value is a list of destination edges to which the property should be propagated or action should be forwarded. It allows clients to construct sophisticated forwarding behaviors for specialized blocks, such as a split stream block that needs to forward properties and actions only to specific output edges based on the incoming edge.
* rfnoc: Fix _has_port() port existence checkAaron Rossetto2020-05-281-2/+2
| | | | | | This commit fixes a bug in node_t::_has_port(), which was using the wrong comparison operator to determine if the instance value in the incoming res_source_info parameter is within a valid range.
* cal: Minor fixes in power container, add unit testMartin Braun2020-05-261-1/+1
| | | | | | | - min_power and max_power arguments were swapped. They were always called correctly, so this is more of a documentation fix. - Add a unit test for the case where power values are not regular, which is the normal case with real data.
* multi_usrp: Amend get_usrp_{rx,tx}_info() to include cal keysMartin Braun2020-05-202-0/+28
| | | | | | This adds two more keys to the dictionary return from get_usrp_{rx,tx}_info() which can be used to query the calibration key and serial.
* rfnoc: radio: Add APIs to query cal keysMartin Braun2020-05-202-0/+12
| | | | | | | | This allows asking the radio for the keys it uses to read/write its calibration data. By querying radio_control::get_{rx,tx}_power_ref_keys(), the return values can be used to access uhd::usrp::cal::database::read_cal_data().
* fixup! lib: Add power cal managerMartin Braun2020-05-201-1/+2
| | | | | | - The tracking mode was not set to power when calling set_power() - The data consistency check had an inverted logic, thus always printing a warning
* cal: database: Add option to register flash cal callbacksMartin Braun2020-05-201-3/+51
| | | | | | | | | | | This adds the possibility to read cal data from flash/EEPROM by adding callbacks to the database. Unlike the RC and FILESYSTEM data, this is very device-specific, but we can let devices register callbacks in the database so that reading cal data from flash can use the same APIs as from RC or filesystem. Note that this also gives a convenient way to inject call data during unit tests, if desired.
* lib: Refactor cal::database for more efficient function lookupMartin Braun2020-05-201-24/+41
| | | | | | | This is a refactoring with no functional change. Instead of hard-coding the lookup of RC and FILESYSTEM data, we loop over a structure holding those. This will make it easier to add more types of data lookup in the future.
* rfnoc: Add Vector IIR RFNoC block supportAaron Rossetto2020-05-192-0/+174
|
* twinrx: Provide power cal IDMartin Braun2020-05-193-0/+19
| | | | | | | | | | | | | | | | | | Note that the TwinRX has a different behaviour if two or one channel are enabled. For that reason, TwinRX requires 8 different sets of calibration data: - For one vs. two channels - For channel 0 and channel 1 - For RX1 and RX2 Since every combination of these settings is possible, that results in 2^3 == 8 combinations. The choice of RX1 vs. RX2 is encoded in the calibration key. The choice of one vs. two channels is also encoded in the calibration key, and is derived using an expert node. Channel 0 and 1 are assumed symmetric, thus, the encoding for those happens in the calibration serial.
* basic/lf: Add IDs for calibration purposeMartin Braun2020-05-191-0/+4
| | | | | | | | This adds a property tree node "id" next to the "name" node. It is always either basicrx/lfrx/basixtx/lftx based on the daughterboard. The x300_radio_control uses this to help distinguish daughterboards for calibration's sake, where length strings, potentially with special characters, are too unwieldy.
* lib: pwr_cal: Fix power indexingMartin Braun2020-05-191-16/+28
| | | | | | | | | | | | | The pwr_cal::get_gain() method previously held the incorrect assumption that power values per frequency would be equidistant, i.e., be at the same indices as the gain values. Due to the frequency-dependent nature of the hardware, this is not a valid assumption (if that were the case, frequency-dependent calibration would be unnecessary). This changes get_gain() to not rely on that assumption. Note that it requires doing some more rounding: The bilinear interpolation method uses requires coordinates to be on a rectangular grid. This snaps the power values onto a single coordinate.
* lib: Add power cal managerMartin Braun2020-05-193-0/+426
| | | | | This is a utility class that can be used by USRP or daughterboard drivers to tie power calibration into their respective drivers.
* rh: Remove unnecessary register read during set frequencyCiro Nishiguchi2020-05-151-3/+0
| | | | | This unnecessary reads causes timed commands on rhodium to block. It also makes it behave differently based on whether logging is enabled.
* rfnoc: Use large timeout for reads when timed commands existCiro Nishiguchi2020-05-151-8/+24
| | | | | If a timed command is in the queue, writes use a large timeout. Changing reads to do the same.
* uhd: Fix infinite recursion in N3xx timed commandsCiro Nishiguchi2020-05-124-31/+0
| | | | | | The implementation of set_command_time was calling wb_iface set_time, which in turn makes a recursive call to set_command_time. This removes the erroneous recursive call.
* multi_usrp_rfnoc: Misc fixesMichael West2020-05-121-6/+7
| | | | | | | | | - Change get_master_clock_rate() to return tick rate instead of sample rate - Make warning of incompatible rates conditional so it does not display for first channel Signed-off-by: Michael West <michael.west@ettus.com>
* TwinRX: Remove decimation from frontendMichael West2020-05-123-31/+7
| | | | | | | | | | | | | | The decimation in the rx_frontend_gen3 was added to reduce the bandwidth between the Radio and the DDC due to the limitation in bandwidth over the crossbar for dynamically connected blocks. The default FPGA image for the X300 now has a static connection between the Radio and DDC, so this is no longer necessary. This change allows the TwinRX receive channels to be time aligned with channels from other daughterboards so they can be used in the same streamer. Signed-off-by: Michael West <michael.west@ettus.com>
* DUC/DDC: Add variable time incrementMichael West2020-05-122-21/+26
| | | | | | | | | Sets time increment based on tick rate and sample rate instead of assuming one tick per sample. Defaults to legacy behavior. Minor compat number bumped on DUC and DDC blocks. Signed-off-by: Michael West <michael.west@ettus.com>
* uhd: Add reference power level API to multi_usrp and radio_controlMartin Braun2020-05-111-0/+2
| | | | This adds the has_* API calls to the Python API.
* Remove remaining Python 2 referencesMartin Braun2020-05-0726-26/+26
| | | | | | | This changes two things in all applicable files: - Remove imports from __future__ - Change default shebangs from /usr/bin/env python to /usr/bin/env python3
* cores: Fix rx_vita_core_3000 assertion error in issue_stream_cmd()Martin Braun2020-05-051-3/+7
| | | | | | | | | | | | | | | | The current code had an assertion UHD_ASSERT_THROW(stream_cmd.num_samps <= 0x0fffffff); which would check that num_samps in a stream command don't exceed the counter depth in the FPGA. However, this is only relevant if the stream command is not "continuous" or "stop". num_samps could be unitialized, and randomly have a value larger than the maximum, and the assertion could trigger even though the value in num_samps is irrelevant. The new assertion checks for the correct case, and has a more verbose error message.
* multi_usrp: Remove rfnoc-specific code from multi_usrp.cppMartin Braun2020-04-281-38/+0
| | | | | This implementation of multi_usrp is only for non-RFNoC devices; the section was thus dead code.