Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 17 additions & 6 deletions SoapyUHDDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ struct SoapyUHDStream
{
uhd::rx_streamer::sptr rx;
uhd::tx_streamer::sptr tx;
size_t num_channels = 0;
};

/***********************************************************************
Expand Down Expand Up @@ -242,8 +243,16 @@ class SoapyUHDDevice : public SoapySDR::Device

//create streamers
SoapyUHDStream *stream = new SoapyUHDStream();
if (dir == SOAPY_SDR_TX) stream->tx = _dev->get_tx_stream(stream_args);
if (dir == SOAPY_SDR_RX) stream->rx = _dev->get_rx_stream(stream_args);
if (dir == SOAPY_SDR_TX)
{
stream->tx = _dev->get_tx_stream(stream_args);
stream->num_channels = stream->tx->get_num_channels();
}
if (dir == SOAPY_SDR_RX)
{
stream->rx = _dev->get_rx_stream(stream_args);
stream->num_channels = stream->rx->get_num_channels();
}
return reinterpret_cast<SoapySDR::Stream *>(stream);
}

Expand Down Expand Up @@ -300,11 +309,12 @@ class SoapyUHDDevice : public SoapySDR::Device

int readStream(SoapySDR::Stream *handle, void * const *buffs, const size_t numElems, int &flags, long long &timeNs, const long timeoutUs)
{
uhd::rx_streamer::sptr &stream = reinterpret_cast<SoapyUHDStream *>(handle)->rx;
SoapyUHDStream *streamObj = reinterpret_cast<SoapyUHDStream *>(handle);
uhd::rx_streamer::sptr &stream = streamObj->rx;

//receive into buffers and metadata
uhd::rx_metadata_t md;
uhd::rx_streamer::buffs_type stream_buffs(buffs, stream->get_num_channels());
uhd::rx_streamer::buffs_type stream_buffs(buffs, streamObj->num_channels);
int ret = stream->recv(stream_buffs, numElems, md, timeoutUs/1e6, (flags & SOAPY_SDR_ONE_PACKET) != 0);

//parse the metadata
Expand All @@ -328,7 +338,8 @@ class SoapyUHDDevice : public SoapySDR::Device

int writeStream(SoapySDR::Stream *handle, const void * const *buffs, const size_t numElems, int &flags, const long long timeNs, const long timeoutUs)
{
uhd::tx_streamer::sptr &stream = reinterpret_cast<SoapyUHDStream *>(handle)->tx;
SoapyUHDStream *streamObj = reinterpret_cast<SoapyUHDStream *>(handle);
uhd::tx_streamer::sptr &stream = streamObj->tx;

//load metadata
uhd::tx_metadata_t md;
Expand All @@ -337,7 +348,7 @@ class SoapyUHDDevice : public SoapySDR::Device
md.time_spec = uhd::time_spec_t::from_ticks(timeNs, 1e9);

//send buffers and metadata
uhd::tx_streamer::buffs_type stream_buffs(buffs, stream->get_num_channels());
uhd::tx_streamer::buffs_type stream_buffs(buffs, streamObj->num_channels);
int ret = stream->send(stream_buffs, numElems, md, timeoutUs/1e6);

flags = 0;
Expand Down