summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohnathan Corgan2010-05-21 18:12:41 -0700
committerJohnathan Corgan2010-05-21 18:12:41 -0700
commit16c0a87dc5c53ca28071b76f50b31317d4c519f1 (patch)
tree54b06374c5a9640f95a19977d4b0b4acd91211b0
parent58a6e6c74dcc85979682f029ccbb6039cf20ae56 (diff)
parent2c4bb0b5ea22ed73f3de6cac8a27083d950879bb (diff)
downloadgnuradio-16c0a87dc5c53ca28071b76f50b31317d4c519f1.tar.gz
gnuradio-16c0a87dc5c53ca28071b76f50b31317d4c519f1.tar.bz2
gnuradio-16c0a87dc5c53ca28071b76f50b31317d4c519f1.zip
Merge remote branch 'jblum/uhd' into next
* jblum/uhd: using the send and recv full buffer modes, avoids extra loop in implementation Added call to get access to the underlying uhd simple usrp object. added docs to uhd grc blocks, added pkg config path to make support easier typo fix, called variable ant, not antenna added to uhd grc files, also removed warning for grc generator with uhd blocks added more access methods to uhd source and sink fix for paradigm shift Use simple usrp from uhd. gr-uhd working with io type added swig includes and tune result return using new streaming api added set center freq call Added samp rate param and using the simple device from uhd removed timeout from here Got the source and sink working with current uhd. Added the uhd simple sink lib block, swig wrapper, grc wrapper. using samples prop, added unchecked in files for utils and grc rx wrapper recv noise with uhd Created simple source (with nothing in it) and some swig build stuff. Created gr uhd skeleton build.
-rw-r--r--config/grc_gr_uhd.m447
-rw-r--r--configure.ac1
-rw-r--r--gr-uhd/.gitignore2
-rw-r--r--gr-uhd/Makefile.am29
-rw-r--r--gr-uhd/apps/.gitignore2
-rw-r--r--gr-uhd/apps/Makefile.am22
-rw-r--r--gr-uhd/grc/.gitignore2
-rw-r--r--gr-uhd/grc/Makefile.am28
-rw-r--r--gr-uhd/grc/uhd_simple_sink.xml93
-rw-r--r--gr-uhd/grc/uhd_simple_source.xml93
-rw-r--r--gr-uhd/lib/.gitignore2
-rw-r--r--gr-uhd/lib/Makefile.am45
-rw-r--r--gr-uhd/lib/uhd_simple_sink.cc130
-rw-r--r--gr-uhd/lib/uhd_simple_sink.h114
-rw-r--r--gr-uhd/lib/uhd_simple_source.cc144
-rw-r--r--gr-uhd/lib/uhd_simple_source.h114
-rw-r--r--gr-uhd/lib/utils.cc37
-rw-r--r--gr-uhd/lib/utils.h28
-rw-r--r--gr-uhd/swig/.gitignore4
-rw-r--r--gr-uhd/swig/Makefile.am69
-rw-r--r--gr-uhd/swig/Makefile.swig.gen259
-rw-r--r--gr-uhd/swig/__init__.py28
-rw-r--r--gr-uhd/swig/uhd_swig.i39
-rw-r--r--grc/python/Generator.py2
24 files changed, 1333 insertions, 1 deletions
diff --git a/config/grc_gr_uhd.m4 b/config/grc_gr_uhd.m4
new file mode 100644
index 000000000..870a8abc6
--- /dev/null
+++ b/config/grc_gr_uhd.m4
@@ -0,0 +1,47 @@
+dnl Copyright 2010 Free Software Foundation, Inc.
+dnl
+dnl This file is part of GNU Radio
+dnl
+dnl GNU Radio is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 3, or (at your option)
+dnl any later version.
+dnl
+dnl GNU Radio is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with GNU Radio; see the file COPYING. If not, write to
+dnl the Free Software Foundation, Inc., 51 Franklin Street,
+dnl Boston, MA 02110-1301, USA.
+
+AC_DEFUN([GRC_GR_UHD],[
+ GRC_ENABLE(gr-uhd)
+
+ dnl Dont do gr-uhd if gnuradio-core skipped
+ GRC_CHECK_DEPENDENCY(gr-uhd, gnuradio-core)
+
+ if test $passed = yes; then
+ #by default, cmake likes to install the uhd.pc file here
+ #so lets make life easier for everybody and add this path
+ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
+ PKG_CHECK_MODULES(
+ [UHD], [uhd], [],
+ [passed=no; AC_MSG_RESULT([gr-uhd requires libuhd])]
+ )
+ AC_SUBST(UHD_CFLAGS)
+ AC_SUBST(UHD_LIBS)
+ fi
+
+ AC_CONFIG_FILES([ \
+ gr-uhd/Makefile \
+ gr-uhd/apps/Makefile \
+ gr-uhd/grc/Makefile \
+ gr-uhd/lib/Makefile \
+ gr-uhd/swig/Makefile \
+ ])
+
+ GRC_BUILD_CONDITIONAL(gr-uhd)
+])
diff --git a/configure.ac b/configure.ac
index 6d70e03de..124485bea 100644
--- a/configure.ac
+++ b/configure.ac
@@ -368,6 +368,7 @@ GRC_GR_SOUNDER dnl this must come after GRC_USRP
GRC_GR_UTILS dnl this must come after GRC_GR_WXGUI
GRC_GNURADIO_EXAMPLES dnl must come after all GRC_GR_*
GRC_GRC
+GRC_GR_UHD
GRC_DOCS dnl must be last
# Each component is now either to be built, was skipped, will be
diff --git a/gr-uhd/.gitignore b/gr-uhd/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-uhd/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-uhd/Makefile.am b/gr-uhd/Makefile.am
new file mode 100644
index 000000000..83190a1d0
--- /dev/null
+++ b/gr-uhd/Makefile.am
@@ -0,0 +1,29 @@
+#
+# 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 $(top_srcdir)/Makefile.common
+
+SUBDIRS = lib apps
+
+if PYTHON
+SUBDIRS += swig grc
+endif
+
diff --git a/gr-uhd/apps/.gitignore b/gr-uhd/apps/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-uhd/apps/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-uhd/apps/Makefile.am b/gr-uhd/apps/Makefile.am
new file mode 100644
index 000000000..b78d07ee8
--- /dev/null
+++ b/gr-uhd/apps/Makefile.am
@@ -0,0 +1,22 @@
+#
+# 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 $(top_srcdir)/Makefile.common
diff --git a/gr-uhd/grc/.gitignore b/gr-uhd/grc/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-uhd/grc/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-uhd/grc/Makefile.am b/gr-uhd/grc/Makefile.am
new file mode 100644
index 000000000..61eb32770
--- /dev/null
+++ b/gr-uhd/grc/Makefile.am
@@ -0,0 +1,28 @@
+#
+# 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 $(top_srcdir)/Makefile.common
+
+grcblocksdir = $(grc_blocksdir)
+
+dist_grcblocks_DATA = \
+ uhd_simple_source.xml \
+ uhd_simple_sink.xml
diff --git a/gr-uhd/grc/uhd_simple_sink.xml b/gr-uhd/grc/uhd_simple_sink.xml
new file mode 100644
index 000000000..2992f650e
--- /dev/null
+++ b/gr-uhd/grc/uhd_simple_sink.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## UHD Simple Sink
+###################################################
+ -->
+<block>
+ <name>UHD Simple Sink</name>
+ <key>uhd_simple_sink</key>
+ <category>UHD</category>
+ <import>from gnuradio import uhd</import>
+ <make>uhd.simple_sink($args, uhd.io_type_t.$type.type)
+self.$(id).set_samp_rate($samp_rate)
+self.$(id).set_center_freq($center_freq)
+self.$(id).set_gain($gain)
+#if $ant()
+self.$(id).set_antenna($ant)
+#end if</make>
+ <callback>set_samp_rate($samp_rate)</callback>
+ <callback>set_center_freq($center_freq)</callback>
+ <callback>set_gain($gain)</callback>
+ <callback>set_antenna($ant)</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>Args</name>
+ <key>args</key>
+ <value></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>Center Freq (Hz)</name>
+ <key>center_freq</key>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Gain (dB)</name>
+ <key>gain</key>
+ <value>0</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Antenna</name>
+ <key>ant</key>
+ <type>string</type>
+ <hide>#if $ant() == '' then 'part' else 'none'#</hide>
+ </param>
+ <sink>
+ <name>out</name>
+ <type>$type</type>
+ <vlen>$type.vlen</vlen>
+ </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_simple_source.xml b/gr-uhd/grc/uhd_simple_source.xml
new file mode 100644
index 000000000..ecd963928
--- /dev/null
+++ b/gr-uhd/grc/uhd_simple_source.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## UHD Simple Source
+###################################################
+ -->
+<block>
+ <name>UHD Simple Source</name>
+ <key>uhd_simple_source</key>
+ <category>UHD</category>
+ <import>from gnuradio import uhd</import>
+ <make>uhd.simple_source($args, uhd.io_type_t.$type.type)
+self.$(id).set_samp_rate($samp_rate)
+self.$(id).set_center_freq($center_freq)
+self.$(id).set_gain($gain)
+#if $ant()
+self.$(id).set_antenna($ant)
+#end if</make>
+ <callback>set_samp_rate($samp_rate)</callback>
+ <callback>set_center_freq($center_freq)</callback>
+ <callback>set_gain($gain)</callback>
+ <callback>set_antenna($ant)</callback>
+ <param>
+ <name>Output 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>Args</name>
+ <key>args</key>
+ <value></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>Center Freq (Hz)</name>
+ <key>center_freq</key>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Gain (dB)</name>
+ <key>gain</key>
+ <value>0</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Antenna</name>
+ <key>ant</key>
+ <type>string</type>
+ <hide>#if $ant() == '' then 'part' else 'none'#</hide>
+ </param>
+ <source>
+ <name>out</name>
+ <type>$type</type>
+ <vlen>$type.vlen</vlen>
+ </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 output 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/.gitignore b/gr-uhd/lib/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-uhd/lib/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-uhd/lib/Makefile.am b/gr-uhd/lib/Makefile.am
new file mode 100644
index 000000000..d4363406b
--- /dev/null
+++ b/gr-uhd/lib/Makefile.am
@@ -0,0 +1,45 @@
+#
+# 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 $(top_srcdir)/Makefile.common
+
+AM_CPPFLAGS = \
+ $(STD_DEFINES_AND_INCLUDES) \
+ $(WITH_INCLUDES) \
+ $(UHD_CFLAGS)
+
+lib_LTLIBRARIES = libgnuradio-uhd.la
+
+libgnuradio_uhd_la_SOURCES = \
+ utils.cc \
+ uhd_simple_source.cc \
+ uhd_simple_sink.cc
+
+libgnuradio_uhd_la_LIBADD = \
+ $(GNURADIO_CORE_LA) \
+ $(UHD_LIBS)
+
+grinclude_HEADERS = \
+ uhd_simple_source.h \
+ uhd_simple_sink.h
+
+noinst_HEADERS = \
+ utils.h
diff --git a/gr-uhd/lib/uhd_simple_sink.cc b/gr-uhd/lib/uhd_simple_sink.cc
new file mode 100644
index 000000000..ccec0e29c
--- /dev/null
+++ b/gr-uhd/lib/uhd_simple_sink.cc
@@ -0,0 +1,130 @@
+/* -*- 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 <uhd_simple_sink.h>
+#include <gr_io_signature.h>
+#include <stdexcept>
+#include "utils.h"
+
+/***********************************************************************
+ * UHD Sink
+ **********************************************************************/
+uhd_simple_sink::uhd_simple_sink(gr_io_signature_sptr sig)
+:gr_sync_block("uhd sink", sig, gr_make_io_signature(0, 0, 0)){
+ /* NOP */
+}
+
+/***********************************************************************
+ * UHD Sink Impl
+ **********************************************************************/
+class uhd_simple_sink_impl : public uhd_simple_sink{
+public:
+ uhd_simple_sink_impl(
+ const std::string &args,
+ const uhd::io_type_t &type
+ ) : uhd_simple_sink(gr_make_io_signature(1, 1, type.size)), _type(type)
+ {
+ _dev = uhd::usrp::simple_usrp::make(args);
+ }
+
+ ~uhd_simple_sink_impl(void){
+ //NOP
+ }
+
+ void set_samp_rate(double rate){
+ _dev->set_tx_rate(rate);
+ do_samp_rate_error_message(rate, get_samp_rate());
+ }
+
+ double get_samp_rate(void){
+ return _dev->get_tx_rate();
+ }
+
+ uhd::tune_result_t set_center_freq(double freq){
+ return _dev->set_tx_freq(freq);
+ }
+
+ uhd::freq_range_t get_freq_range(void){
+ return _dev->get_tx_freq_range();
+ }
+
+ void set_gain(float gain){
+ return _dev->set_tx_gain(gain);
+ }
+
+ float get_gain(void){
+ return _dev->get_tx_gain();
+ }
+
+ uhd::gain_range_t get_gain_range(void){
+ return _dev->get_tx_gain_range();
+ }
+
+ void set_antenna(const std::string &ant){
+ return _dev->set_tx_antenna(ant);
+ }
+
+ std::string get_antenna(void){
+ return _dev->get_tx_antenna();
+ }
+
+ std::vector<std::string> get_antennas(void){
+ return _dev->get_tx_antennas();
+ }
+
+ uhd::usrp::simple_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(
+ boost::asio::buffer(input_items[0], noutput_items*_type.size),
+ metadata, _type, uhd::device::SEND_MODE_FULL_BUFF
+ );
+ }
+
+protected:
+ uhd::usrp::simple_usrp::sptr _dev;
+ const uhd::io_type_t _type;
+};
+
+/***********************************************************************
+ * Make UHD Sink
+ **********************************************************************/
+boost::shared_ptr<uhd_simple_sink> uhd_make_simple_sink(
+ const std::string &args,
+ const uhd::io_type_t::tid_t &type
+){
+ return boost::shared_ptr<uhd_simple_sink>(
+ new uhd_simple_sink_impl(args, type)
+ );
+}
diff --git a/gr-uhd/lib/uhd_simple_sink.h b/gr-uhd/lib/uhd_simple_sink.h
new file mode 100644
index 000000000..9ecf51aea
--- /dev/null
+++ b/gr-uhd/lib/uhd_simple_sink.h
@@ -0,0 +1,114 @@
+/* -*- 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_UHD_SIMPLE_SINK_H
+#define INCLUDED_UHD_SIMPLE_SINK_H
+
+#include <gr_sync_block.h>
+#include <uhd/usrp/simple_usrp.hpp>
+
+class uhd_simple_sink;
+
+boost::shared_ptr<uhd_simple_sink> uhd_make_simple_sink(
+ const std::string &args,
+ const uhd::io_type_t::tid_t &type
+);
+
+class uhd_simple_sink : public gr_sync_block{
+public:
+
+ /*!
+ * Set the IO signature for this block.
+ * \param sig the input signature
+ */
+ uhd_simple_sink(gr_io_signature_sptr sig);
+
+ /*!
+ * 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) = 0;
+
+ /*!
+ * Get the tunable frequency range.
+ * \return the frequency range in Hz
+ */
+ virtual uhd::freq_range_t get_freq_range(void) = 0;
+
+ /*!
+ * Set the gain for the dboard.
+ * \param gain the gain in dB
+ */
+ virtual void set_gain(float gain) = 0;
+
+ /*!
+ * Get the actual dboard gain setting.
+ * \return the actual gain in dB
+ */
+ virtual float get_gain(void) = 0;
+
+ /*!
+ * Get the settable gain range.
+ * \return the gain range in dB
+ */
+ virtual uhd::gain_range_t get_gain_range(void) = 0;
+
+ /*!
+ * Set the antenna to use.
+ * \param ant the antenna string
+ */
+ virtual void set_antenna(const std::string &ant) = 0;
+
+ /*!
+ * Get the antenna in use.
+ * \return the antenna string
+ */
+ virtual std::string get_antenna(void) = 0;
+
+ /*!
+ * Get a list of possible antennas.
+ * \return a vector of antenna strings
+ */
+ virtual std::vector<std::string> get_antennas(void) = 0;
+
+ /*!
+ * Get access to the underlying uhd device object.
+ * \return the simple usrp device object
+ */
+ virtual uhd::usrp::simple_usrp::sptr get_device(void) = 0;
+};
+
+#endif /* INCLUDED_UHD_SIMPLE_SINK_H */
diff --git a/gr-uhd/lib/uhd_simple_source.cc b/gr-uhd/lib/uhd_simple_source.cc
new file mode 100644
index 000000000..76179c326
--- /dev/null
+++ b/gr-uhd/lib/uhd_simple_source.cc
@@ -0,0 +1,144 @@
+/* -*- 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 <uhd_simple_source.h>
+#include <gr_io_signature.h>
+#include <stdexcept>
+#include "utils.h"
+
+/***********************************************************************
+ * UHD Source
+ **********************************************************************/
+uhd_simple_source::uhd_simple_source(gr_io_signature_sptr sig)
+:gr_sync_block("uhd source", gr_make_io_signature(0, 0, 0), sig){
+ /* NOP */
+}
+
+/***********************************************************************
+ * UHD Source Impl
+ **********************************************************************/
+class uhd_simple_source_impl : public uhd_simple_source{
+public:
+ uhd_simple_source_impl(
+ const std::string &args,
+ const uhd::io_type_t &type
+ ) : uhd_simple_source(gr_make_io_signature(1, 1, type.size)), _type(type)
+ {
+ _dev = uhd::usrp::simple_usrp::make(args);
+ set_streaming(false);
+ }
+
+ ~uhd_simple_source_impl(void){
+ set_streaming(false);
+ }
+
+ void set_samp_rate(double rate){
+ _dev->set_rx_rate(rate);
+ do_samp_rate_error_message(rate, get_samp_rate());
+ }
+
+ double get_samp_rate(void){
+ return _dev->get_rx_rate();
+ }
+
+ uhd::tune_result_t set_center_freq(double freq){
+ return _dev->set_rx_freq(freq);
+ }
+
+ uhd::freq_range_t get_freq_range(void){
+ return _dev->get_rx_freq_range();
+ }
+
+ void set_gain(float gain){
+ return _dev->set_rx_gain(gain);
+ }
+
+ float get_gain(void){
+ return _dev->get_rx_gain();
+ }
+
+ uhd::gain_range_t get_gain_range(void){
+ return _dev->get_rx_gain_range();
+ }
+
+ void set_antenna(const std::string &ant){
+ return _dev->set_rx_antenna(ant);
+ }
+
+ std::string get_antenna(void){
+ return _dev->get_rx_antenna();
+ }
+
+ std::vector<std::string> get_antennas(void){
+ return _dev->get_rx_antennas();
+ }
+
+ uhd::usrp::simple_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
+ ){
+ //conditionally start streaming in the work call
+ //this prevents streaming before the runtime is ready
+ if (not _is_streaming) set_streaming(true);
+
+ uhd::rx_metadata_t metadata; //not passed out of this block
+
+ return _dev->get_device()->recv(
+ boost::asio::buffer(output_items[0], noutput_items*_type.size),
+ metadata, _type, uhd::device::RECV_MODE_FULL_BUFF
+ );
+ }
+
+private:
+ uhd::usrp::simple_usrp::sptr _dev;
+ const uhd::io_type_t _type;
+ bool _is_streaming;
+
+ void set_streaming(bool enb){
+ if (enb)
+ _dev->issue_stream_cmd(uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS);
+ else
+ _dev->issue_stream_cmd(uhd::stream_cmd_t::STREAM_MODE_STOP_CONTINUOUS);
+ _is_streaming = enb;
+ }
+};
+
+
+/***********************************************************************
+ * Make UHD Source
+ **********************************************************************/
+boost::shared_ptr<uhd_simple_source> uhd_make_simple_source(
+ const std::string &args,
+ const uhd::io_type_t::tid_t &type
+){
+ return boost::shared_ptr<uhd_simple_source>(
+ new uhd_simple_source_impl(args, type)
+ );
+}
diff --git a/gr-uhd/lib/uhd_simple_source.h b/gr-uhd/lib/uhd_simple_source.h
new file mode 100644
index 000000000..480bb4d3f
--- /dev/null
+++ b/gr-uhd/lib/uhd_simple_source.h
@@ -0,0 +1,114 @@
+/* -*- 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_UHD_SIMPLE_SOURCE_H
+#define INCLUDED_UHD_SIMPLE_SOURCE_H
+
+#include <gr_sync_block.h>
+#include <uhd/usrp/simple_usrp.hpp>
+
+class uhd_simple_source;
+
+boost::shared_ptr<uhd_simple_source> uhd_make_simple_source(
+ const std::string &args,
+ const uhd::io_type_t::tid_t &type
+);
+
+class uhd_simple_source : public gr_sync_block{
+public:
+
+ /*!
+ * Set the IO signature for this block.
+ * \param sig the output signature
+ */
+ uhd_simple_source(gr_io_signature_sptr sig);
+
+ /*!
+ * 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) = 0;
+
+ /*!
+ * Get the tunable frequency range.
+ * \return the frequency range in Hz
+ */
+ virtual uhd::freq_range_t get_freq_range(void) = 0;
+
+ /*!
+ * Set the gain for the dboard.
+ * \param gain the gain in dB
+ */
+ virtual void set_gain(float gain) = 0;
+
+ /*!
+ * Get the actual dboard gain setting.
+ * \return the actual gain in dB
+ */
+ virtual float get_gain(void) = 0;
+
+ /*!
+ * Get the settable gain range.
+ * \return the gain range in dB
+ */
+ virtual uhd::gain_range_t get_gain_range(void) = 0;
+
+ /*!
+ * Set the antenna to use.
+ * \param ant the antenna string
+ */
+ virtual void set_antenna(const std::string &ant) = 0;
+
+ /*!
+ * Get the antenna in use.
+ * \return the antenna string
+ */
+ virtual std::string get_antenna(void) = 0;
+
+ /*!
+ * Get a list of possible antennas.
+ * \return a vector of antenna strings
+ */
+ virtual std::vector<std::string> get_antennas(void) = 0;
+
+ /*!
+ * Get access to the underlying uhd device object.
+ * \return the simple usrp device object
+ */
+ virtual uhd::usrp::simple_usrp::sptr get_device(void) = 0;
+};
+
+#endif /* INCLUDED_UHD_SIMPLE_SOURCE_H */
diff --git a/gr-uhd/lib/utils.cc b/gr-uhd/lib/utils.cc
new file mode 100644
index 000000000..ddc36eb99
--- /dev/null
+++ b/gr-uhd/lib/utils.cc
@@ -0,0 +1,37 @@
+/* -*- 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 <boost/format.hpp>
+#include <iostream>
+#include <cmath>
+
+void do_samp_rate_error_message(double target_rate, double actual_rate){
+ static const double max_allowed_error = 1.0; //Sps
+ if (std::abs(target_rate - actual_rate) > max_allowed_error){
+ std::cerr << boost::format(
+ "The hardware does not support the requested sample rate:\n"
+ " Target sample rate: %f MSps\n"
+ " Actual sample rate: %f MSps\n"
+ ) % (target_rate/1e6) % (actual_rate/1e6) << std::endl;
+ }
+}
diff --git a/gr-uhd/lib/utils.h b/gr-uhd/lib/utils.h
new file mode 100644
index 000000000..cf349e5aa
--- /dev/null
+++ b/gr-uhd/lib/utils.h
@@ -0,0 +1,28 @@
+/* -*- 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
+
+void do_samp_rate_error_message(double target_rate, double actual_rate);
+
+#endif /* INCLUDED_NOINST_UTILS_H */
diff --git a/gr-uhd/swig/.gitignore b/gr-uhd/swig/.gitignore
new file mode 100644
index 000000000..02d25cc00
--- /dev/null
+++ b/gr-uhd/swig/.gitignore
@@ -0,0 +1,4 @@
+/uhd_swig.cc
+/uhd_swig.py
+/Makefile
+/Makefile.in
diff --git a/gr-uhd/swig/Makefile.am b/gr-uhd/swig/Makefile.am
new file mode 100644
index 000000000..183e6b587
--- /dev/null
+++ b/gr-uhd/swig/Makefile.am
@@ -0,0 +1,69 @@
+#
+# 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 $(top_srcdir)/Makefile.common
+
+AM_CPPFLAGS = \
+ $(STD_DEFINES_AND_INCLUDES) \
+ $(PYTHON_CPPFLAGS) \
+ $(WITH_INCLUDES) \
+ $(UHD_CFLAGS) \
+ -I$(top_srcdir)/gr-uhd/lib
+
+if PYTHON
+# ----------------------------------------------------------------
+# The SWIG library
+# TESTS = run_tests
+
+TOP_SWIG_IFILES = \
+ uhd_swig.i
+
+# Install so that they end up available as:
+# import gnuradio.uhd
+# This ends up at:
+# ${prefix}/lib/python${python_version}/site-packages/gnuradio/uhd
+uhd_swig_pythondir_category = \
+ gnuradio/uhd
+
+# additional libraries for linking with the SWIG-generated library
+uhd_swig_la_swig_libadd = \
+ $(top_builddir)/gr-uhd/lib/libgnuradio-uhd.la
+
+# additional Python files to be installed along with the SWIG-generated one
+uhd_swig_python = \
+ __init__.py
+
+# additional SWIG files to be installed
+uhd_swig_swiginclude_headers =
+
+include $(top_srcdir)/Makefile.swig
+
+# FIXME better way to set this?
+STD_SWIG_PYTHON_ARGS += \
+ $(UHD_CFLAGS) \
+ -I$(top_srcdir)/gr-uhd/lib
+
+# add some of the variables generated inside the Makefile.swig.gen
+BUILT_SOURCES = $(swig_built_sources)
+
+# Do not distribute the output of SWIG
+no_dist_files = $(swig_built_sources)
+endif
diff --git a/gr-uhd/swig/Makefile.swig.gen b/gr-uhd/swig/Makefile.swig.gen
new file mode 100644
index 000000000..3804461a4
--- /dev/null
+++ b/gr-uhd/swig/Makefile.swig.gen
@@ -0,0 +1,259 @@
+# -*- Makefile -*-
+#
+# Copyright 2009 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.
+#
+
+# Makefile.swig.gen for uhd_swig.i
+
+## Default install locations for these files:
+##
+## Default location for the Python directory is:
+## ${prefix}/lib/python${python_version}/site-packages/[category]/uhd_swig
+## Default location for the Python exec directory is:
+## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/uhd_swig
+##
+## The following can be overloaded to change the install location, but
+## this has to be done in the including Makefile.am -before-
+## Makefile.swig is included.
+
+uhd_swig_pythondir_category ?= gnuradio/uhd_swig
+uhd_swig_pylibdir_category ?= $(uhd_swig_pythondir_category)
+uhd_swig_pythondir = $(pythondir)/$(uhd_swig_pythondir_category)
+uhd_swig_pylibdir = $(pyexecdir)/$(uhd_swig_pylibdir_category)
+
+## SWIG headers are always installed into the same directory.
+
+uhd_swig_swigincludedir = $(swigincludedir)
+
+## This is a template file for a "generated" Makefile addition (in
+## this case, "Makefile.swig.gen"). By including the top-level
+## Makefile.swig, this file will be used to generate the SWIG
+## dependencies. Assign the variable TOP_SWIG_FILES to be the list of
+## SWIG .i files to generated wrappings for; there can be more than 1
+## so long as the names are unique (no sorting is done on the
+## TOP_SWIG_FILES list). This file explicitly assumes that a SWIG .i
+## file will generate .cc, .py, and possibly .h files -- meaning that
+## all of these files will have the same base name (that provided for
+## the SWIG .i file).
+##
+## This code is setup to ensure parallel MAKE ("-j" or "-jN") does the
+## right thing. For more info, see <
+## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
+
+## Stamps used to ensure parallel make does the right thing. These
+## are removed by "make clean", but otherwise unused except during the
+## parallel built. These will not be included in a tarball, because
+## the SWIG-generated files will be removed from the distribution.
+
+STAMPS += $(DEPDIR)/uhd_swig-generate-*
+
+## Other cleaned files: dependency files generated by SWIG or this Makefile
+
+MOSTLYCLEANFILES += $(DEPDIR)/*.S*
+
+## Add the .py and .cc files to the list of SWIG built sources. The
+## .h file is sometimes built, but not always ... so that one has to
+## be added manually by the including Makefile.am .
+
+swig_built_sources += uhd_swig.py uhd_swig.cc
+
+## Various SWIG variables. These can be overloaded in the including
+## Makefile.am by setting the variable value there, then including
+## Makefile.swig .
+
+uhd_swig_swiginclude_HEADERS = \
+ uhd_swig.i \
+ $(uhd_swig_swiginclude_headers)
+
+uhd_swig_pylib_LTLIBRARIES = \
+ _uhd_swig.la
+
+_uhd_swig_la_SOURCES = \
+ uhd_swig.cc \
+ $(uhd_swig_la_swig_sources)
+
+_uhd_swig_la_LIBADD = \
+ $(STD_SWIG_LA_LIB_ADD) \
+ $(uhd_swig_la_swig_libadd)
+
+_uhd_swig_la_LDFLAGS = \
+ $(STD_SWIG_LA_LD_FLAGS) \
+ $(uhd_swig_la_swig_ldflags)
+
+_uhd_swig_la_CXXFLAGS = \
+ $(STD_SWIG_CXX_FLAGS) \
+ $(uhd_swig_la_swig_cxxflags)
+
+uhd_swig_python_PYTHON = \
+ uhd_swig.py \
+ $(uhd_swig_python)
+
+## Entry rule for running SWIG
+
+uhd_swig.h uhd_swig.py uhd_swig.cc: uhd_swig.i
+## This rule will get called only when MAKE decides that one of the
+## targets needs to be created or re-created, because:
+##
+## * The .i file is newer than any or all of the generated files;
+##
+## * Any or all of the .cc, .h, or .py files does not exist and is
+## needed (in the case this file is not needed, the rule for it is
+## ignored); or
+##
+## * Some SWIG-based dependecy of the .cc file isn't met and hence the
+## .cc file needs be be regenerated. Explanation: Because MAKE
+## knows how to handle dependencies for .cc files (regardless of
+## their name or extension), then the .cc file is used as a target
+## instead of the .i file -- but with the dependencies of the .i
+## file. It is this last reason why the line:
+##
+## if test -f $@; then :; else
+##
+## cannot be used in this case: If a .i file dependecy is not met,
+## then the .cc file needs to be rebuilt. But if the stamp is newer
+## than the .cc file, and the .cc file exists, then in the original
+## version (with the 'test' above) the internal MAKE call will not
+## be issued and hence the .cc file will not be rebuilt.
+##
+## Once execution gets to here, it should always proceed no matter the
+## state of a stamp (as discussed in link above). The
+## $(DEPDIR)/uhd_swig-generate stuff is used to allow for parallel
+## builds to "do the right thing". The stamp has no relationship with
+## either the target files or dependency file; it is used solely for
+## the protection of multiple builds during a given call to MAKE.
+##
+## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
+## (15). At a caught signal, the quoted command will be issued before
+## exiting. In this case, remove any stamp, whether temporary of not.
+## The trap is valid until the process exits; the process includes all
+## commands appended via "\"s.
+##
+ trap 'rm -rf $(DEPDIR)/uhd_swig-generate-*' 1 2 13 15; \
+##
+## Create a temporary directory, which acts as a lock. The first
+## process to create the directory will succeed and issue the MAKE
+## command to do the actual work, while all subsequent processes will
+## fail -- leading them to wait for the first process to finish.
+##
+ if mkdir $(DEPDIR)/uhd_swig-generate-lock 2>/dev/null; then \
+##
+## This code is being executed by the first process to succeed in
+## creating the directory lock.
+##
+## Remove the stamp associated with this filename.
+##
+ rm -f $(DEPDIR)/uhd_swig-generate-stamp; \
+##
+## Tell MAKE to run the rule for creating this stamp.
+##
+ $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/uhd_swig-generate-stamp WHAT=$<; \
+##
+## Now that the .cc, .h, and .py files have been (re)created from the
+## .i file, future checking of this rule during the same MAKE
+## execution will come back that the rule doesn't need to be executed
+## because none of the conditions mentioned at the start of this rule
+## will be positive. Remove the the directory lock, which frees up
+## any waiting process(es) to continue.
+##
+ rmdir $(DEPDIR)/uhd_swig-generate-lock; \
+ else \
+##
+## This code is being executed by any follower processes while the
+## directory lock is in place.
+##
+## Wait until the first process is done, testing once per second.
+##
+ while test -d $(DEPDIR)/uhd_swig-generate-lock; do \
+ sleep 1; \
+ done; \
+##
+## Succeed if and only if the first process succeeded; exit this
+## process returning the status of the generated stamp.
+##
+ test -f $(DEPDIR)/uhd_swig-generate-stamp; \
+ exit $$?; \
+ fi;
+
+$(DEPDIR)/uhd_swig-generate-stamp:
+## This rule will be called only by the first process issuing the
+## above rule to succeed in creating the lock directory, after
+## removing the actual stamp file in order to guarantee that MAKE will
+## execute this rule.
+##
+## Call SWIG to generate the various output files; special
+## post-processing on 'mingw32' host OS for the dependency file.
+##
+ if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(uhd_swig_swig_args) \
+ -MD -MF $(DEPDIR)/uhd_swig.Std \
+ -module uhd_swig -o uhd_swig.cc $(WHAT); then \
+ if test $(host_os) = mingw32; then \
+ $(RM) $(DEPDIR)/uhd_swig.Sd; \
+ $(SED) 's,\\\\,/,g' < $(DEPDIR)/uhd_swig.Std \
+ > $(DEPDIR)/uhd_swig.Sd; \
+ $(RM) $(DEPDIR)/uhd_swig.Std; \
+ $(MV) $(DEPDIR)/uhd_swig.Sd $(DEPDIR)/uhd_swig.Std; \
+ fi; \
+ else \
+ $(RM) $(DEPDIR)/uhd_swig.S*; exit 1; \
+ fi;
+##
+## Mess with the SWIG output .Std dependency file, to create a
+## dependecy file valid for the input .i file: Basically, simulate the
+## dependency file created for libraries by GNU's libtool for C++,
+## where all of the dependencies for the target are first listed, then
+## each individual dependency is listed as a target with no further
+## dependencies.
+##
+## (1) remove the current dependency file
+##
+ $(RM) $(DEPDIR)/uhd_swig.d
+##
+## (2) Copy the whole SWIG file:
+##
+ cp $(DEPDIR)/uhd_swig.Std $(DEPDIR)/uhd_swig.d
+##
+## (3) all a carriage return to the end of the dependency file.
+##
+ echo "" >> $(DEPDIR)/uhd_swig.d
+##
+## (4) from the SWIG file, remove the first line (the target); remove
+## trailing " \" and " " from each line. Append ":" to each line,
+## followed by 2 carriage returns, then append this to the end of
+## the dependency file.
+##
+ $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/uhd_swig.Std | \
+ awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/uhd_swig.d
+##
+## (5) remove the SWIG-generated file
+##
+ $(RM) $(DEPDIR)/uhd_swig.Std
+##
+## Create the stamp for this filename generation, to signal success in
+## executing this rule; allows other threads waiting on this process
+## to continue.
+##
+ touch $(DEPDIR)/uhd_swig-generate-stamp
+
+# KLUDGE: Force runtime include of a SWIG dependency file. This is
+# not guaranteed to be portable, but will probably work. If it works,
+# we have accurate dependencies for our swig stuff, which is good.
+
+@am__include@ @am__quote@./$(DEPDIR)/uhd_swig.d@am__quote@
+
diff --git a/gr-uhd/swig/__init__.py b/gr-uhd/swig/__init__.py
new file mode 100644
index 000000000..2fed17e57
--- /dev/null
+++ b/gr-uhd/swig/__init__.py
@@ -0,0 +1,28 @@
+#
+# 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.
+#
+
+# The presence of this file turns this directory into a Python package
+
+# Add SWIG generated code to this namespace
+from uhd_swig import *
+
+# Add other content from pure-Python modules here
+
diff --git a/gr-uhd/swig/uhd_swig.i b/gr-uhd/swig/uhd_swig.i
new file mode 100644
index 000000000..2642f9450
--- /dev/null
+++ b/gr-uhd/swig/uhd_swig.i
@@ -0,0 +1,39 @@
+/* -*- 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 "gnuradio.i"
+
+%{
+#include <uhd_simple_source.h>
+#include <uhd_simple_sink.h>
+%}
+
+%include <uhd/config.hpp>
+%include <uhd/types/ranges.hpp>
+%include <uhd/types/tune_result.hpp>
+%include <uhd/types/io_type.hpp>
+
+GR_SWIG_BLOCK_MAGIC(uhd,simple_source)
+%include <uhd_simple_source.h>
+
+GR_SWIG_BLOCK_MAGIC(uhd,simple_sink)
+%include <uhd_simple_sink.h>
diff --git a/grc/python/Generator.py b/grc/python/Generator.py
index acd98ef84..d53802bef 100644
--- a/grc/python/Generator.py
+++ b/grc/python/Generator.py
@@ -58,7 +58,7 @@ class Generator(object):
def write(self):
#do throttle warning
all_keys = ' '.join(map(lambda b: b.get_key(), self._flow_graph.get_enabled_blocks()))
- if ('usrp' not in all_keys) and ('audio' not in all_keys) and ('throttle' not in all_keys) and self._generate_options != 'hb':
+ if ('usrp' not in all_keys) and ('uhd' not in all_keys) and ('audio' not in all_keys) and ('throttle' not in all_keys) and self._generate_options != 'hb':
Messages.send_warning('''\
This flow graph may not have flow control: no audio or usrp blocks found. \
Add a Misc->Throttle block to your flow graph to avoid CPU congestion.''')