diff options
Diffstat (limited to 'gr-uhd/swig')
-rw-r--r-- | gr-uhd/swig/Makefile.am | 6 | ||||
-rw-r--r-- | gr-uhd/swig/__init__.py | 116 | ||||
-rw-r--r-- | gr-uhd/swig/uhd_swig.i | 31 |
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 |