Hi all,

After testing a loopback in GNU Radio with a custom block (the gain example
from the Getting Started with RFNoC guide), I managed to get the samples
going from the host to the "RFNoC domain" and back to the host, without
involving the radio cores at all. My flowgraph was Signal Source (Host) ->
RFNoC: DmaFIFO -> RFNoC: gain -> QT GUI Freq Sink (Host), and everything
worked fine, so I know that what I'm trying to do is possible.

I have also made examples in UHD with C++ transmitting (Host -> TX Radio)
and receiving (RX Radio -> Host) using the custom RFNoC block in the graph,
by modifying the tx_waveforms and rfnoc_rx_to_file examples, and everything
worked fine as well, I checked that all of the examples had a resulting
signal that looked like it was expected.

Now, I would like to replicate in UHD with C++ something similar to what I
have in GNU Radio, a loopback using the RFNoC custom block but without
involving the radio cores, basically: Host -> RFNoC -> Host. Right now my
approach is to have a graph looking like Host TX -> DmaFIFO -> Gain Custom
-> Host RX, I am configuring the tx and rx streamers this way:

uhd::device_addr_t tx_streamer_args;
uhd::stream_args_t tx_stream_args("fc32", "sc16");
tx_streamer_args["block_id"] = dmafifo_blockid;
tx_streamer_args["block_port"] = "0";
tx_stream_args.args = tx_streamer_args;
tx_stream_args.args["spp"] = boost::lexical_cast<std::string>(spp);
//spp=364
uhd::tx_streamer::sptr tx_stream = usrp3->get_tx_stream(tx_stream_args);

----

uhd::device_addr_t rx_streamer_args;
uhd::stream_args_t rx_stream_args("fc32", "sc16");
rx_streamer_args["block_id"] = gain_blockid;
rx_streamer_args["block_port"] = "0";
rx_stream_args.args["spp"] = boost::lexical_cast<std::string>(spp);
rx_stream_args.args = rx_streamer_args;
uhd::rx_streamer::sptr rx_stream = usrp->get_rx_stream(rx_stream_args);

I'm creating a thread that continuously sends (send()) samples to the
DmaFIFO, and then I try to do the recv() until I get something, but I
always get a timeout. It's like if the samples aren't flowing through the
blocks, or like if I'm not doing the recv() right. Also, I'm getting a
strange warning ([INFO] [RFNOC] No upstream blocks.) that I don't
understand quite well in this context, does it have anything to do with the
fact that I'm not using the radio cores? I have also tried to put a FIFO
after the Gain block but I get pretty much the same result.

I would appreciate any help or recommendations on how to achieve in C++
this idea of Host TX -> RFNoC -> Host RX, is there something I am missing
or should consider?

I am using UHD-3.15.LTS on a X310, and GNU Radio 3.7. Everything is running
on Ubuntu 16.04.

Thanks in advance,

Jorge
_______________________________________________
USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com

Reply via email to