| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
Add example to demonstrate and test SPI functionality.
|
|
|
|
|
| |
Add SPI Core host implementation for x410 and a discoverable
feature to make it accessible.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This changes the behaviour of ctrlport_endpoint (the register interface
for block controllers) to always check for an ACK after doing a poke or
poll of any kind. Previously, the behaviour was to only check for an ACK
if the policy was set that way, or if the user requested the ACK to be
received.
The problem with the former approach was that if many pokes were
performed without ever requesting an ACK or a poll, the response queue
would fill up without ever getting emptied, eventually draining the
available heap space. Note that this is not a memory leak in the usual
sense, as the response queue was correctly holding on to the response
packets.
With this change, ctrlport_endpoint::wait_for_ack() now receives
a require_ack parameter. If it is false, the behaviour of wait_for_ack()
is changed as follows:
- If the response queue is empty, immediately return with an empty
response payload object.
- Otherwise, continue reading elements out of the response queue until
it is either depleted (in which case the previous rule kicks in), or
we find the ACK corresponding to the command previously sent out.
Note that this replicates the corresponding behaviour in UHD 3 (see
ctrl_iface_impl::wait_for_ack()).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Throughout UHD, we are using a random mix of __FUNCTION__, __func__,
__PRETTY_FUNCTION__, and BOOST_CURRENT_FUNCTION. Note that the first two
macros are non-standard (although many compilers understand them), and
the last requires Boost. __func__ is available since C++11, but is not
the best choice because the C++ standard doesn't require it to be of any
specific value.
We thus define UHD_FUNCTION and UHD_PRETTY_FUNCTION as portable macros.
The former simply contains the undecorated function name, the latter the
expanded function with full signature.
As it happens, our currently supported compilers didn't have any issues
using non-standard macros, so the main fix here is the removal of the
Boost macros and the harmonization of the other macros.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The problem was that TwinRX has a special LED configuration (unlike most
other daughterboards): Since it has two channels, it is possible to
stream RX from both SMA ports. In that case, we would light up both LEDs
in green (which was not happening, only one LED would light up,
depending on which antenna was set last).
This fixes the problem and turns on both LEDs when both channels are
used, and both SMA ports are selected.
Note that the reason for this issue was an incorrect porting of this
code from UHD 3. There, we had separate LED ATR objects per channel.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
GitHub is removing support for using git://. Switch to https.
https://github.blog/2021-09-01-improving-git-protocol-security-github/
Signed-off-by: Steven Koo <steven.koo@ni.com>
|
|
|
|
|
|
|
| |
The E3xx devices have one LO per TX/RX, respectively. That means when
changing the frequency on channel 0, the frequency on channel 1 also
gets changed. The code didn't track this change properly: When setting
channel 1, channel 0's frequency didn't match.
|
|
|
|
|
|
|
|
|
|
| |
The host code was calculating and programming a 32-bit value for the DSP
frequency, but the DDS modules in the FPGA only use the upper 24-bits.
This led to inaccurate frequency values being returned. This change
corrects the resolution of the value on the host side so an accurate
value is returned.
Signed-off-by: michael-west <michael.west@ettus.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
An RFNoC block (like the radio) might require a minimal number of
items in each clock cycle, e.g. the radio has to process
SPC (samples per cycle). Because data in RFNoC is transmitted and
processed in packets, we have to make sure the items inside these
packets are a multiple of the items processed in each cycle.
This commit adds an atomic item size properties which is set by
the radio and adapted by the streamers. The streamers adapt the
SPP property of the radio block controller depending on the MTU
value. This might lead to an SPP value which does not align with
the SPC value of the radio block, hence we add a property resolver
for the atomic item size.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This adds a check in send() and recv() whether or not the streamer is
actually connected. If not, an exception is thrown with the message:
[rx_stream] Attempting to call recv() before all channels are connected!
or
[tx_stream] Attempting to call send() before all channels are connected!
The check is a single boolean flag check, but it does add a branch in
our hot code. Since this event is unlikely, and only happens in badly
configured apps, we will get some help from the CPUs branch prediction
to reduce the additional cost of this check.
|
|
|
|
|
|
|
|
| |
Instead of calculating a tone from its parameter it is also useful
to pass an precalculated signal to be played. This change modifies
the __init__ to take an iq_data as parameter for the internal buffer
and moves the generation of the tone from rate, frequency and amplitude
into a class method. The streamer parameter was deleted (never used).
|
|
|
|
|
|
|
|
|
| |
In UHD 3, we had two sensors names for LO lock on these devices:
lo_lock, and lo_locked. The latter is the more standard, and is checked
in examples like rx_samples_to_file.
In UHD 4, the latter was removed without comment. This adds the sensor
back again and also updates the documentation accordingly.
|
|
|
|
|
| |
This change simply refactors these methods so that the core of the algorithm
is no longer duplicated between them.
|
|
|
|
|
|
|
|
| |
As Github user johnwstanford points out, the DUC calls the argument
'input_rate', which is wrong (and was copy/pasted from the DDC code). By
calling it dds_rate in both cases, we avoid such confusion.
This commit only renames a variable. No changes whatsoever.
|
|
|
|
|
|
|
| |
As Github user dylan-baros points out, the comment is copy/pasted from
the SRPH.
Only comment changes here.
|
|
|
|
|
| |
As Github user johnwstanford kindly points out, the comment was
incorrect.
|
|
|
|
|
|
| |
This fails to link otherwise on macOS
Signed-off-by: Steven Koo <steven.koo@ni.com>
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
This removes the tcp_zero_copy interface, which is not supported by any
USRP.
|
| |
|
|
|
|
|
|
|
| |
This allows constructing a multi_usrp using a string constant:
```
auto usrp = uhd::usrp::multi_usrp::make("type=x4xx");
```
|
|
|
|
|
|
|
|
|
| |
- Referred to E310 as E3x0, but that's wrong. E320 has a different GPIO
bank naming scheme.
- Fails to mention N3x0. This change makes the page mostly
device-agnostic (X410 GPIO control is still elsewhere).
- The first example had a typo (wrong pin was selected in ATR example).
- The second example added nothing, and was removed for clarity.
|
| |
|
|
|
|
|
|
|
|
| |
Clarify that invalid RFNoC graph topology failures are due to an attempt
to access input or output ports that are not connected to anything in
the FPGA.
Signed-off-by: mattprost <matt.prost@ni.com>
|
| |
|
|
|
|
|
|
|
|
| |
The Windows UHD installer binary, generated by e.g. running the PACKAGE
project in the Visual Studio solution generated by CMake, creates two
shortcuts to utilities that are no longer included with the installer:
the USRP2 card burner and USRP-N2xx net burner. This commit removes
these defunct shortcuts.
|
|
|
|
|
|
|
|
|
| |
When creating RFNoC images at least one SEP needs to have ctrl enabled
otherwise one will end up with a non-functional image.
This commit adds a method to the image builder to do plausibility checks
on the configuration. The only check done for now is to verify that there
is at least one SEP with ctrl enabled.
|
|
|
|
|
|
|
|
|
|
| |
When a webpage is accessed via secure HTTP, and that webpage attempts to
address active content via a non-secure URI, most modern browsers will
block the loading of that content as a security precaution. In this
case, the URI to the MathJax JavaScript rendering library was specified
in the Doxygen configuration with an HTTP (i.e., non-encrypted) URI,
thus preventing the browser from loading it and rendering formulae
correctly.
|
|
|
|
|
| |
For RFNoC devices, it now displays "RFNoC capable: Yes", like it did in
UHD 3.
|
|
|
|
|
| |
The path it returned was only valid in UHD 3. Added unit test to
confirm.
|
|
|
|
| |
Add an additional paragraph on back-edges, and when *not* to declare them.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This example would not specify a channel when querying the actual
frequency/bandwidth/gain after setting it. When using the --channels
options like this:
tx_bursts --channels 1 --freq 1e9 [...]
...it would request the frequency of 1 GHz on channel 1, then query the
frequency on channel 0 when reporting the "actual" frequency.
Also removes some boost::format().
|
|
|
|
|
|
| |
Due to a change in Mender, bmaptool is no longer supported for writing filesystem images.
Currently, the only recommended method for writing a filesystem to an SD card is to use dd.
The filesystem can still be updated in place using mender.
|
|
|
|
|
|
|
| |
In C++, variables whose address are taken must be defined somewhere.
PERIPH_BASE had no such definition, so on some compilers/systems caused
a linker error. This commit switches to using enums to prevent this
happening again in the future.
|
|
|
|
|
|
|
|
|
| |
This tests the following graph: DDC -> Replay -> DDC, where the initial
and final blocks are the same (i.e., a loop). This could be useful for
generating and capturing data with the same replay block while testing
a block.
Note that this test will fail if the edge consistency checks are buggy.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
On back-edges, no properties are forwarded, but properties must be
consistent after property resolution. This breaks when the source edge
on a back-edge has an edge property which the destination block does
not. Consider the following graph:
DDC -> Replay -> DDC
where both instances of 'DDC' refer to the same block. Now, assume the
first edge is declared a back edge (in principle, it shouldn't matter).
The DDC block has an edge property `samp_rate` which the Replay block
does not. Therefore, it can't forward this edge property to the Replay
block's input edge property list.
In the consistency check code, we don't check for the existence of edge
nodes, because it is assumed edge properties where either forwarded, or
aligned through some other manner. This leads to a property lookup
failure.
With this fix, we skip the consistency check for edge properties which
don't exist on the destination node. This is safe because the
destination block can not have a property resolver defined for undefined
properties. This means the destination block can either:
- Drop the property. In this case, there is no value in checking
consistency. Even if we could forward edge properties on back-edges,
they would always have the same value.
- Forward the property. In that case, the consistency check would happen
elsewhere in the graph where there's no back-edge.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Add data packet payload field
- Add metadata support
- Add missing management fields (OpsPending, ExtendedInfo).
- Add missing control fields (byte_enable, data, has_time)
- Update offsets for management OpPayload fields.
- Make the field names more consistent, readable, and consistent
with the RFNoC specification.
- Display value of fields in addition to name.
- Fix timestamp, eob, and eov offsets
|
|
|
|
|
|
| |
The ops pending for each operation was stored implicitly in the data
structure. This adds it explicitly, which is useful for debugging
and packet dissection.
|