From 5e9908fbec19ce9309c12ea61c0303e6666e981a Mon Sep 17 00:00:00 2001
From: Josh Blum <josh@joshknows.com>
Date: Mon, 18 Oct 2010 01:03:11 -0700
Subject: uhd: removed utils warning functions, moved into the lower level
 wrappers

---
 gr-uhd/lib/Makefile.am               |  4 +--
 gr-uhd/lib/uhd_mimo_sink.cc          |  6 ++--
 gr-uhd/lib/uhd_mimo_source.cc        |  6 ++--
 gr-uhd/lib/uhd_simple_sink.cc        |  6 ++--
 gr-uhd/lib/uhd_simple_source.cc      |  6 ++--
 gr-uhd/lib/uhd_single_usrp_sink.cc   |  3 --
 gr-uhd/lib/uhd_single_usrp_source.cc |  3 --
 gr-uhd/lib/utils.cc                  | 56 ------------------------------------
 gr-uhd/lib/utils.h                   | 40 --------------------------
 9 files changed, 13 insertions(+), 117 deletions(-)
 delete mode 100644 gr-uhd/lib/utils.cc
 delete mode 100644 gr-uhd/lib/utils.h

(limited to 'gr-uhd/lib')

diff --git a/gr-uhd/lib/Makefile.am b/gr-uhd/lib/Makefile.am
index 1260201a5c..69a41e7884 100644
--- a/gr-uhd/lib/Makefile.am
+++ b/gr-uhd/lib/Makefile.am
@@ -29,7 +29,6 @@ AM_CPPFLAGS = \
 lib_LTLIBRARIES = libgnuradio-uhd.la
 
 libgnuradio_uhd_la_SOURCES = \
-	utils.cc \
 	uhd_mimo_source.cc \
 	uhd_mimo_sink.cc \
 	uhd_simple_source.cc \
@@ -51,5 +50,4 @@ grinclude_HEADERS = \
 	uhd_single_usrp_source.h \
 	uhd_single_usrp_sink.h
 
-noinst_HEADERS = \
-	utils.h
+noinst_HEADERS =
diff --git a/gr-uhd/lib/uhd_mimo_sink.cc b/gr-uhd/lib/uhd_mimo_sink.cc
index 0a2ce1b0a7..03d310b1ea 100644
--- a/gr-uhd/lib/uhd_mimo_sink.cc
+++ b/gr-uhd/lib/uhd_mimo_sink.cc
@@ -23,7 +23,7 @@
 #include <uhd_mimo_sink.h>
 #include <gr_io_signature.h>
 #include <stdexcept>
-#include "utils.h"
+//#include "utils.h"
 
 /***********************************************************************
  * UHD Sink
@@ -59,7 +59,7 @@ public:
 
     void set_samp_rate_all(double rate){
         _dev->set_tx_rate_all(rate);
-        do_samp_rate_error_message(rate, get_samp_rate_all(), "TX");
+        //do_samp_rate_error_message(rate, get_samp_rate_all(), "TX");
     }
 
     double get_samp_rate_all(void){
@@ -68,7 +68,7 @@ public:
 
     uhd::tune_result_t set_center_freq(size_t chan, double freq){
         uhd::tune_result_t tr = _dev->set_tx_freq(chan, freq);
-        do_tune_freq_error_message(freq, _dev->get_tx_freq(chan), "TX");
+        //do_tune_freq_error_message(freq, _dev->get_tx_freq(chan), "TX");
         return tr;
     }
 
diff --git a/gr-uhd/lib/uhd_mimo_source.cc b/gr-uhd/lib/uhd_mimo_source.cc
index 62157142db..abd70ba369 100644
--- a/gr-uhd/lib/uhd_mimo_source.cc
+++ b/gr-uhd/lib/uhd_mimo_source.cc
@@ -23,7 +23,7 @@
 #include <uhd_mimo_source.h>
 #include <gr_io_signature.h>
 #include <stdexcept>
-#include "utils.h"
+//#include "utils.h"
 
 /***********************************************************************
  * UHD Source
@@ -59,7 +59,7 @@ public:
 
     void set_samp_rate_all(double rate){
         _dev->set_rx_rate_all(rate);
-        do_samp_rate_error_message(rate, get_samp_rate_all(), "RX");
+        //do_samp_rate_error_message(rate, get_samp_rate_all(), "RX");
     }
 
     double get_samp_rate_all(void){
@@ -68,7 +68,7 @@ public:
 
     uhd::tune_result_t set_center_freq(size_t chan, double freq){
         uhd::tune_result_t tr = _dev->set_rx_freq(chan, freq);
-        do_tune_freq_error_message(freq, _dev->get_rx_freq(chan), "RX");
+        //do_tune_freq_error_message(freq, _dev->get_rx_freq(chan), "RX");
         return tr;
     }
 
diff --git a/gr-uhd/lib/uhd_simple_sink.cc b/gr-uhd/lib/uhd_simple_sink.cc
index 7b31218dbb..d7b04465d4 100644
--- a/gr-uhd/lib/uhd_simple_sink.cc
+++ b/gr-uhd/lib/uhd_simple_sink.cc
@@ -23,7 +23,7 @@
 #include <uhd_simple_sink.h>
 #include <gr_io_signature.h>
 #include <stdexcept>
-#include "utils.h"
+//#include "utils.h"
 
 /***********************************************************************
  * UHD Sink
@@ -56,7 +56,7 @@ public:
 
     void set_samp_rate(double rate){
         _dev->set_tx_rate(rate);
-        do_samp_rate_error_message(rate, get_samp_rate(), "TX");
+        //do_samp_rate_error_message(rate, get_samp_rate(), "TX");
     }
 
     double get_samp_rate(void){
@@ -65,7 +65,7 @@ public:
 
     uhd::tune_result_t set_center_freq(double freq){
         uhd::tune_result_t tr = _dev->set_tx_freq(freq);
-        do_tune_freq_error_message(freq, _dev->get_tx_freq(), "TX");
+        //do_tune_freq_error_message(freq, _dev->get_tx_freq(), "TX");
         return tr;
     }
 
diff --git a/gr-uhd/lib/uhd_simple_source.cc b/gr-uhd/lib/uhd_simple_source.cc
index c1e11e85d2..d74c8414d2 100644
--- a/gr-uhd/lib/uhd_simple_source.cc
+++ b/gr-uhd/lib/uhd_simple_source.cc
@@ -25,7 +25,7 @@
 #include <stdexcept>
 #include <iostream>
 #include <boost/format.hpp>
-#include "utils.h"
+//#include "utils.h"
 
 /***********************************************************************
  * UHD Source
@@ -59,7 +59,7 @@ public:
 
     void set_samp_rate(double rate){
         _dev->set_rx_rate(rate);
-        do_samp_rate_error_message(rate, get_samp_rate(), "RX");
+        //do_samp_rate_error_message(rate, get_samp_rate(), "RX");
     }
 
     double get_samp_rate(void){
@@ -68,7 +68,7 @@ public:
 
     uhd::tune_result_t set_center_freq(double freq){
         uhd::tune_result_t tr = _dev->set_rx_freq(freq);
-        do_tune_freq_error_message(freq, _dev->get_rx_freq(), "RX");
+        //do_tune_freq_error_message(freq, _dev->get_rx_freq(), "RX");
         return tr;
     }
 
diff --git a/gr-uhd/lib/uhd_single_usrp_sink.cc b/gr-uhd/lib/uhd_single_usrp_sink.cc
index 96f86c8db7..cd7d7a6188 100644
--- a/gr-uhd/lib/uhd_single_usrp_sink.cc
+++ b/gr-uhd/lib/uhd_single_usrp_sink.cc
@@ -22,7 +22,6 @@
 #include <uhd_single_usrp_sink.h>
 #include <gr_io_signature.h>
 #include <stdexcept>
-#include "utils.h"
 
 /***********************************************************************
  * UHD Single USPR Sink
@@ -56,7 +55,6 @@ public:
 
     void set_samp_rate(double rate){
         _dev->set_tx_rate(rate);
-        do_samp_rate_error_message(rate, get_samp_rate(), "TX");
     }
 
     double get_samp_rate(void){
@@ -65,7 +63,6 @@ public:
 
     uhd::tune_result_t set_center_freq(double freq, size_t chan){
         uhd::tune_result_t tr = _dev->set_tx_freq(freq, chan);
-        do_tune_freq_error_message(freq, _dev->get_tx_freq(chan), "TX");
         return tr;
     }
 
diff --git a/gr-uhd/lib/uhd_single_usrp_source.cc b/gr-uhd/lib/uhd_single_usrp_source.cc
index b5e39b5a4d..fc2c453eb3 100644
--- a/gr-uhd/lib/uhd_single_usrp_source.cc
+++ b/gr-uhd/lib/uhd_single_usrp_source.cc
@@ -24,7 +24,6 @@
 #include <stdexcept>
 #include <iostream>
 #include <boost/format.hpp>
-#include "utils.h"
 
 /***********************************************************************
  * UHD Single USPR Source
@@ -54,7 +53,6 @@ public:
 
     void set_samp_rate(double rate){
         _dev->set_rx_rate(rate);
-        do_samp_rate_error_message(rate, get_samp_rate(), "RX");
     }
 
     double get_samp_rate(void){
@@ -63,7 +61,6 @@ public:
 
     uhd::tune_result_t set_center_freq(double freq, size_t chan){
         uhd::tune_result_t tr = _dev->set_rx_freq(freq, chan);
-        do_tune_freq_error_message(freq, _dev->get_rx_freq(chan), "RX");
         return tr;
     }
 
diff --git a/gr-uhd/lib/utils.cc b/gr-uhd/lib/utils.cc
deleted file mode 100644
index da83529650..0000000000
--- a/gr-uhd/lib/utils.cc
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2010 Free Software Foundation, Inc.
- * 
- * This file is part of GNU Radio
- * 
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- * 
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "utils.h" //local include
-#include <uhd/utils/warning.hpp>
-#include <boost/format.hpp>
-#include <cmath>
-
-void do_samp_rate_error_message(
-    double target_rate,
-    double actual_rate,
-    const std::string &xx
-){
-    static const double max_allowed_error = 1.0; //Sps
-    if (std::abs(target_rate - actual_rate) > max_allowed_error){
-        uhd::print_warning(str(boost::format(
-            "The hardware does not support the requested %s sample rate:\n"
-            "Target sample rate: %f MSps\n"
-            "Actual sample rate: %f MSps\n"
-        ) % xx % (target_rate/1e6) % (actual_rate/1e6)));
-    }
-}
-
-void do_tune_freq_error_message(
-    double target_freq,
-    double actual_freq,
-    const std::string &xx
-){
-    static const double max_allowed_error = 1.0; //Hz
-    if (std::abs(target_freq - actual_freq) > max_allowed_error){
-        uhd::print_warning(str(boost::format(
-            "The hardware does not support the requested %s frequency:\n"
-            "Target frequency: %f MHz\n"
-            "Actual frequency: %f MHz\n"
-        ) % xx % (target_freq/1e6) % (actual_freq/1e6)));
-    }
-}
diff --git a/gr-uhd/lib/utils.h b/gr-uhd/lib/utils.h
deleted file mode 100644
index 4a05476bdb..0000000000
--- a/gr-uhd/lib/utils.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2010 Free Software Foundation, Inc.
- * 
- * This file is part of GNU Radio
- * 
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- * 
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef INCLUDED_NOINST_UTILS_H
-#define INCLUDED_NOINST_UTILS_H
-
-#include <string>
-
-void do_samp_rate_error_message(
-    double target_rate,
-    double actual_rate,
-    const std::string &xx
-);
-
-void do_tune_freq_error_message(
-    double target_freq,
-    double actual_freq,
-    const std::string &xx
-);
-
-#endif /* INCLUDED_NOINST_UTILS_H */
-- 
cgit v1.2.3


From 4ac5545625d3d6df9881695f764c9c94049edb7b Mon Sep 17 00:00:00 2001
From: Josh Blum <josh@joshknows.com>
Date: Mon, 18 Oct 2010 12:18:13 -0700
Subject: uhd: added multi usrp skeleton and added deprecation note to other
 headers

---
 gr-uhd/lib/Makefile.am              |   8 +--
 gr-uhd/lib/uhd_mimo_sink.h          |   3 +
 gr-uhd/lib/uhd_mimo_source.h        |   3 +
 gr-uhd/lib/uhd_multi_usrp_sink.cc   |  24 +++++++
 gr-uhd/lib/uhd_multi_usrp_sink.h    | 138 ++++++++++++++++++++++++++++++++++++
 gr-uhd/lib/uhd_multi_usrp_source.cc |  24 +++++++
 gr-uhd/lib/uhd_multi_usrp_source.h  | 138 ++++++++++++++++++++++++++++++++++++
 gr-uhd/lib/uhd_simple_sink.h        |   3 +
 gr-uhd/lib/uhd_simple_source.h      |   3 +
 9 files changed, 340 insertions(+), 4 deletions(-)
 create mode 100644 gr-uhd/lib/uhd_multi_usrp_sink.cc
 create mode 100644 gr-uhd/lib/uhd_multi_usrp_sink.h
 create mode 100644 gr-uhd/lib/uhd_multi_usrp_source.cc
 create mode 100644 gr-uhd/lib/uhd_multi_usrp_source.h

(limited to 'gr-uhd/lib')

diff --git a/gr-uhd/lib/Makefile.am b/gr-uhd/lib/Makefile.am
index 69a41e7884..d9a296c754 100644
--- a/gr-uhd/lib/Makefile.am
+++ b/gr-uhd/lib/Makefile.am
@@ -31,6 +31,8 @@ lib_LTLIBRARIES = libgnuradio-uhd.la
 libgnuradio_uhd_la_SOURCES = \
 	uhd_mimo_source.cc \
 	uhd_mimo_sink.cc \
+	uhd_multi_usrp_source.cc \
+	uhd_multi_usrp_sink.cc \
 	uhd_simple_source.cc \
 	uhd_simple_sink.cc \
 	uhd_single_usrp_source.cc \
@@ -43,10 +45,8 @@ libgnuradio_uhd_la_LIBADD = \
 libgnuradio_uhd_la_LDFLAGS = $(LTVERSIONFLAGS)
 
 grinclude_HEADERS = \
-	uhd_mimo_source.h \
-	uhd_mimo_sink.h \
-	uhd_simple_source.h \
-	uhd_simple_sink.h \
+	uhd_multi_usrp_source.h \
+	uhd_multi_usrp_sink.h \
 	uhd_single_usrp_source.h \
 	uhd_single_usrp_sink.h
 
diff --git a/gr-uhd/lib/uhd_mimo_sink.h b/gr-uhd/lib/uhd_mimo_sink.h
index 46679d973d..a0a30381c3 100644
--- a/gr-uhd/lib/uhd_mimo_sink.h
+++ b/gr-uhd/lib/uhd_mimo_sink.h
@@ -34,6 +34,9 @@ boost::shared_ptr<uhd_mimo_sink> uhd_make_mimo_sink(
     const uhd::io_type_t::tid_t &type
 );
 
