The RX streamer is the host interface to receiving samples. It represents the layer between the samples on the host and samples inside the device's receive DSP processing.
virtual size_t uhd::rx_streamer::recv |
( |
const buffs_type & |
buffs, |
|
|
const size_t |
nsamps_per_buff, |
|
|
rx_metadata_t & |
metadata, |
|
|
const double |
timeout = 0.1 , |
|
|
const bool |
one_packet = false |
|
) |
| |
|
pure virtual |
Receive buffers containing samples described by the metadata.
Receive handles fragmentation as follows: If the buffer has insufficient space to hold all samples that were received in a single packet over-the-wire, then the buffer will be completely filled and the implementation will hold a pointer into the remaining portion of the packet. Subsequent calls will load from the remainder of the packet, and will flag the metadata to show that this is a fragment. The next call to receive, after the remainder becomes exhausted, will perform an over-the-wire receive as usual. See the rx metadata fragment flags and offset fields for details.
This is a blocking call and will not return until the number of samples returned have been written into each buffer. Under a timeout condition, the number of samples returned may be less than the number of samples specified.
The one_packet option allows the user to guarantee that the call will return after a single packet has been processed. This may be useful to maintain packet boundaries in some cases.
Note on threading: recv() is not thread-safe, to avoid locking overhead. The application calling recv() is responsible for making sure that not more than one thread can call recv() at the same time.
- Parameters
-
buffs | a vector of writable memory to fill with samples |
nsamps_per_buff | the size of each buffer in number of samples |
metadata | data to fill describing the buffer |
timeout | the timeout in seconds to wait for a packet |
one_packet | return after the first packet is received |
- Returns
- the number of samples received or 0 on error