diff options
Diffstat (limited to 'gr-usrp/apps/usrp_rx_cfile.cc')
-rw-r--r-- | gr-usrp/apps/usrp_rx_cfile.cc | 245 |
1 files changed, 0 insertions, 245 deletions
diff --git a/gr-usrp/apps/usrp_rx_cfile.cc b/gr-usrp/apps/usrp_rx_cfile.cc deleted file mode 100644 index d40ca58f7..000000000 --- a/gr-usrp/apps/usrp_rx_cfile.cc +++ /dev/null @@ -1,245 +0,0 @@ -/* - * Copyright 2008 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <usrp_rx_cfile.h> -#include <gr_io_signature.h> -#include <gr_head.h> -#include <stdexcept> -#include <iostream> -#include <boost/program_options.hpp> - -namespace po = boost::program_options; - -usrp_subdev_spec -str_to_subdev(std::string spec_str) -{ - usrp_subdev_spec spec; - if(spec_str == "A" || spec_str == "A:0" || spec_str == "0:0") { - spec.side = 0; - spec.subdev = 0; - } - else if(spec_str == "A:1" || spec_str == "0:1") { - spec.side = 0; - spec.subdev = 1; - } - else if(spec_str == "B" || spec_str == "B:0" || spec_str == "1:0") { - spec.side = 1; - spec.subdev = 0; - } - else if(spec_str == "B:1" || spec_str == "1:1") { - spec.side = 1; - spec.subdev = 1; - } - else { - throw std::range_error("Incorrect subdevice specifications.\n"); - } - - return spec; -} - - -// Shared pointer constructor -usrp_rx_cfile_sptr make_usrp_rx_cfile(int which, usrp_subdev_spec spec, - int decim, double freq, float gain, - bool width8, bool nohb, - bool output_shorts, int nsamples, - const std::string &filename) -{ - return gnuradio::get_initial_sptr(new usrp_rx_cfile(which, spec, - decim, freq, gain, - width8, nohb, - output_shorts, - nsamples, - filename)); -} - -// Hierarchical block constructor, with no inputs or outputs -usrp_rx_cfile::usrp_rx_cfile(int which, usrp_subdev_spec spec, - int decim, double freq, float gain, - bool width8, bool nohb, - bool output_shorts, int nsamples, - const std::string &filename) : - gr_top_block("usrp_rx_cfile"), - d_which(which), d_spec(spec), d_decim(decim), d_freq(freq), - d_gain(gain), d_width8(width8), d_nohb(nohb), d_nsamples(nsamples), - d_filename(filename) -{ - usrp_source_c_sptr usrp; - - if(d_nohb || (d_decim<8)) { - // Min decimation of this firmware is 4. - // contains 4 Rx paths without halfbands and 0 tx paths. - std::string fpga_filename="std_4rx_0tx.rbf"; - - // use default values and add fpga_filename - usrp = usrp_make_source_c(d_which, d_decim, - 1, -1, 0, 0, 0, - fpga_filename.c_str()); - } - else { - // standard fpga firmware "std_2rxhb_2tx.rbf" contains - // 2 Rx paths with halfband filters and 2 tx paths - //(the default) min decimation 8 - usrp = usrp_make_source_c(d_which, d_decim); - } - - if(d_width8) { - int sample_width = 8; - int sample_shift = 8; - int format = usrp->make_format(sample_width, sample_shift); - int r = usrp->set_format(format); - printf("width8: format=%d r=%d\n", format, r); - } - - - /* Get subdevice and process it */ - db_base_sptr subdev = usrp->selected_subdev(d_spec); - printf("\nSubdevice name is %s\n", subdev->side_and_name().c_str()); - printf("Subdevice freq range: (%g, %g)\n", - subdev->freq_min(), subdev->freq_max()); - - unsigned int mux = usrp->determine_rx_mux_value(d_spec); - printf("mux: %#08x\n", mux); - usrp->set_mux(mux); - - float gain_min = subdev->gain_min(); - float gain_max = subdev->gain_max(); - if(d_gain == -1) { - d_gain = (gain_min + gain_max)/2.0; - } - printf("gain: %g\n", d_gain); - subdev->set_gain(d_gain); - - - /* Set the USRP/dboard frequency */ - usrp_tune_result r; - bool ok = usrp->tune(0, subdev, freq, &r); //DDC 0 - - if(!ok) { - throw std::runtime_error("Could not set frequency."); - } - - /* The rest */ - d_dst = gr_make_file_sink(sizeof(gr_complex), d_filename.c_str()); - - if(d_nsamples == -1) { - connect(usrp, 0, d_dst, 0); - } - else { - d_head = gr_make_head(sizeof(gr_complex), d_nsamples*2); - connect(usrp, 0, d_head, 0); - connect(d_head, 0, d_dst, 0); - } -} - - -int main(int argc, char *argv[]) -{ - int which = 0; // specify which USRP board - usrp_subdev_spec spec(0,0); // specify the d'board side - int decim = 16; // set the decimation rate - double freq = 0; // set the frequency - float gain = -1; // set the gain; -1 will set the mid-point gain - int nsamples = -1; // set the number of samples to collect; -1 will continue - bool width8 = false; // use 8-bit samples across USB - bool nohb = false; // don't use halfband filter in USRP - bool output_shorts = false; // use shorts - std::string filename = "received.dat"; - - po::options_description cmdconfig("Program options: usrp_text_rx [options] filename"); - cmdconfig.add_options() - ("help,h", "produce help message") - ("which,W", po::value<int>(&which), "select which USRP board") - ("rx-subdev-spec,R", po::value<std::string>(), "select USRP Rx side A or B (default=A)") - ("decim,d", po::value<int>(&decim), "set fgpa decimation rate to DECIM") - ("freq,f", po::value<double>(), "set frequency to FREQ") - ("gain,g", po::value<float>(), "set gain in dB (default is midpoint)") - ("width-8,8", "Enable 8-bit samples across USB") - ("no-hb", "don't use halfband filter in usrp") - //("output-shorts,s", "output interleaved shorts in stead of complex floats") - ("nsamples,N", po::value<int>(&nsamples), "number of samples to collect") - ; - - po::options_description fileconfig("Input file options"); - fileconfig.add_options() - ("filename", po::value<std::string>(), "input file") - ; - - po::positional_options_description inputfile; - inputfile.add("filename", -1); - - po::options_description config; - config.add(cmdconfig).add(fileconfig); - - po::variables_map vm; - po::store(po::command_line_parser(argc, argv). - options(config).positional(inputfile).run(), vm); - po::notify(vm); - - if (vm.count("help")) { - std::cout << cmdconfig << "\n"; - return 1; - } - - if(vm.count("filename")) { - filename = vm["filename"].as<std::string>(); - } - - if(vm.count("freq")) { - freq = vm["freq"].as<double>(); - } - else { - fprintf(stderr, "You must specify a frequency.\n"); - return -1; - } - - if(vm.count("rx-subdev-spec")) { - std::string s = vm["rx-subdev-spec"].as<std::string>(); - spec = str_to_subdev(s); - } - - if(vm.count("width-8")) { - width8 = true; - } - if(vm.count("nohb")) { - nohb = true; - } - if(vm.count("output-shorts")) { - output_shorts = true; - } - - std::cout << "which: " << which << std::endl; - std::cout << "decim: " << decim << std::endl; - std::cout << "freq: " << freq << std::endl; - std::cout << "gain: " << gain << std::endl; - std::cout << "width-8 " << (width8 ? "Yes" : "No") << std::endl; - std::cout << "no-hb " << (nohb ? "Yes" : "no") << std::endl; - std::cout << "shorts: " << (output_shorts ? "Yes" : "No") << std::endl; - std::cout << "samples: " << nsamples << std::endl; - - usrp_rx_cfile_sptr top_block = make_usrp_rx_cfile(which, spec, decim, freq, - gain, width8, nohb, - output_shorts, nsamples, - filename); - top_block->run(); - - return 0; -} |