diff options
author | Josh Blum | 2012-10-31 20:21:19 -0700 |
---|---|---|
committer | Josh Blum | 2012-10-31 20:21:19 -0700 |
commit | 32f9c796f5b30b7bd802c5f1802a94de2b50ec10 (patch) | |
tree | 9ef78700d66061c580f888121528575557dea971 /python | |
parent | 77f79c8e2c45d816a2ecb869b2869825b3293640 (diff) | |
download | sandhi-32f9c796f5b30b7bd802c5f1802a94de2b50ec10.tar.gz sandhi-32f9c796f5b30b7bd802c5f1802a94de2b50ec10.tar.bz2 sandhi-32f9c796f5b30b7bd802c5f1802a94de2b50ec10.zip |
build system work
Diffstat (limited to 'python')
-rw-r--r-- | python/gr_tags.i | 32 | ||||
-rw-r--r-- | python/gras.i | 160 | ||||
-rw-r--r-- | python/gras/CMakeLists.txt | 33 | ||||
-rw-r--r-- | python/runtime.i | 71 |
4 files changed, 296 insertions, 0 deletions
diff --git a/python/gr_tags.i b/python/gr_tags.i new file mode 100644 index 0000000..828d014 --- /dev/null +++ b/python/gr_tags.i @@ -0,0 +1,32 @@ +/* + * Copyright 2011 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 <gr_tags.h> +%} + +%include <pmt_swig.i> //for pmt support + +%include <gr_tags.h> + +//gives support for a vector of tags (get tags in range) +%include "std_vector.i" +%template(tags_vector_t) std::vector<gr_tag_t>; diff --git a/python/gras.i b/python/gras.i new file mode 100644 index 0000000..0fe1ea3 --- /dev/null +++ b/python/gras.i @@ -0,0 +1,160 @@ +// +// Copyright 2012 Josh Blum +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program 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 Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. + +%rename(io_signature) gr_make_io_signature; +%rename(io_signature2) gr_make_io_signature2; +%rename(io_signature3) gr_make_io_signature3; +%rename(io_signaturev) gr_make_io_signaturev; + +//const size types used by blocks in python +%constant int sizeof_char = sizeof(char); +%constant int sizeof_short = sizeof(short); +%constant int sizeof_int = sizeof(int); +%constant int sizeof_float = sizeof(float); +%constant int sizeof_double = sizeof(double); +%constant int sizeof_gr_complex = sizeof(gr_complex); + +//helps with funny swig error for io signature +%ignore gnuradio::IOSignature::operator->(); +%ignore gnuradio::IOSignature::operator->() const; + +%ignore gnuradio::Block::input_buffer_allocator; +%ignore gnuradio::Block::output_buffer_allocator; + +%include <gnuradio/thread_pool.hpp> +%include <gnuradio/element.hpp> +%include <gnuradio/tags.hpp> +%include <gnuradio/block.hpp> +%include <gnuradio/hier_block.hpp> +%include <gnuradio/top_block.hpp> +%include <gnuradio/io_signature.hpp> +%include <gr_io_signature.h> +%include <gr_block.h> +%include <gr_hier_block2.h> +%include <gr_top_block.h> +%include <gr_sync_block.h> +%include <gr_sync_decimator.h> +%include <gr_sync_interpolator.h> + +//////////////////////////////////////////////////////////////////////// +// Make a special top block with python safe unlocking wait +//////////////////////////////////////////////////////////////////////// +%include "gruel_common.i" + +%inline %{ + +namespace gnuradio +{ + +//typedef TopBlock TopBlockBase; +typedef gr_top_block TopBlockBase; //maximal set of all API + +struct TopBlockPython : TopBlockBase +{ + TopBlockPython(void): + TopBlockBase("top") + { + //NOP + } + + TopBlockPython(const std::string &name): + TopBlockBase(name) + { + //NOP + } + + void wait(void) + { + GR_PYTHON_BLOCKING_CODE + ( + TopBlockBase::wait(); + ) + } + + bool wait(const double timeout) + { + bool ret = false; + GR_PYTHON_BLOCKING_CODE + ( + ret = TopBlock::wait(timeout); + ) + return ret; + } +}; +} + +%} + +//////////////////////////////////////////////////////////////////////// +// Remake top block and hier block for multi-arg connnect +//////////////////////////////////////////////////////////////////////// +%pythoncode %{ + +def internal_connect__(fcn, obj, *args): + + def to_element(obj): + if isinstance(obj, Element): return obj + try: return obj.shared_to_element() + except: raise Exception('cant coerce obj %s to element'%(obj)) + + if len(args) == 1: + fcn(obj, to_element(args[0])) + return + + for src, sink in zip(args, args[1:]): + try: src, src_index = src + except: src_index = 0 + try: sink, sink_index = sink + except: sink_index = 0 + fcn(obj, to_element(src), src_index, to_element(sink), sink_index) + +class TopBlock(TopBlockPython): + def __init__(self, *args, **kwargs): + TopBlockPython.__init__(self, *args, **kwargs) + + def connect(self, *args): + return internal_connect__(TopBlockPython.connect, self, *args) + + def disconnect(self, *args): + return internal_connect__(TopBlockPython.disconnect, self, *args) + +class HierBlock(HierBlock): + def __init__(self, *args, **kwargs): + HierBlock.__init__(self, *args, **kwargs) + self._hb = self #backwards compat + + def connect(self, *args): + return internal_connect__(HierBlock.connect, self, *args) + + def disconnect(self, *args): + return internal_connect__(HierBlock.disconnect, self, *args) + +top_block = TopBlock + +class hier_block(gr_hier_block2): + def __init__(self, *args, **kwargs): + gr_hier_block2.__init__(self, *args, **kwargs) + self._hb = self #backwards compat + + def connect(self, *args): + return internal_connect__(gr_hier_block2.connect, self, *args) + + def disconnect(self, *args): + return internal_connect__(gr_hier_block2.disconnect, self, *args) + +hier_block2 = hier_block + +%} diff --git a/python/gras/CMakeLists.txt b/python/gras/CMakeLists.txt new file mode 100644 index 0000000..a55d09e --- /dev/null +++ b/python/gras/CMakeLists.txt @@ -0,0 +1,33 @@ +######################################################################## +# Include swig generation macros +######################################################################## +find_package(SWIG) +find_package(PythonLibs) +if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND) + return() +endif() +include(GrSwig) +include(GrPython) +find_package(Boost) #for headers + +######################################################################## +# setup SWIG build +######################################################################## +list(APPEND GR_SWIG_INCLUDE_DIRS ${GRAS_INCLUDE_DIRS}) +list(APPEND GR_SWIG_INCLUDE_DIRS ${Boost_INCLUDE_DIRS}) + +#GR_SWIG_MAKE(${pmc_swig_module} ${pmc_swig_module}.i) +#GR_SWIG_INSTALL( +# TARGETS ${pmc_swig_module} +# DESTINATION ${GR_PYTHON_DIR}/PMC +# COMPONENT ${PMC_COMP_PYTHON} +#) + +######################################################################## +# Install rules +######################################################################## +#GR_PYTHON_INSTALL( +# FILES __init__.py +# DESTINATION ${GR_PYTHON_DIR}/PMC +# COMPONENT ${PMC_COMP_PYTHON} +#) diff --git a/python/runtime.i b/python/runtime.i new file mode 100644 index 0000000..8895a7f --- /dev/null +++ b/python/runtime.i @@ -0,0 +1,71 @@ +// +// Copyright 2012 Josh Blum +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program 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 Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. + +#define GR_CORE_API +#define GRAS_API + +//not here to fight you swig, reference() is ambigi with shared ptr, but whatevs +%ignore gri_agc_cc::reference(); +%ignore gri_agc2_ff::reference(); +%ignore gri_agc2_cc::reference(); + +%{ + +#include <gnuradio/thread_pool.hpp> +#include <gnuradio/element.hpp> +#include <gnuradio/block.hpp> +#include <gnuradio/hier_block.hpp> +#include <gnuradio/top_block.hpp> +#include <gnuradio/io_signature.hpp> +#include <gnuradio/tags.hpp> +#include <gr_io_signature.h> +#include <gr_block.h> +#include <gr_top_block.h> +#include <gr_hier_block2.h> +#include <gr_message.h> +#include <gr_msg_handler.h> +#include <gr_msg_queue.h> +#include <gr_sync_block.h> +#include <gr_sync_decimator.h> +#include <gr_sync_interpolator.h> + +%} + +%include <gr_message.i> +%include <gr_msg_handler.i> +%include <gr_msg_queue.i> +%include <gr_swig_block_magic.i> + +#ifdef SW_RUNTIME + +%include "gras.i" + +#else + +//the bare minimum block inheritance interface to make things work but keep swig cxx file size down +%include <gnuradio/element.hpp> +namespace gnuradio +{ + struct Block : Element{}; + struct HierBlock : Element{}; +} +struct gr_hier_block2 : gnuradio::HierBlock{}; +struct gr_block : gnuradio::Block{}; +struct gr_sync_block : gr_block{}; +struct gr_sync_interpolator : gr_sync_block{}; +struct gr_sync_decimator : gr_sync_block{}; + +#endif |