summaryrefslogtreecommitdiff
path: root/gr-uhd/swig
diff options
context:
space:
mode:
Diffstat (limited to 'gr-uhd/swig')
-rw-r--r--gr-uhd/swig/Makefile.am6
-rw-r--r--gr-uhd/swig/__init__.py116
-rw-r--r--gr-uhd/swig/uhd_swig.i31
3 files changed, 79 insertions, 74 deletions
diff --git a/gr-uhd/swig/Makefile.am b/gr-uhd/swig/Makefile.am
index e93571a66..035fb2112 100644
--- a/gr-uhd/swig/Makefile.am
+++ b/gr-uhd/swig/Makefile.am
@@ -1,5 +1,5 @@
#
-# Copyright 2010 Free Software Foundation, Inc.
+# Copyright 2010-2011 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -66,9 +66,7 @@ uhd_swig_python = \
# additional SWIG files to be installed
uhd_swig_swiginclude_headers =
-uhd_swig_swig_args = \
- $(UHD_CFLAGS) \
- -I$(top_srcdir)/gr-uhd/lib
+uhd_swig_swig_args = $(UHD_CPPFLAGS)
## If UHD was installed, defined GR_HAVE_UHD for swigging headers
if GR_DEFINE_HAVE_UHD
diff --git a/gr-uhd/swig/__init__.py b/gr-uhd/swig/__init__.py
index 1a9f8358d..7ed689ec0 100644
--- a/gr-uhd/swig/__init__.py
+++ b/gr-uhd/swig/__init__.py
@@ -17,70 +17,72 @@
# 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
+#
########################################################################
-# Create aliases for uhd swig attributes to avoid the "_t"
-# Install the __str__ and __repr__ handlers if applicable
+# Prepare uhd swig module to make it more pythonic
########################################################################
-import uhd_swig
-for attr in dir(uhd_swig):
- myobj = getattr(uhd_swig, attr)
- if hasattr(myobj, 'to_string'): myobj.__repr__ = lambda s: s.to_string().strip()
- if hasattr(myobj, 'to_pp_string'): myobj.__str__ = lambda s: s.to_pp_string().strip()
- if attr.endswith('_t'): setattr(uhd_swig, attr[:-2], myobj)
+def _prepare_uhd_swig():
+ import uhd_swig
-########################################################################
-# Add SWIG generated code to this namespace
-########################################################################
-from uhd_swig import *
+ #some useful typedefs for the user
+ setattr(uhd_swig, 'freq_range_t', uhd_swig.meta_range_t)
+ setattr(uhd_swig, 'gain_range_t', uhd_swig.meta_range_t)
-########################################################################
-# Add other content from pure-Python modules here
-########################################################################
-class freq_range_t(meta_range_t): pass #a typedef for the user
-class gain_range_t(meta_range_t): pass #a typedef for the user
+ #Make the python tune request object inherit from float
+ #so that it can be passed in GRC as a frequency parameter.
+ #The type checking in GRC will accept the tune request.
+ class tune_request_t(uhd_swig.tune_request_t, float):
+ def __new__(self, *args): return float.__new__(self)
+ def __float__(self): return self.target_freq
+ setattr(uhd_swig, 'tune_request_t', tune_request_t)
+
+ #Make the python tune request object inherit from string
+ #so that it can be passed in GRC as a string parameter.
+ #The type checking in GRC will accept the device address.
+ #Define the set/get item special methods for dict access.
+ class device_addr_t(uhd_swig.device_addr_t, str):
+ def __new__(self, *args): return str.__new__(self)
+ def __getitem__(self, key): return self.get(key)
+ def __setitem__(self, key, val): self.set(key, val)
+ setattr(uhd_swig, 'device_addr_t', device_addr_t)
-class tune_request_t(tune_request_t, float):
- """
- Make the python tune request object inherit from float
- so that it can be passed in GRC as a frequency parameter.
- The type checking in GRC will accept the tune request.
- """
- def __new__(self, *args): return float.__new__(self)
- def __float__(self): return self.target_freq
+ #handle general things on all uhd_swig attributes
+ #Install the __str__ and __repr__ handlers if applicable
+ #Create aliases for uhd swig attributes to avoid the "_t"
+ for attr in dir(uhd_swig):
+ myobj = getattr(uhd_swig, attr)
+ if hasattr(myobj, 'to_string'): myobj.__repr__ = lambda o: o.to_string().strip()
+ if hasattr(myobj, 'to_pp_string'): myobj.__str__ = lambda o: o.to_pp_string().strip()
+ if hasattr(myobj, 'to_bool'): myobj.__nonzero__ = lambda o: o.to_bool()
+ if hasattr(myobj, 'to_int'): myobj.__int__ = lambda o: o.to_int()
+ if hasattr(myobj, 'to_real'): myobj.__float__ = lambda o: o.to_real()
+ if attr.endswith('_t'): setattr(uhd_swig, attr[:-2], myobj)
-class device_addr_t(device_addr_t, str):
- """
- Make the python tune request object inherit from string
- so that it can be passed in GRC as a string parameter.
- The type checking in GRC will accept the device address.
- Define the set/get item special methods for dict access.
- """
- def __new__(self, *args): return str.__new__(self)
- def __getitem__(self, key): return self.get(key)
- def __setitem__(self, key, val): self.set(key, val)
+ #Cast constructor args (FIXME swig handle overloads?)
+ for attr in ('usrp_source', 'usrp_sink'):
+ def constructor_factory(old_constructor):
+ def constructor_interceptor(*args, **kwargs):
+ args = list(args)
+ kwargs = dict(kwargs)
+ for index, key, cast in (
+ (0, 'device_addr', device_addr),
+ (1, 'io_type', io_type),
+ ):
+ if len(args) > index: args[index] = cast(args[index])
+ if kwargs.has_key(key): kwargs[key] = cast(kwargs[key])
+ return old_constructor(*args, **kwargs)
+ return constructor_interceptor
+ setattr(uhd_swig, attr, constructor_factory(getattr(uhd_swig, attr)))
+
+ #Aliases for deprecated constructors
+ setattr(uhd_swig, 'single_usrp_source', uhd_swig.usrp_source)
+ setattr(uhd_swig, 'single_usrp_sink', uhd_swig.usrp_sink)
+ setattr(uhd_swig, 'multi_usrp_source', uhd_swig.usrp_source)
+ setattr(uhd_swig, 'multi_usrp_sink', uhd_swig.usrp_sink)
########################################################################
-# Cast constructor args (FIXME swig handle overloads?)
+# Initialize this module with the contents of uhd swig
########################################################################
-for attr in (
- 'single_usrp_source', 'single_usrp_sink',
- 'multi_usrp_source', 'multi_usrp_sink'
-):
- def constructor_factory(old_constructor):
- def constructor_interceptor(*args, **kwargs):
- args = list(args)
- kwargs = dict(kwargs)
- for index, key, cast in (
- (0, 'device_addr', device_addr),
- (1, 'io_type', io_type),
- ):
- if len(args) > index: args[index] = cast(args[index])
- if kwargs.has_key(key): kwargs[key] = cast(kwargs[key])
- return old_constructor(*args, **kwargs)
- return constructor_interceptor
- import uhd_swig
- globals()[attr] = constructor_factory(getattr(uhd_swig, attr))
+_prepare_uhd_swig()
+from uhd_swig import *
diff --git a/gr-uhd/swig/uhd_swig.i b/gr-uhd/swig/uhd_swig.i
index 3c317beb4..3ffcc7aea 100644
--- a/gr-uhd/swig/uhd_swig.i
+++ b/gr-uhd/swig/uhd_swig.i
@@ -53,10 +53,8 @@
// block headers
////////////////////////////////////////////////////////////////////////
%{
-#include <uhd_multi_usrp_source.h>
-#include <uhd_multi_usrp_sink.h>
-#include <uhd_single_usrp_source.h>
-#include <uhd_single_usrp_sink.h>
+#include <gr_uhd_usrp_source.h>
+#include <gr_uhd_usrp_sink.h>
%}
////////////////////////////////////////////////////////////////////////
@@ -68,6 +66,7 @@
%include <uhd/utils/pimpl.hpp>
+%ignore uhd::dict::operator[]; //ignore warnings about %extend
%include <uhd/types/dict.hpp>
%template(string_string_dict_t) uhd::dict<std::string, std::string>; //define after dict
@@ -90,23 +89,29 @@
%include <uhd/types/metadata.hpp>
+%ignore uhd::device::register_device; //causes compile to choke in MSVC
%include <uhd/device.hpp>
%template(device_addr_vector_t) std::vector<uhd::device_addr_t>;
+%include <uhd/types/sensors.hpp>
+
////////////////////////////////////////////////////////////////////////
-// block magic
+// swig dboard_iface for python access
////////////////////////////////////////////////////////////////////////
-GR_SWIG_BLOCK_MAGIC(uhd,multi_usrp_source)
-%include <uhd_multi_usrp_source.h>
+%include stdint.i
+%include <uhd/types/serial.hpp>
+%include <uhd/usrp/dboard_iface.hpp>
-GR_SWIG_BLOCK_MAGIC(uhd,multi_usrp_sink)
-%include <uhd_multi_usrp_sink.h>
+%template(dboard_iface_sptr) boost::shared_ptr<uhd::usrp::dboard_iface>;
-GR_SWIG_BLOCK_MAGIC(uhd,single_usrp_source)
-%include <uhd_single_usrp_source.h>
+////////////////////////////////////////////////////////////////////////
+// block magic
+////////////////////////////////////////////////////////////////////////
+GR_SWIG_BLOCK_MAGIC(uhd,usrp_source)
+%include <gr_uhd_usrp_source.h>
-GR_SWIG_BLOCK_MAGIC(uhd,single_usrp_sink)
-%include <uhd_single_usrp_sink.h>
+GR_SWIG_BLOCK_MAGIC(uhd,usrp_sink)
+%include <gr_uhd_usrp_sink.h>
////////////////////////////////////////////////////////////////////////
// helpful constants