aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib
Commit message (Collapse)AuthorAgeFilesLines
* cmake: Replace CMAKE_{SOURCE,BINARY}_DIR with UHD_*_DIRMartin Braun2021-09-103-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | See the CMake 3.8 documentation on these two variables: https://cmake.org/cmake/help/v3.8/variable/PROJECT-NAME_SOURCE_DIR.html https://cmake.org/cmake/help/v3.8/variable/CMAKE_SOURCE_DIR.html Under normal circumstances, these two are identical. For sub-projects (i.e., when building UHD as part of something else that is also a CMake project), only the former is useful. There is no discernible downside of using UHD_SOURCE_DIR over CMAKE_SOURCE_DIR. This was changed using sed: $ sed -i "s/CMAKE_SOURCE_DIR/UHD_SOURCE_DIR/g" \ `ag -l CMAKE_SOURCE_DIR **/{CMakeLists.txt,*.cmake}` $ sed -i "s/CMAKE_BINARY_DIR/UHD_BINARY_DIR/g" \ `ag -l CMAKE_BINARY_DIR **/{CMakeLists.txt,*.cmake}` At the same time, we also replace the CMake variable UHD_HOST_ROOT (used in MPM) with UHD_SOURCE_DIR. There's no reason to have two variables with the same meaning and different names, but more importantly, this means that UHD_SOURCE_DIR is defined even in those cases where MPM calls into CMake files from UHD without any additional patches. Shoutout to GitHub user marcobergamin for bringing this up.
* uhd: mpm: Expose filesystem version information on MPM treeLane Kolbly2021-09-081-0/+6
| | | | | This allows UHD clients to determine, for example, whether the currently loaded filesystem is up-to-date.
* python: multi_usrp: Fix overloaded function definitionMartin Anderseck2021-09-081-1/+1
| | | | | Fix function definition set_rx_iq_balance so that Python can reach the overloaded C++ function. There was a copy & paste error in there.
* radio: Improve log messages for non-implemented correctionsMartin Braun2021-09-082-5/+8
| | | | | This modifies some log messages or exception strings when using auto-correction APIs that are not supported by the underlying device.
* rh: Fix auto DC-offset correction and auto-IQ balance APIsMartin Braun2021-09-082-7/+1
| | | | | | | | N320 doesn't have an automatic RX IQ balance correction, so that API is removed. The auto-DC offset correction was calling into the manual DC offset correction code, which means auto-DC offset correction was never enabled for N320.
* x300: Fix MAX_RATE_1GIGE valueMartin Braun2021-09-071-1/+1
| | | | It held the same value as MAX_RATE_10GIGE due to a typo.
* mpmd: Add discoverable feature for trig i/o modeGrant Meyerhoff2021-09-022-1/+43
|
* uhd: transport: Avoid exceptions in disconnect_receiver()Aaron Rossetto2021-08-311-10/+10
| | | | | | | | | | | | | | | | | | | | inline_io_service::disconnect_receiver() uses the recv_link_if parameter as a key into the _recv_tbl map. In some error cases, notably when an underlying link timeout occurs when setting up a transport, that key may not exist in the table. Attempting to index the table by that non-existent key causes an std::out_of_range exception to be thrown. However, in the aforementioned error case, disconnect_receiver() is called as part of a destructor of an object that is in one of the stack frames being unwound as the timeout exception is in flight. Throwing an exception while one is in flight ultimately causes the C++ runtime to terminate the process. (Generally, throwing an exception in a destructor, unless caught within the destructor, is considered a bad practice for this very reason.) This PR modifies disconnect_receiver() to check for the existence of the entry in the map and bypass the access if it is not present, thus preventing the exception from being thrown in this function which is invoked from another object's destructor.
* rfnoc: duc: Fix frequency range for DUC blockMartin Braun2021-08-302-6/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The tuning range of the DUC depends on the output sample rate (which is larger), but it was using the input sample rate. This was causing a bug where for Tx, the DSP tuning range was limited when using multi_usrp API, and thus would not allow to DSP-tune beyond the current sampling rate. In this patch, we also re-use the existing calculation of the sampling rate, and harmonize that code between duc_block_control and ddc_block_control. Consider the following Python REPL code: >>> import uhd >>> U = uhd.usrp.MultiUSRP('type=x300') >>> U.set_rx_rate(10e6) >>> U.set_tx_rate(10e6) >>> # Creating a streaming is required, or the input rate will not be >>> # set: >>> S = U.get_tx_stream(uhd.usrp.StreamArgs("fc32", "sc16")) >>> treq = uhd.types.TuneRequest(1e9) >>> treq.rf_freq = 1e9 >>> treq.dsp_freq = 50e6 >>> treq.dsp_freq_policy = uhd.types.TuneRequestPolicy.manual >>> treq.rf_freq_policy = uhd.types.TuneRequestPolicy.manual >>> tres = U.set_rx_freq(treq, 0) >>> print(str(tres)) Tune Result: Target RF Freq: 1000.000000 (MHz) Actual RF Freq: 1000.000000 (MHz) Target DSP Freq: 50.000000 (MHz) Actual DSP Freq: 5.000000 (MHz) >>> # Note the last two lines: The *target* DSP freq was already clipped >>> # to 5 MHz. These lines show 50.0 MHz when this patch is applied. This bugfix is accompanied some related changes: - The unit test is amended to verify the behaviour - The API documentation is amended with details on its behaviour
* python: Add new method bindings to noc_block_baseAaron Rossetto2021-08-301-0/+8
| | | | | This commit adds `get_src_epid()` and `get_port_num()` method bindings to the Python bindings for `noc_block_base`.
* cmake: Add check for libatomic linking requirementMartin Braun2021-08-271-0/+15
| | | | | | | | | | Some archs require linking against libatomic, others don't. We add some CMake code that checks for libatomic.so requirement if: - We are not on MSVC, AND - Compiling std::atomics code would cause a linker error. We then check for the existence of libatomic.so, and fail if we can't find it.
* uhd: Remove Boost version checks for Boost 1.61Martin Braun2021-08-241-19/+4
| | | | | UHD requires Boost 1.65, so checks for Boost 1.61 will always be satisfied.
* cmake: remove duplicate entry in LIBUHD_PYTHON_GEN_SOURCEMichael Dickens2021-08-201-5/+0
| | | | Closes: https://github.com/EttusResearch/uhd/issues/478
* uhd: streamer: Restore original recv(0) semanticsAaron Rossetto2021-08-201-0/+32
| | | | | | | | | A recv() of zero samples on an RX stream should return immediately (i.e., without respect to the timeout and regardless of the availability of samples), surfacing any stream error conditions via metadata. This convention was broken in a2f10ee9, causing a recv() of zero samples to wait for the entire timeout period and then return ERROR_CODE_TIMEOUT if no samples are available. This commit restores the desired semantics.
* X300: Initialize struct variable before using itMartin Anderseck2021-08-201-1/+1
| | | | | | | In x300_eth_mgr.cpp the variable init is created but not initialized. Only some of the variables within the struct are then set before init is assigned to a different variable. Initialize the variable to prevent unexpected values.
* lib: transport: Mark typecast as intendedMartin Anderseck2021-08-171-1/+2
| | | | | Remove warning about potential data loss in VS due to typecast by marking it as intended.
* lib: transport: Initialize _hshake_args_serverMartin Anderseck2021-08-171-1/+1
| | | | | Initialize _hshake_args_server to safely use this struct and its contents in line 70.
* B200: Fix overflow handlingmichael-west2021-08-161-14/+9
| | | | | | | - Use FPGA images with fixed sc12 converter. - Properly flush channels and restart streaming in the case of an overrun. Signed-off-by: michael-west <michael.west@ettus.com>
* lib: rfnoc: Make implicit typecasts explicitMartin Anderseck2021-08-101-4/+5
| | | | | | Fix implicit typecasts that could potentially lose data. Doing this to show that these typecasts are done on purpose (and to resolve warnings from VS).
* lib: rfnoc: Change enum node_type to enum classMartin Anderseck2021-08-101-23/+25
| | | | | | Fix the "Enum.3: Prefer class enums over "plain" enums" warning for the node_type enum and update the calls to the enumerators as proposed by the C++ Core Guidelines.
* n3x0/e3x0: Remove reference to "master FP-GPIO radio"Martin Braun2021-07-302-2/+0
| | | | | | | | | In days of yore, before we had evolved RFNoC to the UHD 4.0 state, only one radio on N310 was able to drive the front-panel GPIOs. With the introduction of the UHD 4.0 GPIO API, we have fine-grained control for every pin who may drive it. This makes this constant obsolete, and we remove it to avoid confusion. Besides, these two `constexpr` values where being used nowhere.
* python: rfnoc: Change reference type for noc_block_base exportMartin Braun2021-07-231-54/+64
| | | | | | | | | | | | | By changing the type for accesses to noc_block_base calls in the Python from sptr& to a simple reference (&), we fix the "holder type" issues that crop up when trying to use radio_control from multi_usrp, which returns access to the block as a reference rather than a `sptr`. The error message seen without this fix always contains this string: Unable to cast from non-held to held instance (T& to Holder<T>) (The exact message depends on the API call made).
* uhd: Fix usage of std::abs with template parametersMartin Braun2021-07-231-1/+1
| | | | | | | | | `std::abs` is only a templated function, when dealing with complex numbers. For real values, it is an overload. There is no documented standard way to use `std::abs<double>()` for real-valued arguments. We therefore remove all usages of `std::abs<>()` and replace them with `std::abs()` where they were taking a real-valued argument.
* b200: Move the B200 radio control core into usrp/b200/Martin Braun2021-07-207-25/+24
| | | | | | | | | | | | This serves two purposes: - This file no longer goes into the compiled DLL if B200 is disabled - Discourage use of this file for new devices, making it clear that this architecture is no longer used The file itself is left untouched, only the class is renamed from radio_ctrl_core_3000 to b200_radio_ctrl_core. Note: In UHD 3, this file was also used by N230.
* dbsrx: Fix issue with loop variableMartin Braun2021-07-201-3/+4
| | | | | | In 26cc208, we accidentally added an `auto` into a loop, making the loop variable's scope local. However, this variable lives outside this for loop.
* rfnoc: allow find_blocks to search by device number or block count.Lars Amsel2021-07-201-3/+3
| | | | | | | | | | | | | In current implementation it is not possible to find all blocks of a device by calling find_blocks("0/"). The same is true for the block count. This is caused by the valid block id regex which requires a block name. This regex is used to validate the block name as well as to match block ids in search. This fix looses the requirement for the block name to allow searches by device number and block count and also extends the is_valid_block_id method to require the block name match to be non empty (which restores the previous behaviour at this point).
* host: Add static_assert to prevent meta_range_t(0,0)Lane Kolbly2021-07-144-8/+8
| | | | | | | meta_range_t(0,0) actually calls the iterator-based constructor for meta_range_t, which is almost certainly not the intended constructor for that call syntax. Therefore, we add a static_assert to prevent such usage, and fix all failing instances.
* lib: Add various missing includesMartin Braun2021-07-142-0/+3
|
* uhd: Replace boost::thread::id with std::thread::idMartin Braun2021-07-143-4/+5
| | | | | | | | The Boost version is identical to the std:: version (which is available since C++11) and thus is no longer needed. Because of implicit includes, this breaks compilation in other parts. Appropriate includes were added there also.
* core: remove boost::math in favor of std cmathMichael Dickens2021-07-062-13/+16
| | | | | | | | | | | | | | | | | | | | | | YA Boost removal!!! Justification --- const int if_freq_sign = boost::math::sign(fe_conn.get_if_freq()); _dsp_freq_offset = if_freq * (-if_freq_sign); // boost::math::sign : 1 if x > 0, -1 if x < 0, and 0 if x is zero. // ==> if if_freq_sign > 0 then * by -1 else +1 (effectively) // std::signbit : true if arg is negative, false otherwise // ==> need 'not' of input argument to invert for same result as prior algorithm double fe_if_freq = fe_conn.get_if_freq(); if (!std::signbit(fe_if_freq)) { if_freq *= -1.0; } --- The above should result in the same algorithm except possibly if fe_if_freq is exactly 0.0 in which case the results might be off by the sign (+0.0 versus -0.0).
* cmake: remove redundant includeMichael Dickens2021-07-061-1/+0
|
* cmake: correctly set and unset any CMAKE_REQUIRED variablesMichael Dickens2021-07-062-7/+7
|
* x3xx: Fix x3xx fpga image namemattprost2021-06-251-1/+1
|
* mpm: Bump MPM compat version to 4.0Lane Kolbly2021-06-241-1/+1
|
* uhd: Remove includes of list_of.hpp where appropriateMartin Braun2021-06-249-9/+0
| | | | This Boost header is included in some places, despite not being used.
* uhd: Remove all occurences of boost::math::*round()Martin Braun2021-06-2432-101/+104
| | | | | | | Its behaviour is almost identical to std::lround, which we use instead. The only downside of std::lround is that it always returns a long, which we don't always need. We thus add some casts for those cases to make the compiler happy.
* b200: flush receive buffer after getting an overflowMatthew Crymble2021-06-241-1/+3
|
* b200: temporary change to remove stream restart after overflowMatthew Crymble2021-06-241-3/+8
|
* uhd: Use chain's block channel to get power ref keysGrant Meyerhoff2021-06-231-2/+2
|
* fixup! zbx: Fix clang compiler warningsMartin Braun2021-06-231-4/+0
| | | | | The TRACE message is repeated in the zbx_lo_ctrl object and is thus not worth carrying the _chan and _trx attributes.
* lib: deps: Upgrade vendor version of Pybind11 to 2.6.1Martin Braun2021-06-2326-751/+1743
| | | | | | | | | | | | | | | | | | | | | | - Copied include/pybind11 directory over from source repo - Also re-ran remove_comments.py as before This fixes this warning on newer Python libraries: .../internals.h: 200:9: warning: 'PyEval_InitThreads' is deprecated [-Wdeprecated-declarations] PyEval_InitThreads(); ^ /usr/include/python3.9/ceval.h:130:1: note: 'PyEval_InitThreads' has been explicitly marked deprecated here Py_DEPRECATED(3.9) PyAPI_FUNC(void) PyEval_InitThreads(void); ^ /usr/include/python3.9/pyport.h:508:54: note: expanded from macro 'Py_DEPRECATED' #define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__)) It also obviates the need for patches to Pybind11 to silence clang warnings.
* transport: Fix compiler warning in nirio_linkMartin Braun2021-06-221-2/+0
| | | | | | Remove unused variables. These variables were doubly problematic: They referenced the boost:: namespace, but this file had no more boost includes.
* lmx2572: Fix compiler warningMartin Braun2021-06-221-3/+2
| | | | Unused private field _mux_state.
* debug_dboard: Fix compiler warningMartin Braun2021-06-221-1/+1
| | | | Superfluous 'this' capture.
* zbx: Fix clang compiler warningsMartin Braun2021-06-226-44/+19
| | | | | | | | - Missing override - Superfluous 'this' lambda capture - Register state in zbx_cpld_ctrl was being initialized too late (this is actually a bug depending on compiler version) - Remove lots of unused fields from experts
* zbx: Fix compilation on clang-10Martin Braun2021-06-223-8/+5
| | | | | | The ostream<< overloads where in the wrong namespace to be found by the expert framework. Other compilers are more forgiving; not so clang 10. This enables compilation on that compiler.
* x3xx: Improve image loaderMartin Braun2021-06-221-27/+44
| | | | | | | - When specifying a file path, no longer infer the FPGA type for the logging from the image that is currently loaded. - Use sanitize product names for ni-2974 everywhere were appropriate - Remove some usages of boost::format that weren't doing anything useful
* usrp2: Use explicit template type for std::min<T>StefanBruens2021-06-221-1/+1
| | | | Signed-off-by: Aaron Rossetto <aaron.rossetto@ni.com>
* usrp2: Replace boost::math::iround/math::sign with std::lroundStefanBruens2021-06-221-5/+5
| | | | | | | | | Instead of multiplying zone with the sign repeatedly just make the zone a signed value. See #437, #438 Signed-off-by: Aaron Rossetto <aaron.rossetto@ni.com>
* usrp2: Apply minor cleanups to Boost usage in usrp2Martin Braun2021-06-181-9/+8
| | | | | | | - Inconsistent usage of asio:: or boost::asio:: (now uses the latter consistently) - Removed some usage of boost::format() where it really didn't add any value