+/***********************************************************************
+ * DEPRECATED
+ **********************************************************************/
 class uhd_mimo_sink : public gr_sync_block{
 public:
 
diff --git a/gr-uhd/lib/uhd_mimo_source.h b/gr-uhd/lib/uhd_mimo_source.h
index fbd7f2c420..f6f18eedcf 100644
--- a/gr-uhd/lib/uhd_mimo_source.h
+++ b/gr-uhd/lib/uhd_mimo_source.h
@@ -34,6 +34,9 @@ boost::shared_ptr<uhd_mimo_source> uhd_make_mimo_source(
     const uhd::io_type_t::tid_t &type
 );
 
+/***********************************************************************
+ * DEPRECATED
+ **********************************************************************/
 class uhd_mimo_source : public gr_sync_block{
 public:
 
diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.cc b/gr-uhd/lib/uhd_multi_usrp_sink.cc
new file mode 100644
index 0000000000..6854649c34
--- /dev/null
+++ b/gr-uhd/lib/uhd_multi_usrp_sink.cc
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2010 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <uhd_multi_usrp_sink.h>
+#include <gr_io_signature.h>
+#include <stdexcept>
diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.h b/gr-uhd/lib/uhd_multi_usrp_sink.h
new file mode 100644
index 0000000000..b29657e941
--- /dev/null
+++ b/gr-uhd/lib/uhd_multi_usrp_sink.h
@@ -0,0 +1,138 @@
+/*
+ * Copyright 2010 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_UHD_MULTI_USRP_SINK_H
+#define INCLUDED_UHD_MULTI_USRP_SINK_H
+
+#include <gr_sync_block.h>
+#include <uhd/usrp/multi_usrp.hpp>
+
+class uhd_multi_usrp_sink;
+
+boost::shared_ptr<uhd_multi_usrp_sink> uhd_make_multi_usrp_sink(
+    const std::string &args,
+    const uhd::io_type_t::tid_t &type,
+    size_t num_channels
+);
+
+class uhd_multi_usrp_sink : public gr_sync_block{
+public:
+
+    /*!
+     * Set the IO signature for this block.
+     * \param sig the input signature
+     */
+    uhd_multi_usrp_sink(gr_io_signature_sptr sig);
+
+    /*!
+     * Set the subdevice specification.
+     * \param spec the subdev spec markup string
+     */
+    virtual void set_subdev_spec(const std::string &spec, size_t mboard) = 0;
+
+    /*!
+     * Set the sample rate for the usrp device.
+     * \param rate a new rate in Sps
+     */
+    virtual void set_samp_rate(double rate) = 0;
+
+    /*!
+     * Get the sample rate for the usrp device.
+     * This is the actual sample rate and may differ from the rate set.
+     * \return the actual rate in Sps
+     */
+    virtual double get_samp_rate(void) = 0;
+
+    /*!
+     * Tune the usrp device to the desired center frequency.
+     * \param freq the desired frequency in Hz
+     * \return a tune result with the actual frequencies
+     */
+    virtual uhd::tune_result_t set_center_freq(double freq, size_t chan = 0) = 0;
+
+    /*!
+     * Get the tunable frequency range.
+     * \return the frequency range in Hz
+     */
+    virtual uhd::freq_range_t get_freq_range(size_t chan = 0) = 0;
+
+    /*!
+     * Set the gain for the dboard.
+     * \param gain the gain in dB
+     */
+    virtual void set_gain(float gain, size_t chan = 0) = 0;
+
+    /*!
+     * Get the actual dboard gain setting.
+     * \return the actual gain in dB
+     */
+    virtual float get_gain(size_t chan = 0) = 0;
+
+    /*!
+     * Get the settable gain range.
+     * \return the gain range in dB
+     */
+    virtual uhd::gain_range_t get_gain_range(size_t chan = 0) = 0;
+
+    /*!
+     * Set the antenna to use.
+     * \param ant the antenna string
+     */
+    virtual void set_antenna(const std::string &ant, size_t chan = 0) = 0;
+
+    /*!
+     * Get the antenna in use.
+     * \return the antenna string
+     */
+    virtual std::string get_antenna(size_t chan = 0) = 0;
+
+    /*!
+     * Get a list of possible antennas.
+     * \return a vector of antenna strings
+     */
+    virtual std::vector<std::string> get_antennas(size_t chan = 0) = 0;
+
+    /*!
+     * Set the clock configuration.
+     * \param clock_config the new configuration
+     */
+    virtual void set_clock_config(const uhd::clock_config_t &clock_config, size_t mboard) = 0;
+
+    /*!
+     * Get the current time registers.
+     * \return the current usrp time
+     */
+    virtual uhd::time_spec_t get_time_now(void) = 0;
+
+    /*!
+     * Set the time registers at the next pps.
+     * \param time_spec the new time
+     */
+    virtual void set_time_next_pps(const uhd::time_spec_t &time_spec) = 0;
+
+    /*!
+     * Get access to the underlying uhd device object.
+     * \return the multi usrp device object
+     */
+    virtual uhd::usrp::multi_usrp::sptr get_device(void) = 0;
+};
+
+#endif /* INCLUDED_UHD_MULTI_USRP_SINK_H */
diff --git a/gr-uhd/lib/uhd_multi_usrp_source.cc b/gr-uhd/lib/uhd_multi_usrp_source.cc
new file mode 100644
index 0000000000..27caffbfc8
--- /dev/null
+++ b/gr-uhd/lib/uhd_multi_usrp_source.cc
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2010 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <uhd_multi_usrp_source.h>
+#include <gr_io_signature.h>
+#include <stdexcept>
diff --git a/gr-uhd/lib/uhd_multi_usrp_source.h b/gr-uhd/lib/uhd_multi_usrp_source.h
new file mode 100644
index 0000000000..b2c4a3ac17
--- /dev/null
+++ b/gr-uhd/lib/uhd_multi_usrp_source.h
@@ -0,0 +1,138 @@
+/*
+ * Copyright 2010 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_UHD_MULTI_USRP_SOURCE_H
+#define INCLUDED_UHD_MULTI_USRP_SOURCE_H
+
+#include <gr_sync_block.h>
+#include <uhd/usrp/multi_usrp.hpp>
+
+class uhd_multi_usrp_source;
+
+boost::shared_ptr<uhd_multi_usrp_source> uhd_make_multi_usrp_source(
+    const std::string &args,
+    const uhd::io_type_t::tid_t &type,
+    size_t num_channels
+);
+
+class uhd_multi_usrp_source : public gr_sync_block{
+public:
+
+    /*!
+     * Set the IO signature for this block.
+     * \param sig the output signature
+     */
+    uhd_multi_usrp_source(gr_io_signature_sptr sig);
+
+    /*!
+     * Set the subdevice specification.
+     * \param spec the subdev spec markup string
+     */
+    virtual void set_subdev_spec(const std::string &spec, size_t mboard) = 0;
+
+    /*!
+     * Set the sample rate for the usrp device.
+     * \param rate a new rate in Sps
+     */
+    virtual void set_samp_rate(double rate) = 0;
+
+    /*!
+     * Get the sample rate for the usrp device.
+     * This is the actual sample rate and may differ from the rate set.
+     * \return the actual rate in Sps
+     */
+    virtual double get_samp_rate(void) = 0;
+
+    /*!
+     * Tune the usrp device to the desired center frequency.
+     * \param freq the desired frequency in Hz
+     * \return a tune result with the actual frequencies
+     */
+    virtual uhd::tune_result_t set_center_freq(double freq, size_t chan = 0) = 0;
+
+    /*!
+     * Get the tunable frequency range.
+     * \return the frequency range in Hz
+     */
+    virtual uhd::freq_range_t get_freq_range(size_t chan = 0) = 0;
+
+    /*!
+     * Set the gain for the dboard.
+     * \param gain the gain in dB
+     */
+    virtual void set_gain(float gain, size_t chan = 0) = 0;
+
+    /*!
+     * Get the actual dboard gain setting.
+     * \return the actual gain in dB
+     */
+    virtual float get_gain(size_t chan = 0) = 0;
+
+    /*!
+     * Get the settable gain range.
+     * \return the gain range in dB
+     */
+    virtual uhd::gain_range_t get_gain_range(size_t chan = 0) = 0;
+
+    /*!
+     * Set the antenna to use.
+     * \param ant the antenna string
+     */
+    virtual void set_antenna(const std::string &ant, size_t chan = 0) = 0;
+
+    /*!
+     * Get the antenna in use.
+     * \return the antenna string
+     */
+    virtual std::string get_antenna(size_t chan = 0) = 0;
+
+    /*!
+     * Get a list of possible antennas.
+     * \return a vector of antenna strings
+     */
+    virtual std::vector<std::string> get_antennas(size_t chan = 0) = 0;
+
+    /*!
+     * Set the clock configuration.
+     * \param clock_config the new configuration
+     */
+    virtual void set_clock_config(const uhd::clock_config_t &clock_config, size_t mboard) = 0;
+
+    /*!
+     * Get the current time registers.
+     * \return the current usrp time
+     */
+    virtual uhd::time_spec_t get_time_now(void) = 0;
+
+    /*!
+     * Set the time registers at the next pps.
+     * \param time_spec the new time
+     */
+    virtual void set_time_next_pps(const uhd::time_spec_t &time_spec) = 0;
+
+    /*!
+     * Get access to the underlying uhd device object.
+     * \return the multi usrp device object
+     */
+    virtual uhd::usrp::multi_usrp::sptr get_device(void) = 0;
+};
+
+#endif /* INCLUDED_UHD_MULTI_USRP_SOURCE_H */
diff --git a/gr-uhd/lib/uhd_simple_sink.h b/gr-uhd/lib/uhd_simple_sink.h
index 0abf306816..44b868698c 100644
--- a/gr-uhd/lib/uhd_simple_sink.h
+++ b/gr-uhd/lib/uhd_simple_sink.h
@@ -33,6 +33,9 @@ boost::shared_ptr<uhd_simple_sink> uhd_make_simple_sink(
     const uhd::io_type_t::tid_t &type
 );
 
