From 5e9908fbec19ce9309c12ea61c0303e6666e981a Mon Sep 17 00:00:00 2001 From: Josh Blum <josh@joshknows.com> Date: Mon, 18 Oct 2010 01:03:11 -0700 Subject: uhd: removed utils warning functions, moved into the lower level wrappers --- gr-uhd/lib/Makefile.am | 4 +-- gr-uhd/lib/uhd_mimo_sink.cc | 6 ++-- gr-uhd/lib/uhd_mimo_source.cc | 6 ++-- gr-uhd/lib/uhd_simple_sink.cc | 6 ++-- gr-uhd/lib/uhd_simple_source.cc | 6 ++-- gr-uhd/lib/uhd_single_usrp_sink.cc | 3 -- gr-uhd/lib/uhd_single_usrp_source.cc | 3 -- gr-uhd/lib/utils.cc | 56 ------------------------------------ gr-uhd/lib/utils.h | 40 -------------------------- 9 files changed, 13 insertions(+), 117 deletions(-) delete mode 100644 gr-uhd/lib/utils.cc delete mode 100644 gr-uhd/lib/utils.h (limited to 'gr-uhd/lib') diff --git a/gr-uhd/lib/Makefile.am b/gr-uhd/lib/Makefile.am index 1260201a5c..69a41e7884 100644 --- a/gr-uhd/lib/Makefile.am +++ b/gr-uhd/lib/Makefile.am @@ -29,7 +29,6 @@ AM_CPPFLAGS = \ lib_LTLIBRARIES = libgnuradio-uhd.la libgnuradio_uhd_la_SOURCES = \ - utils.cc \ uhd_mimo_source.cc \ uhd_mimo_sink.cc \ uhd_simple_source.cc \ @@ -51,5 +50,4 @@ grinclude_HEADERS = \ uhd_single_usrp_source.h \ uhd_single_usrp_sink.h -noinst_HEADERS = \ - utils.h +noinst_HEADERS = diff --git a/gr-uhd/lib/uhd_mimo_sink.cc b/gr-uhd/lib/uhd_mimo_sink.cc index 0a2ce1b0a7..03d310b1ea 100644 --- a/gr-uhd/lib/uhd_mimo_sink.cc +++ b/gr-uhd/lib/uhd_mimo_sink.cc @@ -23,7 +23,7 @@ #include <uhd_mimo_sink.h> #include <gr_io_signature.h> #include <stdexcept> -#include "utils.h" +//#include "utils.h" /*********************************************************************** * UHD Sink @@ -59,7 +59,7 @@ public: void set_samp_rate_all(double rate){ _dev->set_tx_rate_all(rate); - do_samp_rate_error_message(rate, get_samp_rate_all(), "TX"); + //do_samp_rate_error_message(rate, get_samp_rate_all(), "TX"); } double get_samp_rate_all(void){ @@ -68,7 +68,7 @@ public: uhd::tune_result_t set_center_freq(size_t chan, double freq){ uhd::tune_result_t tr = _dev->set_tx_freq(chan, freq); - do_tune_freq_error_message(freq, _dev->get_tx_freq(chan), "TX"); + //do_tune_freq_error_message(freq, _dev->get_tx_freq(chan), "TX"); return tr; } diff --git a/gr-uhd/lib/uhd_mimo_source.cc b/gr-uhd/lib/uhd_mimo_source.cc index 62157142db..abd70ba369 100644 --- a/gr-uhd/lib/uhd_mimo_source.cc +++ b/gr-uhd/lib/uhd_mimo_source.cc @@ -23,7 +23,7 @@ #include <uhd_mimo_source.h> #include <gr_io_signature.h> #include <stdexcept> -#include "utils.h" +//#include "utils.h" /*********************************************************************** * UHD Source @@ -59,7 +59,7 @@ public: void set_samp_rate_all(double rate){ _dev->set_rx_rate_all(rate); - do_samp_rate_error_message(rate, get_samp_rate_all(), "RX"); + //do_samp_rate_error_message(rate, get_samp_rate_all(), "RX"); } double get_samp_rate_all(void){ @@ -68,7 +68,7 @@ public: uhd::tune_result_t set_center_freq(size_t chan, double freq){ uhd::tune_result_t tr = _dev->set_rx_freq(chan, freq); - do_tune_freq_error_message(freq, _dev->get_rx_freq(chan), "RX"); + //do_tune_freq_error_message(freq, _dev->get_rx_freq(chan), "RX"); return tr; } diff --git a/gr-uhd/lib/uhd_simple_sink.cc b/gr-uhd/lib/uhd_simple_sink.cc index 7b31218dbb..d7b04465d4 100644 --- a/gr-uhd/lib/uhd_simple_sink.cc +++ b/gr-uhd/lib/uhd_simple_sink.cc @@ -23,7 +23,7 @@ #include <uhd_simple_sink.h> #include <gr_io_signature.h> #include <stdexcept> -#include "utils.h" +//#include "utils.h" /*********************************************************************** * UHD Sink @@ -56,7 +56,7 @@ public: void set_samp_rate(double rate){ _dev->set_tx_rate(rate); - do_samp_rate_error_message(rate, get_samp_rate(), "TX"); + //do_samp_rate_error_message(rate, get_samp_rate(), "TX"); } double get_samp_rate(void){ @@ -65,7 +65,7 @@ public: uhd::tune_result_t set_center_freq(double freq){ uhd::tune_result_t tr = _dev->set_tx_freq(freq); - do_tune_freq_error_message(freq, _dev->get_tx_freq(), "TX"); + //do_tune_freq_error_message(freq, _dev->get_tx_freq(), "TX"); return tr; } diff --git a/gr-uhd/lib/uhd_simple_source.cc b/gr-uhd/lib/uhd_simple_source.cc index c1e11e85d2..d74c8414d2 100644 --- a/gr-uhd/lib/uhd_simple_source.cc +++ b/gr-uhd/lib/uhd_simple_source.cc @@ -25,7 +25,7 @@ #include <stdexcept> #include <iostream> #include <boost/format.hpp> -#include "utils.h" +//#include "utils.h" /*********************************************************************** * UHD Source @@ -59,7 +59,7 @@ public: void set_samp_rate(double rate){ _dev->set_rx_rate(rate); - do_samp_rate_error_message(rate, get_samp_rate(), "RX"); + //do_samp_rate_error_message(rate, get_samp_rate(), "RX"); } double get_samp_rate(void){ @@ -68,7 +68,7 @@ public: uhd::tune_result_t set_center_freq(double freq){ uhd::tune_result_t tr = _dev->set_rx_freq(freq); - do_tune_freq_error_message(freq, _dev->get_rx_freq(), "RX"); + //do_tune_freq_error_message(freq, _dev->get_rx_freq(), "RX"); return tr; } diff --git a/gr-uhd/lib/uhd_single_usrp_sink.cc b/gr-uhd/lib/uhd_single_usrp_sink.cc index 96f86c8db7..cd7d7a6188 100644 --- a/gr-uhd/lib/uhd_single_usrp_sink.cc +++ b/gr-uhd/lib/uhd_single_usrp_sink.cc @@ -22,7 +22,6 @@ #include <uhd_single_usrp_sink.h> #include <gr_io_signature.h> #include <stdexcept> -#include "utils.h" /*********************************************************************** * UHD Single USPR Sink @@ -56,7 +55,6 @@ public: void set_samp_rate(double rate){ _dev->set_tx_rate(rate); - do_samp_rate_error_message(rate, get_samp_rate(), "TX"); } double get_samp_rate(void){ @@ -65,7 +63,6 @@ public: uhd::tune_result_t set_center_freq(double freq, size_t chan){ uhd::tune_result_t tr = _dev->set_tx_freq(freq, chan); - do_tune_freq_error_message(freq, _dev->get_tx_freq(chan), "TX"); return tr; } diff --git a/gr-uhd/lib/uhd_single_usrp_source.cc b/gr-uhd/lib/uhd_single_usrp_source.cc index b5e39b5a4d..fc2c453eb3 100644 --- a/gr-uhd/lib/uhd_single_usrp_source.cc +++ b/gr-uhd/lib/uhd_single_usrp_source.cc @@ -24,7 +24,6 @@ #include <stdexcept> #include <iostream> #include <boost/format.hpp> -#include "utils.h" /*********************************************************************** * UHD Single USPR Source @@ -54,7 +53,6 @@ public: void set_samp_rate(double rate){ _dev->set_rx_rate(rate); - do_samp_rate_error_message(rate, get_samp_rate(), "RX"); } double get_samp_rate(void){ @@ -63,7 +61,6 @@ public: uhd::tune_result_t set_center_freq(double freq, size_t chan){ uhd::tune_result_t tr = _dev->set_rx_freq(freq, chan); - do_tune_freq_error_message(freq, _dev->get_rx_freq(chan), "RX"); return tr; } diff --git a/gr-uhd/lib/utils.cc b/gr-uhd/lib/utils.cc deleted file mode 100644 index da83529650..0000000000 --- a/gr-uhd/lib/utils.cc +++ /dev/null @@ -1,56 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2010 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 "utils.h" //local include -#include <uhd/utils/warning.hpp> -#include <boost/format.hpp> -#include <cmath> - -void do_samp_rate_error_message( - double target_rate, - double actual_rate, - const std::string &xx -){ - static const double max_allowed_error = 1.0; //Sps - if (std::abs(target_rate - actual_rate) > max_allowed_error){ - uhd::print_warning(str(boost::format( - "The hardware does not support the requested %s sample rate:\n" - "Target sample rate: %f MSps\n" - "Actual sample rate: %f MSps\n" - ) % xx % (target_rate/1e6) % (actual_rate/1e6))); - } -} - -void do_tune_freq_error_message( - double target_freq, - double actual_freq, - const std::string &xx -){ - static const double max_allowed_error = 1.0; //Hz - if (std::abs(target_freq - actual_freq) > max_allowed_error){ - uhd::print_warning(str(boost::format( - "The hardware does not support the requested %s frequency:\n" - "Target frequency: %f MHz\n" - "Actual frequency: %f MHz\n" - ) % xx % (target_freq/1e6) % (actual_freq/1e6))); - } -} diff --git a/gr-uhd/lib/utils.h b/gr-uhd/lib/utils.h deleted file mode 100644 index 4a05476bdb..0000000000 --- a/gr-uhd/lib/utils.h +++ /dev/null @@ -1,40 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2010 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. - */ - -#ifndef INCLUDED_NOINST_UTILS_H -#define INCLUDED_NOINST_UTILS_H - -#include <string> - -void do_samp_rate_error_message( - double target_rate, - double actual_rate, - const std::string &xx -); - -void do_tune_freq_error_message( - double target_freq, - double actual_freq, - const std::string &xx -); - -#endif /* INCLUDED_NOINST_UTILS_H */ -- cgit v1.2.3 From 4ac5545625d3d6df9881695f764c9c94049edb7b Mon Sep 17 00:00:00 2001 From: Josh Blum <josh@joshknows.com> Date: Mon, 18 Oct 2010 12:18:13 -0700 Subject: uhd: added multi usrp skeleton and added deprecation note to other headers --- gr-uhd/lib/Makefile.am | 8 +-- gr-uhd/lib/uhd_mimo_sink.h | 3 + gr-uhd/lib/uhd_mimo_source.h | 3 + gr-uhd/lib/uhd_multi_usrp_sink.cc | 24 +++++++ gr-uhd/lib/uhd_multi_usrp_sink.h | 138 ++++++++++++++++++++++++++++++++++++ gr-uhd/lib/uhd_multi_usrp_source.cc | 24 +++++++ gr-uhd/lib/uhd_multi_usrp_source.h | 138 ++++++++++++++++++++++++++++++++++++ gr-uhd/lib/uhd_simple_sink.h | 3 + gr-uhd/lib/uhd_simple_source.h | 3 + 9 files changed, 340 insertions(+), 4 deletions(-) create mode 100644 gr-uhd/lib/uhd_multi_usrp_sink.cc create mode 100644 gr-uhd/lib/uhd_multi_usrp_sink.h create mode 100644 gr-uhd/lib/uhd_multi_usrp_source.cc create mode 100644 gr-uhd/lib/uhd_multi_usrp_source.h (limited to 'gr-uhd/lib') diff --git a/gr-uhd/lib/Makefile.am b/gr-uhd/lib/Makefile.am index 69a41e7884..d9a296c754 100644 --- a/gr-uhd/lib/Makefile.am +++ b/gr-uhd/lib/Makefile.am @@ -31,6 +31,8 @@ lib_LTLIBRARIES = libgnuradio-uhd.la libgnuradio_uhd_la_SOURCES = \ uhd_mimo_source.cc \ uhd_mimo_sink.cc \ + uhd_multi_usrp_source.cc \ + uhd_multi_usrp_sink.cc \ uhd_simple_source.cc \ uhd_simple_sink.cc \ uhd_single_usrp_source.cc \ @@ -43,10 +45,8 @@ libgnuradio_uhd_la_LIBADD = \ libgnuradio_uhd_la_LDFLAGS = $(LTVERSIONFLAGS) grinclude_HEADERS = \ - uhd_mimo_source.h \ - uhd_mimo_sink.h \ - uhd_simple_source.h \ - uhd_simple_sink.h \ + uhd_multi_usrp_source.h \ + uhd_multi_usrp_sink.h \ uhd_single_usrp_source.h \ uhd_single_usrp_sink.h diff --git a/gr-uhd/lib/uhd_mimo_sink.h b/gr-uhd/lib/uhd_mimo_sink.h index 46679d973d..a0a30381c3 100644 --- a/gr-uhd/lib/uhd_mimo_sink.h +++ b/gr-uhd/lib/uhd_mimo_sink.h @@ -34,6 +34,9 @@ boost::shared_ptr<uhd_mimo_sink> uhd_make_mimo_sink( const uhd::io_type_t::tid_t &type ); +/*********************************************************************** + * DEPRECATED + **********************************************************************/ class uhd_mimo_sink : public gr_sync_block{ public: diff --git a/gr-uhd/lib/uhd_mimo_source.h b/gr-uhd/lib/uhd_mimo_source.h index fbd7f2c420..f6f18eedcf 100644 --- a/gr-uhd/lib/uhd_mimo_source.h +++ b/gr-uhd/lib/uhd_mimo_source.h @@ -34,6 +34,9 @@ boost::shared_ptr<uhd_mimo_source> uhd_make_mimo_source( const uhd::io_type_t::tid_t &type ); +/*********************************************************************** + * DEPRECATED + **********************************************************************/ class uhd_mimo_source : public gr_sync_block{ public: diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.cc b/gr-uhd/lib/uhd_multi_usrp_sink.cc new file mode 100644 index 0000000000..6854649c34 --- /dev/null +++ b/gr-uhd/lib/uhd_multi_usrp_sink.cc @@ -0,0 +1,24 @@ +/* + * Copyright 2010 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 <uhd_multi_usrp_sink.h> +#include <gr_io_signature.h> +#include <stdexcept> diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.h b/gr-uhd/lib/uhd_multi_usrp_sink.h new file mode 100644 index 0000000000..b29657e941 --- /dev/null +++ b/gr-uhd/lib/uhd_multi_usrp_sink.h @@ -0,0 +1,138 @@ +/* + * Copyright 2010 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. + */ + +#ifndef INCLUDED_UHD_MULTI_USRP_SINK_H +#define INCLUDED_UHD_MULTI_USRP_SINK_H + +#include <gr_sync_block.h> +#include <uhd/usrp/multi_usrp.hpp> + +class uhd_multi_usrp_sink; + +boost::shared_ptr<uhd_multi_usrp_sink> uhd_make_multi_usrp_sink( + const std::string &args, + const uhd::io_type_t::tid_t &type, + size_t num_channels +); + +class uhd_multi_usrp_sink : public gr_sync_block{ +public: + + /*! + * Set the IO signature for this block. + * \param sig the input signature + */ + uhd_multi_usrp_sink(gr_io_signature_sptr sig); + + /*! + * Set the subdevice specification. + * \param spec the subdev spec markup string + */ + virtual void set_subdev_spec(const std::string &spec, size_t mboard) = 0; + + /*! + * Set the sample rate for the usrp device. + * \param rate a new rate in Sps + */ + virtual void set_samp_rate(double rate) = 0; + + /*! + * Get the sample rate for the usrp device. + * This is the actual sample rate and may differ from the rate set. + * \return the actual rate in Sps + */ + virtual double get_samp_rate(void) = 0; + + /*! + * Tune the usrp device to the desired center frequency. + * \param freq the desired frequency in Hz + * \return a tune result with the actual frequencies + */ + virtual uhd::tune_result_t set_center_freq(double freq, size_t chan = 0) = 0; + + /*! + * Get the tunable frequency range. + * \return the frequency range in Hz + */ + virtual uhd::freq_range_t get_freq_range(size_t chan = 0) = 0; + + /*! + * Set the gain for the dboard. + * \param gain the gain in dB + */ + virtual void set_gain(float gain, size_t chan = 0) = 0; + + /*! + * Get the actual dboard gain setting. + * \return the actual gain in dB + */ + virtual float get_gain(size_t chan = 0) = 0; + + /*! + * Get the settable gain range. + * \return the gain range in dB + */ + virtual uhd::gain_range_t get_gain_range(size_t chan = 0) = 0; + + /*! + * Set the antenna to use. + * \param ant the antenna string + */ + virtual void set_antenna(const std::string &ant, size_t chan = 0) = 0; + + /*! + * Get the antenna in use. + * \return the antenna string + */ + virtual std::string get_antenna(size_t chan = 0) = 0; + + /*! + * Get a list of possible antennas. + * \return a vector of antenna strings + */ + virtual std::vector<std::string> get_antennas(size_t chan = 0) = 0; + + /*! + * Set the clock configuration. + * \param clock_config the new configuration + */ + virtual void set_clock_config(const uhd::clock_config_t &clock_config, size_t mboard) = 0; + + /*! + * Get the current time registers. + * \return the current usrp time + */ + virtual uhd::time_spec_t get_time_now(void) = 0; + + /*! + * Set the time registers at the next pps. + * \param time_spec the new time + */ + virtual void set_time_next_pps(const uhd::time_spec_t &time_spec) = 0; + + /*! + * Get access to the underlying uhd device object. + * \return the multi usrp device object + */ + virtual uhd::usrp::multi_usrp::sptr get_device(void) = 0; +}; + +#endif /* INCLUDED_UHD_MULTI_USRP_SINK_H */ diff --git a/gr-uhd/lib/uhd_multi_usrp_source.cc b/gr-uhd/lib/uhd_multi_usrp_source.cc new file mode 100644 index 0000000000..27caffbfc8 --- /dev/null +++ b/gr-uhd/lib/uhd_multi_usrp_source.cc @@ -0,0 +1,24 @@ +/* + * Copyright 2010 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 <uhd_multi_usrp_source.h> +#include <gr_io_signature.h> +#include <stdexcept> diff --git a/gr-uhd/lib/uhd_multi_usrp_source.h b/gr-uhd/lib/uhd_multi_usrp_source.h new file mode 100644 index 0000000000..b2c4a3ac17 --- /dev/null +++ b/gr-uhd/lib/uhd_multi_usrp_source.h @@ -0,0 +1,138 @@ +/* + * Copyright 2010 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. + */ + +#ifndef INCLUDED_UHD_MULTI_USRP_SOURCE_H +#define INCLUDED_UHD_MULTI_USRP_SOURCE_H + +#include <gr_sync_block.h> +#include <uhd/usrp/multi_usrp.hpp> + +class uhd_multi_usrp_source; + +boost::shared_ptr<uhd_multi_usrp_source> uhd_make_multi_usrp_source( + const std::string &args, + const uhd::io_type_t::tid_t &type, + size_t num_channels +); + +class uhd_multi_usrp_source : public gr_sync_block{ +public: + + /*! + * Set the IO signature for this block. + * \param sig the output signature + */ + uhd_multi_usrp_source(gr_io_signature_sptr sig); + + /*! + * Set the subdevice specification. + * \param spec the subdev spec markup string + */ + virtual void set_subdev_spec(const std::string &spec, size_t mboard) = 0; + + /*! + * Set the sample rate for the usrp device. + * \param rate a new rate in Sps + */ + virtual void set_samp_rate(double rate) = 0; + + /*! + * Get the sample rate for the usrp device. + * This is the actual sample rate and may differ from the rate set. + * \return the actual rate in Sps + */ + virtual double get_samp_rate(void) = 0; + + /*! + * Tune the usrp device to the desired center frequency. + * \param freq the desired frequency in Hz + * \return a tune result with the actual frequencies + */ + virtual uhd::tune_result_t set_center_freq(double freq, size_t chan = 0) = 0; + + /*! + * Get the tunable frequency range. + * \return the frequency range in Hz + */ + virtual uhd::freq_range_t get_freq_range(size_t chan = 0) = 0; + + /*! + * Set the gain for the dboard. + * \param gain the gain in dB + */ + virtual void set_gain(float gain, size_t chan = 0) = 0; + + /*! + * Get the actual dboard gain setting. + * \return the actual gain in dB + */ + virtual float get_gain(size_t chan = 0) = 0; + + /*! + * Get the settable gain range. + * \return the gain range in dB + */ + virtual uhd::gain_range_t get_gain_range(size_t chan = 0) = 0; + + /*! + * Set the antenna to use. + * \param ant the antenna string + */ + virtual void set_antenna(const std::string &ant, size_t chan = 0) = 0; + + /*! + * Get the antenna in use. + * \return the antenna string + */ + virtual std::string get_antenna(size_t chan = 0) = 0; + + /*! + * Get a list of possible antennas. + * \return a vector of antenna strings + */ + virtual std::vector<std::string> get_antennas(size_t chan = 0) = 0; + + /*! + * Set the clock configuration. + * \param clock_config the new configuration + */ + virtual void set_clock_config(const uhd::clock_config_t &clock_config, size_t mboard) = 0; + + /*! + * Get the current time registers. + * \return the current usrp time + */ + virtual uhd::time_spec_t get_time_now(void) = 0; + + /*! + * Set the time registers at the next pps. + * \param time_spec the new time + */ + virtual void set_time_next_pps(const uhd::time_spec_t &time_spec) = 0; + + /*! + * Get access to the underlying uhd device object. + * \return the multi usrp device object + */ + virtual uhd::usrp::multi_usrp::sptr get_device(void) = 0; +}; + +#endif /* INCLUDED_UHD_MULTI_USRP_SOURCE_H */ diff --git a/gr-uhd/lib/uhd_simple_sink.h b/gr-uhd/lib/uhd_simple_sink.h index 0abf306816..44b868698c 100644 --- a/gr-uhd/lib/uhd_simple_sink.h +++ b/gr-uhd/lib/uhd_simple_sink.h @@ -33,6 +33,9 @@ boost::shared_ptr<uhd_simple_sink> uhd_make_simple_sink( const uhd::io_type_t::tid_t &type ); +/*********************************************************************** + * DEPRECATED + **********************************************************************/ class uhd_simple_sink : public gr_sync_block{ public: diff --git a/gr-uhd/lib/uhd_simple_source.h b/gr-uhd/lib/uhd_simple_source.h index b95c0cfd9d..4e79afa21e 100644 --- a/gr-uhd/lib/uhd_simple_source.h +++ b/gr-uhd/lib/uhd_simple_source.h @@ -33,6 +33,9 @@ boost::shared_ptr<uhd_simple_source> uhd_make_simple_source( const uhd::io_type_t::tid_t &type ); +/*********************************************************************** + * DEPRECATED + **********************************************************************/ class uhd_simple_source : public gr_sync_block{ public: -- cgit v1.2.3 From 873228d25b3ea5df8eb10f6652518f144858af61 Mon Sep 17 00:00:00 2001 From: Josh Blum <josh@joshknows.com> Date: Mon, 18 Oct 2010 13:46:51 -0700 Subject: uhd: filled in multi usrp code and swig file --- gr-uhd/lib/uhd_multi_usrp_sink.cc | 151 ++++++++++++++++++++++++++++++++++ gr-uhd/lib/uhd_multi_usrp_sink.h | 6 ++ gr-uhd/lib/uhd_multi_usrp_source.cc | 154 +++++++++++++++++++++++++++++++++++ gr-uhd/lib/uhd_multi_usrp_source.h | 6 ++ gr-uhd/lib/uhd_single_usrp_sink.cc | 10 +-- gr-uhd/lib/uhd_single_usrp_source.cc | 6 +- gr-uhd/swig/uhd_swig.i | 33 +++++--- 7 files changed, 344 insertions(+), 22 deletions(-) (limited to 'gr-uhd/lib') diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.cc b/gr-uhd/lib/uhd_multi_usrp_sink.cc index 6854649c34..202f128406 100644 --- a/gr-uhd/lib/uhd_multi_usrp_sink.cc +++ b/gr-uhd/lib/uhd_multi_usrp_sink.cc @@ -22,3 +22,154 @@ #include <uhd_multi_usrp_sink.h> #include <gr_io_signature.h> #include <stdexcept> + +/*********************************************************************** + * UHD Multi USRP Sink + **********************************************************************/ +uhd_multi_usrp_sink::uhd_multi_usrp_sink(gr_io_signature_sptr sig) +:gr_sync_block("uhd multi usrp sink", sig, gr_make_io_signature(0, 0, 0)){ + /* NOP */ +} + +/*********************************************************************** + * UHD Multi USRP Sink Impl + **********************************************************************/ +class uhd_multi_usrp_sink_impl : public uhd_multi_usrp_sink{ +public: + uhd_multi_usrp_sink_impl( + const std::string &args, + const uhd::io_type_t &type, + size_t num_channels + ) : uhd_multi_usrp_sink(gr_make_io_signature(num_channels, num_channels, type.size)), _type(type), _nchan(num_channels) + { + _dev = uhd::usrp::multi_usrp::make(args); + } + + void set_subdev_spec(const std::string &spec, size_t mboard){ + return _dev->set_tx_subdev_spec(spec, mboard); + } + + void set_samp_rate(double rate){ + _dev->set_tx_rate(rate); + } + + double get_samp_rate(void){ + return _dev->get_tx_rate(); + } + + uhd::tune_result_t set_center_freq(double freq, size_t chan){ + uhd::tune_result_t tr = _dev->set_tx_freq(freq, chan); + return tr; + } + + uhd::freq_range_t get_freq_range(size_t chan){ + return _dev->get_tx_freq_range(chan); + } + + void set_gain(float gain, size_t chan){ + return _dev->set_tx_gain(gain, chan); + } + + float get_gain(size_t chan){ + return _dev->get_tx_gain(chan); + } + + uhd::gain_range_t get_gain_range(size_t chan){ + return _dev->get_tx_gain_range(chan); + } + + void set_antenna(const std::string &ant, size_t chan){ + return _dev->set_tx_antenna(ant, chan); + } + + std::string get_antenna(size_t chan){ + return _dev->get_tx_antenna(chan); + } + + std::vector<std::string> get_antennas(size_t chan){ + return _dev->get_tx_antennas(chan); + } + + void set_clock_config(const uhd::clock_config_t &clock_config, size_t mboard){ + return _dev->set_clock_config(clock_config, mboard); + } + + uhd::time_spec_t get_time_now(void){ + return _dev->get_time_now(); + } + + void set_time_next_pps(const uhd::time_spec_t &time_spec){ + return _dev->set_time_next_pps(time_spec); + } + + void set_time_unknown_pps(const uhd::time_spec_t &time_spec){ + return _dev->set_time_unknown_pps(time_spec); + } + + uhd::usrp::multi_usrp::sptr get_device(void){ + return _dev; + } + +/*********************************************************************** + * Work + **********************************************************************/ + int work( + int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items + ){ + uhd::tx_metadata_t metadata; + metadata.start_of_burst = true; + + return _dev->get_device()->send( + input_items, noutput_items, metadata, + _type, uhd::device::SEND_MODE_FULL_BUFF + ); + } + + //Send an empty start-of-burst packet to begin streaming. + //Set at a time in the near future so data will be sync'd. + bool start(void){ + uhd::tx_metadata_t metadata; + metadata.start_of_burst = true; + metadata.has_time_spec = true; + metadata.time_spec = get_time_now() + uhd::time_spec_t(0.01); //10ms offset in future + + _dev->get_device()->send( + gr_vector_const_void_star(_nchan), 0, metadata, + _type, uhd::device::SEND_MODE_ONE_PACKET + ); + return true; + } + + //Send an empty end-of-burst packet to end streaming. + //Ending the burst avoids an underflow error on stop. + bool stop(void){ + uhd::tx_metadata_t metadata; + metadata.end_of_burst = true; + + _dev->get_device()->send( + gr_vector_const_void_star(_nchan), 0, metadata, + _type, uhd::device::SEND_MODE_ONE_PACKET + ); + return true; + } + +protected: + uhd::usrp::multi_usrp::sptr _dev; + const uhd::io_type_t _type; + size_t _nchan; +}; + +/*********************************************************************** + * Make UHD Multi USRP Sink + **********************************************************************/ +boost::shared_ptr<uhd_multi_usrp_sink> uhd_make_multi_usrp_sink( + const std::string &args, + const uhd::io_type_t::tid_t &type, + size_t num_channels +){ + return boost::shared_ptr<uhd_multi_usrp_sink>( + new uhd_multi_usrp_sink_impl(args, type, num_channels) + ); +} diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.h b/gr-uhd/lib/uhd_multi_usrp_sink.h index b29657e941..13bba20fb6 100644 --- a/gr-uhd/lib/uhd_multi_usrp_sink.h +++ b/gr-uhd/lib/uhd_multi_usrp_sink.h @@ -128,6 +128,12 @@ public: */ virtual void set_time_next_pps(const uhd::time_spec_t &time_spec) = 0; + /*! + * Sync the time registers with an unknown pps edge. + * \param time_spec the new time + */ + virtual void set_time_unknown_pps(const uhd::time_spec_t &time_spec) = 0; + /*! * Get access to the underlying uhd device object. * \return the multi usrp device object diff --git a/gr-uhd/lib/uhd_multi_usrp_source.cc b/gr-uhd/lib/uhd_multi_usrp_source.cc index 27caffbfc8..c10c08c500 100644 --- a/gr-uhd/lib/uhd_multi_usrp_source.cc +++ b/gr-uhd/lib/uhd_multi_usrp_source.cc @@ -22,3 +22,157 @@ #include <uhd_multi_usrp_source.h> #include <gr_io_signature.h> #include <stdexcept> +#include <iostream> +#include <boost/format.hpp> + +/*********************************************************************** + * UHD Multi USRP Source + **********************************************************************/ +uhd_multi_usrp_source::uhd_multi_usrp_source(gr_io_signature_sptr sig) +:gr_sync_block("uhd multi_usrp source", gr_make_io_signature(0, 0, 0), sig){ + /* NOP */ +} + +/*********************************************************************** + * UHD Multi USRP Source Impl + **********************************************************************/ +class uhd_multi_usrp_source_impl : public uhd_multi_usrp_source{ +public: + uhd_multi_usrp_source_impl( + const std::string &args, + const uhd::io_type_t &type, + size_t num_channels + ) : uhd_multi_usrp_source(gr_make_io_signature(num_channels, num_channels, type.size)), _type(type) + { + _dev = uhd::usrp::multi_usrp::make(args); + } + + void set_subdev_spec(const std::string &spec, size_t mboard){ + return _dev->set_rx_subdev_spec(spec, mboard); + } + + void set_samp_rate(double rate){ + _dev->set_rx_rate(rate); + } + + double get_samp_rate(void){ + return _dev->get_rx_rate(); + } + + uhd::tune_result_t set_center_freq(double freq, size_t chan){ + uhd::tune_result_t tr = _dev->set_rx_freq(freq, chan); + return tr; + } + + uhd::freq_range_t get_freq_range(size_t chan){ + return _dev->get_rx_freq_range(chan); + } + + void set_gain(float gain, size_t chan){ + return _dev->set_rx_gain(gain, chan); + } + + float get_gain(size_t chan){ + return _dev->get_rx_gain(chan); + } + + uhd::gain_range_t get_gain_range(size_t chan){ + return _dev->get_rx_gain_range(chan); + } + + void set_antenna(const std::string &ant, size_t chan){ + return _dev->set_rx_antenna(ant, chan); + } + + std::string get_antenna(size_t chan){ + return _dev->get_rx_antenna(chan); + } + + std::vector<std::string> get_antennas(size_t chan){ + return _dev->get_rx_antennas(chan); + } + + void set_clock_config(const uhd::clock_config_t &clock_config, size_t mboard){ + return _dev->set_clock_config(clock_config, mboard); + } + + uhd::time_spec_t get_time_now(void){ + return _dev->get_time_now(); + } + + void set_time_next_pps(const uhd::time_spec_t &time_spec){ + return _dev->set_time_next_pps(time_spec); + } + + void set_time_unknown_pps(const uhd::time_spec_t &time_spec){ + return _dev->set_time_unknown_pps(time_spec); + } + + uhd::usrp::multi_usrp::sptr get_device(void){ + return _dev; + } + +/*********************************************************************** + * Work + **********************************************************************/ + int work( + int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items + ){ + uhd::rx_metadata_t metadata; //not passed out of this block + + size_t num_samps = _dev->get_device()->recv( + output_items, noutput_items, metadata, + _type, uhd::device::RECV_MODE_FULL_BUFF + ); + + switch(metadata.error_code){ + case uhd::rx_metadata_t::ERROR_CODE_NONE: + return num_samps; + + case uhd::rx_metadata_t::ERROR_CODE_OVERFLOW: + //ignore overflows and try work again + return work(noutput_items, input_items, output_items); + + default: + std::cout << boost::format( + "UHD source block got error code 0x%x" + ) % metadata.error_code << std::endl; + return num_samps; + } + } + + bool start(void){ + //setup a stream command that starts streaming slightly in the future + static const double reasonable_delay = 0.01; //10 ms (order of magnitude >> RTT) + uhd::stream_cmd_t stream_cmd(uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS); + stream_cmd.stream_now = false; + stream_cmd.time_spec = get_time_now() + uhd::time_spec_t(_dev->get_num_mboards() * reasonable_delay); + _dev->issue_stream_cmd(stream_cmd); + return true; + } + + bool stop(void){ + _dev->issue_stream_cmd(uhd::stream_cmd_t::STREAM_MODE_STOP_CONTINUOUS); + return true; + } + +private: + uhd::usrp::multi_usrp::sptr _dev; + const uhd::io_type_t _type; +}; + + +/*********************************************************************** + * Make UHD Multi USRP Source + **********************************************************************/ +boost::shared_ptr<uhd_multi_usrp_source> uhd_make_multi_usrp_source( + const std::string &args, + const uhd::io_type_t::tid_t &type, + size_t num_channels +){ + return boost::shared_ptr<uhd_multi_usrp_source>( + new uhd_multi_usrp_source_impl(args, type, num_channels) + ); +} diff --git a/gr-uhd/lib/uhd_multi_usrp_source.h b/gr-uhd/lib/uhd_multi_usrp_source.h index b2c4a3ac17..b94e53f01b 100644 --- a/gr-uhd/lib/uhd_multi_usrp_source.h +++ b/gr-uhd/lib/uhd_multi_usrp_source.h @@ -128,6 +128,12 @@ public: */ virtual void set_time_next_pps(const uhd::time_spec_t &time_spec) = 0; + /*! + * Sync the time registers with an unknown pps edge. + * \param time_spec the new time + */ + virtual void set_time_unknown_pps(const uhd::time_spec_t &time_spec) = 0; + /*! * Get access to the underlying uhd device object. * \return the multi usrp device object diff --git a/gr-uhd/lib/uhd_single_usrp_sink.cc b/gr-uhd/lib/uhd_single_usrp_sink.cc index cd7d7a6188..96c1dbdf49 100644 --- a/gr-uhd/lib/uhd_single_usrp_sink.cc +++ b/gr-uhd/lib/uhd_single_usrp_sink.cc @@ -24,7 +24,7 @@ #include <stdexcept> /*********************************************************************** - * UHD Single USPR Sink + * UHD Single USRP Sink **********************************************************************/ uhd_single_usrp_sink::uhd_single_usrp_sink(gr_io_signature_sptr sig) :gr_sync_block("uhd single usrp sink", sig, gr_make_io_signature(0, 0, 0)){ @@ -32,7 +32,7 @@ uhd_single_usrp_sink::uhd_single_usrp_sink(gr_io_signature_sptr sig) } /*********************************************************************** - * UHD Single USPR Sink Impl + * UHD Single USRP Sink Impl **********************************************************************/ class uhd_single_usrp_sink_impl : public uhd_single_usrp_sink{ public: @@ -45,10 +45,6 @@ public: _dev = uhd::usrp::single_usrp::make(args); } - ~uhd_single_usrp_sink_impl(void){ - //NOP - } - void set_subdev_spec(const std::string &spec){ return _dev->set_tx_subdev_spec(spec); } @@ -164,7 +160,7 @@ protected: }; /*********************************************************************** - * Make UHD Single USPR Sink + * Make UHD Single USRP Sink **********************************************************************/ boost::shared_ptr<uhd_single_usrp_sink> uhd_make_single_usrp_sink( const std::string &args, diff --git a/gr-uhd/lib/uhd_single_usrp_source.cc b/gr-uhd/lib/uhd_single_usrp_source.cc index fc2c453eb3..7c3694a99d 100644 --- a/gr-uhd/lib/uhd_single_usrp_source.cc +++ b/gr-uhd/lib/uhd_single_usrp_source.cc @@ -26,7 +26,7 @@ #include <boost/format.hpp> /*********************************************************************** - * UHD Single USPR Source + * UHD Single USRP Source **********************************************************************/ uhd_single_usrp_source::uhd_single_usrp_source(gr_io_signature_sptr sig) :gr_sync_block("uhd single_usrp source", gr_make_io_signature(0, 0, 0), sig){ @@ -34,7 +34,7 @@ uhd_single_usrp_source::uhd_single_usrp_source(gr_io_signature_sptr sig) } /*********************************************************************** - * UHD Single USPR Source Impl + * UHD Single USRP Source Impl **********************************************************************/ class uhd_single_usrp_source_impl : public uhd_single_usrp_source{ public: @@ -160,7 +160,7 @@ private: /*********************************************************************** - * Make UHD Single USPR Source + * Make UHD Single USRP Source **********************************************************************/ boost::shared_ptr<uhd_single_usrp_source> uhd_make_single_usrp_source( const std::string &args, diff --git a/gr-uhd/swig/uhd_swig.i b/gr-uhd/swig/uhd_swig.i index d755dfeee6..1631a768a7 100644 --- a/gr-uhd/swig/uhd_swig.i +++ b/gr-uhd/swig/uhd_swig.i @@ -29,10 +29,13 @@ namespace std { } %{ -#include <uhd_mimo_source.h> -#include <uhd_mimo_sink.h> -#include <uhd_simple_source.h> -#include <uhd_simple_sink.h> +#include <uhd_mimo_source.h> //deprecated +#include <uhd_mimo_sink.h> //deprecated +#include <uhd_simple_source.h> //deprecated +#include <uhd_simple_sink.h> //deprecated + +#include <uhd_multi_usrp_source.h> +#include <uhd_multi_usrp_sink.h> #include <uhd_single_usrp_source.h> #include <uhd_single_usrp_sink.h> %} @@ -44,17 +47,23 @@ namespace std { %include <uhd/types/time_spec.hpp> %include <uhd/types/clock_config.hpp> -GR_SWIG_BLOCK_MAGIC(uhd,mimo_source) -%include <uhd_mimo_source.h> +GR_SWIG_BLOCK_MAGIC(uhd,mimo_source) //deprecated +%include <uhd_mimo_source.h> //deprecated + +GR_SWIG_BLOCK_MAGIC(uhd,mimo_sink) //deprecated +%include <uhd_mimo_sink.h> //deprecated + +GR_SWIG_BLOCK_MAGIC(uhd,simple_source) //deprecated +%include <uhd_simple_source.h> //deprecated -GR_SWIG_BLOCK_MAGIC(uhd,mimo_sink) -%include <uhd_mimo_sink.h> +GR_SWIG_BLOCK_MAGIC(uhd,simple_sink) //deprecated +%include <uhd_simple_sink.h> //deprecated -GR_SWIG_BLOCK_MAGIC(uhd,simple_source) -%include <uhd_simple_source.h> +GR_SWIG_BLOCK_MAGIC(uhd,multi_usrp_source) +%include <uhd_multi_usrp_source.h> -GR_SWIG_BLOCK_MAGIC(uhd,simple_sink) -%include <uhd_simple_sink.h> +GR_SWIG_BLOCK_MAGIC(uhd,multi_usrp_sink) +%include <uhd_multi_usrp_sink.h> GR_SWIG_BLOCK_MAGIC(uhd,single_usrp_source) %include <uhd_single_usrp_source.h> -- cgit v1.2.3 From d029af43c3367a4611185ade70639cc6b7cc5e3d Mon Sep 17 00:00:00 2001 From: Josh Blum <josh@joshknows.com> Date: Mon, 18 Oct 2010 14:09:23 -0700 Subject: uhd: created multi usrp grc wrapper generator, removed mimo gen and checked in its generated files --- gr-uhd/grc/.gitignore | 2 +- gr-uhd/grc/Makefile.am | 21 +- gr-uhd/grc/gen_uhd_mimo_blocks_xml.py | 190 ---------- gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py | 211 +++++++++++ gr-uhd/grc/uhd_mimo_sink.xml | 550 ++++++++++++++++++++++++++++ gr-uhd/grc/uhd_mimo_source.xml | 550 ++++++++++++++++++++++++++++ gr-uhd/lib/Makefile.am | 11 +- 7 files changed, 1332 insertions(+), 203 deletions(-) delete mode 100755 gr-uhd/grc/gen_uhd_mimo_blocks_xml.py create mode 100755 gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py create mode 100644 gr-uhd/grc/uhd_mimo_sink.xml create mode 100644 gr-uhd/grc/uhd_mimo_source.xml (limited to 'gr-uhd/lib') diff --git a/gr-uhd/grc/.gitignore b/gr-uhd/grc/.gitignore index c95275d8d4..d8ab9bd0c3 100644 --- a/gr-uhd/grc/.gitignore +++ b/gr-uhd/grc/.gitignore @@ -1,4 +1,4 @@ -/uhd_mimo*.xml +/uhd_multi*.xml /uhd_single*.xml /Makefile /Makefile.in diff --git a/gr-uhd/grc/Makefile.am b/gr-uhd/grc/Makefile.am index a19a28f033..04b7dca365 100644 --- a/gr-uhd/grc/Makefile.am +++ b/gr-uhd/grc/Makefile.am @@ -23,31 +23,36 @@ include $(top_srcdir)/Makefile.common grcblocksdir = $(grc_blocksdir) -generated_uhd_mimo_blocks = \ - uhd_mimo_source.xml \ - uhd_mimo_sink.xml +generated_uhd_multi_usrp_blocks = \ + uhd_multi_usrp_source.xml \ + uhd_multi_usrp_sink.xml generated_uhd_single_usrp_blocks = \ uhd_single_usrp_source.xml \ uhd_single_usrp_sink.xml BUILT_SOURCES = \ - $(generated_uhd_mimo_blocks) \ + $(generated_uhd_multi_usrp_blocks) \ $(generated_uhd_single_usrp_blocks) dist_grcblocks_DATA = \ - $(BUILT_SOURCES) \ + $(BUILT_SOURCES) + +# add the deprecated files +dist_grcblocks_DATA += \ + uhd_mimo_source.xml \ + uhd_mimo_sink.xml \ uhd_simple_source.xml \ uhd_simple_sink.xml ######################################################################## -# Rules for generating the mimo source and sink blocks +# Rules for generating the source and sink xml wrappers ######################################################################## EXTRA_DIST = \ - $(srcdir)/gen_uhd_mimo_blocks_xml.py \ + $(srcdir)/gen_uhd_multi_usrp_blocks_xml.py \ $(srcdir)/gen_uhd_single_usrp_blocks_xml.py -$(generated_uhd_mimo_blocks): $(srcdir)/gen_uhd_mimo_blocks_xml.py +$(generated_uhd_multi_usrp_blocks): $(srcdir)/gen_uhd_multi_usrp_blocks_xml.py @echo "generating $@..." $(PYTHON) $< $@ diff --git a/gr-uhd/grc/gen_uhd_mimo_blocks_xml.py b/gr-uhd/grc/gen_uhd_mimo_blocks_xml.py deleted file mode 100755 index 7e61563cc8..0000000000 --- a/gr-uhd/grc/gen_uhd_mimo_blocks_xml.py +++ /dev/null @@ -1,190 +0,0 @@ -#!/usr/bin/env python -""" -Copyright 2010 Free Software Foundation, Inc. - -This file is part of GNU Radio - -GNU Radio Companion 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 2 -of the License, or (at your option) any later version. - -GNU Radio Companion 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 this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -""" - -MAIN_TMPL = """\ -<?xml version="1.0"?> -<block> - <name>UHD MIMO $sourk.title()</name> - <key>uhd_mimo_$(sourk)</key> - <category>UHD</category> - <import>from gnuradio import uhd</import> - <make>uhd.mimo_$(sourk)(\$nchan, \$args, uhd.io_type_t.\$type.type) -self.\$(id).set_samp_rate_all(\$samp_rate) -#for $n in range($max_nchan) -\#if \$nchan() > $n -self.\$(id).set_subdev_spec($n, \$sd_spec$(n)) -self.\$(id).set_center_freq($n, \$center_freq$(n)) -self.\$(id).set_gain($n, \$gain$(n)) - \#if \$ant$(n)() -self.\$(id).set_antenna($n, \$ant$(n)) - \#end if -\#end if -#end for -</make> - <callback>set_samp_rate(\$samp_rate)</callback> - #for $n in range($max_nchan) - <callback>set_center_freq($n, \$center_freq$(n))</callback> - <callback>set_gain($n, \$gain$(n))</callback> - <callback>set_antenna($n, \$ant$(n))</callback> - #end for - <param> - <name>Input Type</name> - <key>type</key> - <type>enum</type> - <option> - <name>Complex</name> - <key>complex</key> - <opt>type:COMPLEX_FLOAT32</opt> - <opt>vlen:1</opt> - </option> - <option> - <name>Short</name> - <key>short</key> - <opt>type:COMPLEX_INT16</opt> - <opt>vlen:2</opt> - </option> - </param> - <param> - <name>Num Channels</name> - <key>nchan</key> - <value>2</value> - <type>int</type> - #for $n in range(2, $max_nchan+1) - <option> - <name>$n Channels</name> - <key>$n</key> - </option> - #end for - </param> - <param> - <name>Args</name> - <key>args</key> - <value>addr=192.168.10.2 192.168.20.2</value> - <type>string</type> - </param> - <param> - <name>Samp Rate (Sps)</name> - <key>samp_rate</key> - <value>samp_rate</value> - <type>real</type> - </param> - $params - <check>$max_nchan >= \$nchan</check> - <check>\$nchan >= 0</check> - <$sourk> - <name>$direction</name> - <type>\$type</type> - <vlen>\$type.vlen</vlen> - <nports>\$nchan</nports> - </$sourk> - <doc> -The UHD $sourk.title() Block: - -Args: -Args is a delimited string used to locate UHD devices on your system. \\ -If left blank, the first UHD device found will be used. \\ -Used args to specify a specfic device. \\ -USRP2 Example: addr=192.168.10.2 - -Sample rate: -The sample rate is the number of samples per second input by this block. \\ -The UHD device driver will try its best to match the requested sample rate. \\ -If the requested rate is not possible, the UHD block will print an error at runtime. - -Antenna: -For subdevices/daughterboards with only one antenna, this may be left blank. \\ -Otherwise, the user should specify one of the possible antenna choices. \\ -See the daughterboard application notes for the possible antenna choices. - </doc> -</block> -""" - -PARAMS_TMPL = """ - <param> - <name>Ch$(n): Subdev Spec</name> - <key>sd_spec$(n)</key> - <value></value> - <type>string</type> - <hide> - \#if not \$nchan() > $n - all - \#elif \$sd_spec$(n)() - none - \#else - part - \#end if - </hide> - </param> - <param> - <name>Ch$(n): Center Freq (Hz)</name> - <key>center_freq$(n)</key> - <value>0</value> - <type>real</type> - <hide>\#if \$nchan() > $n then 'none' else 'all'#</hide> - </param> - <param> - <name>Ch$(n): Gain (dB)</name> - <key>gain$(n)</key> - <value>0</value> - <type>real</type> - <hide>\#if \$nchan() > $n then 'none' else 'all'#</hide> - </param> - <param> - <name>Ch$(n): Antenna</name> - <key>ant$(n)</key> - <value></value> - <type>string</type> - <hide> - \#if not \$nchan() > $n - all - \#elif \$ant$(n)() - none - \#else - part - \#end if - </hide> - </param> -""" - -def parse_tmpl(_tmpl, **kwargs): - from Cheetah import Template - return str(Template.Template(_tmpl, kwargs)) - -max_num_channels = 8 - -if __name__ == '__main__': - import sys - for file in sys.argv[1:]: - if 'source' in file: - sourk = 'source' - direction = 'out' - elif 'sink' in file: - sourk = 'sink' - direction = 'in' - else: raise Exception, 'is %s a source or sink?'%file - - params = ''.join([parse_tmpl(PARAMS_TMPL, n=n) for n in range(max_num_channels)]) - open(file, 'w').write(parse_tmpl(MAIN_TMPL, - max_nchan=max_num_channels, - params=params, - sourk=sourk, - direction=direction, - )) diff --git a/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py b/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py new file mode 100755 index 0000000000..a4da53a188 --- /dev/null +++ b/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py @@ -0,0 +1,211 @@ +#!/usr/bin/env python +""" +Copyright 2010 Free Software Foundation, Inc. + +This file is part of GNU Radio + +GNU Radio Companion 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 2 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +""" + +MAIN_TMPL = """\ +<?xml version="1.0"?> +<block> + <name>UHD: Multi USRP $sourk.title()</name> + <key>uhd_multi_usrp_$(sourk)</key> + <category>UHD</category> + <import>from gnuradio import uhd</import> + <make>uhd.multi_usrp_$(sourk)(\$dev_addr, uhd.io_type_t.\$type.type, \$nchan) +self.\$(id).set_subdev_spec(\$sd_spec) +self.\$(id).set_samp_rate(\$samp_rate) +#for $n in range($max_nchan) +\#if \$nchan() > $n +self.\$(id).set_center_freq(\$center_freq$(n), $n) +self.\$(id).set_gain(\$gain$(n), $n) + \#if \$ant$(n)() +self.\$(id).set_antenna(\$ant$(n), $n) + \#end if +\#end if +#end for +</make> + <callback>set_samp_rate(\$samp_rate)</callback> + #for $n in range($max_nchan) + <callback>set_center_freq(\$center_freq$(n), $n)</callback> + <callback>set_gain(\$gain$(n), $n)</callback> + <callback>set_antenna(\$ant$(n), $n)</callback> + #end for + <param> + <name>Input Type</name> + <key>type</key> + <type>enum</type> + <option> + <name>Complex</name> + <key>complex</key> + <opt>type:COMPLEX_FLOAT32</opt> + <opt>vlen:1</opt> + </option> + <option> + <name>Short</name> + <key>short</key> + <opt>type:COMPLEX_INT16</opt> + <opt>vlen:2</opt> + </option> + </param> + <param> + <name>Num Channels</name> + <key>nchan</key> + <value>1</value> + <type>int</type> + <hide>part</hide> + <option> + <name>Multi Channel</name> + <key>1</key> + </option> + <option> + <name>Dual Channel</name> + <key>2</key> + </option> + <option> + <name>Quad Channel</name> + <key>4</key> + </option> + </param> + <param> + <name>Device Addr</name> + <key>dev_addr</key> + <value>addr=192.168.10.2</value> + <type>string</type> + <hide> + \#if \$dev_addr() + none + \#else + part + \#end if + </hide> + </param> + <param> + <name>Subdev Spec</name> + <key>sd_spec</key> + <value></value> + <type>string</type> + <hide> + \#if \$sd_spec() + none + \#else + part + \#end if + </hide> + </param> + <param> + <name>Samp Rate (Sps)</name> + <key>samp_rate</key> + <value>samp_rate</value> + <type>real</type> + </param> + $params + <check>$max_nchan >= \$nchan</check> + <check>\$nchan >= 0</check> + <check>(len((\$sd_spec).split()) or 1) == \$nchan</check> + <$sourk> + <name>$direction</name> + <type>\$type</type> + <vlen>\$type.vlen</vlen> + <nports>\$nchan</nports> + </$sourk> + <doc> +The UHD Multi USRP $sourk.title() Block: + +Device Address: +The device address is a delimited string used to locate UHD devices on your system. \\ +If left blank, the first UHD device found will be used. \\ +Used args to specify a specfic device. +USRP2 Example: addr=192.168.10.2 192.168.10.3 + +Sample rate: +The sample rate is the number of samples per second input by this block. \\ +The UHD device driver will try its best to match the requested sample rate. \\ +If the requested rate is not possible, the UHD block will print an error at runtime. + +Subdevice specification: +Select the subdevice or subdevices for each channel using a markup string. \\ +The markup string consists of a list of dboard_slot:subdev_name pairs (one pair per channel). \\ +If left blank, the UHD will try to select the first subdevice on your system. \\ +See the application notes for further details. +Single channel example: A:AB +Dual channel example: A:AB B:0 + +Antenna: +For subdevices/daughterboards with only one antenna, this may be left blank. \\ +Otherwise, the user should specify one of the possible antenna choices. \\ +See the daughterboard application notes for the possible antenna choices. + </doc> +</block> +""" + +PARAMS_TMPL = """ + <param> + <name>Ch$(n): Center Freq (Hz)</name> + <key>center_freq$(n)</key> + <value>0</value> + <type>real</type> + <hide>\#if \$nchan() > $n then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch$(n): Gain (dB)</name> + <key>gain$(n)</key> + <value>0</value> + <type>real</type> + <hide>\#if \$nchan() > $n then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch$(n): Antenna</name> + <key>ant$(n)</key> + <value></value> + <type>string</type> + <hide> + \#if not \$nchan() > $n + all + \#elif \$ant$(n)() + none + \#else + part + \#end if + </hide> + </param> +""" + +def parse_tmpl(_tmpl, **kwargs): + from Cheetah import Template + return str(Template.Template(_tmpl, kwargs)) + +max_num_channels = 4 + +if __name__ == '__main__': + import sys + for file in sys.argv[1:]: + if 'source' in file: + sourk = 'source' + direction = 'out' + elif 'sink' in file: + sourk = 'sink' + direction = 'in' + else: raise Exception, 'is %s a source or sink?'%file + + params = ''.join([parse_tmpl(PARAMS_TMPL, n=n) for n in range(max_num_channels)]) + open(file, 'w').write(parse_tmpl(MAIN_TMPL, + max_nchan=max_num_channels, + params=params, + sourk=sourk, + direction=direction, + )) diff --git a/gr-uhd/grc/uhd_mimo_sink.xml b/gr-uhd/grc/uhd_mimo_sink.xml new file mode 100644 index 0000000000..2f5f2011f1 --- /dev/null +++ b/gr-uhd/grc/uhd_mimo_sink.xml @@ -0,0 +1,550 @@ +<?xml version="1.0"?> +<block> + <name>UHD MIMO Sink</name> + <key>uhd_mimo_sink</key> + <category>UHD</category> + <import>from gnuradio import uhd</import> + <make>uhd.mimo_sink($nchan, $args, uhd.io_type_t.$type.type) +self.$(id).set_samp_rate_all($samp_rate) +#if $nchan() > 0 +self.$(id).set_subdev_spec(0, $sd_spec0) +self.$(id).set_center_freq(0, $center_freq0) +self.$(id).set_gain(0, $gain0) + #if $ant0() +self.$(id).set_antenna(0, $ant0) + #end if +#end if +#if $nchan() > 1 +self.$(id).set_subdev_spec(1, $sd_spec1) +self.$(id).set_center_freq(1, $center_freq1) +self.$(id).set_gain(1, $gain1) + #if $ant1() +self.$(id).set_antenna(1, $ant1) + #end if +#end if +#if $nchan() > 2 +self.$(id).set_subdev_spec(2, $sd_spec2) +self.$(id).set_center_freq(2, $center_freq2) +self.$(id).set_gain(2, $gain2) + #if $ant2() +self.$(id).set_antenna(2, $ant2) + #end if +#end if +#if $nchan() > 3 +self.$(id).set_subdev_spec(3, $sd_spec3) +self.$(id).set_center_freq(3, $center_freq3) +self.$(id).set_gain(3, $gain3) + #if $ant3() +self.$(id).set_antenna(3, $ant3) + #end if +#end if +#if $nchan() > 4 +self.$(id).set_subdev_spec(4, $sd_spec4) +self.$(id).set_center_freq(4, $center_freq4) +self.$(id).set_gain(4, $gain4) + #if $ant4() +self.$(id).set_antenna(4, $ant4) + #end if +#end if +#if $nchan() > 5 +self.$(id).set_subdev_spec(5, $sd_spec5) +self.$(id).set_center_freq(5, $center_freq5) +self.$(id).set_gain(5, $gain5) + #if $ant5() +self.$(id).set_antenna(5, $ant5) + #end if +#end if +#if $nchan() > 6 +self.$(id).set_subdev_spec(6, $sd_spec6) +self.$(id).set_center_freq(6, $center_freq6) +self.$(id).set_gain(6, $gain6) + #if $ant6() +self.$(id).set_antenna(6, $ant6) + #end if +#end if +#if $nchan() > 7 +self.$(id).set_subdev_spec(7, $sd_spec7) +self.$(id).set_center_freq(7, $center_freq7) +self.$(id).set_gain(7, $gain7) + #if $ant7() +self.$(id).set_antenna(7, $ant7) + #end if +#end if +</make> + <callback>set_samp_rate($samp_rate)</callback> + <callback>set_center_freq(0, $center_freq0)</callback> + <callback>set_gain(0, $gain0)</callback> + <callback>set_antenna(0, $ant0)</callback> + <callback>set_center_freq(1, $center_freq1)</callback> + <callback>set_gain(1, $gain1)</callback> + <callback>set_antenna(1, $ant1)</callback> + <callback>set_center_freq(2, $center_freq2)</callback> + <callback>set_gain(2, $gain2)</callback> + <callback>set_antenna(2, $ant2)</callback> + <callback>set_center_freq(3, $center_freq3)</callback> + <callback>set_gain(3, $gain3)</callback> + <callback>set_antenna(3, $ant3)</callback> + <callback>set_center_freq(4, $center_freq4)</callback> + <callback>set_gain(4, $gain4)</callback> + <callback>set_antenna(4, $ant4)</callback> + <callback>set_center_freq(5, $center_freq5)</callback> + <callback>set_gain(5, $gain5)</callback> + <callback>set_antenna(5, $ant5)</callback> + <callback>set_center_freq(6, $center_freq6)</callback> + <callback>set_gain(6, $gain6)</callback> + <callback>set_antenna(6, $ant6)</callback> + <callback>set_center_freq(7, $center_freq7)</callback> + <callback>set_gain(7, $gain7)</callback> + <callback>set_antenna(7, $ant7)</callback> + <param> + <name>Input Type</name> + <key>type</key> + <type>enum</type> + <option> + <name>Complex</name> + <key>complex</key> + <opt>type:COMPLEX_FLOAT32</opt> + <opt>vlen:1</opt> + </option> + <option> + <name>Short</name> + <key>short</key> + <opt>type:COMPLEX_INT16</opt> + <opt>vlen:2</opt> + </option> + </param> + <param> + <name>Num Channels</name> + <key>nchan</key> + <value>2</value> + <type>int</type> + <option> + <name>2 Channels</name> + <key>2</key> + </option> + <option> + <name>3 Channels</name> + <key>3</key> + </option> + <option> + <name>4 Channels</name> + <key>4</key> + </option> + <option> + <name>5 Channels</name> + <key>5</key> + </option> + <option> + <name>6 Channels</name> + <key>6</key> + </option> + <option> + <name>7 Channels</name> + <key>7</key> + </option> + <option> + <name>8 Channels</name> + <key>8</key> + </option> + </param> + <param> + <name>Args</name> + <key>args</key> + <value>addr=192.168.10.2 192.168.20.2</value> + <type>string</type> + </param> + <param> + <name>Samp Rate (Sps)</name> + <key>samp_rate</key> + <value>samp_rate</value> + <type>real</type> + </param> + + <param> + <name>Ch0: Subdev Spec</name> + <key>sd_spec0</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 0 + all + #elif $sd_spec0() + none + #else + part + #end if + </hide> + </param> + <param> + <name>Ch0: Center Freq (Hz)</name> + <key>center_freq0</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 0 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch0: Gain (dB)</name> + <key>gain0</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 0 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch0: Antenna</name> + <key>ant0</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 0 + all + #elif $ant0() + none + #else + part + #end if + </hide> + </param> + + <param> + <name>Ch1: Subdev Spec</name> + <key>sd_spec1</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 1 + all + #elif $sd_spec1() + none + #else + part + #end if + </hide> + </param> + <param> + <name>Ch1: Center Freq (Hz)</name> + <key>center_freq1</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 1 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch1: Gain (dB)</name> + <key>gain1</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 1 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch1: Antenna</name> + <key>ant1</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 1 + all + #elif $ant1() + none + #else + part + #end if + </hide> + </param> + + <param> + <name>Ch2: Subdev Spec</name> + <key>sd_spec2</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 2 + all + #elif $sd_spec2() + none + #else + part + #end if + </hide> + </param> + <param> + <name>Ch2: Center Freq (Hz)</name> + <key>center_freq2</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 2 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch2: Gain (dB)</name> + <key>gain2</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 2 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch2: Antenna</name> + <key>ant2</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 2 + all + #elif $ant2() + none + #else + part + #end if + </hide> + </param> + + <param> + <name>Ch3: Subdev Spec</name> + <key>sd_spec3</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 3 + all + #elif $sd_spec3() + none + #else + part + #end if + </hide> + </param> + <param> + <name>Ch3: Center Freq (Hz)</name> + <key>center_freq3</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 3 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch3: Gain (dB)</name> + <key>gain3</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 3 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch3: Antenna</name> + <key>ant3</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 3 + all + #elif $ant3() + none + #else + part + #end if + </hide> + </param> + + <param> + <name>Ch4: Subdev Spec</name> + <key>sd_spec4</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 4 + all + #elif $sd_spec4() + none + #else + part + #end if + </hide> + </param> + <param> + <name>Ch4: Center Freq (Hz)</name> + <key>center_freq4</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 4 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch4: Gain (dB)</name> + <key>gain4</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 4 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch4: Antenna</name> + <key>ant4</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 4 + all + #elif $ant4() + none + #else + part + #end if + </hide> + </param> + + <param> + <name>Ch5: Subdev Spec</name> + <key>sd_spec5</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 5 + all + #elif $sd_spec5() + none + #else + part + #end if + </hide> + </param> + <param> + <name>Ch5: Center Freq (Hz)</name> + <key>center_freq5</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 5 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch5: Gain (dB)</name> + <key>gain5</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 5 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch5: Antenna</name> + <key>ant5</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 5 + all + #elif $ant5() + none + #else + part + #end if + </hide> + </param> + + <param> + <name>Ch6: Subdev Spec</name> + <key>sd_spec6</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 6 + all + #elif $sd_spec6() + none + #else + part + #end if + </hide> + </param> + <param> + <name>Ch6: Center Freq (Hz)</name> + <key>center_freq6</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 6 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch6: Gain (dB)</name> + <key>gain6</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 6 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch6: Antenna</name> + <key>ant6</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 6 + all + #elif $ant6() + none + #else + part + #end if + </hide> + </param> + + <param> + <name>Ch7: Subdev Spec</name> + <key>sd_spec7</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 7 + all + #elif $sd_spec7() + none + #else + part + #end if + </hide> + </param> + <param> + <name>Ch7: Center Freq (Hz)</name> + <key>center_freq7</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 7 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch7: Gain (dB)</name> + <key>gain7</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 7 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch7: Antenna</name> + <key>ant7</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 7 + all + #elif $ant7() + none + #else + part + #end if + </hide> + </param> + + <check>8 >= $nchan</check> + <check>$nchan >= 0</check> + <sink> + <name>in</name> + <type>$type</type> + <vlen>$type.vlen</vlen> + <nports>$nchan</nports> + </sink> + <doc> +The UHD Sink Block: + +Args: +Args is a delimited string used to locate UHD devices on your system. \ +If left blank, the first UHD device found will be used. \ +Used args to specify a specfic device. \ +USRP2 Example: addr=192.168.10.2 + +Sample rate: +The sample rate is the number of samples per second input by this block. \ +The UHD device driver will try its best to match the requested sample rate. \ +If the requested rate is not possible, the UHD block will print an error at runtime. + +Antenna: +For subdevices/daughterboards with only one antenna, this may be left blank. \ +Otherwise, the user should specify one of the possible antenna choices. \ +See the daughterboard application notes for the possible antenna choices. + </doc> +</block> diff --git a/gr-uhd/grc/uhd_mimo_source.xml b/gr-uhd/grc/uhd_mimo_source.xml new file mode 100644 index 0000000000..d8f4e6d667 --- /dev/null +++ b/gr-uhd/grc/uhd_mimo_source.xml @@ -0,0 +1,550 @@ +<?xml version="1.0"?> +<block> + <name>UHD MIMO Source</name> + <key>uhd_mimo_source</key> + <category>UHD</category> + <import>from gnuradio import uhd</import> + <make>uhd.mimo_source($nchan, $args, uhd.io_type_t.$type.type) +self.$(id).set_samp_rate_all($samp_rate) +#if $nchan() > 0 +self.$(id).set_subdev_spec(0, $sd_spec0) +self.$(id).set_center_freq(0, $center_freq0) +self.$(id).set_gain(0, $gain0) + #if $ant0() +self.$(id).set_antenna(0, $ant0) + #end if +#end if +#if $nchan() > 1 +self.$(id).set_subdev_spec(1, $sd_spec1) +self.$(id).set_center_freq(1, $center_freq1) +self.$(id).set_gain(1, $gain1) + #if $ant1() +self.$(id).set_antenna(1, $ant1) + #end if +#end if +#if $nchan() > 2 +self.$(id).set_subdev_spec(2, $sd_spec2) +self.$(id).set_center_freq(2, $center_freq2) +self.$(id).set_gain(2, $gain2) + #if $ant2() +self.$(id).set_antenna(2, $ant2) + #end if +#end if +#if $nchan() > 3 +self.$(id).set_subdev_spec(3, $sd_spec3) +self.$(id).set_center_freq(3, $center_freq3) +self.$(id).set_gain(3, $gain3) + #if $ant3() +self.$(id).set_antenna(3, $ant3) + #end if +#end if +#if $nchan() > 4 +self.$(id).set_subdev_spec(4, $sd_spec4) +self.$(id).set_center_freq(4, $center_freq4) +self.$(id).set_gain(4, $gain4) + #if $ant4() +self.$(id).set_antenna(4, $ant4) + #end if +#end if +#if $nchan() > 5 +self.$(id).set_subdev_spec(5, $sd_spec5) +self.$(id).set_center_freq(5, $center_freq5) +self.$(id).set_gain(5, $gain5) + #if $ant5() +self.$(id).set_antenna(5, $ant5) + #end if +#end if +#if $nchan() > 6 +self.$(id).set_subdev_spec(6, $sd_spec6) +self.$(id).set_center_freq(6, $center_freq6) +self.$(id).set_gain(6, $gain6) + #if $ant6() +self.$(id).set_antenna(6, $ant6) + #end if +#end if +#if $nchan() > 7 +self.$(id).set_subdev_spec(7, $sd_spec7) +self.$(id).set_center_freq(7, $center_freq7) +self.$(id).set_gain(7, $gain7) + #if $ant7() +self.$(id).set_antenna(7, $ant7) + #end if +#end if +</make> + <callback>set_samp_rate($samp_rate)</callback> + <callback>set_center_freq(0, $center_freq0)</callback> + <callback>set_gain(0, $gain0)</callback> + <callback>set_antenna(0, $ant0)</callback> + <callback>set_center_freq(1, $center_freq1)</callback> + <callback>set_gain(1, $gain1)</callback> + <callback>set_antenna(1, $ant1)</callback> + <callback>set_center_freq(2, $center_freq2)</callback> + <callback>set_gain(2, $gain2)</callback> + <callback>set_antenna(2, $ant2)</callback> + <callback>set_center_freq(3, $center_freq3)</callback> + <callback>set_gain(3, $gain3)</callback> + <callback>set_antenna(3, $ant3)</callback> + <callback>set_center_freq(4, $center_freq4)</callback> + <callback>set_gain(4, $gain4)</callback> + <callback>set_antenna(4, $ant4)</callback> + <callback>set_center_freq(5, $center_freq5)</callback> + <callback>set_gain(5, $gain5)</callback> + <callback>set_antenna(5, $ant5)</callback> + <callback>set_center_freq(6, $center_freq6)</callback> + <callback>set_gain(6, $gain6)</callback> + <callback>set_antenna(6, $ant6)</callback> + <callback>set_center_freq(7, $center_freq7)</callback> + <callback>set_gain(7, $gain7)</callback> + <callback>set_antenna(7, $ant7)</callback> + <param> + <name>Input Type</name> + <key>type</key> + <type>enum</type> + <option> + <name>Complex</name> + <key>complex</key> + <opt>type:COMPLEX_FLOAT32</opt> + <opt>vlen:1</opt> + </option> + <option> + <name>Short</name> + <key>short</key> + <opt>type:COMPLEX_INT16</opt> + <opt>vlen:2</opt> + </option> + </param> + <param> + <name>Num Channels</name> + <key>nchan</key> + <value>2</value> + <type>int</type> + <option> + <name>2 Channels</name> + <key>2</key> + </option> + <option> + <name>3 Channels</name> + <key>3</key> + </option> + <option> + <name>4 Channels</name> + <key>4</key> + </option> + <option> + <name>5 Channels</name> + <key>5</key> + </option> + <option> + <name>6 Channels</name> + <key>6</key> + </option> + <option> + <name>7 Channels</name> + <key>7</key> + </option> + <option> + <name>8 Channels</name> + <key>8</key> + </option> + </param> + <param> + <name>Args</name> + <key>args</key> + <value>addr=192.168.10.2 192.168.20.2</value> + <type>string</type> + </param> + <param> + <name>Samp Rate (Sps)</name> + <key>samp_rate</key> + <value>samp_rate</value> + <type>real</type> + </param> + + <param> + <name>Ch0: Subdev Spec</name> + <key>sd_spec0</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 0 + all + #elif $sd_spec0() + none + #else + part + #end if + </hide> + </param> + <param> + <name>Ch0: Center Freq (Hz)</name> + <key>center_freq0</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 0 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch0: Gain (dB)</name> + <key>gain0</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 0 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch0: Antenna</name> + <key>ant0</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 0 + all + #elif $ant0() + none + #else + part + #end if + </hide> + </param> + + <param> + <name>Ch1: Subdev Spec</name> + <key>sd_spec1</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 1 + all + #elif $sd_spec1() + none + #else + part + #end if + </hide> + </param> + <param> + <name>Ch1: Center Freq (Hz)</name> + <key>center_freq1</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 1 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch1: Gain (dB)</name> + <key>gain1</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 1 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch1: Antenna</name> + <key>ant1</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 1 + all + #elif $ant1() + none + #else + part + #end if + </hide> + </param> + + <param> + <name>Ch2: Subdev Spec</name> + <key>sd_spec2</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 2 + all + #elif $sd_spec2() + none + #else + part + #end if + </hide> + </param> + <param> + <name>Ch2: Center Freq (Hz)</name> + <key>center_freq2</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 2 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch2: Gain (dB)</name> + <key>gain2</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 2 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch2: Antenna</name> + <key>ant2</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 2 + all + #elif $ant2() + none + #else + part + #end if + </hide> + </param> + + <param> + <name>Ch3: Subdev Spec</name> + <key>sd_spec3</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 3 + all + #elif $sd_spec3() + none + #else + part + #end if + </hide> + </param> + <param> + <name>Ch3: Center Freq (Hz)</name> + <key>center_freq3</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 3 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch3: Gain (dB)</name> + <key>gain3</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 3 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch3: Antenna</name> + <key>ant3</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 3 + all + #elif $ant3() + none + #else + part + #end if + </hide> + </param> + + <param> + <name>Ch4: Subdev Spec</name> + <key>sd_spec4</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 4 + all + #elif $sd_spec4() + none + #else + part + #end if + </hide> + </param> + <param> + <name>Ch4: Center Freq (Hz)</name> + <key>center_freq4</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 4 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch4: Gain (dB)</name> + <key>gain4</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 4 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch4: Antenna</name> + <key>ant4</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 4 + all + #elif $ant4() + none + #else + part + #end if + </hide> + </param> + + <param> + <name>Ch5: Subdev Spec</name> + <key>sd_spec5</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 5 + all + #elif $sd_spec5() + none + #else + part + #end if + </hide> + </param> + <param> + <name>Ch5: Center Freq (Hz)</name> + <key>center_freq5</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 5 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch5: Gain (dB)</name> + <key>gain5</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 5 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch5: Antenna</name> + <key>ant5</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 5 + all + #elif $ant5() + none + #else + part + #end if + </hide> + </param> + + <param> + <name>Ch6: Subdev Spec</name> + <key>sd_spec6</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 6 + all + #elif $sd_spec6() + none + #else + part + #end if + </hide> + </param> + <param> + <name>Ch6: Center Freq (Hz)</name> + <key>center_freq6</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 6 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch6: Gain (dB)</name> + <key>gain6</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 6 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch6: Antenna</name> + <key>ant6</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 6 + all + #elif $ant6() + none + #else + part + #end if + </hide> + </param> + + <param> + <name>Ch7: Subdev Spec</name> + <key>sd_spec7</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 7 + all + #elif $sd_spec7() + none + #else + part + #end if + </hide> + </param> + <param> + <name>Ch7: Center Freq (Hz)</name> + <key>center_freq7</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 7 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch7: Gain (dB)</name> + <key>gain7</key> + <value>0</value> + <type>real</type> + <hide>#if $nchan() > 7 then 'none' else 'all'#</hide> + </param> + <param> + <name>Ch7: Antenna</name> + <key>ant7</key> + <value></value> + <type>string</type> + <hide> + #if not $nchan() > 7 + all + #elif $ant7() + none + #else + part + #end if + </hide> + </param> + + <check>8 >= $nchan</check> + <check>$nchan >= 0</check> + <source> + <name>out</name> + <type>$type</type> + <vlen>$type.vlen</vlen> + <nports>$nchan</nports> + </source> + <doc> +The UHD Source Block: + +Args: +Args is a delimited string used to locate UHD devices on your system. \ +If left blank, the first UHD device found will be used. \ +Used args to specify a specfic device. \ +USRP2 Example: addr=192.168.10.2 + +Sample rate: +The sample rate is the number of samples per second input by this block. \ +The UHD device driver will try its best to match the requested sample rate. \ +If the requested rate is not possible, the UHD block will print an error at runtime. + +Antenna: +For subdevices/daughterboards with only one antenna, this may be left blank. \ +Otherwise, the user should specify one of the possible antenna choices. \ +See the daughterboard application notes for the possible antenna choices. + </doc> +</block> diff --git a/gr-uhd/lib/Makefile.am b/gr-uhd/lib/Makefile.am index d9a296c754..b4b1abfc67 100644 --- a/gr-uhd/lib/Makefile.am +++ b/gr-uhd/lib/Makefile.am @@ -29,15 +29,18 @@ AM_CPPFLAGS = \ lib_LTLIBRARIES = libgnuradio-uhd.la libgnuradio_uhd_la_SOURCES = \ - uhd_mimo_source.cc \ - uhd_mimo_sink.cc \ uhd_multi_usrp_source.cc \ uhd_multi_usrp_sink.cc \ - uhd_simple_source.cc \ - uhd_simple_sink.cc \ uhd_single_usrp_source.cc \ uhd_single_usrp_sink.cc +# add the deprecated sources +libgnuradio_uhd_la_SOURCES += \ + uhd_mimo_source.cc \ + uhd_mimo_sink.cc \ + uhd_simple_source.cc \ + uhd_simple_sink.cc + libgnuradio_uhd_la_LIBADD = \ $(GNURADIO_CORE_LA) \ $(UHD_LIBS) -- cgit v1.2.3 From 7f46efca9cb0c87e9130c117ac41650f6e0c25cc Mon Sep 17 00:00:00 2001 From: Josh Blum <josh@joshknows.com> Date: Mon, 18 Oct 2010 16:49:08 -0700 Subject: uhd: renamed make function params, cleanup, clock config for multi usrp --- gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py | 11 ++++++++++- gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py | 6 +++++- gr-uhd/lib/uhd_multi_usrp_sink.cc | 19 ++++++++++++------- gr-uhd/lib/uhd_multi_usrp_sink.h | 4 ++-- gr-uhd/lib/uhd_multi_usrp_source.cc | 18 +++++++++++------- gr-uhd/lib/uhd_multi_usrp_source.h | 4 ++-- gr-uhd/lib/uhd_single_usrp_sink.cc | 19 ++++++++++++------- gr-uhd/lib/uhd_single_usrp_sink.h | 4 ++-- gr-uhd/lib/uhd_single_usrp_source.cc | 18 +++++++++++------- gr-uhd/lib/uhd_single_usrp_source.h | 4 ++-- 10 files changed, 69 insertions(+), 38 deletions(-) (limited to 'gr-uhd/lib') diff --git a/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py b/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py index 8de4408d5a..aa550157d2 100755 --- a/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py +++ b/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py @@ -25,8 +25,17 @@ MAIN_TMPL = """\ <name>UHD: Multi USRP $sourk.title()</name> <key>uhd_multi_usrp_$(sourk)</key> <import>from gnuradio import uhd</import> - <make>uhd.multi_usrp_$(sourk)(\$dev_addr, uhd.io_type_t.\$type.type, \$nchan) + <make>uhd.multi_usrp_$(sourk)( + device_addr=\$dev_addr, + io_type=uhd.io_type_t.\$type.type, + num_channels=\$nchan, +) \#if \$sync() +clk_cfg = uhd.clock_config_t() +clk_cfg.ref_source = uhd.clock_config_t.REF_SMA +clk_cfg.pps_source = uhd.clock_config_t.PPS_SMA +clk_cfg.pps_polarity = uhd.clock_config_t.PPS_POS +self.\$(id).set_clock_config(clk_cfg, ~0); self.\$(id).set_time_unknown_pps(uhd.time_spec_t()) \#end if #for $m in range($max_mboards) diff --git a/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py b/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py index 5b87719e5e..4d645afe15 100755 --- a/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py +++ b/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py @@ -25,7 +25,11 @@ MAIN_TMPL = """\ <name>UHD: Single USRP $sourk.title()</name> <key>uhd_single_usrp_$(sourk)</key> <import>from gnuradio import uhd</import> - <make>uhd.single_usrp_$(sourk)(\$dev_addr, uhd.io_type_t.\$type.type, \$nchan) + <make>uhd.single_usrp_$(sourk)( + device_addr=\$dev_addr, + io_type=uhd.io_type_t.\$type.type, + num_channels\$nchan, +) self.\$(id).set_subdev_spec(\$sd_spec) self.\$(id).set_samp_rate(\$samp_rate) #for $n in range($max_nchan) diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.cc b/gr-uhd/lib/uhd_multi_usrp_sink.cc index 202f128406..31dbac44f4 100644 --- a/gr-uhd/lib/uhd_multi_usrp_sink.cc +++ b/gr-uhd/lib/uhd_multi_usrp_sink.cc @@ -37,12 +37,17 @@ uhd_multi_usrp_sink::uhd_multi_usrp_sink(gr_io_signature_sptr sig) class uhd_multi_usrp_sink_impl : public uhd_multi_usrp_sink{ public: uhd_multi_usrp_sink_impl( - const std::string &args, - const uhd::io_type_t &type, + const std::string &device_addr, + const uhd::io_type_t &io_type, size_t num_channels - ) : uhd_multi_usrp_sink(gr_make_io_signature(num_channels, num_channels, type.size)), _type(type), _nchan(num_channels) + ): + uhd_multi_usrp_sink(gr_make_io_signature( + num_channels, num_channels, io_type.size + )), + _type(io_type), + _nchan(num_channels) { - _dev = uhd::usrp::multi_usrp::make(args); + _dev = uhd::usrp::multi_usrp::make(device_addr); } void set_subdev_spec(const std::string &spec, size_t mboard){ @@ -165,11 +170,11 @@ protected: * Make UHD Multi USRP Sink **********************************************************************/ boost::shared_ptr<uhd_multi_usrp_sink> uhd_make_multi_usrp_sink( - const std::string &args, - const uhd::io_type_t::tid_t &type, + const std::string &device_addr, + const uhd::io_type_t::tid_t &io_type, size_t num_channels ){ return boost::shared_ptr<uhd_multi_usrp_sink>( - new uhd_multi_usrp_sink_impl(args, type, num_channels) + new uhd_multi_usrp_sink_impl(device_addr, io_type, num_channels) ); } diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.h b/gr-uhd/lib/uhd_multi_usrp_sink.h index 13bba20fb6..5dacc1fac7 100644 --- a/gr-uhd/lib/uhd_multi_usrp_sink.h +++ b/gr-uhd/lib/uhd_multi_usrp_sink.h @@ -28,8 +28,8 @@ class uhd_multi_usrp_sink; boost::shared_ptr<uhd_multi_usrp_sink> uhd_make_multi_usrp_sink( - const std::string &args, - const uhd::io_type_t::tid_t &type, + const std::string &device_addr, + const uhd::io_type_t::tid_t &io_type, size_t num_channels ); diff --git a/gr-uhd/lib/uhd_multi_usrp_source.cc b/gr-uhd/lib/uhd_multi_usrp_source.cc index c10c08c500..1fcb576501 100644 --- a/gr-uhd/lib/uhd_multi_usrp_source.cc +++ b/gr-uhd/lib/uhd_multi_usrp_source.cc @@ -39,12 +39,16 @@ uhd_multi_usrp_source::uhd_multi_usrp_source(gr_io_signature_sptr sig) class uhd_multi_usrp_source_impl : public uhd_multi_usrp_source{ public: uhd_multi_usrp_source_impl( - const std::string &args, - const uhd::io_type_t &type, + const std::string &device_addr, + const uhd::io_type_t &io_type, size_t num_channels - ) : uhd_multi_usrp_source(gr_make_io_signature(num_channels, num_channels, type.size)), _type(type) + ): + uhd_multi_usrp_source(gr_make_io_signature( + num_channels, num_channels, io_type.size + )), + _type(io_type) { - _dev = uhd::usrp::multi_usrp::make(args); + _dev = uhd::usrp::multi_usrp::make(device_addr); } void set_subdev_spec(const std::string &spec, size_t mboard){ @@ -168,11 +172,11 @@ private: * Make UHD Multi USRP Source **********************************************************************/ boost::shared_ptr<uhd_multi_usrp_source> uhd_make_multi_usrp_source( - const std::string &args, - const uhd::io_type_t::tid_t &type, + const std::string &device_addr, + const uhd::io_type_t::tid_t &io_type, size_t num_channels ){ return boost::shared_ptr<uhd_multi_usrp_source>( - new uhd_multi_usrp_source_impl(args, type, num_channels) + new uhd_multi_usrp_source_impl(device_addr, io_type, num_channels) ); } diff --git a/gr-uhd/lib/uhd_multi_usrp_source.h b/gr-uhd/lib/uhd_multi_usrp_source.h index b94e53f01b..36c4b6fdcc 100644 --- a/gr-uhd/lib/uhd_multi_usrp_source.h +++ b/gr-uhd/lib/uhd_multi_usrp_source.h @@ -28,8 +28,8 @@ class uhd_multi_usrp_source; boost::shared_ptr<uhd_multi_usrp_source> uhd_make_multi_usrp_source( - const std::string &args, - const uhd::io_type_t::tid_t &type, + const std::string &device_addr, + const uhd::io_type_t::tid_t &io_type, size_t num_channels ); diff --git a/gr-uhd/lib/uhd_single_usrp_sink.cc b/gr-uhd/lib/uhd_single_usrp_sink.cc index 96c1dbdf49..4297a83ffa 100644 --- a/gr-uhd/lib/uhd_single_usrp_sink.cc +++ b/gr-uhd/lib/uhd_single_usrp_sink.cc @@ -37,12 +37,17 @@ uhd_single_usrp_sink::uhd_single_usrp_sink(gr_io_signature_sptr sig) class uhd_single_usrp_sink_impl : public uhd_single_usrp_sink{ public: uhd_single_usrp_sink_impl( - const std::string &args, - const uhd::io_type_t &type, + const std::string &device_addr, + const uhd::io_type_t &io_type, size_t num_channels - ) : uhd_single_usrp_sink(gr_make_io_signature(num_channels, num_channels, type.size)), _type(type), _nchan(num_channels) + ): + uhd_single_usrp_sink(gr_make_io_signature( + num_channels, num_channels, io_type.size + )), + _type(io_type), + _nchan(num_channels) { - _dev = uhd::usrp::single_usrp::make(args); + _dev = uhd::usrp::single_usrp::make(device_addr); } void set_subdev_spec(const std::string &spec){ @@ -163,11 +168,11 @@ protected: * Make UHD Single USRP Sink **********************************************************************/ boost::shared_ptr<uhd_single_usrp_sink> uhd_make_single_usrp_sink( - const std::string &args, - const uhd::io_type_t::tid_t &type, + const std::string &device_addr, + const uhd::io_type_t::tid_t &io_type, size_t num_channels ){ return boost::shared_ptr<uhd_single_usrp_sink>( - new uhd_single_usrp_sink_impl(args, type, num_channels) + new uhd_single_usrp_sink_impl(device_addr, io_type, num_channels) ); } diff --git a/gr-uhd/lib/uhd_single_usrp_sink.h b/gr-uhd/lib/uhd_single_usrp_sink.h index bec788193b..e83bb6ded8 100644 --- a/gr-uhd/lib/uhd_single_usrp_sink.h +++ b/gr-uhd/lib/uhd_single_usrp_sink.h @@ -28,8 +28,8 @@ class uhd_single_usrp_sink; boost::shared_ptr<uhd_single_usrp_sink> uhd_make_single_usrp_sink( - const std::string &args, - const uhd::io_type_t::tid_t &type, + const std::string &device_addr, + const uhd::io_type_t::tid_t &io_type, size_t num_channels = 1 ); diff --git a/gr-uhd/lib/uhd_single_usrp_source.cc b/gr-uhd/lib/uhd_single_usrp_source.cc index 7c3694a99d..27a788d960 100644 --- a/gr-uhd/lib/uhd_single_usrp_source.cc +++ b/gr-uhd/lib/uhd_single_usrp_source.cc @@ -39,12 +39,16 @@ uhd_single_usrp_source::uhd_single_usrp_source(gr_io_signature_sptr sig) class uhd_single_usrp_source_impl : public uhd_single_usrp_source{ public: uhd_single_usrp_source_impl( - const std::string &args, - const uhd::io_type_t &type, + const std::string &device_addr, + const uhd::io_type_t &io_type, size_t num_channels - ) : uhd_single_usrp_source(gr_make_io_signature(num_channels, num_channels, type.size)), _type(type) + ): + uhd_single_usrp_source(gr_make_io_signature( + num_channels, num_channels, io_type.size + )), + _type(io_type) { - _dev = uhd::usrp::single_usrp::make(args); + _dev = uhd::usrp::single_usrp::make(device_addr); } void set_subdev_spec(const std::string &spec){ @@ -163,11 +167,11 @@ private: * Make UHD Single USRP Source **********************************************************************/ boost::shared_ptr<uhd_single_usrp_source> uhd_make_single_usrp_source( - const std::string &args, - const uhd::io_type_t::tid_t &type, + const std::string &device_addr, + const uhd::io_type_t::tid_t &io_type, size_t num_channels ){ return boost::shared_ptr<uhd_single_usrp_source>( - new uhd_single_usrp_source_impl(args, type, num_channels) + new uhd_single_usrp_source_impl(device_addr, io_type, num_channels) ); } diff --git a/gr-uhd/lib/uhd_single_usrp_source.h b/gr-uhd/lib/uhd_single_usrp_source.h index 196b7c6759..c323fbd7ed 100644 --- a/gr-uhd/lib/uhd_single_usrp_source.h +++ b/gr-uhd/lib/uhd_single_usrp_source.h @@ -28,8 +28,8 @@ class uhd_single_usrp_source; boost::shared_ptr<uhd_single_usrp_source> uhd_make_single_usrp_source( - const std::string &args, - const uhd::io_type_t::tid_t &type, + const std::string &device_addr, + const uhd::io_type_t::tid_t &io_type, size_t num_channels = 1 ); -- cgit v1.2.3 From 343cba5663d0eefdd3ee3918bef812dc1bd75508 Mon Sep 17 00:00:00 2001 From: Josh Blum <josh@joshknows.com> Date: Mon, 18 Oct 2010 18:29:20 -0700 Subject: uhd: tweaked and tested multi usrp with a single channel --- gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py | 16 ++++++++-------- gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py | 2 ++ gr-uhd/lib/uhd_multi_usrp_source.cc | 4 ++-- gr-uhd/swig/uhd_swig.i | 20 ++++++++++++++++++++ 4 files changed, 32 insertions(+), 10 deletions(-) (limited to 'gr-uhd/lib') diff --git a/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py b/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py index aa550157d2..2297167320 100755 --- a/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py +++ b/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py @@ -31,15 +31,15 @@ MAIN_TMPL = """\ num_channels=\$nchan, ) \#if \$sync() -clk_cfg = uhd.clock_config_t() -clk_cfg.ref_source = uhd.clock_config_t.REF_SMA -clk_cfg.pps_source = uhd.clock_config_t.PPS_SMA -clk_cfg.pps_polarity = uhd.clock_config_t.PPS_POS -self.\$(id).set_clock_config(clk_cfg, ~0); +_clk_cfg = uhd.clock_config_t() +_clk_cfg.ref_source = uhd.clock_config_t.REF_SMA +_clk_cfg.pps_source = uhd.clock_config_t.PPS_SMA +_clk_cfg.pps_polarity = uhd.clock_config_t.PPS_POS +self.\$(id).set_clock_config(_clk_cfg, uhd.ALL_MBOARDS); self.\$(id).set_time_unknown_pps(uhd.time_spec_t()) \#end if #for $m in range($max_mboards) -\#if \$num_mboards() > $m +\#if \$num_mboards() > $m and \$sd_spec$(m)() self.\$(id).set_subdev_spec(\$sd_spec$(m), $m) \#end if #end for @@ -110,7 +110,7 @@ self.\$(id).set_antenna(\$ant$(n), $n) <key>num_mboards</key> <value>2</value> <type>int</type> - #for $m in range(1, $max_mboards) + #for $m in range(1, $max_mboards+1) <option> <name>$(m)</name> <key>$m</key> @@ -139,7 +139,7 @@ self.\$(id).set_antenna(\$ant$(n), $n) <key>nchan</key> <value>2</value> <type>int</type> - #for $n in range(1, $max_nchan) + #for $n in range(1, $max_nchan+1) <option> <name>$(n)</name> <key>$n</key> diff --git a/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py b/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py index 7bc2425ee8..02cdf64cc2 100755 --- a/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py +++ b/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py @@ -30,7 +30,9 @@ MAIN_TMPL = """\ io_type=uhd.io_type_t.\$type.type, num_channels=\$nchan, ) +\#if \$sd_spec() self.\$(id).set_subdev_spec(\$sd_spec) +\#end if self.\$(id).set_samp_rate(\$samp_rate) #for $n in range($max_nchan) \#if \$nchan() > $n diff --git a/gr-uhd/lib/uhd_multi_usrp_source.cc b/gr-uhd/lib/uhd_multi_usrp_source.cc index 1fcb576501..0ac686c795 100644 --- a/gr-uhd/lib/uhd_multi_usrp_source.cc +++ b/gr-uhd/lib/uhd_multi_usrp_source.cc @@ -149,10 +149,10 @@ public: bool start(void){ //setup a stream command that starts streaming slightly in the future - static const double reasonable_delay = 0.01; //10 ms (order of magnitude >> RTT) + static const double reasonable_delay = 0.05; //order of magnitude over RTT uhd::stream_cmd_t stream_cmd(uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS); stream_cmd.stream_now = false; - stream_cmd.time_spec = get_time_now() + uhd::time_spec_t(_dev->get_num_mboards() * reasonable_delay); + stream_cmd.time_spec = get_time_now() + uhd::time_spec_t(reasonable_delay); _dev->issue_stream_cmd(stream_cmd); return true; } diff --git a/gr-uhd/swig/uhd_swig.i b/gr-uhd/swig/uhd_swig.i index 1631a768a7..6f29f706d7 100644 --- a/gr-uhd/swig/uhd_swig.i +++ b/gr-uhd/swig/uhd_swig.i @@ -20,6 +20,9 @@ * Boston, MA 02110-1301, USA. */ +//////////////////////////////////////////////////////////////////////// +// standard includes +//////////////////////////////////////////////////////////////////////// %include "gnuradio.i" %include "std_string.i" %include "std_vector.i" @@ -28,6 +31,9 @@ namespace std { %template(StringVector) vector<string>; } +//////////////////////////////////////////////////////////////////////// +// block headers +//////////////////////////////////////////////////////////////////////// %{ #include <uhd_mimo_source.h> //deprecated #include <uhd_mimo_sink.h> //deprecated @@ -40,6 +46,9 @@ namespace std { #include <uhd_single_usrp_sink.h> %} +//////////////////////////////////////////////////////////////////////// +// used types +//////////////////////////////////////////////////////////////////////// %include <uhd/config.hpp> %include <uhd/types/ranges.hpp> %include <uhd/types/tune_result.hpp> @@ -47,6 +56,9 @@ namespace std { %include <uhd/types/time_spec.hpp> %include <uhd/types/clock_config.hpp> +//////////////////////////////////////////////////////////////////////// +// block magic +//////////////////////////////////////////////////////////////////////// GR_SWIG_BLOCK_MAGIC(uhd,mimo_source) //deprecated %include <uhd_mimo_source.h> //deprecated @@ -70,3 +82,11 @@ GR_SWIG_BLOCK_MAGIC(uhd,single_usrp_source) GR_SWIG_BLOCK_MAGIC(uhd,single_usrp_sink) %include <uhd_single_usrp_sink.h> + +//////////////////////////////////////////////////////////////////////// +// helpful constants +//////////////////////////////////////////////////////////////////////// +%{ +static const size_t ALL_MBOARDS = uhd::usrp::multi_usrp::ALL_MBOARDS; +%} +static const size_t ALL_MBOARDS; -- cgit v1.2.3 From f8c63c369e0e8800f76d427434424f7209fcde86 Mon Sep 17 00:00:00 2001 From: Josh Blum <josh@joshknows.com> Date: Tue, 19 Oct 2010 13:04:42 -0700 Subject: uhd: tweaking timeouts for multi usrp blocks --- gr-uhd/lib/uhd_multi_usrp_sink.cc | 11 +++++++---- gr-uhd/lib/uhd_multi_usrp_source.cc | 4 ++-- 2 files changed, 9 insertions(+), 6 deletions(-) (limited to 'gr-uhd/lib') diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.cc b/gr-uhd/lib/uhd_multi_usrp_sink.cc index 31dbac44f4..17cd1ad78e 100644 --- a/gr-uhd/lib/uhd_multi_usrp_sink.cc +++ b/gr-uhd/lib/uhd_multi_usrp_sink.cc @@ -128,7 +128,7 @@ public: return _dev->get_device()->send( input_items, noutput_items, metadata, - _type, uhd::device::SEND_MODE_FULL_BUFF + _type, uhd::device::SEND_MODE_FULL_BUFF, 1.0 ); } @@ -138,11 +138,14 @@ public: uhd::tx_metadata_t metadata; metadata.start_of_burst = true; metadata.has_time_spec = true; - metadata.time_spec = get_time_now() + uhd::time_spec_t(0.01); //10ms offset in future + //TODO: Time in the near future, must be less than source time in future + //because ethernet pause frames with throttle stream commands. + //It will be fixed with the invention of host-based flow control. + metadata.time_spec = get_time_now() + uhd::time_spec_t(0.05); _dev->get_device()->send( gr_vector_const_void_star(_nchan), 0, metadata, - _type, uhd::device::SEND_MODE_ONE_PACKET + _type, uhd::device::SEND_MODE_ONE_PACKET, 1.0 ); return true; } @@ -155,7 +158,7 @@ public: _dev->get_device()->send( gr_vector_const_void_star(_nchan), 0, metadata, - _type, uhd::device::SEND_MODE_ONE_PACKET + _type, uhd::device::SEND_MODE_ONE_PACKET, 1.0 ); return true; } diff --git a/gr-uhd/lib/uhd_multi_usrp_source.cc b/gr-uhd/lib/uhd_multi_usrp_source.cc index 0ac686c795..63dad1a25e 100644 --- a/gr-uhd/lib/uhd_multi_usrp_source.cc +++ b/gr-uhd/lib/uhd_multi_usrp_source.cc @@ -128,7 +128,7 @@ public: size_t num_samps = _dev->get_device()->recv( output_items, noutput_items, metadata, - _type, uhd::device::RECV_MODE_FULL_BUFF + _type, uhd::device::RECV_MODE_FULL_BUFF, 1.0 ); switch(metadata.error_code){ @@ -149,7 +149,7 @@ public: bool start(void){ //setup a stream command that starts streaming slightly in the future - static const double reasonable_delay = 0.05; //order of magnitude over RTT + static const double reasonable_delay = 0.1; //order of magnitude over RTT uhd::stream_cmd_t stream_cmd(uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS); stream_cmd.stream_now = false; stream_cmd.time_spec = get_time_now() + uhd::time_spec_t(reasonable_delay); -- cgit v1.2.3 From c6e4a54769e2d5be3cfd28df6697c54c4a4a7e90 Mon Sep 17 00:00:00 2001 From: Josh Blum <josh@joshknows.com> Date: Tue, 19 Oct 2010 15:03:08 -0700 Subject: uhd: mark simple and mimo classes with the deprecated flag --- gr-uhd/lib/uhd_mimo_sink.h | 2 +- gr-uhd/lib/uhd_mimo_source.h | 2 +- gr-uhd/lib/uhd_simple_sink.h | 2 +- gr-uhd/lib/uhd_simple_source.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) (limited to 'gr-uhd/lib') diff --git a/gr-uhd/lib/uhd_mimo_sink.h b/gr-uhd/lib/uhd_mimo_sink.h index a0a30381c3..28a530b603 100644 --- a/gr-uhd/lib/uhd_mimo_sink.h +++ b/gr-uhd/lib/uhd_mimo_sink.h @@ -37,7 +37,7 @@ boost::shared_ptr<uhd_mimo_sink> uhd_make_mimo_sink( /*********************************************************************** * DEPRECATED **********************************************************************/ -class uhd_mimo_sink : public gr_sync_block{ +class UHD_DEPRECATED uhd_mimo_sink : public gr_sync_block{ public: /*! diff --git a/gr-uhd/lib/uhd_mimo_source.h b/gr-uhd/lib/uhd_mimo_source.h index f6f18eedcf..dc29275985 100644 --- a/gr-uhd/lib/uhd_mimo_source.h +++ b/gr-uhd/lib/uhd_mimo_source.h @@ -37,7 +37,7 @@ boost::shared_ptr<uhd_mimo_source> uhd_make_mimo_source( /*********************************************************************** * DEPRECATED **********************************************************************/ -class uhd_mimo_source : public gr_sync_block{ +class UHD_DEPRECATED uhd_mimo_source : public gr_sync_block{ public: /*! diff --git a/gr-uhd/lib/uhd_simple_sink.h b/gr-uhd/lib/uhd_simple_sink.h index 44b868698c..b239e3f212 100644 --- a/gr-uhd/lib/uhd_simple_sink.h +++ b/gr-uhd/lib/uhd_simple_sink.h @@ -36,7 +36,7 @@ boost::shared_ptr<uhd_simple_sink> uhd_make_simple_sink( /*********************************************************************** * DEPRECATED **********************************************************************/ -class uhd_simple_sink : public gr_sync_block{ +class UHD_DEPRECATED uhd_simple_sink : public gr_sync_block{ public: /*! diff --git a/gr-uhd/lib/uhd_simple_source.h b/gr-uhd/lib/uhd_simple_source.h index 4e79afa21e..c524a024a8 100644 --- a/gr-uhd/lib/uhd_simple_source.h +++ b/gr-uhd/lib/uhd_simple_source.h @@ -36,7 +36,7 @@ boost::shared_ptr<uhd_simple_source> uhd_make_simple_source( /*********************************************************************** * DEPRECATED **********************************************************************/ -class uhd_simple_source : public gr_sync_block{ +class UHD_DEPRECATED uhd_simple_source : public gr_sync_block{ public: /*! -- cgit v1.2.3 From f13e1e1a87cf3d8b891e94226be047cff3733bb7 Mon Sep 17 00:00:00 2001 From: Josh Blum <josh@joshknows.com> Date: Tue, 19 Oct 2010 15:46:27 -0700 Subject: uhd: implement set bandwidth for uhd blocks, remove chan=0 default for multi blocks --- gr-uhd/lib/uhd_multi_usrp_sink.cc | 4 ++++ gr-uhd/lib/uhd_multi_usrp_sink.h | 22 ++++++++++++++-------- gr-uhd/lib/uhd_multi_usrp_source.cc | 4 ++++ gr-uhd/lib/uhd_multi_usrp_source.h | 22 ++++++++++++++-------- gr-uhd/lib/uhd_single_usrp_sink.cc | 4 ++++ gr-uhd/lib/uhd_single_usrp_sink.h | 6 ++++++ gr-uhd/lib/uhd_single_usrp_source.cc | 4 ++++ gr-uhd/lib/uhd_single_usrp_source.h | 6 ++++++ 8 files changed, 56 insertions(+), 16 deletions(-) (limited to 'gr-uhd/lib') diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.cc b/gr-uhd/lib/uhd_multi_usrp_sink.cc index 17cd1ad78e..b75a8303cb 100644 --- a/gr-uhd/lib/uhd_multi_usrp_sink.cc +++ b/gr-uhd/lib/uhd_multi_usrp_sink.cc @@ -95,6 +95,10 @@ public: return _dev->get_tx_antennas(chan); } + void set_bandwidth(double bandwidth, size_t chan){ + return _dev->set_tx_bandwidth(bandwidth, chan); + } + void set_clock_config(const uhd::clock_config_t &clock_config, size_t mboard){ return _dev->set_clock_config(clock_config, mboard); } diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.h b/gr-uhd/lib/uhd_multi_usrp_sink.h index 5dacc1fac7..0ccc0fe6c5 100644 --- a/gr-uhd/lib/uhd_multi_usrp_sink.h +++ b/gr-uhd/lib/uhd_multi_usrp_sink.h @@ -66,49 +66,55 @@ public: * \param freq the desired frequency in Hz * \return a tune result with the actual frequencies */ - virtual uhd::tune_result_t set_center_freq(double freq, size_t chan = 0) = 0; + virtual uhd::tune_result_t set_center_freq(double freq, size_t chan) = 0; /*! * Get the tunable frequency range. * \return the frequency range in Hz */ - virtual uhd::freq_range_t get_freq_range(size_t chan = 0) = 0; + virtual uhd::freq_range_t get_freq_range(size_t chan) = 0; /*! * Set the gain for the dboard. * \param gain the gain in dB */ - virtual void set_gain(float gain, size_t chan = 0) = 0; + virtual void set_gain(float gain, size_t chan) = 0; /*! * Get the actual dboard gain setting. * \return the actual gain in dB */ - virtual float get_gain(size_t chan = 0) = 0; + virtual float get_gain(size_t chan) = 0; /*! * Get the settable gain range. * \return the gain range in dB */ - virtual uhd::gain_range_t get_gain_range(size_t chan = 0) = 0; + virtual uhd::gain_range_t get_gain_range(size_t chan) = 0; /*! * Set the antenna to use. * \param ant the antenna string */ - virtual void set_antenna(const std::string &ant, size_t chan = 0) = 0; + virtual void set_antenna(const std::string &ant, size_t chan) = 0; /*! * Get the antenna in use. * \return the antenna string */ - virtual std::string get_antenna(size_t chan = 0) = 0; + virtual std::string get_antenna(size_t chan) = 0; /*! * Get a list of possible antennas. * \return a vector of antenna strings */ - virtual std::vector<std::string> get_antennas(size_t chan = 0) = 0; + virtual std::vector<std::string> get_antennas(size_t chan) = 0; + + /*! + * Set the subdevice bandpass filter. + * \param bandwidth the filter bandwidth in Hz + */ + virtual void set_bandwidth(double bandwidth, size_t chan) = 0; /*! * Set the clock configuration. diff --git a/gr-uhd/lib/uhd_multi_usrp_source.cc b/gr-uhd/lib/uhd_multi_usrp_source.cc index 63dad1a25e..226e8b86fb 100644 --- a/gr-uhd/lib/uhd_multi_usrp_source.cc +++ b/gr-uhd/lib/uhd_multi_usrp_source.cc @@ -96,6 +96,10 @@ public: return _dev->get_rx_antennas(chan); } + void set_bandwidth(double bandwidth, size_t chan){ + return _dev->set_rx_bandwidth(bandwidth, chan); + } + void set_clock_config(const uhd::clock_config_t &clock_config, size_t mboard){ return _dev->set_clock_config(clock_config, mboard); } diff --git a/gr-uhd/lib/uhd_multi_usrp_source.h b/gr-uhd/lib/uhd_multi_usrp_source.h index 36c4b6fdcc..483ce098cf 100644 --- a/gr-uhd/lib/uhd_multi_usrp_source.h +++ b/gr-uhd/lib/uhd_multi_usrp_source.h @@ -66,49 +66,55 @@ public: * \param freq the desired frequency in Hz * \return a tune result with the actual frequencies */ - virtual uhd::tune_result_t set_center_freq(double freq, size_t chan = 0) = 0; + virtual uhd::tune_result_t set_center_freq(double freq, size_t chan) = 0; /*! * Get the tunable frequency range. * \return the frequency range in Hz */ - virtual uhd::freq_range_t get_freq_range(size_t chan = 0) = 0; + virtual uhd::freq_range_t get_freq_range(size_t chan) = 0; /*! * Set the gain for the dboard. * \param gain the gain in dB */ - virtual void set_gain(float gain, size_t chan = 0) = 0; + virtual void set_gain(float gain, size_t chan) = 0; /*! * Get the actual dboard gain setting. * \return the actual gain in dB */ - virtual float get_gain(size_t chan = 0) = 0; + virtual float get_gain(size_t chan) = 0; /*! * Get the settable gain range. * \return the gain range in dB */ - virtual uhd::gain_range_t get_gain_range(size_t chan = 0) = 0; + virtual uhd::gain_range_t get_gain_range(size_t chan) = 0; /*! * Set the antenna to use. * \param ant the antenna string */ - virtual void set_antenna(const std::string &ant, size_t chan = 0) = 0; + virtual void set_antenna(const std::string &ant, size_t chan) = 0; /*! * Get the antenna in use. * \return the antenna string */ - virtual std::string get_antenna(size_t chan = 0) = 0; + virtual std::string get_antenna(size_t chan) = 0; /*! * Get a list of possible antennas. * \return a vector of antenna strings */ - virtual std::vector<std::string> get_antennas(size_t chan = 0) = 0; + virtual std::vector<std::string> get_antennas(size_t chan) = 0; + + /*! + * Set the subdevice bandpass filter. + * \param bandwidth the filter bandwidth in Hz + */ + virtual void set_bandwidth(double bandwidth, size_t chan) = 0; /*! * Set the clock configuration. diff --git a/gr-uhd/lib/uhd_single_usrp_sink.cc b/gr-uhd/lib/uhd_single_usrp_sink.cc index 4297a83ffa..24981a59af 100644 --- a/gr-uhd/lib/uhd_single_usrp_sink.cc +++ b/gr-uhd/lib/uhd_single_usrp_sink.cc @@ -95,6 +95,10 @@ public: return _dev->get_tx_antennas(chan); } + void set_bandwidth(double bandwidth, size_t chan){ + return _dev->set_tx_bandwidth(bandwidth, chan); + } + void set_clock_config(const uhd::clock_config_t &clock_config){ return _dev->set_clock_config(clock_config); } diff --git a/gr-uhd/lib/uhd_single_usrp_sink.h b/gr-uhd/lib/uhd_single_usrp_sink.h index e83bb6ded8..0987685f47 100644 --- a/gr-uhd/lib/uhd_single_usrp_sink.h +++ b/gr-uhd/lib/uhd_single_usrp_sink.h @@ -110,6 +110,12 @@ public: */ virtual std::vector<std::string> get_antennas(size_t chan = 0) = 0; + /*! + * Set the subdevice bandpass filter. + * \param bandwidth the filter bandwidth in Hz + */ + virtual void set_bandwidth(double bandwidth, size_t chan = 0) = 0; + /*! * Set the clock configuration. * \param clock_config the new configuration diff --git a/gr-uhd/lib/uhd_single_usrp_source.cc b/gr-uhd/lib/uhd_single_usrp_source.cc index 27a788d960..f7c7fc8396 100644 --- a/gr-uhd/lib/uhd_single_usrp_source.cc +++ b/gr-uhd/lib/uhd_single_usrp_source.cc @@ -96,6 +96,10 @@ public: return _dev->get_rx_antennas(chan); } + void set_bandwidth(double bandwidth, size_t chan){ + return _dev->set_rx_bandwidth(bandwidth, chan); + } + void set_clock_config(const uhd::clock_config_t &clock_config){ return _dev->set_clock_config(clock_config); } diff --git a/gr-uhd/lib/uhd_single_usrp_source.h b/gr-uhd/lib/uhd_single_usrp_source.h index c323fbd7ed..1b71d2ad54 100644 --- a/gr-uhd/lib/uhd_single_usrp_source.h +++ b/gr-uhd/lib/uhd_single_usrp_source.h @@ -110,6 +110,12 @@ public: */ virtual std::vector<std::string> get_antennas(size_t chan = 0) = 0; + /*! + * Set the subdevice bandpass filter. + * \param bandwidth the filter bandwidth in Hz + */ + virtual void set_bandwidth(double bandwidth, size_t chan = 0) = 0; + /*! * Set the clock configuration. * \param clock_config the new configuration -- cgit v1.2.3 From 13970fed3ae4114689d08bf01cee8b8706d316a5 Mon Sep 17 00:00:00 2001 From: Josh Blum <josh@joshknows.com> Date: Wed, 20 Oct 2010 12:24:04 -0700 Subject: uhd: added channel param to docstrings --- gr-uhd/lib/uhd_multi_usrp_sink.h | 11 +++++++++++ gr-uhd/lib/uhd_multi_usrp_source.h | 11 +++++++++++ gr-uhd/lib/uhd_single_usrp_sink.h | 9 +++++++++ gr-uhd/lib/uhd_single_usrp_source.h | 9 +++++++++ 4 files changed, 40 insertions(+) (limited to 'gr-uhd/lib') diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.h b/gr-uhd/lib/uhd_multi_usrp_sink.h index 0ccc0fe6c5..a94e7bd5ae 100644 --- a/gr-uhd/lib/uhd_multi_usrp_sink.h +++ b/gr-uhd/lib/uhd_multi_usrp_sink.h @@ -45,6 +45,7 @@ public: /*! * Set the subdevice specification. * \param spec the subdev spec markup string + * \param mboard the motherboard index 0 to M-1 */ virtual void set_subdev_spec(const std::string &spec, size_t mboard) = 0; @@ -64,12 +65,14 @@ public: /*! * Tune the usrp device to the desired center frequency. * \param freq the desired frequency in Hz + * \param chan the channel index 0 to N-1 * \return a tune result with the actual frequencies */ virtual uhd::tune_result_t set_center_freq(double freq, size_t chan) = 0; /*! * Get the tunable frequency range. + * \param chan the channel index 0 to N-1 * \return the frequency range in Hz */ virtual uhd::freq_range_t get_freq_range(size_t chan) = 0; @@ -77,17 +80,20 @@ public: /*! * Set the gain for the dboard. * \param gain the gain in dB + * \param chan the channel index 0 to N-1 */ virtual void set_gain(float gain, size_t chan) = 0; /*! * Get the actual dboard gain setting. + * \param chan the channel index 0 to N-1 * \return the actual gain in dB */ virtual float get_gain(size_t chan) = 0; /*! * Get the settable gain range. + * \param chan the channel index 0 to N-1 * \return the gain range in dB */ virtual uhd::gain_range_t get_gain_range(size_t chan) = 0; @@ -95,23 +101,27 @@ public: /*! * Set the antenna to use. * \param ant the antenna string + * \param chan the channel index 0 to N-1 */ virtual void set_antenna(const std::string &ant, size_t chan) = 0; /*! * Get the antenna in use. + * \param chan the channel index 0 to N-1 * \return the antenna string */ virtual std::string get_antenna(size_t chan) = 0; /*! * Get a list of possible antennas. + * \param chan the channel index 0 to N-1 * \return a vector of antenna strings */ virtual std::vector<std::string> get_antennas(size_t chan) = 0; /*! * Set the subdevice bandpass filter. + * \param chan the channel index 0 to N-1 * \param bandwidth the filter bandwidth in Hz */ virtual void set_bandwidth(double bandwidth, size_t chan) = 0; @@ -119,6 +129,7 @@ public: /*! * Set the clock configuration. * \param clock_config the new configuration + * \param mboard the motherboard index 0 to M-1 */ virtual void set_clock_config(const uhd::clock_config_t &clock_config, size_t mboard) = 0; diff --git a/gr-uhd/lib/uhd_multi_usrp_source.h b/gr-uhd/lib/uhd_multi_usrp_source.h index 483ce098cf..081c82ee64 100644 --- a/gr-uhd/lib/uhd_multi_usrp_source.h +++ b/gr-uhd/lib/uhd_multi_usrp_source.h @@ -45,6 +45,7 @@ public: /*! * Set the subdevice specification. * \param spec the subdev spec markup string + * \param mboard the motherboard index 0 to M-1 */ virtual void set_subdev_spec(const std::string &spec, size_t mboard) = 0; @@ -64,12 +65,14 @@ public: /*! * Tune the usrp device to the desired center frequency. * \param freq the desired frequency in Hz + * \param chan the channel index 0 to N-1 * \return a tune result with the actual frequencies */ virtual uhd::tune_result_t set_center_freq(double freq, size_t chan) = 0; /*! * Get the tunable frequency range. + * \param chan the channel index 0 to N-1 * \return the frequency range in Hz */ virtual uhd::freq_range_t get_freq_range(size_t chan) = 0; @@ -77,17 +80,20 @@ public: /*! * Set the gain for the dboard. * \param gain the gain in dB + * \param chan the channel index 0 to N-1 */ virtual void set_gain(float gain, size_t chan) = 0; /*! * Get the actual dboard gain setting. + * \param chan the channel index 0 to N-1 * \return the actual gain in dB */ virtual float get_gain(size_t chan) = 0; /*! * Get the settable gain range. + * \param chan the channel index 0 to N-1 * \return the gain range in dB */ virtual uhd::gain_range_t get_gain_range(size_t chan) = 0; @@ -95,17 +101,20 @@ public: /*! * Set the antenna to use. * \param ant the antenna string + * \param chan the channel index 0 to N-1 */ virtual void set_antenna(const std::string &ant, size_t chan) = 0; /*! * Get the antenna in use. + * \param chan the channel index 0 to N-1 * \return the antenna string */ virtual std::string get_antenna(size_t chan) = 0; /*! * Get a list of possible antennas. + * \param chan the channel index 0 to N-1 * \return a vector of antenna strings */ virtual std::vector<std::string> get_antennas(size_t chan) = 0; @@ -113,12 +122,14 @@ public: /*! * Set the subdevice bandpass filter. * \param bandwidth the filter bandwidth in Hz + * \param chan the channel index 0 to N-1 */ virtual void set_bandwidth(double bandwidth, size_t chan) = 0; /*! * Set the clock configuration. * \param clock_config the new configuration + * \param mboard the motherboard index 0 to M-1 */ virtual void set_clock_config(const uhd::clock_config_t &clock_config, size_t mboard) = 0; diff --git a/gr-uhd/lib/uhd_single_usrp_sink.h b/gr-uhd/lib/uhd_single_usrp_sink.h index 0987685f47..390667df9c 100644 --- a/gr-uhd/lib/uhd_single_usrp_sink.h +++ b/gr-uhd/lib/uhd_single_usrp_sink.h @@ -64,12 +64,14 @@ public: /*! * Tune the usrp device to the desired center frequency. * \param freq the desired frequency in Hz + * \param chan the channel index 0 to N-1 * \return a tune result with the actual frequencies */ virtual uhd::tune_result_t set_center_freq(double freq, size_t chan = 0) = 0; /*! * Get the tunable frequency range. + * \param chan the channel index 0 to N-1 * \return the frequency range in Hz */ virtual uhd::freq_range_t get_freq_range(size_t chan = 0) = 0; @@ -77,17 +79,20 @@ public: /*! * Set the gain for the dboard. * \param gain the gain in dB + * \param chan the channel index 0 to N-1 */ virtual void set_gain(float gain, size_t chan = 0) = 0; /*! * Get the actual dboard gain setting. + * \param chan the channel index 0 to N-1 * \return the actual gain in dB */ virtual float get_gain(size_t chan = 0) = 0; /*! * Get the settable gain range. + * \param chan the channel index 0 to N-1 * \return the gain range in dB */ virtual uhd::gain_range_t get_gain_range(size_t chan = 0) = 0; @@ -95,17 +100,20 @@ public: /*! * Set the antenna to use. * \param ant the antenna string + * \param chan the channel index 0 to N-1 */ virtual void set_antenna(const std::string &ant, size_t chan = 0) = 0; /*! * Get the antenna in use. + * \param chan the channel index 0 to N-1 * \return the antenna string */ virtual std::string get_antenna(size_t chan = 0) = 0; /*! * Get a list of possible antennas. + * \param chan the channel index 0 to N-1 * \return a vector of antenna strings */ virtual std::vector<std::string> get_antennas(size_t chan = 0) = 0; @@ -113,6 +121,7 @@ public: /*! * Set the subdevice bandpass filter. * \param bandwidth the filter bandwidth in Hz + * \param chan the channel index 0 to N-1 */ virtual void set_bandwidth(double bandwidth, size_t chan = 0) = 0; diff --git a/gr-uhd/lib/uhd_single_usrp_source.h b/gr-uhd/lib/uhd_single_usrp_source.h index 1b71d2ad54..415c52e9a5 100644 --- a/gr-uhd/lib/uhd_single_usrp_source.h +++ b/gr-uhd/lib/uhd_single_usrp_source.h @@ -64,12 +64,14 @@ public: /*! * Tune the usrp device to the desired center frequency. * \param freq the desired frequency in Hz + * \param chan the channel index 0 to N-1 * \return a tune result with the actual frequencies */ virtual uhd::tune_result_t set_center_freq(double freq, size_t chan = 0) = 0; /*! * Get the tunable frequency range. + * \param chan the channel index 0 to N-1 * \return the frequency range in Hz */ virtual uhd::freq_range_t get_freq_range(size_t chan = 0) = 0; @@ -77,17 +79,20 @@ public: /*! * Set the gain for the dboard. * \param gain the gain in dB + * \param chan the channel index 0 to N-1 */ virtual void set_gain(float gain, size_t chan = 0) = 0; /*! * Get the actual dboard gain setting. + * \param chan the channel index 0 to N-1 * \return the actual gain in dB */ virtual float get_gain(size_t chan = 0) = 0; /*! * Get the settable gain range. + * \param chan the channel index 0 to N-1 * \return the gain range in dB */ virtual uhd::gain_range_t get_gain_range(size_t chan = 0) = 0; @@ -95,17 +100,20 @@ public: /*! * Set the antenna to use. * \param ant the antenna string + * \param chan the channel index 0 to N-1 */ virtual void set_antenna(const std::string &ant, size_t chan = 0) = 0; /*! * Get the antenna in use. + * \param chan the channel index 0 to N-1 * \return the antenna string */ virtual std::string get_antenna(size_t chan = 0) = 0; /*! * Get a list of possible antennas. + * \param chan the channel index 0 to N-1 * \return a vector of antenna strings */ virtual std::vector<std::string> get_antennas(size_t chan = 0) = 0; @@ -113,6 +121,7 @@ public: /*! * Set the subdevice bandpass filter. * \param bandwidth the filter bandwidth in Hz + * \param chan the channel index 0 to N-1 */ virtual void set_bandwidth(double bandwidth, size_t chan = 0) = 0; -- cgit v1.2.3 From 5a2de999da86d48cd7f005d08cc48965cb8c7a65 Mon Sep 17 00:00:00 2001 From: Josh Blum <josh@joshknows.com> Date: Mon, 25 Oct 2010 16:22:05 -0700 Subject: uhd: move tune functions to tune_request and provide wrapper for simple case --- gr-uhd/lib/uhd_multi_usrp_sink.cc | 7 ++++--- gr-uhd/lib/uhd_multi_usrp_sink.h | 16 +++++++++++++++- gr-uhd/lib/uhd_multi_usrp_source.cc | 7 ++++--- gr-uhd/lib/uhd_multi_usrp_source.h | 16 +++++++++++++++- gr-uhd/lib/uhd_single_usrp_sink.cc | 7 ++++--- gr-uhd/lib/uhd_single_usrp_sink.h | 16 +++++++++++++++- gr-uhd/lib/uhd_single_usrp_source.cc | 7 ++++--- gr-uhd/lib/uhd_single_usrp_source.h | 16 +++++++++++++++- gr-uhd/swig/uhd_swig.i | 1 + 9 files changed, 77 insertions(+), 16 deletions(-) (limited to 'gr-uhd/lib') diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.cc b/gr-uhd/lib/uhd_multi_usrp_sink.cc index b75a8303cb..ee16e2928d 100644 --- a/gr-uhd/lib/uhd_multi_usrp_sink.cc +++ b/gr-uhd/lib/uhd_multi_usrp_sink.cc @@ -62,9 +62,10 @@ public: return _dev->get_tx_rate(); } - uhd::tune_result_t set_center_freq(double freq, size_t chan){ - uhd::tune_result_t tr = _dev->set_tx_freq(freq, chan); - return tr; + uhd::tune_result_t set_center_freq( + const uhd::tune_request_t tune_request, size_t chan + ){ + return _dev->set_tx_freq(tune_request, chan); } uhd::freq_range_t get_freq_range(size_t chan){ diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.h b/gr-uhd/lib/uhd_multi_usrp_sink.h index a94e7bd5ae..370e59d0e1 100644 --- a/gr-uhd/lib/uhd_multi_usrp_sink.h +++ b/gr-uhd/lib/uhd_multi_usrp_sink.h @@ -64,11 +64,25 @@ public: /*! * Tune the usrp device to the desired center frequency. + * \param tune_request the tune request instructions + * \param chan the channel index 0 to N-1 + * \return a tune result with the actual frequencies + */ + virtual uhd::tune_result_t set_center_freq( + const uhd::tune_request_t tune_request, size_t chan + ) = 0; + + /*! + * Tune the usrp device to the desired center frequency. + * This is a wrapper around set center freq so that in this case, + * the user can pass a single frequency in the call through swig. * \param freq the desired frequency in Hz * \param chan the channel index 0 to N-1 * \return a tune result with the actual frequencies */ - virtual uhd::tune_result_t set_center_freq(double freq, size_t chan) = 0; + uhd::tune_result_t set_center_freq(double freq, size_t chan){ + return set_center_freq(uhd::tune_request_t(freq), chan); + } /*! * Get the tunable frequency range. diff --git a/gr-uhd/lib/uhd_multi_usrp_source.cc b/gr-uhd/lib/uhd_multi_usrp_source.cc index 226e8b86fb..029a763e33 100644 --- a/gr-uhd/lib/uhd_multi_usrp_source.cc +++ b/gr-uhd/lib/uhd_multi_usrp_source.cc @@ -63,9 +63,10 @@ public: return _dev->get_rx_rate(); } - uhd::tune_result_t set_center_freq(double freq, size_t chan){ - uhd::tune_result_t tr = _dev->set_rx_freq(freq, chan); - return tr; + uhd::tune_result_t set_center_freq( + const uhd::tune_request_t tune_request, size_t chan + ){ + return _dev->set_rx_freq(tune_request, chan); } uhd::freq_range_t get_freq_range(size_t chan){ diff --git a/gr-uhd/lib/uhd_multi_usrp_source.h b/gr-uhd/lib/uhd_multi_usrp_source.h index 081c82ee64..b3cbdae1f6 100644 --- a/gr-uhd/lib/uhd_multi_usrp_source.h +++ b/gr-uhd/lib/uhd_multi_usrp_source.h @@ -64,11 +64,25 @@ public: /*! * Tune the usrp device to the desired center frequency. + * \param tune_request the tune request instructions + * \param chan the channel index 0 to N-1 + * \return a tune result with the actual frequencies + */ + virtual uhd::tune_result_t set_center_freq( + const uhd::tune_request_t tune_request, size_t chan + ) = 0; + + /*! + * Tune the usrp device to the desired center frequency. + * This is a wrapper around set center freq so that in this case, + * the user can pass a single frequency in the call through swig. * \param freq the desired frequency in Hz * \param chan the channel index 0 to N-1 * \return a tune result with the actual frequencies */ - virtual uhd::tune_result_t set_center_freq(double freq, size_t chan) = 0; + uhd::tune_result_t set_center_freq(double freq, size_t chan){ + return set_center_freq(uhd::tune_request_t(freq), chan); + } /*! * Get the tunable frequency range. diff --git a/gr-uhd/lib/uhd_single_usrp_sink.cc b/gr-uhd/lib/uhd_single_usrp_sink.cc index 24981a59af..622f506b55 100644 --- a/gr-uhd/lib/uhd_single_usrp_sink.cc +++ b/gr-uhd/lib/uhd_single_usrp_sink.cc @@ -62,9 +62,10 @@ public: return _dev->get_tx_rate(); } - uhd::tune_result_t set_center_freq(double freq, size_t chan){ - uhd::tune_result_t tr = _dev->set_tx_freq(freq, chan); - return tr; + uhd::tune_result_t set_center_freq( + const uhd::tune_request_t tune_request, size_t chan + ){ + return _dev->set_tx_freq(tune_request, chan); } uhd::freq_range_t get_freq_range(size_t chan){ diff --git a/gr-uhd/lib/uhd_single_usrp_sink.h b/gr-uhd/lib/uhd_single_usrp_sink.h index 390667df9c..a4c4e6452e 100644 --- a/gr-uhd/lib/uhd_single_usrp_sink.h +++ b/gr-uhd/lib/uhd_single_usrp_sink.h @@ -63,11 +63,25 @@ public: /*! * Tune the usrp device to the desired center frequency. + * \param tune_request the tune request instructions + * \param chan the channel index 0 to N-1 + * \return a tune result with the actual frequencies + */ + virtual uhd::tune_result_t set_center_freq( + const uhd::tune_request_t tune_request, size_t chan + ) = 0; + + /*! + * Tune the usrp device to the desired center frequency. + * This is a wrapper around set center freq so that in this case, + * the user can pass a single frequency in the call through swig. * \param freq the desired frequency in Hz * \param chan the channel index 0 to N-1 * \return a tune result with the actual frequencies */ - virtual uhd::tune_result_t set_center_freq(double freq, size_t chan = 0) = 0; + uhd::tune_result_t set_center_freq(double freq, size_t chan){ + return set_center_freq(uhd::tune_request_t(freq), chan); + } /*! * Get the tunable frequency range. diff --git a/gr-uhd/lib/uhd_single_usrp_source.cc b/gr-uhd/lib/uhd_single_usrp_source.cc index f7c7fc8396..907e8be542 100644 --- a/gr-uhd/lib/uhd_single_usrp_source.cc +++ b/gr-uhd/lib/uhd_single_usrp_source.cc @@ -63,9 +63,10 @@ public: return _dev->get_rx_rate(); } - uhd::tune_result_t set_center_freq(double freq, size_t chan){ - uhd::tune_result_t tr = _dev->set_rx_freq(freq, chan); - return tr; + uhd::tune_result_t set_center_freq( + const uhd::tune_request_t tune_request, size_t chan + ){ + return _dev->set_rx_freq(tune_request, chan); } uhd::freq_range_t get_freq_range(size_t chan){ diff --git a/gr-uhd/lib/uhd_single_usrp_source.h b/gr-uhd/lib/uhd_single_usrp_source.h index 415c52e9a5..495f8c6117 100644 --- a/gr-uhd/lib/uhd_single_usrp_source.h +++ b/gr-uhd/lib/uhd_single_usrp_source.h @@ -63,11 +63,25 @@ public: /*! * Tune the usrp device to the desired center frequency. + * \param tune_request the tune request instructions + * \param chan the channel index 0 to N-1 + * \return a tune result with the actual frequencies + */ + virtual uhd::tune_result_t set_center_freq( + const uhd::tune_request_t tune_request, size_t chan + ) = 0; + + /*! + * Tune the usrp device to the desired center frequency. + * This is a wrapper around set center freq so that in this case, + * the user can pass a single frequency in the call through swig. * \param freq the desired frequency in Hz * \param chan the channel index 0 to N-1 * \return a tune result with the actual frequencies */ - virtual uhd::tune_result_t set_center_freq(double freq, size_t chan = 0) = 0; + uhd::tune_result_t set_center_freq(double freq, size_t chan){ + return set_center_freq(uhd::tune_request_t(freq), chan); + } /*! * Get the tunable frequency range. diff --git a/gr-uhd/swig/uhd_swig.i b/gr-uhd/swig/uhd_swig.i index 5b3b524720..d332bb6171 100644 --- a/gr-uhd/swig/uhd_swig.i +++ b/gr-uhd/swig/uhd_swig.i @@ -69,6 +69,7 @@ namespace std { //////////////////////////////////////////////////////////////////////// %include <uhd/config.hpp> %include <uhd/types/ranges.hpp> +%include <uhd/types/tune_request.hpp> %include <uhd/types/tune_result.hpp> %include <uhd/types/io_type.hpp> %include <uhd/types/time_spec.hpp> -- cgit v1.2.3