diff options
Diffstat (limited to 'gr-trellis/src')
20 files changed, 409 insertions, 41 deletions
diff --git a/gr-trellis/src/examples/CMakeLists.txt b/gr-trellis/src/examples/CMakeLists.txt new file mode 100644 index 000000000..2a98c9c67 --- /dev/null +++ b/gr-trellis/src/examples/CMakeLists.txt @@ -0,0 +1,64 @@ +# 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(GrPython) + +GR_PYTHON_INSTALL( + PROGRAMS + fsm_utils.py + test_tcm.py + test_tcm_parallel.py + test_tcm_combined.py + test_sccc_hard.py + test_sccc_soft.py + test_sccc_turbo.py + test_viterbi_equalization1.py + test_viterbi_equalization.py + test_turbo_equalization.py + test_turbo_equalization1.py + test_turbo_equalization2.py + DESTINATION ${GR_PKG_DATA_DIR}/examples/trellis + COMPONENT "trellis_examples" +) + +INSTALL( + FILES README + DESTINATION ${GR_PKG_DATA_DIR}/examples/trellis + COMPONENT "trellis_examples" +) + +INSTALL( + FILES + fsm_files/awgn1o2_128.fsm + fsm_files/awgn1o2_16.fsm + fsm_files/awgn1o2_4.fsm + fsm_files/awgn1o2_8.fsm + fsm_files/awgn2o3_16.fsm + fsm_files/awgn2o3_4.fsm + fsm_files/awgn2o3_4_msb.fsm + fsm_files/awgn2o3_4_msbG.fsm + fsm_files/awgn2o3_8.fsm + fsm_files/awgn2o4_4.fsm + fsm_files/disconnected.fsm + fsm_files/rep3.fsm + fsm_files/rep5.fsm + fsm_files/simple.fsm + DESTINATION ${GR_PKG_DATA_DIR}/examples/trellis/fsm_files + COMPONENT "trellis_examples" +) diff --git a/gr-trellis/src/lib/CMakeLists.txt b/gr-trellis/src/lib/CMakeLists.txt new file mode 100644 index 000000000..338baac9d --- /dev/null +++ b/gr-trellis/src/lib/CMakeLists.txt @@ -0,0 +1,218 @@ +# 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. + +######################################################################## +# Setup the include and linker paths +######################################################################## +INCLUDE_DIRECTORIES( + ${GNURADIO_CORE_INCLUDE_DIRS} + ${GR_TRELLIS_INCLUDE_DIRS} + ${GR_DIGITAL_INCLUDE_DIRS} +) + +INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS}) +LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) + +######################################################################## +# Generate the makefile.gen, then extract its sources: +# This is a round-about way to extract the sources, +# but it requires minimum changed to the python utils. +# +# The recommended way to do this: +# - Make a generation macro that registers the sources command. +# - List the generation macro with each templated source file. +# - Create a python script (very generic) to perform generation. +# - This way the targets would depend only on their sources. +######################################################################## +EXECUTE_PROCESS( + COMMAND ${PYTHON_EXECUTABLE} -c " +import os, sys +sys.path.append('${GR_CORE_PYTHONPATH}') +sys.path.append('${CMAKE_CURRENT_SOURCE_DIR}') +os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}' +os.environ['gendir'] = '${CMAKE_CURRENT_BINARY_DIR}' +os.environ['do_makefile'] = '1' +os.environ['do_sources'] = '0' +from generate_all import generate_all +generate_all() + " WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +) + +MACRO(GEGEN_GEN_EXTRACT outvar ext) + EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "import os; print ';'.join( + map(lambda x: os.path.join('${CMAKE_CURRENT_BINARY_DIR}', x.replace('\\\\', '').strip()), + filter(lambda f: '${ext}' in f, open('${CMAKE_CURRENT_BINARY_DIR}/Makefile.gen').readlines() + )))" OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE ${outvar}) + FILE(TO_CMAKE_PATH "${${outvar}}" ${outvar}) +ENDMACRO(GEGEN_GEN_EXTRACT) + +GEGEN_GEN_EXTRACT(generated_trellis_sources ".cc") +GEGEN_GEN_EXTRACT(generated_trellis_includes ".h") +GEGEN_GEN_EXTRACT(generated_trellis_swigs ".i") + +#TODO simplify this list with a triple-threat for loop +SET(generated_trellis_deps + generate_all.py + generate_trellis.py + trellis_encoder_XX.cc.t + trellis_encoder_XX.h.t + trellis_encoder_XX.i.t + trellis_sccc_encoder_XX.cc.t + trellis_sccc_encoder_XX.h.t + trellis_sccc_encoder_XX.i.t + trellis_pccc_encoder_XX.cc.t + trellis_pccc_encoder_XX.h.t + trellis_pccc_encoder_XX.i.t + trellis_metrics_X.cc.t + trellis_metrics_X.h.t + trellis_metrics_X.i.t + trellis_viterbi_combined_XX.cc.t + trellis_viterbi_combined_XX.h.t + trellis_viterbi_combined_XX.i.t + trellis_sccc_decoder_combined_XX.cc.t + trellis_sccc_decoder_combined_XX.h.t + trellis_sccc_decoder_combined_XX.i.t + trellis_sccc_decoder_X.cc.t + trellis_sccc_decoder_X.h.t + trellis_sccc_decoder_X.i.t + trellis_pccc_decoder_X.cc.t + trellis_pccc_decoder_X.h.t + trellis_pccc_decoder_X.i.t + trellis_viterbi_X.cc.t + trellis_viterbi_X.h.t + trellis_viterbi_X.i.t +) + +ADD_CUSTOM_COMMAND( + OUTPUT + ${generated_trellis_sources} + ${generated_trellis_includes} + ${generated_trellis_swigs} + DEPENDS ${generated_trellis_deps} + COMMAND ${PYTHON_EXECUTABLE} -B -c + \"import os, sys\;sys.path.append('${GR_CORE_PYTHONPATH}')\;sys.path.append('${CMAKE_CURRENT_SOURCE_DIR}')\;os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'\;from generate_all import generate_all\;generate_all()\" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "generating trellis files" +) + +ADD_CUSTOM_TARGET(trellis_generated DEPENDS + ${generated_trellis_sources} + ${generated_trellis_includes} + ${generated_trellis_swigs} +) + +######################################################################## +# Setup library +######################################################################## +LIST(APPEND gr_trellis_sources + fsm.cc + quicksort_index.cc + base.cc + interleaver.cc + calc_metric.cc + core_algorithms.cc + trellis_permutation.cc + trellis_siso_f.cc + trellis_siso_combined_f.cc + trellis_constellation_metrics_cf.cc + ${generated_trellis_sources} +) + +LIST(APPEND trellis_libs + gnuradio-core + ${Boost_LIBRARIES} +) + +ADD_LIBRARY(gnuradio-trellis SHARED ${gr_trellis_sources}) +TARGET_LINK_LIBRARIES(gnuradio-trellis ${trellis_libs}) +SET_TARGET_PROPERTIES(gnuradio-trellis PROPERTIES DEFINE_SYMBOL "gnuradio_trellis_EXPORTS") +SET_TARGET_PROPERTIES(gnuradio-trellis PROPERTIES SOVERSION ${LIBVER}) + +INSTALL(TARGETS gnuradio-trellis + LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT "trellis_runtime" # .so/.dylib file + ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT "trellis_devel" # .lib file + RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT "trellis_runtime" # .dll file +) + +######################################################################## +# Handle the generated sources + a few non-generated ones +######################################################################## +INSTALL(FILES + ${generated_trellis_includes} + trellis_api.h + fsm.h + quicksort_index.h + base.h + interleaver.h + calc_metric.h + core_algorithms.h + trellis_permutation.h + siso_type.h + trellis_siso_f.h + trellis_siso_combined_f.h + trellis_constellation_metrics_cf.h + DESTINATION ${GR_INCLUDE_DIR}/gnuradio + COMPONENT "trellis_devel" +) + +IF(ENABLE_PYTHON) + INSTALL(FILES + ${generated_trellis_swigs} + fsm.i + interleaver.i + trellis_permutation.i + trellis_siso_f.i + trellis_siso_combined_f.i + trellis_constellation_metrics_cf.i + ${CMAKE_CURRENT_BINARY_DIR}/trellis_generated.i + DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig + COMPONENT "trellis_swig" + ) + +######################################################################## +# Setup swig generation +######################################################################## +INCLUDE(GrPython) +INCLUDE(GrSwig) + +SET(GR_SWIG_INCLUDE_DIRS + ${GR_TRELLIS_INCLUDE_DIRS} + ${GNURADIO_CORE_SWIG_INCLUDE_DIRS} + ${GR_DIGITAL_SWIG_INCLUDE_DIRS} +) + +SET(GR_SWIG_LIBRARIES gnuradio-trellis) + +SET(GR_SWIG_TARGET_DEPS trellis_generated) + +GR_SWIG_MAKE(trellis trellis.i) + +GR_SWIG_INSTALL( + TARGETS trellis + DESTINATION ${GR_PYTHON_DIR}/gnuradio + COMPONENT "trellis_python" +) + +INSTALL( + FILES trellis.i + DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig + COMPONENT "trellis_swig" +) + +ENDIF(ENABLE_PYTHON) diff --git a/gr-trellis/src/lib/Makefile.am b/gr-trellis/src/lib/Makefile.am index 795ac28b4..5f2fc1825 100644 --- a/gr-trellis/src/lib/Makefile.am +++ b/gr-trellis/src/lib/Makefile.am @@ -78,6 +78,7 @@ EXTRA_DIST += \ # These headers get installed in ${prefix}/include/gnuradio grinclude_HEADERS = \ + trellis_api.h \ fsm.h \ quicksort_index.h \ base.h \ diff --git a/gr-trellis/src/lib/fsm.h b/gr-trellis/src/lib/fsm.h index 134bbf26e..7dc7e0d9d 100644 --- a/gr-trellis/src/lib/fsm.h +++ b/gr-trellis/src/lib/fsm.h @@ -23,6 +23,7 @@ #ifndef INCLUDED_TRELLIS_FSM_H #define INCLUDED_TRELLIS_FSM_H +#include <trellis_api.h> #include <vector> #include <iosfwd> @@ -33,7 +34,7 @@ * rather than the FSM itself. It particular the state of the FSM * is not stored within an instance of this class. */ -class fsm { +class TRELLIS_API fsm { private: // Input alphabet cardinality. int d_I; diff --git a/gr-trellis/src/lib/interleaver.h b/gr-trellis/src/lib/interleaver.h index f6a289c52..fbd378d62 100644 --- a/gr-trellis/src/lib/interleaver.h +++ b/gr-trellis/src/lib/interleaver.h @@ -23,12 +23,13 @@ #ifndef INCLUDED_TRELLIS_INTERLEAVER_H #define INCLUDED_TRELLIS_INTERLEAVER_H +#include <trellis_api.h> #include <vector> /*! * \brief INTERLEAVER class */ -class interleaver { +class TRELLIS_API interleaver { private: int d_K; std::vector<int> d_INTER; diff --git a/gr-trellis/src/lib/trellis_api.h b/gr-trellis/src/lib/trellis_api.h new file mode 100644 index 000000000..c09b340d6 --- /dev/null +++ b/gr-trellis/src/lib/trellis_api.h @@ -0,0 +1,33 @@ +/* + * 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. + */ + +#ifndef INCLUDED_TRELLIS_API_H +#define INCLUDED_TRELLIS_API_H + +#include <gruel/attributes.h> + +#ifdef gnuradio_trellis_EXPORTS +# define TRELLIS_API __GR_ATTR_EXPORT +#else +# define TRELLIS_API __GR_ATTR_IMPORT +#endif + +#endif /* INCLUDED_TRELLIS_API_H */ diff --git a/gr-trellis/src/lib/trellis_constellation_metrics_cf.h b/gr-trellis/src/lib/trellis_constellation_metrics_cf.h index a34c335ec..1851bb89c 100644 --- a/gr-trellis/src/lib/trellis_constellation_metrics_cf.h +++ b/gr-trellis/src/lib/trellis_constellation_metrics_cf.h @@ -23,6 +23,7 @@ #ifndef INCLUDED_TRELLIS_CONSTELLATION_METRICS_CF_H #define INCLUDED_TRELLIS_CONSTELLATION_METRICS_CF_H +#include <trellis_api.h> #include <gr_block.h> #include <digital_constellation.h> #include <digital_metric_type.h> @@ -30,13 +31,13 @@ class trellis_constellation_metrics_cf; typedef boost::shared_ptr<trellis_constellation_metrics_cf> trellis_constellation_metrics_cf_sptr; -trellis_constellation_metrics_cf_sptr trellis_make_constellation_metrics_cf (digital_constellation_sptr constellation, trellis_metric_type_t TYPE); +TRELLIS_API trellis_constellation_metrics_cf_sptr trellis_make_constellation_metrics_cf (digital_constellation_sptr constellation, trellis_metric_type_t TYPE); /*! * \brief Evaluate metrics for use by the Viterbi algorithm. * \ingroup coding_blk */ -class trellis_constellation_metrics_cf : public gr_block +class TRELLIS_API trellis_constellation_metrics_cf : public gr_block { public: void forecast (int noutput_items, @@ -53,7 +54,7 @@ class trellis_constellation_metrics_cf : public gr_block trellis_metric_type_t d_TYPE; unsigned int d_O; unsigned int d_D; - friend trellis_constellation_metrics_cf_sptr trellis_make_constellation_metrics_cf (digital_constellation_sptr constellation, trellis_metric_type_t TYPE); + friend TRELLIS_API trellis_constellation_metrics_cf_sptr trellis_make_constellation_metrics_cf (digital_constellation_sptr constellation, trellis_metric_type_t TYPE); }; diff --git a/gr-trellis/src/lib/trellis_encoder_XX.h.t b/gr-trellis/src/lib/trellis_encoder_XX.h.t index b56fde0bf..4038caac9 100644 --- a/gr-trellis/src/lib/trellis_encoder_XX.h.t +++ b/gr-trellis/src/lib/trellis_encoder_XX.h.t @@ -25,22 +25,23 @@ #ifndef @GUARD_NAME@ #define @GUARD_NAME@ +#include <trellis_api.h> #include "fsm.h" #include <gr_sync_block.h> class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ trellis_make_@BASE_NAME@ (const fsm &FSM, int ST); +TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (const fsm &FSM, int ST); /*! * \brief Convolutional encoder. * \ingroup coding_blk */ -class @NAME@ : public gr_sync_block +class TRELLIS_API @NAME@ : public gr_sync_block { private: - friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (const fsm &FSM, int ST); + friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (const fsm &FSM, int ST); fsm d_FSM; int d_ST; @NAME@ (const fsm &FSM, int ST); diff --git a/gr-trellis/src/lib/trellis_metrics_X.h.t b/gr-trellis/src/lib/trellis_metrics_X.h.t index 45d4ace10..809c27e65 100644 --- a/gr-trellis/src/lib/trellis_metrics_X.h.t +++ b/gr-trellis/src/lib/trellis_metrics_X.h.t @@ -25,26 +25,27 @@ #ifndef @GUARD_NAME@ #define @GUARD_NAME@ +#include <trellis_api.h> #include <gr_block.h> #include "calc_metric.h" class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ trellis_make_@BASE_NAME@ (int O, int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE); +TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (int O, int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE); /*! * \brief Evaluate metrics for use by the Viterbi algorithm. * \ingroup coding_blk */ -class @NAME@ : public gr_block +class TRELLIS_API @NAME@ : public gr_block { int d_O; int d_D; trellis_metric_type_t d_TYPE; std::vector<@I_TYPE@> d_TABLE; - friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (int O, int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE); + friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (int O, int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE); @NAME@ (int O, int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE); public: diff --git a/gr-trellis/src/lib/trellis_pccc_decoder_X.h.t b/gr-trellis/src/lib/trellis_pccc_decoder_X.h.t index 2a5b43df6..a58a03264 100644 --- a/gr-trellis/src/lib/trellis_pccc_decoder_X.h.t +++ b/gr-trellis/src/lib/trellis_pccc_decoder_X.h.t @@ -25,6 +25,7 @@ #ifndef @GUARD_NAME@ #define @GUARD_NAME@ +#include <trellis_api.h> #include "fsm.h" #include "interleaver.h" #include <gr_block.h> @@ -34,7 +35,7 @@ class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ trellis_make_@BASE_NAME@ ( +TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSM1, int ST10, int ST1K, const fsm &FSM2, int ST20, int ST2K, const interleaver &INTERLEAVER, @@ -47,7 +48,7 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; /*! * \ingroup coding_blk */ -class @NAME@ : public gr_block +class TRELLIS_API @NAME@ : public gr_block { fsm d_FSM1; int d_ST10; @@ -61,7 +62,7 @@ class @NAME@ : public gr_block trellis_siso_type_t d_SISO_TYPE; std::vector<float> d_buffer; - friend @SPTR_NAME@ trellis_make_@BASE_NAME@ ( + friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSM1, int ST10, int ST1K, const fsm &FSM2, int ST20, int ST2K, const interleaver &INTERLEAVER, diff --git a/gr-trellis/src/lib/trellis_pccc_encoder_XX.h.t b/gr-trellis/src/lib/trellis_pccc_encoder_XX.h.t index 68ccf75db..2b6110e37 100644 --- a/gr-trellis/src/lib/trellis_pccc_encoder_XX.h.t +++ b/gr-trellis/src/lib/trellis_pccc_encoder_XX.h.t @@ -25,6 +25,7 @@ #ifndef @GUARD_NAME@ #define @GUARD_NAME@ +#include <trellis_api.h> #include <vector> #include "fsm.h" #include "interleaver.h" @@ -33,7 +34,7 @@ class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ trellis_make_@BASE_NAME@ ( +TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSM1, int ST1, const fsm &FSM2, int ST2, const interleaver &INTERLEAVER, @@ -44,10 +45,10 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; * \brief SCCC encoder. * \ingroup coding_blk */ -class @NAME@ : public gr_sync_block +class TRELLIS_API @NAME@ : public gr_sync_block { private: - friend @SPTR_NAME@ trellis_make_@BASE_NAME@ ( + friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSM1, int ST1, const fsm &FSM2, int ST2, const interleaver &INTERLEAVER, diff --git a/gr-trellis/src/lib/trellis_permutation.h b/gr-trellis/src/lib/trellis_permutation.h index 5505caf89..7fec9682f 100644 --- a/gr-trellis/src/lib/trellis_permutation.h +++ b/gr-trellis/src/lib/trellis_permutation.h @@ -24,22 +24,23 @@ #ifndef INCLUDED_TRELLIS_PERMUTATION_H #define INCLUDED_TRELLIS_PERMUTATION_H +#include <trellis_api.h> #include <vector> #include <gr_sync_block.h> class trellis_permutation; typedef boost::shared_ptr<trellis_permutation> trellis_permutation_sptr; -trellis_permutation_sptr trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t NBYTES_INOUT); +TRELLIS_API trellis_permutation_sptr trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t NBYTES_INOUT); /*! * \brief Permutation. * \ingroup coding_blk */ -class trellis_permutation : public gr_sync_block +class TRELLIS_API trellis_permutation : public gr_sync_block { private: - friend trellis_permutation_sptr trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t NBYTES_INOUT); + friend TRELLIS_API trellis_permutation_sptr trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t NBYTES_INOUT); int d_K; std::vector<int> d_TABLE; int d_SYMS_PER_BLOCK; diff --git a/gr-trellis/src/lib/trellis_sccc_decoder_X.h.t b/gr-trellis/src/lib/trellis_sccc_decoder_X.h.t index 93c9ac9b8..9857c6a34 100644 --- a/gr-trellis/src/lib/trellis_sccc_decoder_X.h.t +++ b/gr-trellis/src/lib/trellis_sccc_decoder_X.h.t @@ -25,6 +25,7 @@ #ifndef @GUARD_NAME@ #define @GUARD_NAME@ +#include <trellis_api.h> #include "fsm.h" #include "interleaver.h" #include <gr_block.h> @@ -34,7 +35,7 @@ class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ trellis_make_@BASE_NAME@ ( +TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSMo, int STo0, int SToK, const fsm &FSMi, int STi0, int STiK, const interleaver &INTERLEAVER, @@ -47,7 +48,7 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; /*! * \ingroup coding_blk */ -class @NAME@ : public gr_block +class TRELLIS_API @NAME@ : public gr_block { fsm d_FSMo; int d_STo0; @@ -61,7 +62,7 @@ class @NAME@ : public gr_block trellis_siso_type_t d_SISO_TYPE; std::vector<float> d_buffer; - friend @SPTR_NAME@ trellis_make_@BASE_NAME@ ( + friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSMo, int STo0, int SToK, const fsm &FSMi, int STi0, int STiK, const interleaver &INTERLEAVER, diff --git a/gr-trellis/src/lib/trellis_sccc_decoder_combined_XX.h.t b/gr-trellis/src/lib/trellis_sccc_decoder_combined_XX.h.t index 225a07ffe..5d2c2b85c 100644 --- a/gr-trellis/src/lib/trellis_sccc_decoder_combined_XX.h.t +++ b/gr-trellis/src/lib/trellis_sccc_decoder_combined_XX.h.t @@ -25,6 +25,7 @@ #ifndef @GUARD_NAME@ #define @GUARD_NAME@ +#include <trellis_api.h> #include "fsm.h" #include "interleaver.h" #include <gr_block.h> @@ -35,7 +36,7 @@ class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ trellis_make_@BASE_NAME@ ( +TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSMo, int STo0, int SToK, const fsm &FSMi, int STi0, int STiK, const interleaver &INTERLEAVER, @@ -52,7 +53,7 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; /*! * \ingroup coding_blk */ -class @NAME@ : public gr_block +class TRELLIS_API @NAME@ : public gr_block { fsm d_FSMo; int d_STo0; @@ -70,7 +71,7 @@ class @NAME@ : public gr_block float d_scaling; std::vector<float> d_buffer; - friend @SPTR_NAME@ trellis_make_@BASE_NAME@ ( + friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSMo, int STo0, int SToK, const fsm &FSMi, int STi0, int STiK, const interleaver &INTERLEAVER, diff --git a/gr-trellis/src/lib/trellis_sccc_encoder_XX.h.t b/gr-trellis/src/lib/trellis_sccc_encoder_XX.h.t index a9e4dc454..0e8ff45a4 100644 --- a/gr-trellis/src/lib/trellis_sccc_encoder_XX.h.t +++ b/gr-trellis/src/lib/trellis_sccc_encoder_XX.h.t @@ -25,6 +25,7 @@ #ifndef @GUARD_NAME@ #define @GUARD_NAME@ +#include <trellis_api.h> #include <vector> #include "fsm.h" #include "interleaver.h" @@ -33,7 +34,7 @@ class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ trellis_make_@BASE_NAME@ ( +TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSMo, int STo, const fsm &FSMi, int STi, const interleaver &INTERLEAVER, @@ -44,10 +45,10 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; * \brief SCCC encoder. * \ingroup coding_blk */ -class @NAME@ : public gr_sync_block +class TRELLIS_API @NAME@ : public gr_sync_block { private: - friend @SPTR_NAME@ trellis_make_@BASE_NAME@ ( + friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSMo, int STo, const fsm &FSMi, int STi, const interleaver &INTERLEAVER, diff --git a/gr-trellis/src/lib/trellis_siso_combined_f.h b/gr-trellis/src/lib/trellis_siso_combined_f.h index 786e79386..2d043df62 100644 --- a/gr-trellis/src/lib/trellis_siso_combined_f.h +++ b/gr-trellis/src/lib/trellis_siso_combined_f.h @@ -23,6 +23,7 @@ #ifndef INCLUDED_TRELLIS_SISO_COMBINED_F_H #define INCLUDED_TRELLIS_SISO_COMBINED_F_H +#include <trellis_api.h> #include "fsm.h" #include "siso_type.h" #include "calc_metric.h" @@ -32,7 +33,7 @@ class trellis_siso_combined_f; typedef boost::shared_ptr<trellis_siso_combined_f> trellis_siso_combined_f_sptr; -trellis_siso_combined_f_sptr trellis_make_siso_combined_f ( +TRELLIS_API trellis_siso_combined_f_sptr trellis_make_siso_combined_f ( const fsm &FSM, // underlying FSM int K, // block size in trellis steps int S0, // initial state (put -1 if not specified) @@ -48,7 +49,7 @@ trellis_siso_combined_f_sptr trellis_make_siso_combined_f ( /*! * \ingroup coding_blk */ -class trellis_siso_combined_f : public gr_block +class TRELLIS_API trellis_siso_combined_f : public gr_block { fsm d_FSM; int d_K; @@ -63,7 +64,7 @@ class trellis_siso_combined_f : public gr_block //std::vector<float> d_alpha; //std::vector<float> d_beta; - friend trellis_siso_combined_f_sptr trellis_make_siso_combined_f ( + friend TRELLIS_API trellis_siso_combined_f_sptr trellis_make_siso_combined_f ( const fsm &FSM, int K, int S0, diff --git a/gr-trellis/src/lib/trellis_siso_f.h b/gr-trellis/src/lib/trellis_siso_f.h index 0e2cba67a..b3d02ad05 100644 --- a/gr-trellis/src/lib/trellis_siso_f.h +++ b/gr-trellis/src/lib/trellis_siso_f.h @@ -23,6 +23,7 @@ #ifndef INCLUDED_TRELLIS_SISO_F_H #define INCLUDED_TRELLIS_SISO_F_H +#include <trellis_api.h> #include "fsm.h" #include "siso_type.h" #include "core_algorithms.h" @@ -31,7 +32,7 @@ class trellis_siso_f; typedef boost::shared_ptr<trellis_siso_f> trellis_siso_f_sptr; -trellis_siso_f_sptr trellis_make_siso_f ( +TRELLIS_API trellis_siso_f_sptr trellis_make_siso_f ( const fsm &FSM, // underlying FSM int K, // block size in trellis steps int S0, // initial state (put -1 if not specified) @@ -45,7 +46,7 @@ trellis_siso_f_sptr trellis_make_siso_f ( /*! * \ingroup coding_blk */ -class trellis_siso_f : public gr_block +class TRELLIS_API trellis_siso_f : public gr_block { fsm d_FSM; int d_K; @@ -57,7 +58,7 @@ class trellis_siso_f : public gr_block //std::vector<float> d_alpha; //std::vector<float> d_beta; - friend trellis_siso_f_sptr trellis_make_siso_f ( + friend TRELLIS_API trellis_siso_f_sptr trellis_make_siso_f ( const fsm &FSM, int K, int S0, diff --git a/gr-trellis/src/lib/trellis_viterbi_X.h.t b/gr-trellis/src/lib/trellis_viterbi_X.h.t index 362d3f57e..c679649bb 100644 --- a/gr-trellis/src/lib/trellis_viterbi_X.h.t +++ b/gr-trellis/src/lib/trellis_viterbi_X.h.t @@ -25,6 +25,7 @@ #ifndef @GUARD_NAME@ #define @GUARD_NAME@ +#include <trellis_api.h> #include "fsm.h" #include <gr_block.h> #include "core_algorithms.h" @@ -32,7 +33,7 @@ class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ trellis_make_@BASE_NAME@ ( +TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSM, int K, int S0, @@ -43,7 +44,7 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; /*! * \ingroup coding_blk */ -class @NAME@ : public gr_block +class TRELLIS_API @NAME@ : public gr_block { fsm d_FSM; int d_K; @@ -51,7 +52,7 @@ class @NAME@ : public gr_block int d_SK; //std::vector<int> d_trace; - friend @SPTR_NAME@ trellis_make_@BASE_NAME@ ( + friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSM, int K, int S0, diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_XX.h.t b/gr-trellis/src/lib/trellis_viterbi_combined_XX.h.t index 35e6c4ce0..072f66158 100644 --- a/gr-trellis/src/lib/trellis_viterbi_combined_XX.h.t +++ b/gr-trellis/src/lib/trellis_viterbi_combined_XX.h.t @@ -25,6 +25,7 @@ #ifndef @GUARD_NAME@ #define @GUARD_NAME@ +#include <trellis_api.h> #include "fsm.h" #include <gr_block.h> #include "calc_metric.h" @@ -33,7 +34,7 @@ class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ trellis_make_@BASE_NAME@ ( +TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSM, int K, int S0, @@ -46,7 +47,7 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; /*! * \ingroup coding_blk */ -class @NAME@ : public gr_block +class TRELLIS_API @NAME@ : public gr_block { fsm d_FSM; int d_K; @@ -57,7 +58,7 @@ class @NAME@ : public gr_block trellis_metric_type_t d_TYPE; //std::vector<int> d_trace; - friend @SPTR_NAME@ trellis_make_@BASE_NAME@ ( + friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSM, int K, int S0, diff --git a/gr-trellis/src/python/CMakeLists.txt b/gr-trellis/src/python/CMakeLists.txt new file mode 100644 index 000000000..9cd645fe4 --- /dev/null +++ b/gr-trellis/src/python/CMakeLists.txt @@ -0,0 +1,37 @@ +# 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. + +######################################################################## +# Handle the unit tests +######################################################################## +IF(ENABLE_TESTING) +INCLUDE(GrTest) +FILE(GLOB py_qa_test_files "qa_*.py") +FOREACH(py_qa_test_file ${py_qa_test_files}) + GET_FILENAME_COMPONENT(py_qa_test_name ${py_qa_test_file} NAME_WE) + SET(GR_TEST_PYTHON_DIRS + ${CMAKE_BINARY_DIR}/gnuradio-core/src/python + ${CMAKE_BINARY_DIR}/gnuradio-core/src/lib/swig + ${CMAKE_BINARY_DIR}/gr-digital/swig + ${CMAKE_BINARY_DIR}/gr-trellis/src/lib + ) + SET(GR_TEST_TARGET_DEPS gruel gnuradio-core gnuradio-digital gnuradio-trellis) + GR_ADD_TEST(${py_qa_test_name} ${PYTHON_EXECUTABLE} ${py_qa_test_file}) +ENDFOREACH(py_qa_test_file) +ENDIF(ENABLE_TESTING) |