+/***********************************************************************
+ * DEPRECATED
+ **********************************************************************/
 class uhd_simple_sink : public gr_sync_block{
 public:
 
diff --git a/gr-uhd/lib/uhd_simple_source.h b/gr-uhd/lib/uhd_simple_source.h
index b95c0cfd9d..4e79afa21e 100644
--- a/gr-uhd/lib/uhd_simple_source.h
+++ b/gr-uhd/lib/uhd_simple_source.h
@@ -33,6 +33,9 @@ boost::shared_ptr<uhd_simple_source> uhd_make_simple_source(
     const uhd::io_type_t::tid_t &type
 );
 
+/***********************************************************************
+ * DEPRECATED
+ **********************************************************************/
 class uhd_simple_source : public gr_sync_block{
 public:
 
-- 
cgit v1.2.3


From 873228d25b3ea5df8eb10f6652518f144858af61 Mon Sep 17 00:00:00 2001
From: Josh Blum <josh@joshknows.com>
Date: Mon, 18 Oct 2010 13:46:51 -0700
Subject: uhd: filled in multi usrp code and swig file

---
 gr-uhd/lib/uhd_multi_usrp_sink.cc    | 151 ++++++++++++++++++++++++++++++++++
 gr-uhd/lib/uhd_multi_usrp_sink.h     |   6 ++
 gr-uhd/lib/uhd_multi_usrp_source.cc  | 154 +++++++++++++++++++++++++++++++++++
 gr-uhd/lib/uhd_multi_usrp_source.h   |   6 ++
 gr-uhd/lib/uhd_single_usrp_sink.cc   |  10 +--
 gr-uhd/lib/uhd_single_usrp_source.cc |   6 +-
 gr-uhd/swig/uhd_swig.i               |  33 +++++---
 7 files changed, 344 insertions(+), 22 deletions(-)

(limited to 'gr-uhd/lib')

diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.cc b/gr-uhd/lib/uhd_multi_usrp_sink.cc
index 6854649c34..202f128406 100644
--- a/gr-uhd/lib/uhd_multi_usrp_sink.cc
+++ b/gr-uhd/lib/uhd_multi_usrp_sink.cc
@@ -22,3 +22,154 @@
 #include <uhd_multi_usrp_sink.h>
 #include <gr_io_signature.h>
 #include <stdexcept>
+
+/***********************************************************************
+ * UHD Multi USRP Sink
+ **********************************************************************/
+uhd_multi_usrp_sink::uhd_multi_usrp_sink(gr_io_signature_sptr sig)
+:gr_sync_block("uhd multi usrp sink", sig, gr_make_io_signature(0, 0, 0)){
+    /* NOP */
+}
+
+/***********************************************************************
+ * UHD Multi USRP Sink Impl
+ **********************************************************************/
+class uhd_multi_usrp_sink_impl : public uhd_multi_usrp_sink{
+public:
+    uhd_multi_usrp_sink_impl(
+        const std::string &args,
+        const uhd::io_type_t &type,
+        size_t num_channels
+    ) : uhd_multi_usrp_sink(gr_make_io_signature(num_channels, num_channels, type.size)), _type(type), _nchan(num_channels)
+    {
+        _dev = uhd::usrp::multi_usrp::make(args);
+    }
+
+    void set_subdev_spec(const std::string &spec, size_t mboard){
+        return _dev->set_tx_subdev_spec(spec, mboard);
+    }
+
+    void set_samp_rate(double rate){
+        _dev->set_tx_rate(rate);
+    }
+
+    double get_samp_rate(void){
+        return _dev->get_tx_rate();
+    }
+
+    uhd::tune_result_t set_center_freq(double freq, size_t chan){
+        uhd::tune_result_t tr = _dev->set_tx_freq(freq, chan);
+        return tr;
+    }
+
+    uhd::freq_range_t get_freq_range(size_t chan){
+        return _dev->get_tx_freq_range(chan);
+    }
+
+    void set_gain(float gain, size_t chan){
+        return _dev->set_tx_gain(gain, chan);
+    }
+
+    float get_gain(size_t chan){
+        return _dev->get_tx_gain(chan);
+    }
+
+    uhd::gain_range_t get_gain_range(size_t chan){
+        return _dev->get_tx_gain_range(chan);
+    }
+
+    void set_antenna(const std::string &ant, size_t chan){
+        return _dev->set_tx_antenna(ant, chan);
+    }
+
+    std::string get_antenna(size_t chan){
+        return _dev->get_tx_antenna(chan);
+    }
+
+    std::vector<std::string> get_antennas(size_t chan){
+        return _dev->get_tx_antennas(chan);
+    }
+
+    void set_clock_config(const uhd::clock_config_t &clock_config, size_t mboard){
+        return _dev->set_clock_config(clock_config, mboard);
+    }
+
+    uhd::time_spec_t get_time_now(void){
+        return _dev->get_time_now();
+    }
+
+    void set_time_next_pps(const uhd::time_spec_t &time_spec){
+        return _dev->set_time_next_pps(time_spec);
+    }
+
+    void set_time_unknown_pps(const uhd::time_spec_t &time_spec){
+        return _dev->set_time_unknown_pps(time_spec);
+    }
+
+    uhd::usrp::multi_usrp::sptr get_device(void){
+        return _dev;
+    }
+
+/***********************************************************************
+ * Work
+ **********************************************************************/
+    int work(
+        int noutput_items,
+        gr_vector_const_void_star &input_items,
+        gr_vector_void_star &output_items
+    ){
+        uhd::tx_metadata_t metadata;
+        metadata.start_of_burst = true;
+
+        return _dev->get_device()->send(
+            input_items, noutput_items, metadata,
+            _type, uhd::device::SEND_MODE_FULL_BUFF
+        );
+    }
+
+    //Send an empty start-of-burst packet to begin streaming.
+    //Set at a time in the near future so data will be sync'd.
+    bool start(void){
+        uhd::tx_metadata_t metadata;
+        metadata.start_of_burst = true;
+        metadata.has_time_spec = true;
+        metadata.time_spec = get_time_now() + uhd::time_spec_t(0.01); //10ms offset in future
+
+        _dev->get_device()->send(
+            gr_vector_const_void_star(_nchan), 0, metadata,
+            _type, uhd::device::SEND_MODE_ONE_PACKET
+        );
+        return true;
+    }
+
+    //Send an empty end-of-burst packet to end streaming.
+    //Ending the burst avoids an underflow error on stop.
+    bool stop(void){
+        uhd::tx_metadata_t metadata;
+        metadata.end_of_burst = true;
+
+        _dev->get_device()->send(
+            gr_vector_const_void_star(_nchan), 0, metadata,
+            _type, uhd::device::SEND_MODE_ONE_PACKET
+        );
+        return true;
+    }
+
+protected:
+    uhd::usrp::multi_usrp::sptr _dev;
+    const uhd::io_type_t _type;
+    size_t _nchan;
+};
+
+/***********************************************************************
+ * Make UHD Multi USRP Sink
+ **********************************************************************/
+boost::shared_ptr<uhd_multi_usrp_sink> uhd_make_multi_usrp_sink(
+    const std::string &args,
+    const uhd::io_type_t::tid_t &type,
+    size_t num_channels
+){
+    return boost::shared_ptr<uhd_multi_usrp_sink>(
+        new uhd_multi_usrp_sink_impl(args, type, num_channels)
+    );
+}
diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.h b/gr-uhd/lib/uhd_multi_usrp_sink.h
index b29657e941..13bba20fb6 100644
--- a/gr-uhd/lib/uhd_multi_usrp_sink.h
+++ b/gr-uhd/lib/uhd_multi_usrp_sink.h
@@ -128,6 +128,12 @@ public:
      */
     virtual void set_time_next_pps(const uhd::time_spec_t &time_spec) = 0;
 
+    /*!
+     * Sync the time registers with an unknown pps edge.
+     * \param time_spec the new time
+     */
+    virtual void set_time_unknown_pps(const uhd::time_spec_t &time_spec) = 0;
+
     /*!
      * Get access to the underlying uhd device object.
      * \return the multi usrp device object
diff --git a/gr-uhd/lib/uhd_multi_usrp_source.cc b/gr-uhd/lib/uhd_multi_usrp_source.cc
index 27caffbfc8..c10c08c500 100644
--- a/gr-uhd/lib/uhd_multi_usrp_source.cc
+++ b/gr-uhd/lib/uhd_multi_usrp_source.cc
@@ -22,3 +22,157 @@
 #include <uhd_multi_usrp_source.h>
 #include <gr_io_signature.h>
 #include <stdexcept>
+#include <iostream>
+#include <boost/format.hpp>
+
+/***********************************************************************
+ * UHD Multi USRP Source
+ **********************************************************************/
+uhd_multi_usrp_source::uhd_multi_usrp_source(gr_io_signature_sptr sig)
+:gr_sync_block("uhd multi_usrp source", gr_make_io_signature(0, 0, 0), sig){
+    /* NOP */
+}
+
+/***********************************************************************
+ * UHD Multi USRP Source Impl
+ **********************************************************************/
+class uhd_multi_usrp_source_impl : public uhd_multi_usrp_source{
+public:
+    uhd_multi_usrp_source_impl(
+        const std::string &args,
+        const uhd::io_type_t &type,
+        size_t num_channels
+    ) : uhd_multi_usrp_source(gr_make_io_signature(num_channels, num_channels, type.size)), _type(type)
+    {
+        _dev = uhd::usrp::multi_usrp::make(args);
+    }
+
+    void set_subdev_spec(const std::string &spec, size_t mboard){
+        return _dev->set_rx_subdev_spec(spec, mboard);
+    }
+
+    void set_samp_rate(double rate){
+        _dev->set_rx_rate(rate);
+    }
+
+    double get_samp_rate(void){
+        return _dev->get_rx_rate();
+    }
+
+    uhd::tune_result_t set_center_freq(double freq, size_t chan){
+        uhd::tune_result_t tr = _dev->set_rx_freq(freq, chan);
+        return tr;
+    }
+
+    uhd::freq_range_t get_freq_range(size_t chan){
+        return _dev->get_rx_freq_range(chan);
+    }
+
+    void set_gain(float gain, size_t chan){
+        return _dev->set_rx_gain(gain, chan);
+    }
+
+    float get_gain(size_t chan){
+        return _dev->get_rx_gain(chan);
+    }
+
+    uhd::gain_range_t get_gain_range(size_t chan){
+        return _dev->get_rx_gain_range(chan);
+    }
+
+    void set_antenna(const std::string &ant, size_t chan){
+        return _dev->set_rx_antenna(ant, chan);
+    }
+
+    std::string get_antenna(size_t chan){
+        return _dev->get_rx_antenna(chan);
+    }
+
+    std::vector<std::string> get_antennas(size_t chan){
+        return _dev->get_rx_antennas(chan);
+    }
+
+    void set_clock_config(const uhd::clock_config_t &clock_config, size_t mboard){
+        return _dev->set_clock_config(clock_config, mboard);
+    }
+
+    uhd::time_spec_t get_time_now(void){
+        return _dev->get_time_now();
+    }
+
+    void set_time_next_pps(const uhd::time_spec_t &time_spec){
+        return _dev->set_time_next_pps(time_spec);
+    }
+
+    void set_time_unknown_pps(const uhd::time_spec_t &time_spec){
+        return _dev->set_time_unknown_pps(time_spec);
+    }
+
+    uhd::usrp::multi_usrp::sptr get_device(void){
+        return _dev;
+    }
+
+/***********************************************************************
+ * Work
+ **********************************************************************/
+    int work(
+        int noutput_items,
+        gr_vector_const_void_star &input_items,
+        gr_vector_void_star &output_items
+    ){
+        uhd::rx_metadata_t metadata; //not passed out of this block
+
+        size_t num_samps = _dev->get_device()->recv(
+            output_items, noutput_items, metadata,
+            _type, uhd::device::RECV_MODE_FULL_BUFF
+        );
+
+        switch(metadata.error_code){
+        case uhd::rx_metadata_t::ERROR_CODE_NONE:
+            return num_samps;
+
+        case uhd::rx_metadata_t::ERROR_CODE_OVERFLOW:
+            //ignore overflows and try work again
+            return work(noutput_items, input_items, output_items);
+
+        default:
+            std::cout << boost::format(
+                "UHD source block got error code 0x%x"
+            ) % metadata.error_code << std::endl;
+            return num_samps;
+        }
+    }
+
+    bool start(void){
+        //setup a stream command that starts streaming slightly in the future
+        static const double reasonable_delay = 0.01; //10 ms (order of magnitude >> RTT)
+        uhd::stream_cmd_t stream_cmd(uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS);
+        stream_cmd.stream_now = false;
+        stream_cmd.time_spec = get_time_now() + uhd::time_spec_t(_dev->get_num_mboards() * reasonable_delay);
+        _dev->issue_stream_cmd(stream_cmd);
+        return true;
+    }
+
+    bool stop(void){
+        _dev->issue_stream_cmd(uhd::stream_cmd_t::STREAM_MODE_STOP_CONTINUOUS);
+        return true;
+    }
+
+private:
+    uhd::usrp::multi_usrp::sptr _dev;
+    const uhd::io_type_t _type;
+};
+
+
+/***********************************************************************
+ * Make UHD Multi USRP Source
+ **********************************************************************/
+boost::shared_ptr<uhd_multi_usrp_source> uhd_make_multi_usrp_source(
+    const std::string &args,
+    const uhd::io_type_t::tid_t &type,
+    size_t num_channels
+){
+    return boost::shared_ptr<uhd_multi_usrp_source>(
+        new uhd_multi_usrp_source_impl(args, type, num_channels)
+    );
+}
diff --git a/gr-uhd/lib/uhd_multi_usrp_source.h b/gr-uhd/lib/uhd_multi_usrp_source.h
index b2c4a3ac17..b94e53f01b 100644
--- a/gr-uhd/lib/uhd_multi_usrp_source.h
+++ b/gr-uhd/lib/uhd_multi_usrp_source.h
@@ -128,6 +128,12 @@ public:
      */
     virtual void set_time_next_pps(const uhd::time_spec_t &time_spec) = 0;
 
+    /*!
+     * Sync the time registers with an unknown pps edge.
+     * \param time_spec the new time
+     */
+    virtual void set_time_unknown_pps(const uhd::time_spec_t &time_spec) = 0;
+
     /*!
      * Get access to the underlying uhd device object.
      * \return the multi usrp device object
diff --git a/gr-uhd/lib/uhd_single_usrp_sink.cc b/gr-uhd/lib/uhd_single_usrp_sink.cc
index cd7d7a6188..96c1dbdf49 100644
--- a/gr-uhd/lib/uhd_single_usrp_sink.cc
+++ b/gr-uhd/lib/uhd_single_usrp_sink.cc
@@ -24,7 +24,7 @@
 #include <stdexcept>
 
 /***********************************************************************
- * UHD Single USPR Sink
+ * UHD Single USRP Sink
  **********************************************************************/
 uhd_single_usrp_sink::uhd_single_usrp_sink(gr_io_signature_sptr sig)
 :gr_sync_block("uhd single usrp sink", sig, gr_make_io_signature(0, 0, 0)){
@@ -32,7 +32,7 @@ uhd_single_usrp_sink::uhd_single_usrp_sink(gr_io_signature_sptr sig)
 }
 
 /***********************************************************************
- * UHD Single USPR Sink Impl
+ * UHD Single USRP Sink Impl
  **********************************************************************/
 class uhd_single_usrp_sink_impl : public uhd_single_usrp_sink{
 public:
@@ -45,10 +45,6 @@ public:
         _dev = uhd::usrp::single_usrp::make(args);
     }
 
-    ~uhd_single_usrp_sink_impl(void){
-        //NOP
-    }
-
     void set_subdev_spec(const std::string &spec){
         return _dev->set_tx_subdev_spec(spec);
     }
@@ -164,7 +160,7 @@ protected:
 };
 
 /***********************************************************************
- * Make UHD Single USPR Sink
+ * Make UHD Single USRP Sink
  **********************************************************************/
 boost::shared_ptr<uhd_single_usrp_sink> uhd_make_single_usrp_sink(
     const std::string &args,
diff --git a/gr-uhd/lib/uhd_single_usrp_source.cc b/gr-uhd/lib/uhd_single_usrp_source.cc
index fc2c453eb3..7c3694a99d 100644
--- a/gr-uhd/lib/uhd_single_usrp_source.cc
+++ b/gr-uhd/lib/uhd_single_usrp_source.cc
@@ -26,7 +26,7 @@
 #include <boost/format.hpp>
 
 /***********************************************************************
- * UHD Single USPR Source
+ * UHD Single USRP Source
  **********************************************************************/
 uhd_single_usrp_source::uhd_single_usrp_source(gr_io_signature_sptr sig)
 :gr_sync_block("uhd single_usrp source", gr_make_io_signature(0, 0, 0), sig){
@@ -34,7 +34,7 @@ uhd_single_usrp_source::uhd_single_usrp_source(gr_io_signature_sptr sig)
 }
 
 /***********************************************************************
- * UHD Single USPR Source Impl
+ * UHD Single USRP Source Impl
  **********************************************************************/
 class uhd_single_usrp_source_impl : public uhd_single_usrp_source{
 public:
@@ -160,7 +160,7 @@ private:
 
 
 /***********************************************************************
- * Make UHD Single USPR Source
+ * Make UHD Single USRP Source
  **********************************************************************/
 boost::shared_ptr<uhd_single_usrp_source> uhd_make_single_usrp_source(
     const std::string &args,
diff --git a/gr-uhd/swig/uhd_swig.i b/gr-uhd/swig/uhd_swig.i
index d755dfeee6..1631a768a7 100644
--- a/gr-uhd/swig/uhd_swig.i
+++ b/gr-uhd/swig/uhd_swig.i
@@ -29,10 +29,13 @@ namespace std {
 }
 
 %{
-#include <uhd_mimo_source.h>
-#include <uhd_mimo_sink.h>
-#include <uhd_simple_source.h>
-#include <uhd_simple_sink.h>
+#include <uhd_mimo_source.h> //deprecated
+#include <uhd_mimo_sink.h> //deprecated
+#include <uhd_simple_source.h> //deprecated
+#include <uhd_simple_sink.h> //deprecated
+
+#include <uhd_multi_usrp_source.h>
+#include <uhd_multi_usrp_sink.h>
 #include <uhd_single_usrp_source.h>
 #include <uhd_single_usrp_sink.h>
 %}
@@ -44,17 +47,23 @@ namespace std {
 %include <uhd/types/time_spec.hpp>
 %include <uhd/types/clock_config.hpp>
 
-GR_SWIG_BLOCK_MAGIC(uhd,mimo_source)
-%include <uhd_mimo_source.h>
+GR_SWIG_BLOCK_MAGIC(uhd,mimo_source) //deprecated
+%include <uhd_mimo_source.h> //deprecated
+
+GR_SWIG_BLOCK_MAGIC(uhd,mimo_sink) //deprecated
+%include <uhd_mimo_sink.h> //deprecated
+
+GR_SWIG_BLOCK_MAGIC(uhd,simple_source) //deprecated
+%include <uhd_simple_source.h> //deprecated
 
-GR_SWIG_BLOCK_MAGIC(uhd,mimo_sink)
-%include <uhd_mimo_sink.h>
+GR_SWIG_BLOCK_MAGIC(uhd,simple_sink) //deprecated
+%include <uhd_simple_sink.h> //deprecated
 
-GR_SWIG_BLOCK_MAGIC(uhd,simple_source)
-%include <uhd_simple_source.h>
+GR_SWIG_BLOCK_MAGIC(uhd,multi_usrp_source)
+%include <uhd_multi_usrp_source.h>
 
-GR_SWIG_BLOCK_MAGIC(uhd,simple_sink)
-%include <uhd_simple_sink.h>
+GR_SWIG_BLOCK_MAGIC(uhd,multi_usrp_sink)
+%include <uhd_multi_usrp_sink.h>
 
 GR_SWIG_BLOCK_MAGIC(uhd,single_usrp_source)
 %include <uhd_single_usrp_source.h>
-- 
cgit v1.2.3


From d029af43c3367a4611185ade70639cc6b7cc5e3d Mon Sep 17 00:00:00 2001
From: Josh Blum <josh@joshknows.com>
Date: Mon, 18 Oct 2010 14:09:23 -0700
Subject: uhd: created multi usrp grc wrapper generator, removed mimo gen and
 checked in its generated files

---
 gr-uhd/grc/.gitignore                       |   2 +-
 gr-uhd/grc/Makefile.am                      |  21 +-
 gr-uhd/grc/gen_uhd_mimo_blocks_xml.py       | 190 ----------
 gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py | 211 +++++++++++
 gr-uhd/grc/uhd_mimo_sink.xml                | 550 ++++++++++++++++++++++++++++
 gr-uhd/grc/uhd_mimo_source.xml              | 550 ++++++++++++++++++++++++++++
 gr-uhd/lib/Makefile.am                      |  11 +-
 7 files changed, 1332 insertions(+), 203 deletions(-)
 delete mode 100755 gr-uhd/grc/gen_uhd_mimo_blocks_xml.py
 create mode 100755 gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py
 create mode 100644 gr-uhd/grc/uhd_mimo_sink.xml
 create mode 100644 gr-uhd/grc/uhd_mimo_source.xml

(limited to 'gr-uhd/lib')

diff --git a/gr-uhd/grc/.gitignore b/gr-uhd/grc/.gitignore
index c95275d8d4..d8ab9bd0c3 100644
--- a/gr-uhd/grc/.gitignore
+++ b/gr-uhd/grc/.gitignore
@@ -1,4 +1,4 @@
-/uhd_mimo*.xml
+/uhd_multi*.xml
 /uhd_single*.xml
 /Makefile
 /Makefile.in
diff --git a/gr-uhd/grc/Makefile.am b/gr-uhd/grc/Makefile.am
index a19a28f033..04b7dca365 100644
--- a/gr-uhd/grc/Makefile.am
+++ b/gr-uhd/grc/Makefile.am
@@ -23,31 +23,36 @@ include $(top_srcdir)/Makefile.common
 
 grcblocksdir = $(grc_blocksdir)
 
-generated_uhd_mimo_blocks = \
-	uhd_mimo_source.xml \
-	uhd_mimo_sink.xml
+generated_uhd_multi_usrp_blocks = \
+	uhd_multi_usrp_source.xml \
+	uhd_multi_usrp_sink.xml
 
 generated_uhd_single_usrp_blocks = \
 	uhd_single_usrp_source.xml \
 	uhd_single_usrp_sink.xml
 
 BUILT_SOURCES = \
-	$(generated_uhd_mimo_blocks) \
+	$(generated_uhd_multi_usrp_blocks) \
 	$(generated_uhd_single_usrp_blocks)
 
 dist_grcblocks_DATA = \
-	$(BUILT_SOURCES) \
+	$(BUILT_SOURCES)
+
+# add the deprecated files
+dist_grcblocks_DATA += \
+	uhd_mimo_source.xml \
+	uhd_mimo_sink.xml \
 	uhd_simple_source.xml \
 	uhd_simple_sink.xml
 
 ########################################################################
-# Rules for generating the mimo source and sink blocks
+# Rules for generating the source and sink xml wrappers
 ########################################################################
 EXTRA_DIST = \
-	$(srcdir)/gen_uhd_mimo_blocks_xml.py \
+	$(srcdir)/gen_uhd_multi_usrp_blocks_xml.py \
 	$(srcdir)/gen_uhd_single_usrp_blocks_xml.py
 
-$(generated_uhd_mimo_blocks): $(srcdir)/gen_uhd_mimo_blocks_xml.py
+$(generated_uhd_multi_usrp_blocks): $(srcdir)/gen_uhd_multi_usrp_blocks_xml.py
 	@echo "generating $@..."
 	$(PYTHON) $< $@
 
diff --git a/gr-uhd/grc/gen_uhd_mimo_blocks_xml.py b/gr-uhd/grc/gen_uhd_mimo_blocks_xml.py
deleted file mode 100755
index 7e61563cc8..0000000000
--- a/gr-uhd/grc/gen_uhd_mimo_blocks_xml.py
+++ /dev/null
@@ -1,190 +0,0 @@
-#!/usr/bin/env python
-"""
-Copyright 2010 Free Software Foundation, Inc.
-
-This file is part of GNU Radio
-
-GNU Radio Companion is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-GNU Radio Companion is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
-"""
-
-MAIN_TMPL = """\
-<?xml version="1.0"?>
-<block>
-	<name>UHD MIMO $sourk.title()</name>
-	<key>uhd_mimo_$(sourk)</key>
-	<category>UHD</category>
-	<import>from gnuradio import uhd</import>
-	<make>uhd.mimo_$(sourk)(\$nchan, \$args, uhd.io_type_t.\$type.type)
-self.\$(id).set_samp_rate_all(\$samp_rate)
-#for $n in range($max_nchan)
-\#if \$nchan() > $n
-self.\$(id).set_subdev_spec($n, \$sd_spec$(n))
-self.\$(id).set_center_freq($n, \$center_freq$(n))
-self.\$(id).set_gain($n, \$gain$(n))
-	\#if \$ant$(n)()
-self.\$(id).set_antenna($n, \$ant$(n))
-	\#end if
-\#end if
-#end for
-</make>
-	<callback>set_samp_rate(\$samp_rate)</callback>
-	#for $n in range($max_nchan)
-	<callback>set_center_freq($n, \$center_freq$(n))</callback>
-	<callback>set_gain($n, \$gain$(n))</callback>
-	<callback>set_antenna($n, \$ant$(n))</callback>
-	#end for
-	<param>
-		<name>Input Type</name>
-		<key>type</key>
-		<type>enum</type>
-		<option>
-			<name>Complex</name>
-			<key>complex</key>
-			<opt>type:COMPLEX_FLOAT32</opt>
-			<opt>vlen:1</opt>
-		</option>
-		<option>
-			<name>Short</name>
-			<key>short</key>
-			<opt>type:COMPLEX_INT16</opt>
-			<opt>vlen:2</opt>
-		</option>
-	</param>
-	<param>
-		<name>Num Channels</name>
-		<key>nchan</key>
-		<value>2</value>
-		<type>int</type>
-		#for $n in range(2, $max_nchan+1)
-		<option>
-			<name>$n Channels</name>
-			<key>$n</key>
-		</option>
-		#end for
-	</param>
-	<param>
-		<name>Args</name>
-		<key>args</key>
-		<value>addr=192.168.10.2 192.168.20.2</value>
-		<type>string</type>
-	</param>
-	<param>
-		<name>Samp Rate (Sps)</name>
-		<key>samp_rate</key>
-		<value>samp_rate</value>
-		<type>real</type>
-	</param>
-	$params
-	<check>$max_nchan >= \$nchan</check>
-	<check>\$nchan >= 0</check>
-	<$sourk>
-		<name>$direction</name>
-		<type>\$type</type>
-		<vlen>\$type.vlen</vlen>
-		<nports>\$nchan</nports>
-	</$sourk>
-	<doc>
-The UHD $sourk.title() Block:
-
-Args:
-Args is a delimited string used to locate UHD devices on your system. \\
-If left blank, the first UHD device found will be used. \\
-Used args to specify a specfic device. \\
-USRP2 Example: addr=192.168.10.2
-
-Sample rate:
-The sample rate is the number of samples per second input by this block. \\
-The UHD device driver will try its best to match the requested sample rate. \\
-If the requested rate is not possible, the UHD block will print an error at runtime.
-
-Antenna:
-For subdevices/daughterboards with only one antenna, this may be left blank. \\
-Otherwise, the user should specify one of the possible antenna choices. \\
-See the daughterboard application notes for the possible antenna choices.
-	</doc>
-</block>
-"""
-
-PARAMS_TMPL = """
-	<param>
-		<name>Ch$(n): Subdev Spec</name>
-		<key>sd_spec$(n)</key>
-		<value></value>
-		<type>string</type>
-		<hide>
-			\#if not \$nchan() > $n
-				all
-			\#elif \$sd_spec$(n)()
-				none
-			\#else
-				part
-			\#end if
-		</hide>
-	</param>
-	<param>
-		<name>Ch$(n): Center Freq (Hz)</name>
-		<key>center_freq$(n)</key>
-		<value>0</value>
-		<type>real</type>
-		<hide>\#if \$nchan() > $n then 'none' else 'all'#</hide>
-	</param>
-	<param>
-		<name>Ch$(n): Gain (dB)</name>
-		<key>gain$(n)</key>
-		<value>0</value>
-		<type>real</type>
-		<hide>\#if \$nchan() > $n then 'none' else 'all'#</hide>
-	</param>
-	<param>
-		<name>Ch$(n): Antenna</name>
-		<key>ant$(n)</key>
-		<value></value>
-		<type>string</type>
-		<hide>
-			\#if not \$nchan() > $n
-				all
-			\#elif \$ant$(n)()
-				none
-			\#else
-				part
-			\#end if
-		</hide>
-	</param>
-"""
-
-def parse_tmpl(_tmpl, **kwargs):
-	from Cheetah import Template
-	return str(Template.Template(_tmpl, kwargs))
-
-max_num_channels = 8
-
-if __name__ == '__main__':
-	import sys
-	for file in sys.argv[1:]:
-		if 'source' in file:
-			sourk = 'source'
-			direction = 'out'
-		elif 'sink' in file:
-			sourk = 'sink'
-			direction = 'in'
-		else: raise Exception, 'is %s a source or sink?'%file
-
-		params = ''.join([parse_tmpl(PARAMS_TMPL, n=n) for n in range(max_num_channels)])
-		open(file, 'w').write(parse_tmpl(MAIN_TMPL,
-			max_nchan=max_num_channels,
-			params=params,
-			sourk=sourk,
-			direction=direction,
-		))
diff --git a/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py b/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py
new file mode 100755
index 0000000000..a4da53a188
--- /dev/null
+++ b/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py
@@ -0,0 +1,211 @@
+#!/usr/bin/env python
+"""
+Copyright 2010 Free Software Foundation, Inc.
+
+This file is part of GNU Radio
+
+GNU Radio Companion is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+GNU Radio Companion is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+"""
+
+MAIN_TMPL = """\
+<?xml version="1.0"?>
+<block>
+	<name>UHD: Multi USRP $sourk.title()</name>
+	<key>uhd_multi_usrp_$(sourk)</key>
+	<category>UHD</category>
+	<import>from gnuradio import uhd</import>
+	<make>uhd.multi_usrp_$(sourk)(\$dev_addr, uhd.io_type_t.\$type.type, \$nchan)
+self.\$(id).set_subdev_spec(\$sd_spec)
+self.\$(id).set_samp_rate(\$samp_rate)
+#for $n in range($max_nchan)
+\#if \$nchan() > $n
+self.\$(id).set_center_freq(\$center_freq$(n), $n)
+self.\$(id).set_gain(\$gain$(n), $n)
+	\#if \$ant$(n)()
+self.\$(id).set_antenna(\$ant$(n), $n)
+	\#end if
+\#end if
+#end for
+</make>
+	<callback>set_samp_rate(\$samp_rate)</callback>
+	#for $n in range($max_nchan)
+	<callback>set_center_freq(\$center_freq$(n), $n)</callback>
+	<callback>set_gain(\$gain$(n), $n)</callback>
+	<callback>set_antenna(\$ant$(n), $n)</callback>
+	#end for
+	<param>
+		<name>Input Type</name>
+		<key>type</key>
+		<type>enum</type>
+		<option>
+			<name>Complex</name>
+			<key>complex</key>
+			<opt>type:COMPLEX_FLOAT32</opt>
+			<opt>vlen:1</opt>
+		</option>
+		<option>
+			<name>Short</name>
+			<key>short</key>
+			<opt>type:COMPLEX_INT16</opt>
+			<opt>vlen:2</opt>
+		</option>
+	</param>
+	<param>
+		<name>Num Channels</name>
+		<key>nchan</key>
+		<value>1</value>
+		<type>int</type>
+		<hide>part</hide>
+		<option>
+			<name>Multi Channel</name>
+			<key>1</key>
+		</option>
+		<option>
+			<name>Dual Channel</name>
+			<key>2</key>
+		</option>
+		<option>
+			<name>Quad Channel</name>
+			<key>4</key>
+		</option>
+	</param>
+	<param>
+		<name>Device Addr</name>
+		<key>dev_addr</key>
+		<value>addr=192.168.10.2</value>
+		<type>string</type>
+		<hide>
+			\#if \$dev_addr()
+				none
+			\#else
+				part
+			\#end if
+		</hide>
+	</param>
+	<param>
+		<name>Subdev Spec</name>
+		<key>sd_spec</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			\#if \$sd_spec()
+				none
+			\#else
+				part
+			\#end if
+		</hide>
+	</param>
+	<param>
+		<name>Samp Rate (Sps)</name>
+		<key>samp_rate</key>
+		<value>samp_rate</value>
+		<type>real</type>
+	</param>
+	$params
+	<check>$max_nchan >= \$nchan</check>
+	<check>\$nchan >= 0</check>
+	<check>(len((\$sd_spec).split()) or 1) == \$nchan</check>
+	<$sourk>
+		<name>$direction</name>
+		<type>\$type</type>
+		<vlen>\$type.vlen</vlen>
+		<nports>\$nchan</nports>
+	</$sourk>
+	<doc>
+The UHD Multi USRP $sourk.title() Block:
+
+Device Address:
+The device address is a delimited string used to locate UHD devices on your system. \\
+If left blank, the first UHD device found will be used. \\
+Used args to specify a specfic device.
+USRP2 Example: addr=192.168.10.2 192.168.10.3
+
+Sample rate:
+The sample rate is the number of samples per second input by this block. \\
+The UHD device driver will try its best to match the requested sample rate. \\
+If the requested rate is not possible, the UHD block will print an error at runtime.
+
+Subdevice specification:
+Select the subdevice or subdevices for each channel using a markup string. \\
+The markup string consists of a list of dboard_slot:subdev_name pairs (one pair per channel). \\
+If left blank, the UHD will try to select the first subdevice on your system. \\
+See the application notes for further details.
+Single channel example: A:AB
+Dual channel example: A:AB B:0
+
+Antenna:
+For subdevices/daughterboards with only one antenna, this may be left blank. \\
+Otherwise, the user should specify one of the possible antenna choices. \\
+See the daughterboard application notes for the possible antenna choices.
+	</doc>
+</block>
+"""
+
+PARAMS_TMPL = """
+	<param>
+		<name>Ch$(n): Center Freq (Hz)</name>
+		<key>center_freq$(n)</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>\#if \$nchan() > $n then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch$(n): Gain (dB)</name>
+		<key>gain$(n)</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>\#if \$nchan() > $n then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch$(n): Antenna</name>
+		<key>ant$(n)</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			\#if not \$nchan() > $n
+				all
+			\#elif \$ant$(n)()
+				none
+			\#else
+				part
+			\#end if
+		</hide>
+	</param>
+"""
+
+def parse_tmpl(_tmpl, **kwargs):
+	from Cheetah import Template
+	return str(Template.Template(_tmpl, kwargs))
+
+max_num_channels = 4
+
+if __name__ == '__main__':
+	import sys
+	for file in sys.argv[1:]:
+		if 'source' in file:
+			sourk = 'source'
+			direction = 'out'
+		elif 'sink' in file:
+			sourk = 'sink'
+			direction = 'in'
+		else: raise Exception, 'is %s a source or sink?'%file
+
+		params = ''.join([parse_tmpl(PARAMS_TMPL, n=n) for n in range(max_num_channels)])
+		open(file, 'w').write(parse_tmpl(MAIN_TMPL,
+			max_nchan=max_num_channels,
+			params=params,
+			sourk=sourk,
+			direction=direction,
+		))
diff --git a/gr-uhd/grc/uhd_mimo_sink.xml b/gr-uhd/grc/uhd_mimo_sink.xml
new file mode 100644
index 0000000000..2f5f2011f1
--- /dev/null
+++ b/gr-uhd/grc/uhd_mimo_sink.xml
@@ -0,0 +1,550 @@
+<?xml version="1.0"?>
+<block>
+	<name>UHD MIMO Sink</name>
+	<key>uhd_mimo_sink</key>
+	<category>UHD</category>
+	<import>from gnuradio import uhd</import>
+	<make>uhd.mimo_sink($nchan, $args, uhd.io_type_t.$type.type)
+self.$(id).set_samp_rate_all($samp_rate)
+#if $nchan() > 0
+self.$(id).set_subdev_spec(0, $sd_spec0)
+self.$(id).set_center_freq(0, $center_freq0)
+self.$(id).set_gain(0, $gain0)
+	#if $ant0()
+self.$(id).set_antenna(0, $ant0)
+	#end if
+#end if
+#if $nchan() > 1
+self.$(id).set_subdev_spec(1, $sd_spec1)
+self.$(id).set_center_freq(1, $center_freq1)
+self.$(id).set_gain(1, $gain1)
+	#if $ant1()
+self.$(id).set_antenna(1, $ant1)
+	#end if
+#end if
+#if $nchan() > 2
+self.$(id).set_subdev_spec(2, $sd_spec2)
+self.$(id).set_center_freq(2, $center_freq2)
+self.$(id).set_gain(2, $gain2)
+	#if $ant2()
+self.$(id).set_antenna(2, $ant2)
+	#end if
+#end if
+#if $nchan() > 3
+self.$(id).set_subdev_spec(3, $sd_spec3)
+self.$(id).set_center_freq(3, $center_freq3)
+self.$(id).set_gain(3, $gain3)
+	#if $ant3()
+self.$(id).set_antenna(3, $ant3)
+	#end if
+#end if
+#if $nchan() > 4
+self.$(id).set_subdev_spec(4, $sd_spec4)
+self.$(id).set_center_freq(4, $center_freq4)
+self.$(id).set_gain(4, $gain4)
+	#if $ant4()
+self.$(id).set_antenna(4, $ant4)
+	#end if
+#end if
+#if $nchan() > 5
+self.$(id).set_subdev_spec(5, $sd_spec5)
+self.$(id).set_center_freq(5, $center_freq5)
+self.$(id).set_gain(5, $gain5)
+	#if $ant5()
+self.$(id).set_antenna(5, $ant5)
+	#end if
+#end if
+#if $nchan() > 6
+self.$(id).set_subdev_spec(6, $sd_spec6)
+self.$(id).set_center_freq(6, $center_freq6)
+self.$(id).set_gain(6, $gain6)
+	#if $ant6()
+self.$(id).set_antenna(6, $ant6)
+	#end if
+#end if
+#if $nchan() > 7
+self.$(id).set_subdev_spec(7, $sd_spec7)
+self.$(id).set_center_freq(7, $center_freq7)
+self.$(id).set_gain(7, $gain7)
+	#if $ant7()
+self.$(id).set_antenna(7, $ant7)
+	#end if
+#end if
+</make>
+	<callback>set_samp_rate($samp_rate)</callback>
+	<callback>set_center_freq(0, $center_freq0)</callback>
+	<callback>set_gain(0, $gain0)</callback>
+	<callback>set_antenna(0, $ant0)</callback>
+	<callback>set_center_freq(1, $center_freq1)</callback>
+	<callback>set_gain(1, $gain1)</callback>
+	<callback>set_antenna(1, $ant1)</callback>
+	<callback>set_center_freq(2, $center_freq2)</callback>
+	<callback>set_gain(2, $gain2)</callback>
+	<callback>set_antenna(2, $ant2)</callback>
+	<callback>set_center_freq(3, $center_freq3)</callback>
+	<callback>set_gain(3, $gain3)</callback>
+	<callback>set_antenna(3, $ant3)</callback>
+	<callback>set_center_freq(4, $center_freq4)</callback>
+	<callback>set_gain(4, $gain4)</callback>
+	<callback>set_antenna(4, $ant4)</callback>
+	<callback>set_center_freq(5, $center_freq5)</callback>
+	<callback>set_gain(5, $gain5)</callback>
+	<callback>set_antenna(5, $ant5)</callback>
+	<callback>set_center_freq(6, $center_freq6)</callback>
+	<callback>set_gain(6, $gain6)</callback>
+	<callback>set_antenna(6, $ant6)</callback>
+	<callback>set_center_freq(7, $center_freq7)</callback>
+	<callback>set_gain(7, $gain7)</callback>
+	<callback>set_antenna(7, $ant7)</callback>
+	<param>
+		<name>Input Type</name>
+		<key>type</key>
+		<type>enum</type>
+		<option>
+			<name>Complex</name>
+			<key>complex</key>
+			<opt>type:COMPLEX_FLOAT32</opt>
+			<opt>vlen:1</opt>
+		</option>
+		<option>
+			<name>Short</name>
+			<key>short</key>
+			<opt>type:COMPLEX_INT16</opt>
+			<opt>vlen:2</opt>
+		</option>
+	</param>
+	<param>
+		<name>Num Channels</name>
+		<key>nchan</key>
+		<value>2</value>
+		<type>int</type>
+		<option>
+			<name>2 Channels</name>
+			<key>2</key>
+		</option>
+		<option>
+			<name>3 Channels</name>
+			<key>3</key>
+		</option>
+		<option>
+			<name>4 Channels</name>
+			<key>4</key>
+		</option>
+		<option>
+			<name>5 Channels</name>
+			<key>5</key>
+		</option>
+		<option>
+			<name>6 Channels</name>
+			<key>6</key>
+		</option>
+		<option>
+			<name>7 Channels</name>
+			<key>7</key>
+		</option>
+		<option>
+			<name>8 Channels</name>
+			<key>8</key>
+		</option>
+	</param>
+	<param>
+		<name>Args</name>
+		<key>args</key>
+		<value>addr=192.168.10.2 192.168.20.2</value>
+		<type>string</type>
+	</param>
+	<param>
+		<name>Samp Rate (Sps)</name>
+		<key>samp_rate</key>
+		<value>samp_rate</value>
+		<type>real</type>
+	</param>
+	
+	<param>
+		<name>Ch0: Subdev Spec</name>
+		<key>sd_spec0</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 0
+				all
+			#elif $sd_spec0()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+	<param>
+		<name>Ch0: Center Freq (Hz)</name>
+		<key>center_freq0</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 0 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch0: Gain (dB)</name>
+		<key>gain0</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 0 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch0: Antenna</name>
+		<key>ant0</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 0
+				all
+			#elif $ant0()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+
+	<param>
+		<name>Ch1: Subdev Spec</name>
+		<key>sd_spec1</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 1
+				all
+			#elif $sd_spec1()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+	<param>
+		<name>Ch1: Center Freq (Hz)</name>
+		<key>center_freq1</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 1 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch1: Gain (dB)</name>
+		<key>gain1</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 1 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch1: Antenna</name>
+		<key>ant1</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 1
+				all
+			#elif $ant1()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+
+	<param>
+		<name>Ch2: Subdev Spec</name>
+		<key>sd_spec2</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 2
+				all
+			#elif $sd_spec2()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+	<param>
+		<name>Ch2: Center Freq (Hz)</name>
+		<key>center_freq2</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 2 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch2: Gain (dB)</name>
+		<key>gain2</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 2 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch2: Antenna</name>
+		<key>ant2</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 2
+				all
+			#elif $ant2()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+
+	<param>
+		<name>Ch3: Subdev Spec</name>
+		<key>sd_spec3</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 3
+				all
+			#elif $sd_spec3()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+	<param>
+		<name>Ch3: Center Freq (Hz)</name>
+		<key>center_freq3</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 3 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch3: Gain (dB)</name>
+		<key>gain3</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 3 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch3: Antenna</name>
+		<key>ant3</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 3
+				all
+			#elif $ant3()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+
+	<param>
+		<name>Ch4: Subdev Spec</name>
+		<key>sd_spec4</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 4
+				all
+			#elif $sd_spec4()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+	<param>
+		<name>Ch4: Center Freq (Hz)</name>
+		<key>center_freq4</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 4 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch4: Gain (dB)</name>
+		<key>gain4</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 4 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch4: Antenna</name>
+		<key>ant4</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 4
+				all
+			#elif $ant4()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+
+	<param>
+		<name>Ch5: Subdev Spec</name>
+		<key>sd_spec5</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 5
+				all
+			#elif $sd_spec5()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+	<param>
+		<name>Ch5: Center Freq (Hz)</name>
+		<key>center_freq5</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 5 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch5: Gain (dB)</name>
+		<key>gain5</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 5 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch5: Antenna</name>
+		<key>ant5</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 5
+				all
+			#elif $ant5()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+
+	<param>
+		<name>Ch6: Subdev Spec</name>
+		<key>sd_spec6</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 6
+				all
+			#elif $sd_spec6()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+	<param>
+		<name>Ch6: Center Freq (Hz)</name>
+		<key>center_freq6</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 6 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch6: Gain (dB)</name>
+		<key>gain6</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 6 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch6: Antenna</name>
+		<key>ant6</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 6
+				all
+			#elif $ant6()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+
+	<param>
+		<name>Ch7: Subdev Spec</name>
+		<key>sd_spec7</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 7
+				all
+			#elif $sd_spec7()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+	<param>
+		<name>Ch7: Center Freq (Hz)</name>
+		<key>center_freq7</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 7 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch7: Gain (dB)</name>
+		<key>gain7</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 7 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch7: Antenna</name>
+		<key>ant7</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 7
+				all
+			#elif $ant7()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+
+	<check>8 >= $nchan</check>
+	<check>$nchan >= 0</check>
+	<sink>
+		<name>in</name>
+		<type>$type</type>
+		<vlen>$type.vlen</vlen>
+		<nports>$nchan</nports>
+	</sink>
+	<doc>
+The UHD Sink Block:
+
+Args:
+Args is a delimited string used to locate UHD devices on your system. \
+If left blank, the first UHD device found will be used. \
+Used args to specify a specfic device. \
+USRP2 Example: addr=192.168.10.2
+
+Sample rate:
+The sample rate is the number of samples per second input by this block. \
+The UHD device driver will try its best to match the requested sample rate. \
+If the requested rate is not possible, the UHD block will print an error at runtime.
+
+Antenna:
+For subdevices/daughterboards with only one antenna, this may be left blank. \
+Otherwise, the user should specify one of the possible antenna choices. \
+See the daughterboard application notes for the possible antenna choices.
+	</doc>
+</block>
diff --git a/gr-uhd/grc/uhd_mimo_source.xml b/gr-uhd/grc/uhd_mimo_source.xml
new file mode 100644
index 0000000000..d8f4e6d667
--- /dev/null
+++ b/gr-uhd/grc/uhd_mimo_source.xml
@@ -0,0 +1,550 @@
+<?xml version="1.0"?>
+<block>
+	<name>UHD MIMO Source</name>
+	<key>uhd_mimo_source</key>
+	<category>UHD</category>
+	<import>from gnuradio import uhd</import>
+	<make>uhd.mimo_source($nchan, $args, uhd.io_type_t.$type.type)
+self.$(id).set_samp_rate_all($samp_rate)
+#if $nchan() > 0
+self.$(id).set_subdev_spec(0, $sd_spec0)
+self.$(id).set_center_freq(0, $center_freq0)
+self.$(id).set_gain(0, $gain0)
+	#if $ant0()
+self.$(id).set_antenna(0, $ant0)
+	#end if
+#end if
+#if $nchan() > 1
+self.$(id).set_subdev_spec(1, $sd_spec1)
+self.$(id).set_center_freq(1, $center_freq1)
+self.$(id).set_gain(1, $gain1)
+	#if $ant1()
+self.$(id).set_antenna(1, $ant1)
+	#end if
+#end if
+#if $nchan() > 2
+self.$(id).set_subdev_spec(2, $sd_spec2)
+self.$(id).set_center_freq(2, $center_freq2)
+self.$(id).set_gain(2, $gain2)
+	#if $ant2()
+self.$(id).set_antenna(2, $ant2)
+	#end if
+#end if
+#if $nchan() > 3
+self.$(id).set_subdev_spec(3, $sd_spec3)
+self.$(id).set_center_freq(3, $center_freq3)
+self.$(id).set_gain(3, $gain3)
+	#if $ant3()
+self.$(id).set_antenna(3, $ant3)
+	#end if
+#end if
+#if $nchan() > 4
+self.$(id).set_subdev_spec(4, $sd_spec4)
+self.$(id).set_center_freq(4, $center_freq4)
+self.$(id).set_gain(4, $gain4)
+	#if $ant4()
+self.$(id).set_antenna(4, $ant4)
+	#end if
+#end if
+#if $nchan() > 5
+self.$(id).set_subdev_spec(5, $sd_spec5)
+self.$(id).set_center_freq(5, $center_freq5)
+self.$(id).set_gain(5, $gain5)
+	#if $ant5()
+self.$(id).set_antenna(5, $ant5)
+	#end if
+#end if
+#if $nchan() > 6
+self.$(id).set_subdev_spec(6, $sd_spec6)
+self.$(id).set_center_freq(6, $center_freq6)
+self.$(id).set_gain(6, $gain6)
+	#if $ant6()
+self.$(id).set_antenna(6, $ant6)
+	#end if
+#end if
+#if $nchan() > 7
+self.$(id).set_subdev_spec(7, $sd_spec7)
+self.$(id).set_center_freq(7, $center_freq7)
+self.$(id).set_gain(7, $gain7)
+	#if $ant7()
+self.$(id).set_antenna(7, $ant7)
+	#end if
+#end if
+</make>
+	<callback>set_samp_rate($samp_rate)</callback>
+	<callback>set_center_freq(0, $center_freq0)</callback>
+	<callback>set_gain(0, $gain0)</callback>
+	<callback>set_antenna(0, $ant0)</callback>
+	<callback>set_center_freq(1, $center_freq1)</callback>
+	<callback>set_gain(1, $gain1)</callback>
+	<callback>set_antenna(1, $ant1)</callback>
+	<callback>set_center_freq(2, $center_freq2)</callback>
+	<callback>set_gain(2, $gain2)</callback>
+	<callback>set_antenna(2, $ant2)</callback>
+	<callback>set_center_freq(3, $center_freq3)</callback>
+	<callback>set_gain(3, $gain3)</callback>
+	<callback>set_antenna(3, $ant3)</callback>
+	<callback>set_center_freq(4, $center_freq4)</callback>
+	<callback>set_gain(4, $gain4)</callback>
+	<callback>set_antenna(4, $ant4)</callback>
+	<callback>set_center_freq(5, $center_freq5)</callback>
+	<callback>set_gain(5, $gain5)</callback>
+	<callback>set_antenna(5, $ant5)</callback>
+	<callback>set_center_freq(6, $center_freq6)</callback>
+	<callback>set_gain(6, $gain6)</callback>
+	<callback>set_antenna(6, $ant6)</callback>
+	<callback>set_center_freq(7, $center_freq7)</callback>
+	<callback>set_gain(7, $gain7)</callback>
+	<callback>set_antenna(7, $ant7)</callback>
+	<param>
+		<name>Input Type</name>
+		<key>type</key>
+		<type>enum</type>
+		<option>
+			<name>Complex</name>
+			<key>complex</key>
+			<opt>type:COMPLEX_FLOAT32</opt>
+			<opt>vlen:1</opt>
+		</option>
+		<option>
+			<name>Short</name>
+			<key>short</key>
+			<opt>type:COMPLEX_INT16</opt>
+			<opt>vlen:2</opt>
+		</option>
+	</param>
+	<param>
+		<name>Num Channels</name>
+		<key>nchan</key>
+		<value>2</value>
+		<type>int</type>
+		<option>
+			<name>2 Channels</name>
+			<key>2</key>
+		</option>
+		<option>
+			<name>3 Channels</name>
+			<key>3</key>
+		</option>
+		<option>
+			<name>4 Channels</name>
+			<key>4</key>
+		</option>
+		<option>
+			<name>5 Channels</name>
+			<key>5</key>
+		</option>
+		<option>
+			<name>6 Channels</name>
+			<key>6</key>
+		</option>
+		<option>
+			<name>7 Channels</name>
+			<key>7</key>
+		</option>
+		<option>
+			<name>8 Channels</name>
+			<key>8</key>
+		</option>
+	</param>
+	<param>
+		<name>Args</name>
+		<key>args</key>
+		<value>addr=192.168.10.2 192.168.20.2</value>
+		<type>string</type>
+	</param>
+	<param>
+		<name>Samp Rate (Sps)</name>
+		<key>samp_rate</key>
+		<value>samp_rate</value>
+		<type>real</type>
+	</param>
+	
+	<param>
+		<name>Ch0: Subdev Spec</name>
+		<key>sd_spec0</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 0
+				all
+			#elif $sd_spec0()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+	<param>
+		<name>Ch0: Center Freq (Hz)</name>
+		<key>center_freq0</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 0 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch0: Gain (dB)</name>
+		<key>gain0</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 0 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch0: Antenna</name>
+		<key>ant0</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 0
+				all
+			#elif $ant0()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+
+	<param>
+		<name>Ch1: Subdev Spec</name>
+		<key>sd_spec1</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 1
+				all
+			#elif $sd_spec1()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+	<param>
+		<name>Ch1: Center Freq (Hz)</name>
+		<key>center_freq1</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 1 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch1: Gain (dB)</name>
+		<key>gain1</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 1 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch1: Antenna</name>
+		<key>ant1</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 1
+				all
+			#elif $ant1()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+
+	<param>
+		<name>Ch2: Subdev Spec</name>
+		<key>sd_spec2</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 2
+				all
+			#elif $sd_spec2()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+	<param>
+		<name>Ch2: Center Freq (Hz)</name>
+		<key>center_freq2</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 2 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch2: Gain (dB)</name>
+		<key>gain2</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 2 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch2: Antenna</name>
+		<key>ant2</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 2
+				all
+			#elif $ant2()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+
+	<param>
+		<name>Ch3: Subdev Spec</name>
+		<key>sd_spec3</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 3
+				all
+			#elif $sd_spec3()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+	<param>
+		<name>Ch3: Center Freq (Hz)</name>
+		<key>center_freq3</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 3 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch3: Gain (dB)</name>
+		<key>gain3</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 3 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch3: Antenna</name>
+		<key>ant3</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 3
+				all
+			#elif $ant3()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+
+	<param>
+		<name>Ch4: Subdev Spec</name>
+		<key>sd_spec4</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 4
+				all
+			#elif $sd_spec4()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+	<param>
+		<name>Ch4: Center Freq (Hz)</name>
+		<key>center_freq4</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 4 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch4: Gain (dB)</name>
+		<key>gain4</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 4 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch4: Antenna</name>
+		<key>ant4</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 4
+				all
+			#elif $ant4()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+
+	<param>
+		<name>Ch5: Subdev Spec</name>
+		<key>sd_spec5</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 5
+				all
+			#elif $sd_spec5()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+	<param>
+		<name>Ch5: Center Freq (Hz)</name>
+		<key>center_freq5</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 5 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch5: Gain (dB)</name>
+		<key>gain5</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 5 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch5: Antenna</name>
+		<key>ant5</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 5
+				all
+			#elif $ant5()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+
+	<param>
+		<name>Ch6: Subdev Spec</name>
+		<key>sd_spec6</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 6
+				all
+			#elif $sd_spec6()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+	<param>
+		<name>Ch6: Center Freq (Hz)</name>
+		<key>center_freq6</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 6 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch6: Gain (dB)</name>
+		<key>gain6</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 6 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch6: Antenna</name>
+		<key>ant6</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 6
+				all
+			#elif $ant6()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+
+	<param>
+		<name>Ch7: Subdev Spec</name>
+		<key>sd_spec7</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 7
+				all
+			#elif $sd_spec7()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+	<param>
+		<name>Ch7: Center Freq (Hz)</name>
+		<key>center_freq7</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 7 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch7: Gain (dB)</name>
+		<key>gain7</key>
+		<value>0</value>
+		<type>real</type>
+		<hide>#if $nchan() > 7 then 'none' else 'all'#</hide>
+	</param>
+	<param>
+		<name>Ch7: Antenna</name>
+		<key>ant7</key>
+		<value></value>
+		<type>string</type>
+		<hide>
+			#if not $nchan() > 7
+				all
+			#elif $ant7()
+				none
+			#else
+				part
+			#end if
+		</hide>
+	</param>
+
+	<check>8 >= $nchan</check>
+	<check>$nchan >= 0</check>
+	<source>
+		<name>out</name>
+		<type>$type</type>
+		<vlen>$type.vlen</vlen>
+		<nports>$nchan</nports>
+	</source>
+	<doc>
+The UHD Source Block:
+
+Args:
+Args is a delimited string used to locate UHD devices on your system. \
+If left blank, the first UHD device found will be used. \
+Used args to specify a specfic device. \
+USRP2 Example: addr=192.168.10.2
+
+Sample rate:
+The sample rate is the number of samples per second input by this block. \
+The UHD device driver will try its best to match the requested sample rate. \
+If the requested rate is not possible, the UHD block will print an error at runtime.
+
+Antenna:
+For subdevices/daughterboards with only one antenna, this may be left blank. \
+Otherwise, the user should specify one of the possible antenna choices. \
+See the daughterboard application notes for the possible antenna choices.
+	</doc>
+</block>
diff --git a/gr-uhd/lib/Makefile.am b/gr-uhd/lib/Makefile.am
index d9a296c754..b4b1abfc67 100644
--- a/gr-uhd/lib/Makefile.am
+++ b/gr-uhd/lib/Makefile.am
@@ -29,15 +29,18 @@ AM_CPPFLAGS = \
 lib_LTLIBRARIES = libgnuradio-uhd.la
 
 libgnuradio_uhd_la_SOURCES = \
-	uhd_mimo_source.cc \
-	uhd_mimo_sink.cc \
 	uhd_multi_usrp_source.cc \
 	uhd_multi_usrp_sink.cc \
-	uhd_simple_source.cc \
-	uhd_simple_sink.cc \
 	uhd_single_usrp_source.cc \
 	uhd_single_usrp_sink.cc
 
+# add the deprecated sources
+libgnuradio_uhd_la_SOURCES += \
+	uhd_mimo_source.cc \
+	uhd_mimo_sink.cc \
+	uhd_simple_source.cc \
+	uhd_simple_sink.cc
+
 libgnuradio_uhd_la_LIBADD = \
 	$(GNURADIO_CORE_LA) \
 	$(UHD_LIBS)
-- 
cgit v1.2.3


From 7f46efca9cb0c87e9130c117ac41650f6e0c25cc Mon Sep 17 00:00:00 2001
From: Josh Blum <josh@joshknows.com>
Date: Mon, 18 Oct 2010 16:49:08 -0700
Subject: uhd: renamed make function params, cleanup, clock config for multi
 usrp

---
 gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py  | 11 ++++++++++-
 gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py |  6 +++++-
 gr-uhd/lib/uhd_multi_usrp_sink.cc            | 19 ++++++++++++-------
 gr-uhd/lib/uhd_multi_usrp_sink.h             |  4 ++--
 gr-uhd/lib/uhd_multi_usrp_source.cc          | 18 +++++++++++-------
 gr-uhd/lib/uhd_multi_usrp_source.h           |  4 ++--
 gr-uhd/lib/uhd_single_usrp_sink.cc           | 19 ++++++++++++-------
 gr-uhd/lib/uhd_single_usrp_sink.h            |  4 ++--
 gr-uhd/lib/uhd_single_usrp_source.cc         | 18 +++++++++++-------
 gr-uhd/lib/uhd_single_usrp_source.h          |  4 ++--
 10 files changed, 69 insertions(+), 38 deletions(-)

(limited to 'gr-uhd/lib')

diff --git a/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py b/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py
index 8de4408d5a..aa550157d2 100755
--- a/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py
+++ b/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py
@@ -25,8 +25,17 @@ MAIN_TMPL = """\
 	<name>UHD: Multi USRP $sourk.title()</name>
 	<key>uhd_multi_usrp_$(sourk)</key>
 	<import>from gnuradio import uhd</import>
-	<make>uhd.multi_usrp_$(sourk)(\$dev_addr, uhd.io_type_t.\$type.type, \$nchan)
+	<make>uhd.multi_usrp_$(sourk)(
+	device_addr=\$dev_addr,
+	io_type=uhd.io_type_t.\$type.type,
+	num_channels=\$nchan,
+)
 \#if \$sync()
+clk_cfg = uhd.clock_config_t()
+clk_cfg.ref_source = uhd.clock_config_t.REF_SMA
+clk_cfg.pps_source = uhd.clock_config_t.PPS_SMA
+clk_cfg.pps_polarity = uhd.clock_config_t.PPS_POS
+self.\$(id).set_clock_config(clk_cfg, ~0);
 self.\$(id).set_time_unknown_pps(uhd.time_spec_t())
 \#end if
 #for $m in range($max_mboards)
diff --git a/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py b/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py
index 5b87719e5e..4d645afe15 100755
--- a/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py
+++ b/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py
@@ -25,7 +25,11 @@ MAIN_TMPL = """\
 	<name>UHD: Single USRP $sourk.title()</name>
 	<key>uhd_single_usrp_$(sourk)</key>
 	<import>from gnuradio import uhd</import>
-	<make>uhd.single_usrp_$(sourk)(\$dev_addr, uhd.io_type_t.\$type.type, \$nchan)
+	<make>uhd.single_usrp_$(sourk)(
+	device_addr=\$dev_addr,
+	io_type=uhd.io_type_t.\$type.type,
+	num_channels\$nchan,
+)
 self.\$(id).set_subdev_spec(\$sd_spec)
 self.\$(id).set_samp_rate(\$samp_rate)
 #for $n in range($max_nchan)
diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.cc b/gr-uhd/lib/uhd_multi_usrp_sink.cc
index 202f128406..31dbac44f4 100644
--- a/gr-uhd/lib/uhd_multi_usrp_sink.cc
+++ b/gr-uhd/lib/uhd_multi_usrp_sink.cc
@@ -37,12 +37,17 @@ uhd_multi_usrp_sink::uhd_multi_usrp_sink(gr_io_signature_sptr sig)
 class uhd_multi_usrp_sink_impl : public uhd_multi_usrp_sink{
 public:
     uhd_multi_usrp_sink_impl(
-        const std::string &args,
-        const uhd::io_type_t &type,
+        const std::string &device_addr,
+        const uhd::io_type_t &io_type,
         size_t num_channels
-    ) : uhd_multi_usrp_sink(gr_make_io_signature(num_channels, num_channels, type.size)), _type(type), _nchan(num_channels)
+    ):
+        uhd_multi_usrp_sink(gr_make_io_signature(
+            num_channels, num_channels, io_type.size
+        )),
+        _type(io_type),
+        _nchan(num_channels)
     {
-        _dev = uhd::usrp::multi_usrp::make(args);
+        _dev = uhd::usrp::multi_usrp::make(device_addr);
     }
 
     void set_subdev_spec(const std::string &spec, size_t mboard){
@@ -165,11 +170,11 @@ protected:
  * Make UHD Multi USRP Sink
  **********************************************************************/
 boost::shared_ptr<uhd_multi_usrp_sink> uhd_make_multi_usrp_sink(
-    const std::string &args,
-    const uhd::io_type_t::tid_t &type,
+    const std::string &device_addr,
+    const uhd::io_type_t::tid_t &io_type,
     size_t num_channels
 ){
     return boost::shared_ptr<uhd_multi_usrp_sink>(
-        new uhd_multi_usrp_sink_impl(args, type, num_channels)
+        new uhd_multi_usrp_sink_impl(device_addr, io_type, num_channels)
     );
 }
diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.h b/gr-uhd/lib/uhd_multi_usrp_sink.h
index 13bba20fb6..5dacc1fac7 100644
--- a/gr-uhd/lib/uhd_multi_usrp_sink.h
+++ b/gr-uhd/lib/uhd_multi_usrp_sink.h
@@ -28,8 +28,8 @@
 class uhd_multi_usrp_sink;
 
 boost::shared_ptr<uhd_multi_usrp_sink> uhd_make_multi_usrp_sink(
-    const std::string &args,
-    const uhd::io_type_t::tid_t &type,
+    const std::string &device_addr,
+    const uhd::io_type_t::tid_t &io_type,
     size_t num_channels
 );
 
diff --git a/gr-uhd/lib/uhd_multi_usrp_source.cc b/gr-uhd/lib/uhd_multi_usrp_source.cc
index c10c08c500..1fcb576501 100644
--- a/gr-uhd/lib/uhd_multi_usrp_source.cc
+++ b/gr-uhd/lib/uhd_multi_usrp_source.cc
@@ -39,12 +39,16 @@ uhd_multi_usrp_source::uhd_multi_usrp_source(gr_io_signature_sptr sig)
 class uhd_multi_usrp_source_impl : public uhd_multi_usrp_source{
 public:
     uhd_multi_usrp_source_impl(
-        const std::string &args,
-        const uhd::io_type_t &type,
+        const std::string &device_addr,
+        const uhd::io_type_t &io_type,
         size_t num_channels
-    ) : uhd_multi_usrp_source(gr_make_io_signature(num_channels, num_channels, type.size)), _type(type)
+    ):
+        uhd_multi_usrp_source(gr_make_io_signature(
+            num_channels, num_channels, io_type.size
+        )),
+        _type(io_type)
     {
-        _dev = uhd::usrp::multi_usrp::make(args);
+        _dev = uhd::usrp::multi_usrp::make(device_addr);
     }
 
     void set_subdev_spec(const std::string &spec, size_t mboard){
@@ -168,11 +172,11 @@ private:
  * Make UHD Multi USRP Source
  **********************************************************************/
 boost::shared_ptr<uhd_multi_usrp_source> uhd_make_multi_usrp_source(
-    const std::string &args,
-    const uhd::io_type_t::tid_t &type,
+    const std::string &device_addr,
+    const uhd::io_type_t::tid_t &io_type,
     size_t num_channels
 ){
     return boost::shared_ptr<uhd_multi_usrp_source>(
-        new uhd_multi_usrp_source_impl(args, type, num_channels)
+        new uhd_multi_usrp_source_impl(device_addr, io_type, num_channels)
     );
 }
diff --git a/gr-uhd/lib/uhd_multi_usrp_source.h b/gr-uhd/lib/uhd_multi_usrp_source.h
index b94e53f01b..36c4b6fdcc 100644
--- a/gr-uhd/lib/uhd_multi_usrp_source.h
+++ b/gr-uhd/lib/uhd_multi_usrp_source.h
@@ -28,8 +28,8 @@
 class uhd_multi_usrp_source;
 
 boost::shared_ptr<uhd_multi_usrp_source> uhd_make_multi_usrp_source(
-    const std::string &args,
-    const uhd::io_type_t::tid_t &type,
+    const std::string &device_addr,
+    const uhd::io_type_t::tid_t &io_type,
     size_t num_channels
 );
 
diff --git a/gr-uhd/lib/uhd_single_usrp_sink.cc b/gr-uhd/lib/uhd_single_usrp_sink.cc
index 96c1dbdf49..4297a83ffa 100644
--- a/gr-uhd/lib/uhd_single_usrp_sink.cc
+++ b/gr-uhd/lib/uhd_single_usrp_sink.cc
@@ -37,12 +37,17 @@ uhd_single_usrp_sink::uhd_single_usrp_sink(gr_io_signature_sptr sig)
 class uhd_single_usrp_sink_impl : public uhd_single_usrp_sink{
 public:
     uhd_single_usrp_sink_impl(
-        const std::string &args,
-        const uhd::io_type_t &type,
+        const std::string &device_addr,
+        const uhd::io_type_t &io_type,
         size_t num_channels
-    ) : uhd_single_usrp_sink(gr_make_io_signature(num_channels, num_channels, type.size)), _type(type), _nchan(num_channels)
+    ):
+        uhd_single_usrp_sink(gr_make_io_signature(
+            num_channels, num_channels, io_type.size
+        )),
+        _type(io_type),
+        _nchan(num_channels)
     {
-        _dev = uhd::usrp::single_usrp::make(args);
+        _dev = uhd::usrp::single_usrp::make(device_addr);
     }
 
     void set_subdev_spec(const std::string &spec){
@@ -163,11 +168,11 @@ protected:
  * Make UHD Single USRP Sink
  **********************************************************************/
 boost::shared_ptr<uhd_single_usrp_sink> uhd_make_single_usrp_sink(
-    const std::string &args,
-    const uhd::io_type_t::tid_t &type,
+    const std::string &device_addr,
+    const uhd::io_type_t::tid_t &io_type,
     size_t num_channels
 ){
     return boost::shared_ptr<uhd_single_usrp_sink>(
-        new uhd_single_usrp_sink_impl(args, type, num_channels)
+        new uhd_single_usrp_sink_impl(device_addr, io_type, num_channels)
     );
 }
diff --git a/gr-uhd/lib/uhd_single_usrp_sink.h b/gr-uhd/lib/uhd_single_usrp_sink.h
index bec788193b..e83bb6ded8 100644
--- a/gr-uhd/lib/uhd_single_usrp_sink.h
+++ b/gr-uhd/lib/uhd_single_usrp_sink.h
@@ -28,8 +28,8 @@
 class uhd_single_usrp_sink;
 
 boost::shared_ptr<uhd_single_usrp_sink> uhd_make_single_usrp_sink(
-    const std::string &args,
-    const uhd::io_type_t::tid_t &type,
+    const std::string &device_addr,
+    const uhd::io_type_t::tid_t &io_type,
     size_t num_channels = 1
 );
 
diff --git a/gr-uhd/lib/uhd_single_usrp_source.cc b/gr-uhd/lib/uhd_single_usrp_source.cc
index 7c3694a99d..27a788d960 100644
--- a/gr-uhd/lib/uhd_single_usrp_source.cc
+++ b/gr-uhd/lib/uhd_single_usrp_source.cc
@@ -39,12 +39,16 @@ uhd_single_usrp_source::uhd_single_usrp_source(gr_io_signature_sptr sig)
 class uhd_single_usrp_source_impl : public uhd_single_usrp_source{
 public:
     uhd_single_usrp_source_impl(
-        const std::string &args,
-        const uhd::io_type_t &type,
+        const std::string &device_addr,
+        const uhd::io_type_t &io_type,
         size_t num_channels
-    ) : uhd_single_usrp_source(gr_make_io_signature(num_channels, num_channels, type.size)), _type(type)
+    ):
+        uhd_single_usrp_source(gr_make_io_signature(
+            num_channels, num_channels, io_type.size
+        )),
+        _type(io_type)
     {
-        _dev = uhd::usrp::single_usrp::make(args);
+        _dev = uhd::usrp::single_usrp::make(device_addr);
     }
 
     void set_subdev_spec(const std::string &spec){
@@ -163,11 +167,11 @@ private:
  * Make UHD Single USRP Source
  **********************************************************************/
 boost::shared_ptr<uhd_single_usrp_source> uhd_make_single_usrp_source(
-    const std::string &args,
-    const uhd::io_type_t::tid_t &type,
+    const std::string &device_addr,
+    const uhd::io_type_t::tid_t &io_type,
     size_t num_channels
 ){
     return boost::shared_ptr<uhd_single_usrp_source>(
-        new uhd_single_usrp_source_impl(args, type, num_channels)
+        new uhd_single_usrp_source_impl(device_addr, io_type, num_channels)
     );
 }
diff --git a/gr-uhd/lib/uhd_single_usrp_source.h b/gr-uhd/lib/uhd_single_usrp_source.h
index 196b7c6759..c323fbd7ed 100644
--- a/gr-uhd/lib/uhd_single_usrp_source.h
+++ b/gr-uhd/lib/uhd_single_usrp_source.h
@@ -28,8 +28,8 @@
 class uhd_single_usrp_source;
 
 boost::shared_ptr<uhd_single_usrp_source> uhd_make_single_usrp_source(
-    const std::string &args,
-    const uhd::io_type_t::tid_t &type,
+    const std::string &device_addr,
+    const uhd::io_type_t::tid_t &io_type,
     size_t num_channels = 1
 );
 
-- 
cgit v1.2.3


From 343cba5663d0eefdd3ee3918bef812dc1bd75508 Mon Sep 17 00:00:00 2001
From: Josh Blum <josh@joshknows.com>
Date: Mon, 18 Oct 2010 18:29:20 -0700
Subject: uhd: tweaked and tested multi usrp with a single channel

---
 gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py  | 16 ++++++++--------
 gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py |  2 ++
 gr-uhd/lib/uhd_multi_usrp_source.cc          |  4 ++--
 gr-uhd/swig/uhd_swig.i                       | 20 ++++++++++++++++++++
 4 files changed, 32 insertions(+), 10 deletions(-)

(limited to 'gr-uhd/lib')

diff --git a/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py b/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py
index aa550157d2..2297167320 100755
--- a/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py
+++ b/gr-uhd/grc/gen_uhd_multi_usrp_blocks_xml.py
@@ -31,15 +31,15 @@ MAIN_TMPL = """\
 	num_channels=\$nchan,
 )
 \#if \$sync()
-clk_cfg = uhd.clock_config_t()
-clk_cfg.ref_source = uhd.clock_config_t.REF_SMA
-clk_cfg.pps_source = uhd.clock_config_t.PPS_SMA
-clk_cfg.pps_polarity = uhd.clock_config_t.PPS_POS
-self.\$(id).set_clock_config(clk_cfg, ~0);
+_clk_cfg = uhd.clock_config_t()
+_clk_cfg.ref_source = uhd.clock_config_t.REF_SMA
+_clk_cfg.pps_source = uhd.clock_config_t.PPS_SMA
+_clk_cfg.pps_polarity = uhd.clock_config_t.PPS_POS
+self.\$(id).set_clock_config(_clk_cfg, uhd.ALL_MBOARDS);
 self.\$(id).set_time_unknown_pps(uhd.time_spec_t())
 \#end if
 #for $m in range($max_mboards)
-\#if \$num_mboards() > $m
+\#if \$num_mboards() > $m and \$sd_spec$(m)()
 self.\$(id).set_subdev_spec(\$sd_spec$(m), $m)
 \#end if
 #end for
@@ -110,7 +110,7 @@ self.\$(id).set_antenna(\$ant$(n), $n)
 		<key>num_mboards</key>
 		<value>2</value>
 		<type>int</type>
-		#for $m in range(1, $max_mboards)
+		#for $m in range(1, $max_mboards+1)
 		<option>
 			<name>$(m)</name>
 			<key>$m</key>
@@ -139,7 +139,7 @@ self.\$(id).set_antenna(\$ant$(n), $n)
 		<key>nchan</key>
 		<value>2</value>
 		<type>int</type>
-		#for $n in range(1, $max_nchan)
+		#for $n in range(1, $max_nchan+1)
 		<option>
 			<name>$(n)</name>
 			<key>$n</key>
diff --git a/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py b/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py
index 7bc2425ee8..02cdf64cc2 100755
--- a/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py
+++ b/gr-uhd/grc/gen_uhd_single_usrp_blocks_xml.py
@@ -30,7 +30,9 @@ MAIN_TMPL = """\
 	io_type=uhd.io_type_t.\$type.type,
 	num_channels=\$nchan,
 )
+\#if \$sd_spec()
 self.\$(id).set_subdev_spec(\$sd_spec)
+\#end if
 self.\$(id).set_samp_rate(\$samp_rate)
 #for $n in range($max_nchan)
 \#if \$nchan() > $n
diff --git a/gr-uhd/lib/uhd_multi_usrp_source.cc b/gr-uhd/lib/uhd_multi_usrp_source.cc
index 1fcb576501..0ac686c795 100644
--- a/gr-uhd/lib/uhd_multi_usrp_source.cc
+++ b/gr-uhd/lib/uhd_multi_usrp_source.cc
@@ -149,10 +149,10 @@ public:
 
     bool start(void){
         //setup a stream command that starts streaming slightly in the future
-        static const double reasonable_delay = 0.01; //10 ms (order of magnitude >> RTT)
+        static const double reasonable_delay = 0.05; //order of magnitude over RTT
         uhd::stream_cmd_t stream_cmd(uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS);
         stream_cmd.stream_now = false;
-        stream_cmd.time_spec = get_time_now() + uhd::time_spec_t(_dev->get_num_mboards() * reasonable_delay);
+        stream_cmd.time_spec = get_time_now() + uhd::time_spec_t(reasonable_delay);
         _dev->issue_stream_cmd(stream_cmd);
         return true;
     }
diff --git a/gr-uhd/swig/uhd_swig.i b/gr-uhd/swig/uhd_swig.i
index 1631a768a7..6f29f706d7 100644
--- a/gr-uhd/swig/uhd_swig.i
+++ b/gr-uhd/swig/uhd_swig.i
@@ -20,6 +20,9 @@
  * Boston, MA 02110-1301, USA.
  */
 
+////////////////////////////////////////////////////////////////////////
+// standard includes
+////////////////////////////////////////////////////////////////////////
 %include "gnuradio.i"
 %include "std_string.i"
 %include "std_vector.i"
@@ -28,6 +31,9 @@ namespace std {
     %template(StringVector) vector<string>;
 }
 
+////////////////////////////////////////////////////////////////////////
+// block headers
+////////////////////////////////////////////////////////////////////////
 %{
 #include <uhd_mimo_source.h> //deprecated
 #include <uhd_mimo_sink.h> //deprecated
@@ -40,6 +46,9 @@ namespace std {
 #include <uhd_single_usrp_sink.h>
 %}
 
+////////////////////////////////////////////////////////////////////////
+// used types
+////////////////////////////////////////////////////////////////////////
 %include <uhd/config.hpp>
 %include <uhd/types/ranges.hpp>
 %include <uhd/types/tune_result.hpp>
@@ -47,6 +56,9 @@ namespace std {
 %include <uhd/types/time_spec.hpp>
 %include <uhd/types/clock_config.hpp>
 
+////////////////////////////////////////////////////////////////////////
+// block magic
+////////////////////////////////////////////////////////////////////////
 GR_SWIG_BLOCK_MAGIC(uhd,mimo_source) //deprecated
 %include <uhd_mimo_source.h> //deprecated
 
@@ -70,3 +82,11 @@ GR_SWIG_BLOCK_MAGIC(uhd,single_usrp_source)
 
 GR_SWIG_BLOCK_MAGIC(uhd,single_usrp_sink)
 %include <uhd_single_usrp_sink.h>
+
+////////////////////////////////////////////////////////////////////////
+// helpful constants
+////////////////////////////////////////////////////////////////////////
+%{
+static const size_t ALL_MBOARDS = uhd::usrp::multi_usrp::ALL_MBOARDS;
+%}
+static const size_t ALL_MBOARDS;
-- 
cgit v1.2.3


From f8c63c369e0e8800f76d427434424f7209fcde86 Mon Sep 17 00:00:00 2001
From: Josh Blum <josh@joshknows.com>
Date: Tue, 19 Oct 2010 13:04:42 -0700
Subject: uhd: tweaking timeouts for multi usrp blocks

---
 gr-uhd/lib/uhd_multi_usrp_sink.cc   | 11 +++++++----
 gr-uhd/lib/uhd_multi_usrp_source.cc |  4 ++--
 2 files changed, 9 insertions(+), 6 deletions(-)

(limited to 'gr-uhd/lib')

diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.cc b/gr-uhd/lib/uhd_multi_usrp_sink.cc
index 31dbac44f4..17cd1ad78e 100644
--- a/gr-uhd/lib/uhd_multi_usrp_sink.cc
+++ b/gr-uhd/lib/uhd_multi_usrp_sink.cc
@@ -128,7 +128,7 @@ public:
 
         return _dev->get_device()->send(
             input_items, noutput_items, metadata,
-            _type, uhd::device::SEND_MODE_FULL_BUFF
+            _type, uhd::device::SEND_MODE_FULL_BUFF, 1.0
         );
     }
 
@@ -138,11 +138,14 @@ public:
         uhd::tx_metadata_t metadata;
         metadata.start_of_burst = true;
         metadata.has_time_spec = true;
-        metadata.time_spec = get_time_now() + uhd::time_spec_t(0.01); //10ms offset in future
+        //TODO: Time in the near future, must be less than source time in future
+        //because ethernet pause frames with throttle stream commands.
+        //It will be fixed with the invention of host-based flow control.
+        metadata.time_spec = get_time_now() + uhd::time_spec_t(0.05);
 
         _dev->get_device()->send(
             gr_vector_const_void_star(_nchan), 0, metadata,
-            _type, uhd::device::SEND_MODE_ONE_PACKET
+            _type, uhd::device::SEND_MODE_ONE_PACKET, 1.0
         );
         return true;
     }
@@ -155,7 +158,7 @@ public:
 
         _dev->get_device()->send(
             gr_vector_const_void_star(_nchan), 0, metadata,
-            _type, uhd::device::SEND_MODE_ONE_PACKET
+            _type, uhd::device::SEND_MODE_ONE_PACKET, 1.0
         );
         return true;
     }
diff --git a/gr-uhd/lib/uhd_multi_usrp_source.cc b/gr-uhd/lib/uhd_multi_usrp_source.cc
index 0ac686c795..63dad1a25e 100644
--- a/gr-uhd/lib/uhd_multi_usrp_source.cc
+++ b/gr-uhd/lib/uhd_multi_usrp_source.cc
@@ -128,7 +128,7 @@ public:
 
         size_t num_samps = _dev->get_device()->recv(
             output_items, noutput_items, metadata,
-            _type, uhd::device::RECV_MODE_FULL_BUFF
+            _type, uhd::device::RECV_MODE_FULL_BUFF, 1.0
         );
 
         switch(metadata.error_code){
@@ -149,7 +149,7 @@ public:
 
     bool start(void){
         //setup a stream command that starts streaming slightly in the future
-        static const double reasonable_delay = 0.05; //order of magnitude over RTT
+        static const double reasonable_delay = 0.1; //order of magnitude over RTT
         uhd::stream_cmd_t stream_cmd(uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS);
         stream_cmd.stream_now = false;
         stream_cmd.time_spec = get_time_now() + uhd::time_spec_t(reasonable_delay);
-- 
cgit v1.2.3


From c6e4a54769e2d5be3cfd28df6697c54c4a4a7e90 Mon Sep 17 00:00:00 2001
From: Josh Blum <josh@joshknows.com>
Date: Tue, 19 Oct 2010 15:03:08 -0700
Subject: uhd: mark simple and mimo classes with the deprecated flag

---
 gr-uhd/lib/uhd_mimo_sink.h     | 2 +-
 gr-uhd/lib/uhd_mimo_source.h   | 2 +-
 gr-uhd/lib/uhd_simple_sink.h   | 2 +-
 gr-uhd/lib/uhd_simple_source.h | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

(limited to 'gr-uhd/lib')

diff --git a/gr-uhd/lib/uhd_mimo_sink.h b/gr-uhd/lib/uhd_mimo_sink.h
index a0a30381c3..28a530b603 100644
--- a/gr-uhd/lib/uhd_mimo_sink.h
+++ b/gr-uhd/lib/uhd_mimo_sink.h
@@ -37,7 +37,7 @@ boost::shared_ptr<uhd_mimo_sink> uhd_make_mimo_sink(
 /***********************************************************************
  * DEPRECATED
  **********************************************************************/
-class uhd_mimo_sink : public gr_sync_block{
+class UHD_DEPRECATED uhd_mimo_sink : public gr_sync_block{
 public:
 
     /*!
diff --git a/gr-uhd/lib/uhd_mimo_source.h b/gr-uhd/lib/uhd_mimo_source.h
index f6f18eedcf..dc29275985 100644
--- a/gr-uhd/lib/uhd_mimo_source.h
+++ b/gr-uhd/lib/uhd_mimo_source.h
@@ -37,7 +37,7 @@ boost::shared_ptr<uhd_mimo_source> uhd_make_mimo_source(
 /***********************************************************************
  * DEPRECATED
  **********************************************************************/
-class uhd_mimo_source : public gr_sync_block{
+class UHD_DEPRECATED uhd_mimo_source : public gr_sync_block{
 public:
 
     /*!
diff --git a/gr-uhd/lib/uhd_simple_sink.h b/gr-uhd/lib/uhd_simple_sink.h
index 44b868698c..b239e3f212 100644
--- a/gr-uhd/lib/uhd_simple_sink.h
+++ b/gr-uhd/lib/uhd_simple_sink.h
@@ -36,7 +36,7 @@ boost::shared_ptr<uhd_simple_sink> uhd_make_simple_sink(
 /***********************************************************************
  * DEPRECATED
  **********************************************************************/
-class uhd_simple_sink : public gr_sync_block{
+class UHD_DEPRECATED uhd_simple_sink : public gr_sync_block{
 public:
 
     /*!
diff --git a/gr-uhd/lib/uhd_simple_source.h b/gr-uhd/lib/uhd_simple_source.h
index 4e79afa21e..c524a024a8 100644
--- a/gr-uhd/lib/uhd_simple_source.h
+++ b/gr-uhd/lib/uhd_simple_source.h
@@ -36,7 +36,7 @@ boost::shared_ptr<uhd_simple_source> uhd_make_simple_source(
 /***********************************************************************
  * DEPRECATED
  **********************************************************************/
-class uhd_simple_source : public gr_sync_block{
+class UHD_DEPRECATED uhd_simple_source : public gr_sync_block{
 public:
 
     /*!
-- 
cgit v1.2.3


From f13e1e1a87cf3d8b891e94226be047cff3733bb7 Mon Sep 17 00:00:00 2001
From: Josh Blum <josh@joshknows.com>
Date: Tue, 19 Oct 2010 15:46:27 -0700
Subject: uhd: implement set bandwidth for uhd blocks, remove chan=0 default
 for multi blocks

---
 gr-uhd/lib/uhd_multi_usrp_sink.cc    |  4 ++++
 gr-uhd/lib/uhd_multi_usrp_sink.h     | 22 ++++++++++++++--------
 gr-uhd/lib/uhd_multi_usrp_source.cc  |  4 ++++
 gr-uhd/lib/uhd_multi_usrp_source.h   | 22 ++++++++++++++--------
 gr-uhd/lib/uhd_single_usrp_sink.cc   |  4 ++++
 gr-uhd/lib/uhd_single_usrp_sink.h    |  6 ++++++
 gr-uhd/lib/uhd_single_usrp_source.cc |  4 ++++
 gr-uhd/lib/uhd_single_usrp_source.h  |  6 ++++++
 8 files changed, 56 insertions(+), 16 deletions(-)

(limited to 'gr-uhd/lib')

diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.cc b/gr-uhd/lib/uhd_multi_usrp_sink.cc
index 17cd1ad78e..b75a8303cb 100644
--- a/gr-uhd/lib/uhd_multi_usrp_sink.cc
+++ b/gr-uhd/lib/uhd_multi_usrp_sink.cc
@@ -95,6 +95,10 @@ public:
         return _dev->get_tx_antennas(chan);
     }
 
+    void set_bandwidth(double bandwidth, size_t chan){
+        return _dev->set_tx_bandwidth(bandwidth, chan);
+    }
+
     void set_clock_config(const uhd::clock_config_t &clock_config, size_t mboard){
         return _dev->set_clock_config(clock_config, mboard);
     }
diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.h b/gr-uhd/lib/uhd_multi_usrp_sink.h
index 5dacc1fac7..0ccc0fe6c5 100644
--- a/gr-uhd/lib/uhd_multi_usrp_sink.h
+++ b/gr-uhd/lib/uhd_multi_usrp_sink.h
@@ -66,49 +66,55 @@ public:
      * \param freq the desired frequency in Hz
      * \return a tune result with the actual frequencies
      */
-    virtual uhd::tune_result_t set_center_freq(double freq, size_t chan = 0) = 0;
+    virtual uhd::tune_result_t set_center_freq(double freq, size_t chan) = 0;
 
     /*!
      * Get the tunable frequency range.
      * \return the frequency range in Hz
      */
-    virtual uhd::freq_range_t get_freq_range(size_t chan = 0) = 0;
+    virtual uhd::freq_range_t get_freq_range(size_t chan) = 0;
 
     /*!
      * Set the gain for the dboard.
      * \param gain the gain in dB
      */
-    virtual void set_gain(float gain, size_t chan = 0) = 0;
+    virtual void set_gain(float gain, size_t chan) = 0;
 
     /*!
      * Get the actual dboard gain setting.
      * \return the actual gain in dB
      */
-    virtual float get_gain(size_t chan = 0) = 0;
+    virtual float get_gain(size_t chan) = 0;
 
     /*!
      * Get the settable gain range.
      * \return the gain range in dB
      */
-    virtual uhd::gain_range_t get_gain_range(size_t chan = 0) = 0;
+    virtual uhd::gain_range_t get_gain_range(size_t chan) = 0;
 
     /*!
      * Set the antenna to use.
      * \param ant the antenna string
      */
-    virtual void set_antenna(const std::string &ant, size_t chan = 0) = 0;
+    virtual void set_antenna(const std::string &ant, size_t chan) = 0;
 
     /*!
      * Get the antenna in use.
      * \return the antenna string
      */
-    virtual std::string get_antenna(size_t chan = 0) = 0;
+    virtual std::string get_antenna(size_t chan) = 0;
 
     /*!
      * Get a list of possible antennas.
      * \return a vector of antenna strings
      */
-    virtual std::vector<std::string> get_antennas(size_t chan = 0) = 0;
+    virtual std::vector<std::string> get_antennas(size_t chan) = 0;
+
+    /*!
+     * Set the subdevice bandpass filter.
+     * \param bandwidth the filter bandwidth in Hz
+     */
+    virtual void set_bandwidth(double bandwidth, size_t chan) = 0;
 
     /*!
      * Set the clock configuration.
diff --git a/gr-uhd/lib/uhd_multi_usrp_source.cc b/gr-uhd/lib/uhd_multi_usrp_source.cc
index 63dad1a25e..226e8b86fb 100644
--- a/gr-uhd/lib/uhd_multi_usrp_source.cc
+++ b/gr-uhd/lib/uhd_multi_usrp_source.cc
@@ -96,6 +96,10 @@ public:
         return _dev->get_rx_antennas(chan);
     }
 
+    void set_bandwidth(double bandwidth, size_t chan){
+        return _dev->set_rx_bandwidth(bandwidth, chan);
+    }
+
     void set_clock_config(const uhd::clock_config_t &clock_config, size_t mboard){
         return _dev->set_clock_config(clock_config, mboard);
     }
diff --git a/gr-uhd/lib/uhd_multi_usrp_source.h b/gr-uhd/lib/uhd_multi_usrp_source.h
index 36c4b6fdcc..483ce098cf 100644
--- a/gr-uhd/lib/uhd_multi_usrp_source.h
+++ b/gr-uhd/lib/uhd_multi_usrp_source.h
@@ -66,49 +66,55 @@ public:
      * \param freq the desired frequency in Hz
      * \return a tune result with the actual frequencies
      */
-    virtual uhd::tune_result_t set_center_freq(double freq, size_t chan = 0) = 0;
+    virtual uhd::tune_result_t set_center_freq(double freq, size_t chan) = 0;
 
     /*!
      * Get the tunable frequency range.
      * \return the frequency range in Hz
      */
-    virtual uhd::freq_range_t get_freq_range(size_t chan = 0) = 0;
+    virtual uhd::freq_range_t get_freq_range(size_t chan) = 0;
 
     /*!
      * Set the gain for the dboard.
      * \param gain the gain in dB
      */
-    virtual void set_gain(float gain, size_t chan = 0) = 0;
+    virtual void set_gain(float gain, size_t chan) = 0;
 
     /*!
      * Get the actual dboard gain setting.
      * \return the actual gain in dB
      */
-    virtual float get_gain(size_t chan = 0) = 0;
+    virtual float get_gain(size_t chan) = 0;
 
     /*!
      * Get the settable gain range.
      * \return the gain range in dB
      */
-    virtual uhd::gain_range_t get_gain_range(size_t chan = 0) = 0;
+    virtual uhd::gain_range_t get_gain_range(size_t chan) = 0;
 
     /*!
      * Set the antenna to use.
      * \param ant the antenna string
      */
-    virtual void set_antenna(const std::string &ant, size_t chan = 0) = 0;
+    virtual void set_antenna(const std::string &ant, size_t chan) = 0;
 
     /*!
      * Get the antenna in use.
      * \return the antenna string
      */
-    virtual std::string get_antenna(size_t chan = 0) = 0;
+    virtual std::string get_antenna(size_t chan) = 0;
 
     /*!
      * Get a list of possible antennas.
      * \return a vector of antenna strings
      */
-    virtual std::vector<std::string> get_antennas(size_t chan = 0) = 0;
+    virtual std::vector<std::string> get_antennas(size_t chan) = 0;
+
+    /*!
+     * Set the subdevice bandpass filter.
+     * \param bandwidth the filter bandwidth in Hz
+     */
+    virtual void set_bandwidth(double bandwidth, size_t chan) = 0;
 
     /*!
      * Set the clock configuration.
diff --git a/gr-uhd/lib/uhd_single_usrp_sink.cc b/gr-uhd/lib/uhd_single_usrp_sink.cc
index 4297a83ffa..24981a59af 100644
--- a/gr-uhd/lib/uhd_single_usrp_sink.cc
+++ b/gr-uhd/lib/uhd_single_usrp_sink.cc
@@ -95,6 +95,10 @@ public:
         return _dev->get_tx_antennas(chan);
     }
 
+    void set_bandwidth(double bandwidth, size_t chan){
+        return _dev->set_tx_bandwidth(bandwidth, chan);
+    }
+
     void set_clock_config(const uhd::clock_config_t &clock_config){
         return _dev->set_clock_config(clock_config);
     }
diff --git a/gr-uhd/lib/uhd_single_usrp_sink.h b/gr-uhd/lib/uhd_single_usrp_sink.h
index e83bb6ded8..0987685f47 100644
--- a/gr-uhd/lib/uhd_single_usrp_sink.h
+++ b/gr-uhd/lib/uhd_single_usrp_sink.h
@@ -110,6 +110,12 @@ public:
      */
     virtual std::vector<std::string> get_antennas(size_t chan = 0) = 0;
 
+    /*!
+     * Set the subdevice bandpass filter.
+     * \param bandwidth the filter bandwidth in Hz
+     */
+    virtual void set_bandwidth(double bandwidth, size_t chan = 0) = 0;
+
     /*!
      * Set the clock configuration.
      * \param clock_config the new configuration
diff --git a/gr-uhd/lib/uhd_single_usrp_source.cc b/gr-uhd/lib/uhd_single_usrp_source.cc
index 27a788d960..f7c7fc8396 100644
--- a/gr-uhd/lib/uhd_single_usrp_source.cc
+++ b/gr-uhd/lib/uhd_single_usrp_source.cc
@@ -96,6 +96,10 @@ public:
         return _dev->get_rx_antennas(chan);
     }
 
+    void set_bandwidth(double bandwidth, size_t chan){
+        return _dev->set_rx_bandwidth(bandwidth, chan);
+    }
+
     void set_clock_config(const uhd::clock_config_t &clock_config){
         return _dev->set_clock_config(clock_config);
     }
diff --git a/gr-uhd/lib/uhd_single_usrp_source.h b/gr-uhd/lib/uhd_single_usrp_source.h
index c323fbd7ed..1b71d2ad54 100644
--- a/gr-uhd/lib/uhd_single_usrp_source.h
+++ b/gr-uhd/lib/uhd_single_usrp_source.h
@@ -110,6 +110,12 @@ public:
      */
     virtual std::vector<std::string> get_antennas(size_t chan = 0) = 0;
 
+    /*!
+     * Set the subdevice bandpass filter.
+     * \param bandwidth the filter bandwidth in Hz
+     */
+    virtual void set_bandwidth(double bandwidth, size_t chan = 0) = 0;
+
     /*!
      * Set the clock configuration.
      * \param clock_config the new configuration
-- 
cgit v1.2.3


From 13970fed3ae4114689d08bf01cee8b8706d316a5 Mon Sep 17 00:00:00 2001
From: Josh Blum <josh@joshknows.com>
Date: Wed, 20 Oct 2010 12:24:04 -0700
Subject: uhd: added channel param to docstrings

---
 gr-uhd/lib/uhd_multi_usrp_sink.h    | 11 +++++++++++
 gr-uhd/lib/uhd_multi_usrp_source.h  | 11 +++++++++++
 gr-uhd/lib/uhd_single_usrp_sink.h   |  9 +++++++++
 gr-uhd/lib/uhd_single_usrp_source.h |  9 +++++++++
 4 files changed, 40 insertions(+)

(limited to 'gr-uhd/lib')

diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.h b/gr-uhd/lib/uhd_multi_usrp_sink.h
index 0ccc0fe6c5..a94e7bd5ae 100644
--- a/gr-uhd/lib/uhd_multi_usrp_sink.h
+++ b/gr-uhd/lib/uhd_multi_usrp_sink.h
@@ -45,6 +45,7 @@ public:
     /*!
      * Set the subdevice specification.
      * \param spec the subdev spec markup string
+     * \param mboard the motherboard index 0 to M-1
      */
     virtual void set_subdev_spec(const std::string &spec, size_t mboard) = 0;
 
@@ -64,12 +65,14 @@ public:
     /*!
      * Tune the usrp device to the desired center frequency.
      * \param freq the desired frequency in Hz
+     * \param chan the channel index 0 to N-1
      * \return a tune result with the actual frequencies
      */
     virtual uhd::tune_result_t set_center_freq(double freq, size_t chan) = 0;
 
     /*!
      * Get the tunable frequency range.
+     * \param chan the channel index 0 to N-1
      * \return the frequency range in Hz
      */
     virtual uhd::freq_range_t get_freq_range(size_t chan) = 0;
@@ -77,17 +80,20 @@ public:
     /*!
      * Set the gain for the dboard.
      * \param gain the gain in dB
+     * \param chan the channel index 0 to N-1
      */
     virtual void set_gain(float gain, size_t chan) = 0;
 
     /*!
      * Get the actual dboard gain setting.
+     * \param chan the channel index 0 to N-1
      * \return the actual gain in dB
      */
     virtual float get_gain(size_t chan) = 0;
 
     /*!
      * Get the settable gain range.
+     * \param chan the channel index 0 to N-1
      * \return the gain range in dB
      */
     virtual uhd::gain_range_t get_gain_range(size_t chan) = 0;
@@ -95,23 +101,27 @@ public:
     /*!
      * Set the antenna to use.
      * \param ant the antenna string
+     * \param chan the channel index 0 to N-1
      */
     virtual void set_antenna(const std::string &ant, size_t chan) = 0;
 
     /*!
      * Get the antenna in use.
+     * \param chan the channel index 0 to N-1
      * \return the antenna string
      */
     virtual std::string get_antenna(size_t chan) = 0;
 
     /*!
      * Get a list of possible antennas.
+     * \param chan the channel index 0 to N-1
      * \return a vector of antenna strings
      */
     virtual std::vector<std::string> get_antennas(size_t chan) = 0;
 
     /*!
      * Set the subdevice bandpass filter.
+     * \param chan the channel index 0 to N-1
      * \param bandwidth the filter bandwidth in Hz
      */
     virtual void set_bandwidth(double bandwidth, size_t chan) = 0;
@@ -119,6 +129,7 @@ public:
     /*!
      * Set the clock configuration.
      * \param clock_config the new configuration
+     * \param mboard the motherboard index 0 to M-1
      */
     virtual void set_clock_config(const uhd::clock_config_t &clock_config, size_t mboard) = 0;
 
diff --git a/gr-uhd/lib/uhd_multi_usrp_source.h b/gr-uhd/lib/uhd_multi_usrp_source.h
index 483ce098cf..081c82ee64 100644
--- a/gr-uhd/lib/uhd_multi_usrp_source.h
+++ b/gr-uhd/lib/uhd_multi_usrp_source.h
@@ -45,6 +45,7 @@ public:
     /*!
      * Set the subdevice specification.
      * \param spec the subdev spec markup string
+     * \param mboard the motherboard index 0 to M-1
      */
     virtual void set_subdev_spec(const std::string &spec, size_t mboard) = 0;
 
@@ -64,12 +65,14 @@ public:
     /*!
      * Tune the usrp device to the desired center frequency.
      * \param freq the desired frequency in Hz
+     * \param chan the channel index 0 to N-1
      * \return a tune result with the actual frequencies
      */
     virtual uhd::tune_result_t set_center_freq(double freq, size_t chan) = 0;
 
     /*!
      * Get the tunable frequency range.
+     * \param chan the channel index 0 to N-1
      * \return the frequency range in Hz
      */
     virtual uhd::freq_range_t get_freq_range(size_t chan) = 0;
@@ -77,17 +80,20 @@ public:
     /*!
      * Set the gain for the dboard.
      * \param gain the gain in dB
+     * \param chan the channel index 0 to N-1
      */
     virtual void set_gain(float gain, size_t chan) = 0;
 
     /*!
      * Get the actual dboard gain setting.
+     * \param chan the channel index 0 to N-1
      * \return the actual gain in dB
      */
     virtual float get_gain(size_t chan) = 0;
 
     /*!
      * Get the settable gain range.
+     * \param chan the channel index 0 to N-1
      * \return the gain range in dB
      */
     virtual uhd::gain_range_t get_gain_range(size_t chan) = 0;
@@ -95,17 +101,20 @@ public:
     /*!
      * Set the antenna to use.
      * \param ant the antenna string
+     * \param chan the channel index 0 to N-1
      */
     virtual void set_antenna(const std::string &ant, size_t chan) = 0;
 
     /*!
      * Get the antenna in use.
+     * \param chan the channel index 0 to N-1
      * \return the antenna string
      */
     virtual std::string get_antenna(size_t chan) = 0;
 
     /*!
      * Get a list of possible antennas.
+     * \param chan the channel index 0 to N-1
      * \return a vector of antenna strings
      */
     virtual std::vector<std::string> get_antennas(size_t chan) = 0;
@@ -113,12 +122,14 @@ public:
     /*!
      * Set the subdevice bandpass filter.
      * \param bandwidth the filter bandwidth in Hz
+     * \param chan the channel index 0 to N-1
      */
     virtual void set_bandwidth(double bandwidth, size_t chan) = 0;
 
     /*!
      * Set the clock configuration.
      * \param clock_config the new configuration
+     * \param mboard the motherboard index 0 to M-1
      */
     virtual void set_clock_config(const uhd::clock_config_t &clock_config, size_t mboard) = 0;
 
diff --git a/gr-uhd/lib/uhd_single_usrp_sink.h b/gr-uhd/lib/uhd_single_usrp_sink.h
index 0987685f47..390667df9c 100644
--- a/gr-uhd/lib/uhd_single_usrp_sink.h
+++ b/gr-uhd/lib/uhd_single_usrp_sink.h
@@ -64,12 +64,14 @@ public:
     /*!
      * Tune the usrp device to the desired center frequency.
      * \param freq the desired frequency in Hz
+     * \param chan the channel index 0 to N-1
      * \return a tune result with the actual frequencies
      */
     virtual uhd::tune_result_t set_center_freq(double freq, size_t chan = 0) = 0;
 
     /*!
      * Get the tunable frequency range.
+     * \param chan the channel index 0 to N-1
      * \return the frequency range in Hz
      */
     virtual uhd::freq_range_t get_freq_range(size_t chan = 0) = 0;
@@ -77,17 +79,20 @@ public:
     /*!
      * Set the gain for the dboard.
      * \param gain the gain in dB
+     * \param chan the channel index 0 to N-1
      */
     virtual void set_gain(float gain, size_t chan = 0) = 0;
 
     /*!
      * Get the actual dboard gain setting.
+     * \param chan the channel index 0 to N-1
      * \return the actual gain in dB
      */
     virtual float get_gain(size_t chan = 0) = 0;
 
     /*!
      * Get the settable gain range.
+     * \param chan the channel index 0 to N-1
      * \return the gain range in dB
      */
     virtual uhd::gain_range_t get_gain_range(size_t chan = 0) = 0;
@@ -95,17 +100,20 @@ public:
     /*!
      * Set the antenna to use.
      * \param ant the antenna string
+     * \param chan the channel index 0 to N-1
      */
     virtual void set_antenna(const std::string &ant, size_t chan = 0) = 0;
 
     /*!
      * Get the antenna in use.
+     * \param chan the channel index 0 to N-1
      * \return the antenna string
      */
     virtual std::string get_antenna(size_t chan = 0) = 0;
 
     /*!
      * Get a list of possible antennas.
+     * \param chan the channel index 0 to N-1
      * \return a vector of antenna strings
      */
     virtual std::vector<std::string> get_antennas(size_t chan = 0) = 0;
@@ -113,6 +121,7 @@ public:
     /*!
      * Set the subdevice bandpass filter.
      * \param bandwidth the filter bandwidth in Hz
+     * \param chan the channel index 0 to N-1
      */
     virtual void set_bandwidth(double bandwidth, size_t chan = 0) = 0;
 
diff --git a/gr-uhd/lib/uhd_single_usrp_source.h b/gr-uhd/lib/uhd_single_usrp_source.h
index 1b71d2ad54..415c52e9a5 100644
--- a/gr-uhd/lib/uhd_single_usrp_source.h
+++ b/gr-uhd/lib/uhd_single_usrp_source.h
@@ -64,12 +64,14 @@ public:
     /*!
      * Tune the usrp device to the desired center frequency.
      * \param freq the desired frequency in Hz
+     * \param chan the channel index 0 to N-1
      * \return a tune result with the actual frequencies
      */
     virtual uhd::tune_result_t set_center_freq(double freq, size_t chan = 0) = 0;
 
     /*!
      * Get the tunable frequency range.
+     * \param chan the channel index 0 to N-1
      * \return the frequency range in Hz
      */
     virtual uhd::freq_range_t get_freq_range(size_t chan = 0) = 0;
@@ -77,17 +79,20 @@ public:
     /*!
      * Set the gain for the dboard.
      * \param gain the gain in dB
+     * \param chan the channel index 0 to N-1
      */
     virtual void set_gain(float gain, size_t chan = 0) = 0;
 
     /*!
      * Get the actual dboard gain setting.
+     * \param chan the channel index 0 to N-1
      * \return the actual gain in dB
      */
     virtual float get_gain(size_t chan = 0) = 0;
 
     /*!
      * Get the settable gain range.
+     * \param chan the channel index 0 to N-1
      * \return the gain range in dB
      */
     virtual uhd::gain_range_t get_gain_range(size_t chan = 0) = 0;
@@ -95,17 +100,20 @@ public:
     /*!
      * Set the antenna to use.
      * \param ant the antenna string
+     * \param chan the channel index 0 to N-1
      */
     virtual void set_antenna(const std::string &ant, size_t chan = 0) = 0;
 
     /*!
      * Get the antenna in use.
+     * \param chan the channel index 0 to N-1
      * \return the antenna string
      */
     virtual std::string get_antenna(size_t chan = 0) = 0;
 
     /*!
      * Get a list of possible antennas.
+     * \param chan the channel index 0 to N-1
      * \return a vector of antenna strings
      */
     virtual std::vector<std::string> get_antennas(size_t chan = 0) = 0;
@@ -113,6 +121,7 @@ public:
     /*!
      * Set the subdevice bandpass filter.
      * \param bandwidth the filter bandwidth in Hz
+     * \param chan the channel index 0 to N-1
      */
     virtual void set_bandwidth(double bandwidth, size_t chan = 0) = 0;
 
-- 
cgit v1.2.3


From 5a2de999da86d48cd7f005d08cc48965cb8c7a65 Mon Sep 17 00:00:00 2001
From: Josh Blum <josh@joshknows.com>
Date: Mon, 25 Oct 2010 16:22:05 -0700
Subject: uhd: move tune functions to tune_request and provide wrapper for
 simple case

---
 gr-uhd/lib/uhd_multi_usrp_sink.cc    |  7 ++++---
 gr-uhd/lib/uhd_multi_usrp_sink.h     | 16 +++++++++++++++-
 gr-uhd/lib/uhd_multi_usrp_source.cc  |  7 ++++---
 gr-uhd/lib/uhd_multi_usrp_source.h   | 16 +++++++++++++++-
 gr-uhd/lib/uhd_single_usrp_sink.cc   |  7 ++++---
 gr-uhd/lib/uhd_single_usrp_sink.h    | 16 +++++++++++++++-
 gr-uhd/lib/uhd_single_usrp_source.cc |  7 ++++---
 gr-uhd/lib/uhd_single_usrp_source.h  | 16 +++++++++++++++-
 gr-uhd/swig/uhd_swig.i               |  1 +
 9 files changed, 77 insertions(+), 16 deletions(-)

(limited to 'gr-uhd/lib')

diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.cc b/gr-uhd/lib/uhd_multi_usrp_sink.cc
index b75a8303cb..ee16e2928d 100644
--- a/gr-uhd/lib/uhd_multi_usrp_sink.cc
+++ b/gr-uhd/lib/uhd_multi_usrp_sink.cc
@@ -62,9 +62,10 @@ public:
         return _dev->get_tx_rate();
     }
 
-    uhd::tune_result_t set_center_freq(double freq, size_t chan){
-        uhd::tune_result_t tr = _dev->set_tx_freq(freq, chan);
-        return tr;
+    uhd::tune_result_t set_center_freq(
+        const uhd::tune_request_t tune_request, size_t chan
+    ){
+        return _dev->set_tx_freq(tune_request, chan);
     }
 
     uhd::freq_range_t get_freq_range(size_t chan){
diff --git a/gr-uhd/lib/uhd_multi_usrp_sink.h b/gr-uhd/lib/uhd_multi_usrp_sink.h
index a94e7bd5ae..370e59d0e1 100644
--- a/gr-uhd/lib/uhd_multi_usrp_sink.h
+++ b/gr-uhd/lib/uhd_multi_usrp_sink.h
@@ -64,11 +64,25 @@ public:
 
     /*!
      * Tune the usrp device to the desired center frequency.
+     * \param tune_request the tune request instructions
+     * \param chan the channel index 0 to N-1
+     * \return a tune result with the actual frequencies
+     */
+    virtual uhd::tune_result_t set_center_freq(
+        const uhd::tune_request_t tune_request, size_t chan
+    ) = 0;
+
+    /*!
+     * Tune the usrp device to the desired center frequency.
+     * This is a wrapper around set center freq so that in this case,
+     * the user can pass a single frequency in the call through swig.
      * \param freq the desired frequency in Hz
      * \param chan the channel index 0 to N-1
      * \return a tune result with the actual frequencies
      */
-    virtual uhd::tune_result_t set_center_freq(double freq, size_t chan) = 0;
+    uhd::tune_result_t set_center_freq(double freq, size_t chan){
+        return set_center_freq(uhd::tune_request_t(freq), chan);
+    }
 
     /*!
      * Get the tunable frequency range.
diff --git a/gr-uhd/lib/uhd_multi_usrp_source.cc b/gr-uhd/lib/uhd_multi_usrp_source.cc
index 226e8b86fb..029a763e33 100644
--- a/gr-uhd/lib/uhd_multi_usrp_source.cc
+++ b/gr-uhd/lib/uhd_multi_usrp_source.cc
@@ -63,9 +63,10 @@ public:
         return _dev->get_rx_rate();
     }
 
-    uhd::tune_result_t set_center_freq(double freq, size_t chan){
-        uhd::tune_result_t tr = _dev->set_rx_freq(freq, chan);
-        return tr;
+    uhd::tune_result_t set_center_freq(
+        const uhd::tune_request_t tune_request, size_t chan
+    ){
+        return _dev->set_rx_freq(tune_request, chan);
     }
 
     uhd::freq_range_t get_freq_range(size_t chan){
diff --git a/gr-uhd/lib/uhd_multi_usrp_source.h b/gr-uhd/lib/uhd_multi_usrp_source.h
index 081c82ee64..b3cbdae1f6 100644
--- a/gr-uhd/lib/uhd_multi_usrp_source.h
+++ b/gr-uhd/lib/uhd_multi_usrp_source.h
@@ -64,11 +64,25 @@ public:
 
     /*!
      * Tune the usrp device to the desired center frequency.
+     * \param tune_request the tune request instructions
+     * \param chan the channel index 0 to N-1
+     * \return a tune result with the actual frequencies
+     */
+    virtual uhd::tune_result_t set_center_freq(
+        const uhd::tune_request_t tune_request, size_t chan
+    ) = 0;
+
+    /*!
+     * Tune the usrp device to the desired center frequency.
+     * This is a wrapper around set center freq so that in this case,
+     * the user can pass a single frequency in the call through swig.
      * \param freq the desired frequency in Hz
      * \param chan the channel index 0 to N-1
      * \return a tune result with the actual frequencies
      */
-    virtual uhd::tune_result_t set_center_freq(double freq, size_t chan) = 0;
+    uhd::tune_result_t set_center_freq(double freq, size_t chan){
+        return set_center_freq(uhd::tune_request_t(freq), chan);
+    }
 
     /*!
      * Get the tunable frequency range.
diff --git a/gr-uhd/lib/uhd_single_usrp_sink.cc b/gr-uhd/lib/uhd_single_usrp_sink.cc
index 24981a59af..622f506b55 100644
--- a/gr-uhd/lib/uhd_single_usrp_sink.cc
+++ b/gr-uhd/lib/uhd_single_usrp_sink.cc
@@ -62,9 +62,10 @@ public:
         return _dev->get_tx_rate();
     }
 
-    uhd::tune_result_t set_center_freq(double freq, size_t chan){
-        uhd::tune_result_t tr = _dev->set_tx_freq(freq, chan);
-        return tr;
+    uhd::tune_result_t set_center_freq(
+        const uhd::tune_request_t tune_request, size_t chan
+    ){
+        return _dev->set_tx_freq(tune_request, chan);
     }
 
     uhd::freq_range_t get_freq_range(size_t chan){
diff --git a/gr-uhd/lib/uhd_single_usrp_sink.h b/gr-uhd/lib/uhd_single_usrp_sink.h
index 390667df9c..a4c4e6452e 100644
--- a/gr-uhd/lib/uhd_single_usrp_sink.h
+++ b/gr-uhd/lib/uhd_single_usrp_sink.h
@@ -63,11 +63,25 @@ public:
 
     /*!
      * Tune the usrp device to the desired center frequency.
+     * \param tune_request the tune request instructions
+     * \param chan the channel index 0 to N-1
+     * \return a tune result with the actual frequencies
+     */
+    virtual uhd::tune_result_t set_center_freq(
+        const uhd::tune_request_t tune_request, size_t chan
+    ) = 0;
+
+    /*!
+     * Tune the usrp device to the desired center frequency.
+     * This is a wrapper around set center freq so that in this case,
+     * the user can pass a single frequency in the call through swig.
      * \param freq the desired frequency in Hz
      * \param chan the channel index 0 to N-1
      * \return a tune result with the actual frequencies
      */
-    virtual uhd::tune_result_t set_center_freq(double freq, size_t chan = 0) = 0;
+    uhd::tune_result_t set_center_freq(double freq, size_t chan){
+        return set_center_freq(uhd::tune_request_t(freq), chan);
+    }
 
     /*!
      * Get the tunable frequency range.
diff --git a/gr-uhd/lib/uhd_single_usrp_source.cc b/gr-uhd/lib/uhd_single_usrp_source.cc
index f7c7fc8396..907e8be542 100644
--- a/gr-uhd/lib/uhd_single_usrp_source.cc
+++ b/gr-uhd/lib/uhd_single_usrp_source.cc
@@ -63,9 +63,10 @@ public:
         return _dev->get_rx_rate();
     }
 
-    uhd::tune_result_t set_center_freq(double freq, size_t chan){
-        uhd::tune_result_t tr = _dev->set_rx_freq(freq, chan);
-        return tr;
+    uhd::tune_result_t set_center_freq(
+        const uhd::tune_request_t tune_request, size_t chan
+    ){
+        return _dev->set_rx_freq(tune_request, chan);
     }
 
     uhd::freq_range_t get_freq_range(size_t chan){
diff --git a/gr-uhd/lib/uhd_single_usrp_source.h b/gr-uhd/lib/uhd_single_usrp_source.h
index 415c52e9a5..495f8c6117 100644
--- a/gr-uhd/lib/uhd_single_usrp_source.h
+++ b/gr-uhd/lib/uhd_single_usrp_source.h
@@ -63,11 +63,25 @@ public:
 
     /*!
      * Tune the usrp device to the desired center frequency.
+     * \param tune_request the tune request instructions
+     * \param chan the channel index 0 to N-1
+     * \return a tune result with the actual frequencies
+     */
+    virtual uhd::tune_result_t set_center_freq(
+        const uhd::tune_request_t tune_request, size_t chan
+    ) = 0;
+
+    /*!
+     * Tune the usrp device to the desired center frequency.
+     * This is a wrapper around set center freq so that in this case,
+     * the user can pass a single frequency in the call through swig.
      * \param freq the desired frequency in Hz
      * \param chan the channel index 0 to N-1
      * \return a tune result with the actual frequencies
      */
-    virtual uhd::tune_result_t set_center_freq(double freq, size_t chan = 0) = 0;
+    uhd::tune_result_t set_center_freq(double freq, size_t chan){
+        return set_center_freq(uhd::tune_request_t(freq), chan);
+    }
 
     /*!
      * Get the tunable frequency range.
diff --git a/gr-uhd/swig/uhd_swig.i b/gr-uhd/swig/uhd_swig.i
index 5b3b524720..d332bb6171 100644
--- a/gr-uhd/swig/uhd_swig.i
+++ b/gr-uhd/swig/uhd_swig.i
@@ -69,6 +69,7 @@ namespace std {
 ////////////////////////////////////////////////////////////////////////
 %include <uhd/config.hpp>
 %include <uhd/types/ranges.hpp>
+%include <uhd/types/tune_request.hpp>
 %include <uhd/types/tune_result.hpp>
 %include <uhd/types/io_type.hpp>
 %include <uhd/types/time_spec.hpp>
-- 
cgit v1.2.3