From 5e9908fbec19ce9309c12ea61c0303e6666e981a Mon Sep 17 00:00:00 2001 From: Josh Blum 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') diff --git a/gr-uhd/lib/Makefile.am b/gr-uhd/lib/Makefile.am index 1260201a5..69a41e788 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 0a2ce1b0a..03d310b1e 100644 --- a/gr-uhd/lib/uhd_mimo_sink.cc +++ b/gr-uhd/lib/uhd_mimo_sink.cc @@ -23,7 +23,7 @@ #include #include #include -#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 62157142d..abd70ba36 100644 --- a/gr-uhd/lib/uhd_mimo_source.cc +++ b/gr-uhd/lib/uhd_mimo_source.cc @@ -23,7 +23,7 @@ #include #include #include -#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 7b31218db..d7b04465d 100644 --- a/gr-uhd/lib/uhd_simple_sink.cc +++ b/gr-uhd/lib/uhd_simple_sink.cc @@ -23,7 +23,7 @@ #include #include #include -#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 c1e11e85d..d74c8414d 100644 --- a/gr-uhd/lib/uhd_simple_source.cc +++ b/gr-uhd/lib/uhd_simple_source.cc @@ -25,7 +25,7 @@ #include #include #include -#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 96f86c8db..cd7d7a618 100644 --- a/gr-uhd/lib/uhd_single_usrp_sink.cc +++ b/gr-uhd/lib/uhd_single_usrp_sink.cc @@ -22,7 +22,6 @@ #include #include #include -#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 b5e39b5a4..fc2c453eb 100644 --- a/gr-uhd/lib/uhd_single_usrp_source.cc +++ b/gr-uhd/lib/uhd_single_usrp_source.cc @@ -24,7 +24,6 @@ #include #include #include -#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 da8352965..000000000 --- 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 -#include -#include - -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 4a05476bd..000000000 --- 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 - -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 From 4ac5545625d3d6df9881695f764c9c94049edb7b Mon Sep 17 00:00:00 2001 From: Josh Blum 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') diff --git a/gr-uhd/lib/Makefile.am b/gr-uhd/lib/Makefile.am index 69a41e788..d9a296c75 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 46679d973..a0a30381c 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_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 fbd7f2c42..f6f18eedc 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_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 000000000..6854649c3 --- /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 +#include +#include 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 000000000..b29657e94 --- /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 +#include + +class uhd_multi_usrp_sink; + +boost::shared_ptr 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 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 000000000..27caffbfc --- /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 +#include +#include 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 000000000..b2c4a3ac1 --- /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 +#include + +class uhd_multi_usrp_source; + +boost::shared_ptr 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 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 0abf30681..44b868698 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_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 b95c0cfd9..4e79afa21 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_make_simple_source( const uhd::io_type_t::tid_t &type ); +/*********************************************************************** + * DEPRECATED + **********************************************************************/ class uhd_simple_source : public gr_sync_block{ public: -- cgit From 873228d25b3ea5df8eb10f6652518f144858af61 Mon Sep 17 00:00:00 2001 From: Josh Blum 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') diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.cc b/gr-uhd/lib/uhd_multi_usrp_sink.cc index 6854649c3..202f12840 100644 --- a/gr-uhd/lib/uhd_multi_usrp_sink.cc +++ b/gr-uhd/lib/uhd_multi_usrp_sink.cc @@ -22,3 +22,154 @@ #include #include #include + +/*********************************************************************** + * 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 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_make_multi_usrp_sink( + const std::string &args, + const uhd::io_type_t::tid_t &type, + size_t num_channels +){ + return boost::shared_ptr( + 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 b29657e94..13bba20fb 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 27caffbfc..c10c08c50 100644 --- a/gr-uhd/lib/uhd_multi_usrp_source.cc +++ b/gr-uhd/lib/uhd_multi_usrp_source.cc @@ -22,3 +22,157 @@ #include #include #include +#include +#include + +/*********************************************************************** + * 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 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_make_multi_usrp_source( + const std::string &args, + const uhd::io_type_t::tid_t &type, + size_t num_channels +){ + return boost::shared_ptr( + 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 b2c4a3ac1..b94e53f01 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 cd7d7a618..96c1dbdf4 100644 --- a/gr-uhd/lib/uhd_single_usrp_sink.cc +++ b/gr-uhd/lib/uhd_single_usrp_sink.cc @@ -24,7 +24,7 @@ #include /*********************************************************************** - * 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_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 fc2c453eb..7c3694a99 100644 --- a/gr-uhd/lib/uhd_single_usrp_source.cc +++ b/gr-uhd/lib/uhd_single_usrp_source.cc @@ -26,7 +26,7 @@ #include /*********************************************************************** - * 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_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 d755dfeee..1631a768a 100644 --- a/gr-uhd/swig/uhd_swig.i +++ b/gr-uhd/swig/uhd_swig.i @@ -29,10 +29,13 @@ namespace std { } %{ -#include -#include -#include -#include +#include //deprecated +#include //deprecated +#include //deprecated +#include //deprecated + +#include +#include #include #include %} @@ -44,17 +47,23 @@ namespace std { %include %include -GR_SWIG_BLOCK_MAGIC(uhd,mimo_source) -%include +GR_SWIG_BLOCK_MAGIC(uhd,mimo_source) //deprecated +%include //deprecated + +GR_SWIG_BLOCK_MAGIC(uhd,mimo_sink) //deprecated +%include //deprecated + +GR_SWIG_BLOCK_MAGIC(uhd,simple_source) //deprecated +%include //deprecated -GR_SWIG_BLOCK_MAGIC(uhd,mimo_sink) -%include +GR_SWIG_BLOCK_MAGIC(uhd,simple_sink) //deprecated +%include //deprecated -GR_SWIG_BLOCK_MAGIC(uhd,simple_source) -%include +GR_SWIG_BLOCK_MAGIC(uhd,multi_usrp_source) +%include -GR_SWIG_BLOCK_MAGIC(uhd,simple_sink) -%include +GR_SWIG_BLOCK_MAGIC(uhd,multi_usrp_sink) +%include GR_SWIG_BLOCK_MAGIC(uhd,single_usrp_source) %include -- cgit From d029af43c3367a4611185ade70639cc6b7cc5e3d Mon Sep 17 00:00:00 2001 From: Josh Blum 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') diff --git a/gr-uhd/grc/.gitignore b/gr-uhd/grc/.gitignore index c95275d8d..d8ab9bd0c 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 a19a28f03..04b7dca36 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 7e61563cc..000000000 --- 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 = """\ - - - UHD MIMO $sourk.title() - uhd_mimo_$(sourk) - UHD - from gnuradio import uhd - 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 - - set_samp_rate(\$samp_rate) - #for $n in range($max_nchan) - set_center_freq($n, \$center_freq$(n)) - set_gain($n, \$gain$(n)) - set_antenna($n, \$ant$(n)) - #end for - - Input Type - type - enum - - - - - Num Channels - nchan - 2 - int - #for $n in range(2, $max_nchan+1) - - #end for - - - Args - args - addr=192.168.10.2 192.168.20.2 - string - - - Samp Rate (Sps) - samp_rate - samp_rate - real - - $params - $max_nchan >= \$nchan - \$nchan >= 0 - <$sourk> - $direction - \$type - \$type.vlen - \$nchan - - -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. - - -""" - -PARAMS_TMPL = """ - - Ch$(n): Subdev Spec - sd_spec$(n) - - string - - \#if not \$nchan() > $n - all - \#elif \$sd_spec$(n)() - none - \#else - part - \#end if - - - - Ch$(n): Center Freq (Hz) - center_freq$(n) - 0 - real - \#if \$nchan() > $n then 'none' else 'all'# - - - Ch$(n): Gain (dB) - gain$(n) - 0 - real - \#if \$nchan() > $n then 'none' else 'all'# - - - Ch$(n): Antenna - ant$(n) - - string - - \#if not \$nchan() > $n - all - \#elif \$ant$(n)() - none - \#else - part - \#end if - - -""" - -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 000000000..a4da53a18 --- /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 = """\ + + + UHD: Multi USRP $sourk.title() + uhd_multi_usrp_$(sourk) + UHD + from gnuradio import uhd + 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 + + set_samp_rate(\$samp_rate) + #for $n in range($max_nchan) + set_center_freq(\$center_freq$(n), $n) + set_gain(\$gain$(n), $n) + set_antenna(\$ant$(n), $n) + #end for + + Input Type + type + enum + + + + + Num Channels + nchan + 1 + int + part + + + + + + Device Addr + dev_addr + addr=192.168.10.2 + string + + \#if \$dev_addr() + none + \#else + part + \#end if + + + + Subdev Spec + sd_spec + + string + + \#if \$sd_spec() + none + \#else + part + \#end if + + + + Samp Rate (Sps) + samp_rate + samp_rate + real + + $params + $max_nchan >= \$nchan + \$nchan >= 0 + (len((\$sd_spec).split()) or 1) == \$nchan + <$sourk> + $direction + \$type + \$type.vlen + \$nchan + + +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. + + +""" + +PARAMS_TMPL = """ + + Ch$(n): Center Freq (Hz) + center_freq$(n) + 0 + real + \#if \$nchan() > $n then 'none' else 'all'# + + + Ch$(n): Gain (dB) + gain$(n) + 0 + real + \#if \$nchan() > $n then 'none' else 'all'# + + + Ch$(n): Antenna + ant$(n) + + string + + \#if not \$nchan() > $n + all + \#elif \$ant$(n)() + none + \#else + part + \#end if + + +""" + +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 000000000..2f5f2011f --- /dev/null +++ b/gr-uhd/grc/uhd_mimo_sink.xml @@ -0,0 +1,550 @@ + + + UHD MIMO Sink + uhd_mimo_sink + UHD + from gnuradio import uhd + 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 + + set_samp_rate($samp_rate) + set_center_freq(0, $center_freq0) + set_gain(0, $gain0) + set_antenna(0, $ant0) + set_center_freq(1, $center_freq1) + set_gain(1, $gain1) + set_antenna(1, $ant1) + set_center_freq(2, $center_freq2) + set_gain(2, $gain2) + set_antenna(2, $ant2) + set_center_freq(3, $center_freq3) + set_gain(3, $gain3) + set_antenna(3, $ant3) + set_center_freq(4, $center_freq4) + set_gain(4, $gain4) + set_antenna(4, $ant4) + set_center_freq(5, $center_freq5) + set_gain(5, $gain5) + set_antenna(5, $ant5) + set_center_freq(6, $center_freq6) + set_gain(6, $gain6) + set_antenna(6, $ant6) + set_center_freq(7, $center_freq7) + set_gain(7, $gain7) + set_antenna(7, $ant7) + + Input Type + type + enum + + + + + Num Channels + nchan + 2 + int + + + + + + + + + + Args + args + addr=192.168.10.2 192.168.20.2 + string + + + Samp Rate (Sps) + samp_rate + samp_rate + real + + + + Ch0: Subdev Spec + sd_spec0 + + string + + #if not $nchan() > 0 + all + #elif $sd_spec0() + none + #else + part + #end if + + + + Ch0: Center Freq (Hz) + center_freq0 + 0 + real + #if $nchan() > 0 then 'none' else 'all'# + + + Ch0: Gain (dB) + gain0 + 0 + real + #if $nchan() > 0 then 'none' else 'all'# + + + Ch0: Antenna + ant0 + + string + + #if not $nchan() > 0 + all + #elif $ant0() + none + #else + part + #end if + + + + + Ch1: Subdev Spec + sd_spec1 + + string + + #if not $nchan() > 1 + all + #elif $sd_spec1() + none + #else + part + #end if + + + + Ch1: Center Freq (Hz) + center_freq1 + 0 + real + #if $nchan() > 1 then 'none' else 'all'# + + + Ch1: Gain (dB) + gain1 + 0 + real + #if $nchan() > 1 then 'none' else 'all'# + + + Ch1: Antenna + ant1 + + string + + #if not $nchan() > 1 + all + #elif $ant1() + none + #else + part + #end if + + + + + Ch2: Subdev Spec + sd_spec2 + + string + + #if not $nchan() > 2 + all + #elif $sd_spec2() + none + #else + part + #end if + + + + Ch2: Center Freq (Hz) + center_freq2 + 0 + real + #if $nchan() > 2 then 'none' else 'all'# + + + Ch2: Gain (dB) + gain2 + 0 + real + #if $nchan() > 2 then 'none' else 'all'# + + + Ch2: Antenna + ant2 + + string + + #if not $nchan() > 2 + all + #elif $ant2() + none + #else + part + #end if + + + + + Ch3: Subdev Spec + sd_spec3 + + string + + #if not $nchan() > 3 + all + #elif $sd_spec3() + none + #else + part + #end if + + + + Ch3: Center Freq (Hz) + center_freq3 + 0 + real + #if $nchan() > 3 then 'none' else 'all'# + + + Ch3: Gain (dB) + gain3 + 0 + real + #if $nchan() > 3 then 'none' else 'all'# + + + Ch3: Antenna + ant3 + + string + + #if not $nchan() > 3 + all + #elif $ant3() + none + #else + part + #end if + + + + + Ch4: Subdev Spec + sd_spec4 + + string + + #if not $nchan() > 4 + all + #elif $sd_spec4() + none + #else + part + #end if + + + + Ch4: Center Freq (Hz) + center_freq4 + 0 + real + #if $nchan() > 4 then 'none' else 'all'# + + + Ch4: Gain (dB) + gain4 + 0 + real + #if $nchan() > 4 then 'none' else 'all'# + + + Ch4: Antenna + ant4 + + string + + #if not $nchan() > 4 + all + #elif $ant4() + none + #else + part + #end if + + + + + Ch5: Subdev Spec + sd_spec5 + + string + + #if not $nchan() > 5 + all + #elif $sd_spec5() + none + #else + part + #end if + + + + Ch5: Center Freq (Hz) + center_freq5 + 0 + real + #if $nchan() > 5 then 'none' else 'all'# + + + Ch5: Gain (dB) + gain5 + 0 + real + #if $nchan() > 5 then 'none' else 'all'# + + + Ch5: Antenna + ant5 + + string + + #if not $nchan() > 5 + all + #elif $ant5() + none + #else + part + #end if + + + + + Ch6: Subdev Spec + sd_spec6 + + string + + #if not $nchan() > 6 + all + #elif $sd_spec6() + none + #else + part + #end if + + + + Ch6: Center Freq (Hz) + center_freq6 + 0 + real + #if $nchan() > 6 then 'none' else 'all'# + + + Ch6: Gain (dB) + gain6 + 0 + real + #if $nchan() > 6 then 'none' else 'all'# + + + Ch6: Antenna + ant6 + + string + + #if not $nchan() > 6 + all + #elif $ant6() + none + #else + part + #end if + + + + + Ch7: Subdev Spec + sd_spec7 + + string + + #if not $nchan() > 7 + all + #elif $sd_spec7() + none + #else + part + #end if + + + + Ch7: Center Freq (Hz) + center_freq7 + 0 + real + #if $nchan() > 7 then 'none' else 'all'# + + + Ch7: Gain (dB) + gain7 + 0 + real + #if $nchan() > 7 then 'none' else 'all'# + + + Ch7: Antenna + ant7 + + string + + #if not $nchan() > 7 + all + #elif $ant7() + none + #else + part + #end if + + + + 8 >= $nchan + $nchan >= 0 + + in + $type + $type.vlen + $nchan + + +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. + + diff --git a/gr-uhd/grc/uhd_mimo_source.xml b/gr-uhd/grc/uhd_mimo_source.xml new file mode 100644 index 000000000..d8f4e6d66 --- /dev/null +++ b/gr-uhd/grc/uhd_mimo_source.xml @@ -0,0 +1,550 @@ + + + UHD MIMO Source + uhd_mimo_source + UHD + from gnuradio import uhd + 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 + + set_samp_rate($samp_rate) + set_center_freq(0, $center_freq0) + set_gain(0, $gain0) + set_antenna(0, $ant0) + set_center_freq(1, $center_freq1) + set_gain(1, $gain1) + set_antenna(1, $ant1) + set_center_freq(2, $center_freq2) + set_gain(2, $gain2) + set_antenna(2, $ant2) + set_center_freq(3, $center_freq3) + set_gain(3, $gain3) + set_antenna(3, $ant3) + set_center_freq(4, $center_freq4) + set_gain(4, $gain4) + set_antenna(4, $ant4) + set_center_freq(5, $center_freq5) + set_gain(5, $gain5) + set_antenna(5, $ant5) + set_center_freq(6, $center_freq6) + set_gain(6, $gain6) + set_antenna(6, $ant6) + set_center_freq(7, $center_freq7) + set_gain(7, $gain7) + set_antenna(7, $ant7) + + Input Type + type + enum + + + + + Num Channels + nchan + 2 + int + + + + + + + + + + Args + args + addr=192.168.10.2 192.168.20.2 + string + + + Samp Rate (Sps) + samp_rate + samp_rate + real + + + + Ch0: Subdev Spec + sd_spec0 + + string + + #if not $nchan() > 0 + all + #elif $sd_spec0() + none + #else + part + #end if + + + + Ch0: Center Freq (Hz) + center_freq0 + 0 + real + #if $nchan() > 0 then 'none' else 'all'# + + + Ch0: Gain (dB) + gain0 + 0 + real + #if $nchan() > 0 then 'none' else 'all'# + + + Ch0: Antenna + ant0 + + string + + #if not $nchan() > 0 + all + #elif $ant0() + none + #else + part + #end if + + + + + Ch1: Subdev Spec + sd_spec1 + + string + + #if not $nchan() > 1 + all + #elif $sd_spec1() + none + #else + part + #end if + + + + Ch1: Center Freq (Hz) + center_freq1 + 0 + real + #if $nchan() > 1 then 'none' else 'all'# + + + Ch1: Gain (dB) + gain1 + 0 + real + #if $nchan() > 1 then 'none' else 'all'# + + + Ch1: Antenna + ant1 + + string + + #if not $nchan() > 1 + all + #elif $ant1() + none + #else + part + #end if + + + + + Ch2: Subdev Spec + sd_spec2 + + string + + #if not $nchan() > 2 + all + #elif $sd_spec2() + none + #else + part + #end if + + + + Ch2: Center Freq (Hz) + center_freq2 + 0 + real + #if $nchan() > 2 then 'none' else 'all'# + + + Ch2: Gain (dB) + gain2 + 0 + real + #if $nchan() > 2 then 'none' else 'all'# + + + Ch2: Antenna + ant2 + + string + + #if not $nchan() > 2 + all + #elif $ant2() + none + #else + part + #end if + + + + + Ch3: Subdev Spec + sd_spec3 + + string + + #if not $nchan() > 3 + all + #elif $sd_spec3() + none + #else + part + #end if + + + + Ch3: Center Freq (Hz) + center_freq3 + 0 + real + #if $nchan() > 3 then 'none' else 'all'# + + + Ch3: Gain (dB) + gain3 + 0 + real + #if $nchan() > 3 then 'none' else 'all'# + + + Ch3: Antenna + ant3 + + string + + #if not $nchan() > 3 + all + #elif $ant3() + none + #else + part + #end if + + + + + Ch4: Subdev Spec + sd_spec4 + + string + + #if not $nchan() > 4 + all + #elif $sd_spec4() + none + #else + part + #end if + + + + Ch4: Center Freq (Hz) + center_freq4 + 0 + real + #if $nchan() > 4 then 'none' else 'all'# + + + Ch4: Gain (dB) + gain4 + 0 + real + #if $nchan() > 4 then 'none' else 'all'# + + + Ch4: Antenna + ant4 + + string + + #if not $nchan() > 4 + all + #elif $ant4() + none + #else + part + #end if + + + + + Ch5: Subdev Spec + sd_spec5 + + string + + #if not $nchan() > 5 + all + #elif $sd_spec5() + none + #else + part + #end if + + + + Ch5: Center Freq (Hz) + center_freq5 + 0 + real + #if $nchan() > 5 then 'none' else 'all'# + + + Ch5: Gain (dB) + gain5 + 0 + real + #if $nchan() > 5 then 'none' else 'all'# + + + Ch5: Antenna + ant5 + + string + + #if not $nchan() > 5 + all + #elif $ant5() + none + #else + part + #end if + + + + + Ch6: Subdev Spec + sd_spec6 + + string + + #if not $nchan() > 6 + all + #elif $sd_spec6() + none + #else + part + #end if + + + + Ch6: Center Freq (Hz) + center_freq6 + 0 + real + #if $nchan() > 6 then 'none' else 'all'# + + + Ch6: Gain (dB) + gain6 + 0 + real + #if $nchan() > 6 then 'none' else 'all'# + + + Ch6: Antenna + ant6 + + string + + #if not $nchan() > 6 + all + #elif $ant6() + none + #else + part + #end if + + + + + Ch7: Subdev Spec + sd_spec7 + + string + + #if not $nchan() > 7 + all + #elif $sd_spec7() + none + #else + part + #end if + + + + Ch7: Center Freq (Hz) + center_freq7 + 0 + real + #if $nchan() > 7 then 'none' else 'all'# + + + Ch7: Gain (dB) + gain7 + 0 + real + #if $nchan() > 7 then 'none' else 'all'# + + + Ch7: Antenna + ant7 + + string + + #if not $nchan() > 7 + all + #elif $ant7() + none + #else + part + #end if + + + + 8 >= $nchan + $nchan >= 0 + + out + $type + $type.vlen + $nchan + + +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. + + diff --git a/gr-uhd/lib/Makefile.am b/gr-uhd/lib/Makefile.am index d9a296c75..b4b1abfc6 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 From 1e5db4248e2488e0f1b44ac1405d78e16c2408d8 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Mon, 18 Oct 2010 16:13:10 -0700 Subject: uhd: work on multi usrp blocks, use block tree to categorize blocks, deprecate mimo blocks --- gr-uhd/grc/Makefile.am | 1 + gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py | 101 +++++++++++++++++++-------- gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py | 3 +- gr-uhd/grc/uhd_block_tree.xml | 23 ++++++ gr-uhd/grc/uhd_mimo_sink.xml | 3 +- gr-uhd/grc/uhd_mimo_source.xml | 3 +- gr-uhd/grc/uhd_simple_sink.xml | 1 - gr-uhd/grc/uhd_simple_source.xml | 1 - 8 files changed, 99 insertions(+), 37 deletions(-) create mode 100644 gr-uhd/grc/uhd_block_tree.xml (limited to 'gr-uhd') diff --git a/gr-uhd/grc/Makefile.am b/gr-uhd/grc/Makefile.am index 04b7dca36..d424ca709 100644 --- a/gr-uhd/grc/Makefile.am +++ b/gr-uhd/grc/Makefile.am @@ -36,6 +36,7 @@ BUILT_SOURCES = \ $(generated_uhd_single_usrp_blocks) dist_grcblocks_DATA = \ + uhd_block_tree.xml \ $(BUILT_SOURCES) # add the deprecated files 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 a4da53a18..8de4408d5 100755 --- a/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py +++ b/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py @@ -24,10 +24,16 @@ MAIN_TMPL = """\ UHD: Multi USRP $sourk.title() uhd_multi_usrp_$(sourk) - UHD from gnuradio import uhd uhd.multi_usrp_$(sourk)(\$dev_addr, uhd.io_type_t.\$type.type, \$nchan) -self.\$(id).set_subdev_spec(\$sd_spec) +\#if \$sync() +self.\$(id).set_time_unknown_pps(uhd.time_spec_t()) +\#end if +#for $m in range($max_mboards) +\#if \$num_mboards() > $m +self.\$(id).set_subdev_spec(\$sd_spec$(m), $m) +\#end if +#end for self.\$(id).set_samp_rate(\$samp_rate) #for $n in range($max_nchan) \#if \$nchan() > $n @@ -62,25 +68,6 @@ self.\$(id).set_antenna(\$ant$(n), $n) vlen:2 - - Num Channels - nchan - 1 - int - part - - - - Device Addr dev_addr @@ -95,18 +82,61 @@ self.\$(id).set_antenna(\$ant$(n), $n) - Subdev Spec - sd_spec + Sync + sync + sync + enum + \#if \$sync() then 'none' else 'part'# + + + + + Num Mboards + num_mboards + 2 + int + #for $m in range(1, $max_mboards) + + #end for + + #for $m in range($max_mboards) + + Mb$(m): Subdev Spec + sd_spec$(m) string - \#if \$sd_spec() + \#if not \$num_mboards() > $m + all + \#elif \$sd_spec$(m)() none \#else part \#end if + #end for + + Num Channels + nchan + 2 + int + #for $n in range(1, $max_nchan) + + #end for + Samp Rate (Sps) samp_rate @@ -115,8 +145,10 @@ self.\$(id).set_antenna(\$ant$(n), $n) $params $max_nchan >= \$nchan - \$nchan >= 0 - (len((\$sd_spec).split()) or 1) == \$nchan + \$nchan > 0 + $max_mboards >= \$num_mboards + \$num_mboards > 0 + \$nchan >= \$num_mboards <$sourk> $direction \$type @@ -132,18 +164,27 @@ 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 +Num Motherboards: +Selects the number of USRP motherboards in this multi-USRP configuration. + +Num Channels: +Selects the total number of channels in this multi-USRP configuration. +Ex: 4 motherboards with 2 channels per board = 8 channels total + 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: +Each motherboard should have its own subdevice specification \\ +and all subdevice specifications should be the same length. \\ 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 +Single channel example: :AB +Dual channel example: :A :B Antenna: For subdevices/daughterboards with only one antenna, this may be left blank. \\ @@ -189,7 +230,8 @@ def parse_tmpl(_tmpl, **kwargs): from Cheetah import Template return str(Template.Template(_tmpl, kwargs)) -max_num_channels = 4 +max_num_mboards = 4 +max_num_channels = max_num_mboards*4 if __name__ == '__main__': import sys @@ -205,6 +247,7 @@ if __name__ == '__main__': 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, + max_mboards=max_num_mboards, params=params, sourk=sourk, direction=direction, 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 5b3cb5b5a..5b87719e5 100755 --- a/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py +++ b/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py @@ -24,7 +24,6 @@ MAIN_TMPL = """\ UHD: Single USRP $sourk.title() uhd_single_usrp_$(sourk) - UHD from gnuradio import uhd uhd.single_usrp_$(sourk)(\$dev_addr, uhd.io_type_t.\$type.type, \$nchan) self.\$(id).set_subdev_spec(\$sd_spec) @@ -115,7 +114,7 @@ self.\$(id).set_antenna(\$ant$(n), $n) $params $max_nchan >= \$nchan - \$nchan >= 0 + \$nchan > 0 (len((\$sd_spec).split()) or 1) == \$nchan <$sourk> $direction diff --git a/gr-uhd/grc/uhd_block_tree.xml b/gr-uhd/grc/uhd_block_tree.xml new file mode 100644 index 000000000..e8c4f069d --- /dev/null +++ b/gr-uhd/grc/uhd_block_tree.xml @@ -0,0 +1,23 @@ + + + + + + UHD + uhd_single_usrp_source + uhd_single_usrp_sink + uhd_multi_usrp_source + uhd_multi_usrp_sink + + + UHD (DEPRECATED) + uhd_simple_source + uhd_simple_sink + uhd_mimo_source + uhd_mimo_sink + + diff --git a/gr-uhd/grc/uhd_mimo_sink.xml b/gr-uhd/grc/uhd_mimo_sink.xml index 2f5f2011f..13865c913 100644 --- a/gr-uhd/grc/uhd_mimo_sink.xml +++ b/gr-uhd/grc/uhd_mimo_sink.xml @@ -1,8 +1,7 @@ - UHD MIMO Sink + UHD MIMO Sink (DEPRECATED) uhd_mimo_sink - UHD from gnuradio import uhd uhd.mimo_sink($nchan, $args, uhd.io_type_t.$type.type) self.$(id).set_samp_rate_all($samp_rate) diff --git a/gr-uhd/grc/uhd_mimo_source.xml b/gr-uhd/grc/uhd_mimo_source.xml index d8f4e6d66..6167838b0 100644 --- a/gr-uhd/grc/uhd_mimo_source.xml +++ b/gr-uhd/grc/uhd_mimo_source.xml @@ -1,8 +1,7 @@ - UHD MIMO Source + UHD MIMO Source (DEPRECATED) uhd_mimo_source - UHD from gnuradio import uhd uhd.mimo_source($nchan, $args, uhd.io_type_t.$type.type) self.$(id).set_samp_rate_all($samp_rate) diff --git a/gr-uhd/grc/uhd_simple_sink.xml b/gr-uhd/grc/uhd_simple_sink.xml index 66dc5bf14..ee6051432 100644 --- a/gr-uhd/grc/uhd_simple_sink.xml +++ b/gr-uhd/grc/uhd_simple_sink.xml @@ -7,7 +7,6 @@ UHD Simple Sink (DEPRECATED) uhd_simple_sink - UHD from gnuradio import uhd uhd.simple_sink($args, uhd.io_type_t.$type.type) self.$(id).set_subdev_spec($sd_spec) diff --git a/gr-uhd/grc/uhd_simple_source.xml b/gr-uhd/grc/uhd_simple_source.xml index 00c60f41d..825981d66 100644 --- a/gr-uhd/grc/uhd_simple_source.xml +++ b/gr-uhd/grc/uhd_simple_source.xml @@ -7,7 +7,6 @@ UHD Simple Source (DEPRECATED) uhd_simple_source - UHD from gnuradio import uhd uhd.simple_source($args, uhd.io_type_t.$type.type) self.$(id).set_subdev_spec($sd_spec) -- cgit From 7f46efca9cb0c87e9130c117ac41650f6e0c25cc Mon Sep 17 00:00:00 2001 From: Josh Blum 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') 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 8de4408d5..aa550157d 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 = """\ UHD: Multi USRP $sourk.title() uhd_multi_usrp_$(sourk) from gnuradio import uhd - uhd.multi_usrp_$(sourk)(\$dev_addr, uhd.io_type_t.\$type.type, \$nchan) + 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 5b87719e5..4d645afe1 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 = """\ UHD: Single USRP $sourk.title() uhd_single_usrp_$(sourk) from gnuradio import uhd - uhd.single_usrp_$(sourk)(\$dev_addr, uhd.io_type_t.\$type.type, \$nchan) + 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 202f12840..31dbac44f 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_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( - 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 13bba20fb..5dacc1fac 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_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 c10c08c50..1fcb57650 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_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( - 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 b94e53f01..36c4b6fdc 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_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 96c1dbdf4..4297a83ff 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_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( - 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 bec788193..e83bb6ded 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_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 7c3694a99..27a788d96 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_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( - 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 196b7c675..c323fbd7e 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_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 From 8c6445cb3dd2a8db361203fedf55f3efb6953635 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Mon, 18 Oct 2010 17:31:48 -0700 Subject: uhd: typo fix for single usrp grc file generator --- gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gr-uhd') 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 4d645afe1..7bc2425ee 100755 --- a/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py +++ b/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py @@ -28,7 +28,7 @@ MAIN_TMPL = """\ uhd.single_usrp_$(sourk)( device_addr=\$dev_addr, io_type=uhd.io_type_t.\$type.type, - num_channels\$nchan, + num_channels=\$nchan, ) self.\$(id).set_subdev_spec(\$sd_spec) self.\$(id).set_samp_rate(\$samp_rate) -- cgit From 343cba5663d0eefdd3ee3918bef812dc1bd75508 Mon Sep 17 00:00:00 2001 From: Josh Blum 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') 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 aa550157d..229716732 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) num_mboards 2 int - #for $m in range(1, $max_mboards) + #for $m in range(1, $max_mboards+1) @@ -59,6 +62,7 @@ self.\$(id).set_antenna(\$ant$(n), $n) set_center_freq(\$center_freq$(n), $n) set_gain(\$gain$(n), $n) set_antenna(\$ant$(n), $n) + set_bandwidth(\$bw$(n), $n) #end for Input Type @@ -196,9 +200,14 @@ Single channel example: :AB Dual channel example: :A :B Antenna: -For subdevices/daughterboards with only one antenna, this may be left blank. \\ +For subdevices 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. + +Bandwidth: +To use the default bandwidth filter setting, this should be zero. \\ +Only certain subdevices have configurable bandwidth filters. \\ +See the daughterboard application notes for possible configurations. """ @@ -233,6 +242,21 @@ PARAMS_TMPL = """ \#end if + + Ch$(n): Bandwidth (Hz) + bw$(n) + 0 + real + + \#if not \$nchan() > $n + all + \#elif \$bw$(n)() + none + \#else + part + \#end if + + """ def parse_tmpl(_tmpl, **kwargs): 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 02cdf64cc..cb2143f8f 100755 --- a/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py +++ b/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py @@ -41,6 +41,9 @@ self.\$(id).set_gain(\$gain$(n), $n) \#if \$ant$(n)() self.\$(id).set_antenna(\$ant$(n), $n) \#end if + \#if \$bw$(n)() +self.\$(id).set_bandwidth(\$bw$(n), $n) + \#end if \#end if #end for @@ -49,6 +52,7 @@ self.\$(id).set_antenna(\$ant$(n), $n) set_center_freq(\$center_freq$(n), $n) set_gain(\$gain$(n), $n) set_antenna(\$ant$(n), $n) + set_bandwidth(\$bw$(n), $n) #end for Input Type @@ -152,9 +156,14 @@ 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. \\ +For subdevices 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. + +Bandwidth: +To use the default bandwidth filter setting, this should be zero. \\ +Only certain subdevices have configurable bandwidth filters. \\ +See the daughterboard application notes for possible configurations. """ @@ -189,6 +198,21 @@ PARAMS_TMPL = """ \#end if + + Ch$(n): Bandwidth (Hz) + bw$(n) + 0 + real + + \#if not \$nchan() > $n + all + \#elif \$bw$(n)() + none + \#else + part + \#end if + + """ def parse_tmpl(_tmpl, **kwargs): -- cgit From 5a2de999da86d48cd7f005d08cc48965cb8c7a65 Mon Sep 17 00:00:00 2001 From: Josh Blum 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') diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.cc b/gr-uhd/lib/uhd_multi_usrp_sink.cc index b75a8303c..ee16e2928 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 a94e7bd5a..370e59d0e 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 226e8b86f..029a763e3 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 081c82ee6..b3cbdae1f 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 24981a59a..622f506b5 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 390667df9..a4c4e6452 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 f7c7fc839..907e8be54 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 415c52e9a..495f8c611 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 5b3b52472..d332bb617 100644 --- a/gr-uhd/swig/uhd_swig.i +++ b/gr-uhd/swig/uhd_swig.i @@ -69,6 +69,7 @@ namespace std { //////////////////////////////////////////////////////////////////////// %include %include +%include %include %include %include -- cgit From 3dab5d93a45928baa4fb23878d644751e06943a0 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Thu, 28 Oct 2010 13:24:23 -0700 Subject: uhd: make a tune_request_t that inherits from float for GRC, added docs --- gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py | 24 +++++++++++++++--------- gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py | 16 +++++++++++----- gr-uhd/swig/__init__.py | 12 ++++++++++++ 3 files changed, 38 insertions(+), 14 deletions(-) (limited to 'gr-uhd') 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 ae40e551a..112d88159 100755 --- a/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py +++ b/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py @@ -180,15 +180,6 @@ USRP2 Example: addr=192.168.10.2 192.168.10.3 Num Motherboards: Selects the number of USRP motherboards in this multi-USRP configuration. -Num Channels: -Selects the total number of channels in this multi-USRP configuration. -Ex: 4 motherboards with 2 channels per board = 8 channels total - -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: Each motherboard should have its own subdevice specification \\ and all subdevice specifications should be the same length. \\ @@ -199,6 +190,21 @@ See the application notes for further details. Single channel example: :AB Dual channel example: :A :B +Num Channels: +Selects the total number of channels in this multi-USRP configuration. +Ex: 4 motherboards with 2 channels per board = 8 channels total + +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. + +Center frequency: +The center frequency is the overall frequency of the RF chain. \\ +For greater control of how the UHD tunes elements in the RF chain, \\ +pass a tune_request_t object rather than a simple target frequency. +Tuning with an LO offset example: uhd.tune_request_t(freq, lo_off) + Antenna: For subdevices with only one antenna, this may be left blank. \\ Otherwise, the user should specify one of the possible antenna choices. \\ 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 cb2143f8f..9b6422f7a 100755 --- a/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py +++ b/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py @@ -142,11 +142,6 @@ Used args to specify a specfic device. USRP2 Example: addr=192.168.10.2 USRP1 Example: serial=12345678 -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). \\ @@ -155,6 +150,17 @@ See the application notes for further details. Single channel example: A:AB Dual channel example: A:AB B:0 +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. + +Center frequency: +The center frequency is the overall frequency of the RF chain. \\ +For greater control of how the UHD tunes elements in the RF chain, \\ +pass a tune_request_t object rather than a simple target frequency. +Tuning with an LO offset example: uhd.tune_request_t(freq, lo_off) + Antenna: For subdevices with only one antenna, this may be left blank. \\ Otherwise, the user should specify one of the possible antenna choices. \\ diff --git a/gr-uhd/swig/__init__.py b/gr-uhd/swig/__init__.py index 2fed17e57..0fdacb796 100644 --- a/gr-uhd/swig/__init__.py +++ b/gr-uhd/swig/__init__.py @@ -21,8 +21,20 @@ # The presence of this file turns this directory into a Python package +######################################################################## # Add SWIG generated code to this namespace +######################################################################## from uhd_swig import * +######################################################################## # Add other content from pure-Python modules here +######################################################################## +class tune_request_t(tune_request_t, float): + """ + Make the python tune request object inherit from float + so that it can be passed in GRC as a frequency parameter. + The type checking in GRC will accept the tune request. + """ + def __new__(self, *args): return float.__new__(self) + def __float__(self): return self.target_freq -- cgit From 2aef04843d248d0584b4865c62d7ca0772113dc9 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Thu, 28 Oct 2010 17:22:25 -0700 Subject: uhd: added ref clock option to single usrp blocks, minor grc fix on empty option keys --- gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'gr-uhd') 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 9b6422f7a..7337c71d7 100755 --- a/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py +++ b/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py @@ -30,6 +30,13 @@ MAIN_TMPL = """\ io_type=uhd.io_type_t.\$type.type, num_channels=\$nchan, ) +\#if \$ref_clk() +_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); +\#end if \#if \$sd_spec() self.\$(id).set_subdev_spec(\$sd_spec) \#end if @@ -103,6 +110,21 @@ self.\$(id).set_bandwidth(\$bw$(n), $n) \#end if + + Ref Clock + ref_clk + + enum + \#if \$ref_clk() then 'none' else 'part'# + + + Subdev Spec sd_spec -- cgit