Hello Marcus Sorry, but I didn't receive a copy of my previous mail or your response, so I posted again.
For your reference below is my code: #include <uhd/types/tune_request.hpp> #include <uhd/types/sensors.hpp> #include <uhd/utils/thread_priority.hpp> #include <uhd/utils/safe_main.hpp> #include <uhd/device3.hpp> #include <uhd/rfnoc/radio_ctrl.hpp> #include <uhd/rfnoc/source_block_ctrl_base.hpp> #include <ppchan/chan128_block_ctrl.hpp> #include <uhd/exception.hpp> #include <boost/program_options.hpp> #include <boost/format.hpp> #include <boost/thread.hpp> #include <iostream> #include <fstream> #include <csignal> #include <complex> #include <stdio.h> #include <uhd/stream.hpp> #include <SynchronousLabs/downSampler_block_ctrl.hpp> #include <uhd/usrp/multi_usrp.hpp> #define USRP_2954_R 0 #define USRP_2955_R 1 #define db_0 0 #define db_1 1 namespace po = boost::program_options; double centre_freq_2954_db0 = 947.8e6; double centre_freq_2954_db1 = 947.8e6-45e6; static bool stop_signal_called = false; void sig_int_handler(int){stop_signal_called = true;} void recv_to_file( uhd::rx_streamer::sptr rx_stream, size_t samps_per_buff, unsigned long long num_requested_samples, bool continue_on_bad_packet = false ) { unsigned long long num_total_samps = 0; uhd::rx_metadata_t md; std::vector<std::complex<float> > buff(samps_per_buff); std::ofstream outfile; #if 1 //outfile.open("/media/ramdd/rxfile.bin", std::ofstream::binary); FILE *fp = fopen("/media/ramdd/rxfile.bin","w"); #endif bool overflow_message = true; //setup streaming uhd::stream_cmd_t stream_cmd((num_requested_samples == 0)? uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS: uhd::stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE ); stream_cmd.num_samps = num_requested_samples; stream_cmd.stream_now = true; stream_cmd.time_spec = uhd::time_spec_t(); std::cout << "Issuing start stream cmd" << std::endl; // This actually goes to the null source; the processing block // should propagate it. rx_stream->issue_stream_cmd(stream_cmd); unsigned long long last_update_samps = 0; while( not stop_signal_called and (num_requested_samples != num_total_samps or num_requested_samples == 0) ) { size_t num_rx_samps = rx_stream->recv(&buff.front(), buff.size(), md, 3.0); std::cout<<"number of samples "<<num_rx_samps<<std::endl; if (md.error_code == uhd::rx_metadata_t::ERROR_CODE_TIMEOUT) { std::cout << boost::format("Timeout while streaming") << std::endl; break; } if (md.error_code == uhd::rx_metadata_t::ERROR_CODE_OVERFLOW){ if (overflow_message){ overflow_message = false; std::cerr << "Got an overflow indication. If writing to disk, your\n" "write medium may not be able to keep up.\n"; } continue; } if (md.error_code != uhd::rx_metadata_t::ERROR_CODE_NONE){ std::string error = str(boost::format("Receiver error: %s") % md.strerror()); if (continue_on_bad_packet){ std::cerr << error << std::endl; continue; } else { throw std::runtime_error(error); } } num_total_samps += num_rx_samps; #if 1 fwrite(&buff.front(),sizeof(std::complex<float>),num_rx_samps,fp); #endif #if 0 if (bw_summary) { last_update_samps += num_rx_samps; boost::posix_time::time_duration update_diff = now - last_update; if (update_diff.ticks() > boost::posix_time::time_duration::ticks_per_second()) { double t = (double)update_diff.ticks() / (double)boost::posix_time::time_duration::ticks_per_second(); double r = (double)last_update_samps / t; std::cout << boost::format("\t%f Msps") % (r/1e6) << std::endl; last_update_samps = 0; last_update = now; } } ticks_diff = now - start; if (ticks_requested > 0){ if ((unsigned long long)ticks_diff.ticks() > ticks_requested) break; } #endif } stream_cmd.stream_mode = uhd::stream_cmd_t::STREAM_MODE_STOP_CONTINUOUS; rx_stream->issue_stream_cmd(stream_cmd); #if 1 fclose(fp); #endif } void pretty_print_flow_graph(std::vector<std::string> blocks) { std::string sep_str = "==>"; std::cout << std::endl; // Line 1 for (size_t n = 0; n < blocks.size(); n++) { const std::string name = blocks[n]; std::cout << "+"; for (size_t i = 0; i < name.size() + 2; i++) { std::cout << "-"; } std::cout << "+"; if (n == blocks.size() - 1) { break; } for (size_t i = 0; i < sep_str.size(); i++) { std::cout << " "; } } std::cout << std::endl; // Line 2 for (size_t n = 0; n < blocks.size(); n++) { const std::string name = blocks[n]; std::cout << "| " << name << " |"; if (n == blocks.size() - 1) { break; } std::cout << sep_str; } std::cout << std::endl; // Line 3 for (size_t n = 0; n < blocks.size(); n++) { const std::string name = blocks[n]; std::cout << "+"; for (size_t i = 0; i < name.size() + 2; i++) { std::cout << "-"; } std::cout << "+"; if (n == blocks.size() - 1) { break; } for (size_t i = 0; i < sep_str.size(); i++) { std::cout << " "; } } std::cout << std::endl << std::endl; } #if 1 int c onfigure(int mboard_no, int dboard_no, uhd::device3::sptr usrp){ uhd::rfnoc::radio_ctrl::sptr radio_ctrl; uhd::rfnoc::block_ctrl_base::sptr chan128_ctrl; std::string downsample_make; //uhd::rfnoc::block_ctrl_base::sptr downSampler; uhd::rfnoc::block_ctrl_base::sptr fifo; //uhd::rfnoc:: uhd::rfnoc::downSampler_block_ctrl::sptr downSampler; usrp->clear(); uhd::rfnoc::block_ctrl_base::sptr packetresizer_ctrl; std::string file, format, ant, subdev, ref, wirefmt, streamargs, block_id, block_args; size_t total_num_samps, spp = 128, spb=10e3; double sampleRate = 0x00; std::string radio_args("Radio channel"); std::vector<std::string> blocks; uhd::device_addr_t stream_args_args; usrp->clear(); uhd::rfnoc::graph::sptr rx_graph = usrp->create_graph("GSM_RF_DUPLEX_CHAIN"); uhd::rfnoc::block_id_t radio_ctrl_id(mboard_no, "Radio", dboard_no); if(not(usrp->has_block(radio_ctrl_id))){ std::cout<<"error: radio block not found..please check whether the block exists in the image! quiting"<<std::endl; return (EXIT_FAILURE); }else{ std::cout<<"radio_"<<dboard_no <<" block found.."<<std::endl; radio_ctrl = usrp->get_block_ctrl< uhd::rfnoc::radio_ctrl >(radio_ctrl_id); blocks.push_back(radio_ctrl->get_block_id()); if(mboard_no == 0x00){ sampleRate = 200e6; }else{ sampleRate = 100e6; } radio_ctrl->set_args(radio_args); radio_ctrl->set_rate(sampleRate); if(dboard_no==0){ uhd::tune_request_t tune_request(centre_freq_2954_db0); radio_ctrl->set_rx_frequency(centre_freq_2954_db0,0); }else{ uhd::tune_request_t tune_request(centre_freq_2954_db1); radio_ctrl->set_rx_frequency(centre_freq_2954_db1,0); } std::cout<<"freq "<<radio_ctrl->get_rx_frequency(0)<<std::endl; radio_ctrl->set_rx_antenna("RX2",0); radio_ctrl->set_rx_gain(25,0); std::cout<<"gain "<<radio_ctrl->get_rx_gain(0)<<std::endl; radio_ctrl->set_rx_bandwidth(56e6,0); uhd::device_addr_t stream_args_args1; stream_args_args1["block_id"] = radio_ctrl_id; #if 1 uhd::stream_args_t stream_args1("fc32", "sc16"); stream_args1.args = stream_args_args1; uhd::tx_streamer::sptr tx_stream = usrp->get_tx_stream(stream_args1); stream_args1.args["gr_vlen"] = boost::lexical_cast<std::string>(1); uhd::rx_streamer::sptr rx_stream = usrp->get_rx_stream(stream_args1); #endif //radio_ctrl->set_arg<int>("gr_vlen",(int)1); } #if 1 uhd::rfnoc::block_id_t downsampler_ctrl_id(mboard_no, "downSampler", dboard_no); if(not(usrp->has_block(downsampler_ctrl_id))){ std::cout<<"error: downsampler block not found..please check whether the block exists in the image"<<std::endl; return (EXIT_FAILURE); }else{ std::cout<<"downSampler_"<<dboard_no<<" block found.."<<std::endl; downSampler = usrp->get_block_ctrl<uhd::rfnoc::downSampler_block_ctrl>(downsampler_ctrl_id); blocks.push_back(downSampler->get_block_id()); #if 1 downSampler->set_arg<int>("sr_n",(int)1000); downSampler->set_arg<int>("sr_m",(int)128); #endif #if 0 uhd::device_addr_t stream_args_args1; stream_args_args1["block_id"] = downsampler_ctrl_id; uhd::stream_args_t stream_args1("fc32", "sc16"); stream_args1.args = stream_args_args1; stream_args1.args["sr_n"] = boost::lexical_cast<std::string>(1000); stream_args1.args["sr_m"] = boost::lexical_cast<std::string>(128); uhd::rx_streamer::sptr rx_stream = usrp->get_rx_stream(stream_args1); uhd::tx_streamer::sptr tx_stream = usrp->get_tx_stream(stream_args1); #endif } #endif #if 0 /*********************************************/ //downsampler = new downSampler_block_ctrl; /*********************************************/ #endif uhd::rfnoc::block_id_t packetresizer_ctrl_id(mboard_no, "PacketResizer", dboard_no); if(not(usrp->has_block(packetresizer_ctrl_id))){ std::cout<<"error: packetResizer block not found..please check whether the block exists in the image"<<std::endl; return (EXIT_FAILURE); }else{ std::cout<<"packetResizer_"<<dboard_no<<" block found.."<<std::endl; packetresizer_ctrl = usrp->get_block_ctrl(packetresizer_ctrl_id); blocks.push_back(packetresizer_ctrl->get_block_id()); packetresizer_ctrl->set_arg<int>("pkt_size",(int)512); //packetresizer_ctrl->set #if 0 uhd::device_addr_t stream_args_args1; stream_args_args1["block_id"] = packetresizer_ctrl_id; uhd::stream_args_t stream_args1("fc32", "sc16"); stream_args1.args = stream_args_args1; uhd::rx_streamer::sptr rx_stream = usrp->get_rx_stream(stream_args1); stream_args1.args["pkt_size"] = boost::lexical_cast<std::string>(512); uhd::tx_streamer::sptr tx_stream = usrp->get_tx_stream(stream_args1); #endif } uhd::rfnoc::block_id_t chan128_ctrl_id(mboard_no, "chan128", dboard_no); if(not(usrp->has_block(chan128_ctrl_id))){ std::cout<<"error: chan128 block not found..please check whether the block exists in the image"<<std::endl; return (EXIT_FAILURE); }else{ std::cout<<"chan128_"<< dboard_no<<" block found.."<<std::endl; chan128_ctrl = usrp->get_block_ctrl(chan128_ctrl_id); blocks.push_back(chan128_ctrl->get_block_id()); //stream_args_args["block_id"] = chan128_ctrl_id; spp = chan128_ctrl->get_args().cast<size_t>("spp",spp); std::cout<<"spp "<<(int)spp<<std::endl; uhd::device_addr_t stream_args_args1; stream_args_args1["block_id"] = chan128_ctrl_id; #if 0 uhd::stream_args_t stream_args1("fc32", "sc16"); stream_args1.args = stream_args_args1; stream_args1.args["gr_vlen"] = boost::lexical_cast<std::string>(128); stream_args1.args["spp"] = boost::lexical_cast<std::string>(128); uhd::rx_streamer::sptr rx_stream = usrp->get_rx_stream(stream_args1); uhd::tx_streamer::sptr tx_stream = usrp->get_tx_stream(stream_args1); #endif } blocks.push_back("HOST"); pretty_print_flow_graph(blocks); uhd::rfnoc::block_id_t fifo_ctrl_id(mboard_no, "FIFO", dboard_no); if(not usrp->has_block(fifo_ctrl_id)){ std::cout<<"error:FIFO block not found"<<std::endl; }else{ fifo = usrp->get_block_ctrl(fifo_ctrl_id); } // Connect blocks and create flow graph uhd::device_addr_t stream_args_args1; stream_args_args["block_id"] = fifo_ctrl_id; rx_graph->connect(radio_ctrl->get_block_id(),downSampler->get_block_id()); //rx_graph->connect(downSampler->get_block_id(),packetresizer_ctrl->get_block_id()); //rx_graph->connect(packetresizer_ctrl->get_block_id(),chan128_ctrl->get_block_id()); rx_graph->connect(downSampler->get_block_id(),fifo->get_block_id()); uhd::stream_args_t stream_args("fc32", "sc16"); stream_args.args = stream_args_args; //stream_args.args["spp"] = boost::lexical_cast<std::string>(spp); //stream_args.args["gr_vlen"] = boost::lexical_cast<std::string>(spp); uhd::rx_streamer::sptr rx_stream = usrp->get_rx_stream(stream_args); //uhd::tx_streamer::sptr tx_stream = usrp->get_tx_stream(stream_args); recv_to_file(rx_stream, spb, 0, true); return (EXIT_SUCCESS); } #endif int UHD_SAFE_MAIN(int argc, char *argv[]){ uhd::set_thread_priority_safe(); std::string args2954R("addr=192.168.40.2"); std::string args2955R("addr=192.168.110.2"); double rate, freq, gain, bw, total_time, setup_time; //Initializing the USRP Components std::cout <<"Initializing USRP 2954R"<<std::endl; uhd::usrp::multi_usrp::sptr usrp_temp = uhd::usrp::multi_usrp::make(args2954R); uhd::device3::sptr usrp = usrp_temp->get_device3(); if(configure(USRP_2954_R,db_0,usrp)==1){ std::cout<<"error: Configuring USRP 2954R not successful"<<std::endl; } //boost::thread usrp2954_db0(configure,USRP_2954_R,db_0,usrp); /*if(configure(USRP_2954_R,db_1,usrp)==1){ std::cout<<"error: Configuring USRP 2954R not successful"<<std::endl; }*/ usleep(100); //boost::thread usrp2954_db1(configure,USRP_2954_R,db_1,usrp); std::signal(SIGINT, &sig_int_handler); } ________________________________ From: Marcus Müller <marcus.muel...@ettus.com> Sent: Saturday, March 17, 2018 8:36:10 PM To: Snehasish Kar; usrp-users@lists.ettus.com Subject: Re: [USRP-users] Help with uhd Dear Shehasish, Marcus Leech already responded to your last mail. We can't help you without all your code, especially whatever sets up "args2954R". Best regards, Marcus M On Sat, 2018-03-17 at 06:22 +0000, Snehasish Kar via USRP-users wrote: > hello > > On trying to use an multi usrp shared pointer, I get the following > error in rfnoc enviroment: > > Error: TypeError: [0/FIFO_1] Invalid output port number (ANY). > > I declared the shared pointer as below > > uhd::usrp::multi_usrp::sptr usrp_temp = > uhd::usrp::multi_usrp::make(args2954R); > uhd::device3::sptr usrp = usrp_temp->get_device3(); > > Any idea where I am going wrong. > > BR > Snehasish > > > _______________________________________________ > USRP-users mailing list > USRP-users@lists.ettus.com > http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
_______________________________________________ USRP-users mailing list USRP-users@lists.ettus.com http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com