Hi, I am trying to test my RFNoC gain block, the one from the ‘Getting Started with RFNoC Development’ guide, through the UHD C++ API on an E310 (I'm using UHD-3.15.LTS, I know that UHD 4.0 has just been released but I would appreciate it if someone could help me with this version).
I'm quite sure that the bitstream I generated is correct, when loading the image and then running uhd_usrp_probe, the name I used in the gain.xml file shows up among the other RFNoC blocks. Also, when doing *gain_block_ctrl->sr_write()* and then checking the value through the readback register with *gain_block_ctrl->user_reg_read32()* everything seems to work fine. What I'm trying to figure out is how to transmit and receive samples from the block, I've tried a couple of ways and I'm still not getting a good result. First, I tried to send a packet with 200 samples to the block (*tx_stream->send(&tx_buff, tx_buff.size(), tx_md,0.5)*, with tx_stream obtained through a device3 usrp object, including *tx_stream_args.args["block_id"] = "gain"* and *tx_stream_args.args["block_port"] = "0"* in the tx stream arguments, the *tx_md* (metadata) set up with *tx_md.start_of_burst = false, tx_md.end_of_burst = false* and *tx_md.has_time_spec = false*, and I didn't use the radio at all this way. When trying to receive (*rx_stream->recv(&rx_buff, rx_buff.size(), rx_md, 5.0, true)*, including the *"block_id"* and *"block_port" *arguments in the rx stream like in the tx, and in mode *STREAM_MODE_NUM_SAMPS_AND_DONE*), and I got an *ERROR_CODE_TIMEOUT*. Then, I tried this time connecting the RFNoC Radio block to the gain block with an *rfnoc::graph* and setting the radio and gain *"block_id"* and *"block_port" *arguments in the tx stream. When doing *recv()*, I got an unknown error: "Receiver error: Unknown error code: 0x30" (does someone know what this means?) when checking the *rx_md.error_code*. However, *recv()* returned 200, like if it had received the samples I sent, but the rx buffer was empty. I also tried using the RFNoC Replay block, but didn't get anywhere either. Does anyone know if this block is supported in the E310? (this was asked in the mailing list a while ago in http://ettus.80997.x6.nabble.com/USRP-users-RFNoC-Replay-block-for-E310-td11156.html, but I'd like to know if someone has tested it since then). Lastly, I tried using threads, one with the *recv()* waiting for samples and the main program thread doing the *send()*, but I wasn't lucky again. I got this other unknown error: "Receiver error: Unknown error code: 0x3ce8e2b0". So, which would be the best way to test my block? Again, I only want to see that samples enter and exit multiplied by the gain value to understand how I can work with RFNoC blocks from C++. Also, I'm confused about this, when sending samples to the block its result should be kept in the FIFO that then UHD reads from, so I understand that there should be no reason for an active tx streamer to be streaming while doing the *recv()*, because the *recv() *should just read the result from the FIFO, or am I getting something wrong? Any help would be appreciated. Thanks in advance, Jorge
_______________________________________________ USRP-users mailing list USRP-users@lists.ettus.com http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com