summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt2
-rw-r--r--cmake/Modules/GrBoost.cmake3
-rw-r--r--cmake/Modules/GrSetupQt4.cmake156
-rw-r--r--docs/doxygen/other/main_page.dox6
-rw-r--r--docs/doxygen/other/metadata.dox47
-rw-r--r--docs/doxygen/other/msg_passing.dox269
-rw-r--r--docs/doxygen/other/pmt.dox348
-rw-r--r--gnuradio-core/CMakeLists.txt7
-rw-r--r--gnuradio-core/src/lib/CMakeLists.txt18
-rw-r--r--gnuradio-core/src/lib/general/gr_random_pdu.cc83
-rw-r--r--gnuradio-core/src/lib/general/gr_random_pdu.h64
-rw-r--r--gnuradio-core/src/lib/general/gr_random_pdu.i30
-rw-r--r--gnuradio-core/src/lib/general/gr_tag_debug.cc4
-rw-r--r--gnuradio-core/src/lib/io/gr_pdu.cc24
-rw-r--r--gnuradio-core/src/lib/io/gr_pdu.h2
-rw-r--r--gnuradio-core/src/lib/io/gr_pdu.i2
-rw-r--r--gnuradio-core/src/lib/io/gr_socket_pdu.h2
-rw-r--r--gnuradio-core/src/lib/io/gr_stream_pdu_base.cc6
-rw-r--r--gnuradio-core/src/lib/runtime/gr_basic_block.h8
-rw-r--r--gnuradio-core/src/lib/runtime/gr_complex.h14
-rw-r--r--gnuradio-core/src/lib/swig/CMakeLists.txt8
-rw-r--r--gnuradio-core/src/python/gnuradio/gr/CMakeLists.txt7
-rwxr-xr-xgnuradio-core/src/python/gnuradio/gr/qa_pdu.py4
-rw-r--r--gnuradio-core/src/tests/CMakeLists.txt17
-rw-r--r--gr-analog/lib/CMakeLists.txt13
-rw-r--r--gr-analog/swig/CMakeLists.txt2
-rw-r--r--gr-atsc/src/lib/CMakeLists.txt9
-rw-r--r--gr-atsc/src/lib/atsc.i1
-rw-r--r--gr-atsc/src/lib/atsc_bit_timing_loop.cc8
-rw-r--r--gr-atsc/src/lib/atsc_equalizer.h5
-rw-r--r--gr-atsc/src/lib/atsci_equalizer.h5
-rw-r--r--gr-atsc/src/lib/atsci_equalizer_lms.h3
-rw-r--r--gr-atsc/src/lib/atsci_sssr.cc8
-rw-r--r--gr-atsc/src/python/all_atsc.py140
-rw-r--r--gr-audio/examples/c++/CMakeLists.txt8
-rw-r--r--gr-audio/lib/CMakeLists.txt7
-rw-r--r--gr-audio/swig/CMakeLists.txt2
-rw-r--r--gr-blocks/lib/CMakeLists.txt12
-rw-r--r--gr-blocks/lib/file_meta_sink_impl.cc11
-rw-r--r--gr-blocks/lib/file_meta_source_impl.cc11
-rw-r--r--gr-blocks/lib/file_source_impl.h1
-rw-r--r--gr-blocks/swig/CMakeLists.txt4
-rw-r--r--gr-comedi/src/CMakeLists.txt16
-rw-r--r--gr-digital/examples/demod/ber_simulation.grc320
-rw-r--r--gr-digital/examples/demod/digital_freq_lock.grc96
-rw-r--r--gr-digital/examples/demod/pam_sync.grc524
-rw-r--r--gr-digital/examples/demod/pam_timing.grc756
-rw-r--r--gr-digital/lib/CMakeLists.txt10
-rw-r--r--gr-digital/swig/CMakeLists.txt8
-rw-r--r--gr-fcd/examples/c++/CMakeLists.txt10
-rw-r--r--gr-fcd/lib/CMakeLists.txt9
-rw-r--r--gr-fcd/swig/CMakeLists.txt4
-rw-r--r--gr-fft/lib/CMakeLists.txt3
-rw-r--r--gr-fft/swig/CMakeLists.txt2
-rw-r--r--gr-filter/lib/CMakeLists.txt7
-rw-r--r--gr-filter/swig/CMakeLists.txt4
-rw-r--r--gr-howto-write-a-block/CMakeLists.txt8
-rw-r--r--gr-howto-write-a-block/swig/CMakeLists.txt2
-rw-r--r--gr-noaa/lib/CMakeLists.txt5
-rw-r--r--gr-noaa/swig/CMakeLists.txt2
-rw-r--r--gr-pager/lib/CMakeLists.txt5
-rw-r--r--gr-pager/swig/CMakeLists.txt2
-rw-r--r--gr-qtgui/CMakeLists.txt5
-rw-r--r--gr-qtgui/lib/CMakeLists.txt21
-rw-r--r--gr-qtgui/swig/CMakeLists.txt5
-rw-r--r--gr-shd/lib/CMakeLists.txt10
-rw-r--r--gr-shd/swig/CMakeLists.txt2
-rw-r--r--gr-trellis/src/lib/CMakeLists.txt9
-rw-r--r--gr-uhd/CMakeLists.txt1
-rw-r--r--gr-uhd/examples/c++/CMakeLists.txt10
-rw-r--r--gr-uhd/lib/CMakeLists.txt16
-rw-r--r--gr-uhd/swig/CMakeLists.txt5
-rw-r--r--gr-video-sdl/src/CMakeLists.txt10
-rw-r--r--gr-vocoder/lib/CMakeLists.txt5
-rw-r--r--gr-vocoder/swig/CMakeLists.txt2
-rw-r--r--gr-wavelet/lib/CMakeLists.txt3
-rw-r--r--gr-wavelet/swig/CMakeLists.txt2
-rw-r--r--gr-wxgui/src/python/plotter/plotter_base.py66
-rw-r--r--grc/blocks/block_tree.xml1
-rw-r--r--grc/blocks/gr_random_pdu.xml35
-rw-r--r--gruel/CMakeLists.txt1
-rw-r--r--gruel/src/include/gruel/pmt.h20
-rw-r--r--gruel/src/lib/CMakeLists.txt2
-rw-r--r--gruel/src/lib/pmt/pmt.cc10
-rw-r--r--gruel/src/lib/pmt/pmt_serialize.cc16
-rw-r--r--gruel/src/lib/pmt/qa_pmt_prims.cc12
-rw-r--r--gruel/src/lib/pmt/unv_template.cc.t12
-rw-r--r--gruel/src/swig/CMakeLists.txt6
-rw-r--r--gruel/src/swig/pmt_swig.i50
89 files changed, 2330 insertions, 1181 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4d0e59e70a..8f8adbb339 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -41,7 +41,7 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
# Set the version information here
set(VERSION_INFO_MAJOR_VERSION 3)
set(VERSION_INFO_API_COMPAT 6)
-set(VERSION_INFO_MINOR_VERSION 3)
+set(VERSION_INFO_MINOR_VERSION 4)
set(VERSION_INFO_MAINT_VERSION git)
include(GrVersion) #setup version info
diff --git a/cmake/Modules/GrBoost.cmake b/cmake/Modules/GrBoost.cmake
index 7c0d42134a..23bea41add 100644
--- a/cmake/Modules/GrBoost.cmake
+++ b/cmake/Modules/GrBoost.cmake
@@ -50,11 +50,12 @@ if(MSVC)
endif(BOOST_ALL_DYN_LINK)
endif(MSVC)
+# Boost 1.52 disabled, see https://svn.boost.org/trac/boost/ticket/7669
set(Boost_ADDITIONAL_VERSIONS
"1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
"1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
"1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
- "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
+ "1.50.0" "1.50" "1.51.0" "1.51" "1.53.0" "1.53" "1.54.0" "1.54"
"1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
"1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
"1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
diff --git a/cmake/Modules/GrSetupQt4.cmake b/cmake/Modules/GrSetupQt4.cmake
new file mode 100644
index 0000000000..2fa4d9bab9
--- /dev/null
+++ b/cmake/Modules/GrSetupQt4.cmake
@@ -0,0 +1,156 @@
+# Copyright 2013 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.
+
+if(DEFINED __INCLUDED_GR_USEQT4_CMAKE)
+ return()
+endif()
+set(__INCLUDED_GR_USEQT4_CMAKE TRUE)
+
+# This file is derived from the default "UseQt4" file provided by
+# CMake. This version sets the variables "QT_INCLUDE_DIRS",
+# "QT_LIBRARIES", and "QT_LIBRARIES_PLUGINS" depending on those
+# requested during the "find_package(Qt4 ...)" function call, but
+# without actually adding them to the include or library search
+# directories ("include_directories" or "link_directories"). The
+# adding in is done by the CMakeLists.txt build scripts in the using
+# project.
+
+# Copyright from the original file, as required by the license.
+################################################################
+# CMake - Cross Platform Makefile Generator
+# Copyright 2000-2011 Kitware, Inc., Insight Software Consortium
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# * Neither the names of Kitware, Inc., the Insight Software Consortium,
+# nor the names of their contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+################################################################
+
+ADD_DEFINITIONS(${QT_DEFINITIONS})
+SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG QT_DEBUG)
+SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELEASE QT_NO_DEBUG)
+SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELWITHDEBINFO QT_NO_DEBUG)
+SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_MINSIZEREL QT_NO_DEBUG)
+IF(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
+ SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS QT_NO_DEBUG)
+ENDIF()
+
+SET(QT_INCLUDE_DIRS ${QT_INCLUDE_DIR})
+SET(QT_LIBRARIES "")
+SET(QT_LIBRARIES_PLUGINS "")
+
+IF (QT_USE_QTMAIN)
+ IF (Q_WS_WIN)
+ SET(QT_LIBRARIES ${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY})
+ ENDIF (Q_WS_WIN)
+ENDIF (QT_USE_QTMAIN)
+
+IF(QT_DONT_USE_QTGUI)
+ SET(QT_USE_QTGUI 0)
+ELSE(QT_DONT_USE_QTGUI)
+ SET(QT_USE_QTGUI 1)
+ENDIF(QT_DONT_USE_QTGUI)
+
+IF(QT_DONT_USE_QTCORE)
+ SET(QT_USE_QTCORE 0)
+ELSE(QT_DONT_USE_QTCORE)
+ SET(QT_USE_QTCORE 1)
+ENDIF(QT_DONT_USE_QTCORE)
+
+IF (QT_USE_QT3SUPPORT)
+ ADD_DEFINITIONS(-DQT3_SUPPORT)
+ENDIF (QT_USE_QT3SUPPORT)
+
+# list dependent modules, so dependent libraries are added
+SET(QT_QT3SUPPORT_MODULE_DEPENDS QTGUI QTSQL QTXML QTNETWORK QTCORE)
+SET(QT_QTSVG_MODULE_DEPENDS QTGUI QTXML QTCORE)
+SET(QT_QTUITOOLS_MODULE_DEPENDS QTGUI QTXML QTCORE)
+SET(QT_QTHELP_MODULE_DEPENDS QTGUI QTSQL QTXML QTNETWORK QTCORE)
+IF(QT_QTDBUS_FOUND)
+ SET(QT_PHONON_MODULE_DEPENDS QTGUI QTDBUS QTCORE)
+ELSE(QT_QTDBUS_FOUND)
+ SET(QT_PHONON_MODULE_DEPENDS QTGUI QTCORE)
+ENDIF(QT_QTDBUS_FOUND)
+SET(QT_QTDBUS_MODULE_DEPENDS QTXML QTCORE)
+SET(QT_QTXMLPATTERNS_MODULE_DEPENDS QTNETWORK QTCORE)
+SET(QT_QAXCONTAINER_MODULE_DEPENDS QTGUI QTCORE)
+SET(QT_QAXSERVER_MODULE_DEPENDS QTGUI QTCORE)
+SET(QT_QTSCRIPTTOOLS_MODULE_DEPENDS QTGUI QTCORE)
+SET(QT_QTWEBKIT_MODULE_DEPENDS QTXMLPATTERNS QTGUI QTCORE)
+SET(QT_QTDECLARATIVE_MODULE_DEPENDS QTSCRIPT QTSVG QTSQL QTXMLPATTERNS QTGUI QTCORE)
+SET(QT_QTMULTIMEDIA_MODULE_DEPENDS QTGUI QTCORE)
+SET(QT_QTOPENGL_MODULE_DEPENDS QTGUI QTCORE)
+SET(QT_QTSCRIPT_MODULE_DEPENDS QTCORE)
+SET(QT_QTGUI_MODULE_DEPENDS QTCORE)
+SET(QT_QTTEST_MODULE_DEPENDS QTCORE)
+SET(QT_QTXML_MODULE_DEPENDS QTCORE)
+SET(QT_QTSQL_MODULE_DEPENDS QTCORE)
+SET(QT_QTNETWORK_MODULE_DEPENDS QTCORE)
+
+# Qt modules (in order of dependence)
+FOREACH(module QT3SUPPORT QTOPENGL QTASSISTANT QTDESIGNER QTMOTIF QTNSPLUGIN
+ QAXSERVER QAXCONTAINER QTDECLARATIVE QTSCRIPT QTSVG QTUITOOLS QTHELP
+ QTWEBKIT PHONON QTSCRIPTTOOLS QTMULTIMEDIA QTXMLPATTERNS QTGUI QTTEST
+ QTDBUS QTXML QTSQL QTNETWORK QTCORE)
+
+ IF (QT_USE_${module} OR QT_USE_${module}_DEPENDS)
+ IF (QT_${module}_FOUND)
+ IF(QT_USE_${module})
+ STRING(REPLACE "QT" "" qt_module_def "${module}")
+ ADD_DEFINITIONS(-DQT_${qt_module_def}_LIB)
+ SET(QT_INCLUDE_DIRS ${QT_INCLUDE_DIRS} ${QT_${module}_INCLUDE_DIR})
+ ENDIF(QT_USE_${module})
+ SET(QT_LIBRARIES ${QT_LIBRARIES} ${QT_${module}_LIBRARY})
+ SET(QT_LIBRARIES_PLUGINS ${QT_LIBRARIES_PLUGINS} ${QT_${module}_PLUGINS})
+ IF(QT_IS_STATIC)
+ SET(QT_LIBRARIES ${QT_LIBRARIES} ${QT_${module}_LIB_DEPENDENCIES})
+ ENDIF(QT_IS_STATIC)
+ FOREACH(depend_module ${QT_${module}_MODULE_DEPENDS})
+ SET(QT_USE_${depend_module}_DEPENDS 1)
+ ENDFOREACH(depend_module ${QT_${module}_MODULE_DEPENDS})
+ ELSE (QT_${module}_FOUND)
+ MESSAGE("Qt ${module} library not found.")
+ ENDIF (QT_${module}_FOUND)
+ ENDIF (QT_USE_${module} OR QT_USE_${module}_DEPENDS)
+
+ENDFOREACH(module)
diff --git a/docs/doxygen/other/main_page.dox b/docs/doxygen/other/main_page.dox
index 2826824647..abdc21b0c9 100644
--- a/docs/doxygen/other/main_page.dox
+++ b/docs/doxygen/other/main_page.dox
@@ -37,6 +37,12 @@ More details on packages in GNU Radio:
\li \ref page_qtgui
\li \ref page_uhd
\li \ref page_vocoder
+
+More details on GNU Radio concepts:
+\li \ref page_pmt
+\li \ref page_msg_passing
+\li \ref page_metadata
+\li \ref volk_guide
\li \ref page_pfb
diff --git a/docs/doxygen/other/metadata.dox b/docs/doxygen/other/metadata.dox
index 9fad7c584c..b527b21008 100644
--- a/docs/doxygen/other/metadata.dox
+++ b/docs/doxygen/other/metadata.dox
@@ -9,8 +9,8 @@ the system state such as sample rate or if a receiver's frequency are
not conveyed with the data in the file itself. Header of metadata
solve this problem.
-We write metadata files using blocks::file_meta_sink and read metadata
-files using blocks::file_meta_source.
+We write metadata files using gr::blocks::file_meta_sink and read metadata
+files using gr::blocks::file_meta_source.
Metadata files have headers that carry information about a segment of
data within the file. The header structure is described in detail in
@@ -88,28 +88,29 @@ keep the sample times exact.
\subsection implementation Implementation
-Metadata files are created using file_meta_sink. The default
-behavior is to create a single file with inline headers as
+Metadata files are created using gr::blocks::file_meta_sink. The
+default behavior is to create a single file with inline headers as
metadata. An option can be set to switch to detached header mode.
Metadata file are read into a flowgraph using
-file_meta_source. This source reads a metadata file, inline by
-default with a settable option to use detached headers. The data from
-the segments is converted into a standard streaming output. The
-'rx_rate' and 'rx_time' and all key:value pairs in the extra header
-are converted into tags and added to the stream tags interface.
+gr::blocks::file_meta_source. This source reads a metadata file,
+inline by default with a settable option to use detached headers. The
+data from the segments is converted into a standard streaming
+output. The 'rx_rate' and 'rx_time' and all key:value pairs in the
+extra header are converted into tags and added to the stream tags
+interface.
\section structure Structure
The file metadata consists of a static mandatory header and a dynamic
optional extras header. Each header is a separate PMT
-dictionary. Headers are created by building a PMT dictionary of
-key:value pairs, then the dictionary is serialized into a string to be
-written to file. The header is always the same length that is
-predetermined by the version of the header (this must be known
-already). The header will then indicate if there is an extra data to
-be extracted as a separate serialized dictionary.
+dictionary. Headers are created by building a PMT dictionary
+(pmt::pmt_make_dict) of key:value pairs, then the dictionary is
+serialized into a string to be written to file. The header is always
+the same length that is predetermined by the version of the header
+(this must be known already). The header will then indicate if there
+is an extra data to be extracted as a separate serialized dictionary.
To work with the PMTs for creating and extracting header information,
we use PMT operators. For example, we create a simplified version of
@@ -125,7 +126,7 @@ the header in C++ like this:
std::string hdr_str = pmt_serialize_str(header);
\endcode
-The call to pmt_dict_add adds a new key:value pair to the
+The call to pmt::pmt_dict_add adds a new key:value pair to the
dictionary. Notice that it both takes and returns the 'header'
variable. This is because we are actually creating a new dictionary
with this function, so we just assign it to the same variable.
@@ -133,10 +134,10 @@ with this function, so we just assign it to the same variable.
The 'mp' functions are convenience functions provided by the PMT
library. They interpret the data type of the value being inserted and
call the correct 'pmt_from_xxx' function. For more direct control over
-the data type, see PMT functions in pmt.h, such as pmt_from_uint64 or
-pmt_from_double.
+the data type, see PMT functions in pmt.h, such as
+pmt::pmt_from_uint64 or pmt::pmt_from_double.
-We finish this off by using 'pmt_serialize_str' to convert the PMT
+We finish this off by using pmt::pmt_serialize_str to convert the PMT
dictionary into a specialized string format that makes it easy to
write to a file.
@@ -189,7 +190,7 @@ must be the same length and structure. As of now, we only have version
- version: (char) version number (usually set to METADATA_VERSION)
- rx_rate: (double) Stream's sample rate
-- rx_time: (pmt_t pair - (uint64_t, double)) Time stamp (format from UHD)
+- rx_time: (pmt::pmt_t pair - (uint64_t, double)) Time stamp (format from UHD)
- size: (int) item size in bytes - reflects vector length if any.
- type: (int) data type (enum below)
- cplx: (bool) true if data is complex
@@ -220,7 +221,7 @@ a PMT dictionary of key:value pairs. The extras header can contain
anything and can grow while a program is running.
We can insert extra data into the header at the beginning if we
-wish. All we need to do is use the 'pmt_dict_add' function to insert
+wish. All we need to do is use the pmt::pmt_dict_add function to insert
our hand-made metadata. This can be useful to add our own markers and
information.
@@ -238,7 +239,7 @@ When reading out data from the extras, we do not necessarily know the
data type of the PMT value. The key is always a PMT symbol, but the
value can be any other PMT type. There are PMT functions that allow us
to query the PMT to test if it is a particular type. We also have the
-ability to do 'pmt_print' on any PMT object to print it to
+ability to do pmt::pmt_print on any PMT object to print it to
screen. Before converting from a PMT to it's natural data type, it is
necessary to know the data type.
@@ -297,7 +298,7 @@ The file sink example can be switched to use a signal source instead
of a UHD source, but no extra tagged data is used in this mode.
The file source example pushes the data stream to a new raw file while
-a tag debugger block prints out any tags observed in the metedata
+a tag debugger block prints out any tags observed in the metadata
file. A QT GUI time sink is used to look at the signal as well.
The versions with 'vector' in the name are similar except they use
diff --git a/docs/doxygen/other/msg_passing.dox b/docs/doxygen/other/msg_passing.dox
new file mode 100644
index 0000000000..aea0ac94ae
--- /dev/null
+++ b/docs/doxygen/other/msg_passing.dox
@@ -0,0 +1,269 @@
+/*! \page page_msg_passing Message Passing
+
+\section intro Introduction
+
+GNU Radio was originally a streaming system with no other mechanism to
+pass data between blocks. Streams of data are a model that work well
+for samples, bits, etc., but are not really the right mechanism for
+control data, metadata, and, often, packet structures (at least at
+some point in the processing chain).
+
+We solved part of this problem a few years ago by introducing the tag
+stream. This is a parallel stream to the data streaming. The
+difference is that tags are designed to hold metadata and control
+information. Tags are specifically associated with a particular sample
+in the data stream and flow downstream alongside the data. This model
+allows other blocks to identify that an event or action has occurred
+or should occur on a particular item. The major limitation is that the
+tag stream is really only accessible inside a work function and only
+flows in one direction. Its benefit is that it is isosynchronous with
+the data.
+
+We want a more general message passing system for a couple of
+reasons. The first is to allow blocks downstream to communicate back
+to blocks upstream. The second is to allow an easier way for us to
+communicate back and forth between external applications and GNU
+Radio. The new message passing interface handles these cases, although
+it does so on an asynchronous basis.
+
+The message passing interface heavily relies on Polymorphic Types
+(PMTs) in GNU Radio. For further information about these data
+structures, see the page \ref page_pmt.
+
+\section api Message Passing API
+
+The message passing interface is designed into the gr_basic_block,
+which is the parent class for all blocks in GNU Radio. Each block has
+a set of message queues to hold incoming messages and can post
+messages to the message queues of other blocks. The blocks also
+distinguish between input and output ports.
+
+A block has to declare its input and output message ports in its
+constructor. The message ports are described by a name, which is in
+practice a PMT symbol (<em>i.e.</em>, an interned string). The API calls
+to register a new port are:
+
+\code
+ void message_port_register_in(pmt::pmt_t port_id)
+ void message_port_register_out(pmt::pmt_t port_id)
+\endcode
+
+The ports are now identifiable by that port name. Other blocks who may
+want to post or receive messages on a port must subscribe to it. When
+a block has a message to send, they are published on a particular
+port. The subscribe and publish API looks like:
+
+\code
+ void message_port_pub(pmt::pmt_t port_id,
+ pmt::pmt_t msg);
+ void message_port_sub(pmt::pmt_t port_id,
+ pmt::pmt_t target);
+ void message_port_unsub(pmt::pmt_t port_id,
+ pmt::pmt_t target);
+\endcode
+
+Any block that has a subscription to another block's output message
+port will receive the message when it is published. Internally, when a
+block publishes a message, it simply iterates through all blocks that
+have subscribed and uses the gr_basic_block::_post method to send the
+message to that block's message queue.
+
+From the flowgraph level, we have instrumented a gr_hier_block2::msg_connect
+method to make it easy to subscribe blocks to other blocks'
+messages. The message connection method looks like the following
+code. Assume that the block \b src has an output message port named
+\a pdus and the block \b dbg has an input port named \a print.
+
+\code
+ self.tb.msg_connect(src, "pdus", dbg, "print")
+\endcode
+
+All messages published by the \b src block on port \a pdus will be
+received by \b dbg on port \a print. Note here how we are just using
+strings to define the ports, not PMT symbols. This is a convenience to
+the user to be able to more easily type in the port names (for
+reference, you can create a PMT symbol in Python using the
+pmt::pmt_intern function as pmt.pmt_intern("string")).
+
+Users can also query blocks for the names of their input and output
+ports using the following API calls:
+
+\code
+ pmt::pmt_t message_ports_in();
+ pmt::pmt_t message_ports_out();
+\endcode
+
+The return value for these are a PMT vector filled with PMT symbols,
+so PMT operators must be used to manipulate them.
+
+Each block has internal methods to handle posting and receiving of
+messages. The gr_basic_block::_post method takes in a message and
+places it into its queue. The publishing model uses the
+gr_basic_block::_post method of the blocks as the way to access the
+message queue. So the message queue of the right name will have a new
+message. Posting messages also has the benefit of waking up the
+block's thread if it is in a wait state. So if idle, as soon as a
+message is posted, it will wake up and and call the message handler.
+
+The other side of the action in a block is in the message
+handler. When a block has an input message port, it needs a callback
+function to handle messages received on that port. We use a Boost bind
+operator to bind the message port to the message handling
+function. When a new message is pushed onto a port's message queue,
+it is this function that is used to process the message.
+
+
+\section examples Code Examples
+
+The following is snippets of code from blocks current in GNU Radio
+that take advantage of message passing. We will be using
+gr_message_debug and gr_tagged_stream_to_pdu below to show setting up
+both input and output message passing capabilities.
+
+The gr_message_debug block is used for debugging the message passing
+system. It describes two input message ports: \a print and \a
+store. The \a print port simply prints out all messages to standard
+out while the \a store port keeps a list of all messages posted to
+it. This latter port works in conjunction with a
+gr_message_debug::get_message(int i) call that allows us to retrieve
+message \p i afterward.
+
+The constructor of this block looks like this:
+
+\code
+{
+ message_port_register_in(pmt::mp("print"));
+ set_msg_handler(pmt::mp("print"),
+ boost::bind(&gr_message_debug::print, this, _1));
+
+ message_port_register_in(pmt::mp("store"));
+ set_msg_handler(pmt::mp("store"),
+ boost::bind(&gr_message_debug::store, this, _1));
+}
+\endcode
+
+So the two ports are registered by their respective names. We then use
+the gr_basic_block::set_msg_handler function to identify this
+particular port name with a callback function. The Boost \a bind
+function (<a target="_blank"
+href="http://www.boost.org/doc/libs/1_52_0/libs/bind/bind.html">Boost::bind</a>)
+here binds the callback to a function of this block's class. So now
+the block's gr_message_debug::print and gr_message_debug::store
+functions are assigned to handle messages passed to them. Below is the
+\a print function for reference.
+
+\code
+void
+gr_message_debug::print(pmt::pmt_t msg)
+{
+ std::cout << "***** MESSAGE DEBUG PRINT ********\n";
+ pmt::pmt_print(msg);
+ std::cout << "**********************************\n";
+}
+\endcode
+
+The function simply takes in the PMT message and prints it. The method
+pmt::pmt_print is a function in the PMT library to print the
+PMT in a friendly, (mostly) pretty manner.
+
+The gr_tagged_stream_to_pdu block only defines a single
+output message port. In this case, its constructor looks like:
+
+\code
+{
+ message_port_register_out(pdu_port_id);
+}
+\endcode
+
+So we are only creating a single output port where \a pdu_port_id
+is defined in the file gr_pdu.h as \a pdus.
+
+This blocks purpose is to take in a stream of samples along with
+stream tags and construct a predefined PDU message from this. In GNU
+Radio, we define a PDU as a PMT pair of (metadata, data). The metadata
+describes the samples found in the data portion of the
+pair. Specifically, the metadata can contain the length of the data
+segment and any other information (sample rate, etc.). The PMT vectors
+know their own length, so the length value is not actually necessary
+unless useful for purposes down the line. The metadata is a PMT
+dictionary while the data segment is a PMT uniform vector of either
+bytes, floats, or complex values.
+
+In the end, when a PDU message is ready, the block calls its
+gr_tagged_stream_to_pdu::send_message function that is shown below.
+
+\code
+void
+gr_tagged_stream_to_pdu::send_meassage()
+{
+ if(pmt::pmt_length(d_pdu_vector) != d_pdu_length) {
+ throw std::runtime_error("msg length not correct");
+ }
+
+ pmt::pmt_t msg = pmt::pmt_cons(d_pdu_meta,
+ d_pdu_vector);
+ message_port_pub(pdu_port_id, msg);
+
+ d_pdu_meta = pmt::PMT_NIL;
+ d_pdu_vector = pmt::PMT_NIL;
+ d_pdu_length = 0;
+ d_pdu_remain = 0;
+ d_inpdu = false;
+}
+\endcode
+
+This function does a bit of checking to make sure the PDU is ok as
+well as some cleanup in the end. But it is the line where the message
+is published that is important to this discussion. Here, the block
+posts the PDU message to any subscribers by calling
+gr_basic_block::message_port_pub publishing method.
+
+There is similarly a gr_pdu_to_tagged_stream block that essentially
+does the opposite. It acts as a source to a flowgraph and waits for
+PDU messages to be posted to it on its input port \a pdus. It extracts
+the metadata and data and processes them. The metadata dictionary is
+split up into key:value pairs and stream tags are created out of
+them. The data is then converted into an output stream of items and
+passed along. The next section describes how PDUs can be passed into a
+flowgraph using the gr_pdu_to_tagged_stream block.
+
+\section posting Posting from External Sources
+
+The last feature of the message passing architecture to discuss here
+is how it can be used to take in messages from an external source. We
+can call a block's gr_basic_block::_post method directly and pass it a
+message. So any block with an input message port can receive messages
+from the outside in this way.
+
+The following example uses a gr_pdu_to_tagged_stream block
+as the source block to a flowgraph. Its purpose is to wait for
+messages as PDUs posted to it and convert them to a normal stream. The
+payload will be sent on as a normal stream while the meta data will be
+decoded into tags and sent on the tagged stream.
+
+So if we have created a \b src block as a PDU to stream, it has a \a
+pdus input port, which is how we will inject PDU messages to the
+flowgraph. These PDUs could come from another block or flowgraph, but
+here, we will create and insert them by hand.
+
+\code
+ port = pmt.pmt_intern("pdus")
+ msg = pmt.pmt_cons(pmt.PMT_NIL,
+ pmt.pmt_make_u8vector(16, 0xFF))
+ src.to_basic_block()._post(port, msg)
+\endcode
+
+The PDU's metadata section is empty, hence the pmt::PMT_NIL
+object. The payload is now just a simple vector of 16 bytes of all
+1's. To post the message, we have to access the block's gr_basic_block
+class, which we do using the gr_basic_block::to_basic_block method and
+then call the gr_basic_block::_post method to pass the PDU to the
+right port.
+
+All of these mechanisms are explored and tested in the QA code of the
+file qa_pdu.py.
+
+There are some examples of using the message passing infrastructure
+through GRC in gnuradio-core/src/examples/msg_passing.
+
+*/
diff --git a/docs/doxygen/other/pmt.dox b/docs/doxygen/other/pmt.dox
new file mode 100644
index 0000000000..61b73bca13
--- /dev/null
+++ b/docs/doxygen/other/pmt.dox
@@ -0,0 +1,348 @@
+/*! \page page_pmt Polymorphic Types
+
+\section intro Introduction
+
+Polymorphic Types are opaque data types that are designed as generic
+containers of data that can be safely passed around between blocks and
+threads in GNU Radio. They are heavily used in the stream tags and
+message passing interfaces. The most complete list of PMT function is,
+of course, the source code, specifically the header file pmt.h. This
+manual page summarizes the most important features and points of PMTs.
+
+
+\section datatype PMT Data Type
+
+All PMTs are of the type pmt::pmt_t. This is an opaque container and
+PMT functions must be used to manipulate and even do things like
+compare PMTs. PMTs are also \a immutable (except PMT vectors). We
+never change the data in a PMT; instead, we create a new PMT with the
+new data. The main reason for this is thread safety. We can pass PMTs
+as tags and messages between blocks and each receives its own copy
+that we can read from. However, we can never write to this object, and
+so if multiple blocks have a reference to the same PMT, there is no
+possibility of thread-safety issues of one reading the PMT data while
+another is writing the data. If a block is trying to write new data to
+a PMT, it actually creates a new PMT to put the data into. Thus we
+allow easy access to data in the PMT format without worrying about
+mutex locking and unlocking while manipulating them.
+
+PMTs can represent the following:
+
+- Boolean values of true/false
+- Strings (as symbols)
+- Integers (long and uint64)
+- Floats (as doubles)
+- Complex (as two doubles)
+- Pairs
+- Tuples
+- Vectors (of PMTs)
+- Uniform vectors (of any standard data type)
+- Dictionaries (list of key:value pairs)
+- Any (contains a boost::any pointer to hold anything)
+
+The PMT library also defines a set of functions that operate directly
+on PMTs such as:
+
+- Equal/equivalence between PMTs
+- Length (of a tuple or vector)
+- Map (apply a function to all elements in the PMT)
+- Reverse
+- Get a PMT at a position in a list
+- Serialize and deserialize
+- Printing
+
+The constants in the PMT library are:
+
+- pmt::PMT_T - a PMT True
+- pmt::PMT_F - a PMT False
+- pmt::PMT_NIL - an empty PMT (think Python's 'None')
+
+\section insert Inserting and Extracting Data
+
+Use pmt.h for a complete guide to the list of functions used to create
+PMTs and get the data from a PMT. When using these functions, remember
+that while PMTs are opaque and designed to hold any data, the data
+underneath is still a C++ typed object, and so the right type of
+set/get function must be used for the data type.
+
+Typically, a PMT object can be made from a scalar item using a call
+like "pmt::pmt_from_<type>". Similarly, when getting data out of a
+PMT, we use a call like "pmt::pmt_to_<type>". For example:
+
+\code
+double a = 1.2345;
+pmt::pmt_t pmt_a = pmt::pmt_from_double(a);
+double b = pmt::pmt_to_double(pmt_a);
+
+int c = 12345;
+pmt::pmt_t pmt_c = pmt::pmt_from_long(c);
+int d = pmt::pmt_to_long(pmt_c);
+\endcode
+
+As a side-note, making a PMT from a complex number is not obvious:
+
+\code
+std::complex<double> a(1.2, 3.4);
+pmt::pmt_t pmt_a = pmt::pmt_make_rectangular(a.real(), b.imag());
+std::complex<double> b = pmt::pmt_to_complex(pmt_a);
+\endcode
+
+Pairs, dictionaries, and vectors have different constructors and ways
+to manipulate them, and these are explained in their own sections.
+
+
+\section strings Strings
+
+PMTs have a way of representing short strings. These strings are
+actually stored as interned symbols in a hash table, so in other
+words, only one PMT object for a given string exists. If creating a
+new symbol from a string, if that string already exists in the hash
+table, the constructor will return a reference to the existing PMT.
+
+We create strings with the following functions, where the second
+function, pmt::pmt_intern, is simply an alias of the first.
+
+\code
+pmt::pmt_t str0 = pmt::pmt_string_to_symbol(std::string("some string"));
+pmt::pmt_t str1 = pmt::pmt_intern(std::string("some string"));
+\endcode
+
+The string can be retrieved using the inverse function:
+
+\code
+std::string s = pmt::pmt_symbol_to_string(str0);
+\endcode
+
+
+\section tests Tests and Comparisons
+
+The PMT library comes with a number of functions to test and compare
+PMT objects. In general, for any PMT data type, there is an equivalent
+"pmt::pmt_is_<type>". We can use these to test the PMT before trying
+to access the data inside. Expanding our examples above, we have:
+
+\code
+pmt::pmt_t str0 = pmt::pmt_string_to_symbol(std::string("some string"));
+if(pmt::pmt_is_symbol(str0))
+ std::string s = pmt::pmt_symbol_to_string(str0);
+
+double a = 1.2345;
+pmt::pmt_t pmt_a = pmt::pmt_from_double(a);
+if(pmt::pmt_is_double(pmt_a))
+ double b = pmt::pmt_to_double(pmt_a);
+
+int c = 12345;
+pmt::pmt_t pmt_c = pmt::pmt_from_long(c);
+if(pmt::pmt_is_long(pmt_a))
+ int d = pmt::pmt_to_long(pmt_c);
+
+\\ This will fail the test. Otherwise, trying to coerce \b pmt_c as a
+\\ double when internally it is a long will result in an exception.
+if(pmt::pmt_is_double(pmt_a))
+ double d = pmt::pmt_to_double(pmt_c);
+
+\endcode
+
+
+\section dict Dictionaries
+
+PMT dictionaries and lists of key:value pairs. They have a
+well-defined interface for creating, adding, removing, and accessing
+items in the dictionary. Note that every operation that changes the
+dictionary both takes a PMT dictionary as an argument and returns a
+PMT dictionary. The dictionary used as an input is not changed and the
+returned dictionary is a new PMT with the changes made there.
+
+The following is a list of PMT dictionary functions. Click through to
+get more information on what each does.
+
+- bool pmt::pmt_is_dict(const pmt_t &obj)
+- pmt_t pmt::pmt_make_dict()
+- pmt_t pmt::pmt_dict_add(const pmt_t &dict, const pmt_t &key, const pmt_t &value)
+- pmt_t pmt::pmt_dict_delete(const pmt_t &dict, const pmt_t &key)
+- bool pmt::pmt_dict_has_key(const pmt_t &dict, const pmt_t &key)
+- pmt_t pmt::pmt_dict_ref(const pmt_t &dict, const pmt_t &key, const pmt_t &not_found)
+- pmt_t pmt::pmt_dict_items(pmt_t dict)
+- pmt_t pmt::pmt_dict_keys(pmt_t dict)
+- pmt_t pmt::pmt_dict_values(pmt_t dict)
+
+This example does some basic manipulations of PMT dictionaries in
+Python. Notice that we pass the dictionary \a a and return the results
+to \a a. This still creates a new dictionary and removes the local
+reference to the old dictionary. This just keeps our number of
+variables small.
+
+\code
+from gruel import pmt
+
+key0 = pmt.pmt_intern("int")
+val0 = pmt.pmt_from_long(123)
+val1 = pmt.pmt_from_long(234)
+
+key1 = pmt.pmt_intern("double")
+val2 = pmt.pmt_from_double(5.4321)
+
+# Make an empty dictionary
+a = pmt.pmt_make_dict()
+
+# Add a key:value pair to the dictionary
+a = pmt.pmt_dict_add(a, key0, val0)
+pmt.pmt_print(a)
+
+# Add a new value to the same key;
+# new dict will still have one item with new value
+a = pmt.pmt_dict_add(a, key0, val1)
+pmt.pmt_print(a)
+
+# Add a new key:value pair
+a = pmt.pmt_dict_add(a, key1, val2)
+pmt.pmt_print(a)
+
+# Test if we have a key, then delete it
+print pmt.pmt_dict_has_key(a, key1)
+a = pmt.pmt_dict_delete(a, key1)
+print pmt.pmt_dict_has_key(a, key1)
+
+ref = pmt.pmt_dict_ref(a, key0, pmt.PMT_NIL)
+pmt.pmt_print(ref)
+
+# The following should never print
+if(pmt.pmt_dict_has_key(a, key0) and pmt.pmt_eq(ref, pmt.PMT_NIL)):
+ print "Trouble! We have key0, but it returned PMT_NIL"
+\endcode
+
+\section vectors Vectors
+
+PMT vectors come in two forms: vectors of PMTs and vectors of uniform
+data. The standard PMT vector is a vector of PMTs, and each PMT can be
+of any internal type. On the other hand, uniform PMTs are of a
+specific data type which come in the form:
+
+- (u)int8
+- (u)int16
+- (u)int32
+- (u)int64
+- float32
+- float64
+- complex 32 (std::complex<float>)
+- complex 64 (std::complex<double>)
+
+That is, the standard sizes of integers, floats, and complex types of
+both signed and unsigned.
+
+Vectors have a well-defined interface that allows us to make, set,
+get, and fill them. We can also get the length of a vector with
+pmt::pmt_length.
+
+For standard vectors, these functions look like:
+
+- bool pmt::pmt_is_vector(pmt_t x)
+- pmt_t pmt::pmt_make_vector(size_t k, pmt_t fill)
+- pmt_t pmt::pmt_vector_ref(pmt_t vector, size_t k)
+- void pmt::pmt_vector_set(pmt_t vector, size_t k, pmt_t obj)
+- void pmt::pmt_vector_fill(pmt_t vector, pmt_t fill)
+
+Uniform vectors have the same types of functions, but they are data
+type-dependent. The following list tries to explain them where you
+substitute the specific data type prefix for \a dtype (prefixes being:
+u8, u16, u32, u64, s8, s16, s32, s64, f32, f64, c32, c64).
+
+- bool pmt::pmt_is_(dtype)vector(pmt_t x)
+- pmt_t pmt::pmt_make_(dtype)vector(size_t k, (dtype) fill)
+- pmt_t pmt::pmt_init_(dtype)vector(size_t k, const (dtype*) data)
+- pmt_t pmt::pmt_init_(dtype)vector(size_t k, const std::vector<dtype> data)
+- pmt_t pmt::pmt_(dtype)vector_ref(pmt_t vector, size_t k)
+- void pmt::pmt_(dtype)vector_set(pmt_t vector, size_t k, (dtype) x)
+- const dtype* pmt::pmt_(dtype)vector_elements(pmt_t vector, size_t &len)
+- dtype* pmt::pmt_(dtype)vector_writable_elements(pmt_t vector, size_t &len)
+
+\b Note: We break the contract with vectors. The 'set' functions
+actually change the data underneath. It is important to keep track of
+the implications of setting a new value as well as accessing the
+'vector_writable_elements' data. Since these are mostly standard data
+types, sets and gets are atomic, so it is unlikely to cause a great
+deal of harm. But it's only unlikely, not impossible. Best to use
+mutexes whenever manipulating data in a vector.
+
+
+\subsection blob BLOB
+
+A BLOB is a 'binary large object' type. In PMT's, this is actually
+just a thin wrapper around a u8vector.
+
+\section pairs Pairs
+
+Pairs are inspired by LISP 'cons' data types, so you will find the
+language here comes from LISP. A pair is just a pair of PMT
+objects. They are manipulated using the following functions:
+
+- bool pmt::pmt_is_pair (const pmt_t &obj): Return true if obj is a pair, else false
+- pmt_t pmt::pmt_cons(const pmt_t &x, const pmt_t &y): construct new pair
+- pmt_t pmt::pmt_car(const pmt_t &pair): get the car of the pair (first object)
+- pmt_t pmt::pmt_cdr(const pmt_t &pair): get the cdr of the pair (second object)
+- void pmt::pmt_set_car(pmt_t pair, pmt_t value): Stores value in the car field
+- void pmt::pmt_set_cdr(pmt_t pair, pmt_t value): Stores value in the cdr field
+
+
+\section serdes Serializing and Deserializing
+
+It is often important to hide the fact that we are working with PMTs
+to make them easier to transmit, store, write to file, etc. The PMT
+library has methods to serialize data into a string buffer or a
+string and then methods to deserialize the string buffer or string
+back into a PMT. We use this extensively in the metadata files (see
+\ref page_metadata).
+
+- bool pmt::pmt_serialize(pmt_t obj, std::streambuf &sink)
+- std::string pmt::pmt_serialize_str(pmt_t obj)
+- pmt_t pmt::pmt_deserialize(std::streambuf &source)
+- pmt_t pmt::pmt_deserialize_str(std::string str)
+
+For example, we will serialize the data above to make it into a string
+ready to be written to a file and then deserialize it back to its
+original PMT.
+
+\code
+from gruel import pmt
+
+key0 = pmt.pmt_intern("int")
+val0 = pmt.pmt_from_long(123)
+
+key1 = pmt.pmt_intern("double")
+val1 = pmt.pmt_from_double(5.4321)
+
+# Make an empty dictionary
+a = pmt.pmt_make_dict()
+
+# Add a key:value pair to the dictionary
+a = pmt.pmt_dict_add(a, key0, val0)
+a = pmt.pmt_dict_add(a, key1, val1)
+
+pmt.pmt_print(a)
+
+ser_str = pmt.pmt_serialize_str(a)
+print ser_str
+
+b = pmt.pmt_deserialize_str(ser_str)
+pmt.pmt_print(b)
+
+\endcode
+
+The line where we 'print ser_str' will print and parts will be
+readable, but the point of serializing is not to make a human-readable
+string. This is only done here as a test.
+
+
+\section printing Printing
+
+We have used the pmt::pmt_print function in these examples to nicely
+print the contents of a PMT. Another way to print the contents is
+using the overloaded "<<" operator with a stream buffer object. In
+C++, we can inline print the contents of a PMT like:
+
+\code
+pmt::pmt_t a pmt::pmt_from_double(1.0);
+std::cout << "The PMT a contains " << a << std::endl;
+\endcode
+
+*/
diff --git a/gnuradio-core/CMakeLists.txt b/gnuradio-core/CMakeLists.txt
index 2f06791ca6..b277103547 100644
--- a/gnuradio-core/CMakeLists.txt
+++ b/gnuradio-core/CMakeLists.txt
@@ -45,8 +45,6 @@ GR_REGISTER_COMPONENT("gnuradio-core" ENABLE_GR_CORE
include(GrMiscUtils)
GR_SET_GLOBAL(GNURADIO_CORE_INCLUDE_DIRS
- ${Boost_INCLUDE_DIRS}
- ${GRUEL_INCLUDE_DIRS} #headers depend on gruel
${CMAKE_CURRENT_SOURCE_DIR}/src/lib/runtime
${CMAKE_CURRENT_BINARY_DIR}/src/lib/general
${CMAKE_CURRENT_SOURCE_DIR}/src/lib/general
@@ -61,14 +59,13 @@ GR_SET_GLOBAL(GNURADIO_CORE_INCLUDE_DIRS
${CMAKE_CURRENT_BINARY_DIR}/src/lib/swig
${CMAKE_CURRENT_SOURCE_DIR}/src/lib/swig
${CMAKE_CURRENT_SOURCE_DIR}/src/lib/hier
- ${Boost_INCLUDE_DIRS}
)
GR_SET_GLOBAL(GNURADIO_CORE_SWIG_INCLUDE_DIRS
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/swig
${CMAKE_SOURCE_DIR}/gruel/src/swig
${CMAKE_BINARY_DIR}/gruel/src/swig
- ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/swig
- ${GNURADIO_CORE_INCLUDE_DIRS}
)
########################################################################
diff --git a/gnuradio-core/src/lib/CMakeLists.txt b/gnuradio-core/src/lib/CMakeLists.txt
index 9c980157db..89a1bad88b 100644
--- a/gnuradio-core/src/lib/CMakeLists.txt
+++ b/gnuradio-core/src/lib/CMakeLists.txt
@@ -41,14 +41,18 @@ list(APPEND test_gnuradio_core_sources bug_work_around_6.cc)
########################################################################
# Setup the include and linker paths
########################################################################
-include_directories(${GNURADIO_CORE_INCLUDE_DIRS})
-include_directories(${VOLK_INCLUDE_DIRS})
-
-include_directories(${Boost_INCLUDE_DIRS})
-link_directories(${Boost_LIBRARY_DIRS})
+include_directories(
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${VOLK_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+ ${FFTW3F_INCLUDE_DIRS}
+)
-include_directories(${FFTW3F_INCLUDE_DIRS})
-link_directories(${FFTW3F_LIBRARY_DIRS})
+link_directories(
+ ${Boost_LIBRARY_DIRS}
+ ${FFTW3F_LIBRARY_DIRS}
+)
########################################################################
# Setup library
diff --git a/gnuradio-core/src/lib/general/gr_random_pdu.cc b/gnuradio-core/src/lib/general/gr_random_pdu.cc
new file mode 100644
index 0000000000..9f692c72be
--- /dev/null
+++ b/gnuradio-core/src/lib/general/gr_random_pdu.cc
@@ -0,0 +1,83 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2012 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gr_random_pdu.h>
+#include <gr_io_signature.h>
+#include <cstdio>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <stdexcept>
+#include <string.h>
+#include <iostream>
+
+// public constructor that returns a shared_ptr
+
+gr_random_pdu_sptr
+gr_make_random_pdu (int items_min, int items_max)
+{
+ return gnuradio::get_initial_sptr(new gr_random_pdu(items_min, items_max));
+}
+
+gr_random_pdu::gr_random_pdu (int items_min, int items_max)
+ : gr_block("random_pdu",
+ gr_make_io_signature(0, 0, 0),
+ gr_make_io_signature(0, 0, 0)),
+ urange(items_min, items_max),
+ brange(0, 255),
+ rvar(rng, urange),
+ bvar(rng, brange)
+{
+ message_port_register_out(pmt::mp("pdus"));
+ message_port_register_in(pmt::mp("generate"));
+ set_msg_handler(pmt::mp("generate"), boost::bind(&gr_random_pdu::generate_pdu, this, _1));
+}
+
+bool gr_random_pdu::start(){
+ output_random();
+ return true;
+}
+
+void gr_random_pdu::output_random(){
+
+ // pick a random vector length
+ int len = rvar();
+
+ // fill it with random bytes
+ unsigned char vec[len];
+ for(int i=0; i<len; i++){
+ vec[i] = (unsigned char) bvar();
+ }
+
+ // send the vector
+ pmt::pmt_t vecpmt( pmt::pmt_make_blob( vec, len ) );
+ pmt::pmt_t pdu( pmt::pmt_cons( pmt::PMT_NIL, vecpmt ) );
+ message_port_pub( pmt::mp("pdus"), pdu );
+
+ std::cout << "sending new random vector of length " << len << "\n";
+}
+
diff --git a/gnuradio-core/src/lib/general/gr_random_pdu.h b/gnuradio-core/src/lib/general/gr_random_pdu.h
new file mode 100644
index 0000000000..e6457d21b6
--- /dev/null
+++ b/gnuradio-core/src/lib/general/gr_random_pdu.h
@@ -0,0 +1,64 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2012 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_GR_RANDOM_PDU_H
+#define INCLUDED_GR_RANDOM_PDU_H
+
+#include <gr_core_api.h>
+#include <gr_block.h>
+#include <gr_message.h>
+#include <gr_msg_queue.h>
+
+#include <boost/random.hpp>
+#include <boost/generator_iterator.hpp>
+
+class gr_random_pdu;
+typedef boost::shared_ptr<gr_random_pdu> gr_random_pdu_sptr;
+
+GR_CORE_API gr_random_pdu_sptr gr_make_random_pdu (int mintime, int maxtime);
+
+/*!
+ * \brief Send message at defined interval
+ * \ingroup msg_blk
+ */
+class GR_CORE_API gr_random_pdu : public gr_block
+{
+ private:
+ friend GR_CORE_API gr_random_pdu_sptr
+ gr_make_random_pdu(int mintime, int maxtime);
+
+ void output_random();
+
+ boost::mt19937 rng;
+ boost::uniform_int<> urange;
+ boost::uniform_int<> brange;
+ boost::variate_generator< boost::mt19937, boost::uniform_int<> > rvar; // pdu length
+ boost::variate_generator< boost::mt19937, boost::uniform_int<> > bvar; // pdu contents
+
+ public:
+ gr_random_pdu (int, int);
+ bool start();
+ void generate_pdu(pmt::pmt_t msg){ output_random(); }
+ void generate_pdu(){ output_random(); }
+};
+
+#endif /* INCLUDED_GR_RANDOM_PDU_H */
diff --git a/gnuradio-core/src/lib/general/gr_random_pdu.i b/gnuradio-core/src/lib/general/gr_random_pdu.i
new file mode 100644
index 0000000000..045a330605
--- /dev/null
+++ b/gnuradio-core/src/lib/general/gr_random_pdu.i
@@ -0,0 +1,30 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2005 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.
+ */
+
+GR_SWIG_BLOCK_MAGIC(gr,random_pdu);
+
+%{
+#include <gr_random_pdu.h>
+%}
+
+%include "gr_random_pdu.h"
+
diff --git a/gnuradio-core/src/lib/general/gr_tag_debug.cc b/gnuradio-core/src/lib/general/gr_tag_debug.cc
index 5833a18912..ecf1b65e1f 100644
--- a/gnuradio-core/src/lib/general/gr_tag_debug.cc
+++ b/gnuradio-core/src/lib/general/gr_tag_debug.cc
@@ -81,10 +81,10 @@ gr_tag_debug::work(int noutput_items,
get_tags_in_range(d_tags, i, abs_N, end_N);
if(d_display) {
- sout << "Input Stream: " << i << std::endl;
+ sout << "Input Stream: " << std::setw(2) << std::setfill('0') << i << std::setfill(' ') << std::endl;
for(d_tags_itr = d_tags.begin(); d_tags_itr != d_tags.end(); d_tags_itr++) {
sout << std::setw(10) << "Offset: " << d_tags_itr->offset
- << std::setw(10) << "Source: " << pmt::pmt_symbol_to_string(d_tags_itr->srcid)
+ << std::setw(10) << "Source: " << (pmt::pmt_is_symbol(d_tags_itr->srcid) ? pmt::pmt_symbol_to_string(d_tags_itr->srcid) : "n/a")
<< std::setw(10) << "Key: " << pmt::pmt_symbol_to_string(d_tags_itr->key)
<< std::setw(10) << "Value: ";
sout << d_tags_itr->value << std::endl;
diff --git a/gnuradio-core/src/lib/io/gr_pdu.cc b/gnuradio-core/src/lib/io/gr_pdu.cc
index b2757c307e..302fd7b9bb 100644
--- a/gnuradio-core/src/lib/io/gr_pdu.cc
+++ b/gnuradio-core/src/lib/io/gr_pdu.cc
@@ -29,11 +29,11 @@
size_t
gr_pdu_itemsize(gr_pdu_vector_type type){
switch(type){
- case BYTE:
+ case pdu_byte:
return 1;
- case FLOAT:
+ case pdu_float:
return sizeof(float);
- case COMPLEX:
+ case pdu_complex:
return sizeof(gr_complex);
default:
throw std::runtime_error("bad type!");
@@ -43,11 +43,11 @@ gr_pdu_itemsize(gr_pdu_vector_type type){
bool
gr_pdu_type_matches(gr_pdu_vector_type type, pmt::pmt_t v){
switch(type){
- case BYTE:
+ case pdu_byte:
return pmt::pmt_is_u8vector(v);
- case FLOAT:
+ case pdu_float:
return pmt::pmt_is_f32vector(v);
- case COMPLEX:
+ case pdu_complex:
return pmt::pmt_is_c32vector(v);
default:
throw std::runtime_error("bad type!");
@@ -57,11 +57,11 @@ gr_pdu_type_matches(gr_pdu_vector_type type, pmt::pmt_t v){
pmt::pmt_t
gr_pdu_make_vector(gr_pdu_vector_type type, const uint8_t* buf, size_t items){
switch(type){
- case BYTE:
+ case pdu_byte:
return pmt::pmt_init_u8vector(items, buf);
- case FLOAT:
+ case pdu_float:
return pmt::pmt_init_f32vector(items, (const float*)buf);
- case COMPLEX:
+ case pdu_complex:
return pmt::pmt_init_c32vector(items, (const gr_complex*)buf);
default:
throw std::runtime_error("bad type!");
@@ -70,10 +70,10 @@ gr_pdu_make_vector(gr_pdu_vector_type type, const uint8_t* buf, size_t items){
gr_pdu_vector_type type_from_pmt(pmt::pmt_t vector){
if(pmt_is_u8vector(vector))
- return BYTE;
+ return pdu_byte;
if(pmt_is_f32vector(vector))
- return FLOAT;
+ return pdu_float;
if(pmt_is_c32vector(vector))
- return COMPLEX;
+ return pdu_complex;
throw std::runtime_error("bad type!");
}
diff --git a/gnuradio-core/src/lib/io/gr_pdu.h b/gnuradio-core/src/lib/io/gr_pdu.h
index 5ed9cdded8..a5ae87db7f 100644
--- a/gnuradio-core/src/lib/io/gr_pdu.h
+++ b/gnuradio-core/src/lib/io/gr_pdu.h
@@ -29,7 +29,7 @@
#define pdu_port_id pmt::mp("pdus")
#define pdu_length_tag pmt::mp("pdu_length")
-enum gr_pdu_vector_type { BYTE, FLOAT, COMPLEX };
+enum gr_pdu_vector_type { pdu_byte, pdu_float, pdu_complex };
size_t gr_pdu_itemsize(gr_pdu_vector_type type);
bool gr_pdu_type_matches(gr_pdu_vector_type type, pmt::pmt_t v);
diff --git a/gnuradio-core/src/lib/io/gr_pdu.i b/gnuradio-core/src/lib/io/gr_pdu.i
index 7cb3c62c78..ada3a63a73 100644
--- a/gnuradio-core/src/lib/io/gr_pdu.i
+++ b/gnuradio-core/src/lib/io/gr_pdu.i
@@ -24,7 +24,7 @@
#include <gr_pdu.h>
%}
-enum gr_pdu_vector_type { BYTE, FLOAT, COMPLEX };
+enum gr_pdu_vector_type { pdu_byte, pdu_float, pdu_complex };
diff --git a/gnuradio-core/src/lib/io/gr_socket_pdu.h b/gnuradio-core/src/lib/io/gr_socket_pdu.h
index f554febdc1..2fedb317db 100644
--- a/gnuradio-core/src/lib/io/gr_socket_pdu.h
+++ b/gnuradio-core/src/lib/io/gr_socket_pdu.h
@@ -28,7 +28,9 @@
#include <gr_message.h>
#include <gr_msg_queue.h>
#include <gr_stream_pdu_base.h>
+#include <boost/array.hpp>
#include <boost/asio.hpp>
+#include <iostream>
class gr_socket_pdu;
typedef boost::shared_ptr<gr_socket_pdu> gr_socket_pdu_sptr;
diff --git a/gnuradio-core/src/lib/io/gr_stream_pdu_base.cc b/gnuradio-core/src/lib/io/gr_stream_pdu_base.cc
index cff7296cba..7250c33e59 100644
--- a/gnuradio-core/src/lib/io/gr_stream_pdu_base.cc
+++ b/gnuradio-core/src/lib/io/gr_stream_pdu_base.cc
@@ -24,6 +24,7 @@
#include "config.h"
#endif
+#include <ciso646>
#include <gr_stream_pdu_base.h>
#include <gr_io_signature.h>
#include <cstdio>
@@ -35,8 +36,13 @@
#include <string.h>
#include <iostream>
#include <gr_pdu.h>
+#include <boost/asio.hpp>
#include <boost/format.hpp>
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
+
static const long timeout_us = 100*1000; //100ms
gr_stream_pdu_base::gr_stream_pdu_base (int MTU)
diff --git a/gnuradio-core/src/lib/runtime/gr_basic_block.h b/gnuradio-core/src/lib/runtime/gr_basic_block.h
index f3b7b835b4..9cc2ad7755 100644
--- a/gnuradio-core/src/lib/runtime/gr_basic_block.h
+++ b/gnuradio-core/src/lib/runtime/gr_basic_block.h
@@ -142,9 +142,9 @@ class GR_CORE_API gr_basic_block : public gr_msg_accepter, public boost::enable_
void message_port_sub(pmt::pmt_t port_id, pmt::pmt_t target);
void message_port_unsub(pmt::pmt_t port_id, pmt::pmt_t target);
- virtual bool message_port_is_hier(pmt::pmt_t port_id) { std::cout << "is_hier\n"; return false; }
- virtual bool message_port_is_hier_in(pmt::pmt_t port_id) { std::cout << "is_hier_in\n"; return false; }
- virtual bool message_port_is_hier_out(pmt::pmt_t port_id) { std::cout << "is_hier_out\n"; return false; }
+ virtual bool message_port_is_hier(pmt::pmt_t port_id) { (void) port_id; std::cout << "is_hier\n"; return false; }
+ virtual bool message_port_is_hier_in(pmt::pmt_t port_id) { (void) port_id; std::cout << "is_hier_in\n"; return false; }
+ virtual bool message_port_is_hier_out(pmt::pmt_t port_id) { (void) port_id; std::cout << "is_hier_out\n"; return false; }
/*!
* \brief Get input message port names.
@@ -224,7 +224,7 @@ class GR_CORE_API gr_basic_block : public gr_msg_accepter, public boost::enable_
* This check is in addition to the constraints specified by the input
* and output gr_io_signatures.
*/
- virtual bool check_topology(int ninputs, int noutputs) { return true; }
+ virtual bool check_topology(int ninputs, int noutputs) { (void) ninputs; (void) noutputs; return true; }
/*!
* \brief Set the callback that is fired when messages are available.
diff --git a/gnuradio-core/src/lib/runtime/gr_complex.h b/gnuradio-core/src/lib/runtime/gr_complex.h
index 7580021064..58d1525b4d 100644
--- a/gnuradio-core/src/lib/runtime/gr_complex.h
+++ b/gnuradio-core/src/lib/runtime/gr_complex.h
@@ -27,13 +27,13 @@ typedef std::complex<float> gr_complex;
typedef std::complex<double> gr_complexd;
-inline bool is_complex (gr_complex x) { return true;}
-inline bool is_complex (gr_complexd x) { return true;}
-inline bool is_complex (float x) { return false;}
-inline bool is_complex (double x) { return false;}
-inline bool is_complex (int x) { return false;}
-inline bool is_complex (char x) { return false;}
-inline bool is_complex (short x) { return false;}
+inline bool is_complex (gr_complex x) { (void) x; return true;}
+inline bool is_complex (gr_complexd x) { (void) x; return true;}
+inline bool is_complex (float x) { (void) x; return false;}
+inline bool is_complex (double x) { (void) x; return false;}
+inline bool is_complex (int x) { (void) x; return false;}
+inline bool is_complex (char x) { (void) x; return false;}
+inline bool is_complex (short x) { (void) x; return false;}
// this doesn't really belong here, but there are worse places for it...
diff --git a/gnuradio-core/src/lib/swig/CMakeLists.txt b/gnuradio-core/src/lib/swig/CMakeLists.txt
index 734547131c..d8a64cc0f6 100644
--- a/gnuradio-core/src/lib/swig/CMakeLists.txt
+++ b/gnuradio-core/src/lib/swig/CMakeLists.txt
@@ -21,16 +21,16 @@
include(GrPython)
include(GrSwig)
-include_directories(${Boost_INCLUDE_DIRS})
-link_directories(${Boost_LIBRARY_DIRS})
-
set(GR_SWIG_INCLUDE_DIRS
${CMAKE_CURRENT_BINARY_DIR}
- ${GRUEL_INCLUDE_DIRS}
${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
set(GR_SWIG_LIBRARIES gnuradio-core)
+link_directories(${Boost_LIBRARY_DIRS})
+
########################################################################
# Build and install the swig targets
########################################################################
diff --git a/gnuradio-core/src/python/gnuradio/gr/CMakeLists.txt b/gnuradio-core/src/python/gnuradio/gr/CMakeLists.txt
index 62f3d7e46d..bd78c8fb4a 100644
--- a/gnuradio-core/src/python/gnuradio/gr/CMakeLists.txt
+++ b/gnuradio-core/src/python/gnuradio/gr/CMakeLists.txt
@@ -43,13 +43,6 @@ 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_SOURCE_DIR}/gruel/src/python
- ${CMAKE_BINARY_DIR}/gruel/src/swig
- ${CMAKE_BINARY_DIR}/gnuradio-core/src/python
- ${CMAKE_BINARY_DIR}/gnuradio-core/src/lib/swig
- )
- set(GR_TEST_TARGET_DEPS volk gruel gnuradio-core)
GR_ADD_TEST(${py_qa_test_name} ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B} ${py_qa_test_file})
endforeach(py_qa_test_file)
endif(ENABLE_TESTING)
diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_pdu.py b/gnuradio-core/src/python/gnuradio/gr/qa_pdu.py
index ebc365b611..572d8b1861 100755
--- a/gnuradio-core/src/python/gnuradio/gr/qa_pdu.py
+++ b/gnuradio-core/src/python/gnuradio/gr/qa_pdu.py
@@ -36,8 +36,8 @@ class test_pdu(gr_unittest.TestCase):
# Just run some data through and make sure it doesn't puke.
src_data = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
- src = gr.pdu_to_tagged_stream(gr.BYTE)
- snk3 = gr.tagged_stream_to_pdu(gr.BYTE)
+ src = gr.pdu_to_tagged_stream(gr.pdu_byte)
+ snk3 = gr.tagged_stream_to_pdu(gr.pdu_byte)
snk2 = gr.vector_sink_b()
snk = gr.tag_debug(1, "test")
diff --git a/gnuradio-core/src/tests/CMakeLists.txt b/gnuradio-core/src/tests/CMakeLists.txt
index 680141e7b0..dbd52f05c7 100644
--- a/gnuradio-core/src/tests/CMakeLists.txt
+++ b/gnuradio-core/src/tests/CMakeLists.txt
@@ -24,14 +24,17 @@ GR_CHECK_HDR_N_DEF(sys/resource.h HAVE_SYS_RESOURCE_H)
########################################################################
# Setup the include and linker paths
########################################################################
-include_directories(${GRUEL_INCLUDE_DIRS})
-include_directories(${GNURADIO_CORE_INCLUDE_DIRS})
-
-include_directories(${Boost_INCLUDE_DIRS})
-link_directories(${Boost_LIBRARY_DIRS})
+include_directories(
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+ ${CPPUNIT_INCLUDE_DIRS}
+)
-include_directories(${CPPUNIT_INCLUDE_DIRS})
-link_directories(${CPPUNIT_LIBRARY_DIRS})
+link_directories(
+ ${Boost_LIBRARY_DIRS}
+ ${CPPUNIT_LIBRARY_DIRS}
+)
########################################################################
# Build benchmarks and non-registered tests
diff --git a/gr-analog/lib/CMakeLists.txt b/gr-analog/lib/CMakeLists.txt
index 653d5be279..f7d6723b4e 100644
--- a/gr-analog/lib/CMakeLists.txt
+++ b/gr-analog/lib/CMakeLists.txt
@@ -21,17 +21,18 @@
# Setup the include and linker paths
########################################################################
include_directories(
- ${VOLK_INCLUDE_DIRS}
- ${GNURADIO_CORE_INCLUDE_DIRS}
- ${GR_ANALOG_INCLUDE_DIRS}
- ${GR_FFT_INCLUDE_DIRS}
- ${GR_FILTER_INCLUDE_DIRS}
${CMAKE_CURRENT_BINARY_DIR}/../include
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
+ ${GR_ANALOG_INCLUDE_DIRS}
+ ${GR_FILTER_INCLUDE_DIRS}
+ ${GR_FFT_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${VOLK_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
-include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
########################################################################
diff --git a/gr-analog/swig/CMakeLists.txt b/gr-analog/swig/CMakeLists.txt
index e3fbbe73f8..9ed82e2677 100644
--- a/gr-analog/swig/CMakeLists.txt
+++ b/gr-analog/swig/CMakeLists.txt
@@ -27,6 +27,8 @@ set(GR_SWIG_INCLUDE_DIRS
${GR_ANALOG_INCLUDE_DIRS}
${GR_FILTER_INCLUDE_DIRS}
${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/analog_swig_doc.i)
diff --git a/gr-atsc/src/lib/CMakeLists.txt b/gr-atsc/src/lib/CMakeLists.txt
index 58e3af88b0..3d2b84a03c 100644
--- a/gr-atsc/src/lib/CMakeLists.txt
+++ b/gr-atsc/src/lib/CMakeLists.txt
@@ -21,12 +21,13 @@
# Setup the include and linker paths
########################################################################
include_directories(
- ${GNURADIO_CORE_INCLUDE_DIRS}
- ${GR_ATSC_INCLUDE_DIRS}
${CMAKE_CURRENT_BINARY_DIR}
+ ${GR_ATSC_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
-include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
########################################################################
@@ -207,6 +208,8 @@ include(GrSwig)
set(GR_SWIG_INCLUDE_DIRS
${GR_ATSC_INCLUDE_DIRS}
${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
# add Doxygen docs to python
diff --git a/gr-atsc/src/lib/atsc.i b/gr-atsc/src/lib/atsc.i
index 6e5662ae68..6b83a23153 100644
--- a/gr-atsc/src/lib/atsc.i
+++ b/gr-atsc/src/lib/atsc.i
@@ -225,6 +225,7 @@ class atsc_equalizer : public gr_sync_block
public:
void reset();
+ std::vector<double> taps();
};
// ----------------------------------------------------------------
diff --git a/gr-atsc/src/lib/atsc_bit_timing_loop.cc b/gr-atsc/src/lib/atsc_bit_timing_loop.cc
index 7abd907cca..dc43d28bc4 100644
--- a/gr-atsc/src/lib/atsc_bit_timing_loop.cc
+++ b/gr-atsc/src/lib/atsc_bit_timing_loop.cc
@@ -44,7 +44,7 @@ atsc_make_bit_timing_loop()
atsc_bit_timing_loop::atsc_bit_timing_loop()
: gr_block("atsc_bit_timing_loop",
gr_make_io_signature(1, 1, sizeof(float)),
- gr_make_io_signature(2, 2, sizeof(float))),
+ gr_make_io_signature3(2, 3, sizeof(float), sizeof(float), sizeof(float))),
d_interp(ratio_of_rx_clock_to_symbol_freq), d_next_input(0),
d_rx_clock_to_symbol_freq (ratio_of_rx_clock_to_symbol_freq),
d_si(0)
@@ -82,6 +82,7 @@ atsc_bit_timing_loop::work (int noutput_items,
const float *in = (const float *) input_items[0];
float *out_sample = (float *) output_items[0];
atsc::syminfo *out_tag = (atsc::syminfo *) output_items[1];
+ float *out_timing_error = (float *) output_items[2];
assert(sizeof(float) == sizeof(atsc::syminfo));
@@ -110,12 +111,15 @@ atsc_bit_timing_loop::work (int noutput_items,
}
d_sssr.update (interp_sample, &seg_locked, &symbol_index, &timing_adjustment);
+ if (output_items.size() == 3) {
+ out_timing_error[k] = timing_adjustment;
+ }
out_sample[k] = interp_sample;
tag.valid = seg_locked;
tag.symbol_num = symbol_index;
out_tag[k] = tag;
}
-
+
return k;
}
diff --git a/gr-atsc/src/lib/atsc_equalizer.h b/gr-atsc/src/lib/atsc_equalizer.h
index 32b449b623..aca5e63b49 100644
--- a/gr-atsc/src/lib/atsc_equalizer.h
+++ b/gr-atsc/src/lib/atsc_equalizer.h
@@ -25,6 +25,7 @@
#include <atsc_api.h>
#include <gr_sync_block.h>
#include <atsci_equalizer.h>
+#include <vector>
class atsc_equalizer;
typedef boost::shared_ptr<atsc_equalizer> atsc_equalizer_sptr;
@@ -47,6 +48,10 @@ class ATSC_API atsc_equalizer : public gr_sync_block
public:
void forecast (int noutput_items, gr_vector_int &ninput_items_required);
+ std::vector<double> taps() {
+ return d_equalizer->taps();
+ }
+
int work (int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);
diff --git a/gr-atsc/src/lib/atsci_equalizer.h b/gr-atsc/src/lib/atsci_equalizer.h
index a0a1fc6744..b0c243b51a 100644
--- a/gr-atsc/src/lib/atsci_equalizer.h
+++ b/gr-atsc/src/lib/atsci_equalizer.h
@@ -25,6 +25,7 @@
#include <atsc_api.h>
#include <atsci_syminfo.h>
+#include <vector>
/*!
* \brief abstract base class for ATSC equalizer
@@ -54,6 +55,10 @@ public:
atsci_equalizer ();
virtual ~atsci_equalizer ();
+ virtual std::vector<double> taps () {
+ return std::vector<double>();
+ }
+
// MANIPULATORS
/*!
diff --git a/gr-atsc/src/lib/atsci_equalizer_lms.h b/gr-atsc/src/lib/atsci_equalizer_lms.h
index 68aa34ca5c..eac72f75b4 100644
--- a/gr-atsc/src/lib/atsci_equalizer_lms.h
+++ b/gr-atsc/src/lib/atsci_equalizer_lms.h
@@ -37,6 +37,9 @@ public:
virtual void reset ();
virtual int ntaps () const;
virtual int npretaps () const;
+ std::vector<double> taps () {
+ return d_taps;
+ }
protected:
FILE *trainingfile;
diff --git a/gr-atsc/src/lib/atsci_sssr.cc b/gr-atsc/src/lib/atsci_sssr.cc
index 48c0c51fbf..56a0c6a004 100644
--- a/gr-atsc/src/lib/atsci_sssr.cc
+++ b/gr-atsc/src/lib/atsci_sssr.cc
@@ -29,6 +29,7 @@
#include <gr_math.h>
#include <stdio.h>
#include <boost/math/special_functions/sign.hpp>
+#include <iostream>
/*
* ----------------------------------------------------------------
@@ -142,7 +143,11 @@ atsci_sssr::update (sssr::sample_t sample_in, // input
double qo = d_quad_filter.update (sample_in);
d_quad_output[d_counter] = qo;
- int bit = boost::math::signbit (sample_in) ^ 1; // slice on sign: + => 1, - => 0
+ int bit = boost::math::signbit (sample_in);
+ if (bit != 0)
+ bit = 0;
+ else
+ bit = 1;
int corr_out = d_correlator.update (bit);
int weight = sipp (corr_out);
int corr_value = d_integrator.update (weight, d_counter);
@@ -153,6 +158,7 @@ atsci_sssr::update (sssr::sample_t sample_in, // input
int best_correlation_value;
best_correlation_index = d_integrator.find_max (&best_correlation_value);
d_seg_locked = best_correlation_value >= MIN_SEG_LOCK_CORRELATION_VALUE;
+ //std::cout << "best = " << best_correlation_value << " min is " << MIN_SEG_LOCK_CORRELATION_VALUE << std::endl;
d_timing_adjust = d_quad_output[best_correlation_index];
d_symbol_index = SYMBOL_INDEX_OFFSET - 1 - best_correlation_index;
diff --git a/gr-atsc/src/python/all_atsc.py b/gr-atsc/src/python/all_atsc.py
new file mode 100644
index 0000000000..0137839bdc
--- /dev/null
+++ b/gr-atsc/src/python/all_atsc.py
@@ -0,0 +1,140 @@
+#!/usr/bin/env /usr/bin/python
+#
+# Copyright 2004 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 2, 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., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+#
+# This module starts the atsc processing chain taking the captured
+# off-air signal created with:
+#
+# uhd_rx_cfile.py --samp-rate=6.4e6
+# -f <center of tv signal channel freq>
+# -g <appropriate gain for best signal / noise>
+# -s output shorts
+#
+# All this module does is multiply the sample rate by 3, from 6.4e6 to
+# 19.2e6 complex samples / sec, then lowpass filter with a cutoff of 3.2MHz
+# and a transition band width of .5MHz. Center of the tv channels is
+# then at 0 with edges at -3.2MHz and 3.2MHz.
+
+from gnuradio import gr, atsc
+import sys, os, math
+
+def graph (args):
+
+ nargs = len(args)
+ if nargs == 2:
+ infile = args[0]
+ outfile = args[1]
+ else:
+ raise ValueError('usage: interp.py input_file output_file\n')
+
+ tb = gr.top_block ()
+
+ # Convert to a from shorts to a stream of complex numbers.
+ srcf = gr.file_source (gr.sizeof_short,infile)
+ s2ss = gr.stream_to_streams(gr.sizeof_short,2)
+ s2f1 = gr.short_to_float()
+ s2f2 = gr.short_to_float()
+ src0 = gr.float_to_complex()
+ tb.connect(srcf, s2ss)
+ tb.connect((s2ss, 0), s2f1, (src0, 0))
+ tb.connect((s2ss, 1), s2f2, (src0, 1))
+
+ # Low pass filter it and increase sample rate by a factor of 3.
+ lp_coeffs = gr.firdes.low_pass ( 3, 19.2e6, 3.2e6, .5e6, gr.firdes.WIN_HAMMING )
+ lp = gr.interp_fir_filter_ccf ( 3, lp_coeffs )
+ tb.connect(src0, lp)
+
+ # Upconvert it.
+ duc_coeffs = gr.firdes.low_pass ( 1, 19.2e6, 9e6, 1e6, gr.firdes.WIN_HAMMING )
+ duc = gr.freq_xlating_fir_filter_ccf ( 1, duc_coeffs, 5.75e6, 19.2e6 )
+ # Discard the imaginary component.
+ c2f = gr.complex_to_float()
+ tb.connect(lp, duc, c2f)
+
+ # Frequency Phase Lock Loop
+ input_rate = 19.2e6
+ IF_freq = 5.75e6
+ # 1/2 as wide because we're designing lp filter
+ symbol_rate = atsc.ATSC_SYMBOL_RATE/2.
+ NTAPS = 279
+ tt = gr.firdes.root_raised_cosine (1.0, input_rate, symbol_rate, .115, NTAPS)
+ # heterodyne the low pass coefficients up to the specified bandpass
+ # center frequency. Note that when we do this, the filter bandwidth
+ # is effectively twice the low pass (2.69 * 2 = 5.38) and hence
+ # matches the diagram in the ATSC spec.
+ arg = 2. * math.pi * IF_freq / input_rate
+ t=[]
+ for i in range(len(tt)):
+ t += [tt[i] * 2. * math.cos(arg * i)]
+ rrc = gr.fir_filter_fff(1, t)
+
+ fpll = atsc.fpll()
+
+ pilot_freq = IF_freq - 3e6 + 0.31e6
+ lower_edge = 6e6 - 0.31e6
+ upper_edge = IF_freq - 3e6 + pilot_freq
+ transition_width = upper_edge - lower_edge
+ lp_coeffs = gr.firdes.low_pass (1.0,
+ input_rate,
+ (lower_edge + upper_edge) * 0.5,
+ transition_width,
+ gr.firdes.WIN_HAMMING);
+
+ lp_filter = gr.fir_filter_fff (1,lp_coeffs)
+
+ alpha = 1e-5
+ iir = gr.single_pole_iir_filter_ff(alpha)
+ remove_dc = gr.sub_ff()
+
+ tb.connect(c2f, fpll, lp_filter)
+ tb.connect(lp_filter, iir)
+ tb.connect(lp_filter, (remove_dc,0))
+ tb.connect(iir, (remove_dc,1))
+
+ # Bit Timing Loop, Field Sync Checker and Equalizer
+
+ btl = atsc.bit_timing_loop()
+ fsc = atsc.fs_checker()
+ eq = atsc.equalizer()
+ fsd = atsc.field_sync_demux()
+
+ tb.connect(remove_dc, btl)
+ tb.connect((btl, 0),(fsc, 0),(eq, 0),(fsd, 0))
+ tb.connect((btl, 1),(fsc, 1),(eq, 1),(fsd, 1))
+
+ # Viterbi
+
+ viterbi = atsc.viterbi_decoder()
+ deinter = atsc.deinterleaver()
+ rs_dec = atsc.rs_decoder()
+ derand = atsc.derandomizer()
+ depad = atsc.depad()
+ dst = gr.file_sink(gr.sizeof_char, outfile)
+ tb.connect(fsd, viterbi, deinter, rs_dec, derand, depad, dst)
+
+ dst2 = gr.file_sink(gr.sizeof_gr_complex, "atsc_complex.data")
+ tb.connect(src0, dst2)
+
+ tb.run ()
+
+if __name__ == '__main__':
+ graph (sys.argv[1:])
+
+
diff --git a/gr-audio/examples/c++/CMakeLists.txt b/gr-audio/examples/c++/CMakeLists.txt
index f0d45817cb..0255f6e9b4 100644
--- a/gr-audio/examples/c++/CMakeLists.txt
+++ b/gr-audio/examples/c++/CMakeLists.txt
@@ -17,8 +17,12 @@
# the Free Software Foundation, Inc., 51 Franklin Street,
# Boston, MA 02110-1301, USA.
-include_directories(${GR_AUDIO_INCLUDE_DIRS})
-include_directories(${GNURADIO_CORE_INCLUDE_DIRS})
+include_directories(
+ ${GR_AUDIO_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+)
add_executable(dial_tone dial_tone.cc)
target_link_libraries(dial_tone gnuradio-audio)
diff --git a/gr-audio/lib/CMakeLists.txt b/gr-audio/lib/CMakeLists.txt
index c1781af79e..f39264d5d2 100644
--- a/gr-audio/lib/CMakeLists.txt
+++ b/gr-audio/lib/CMakeLists.txt
@@ -21,12 +21,13 @@
# Setup the include and linker paths
########################################################################
include_directories(
- ${GNURADIO_CORE_INCLUDE_DIRS}
- ${GR_AUDIO_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}
+ ${GR_AUDIO_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
-include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
list(APPEND gr_audio_libs gnuradio-core ${Boost_LIBRARIES})
diff --git a/gr-audio/swig/CMakeLists.txt b/gr-audio/swig/CMakeLists.txt
index 4997ca3f7d..4f98328a7b 100644
--- a/gr-audio/swig/CMakeLists.txt
+++ b/gr-audio/swig/CMakeLists.txt
@@ -26,6 +26,8 @@ include(GrSwig)
set(GR_SWIG_INCLUDE_DIRS
${GR_AUDIO_INCLUDE_DIRS}
${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/audio_swig_doc.i)
diff --git a/gr-blocks/lib/CMakeLists.txt b/gr-blocks/lib/CMakeLists.txt
index ab989fc782..30eab7b751 100644
--- a/gr-blocks/lib/CMakeLists.txt
+++ b/gr-blocks/lib/CMakeLists.txt
@@ -109,18 +109,16 @@ expand_cc_h_impl(xor_XX bb ss ii)
# Setup the include and linker paths
########################################################################
include_directories(
- ${GNURADIO_CORE_INCLUDE_DIRS}
- ${VOLK_INCLUDE_DIRS}
- ${GR_BLOCKS_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_BINARY_DIR}/../include
+ ${GR_BLOCKS_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${VOLK_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
-include_directories(${BLOCKS_INCLUDE_DIRS})
-link_directories(${BLOCKS_LIBRARY_DIRS})
-
-include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
########################################################################
diff --git a/gr-blocks/lib/file_meta_sink_impl.cc b/gr-blocks/lib/file_meta_sink_impl.cc
index ad16e9fcac..b707bfac4e 100644
--- a/gr-blocks/lib/file_meta_sink_impl.cc
+++ b/gr-blocks/lib/file_meta_sink_impl.cc
@@ -26,14 +26,12 @@
#include "file_meta_sink_impl.h"
#include <gr_io_signature.h>
+#include <cstdio>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdexcept>
-#include <cstdio>
-
-namespace gr {
- namespace blocks {
+#include <stdio.h>
// win32 (mingw/msvc) specific
#ifdef HAVE_IO_H
@@ -52,6 +50,11 @@ namespace gr {
#define OUR_O_LARGEFILE 0
#endif
+
+namespace gr {
+ namespace blocks {
+
+
file_meta_sink::sptr
file_meta_sink::make(size_t itemsize, const std::string &filename,
double samp_rate, double relative_rate,
diff --git a/gr-blocks/lib/file_meta_source_impl.cc b/gr-blocks/lib/file_meta_source_impl.cc
index fb39b205b4..42fdabb541 100644
--- a/gr-blocks/lib/file_meta_source_impl.cc
+++ b/gr-blocks/lib/file_meta_source_impl.cc
@@ -26,14 +26,12 @@
#include "file_meta_source_impl.h"
#include <gr_io_signature.h>
+#include <cstdio>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdexcept>
-#include <cstdio>
-
-namespace gr {
- namespace blocks {
+#include <stdio.h>
// win32 (mingw/msvc) specific
#ifdef HAVE_IO_H
@@ -52,6 +50,11 @@ namespace gr {
#define OUR_O_LARGEFILE 0
#endif
+
+namespace gr {
+ namespace blocks {
+
+
file_meta_source::sptr
file_meta_source::make(const std::string &filename,
bool repeat,
diff --git a/gr-blocks/lib/file_source_impl.h b/gr-blocks/lib/file_source_impl.h
index 600fe80ab6..fc7f8053df 100644
--- a/gr-blocks/lib/file_source_impl.h
+++ b/gr-blocks/lib/file_source_impl.h
@@ -24,6 +24,7 @@
#define INCLUDED_BLOCKS_FILE_SOURCE_IMPL_H
#include <blocks/file_source.h>
+#include <boost/thread/mutex.hpp>
namespace gr {
namespace blocks {
diff --git a/gr-blocks/swig/CMakeLists.txt b/gr-blocks/swig/CMakeLists.txt
index fb29789f08..aa5c7bf55e 100644
--- a/gr-blocks/swig/CMakeLists.txt
+++ b/gr-blocks/swig/CMakeLists.txt
@@ -24,9 +24,11 @@ include(GrPython)
include(GrSwig)
set(GR_SWIG_INCLUDE_DIRS
+ ${CMAKE_CURRENT_BINARY_DIR}/../include
${GR_BLOCKS_INCLUDE_DIRS}
${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
- ${CMAKE_CURRENT_BINARY_DIR}/../include
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/blocks_swig_doc.i)
diff --git a/gr-comedi/src/CMakeLists.txt b/gr-comedi/src/CMakeLists.txt
index 957eacaf28..1d9dac2c48 100644
--- a/gr-comedi/src/CMakeLists.txt
+++ b/gr-comedi/src/CMakeLists.txt
@@ -21,15 +21,17 @@
# Setup the include and linker paths
########################################################################
include_directories(
- ${GNURADIO_CORE_INCLUDE_DIRS}
${GR_COMEDI_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+ ${COMEDI_INCLUDE_DIRS}
)
-include_directories(${Boost_INCLUDE_DIRS})
-link_directories(${Boost_LIBRARY_DIRS})
-
-include_directories(${COMEDI_INCLUDE_DIRS})
-link_directories(${COMEDI_LIBRARY_DIRS})
+link_directories(
+ ${Boost_LIBRARY_DIRS}
+ ${COMEDI_LIBRARY_DIRS}
+)
########################################################################
# Setup library
@@ -70,6 +72,8 @@ include(GrSwig)
set(GR_SWIG_INCLUDE_DIRS
${GR_COMEDI_INCLUDE_DIRS}
${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/comedi_swig_doc.i)
diff --git a/gr-digital/examples/demod/ber_simulation.grc b/gr-digital/examples/demod/ber_simulation.grc
index daf8bfde0d..9d7b9c9468 100644
--- a/gr-digital/examples/demod/ber_simulation.grc
+++ b/gr-digital/examples/demod/ber_simulation.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Thu Jul 5 15:57:06 2012</timestamp>
+ <timestamp>Mon Jan 14 11:20:53 2013</timestamp>
<block>
<key>options</key>
<param>
@@ -123,29 +123,6 @@
</param>
</block>
<block>
- <key>digital_constellation_decoder_cb</key>
- <param>
- <key>id</key>
- <value>digital_constellation_decoder_cb_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>constellation</key>
- <value>const.base()</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(618, 164)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
<key>wxgui_numbersink2</key>
<param>
<key>id</key>
@@ -256,22 +233,54 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>variable_slider</key>
<param>
<key>id</key>
- <value>const</value>
+ <value>EbN0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>label</key>
+ <value>Eb/N0 (dB)</value>
+ </param>
+ <param>
<key>value</key>
- <value>digital.qpsk_constellation()</value>
+ <value>10</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>-10</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>num_steps</key>
+ <value>211</value>
+ </param>
+ <param>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
+ </param>
+ <param>
+ <key>converver</key>
+ <value>float_converter</value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value></value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(116, 310)</value>
+ <value>(311, 309)</value>
</param>
<param>
<key>_rotation</key>
@@ -282,7 +291,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>samp_rate</value>
+ <value>const</value>
</param>
<param>
<key>_enabled</key>
@@ -290,11 +299,11 @@
</param>
<param>
<key>value</key>
- <value>100e3</value>
+ <value>(digital.constellation_bpsk(), digital.constellation_qpsk(), digital.constellation_8psk())</value>
</param>
<param>
<key>_coordinate</key>
- <value>(16, 308)</value>
+ <value>(116, 310)</value>
</param>
<param>
<key>_rotation</key>
@@ -302,10 +311,10 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>random_source_x</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>random_source_x</value>
</param>
<param>
<key>_enabled</key>
@@ -313,63 +322,101 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>byte</value>
</param>
<param>
- <key>title</key>
- <value>"Constellation: "+str(const.arity()) + "-PSK"</value>
+ <key>min</key>
+ <value>0</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>max</key>
+ <value>const[const_type].arity()</value>
</param>
<param>
- <key>v_scale</key>
- <value>0</value>
+ <key>num_samps</key>
+ <value>10000000</value>
</param>
<param>
- <key>v_offset</key>
- <value>0</value>
+ <key>repeat</key>
+ <value>True</value>
</param>
<param>
- <key>t_scale</key>
+ <key>_coordinate</key>
+ <value>(17, 125)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>gr_noise_source_x</key>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>id</key>
+ <value>gr_noise_source_x</value>
</param>
<param>
- <key>xy_mode</key>
+ <key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>num_inputs</key>
- <value>1</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>noise_type</key>
+ <value>gr.GR_GAUSSIAN</value>
</param>
<param>
- <key>grid_pos</key>
- <value>2, 0, 1, 1</value>
+ <key>amp</key>
+ <value>1.0 / math.sqrt(2.0 * const[const_type].bits_per_symbol() * 10**(EbN0/10))</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>seed</key>
+ <value>42</value>
</param>
<param>
- <key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <key>_coordinate</key>
+ <value>(16, 224)</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_chunks_to_symbols_xx</key>
+ <param>
+ <key>id</key>
+ <value>gr_chunks_to_symbols_xx</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>in_type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>symbol_table</key>
+ <value>const[const_type].points()</value>
+ </param>
+ <param>
+ <key>dimension</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_ports</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(623, 228)</value>
+ <value>(240, 140)</value>
</param>
<param>
<key>_rotation</key>
@@ -396,7 +443,7 @@
</param>
<param>
<key>bits_per_symbol</key>
- <value>const.bits_per_symbol()</value>
+ <value>const[const_type].bits_per_symbol()</value>
</param>
<param>
<key>_coordinate</key>
@@ -408,10 +455,33 @@
</param>
</block>
<block>
- <key>gr_noise_source_x</key>
+ <key>digital_constellation_decoder_cb</key>
<param>
<key>id</key>
- <value>gr_noise_source_x</value>
+ <value>digital_constellation_decoder_cb_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>constellation</key>
+ <value>const[const_type].base()</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(618, 164)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>wxgui_scopesink2</key>
+ <param>
+ <key>id</key>
+ <value>wxgui_scopesink2_0</value>
</param>
<param>
<key>_enabled</key>
@@ -422,59 +492,60 @@
<value>complex</value>
</param>
<param>
- <key>noise_type</key>
- <value>gr.GR_GAUSSIAN</value>
+ <key>title</key>
+ <value>"Constellation: "+str(const[const_type].arity()) + "-PSK"</value>
</param>
<param>
- <key>amp</key>
- <value>1.0 / math.sqrt(2.0 * const.bits_per_symbol() * 10**(EbN0/10))</value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>seed</key>
- <value>42</value>
+ <key>v_scale</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(16, 224)</value>
+ <key>v_offset</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>t_scale</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>gr_chunks_to_symbols_xx</key>
<param>
- <key>id</key>
- <value>gr_chunks_to_symbols_xx</value>
+ <key>ac_couple</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
+ <key>xy_mode</key>
<value>True</value>
</param>
<param>
- <key>in_type</key>
- <value>byte</value>
+ <key>num_inputs</key>
+ <value>1</value>
</param>
<param>
- <key>out_type</key>
- <value>complex</value>
+ <key>win_size</key>
+ <value></value>
</param>
<param>
- <key>symbol_table</key>
- <value>const.points()</value>
+ <key>grid_pos</key>
+ <value>2, 0, 1, 1</value>
</param>
<param>
- <key>dimension</key>
- <value>1</value>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
- <key>num_ports</key>
- <value>1</value>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
+ </param>
+ <param>
+ <key>y_axis_label</key>
+ <value>Counts</value>
</param>
<param>
<key>_coordinate</key>
- <value>(240, 140)</value>
+ <value>(623, 228)</value>
</param>
<param>
<key>_rotation</key>
@@ -482,54 +553,45 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>EbN0</value>
+ <value>samp_rate</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Eb/N0 (dB)</value>
- </param>
- <param>
<key>value</key>
- <value>10</value>
- </param>
- <param>
- <key>min</key>
- <value>-10</value>
- </param>
- <param>
- <key>max</key>
- <value>200</value>
+ <value>100e3</value>
</param>
<param>
- <key>num_steps</key>
- <value>211</value>
+ <key>_coordinate</key>
+ <value>(16, 308)</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>id</key>
+ <value>const_type</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>value</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(311, 309)</value>
+ <value>(18, 428)</value>
</param>
<param>
<key>_rotation</key>
@@ -537,38 +599,42 @@
</param>
</block>
<block>
- <key>random_source_x</key>
+ <key>variable_static_text</key>
<param>
<key>id</key>
- <value>random_source_x</value>
+ <value>variable_static_text_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>label</key>
+ <value>Constellation Type</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>value</key>
+ <value>{0: 'BPSK', 1: 'QPSK', 2: '8-PSK'}[const_type] + " - Change const_type for different constellation types!"</value>
</param>
<param>
- <key>max</key>
- <value>const.arity()</value>
+ <key>converver</key>
+ <value>str_converter</value>
</param>
<param>
- <key>num_samps</key>
- <value>10000000</value>
+ <key>formatter</key>
+ <value>None</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>grid_pos</key>
+ <value></value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(17, 125)</value>
+ <value>(422, 311)</value>
</param>
<param>
<key>_rotation</key>
diff --git a/gr-digital/examples/demod/digital_freq_lock.grc b/gr-digital/examples/demod/digital_freq_lock.grc
index 09d3085dd0..589c651f4a 100644
--- a/gr-digital/examples/demod/digital_freq_lock.grc
+++ b/gr-digital/examples/demod/digital_freq_lock.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Thu Jul 5 18:11:22 2012</timestamp>
+ <timestamp>Mon Jan 14 10:49:20 2013</timestamp>
<block>
<key>options</key>
<param>
@@ -609,53 +609,6 @@
</param>
</block>
<block>
- <key>digital_psk_mod</key>
- <param>
- <key>id</key>
- <value>digital_psk_mod_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>constellation_points</key>
- <value>2</value>
- </param>
- <param>
- <key>mod_code</key>
- <value>"gray"</value>
- </param>
- <param>
- <key>differential</key>
- <value>False</value>
- </param>
- <param>
- <key>samples_per_symbol</key>
- <value>sps</value>
- </param>
- <param>
- <key>excess_bw</key>
- <value>0.35</value>
- </param>
- <param>
- <key>verbose</key>
- <value>False</value>
- </param>
- <param>
- <key>log</key>
- <value>False</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(194, 104)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
<key>wxgui_scopesink2</key>
<param>
<key>id</key>
@@ -856,6 +809,53 @@
<value>0</value>
</param>
</block>
+ <block>
+ <key>digital_psk_mod</key>
+ <param>
+ <key>id</key>
+ <value>digital_psk_mod_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>constellation_points</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>mod_code</key>
+ <value>"gray"</value>
+ </param>
+ <param>
+ <key>differential</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>samples_per_symbol</key>
+ <value>sps</value>
+ </param>
+ <param>
+ <key>excess_bw</key>
+ <value>rolloff</value>
+ </param>
+ <param>
+ <key>verbose</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>log</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(194, 104)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
<connection>
<source_block_id>gr_channel_model_0</source_block_id>
<sink_block_id>wxgui_scopesink2_0</sink_block_id>
diff --git a/gr-digital/examples/demod/pam_sync.grc b/gr-digital/examples/demod/pam_sync.grc
index dbd4befa6f..7bc071d110 100644
--- a/gr-digital/examples/demod/pam_sync.grc
+++ b/gr-digital/examples/demod/pam_sync.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Thu Jul 5 17:54:54 2012</timestamp>
+ <timestamp>Mon Jan 14 10:47:40 2013</timestamp>
<block>
<key>options</key>
<param>
@@ -84,98 +84,6 @@
</param>
</block>
<block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>rrctaps</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), rolloff, int(11*spb*nfilts))</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(686, -1)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>rolloff</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>0.35</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(607, -1)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>spb</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>4.0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(542, -1)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>sig_amp</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>1.0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(861, 0)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
<key>virtual_sink</key>
<param>
<key>id</key>
@@ -296,29 +204,6 @@
<key>variable</key>
<param>
<key>id</key>
- <value>nfilts</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>32</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(598, 186)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
<value>samp_rate</value>
</param>
<param>
@@ -378,76 +263,6 @@
</param>
</block>
<block>
- <key>gr_chunks_to_symbols_xx</key>
- <param>
- <key>id</key>
- <value>gr_chunks_to_symbols_xx</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>in_type</key>
- <value>byte</value>
- </param>
- <param>
- <key>out_type</key>
- <value>complex</value>
- </param>
- <param>
- <key>symbol_table</key>
- <value>const.points()</value>
- </param>
- <param>
- <key>dimension</key>
- <value>1</value>
- </param>
- <param>
- <key>num_ports</key>
- <value>1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(196, 87)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blks2_pfb_arb_resampler_ccf</key>
- <param>
- <key>id</key>
- <value>blks2_pfb_arb_resampler_ccf_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>rate</key>
- <value>spb</value>
- </param>
- <param>
- <key>taps</key>
- <value>firdes.root_raised_cosine(32, 32, 1.0, 0.35, 44*32)</value>
- </param>
- <param>
- <key>size</key>
- <value>32</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(435, 80)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
<key>gr_channel_model</key>
<param>
<key>id</key>
@@ -487,37 +302,6 @@
</param>
</block>
<block>
- <key>gr_multiply_const_vxx</key>
- <param>
- <key>id</key>
- <value>gr_multiply_const_vxx_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>const</key>
- <value>sig_amp</value>
- </param>
- <param>
- <key>vlen</key>
- <value>1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(659, 95)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
<key>gr_throttle</key>
<param>
<key>id</key>
@@ -572,33 +356,6 @@
</param>
</block>
<block>
- <key>digital_costas_loop_cc</key>
- <param>
- <key>id</key>
- <value>digital_costas_loop_cc_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>w</key>
- <value>phase_bw</value>
- </param>
- <param>
- <key>order</key>
- <value>4</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(866, 246)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
<key>wxgui_scopesink2</key>
<param>
<key>id</key>
@@ -1241,10 +998,226 @@
</param>
</block>
<block>
+ <key>gr_multiply_const_vxx</key>
+ <param>
+ <key>id</key>
+ <value>gr_multiply_const_vxx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>const</key>
+ <value>sig_amp</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(659, 95)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_chunks_to_symbols_xx</key>
+ <param>
+ <key>id</key>
+ <value>gr_chunks_to_symbols_xx</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>in_type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>symbol_table</key>
+ <value>const.points()</value>
+ </param>
+ <param>
+ <key>dimension</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(178, 87)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>spb</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>4.0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(513, -1)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>rolloff</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>0.35</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(578, -1)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>rrctaps</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(nfilts*spb), rolloff, int(11*spb*nfilts))</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(660, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>sig_amp</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(887, -1)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>nfilts</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>32</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(816, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blks2_pfb_arb_resampler_ccf</key>
+ <param>
+ <key>id</key>
+ <value>blks2_pfb_arb_resampler_ccf_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>rate</key>
+ <value>spb</value>
+ </param>
+ <param>
+ <key>taps</key>
+ <value>firdes.root_raised_cosine(nfilts, 1.0, 1.0/nfilts, rolloff, int(11*spb*nfilts))</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>nfilts</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(411, 80)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
<key>variable_slider</key>
<param>
<key>id</key>
- <value>noise_amp</value>
+ <value>freq_offset</value>
</param>
<param>
<key>_enabled</key>
@@ -1252,7 +1225,7 @@
</param>
<param>
<key>label</key>
- <value>Channel Noise</value>
+ <value>Frequency Offset</value>
</param>
<param>
<key>value</key>
@@ -1260,11 +1233,11 @@
</param>
<param>
<key>min</key>
- <value>0</value>
+ <value>-0.5</value>
</param>
<param>
<key>max</key>
- <value>1.0</value>
+ <value>0.5</value>
</param>
<param>
<key>num_steps</key>
@@ -1280,7 +1253,7 @@
</param>
<param>
<key>grid_pos</key>
- <value>(1,2,1,1)</value>
+ <value>(2,2,1,1)</value>
</param>
<param>
<key>notebook</key>
@@ -1288,7 +1261,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(125, 284)</value>
+ <value>(-1, 285)</value>
</param>
<param>
<key>_rotation</key>
@@ -1299,7 +1272,7 @@
<key>variable_slider</key>
<param>
<key>id</key>
- <value>freq_offset</value>
+ <value>noise_amp</value>
</param>
<param>
<key>_enabled</key>
@@ -1307,7 +1280,7 @@
</param>
<param>
<key>label</key>
- <value>Frequency Offset</value>
+ <value>Channel Noise</value>
</param>
<param>
<key>value</key>
@@ -1315,11 +1288,11 @@
</param>
<param>
<key>min</key>
- <value>-0.5</value>
+ <value>0</value>
</param>
<param>
<key>max</key>
- <value>0.5</value>
+ <value>1.0</value>
</param>
<param>
<key>num_steps</key>
@@ -1335,7 +1308,7 @@
</param>
<param>
<key>grid_pos</key>
- <value>(2,2,1,1)</value>
+ <value>(1,2,1,1)</value>
</param>
<param>
<key>notebook</key>
@@ -1343,7 +1316,34 @@
</param>
<param>
<key>_coordinate</key>
- <value>(6, 284)</value>
+ <value>(129, 285)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>digital_costas_loop_cc</key>
+ <param>
+ <key>id</key>
+ <value>digital_costas_loop_cc_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>w</key>
+ <value>phase_bw</value>
+ </param>
+ <param>
+ <key>order</key>
+ <value>const.arity()</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(866, 246)</value>
</param>
<param>
<key>_rotation</key>
@@ -1381,12 +1381,6 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_chunks_to_symbols_xx</source_block_id>
- <sink_block_id>blks2_pfb_arb_resampler_ccf_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>gr_channel_model_0</source_block_id>
<sink_block_id>digital_fll_band_edge_cc_0</sink_block_id>
<source_key>0</source_key>
@@ -1428,4 +1422,10 @@
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
+ <connection>
+ <source_block_id>gr_chunks_to_symbols_xx</source_block_id>
+ <sink_block_id>blks2_pfb_arb_resampler_ccf_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
</flow_graph>
diff --git a/gr-digital/examples/demod/pam_timing.grc b/gr-digital/examples/demod/pam_timing.grc
index c253d9a9fc..af14191ebc 100644
--- a/gr-digital/examples/demod/pam_timing.grc
+++ b/gr-digital/examples/demod/pam_timing.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Thu Jul 5 17:55:51 2012</timestamp>
+ <timestamp>Mon Jan 14 11:00:42 2013</timestamp>
<block>
<key>options</key>
<param>
@@ -53,7 +53,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(-1, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -61,71 +61,65 @@
</param>
</block>
<block>
- <key>gr_uchar_to_float</key>
+ <key>variable_slider</key>
<param>
<key>id</key>
- <value>gr_uchar_to_float_0</value>
+ <value>beta</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(217, 108)</value>
+ <key>label</key>
+ <value>Timing Beta</value>
</param>
<param>
- <key>_rotation</key>
+ <key>value</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>gr_uchar_to_float</key>
<param>
- <key>id</key>
- <value>gr_uchar_to_float_0_0</value>
+ <key>min</key>
+ <value>0.0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>max</key>
+ <value>0.1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(216, 273)</value>
+ <key>num_steps</key>
+ <value>1000</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>samp_rate</value>
+ <key>converver</key>
+ <value>float_converter</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>grid_pos</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>32000</value>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(128, 9)</value>
+ <value>(668, 5)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
<key>variable_slider</key>
<param>
<key>id</key>
- <value>freq_offset</value>
+ <value>alpha</value>
</param>
<param>
<key>_enabled</key>
@@ -133,7 +127,7 @@
</param>
<param>
<key>label</key>
- <value>Frequency Offset</value>
+ <value>Timing Alpha</value>
</param>
<param>
<key>value</key>
@@ -141,11 +135,11 @@
</param>
<param>
<key>min</key>
- <value>-0.5</value>
+ <value>0</value>
</param>
<param>
<key>max</key>
- <value>0.5</value>
+ <value>1</value>
</param>
<param>
<key>num_steps</key>
@@ -169,7 +163,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(293, 684)</value>
+ <value>(552, 4)</value>
</param>
<param>
<key>_rotation</key>
@@ -180,7 +174,7 @@
<key>random_source_x</key>
<param>
<key>id</key>
- <value>random_source_x_0</value>
+ <value>random_source_x</value>
</param>
<param>
<key>_enabled</key>
@@ -196,11 +190,11 @@
</param>
<param>
<key>max</key>
- <value>pam_amp</value>
+ <value>const.arity()</value>
</param>
<param>
<key>num_samps</key>
- <value>10000</value>
+ <value>10000000</value>
</param>
<param>
<key>repeat</key>
@@ -208,7 +202,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(13, 80)</value>
+ <value>(-1, 163)</value>
</param>
<param>
<key>_rotation</key>
@@ -216,38 +210,38 @@
</param>
</block>
<block>
- <key>random_source_x</key>
+ <key>gr_chunks_to_symbols_xx</key>
<param>
<key>id</key>
- <value>random_source_x_0_0</value>
+ <value>gr_chunks_to_symbols_xx</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
+ <key>in_type</key>
<value>byte</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>out_type</key>
+ <value>complex</value>
</param>
<param>
- <key>max</key>
- <value>pam_amp</value>
+ <key>symbol_table</key>
+ <value>const.points()</value>
</param>
<param>
- <key>num_samps</key>
- <value>10000</value>
+ <key>dimension</key>
+ <value>1</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>num_ports</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(15, 245)</value>
+ <value>(203, 178)</value>
</param>
<param>
<key>_rotation</key>
@@ -255,10 +249,10 @@
</param>
</block>
<block>
- <key>const_source_x</key>
+ <key>gr_multiply_const_vxx</key>
<param>
<key>id</key>
- <value>const_source_x_0</value>
+ <value>gr_multiply_const_vxx_0</value>
</param>
<param>
<key>_enabled</key>
@@ -266,42 +260,19 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>complex</value>
</param>
<param>
<key>const</key>
- <value>-0.5*(pam_amp-1)</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(213, 197)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>const_source_x</key>
- <param>
- <key>id</key>
- <value>const_source_x_0_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>float</value>
+ <value>sig_amp</value>
</param>
<param>
- <key>const</key>
- <value>-0.5*(pam_amp-1)</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(200, 360)</value>
+ <value>(651, 186)</value>
</param>
<param>
<key>_rotation</key>
@@ -309,65 +280,38 @@
</param>
</block>
<block>
- <key>notebook</key>
+ <key>gr_channel_model</key>
<param>
<key>id</key>
- <value>notebook_0</value>
+ <value>gr_channel_model_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>style</key>
- <value>wx.NB_TOP</value>
- </param>
- <param>
- <key>labels</key>
- <value>['error', 'phase', 'freq', 'Resampled Signal']</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
- </param>
- <param>
- <key>notebook</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(729, 769)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>gr_add_xx</key>
- <param>
- <key>id</key>
- <value>gr_add_xx_0</value>
+ <key>noise_voltage</key>
+ <value>noise_amp</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>freq_offset</key>
+ <value>freq_offset</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>epsilon</key>
+ <value>interpratio</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>taps</key>
+ <value>1.0</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>seed</key>
+ <value>42</value>
</param>
<param>
<key>_coordinate</key>
- <value>(440, 167)</value>
+ <value>(73, 354)</value>
</param>
<param>
<key>_rotation</key>
@@ -375,10 +319,10 @@
</param>
</block>
<block>
- <key>gr_add_xx</key>
+ <key>gr_throttle</key>
<param>
<key>id</key>
- <value>gr_add_xx_0_1</value>
+ <value>gr_throttle_0</value>
</param>
<param>
<key>_enabled</key>
@@ -386,11 +330,11 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>complex</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
</param>
<param>
<key>vlen</key>
@@ -398,7 +342,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(430, 330)</value>
+ <value>(274, 384)</value>
</param>
<param>
<key>_rotation</key>
@@ -409,7 +353,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>nfilts</value>
+ <value>sig_amp</value>
</param>
<param>
<key>_enabled</key>
@@ -417,11 +361,11 @@
</param>
<param>
<key>value</key>
- <value>32</value>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(435, 686)</value>
+ <value>(662, 128)</value>
</param>
<param>
<key>_rotation</key>
@@ -432,7 +376,7 @@
<key>variable_slider</key>
<param>
<key>id</key>
- <value>noise_amp</value>
+ <value>interpratio</value>
</param>
<param>
<key>_enabled</key>
@@ -440,19 +384,19 @@
</param>
<param>
<key>label</key>
- <value>Channel Noise</value>
+ <value>Timing Offset</value>
</param>
<param>
<key>value</key>
- <value>0</value>
+ <value>1.00</value>
</param>
<param>
<key>min</key>
- <value>0</value>
+ <value>0.99</value>
</param>
<param>
<key>max</key>
- <value>1.0</value>
+ <value>1.01</value>
</param>
<param>
<key>num_steps</key>
@@ -476,18 +420,18 @@
</param>
<param>
<key>_coordinate</key>
- <value>(168, 684)</value>
+ <value>(-1, 465)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
<key>variable_slider</key>
<param>
<key>id</key>
- <value>interpratio</value>
+ <value>noise_amp</value>
</param>
<param>
<key>_enabled</key>
@@ -495,19 +439,19 @@
</param>
<param>
<key>label</key>
- <value>Timing Offset</value>
+ <value>Channel Noise</value>
</param>
<param>
<key>value</key>
- <value>1.00</value>
+ <value>0</value>
</param>
<param>
<key>min</key>
- <value>0.99</value>
+ <value>0</value>
</param>
<param>
<key>max</key>
- <value>1.01</value>
+ <value>1.0</value>
</param>
<param>
<key>num_steps</key>
@@ -531,18 +475,18 @@
</param>
<param>
<key>_coordinate</key>
- <value>(40, 684)</value>
+ <value>(114, 465)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
</block>
<block>
<key>variable_slider</key>
<param>
<key>id</key>
- <value>beta</value>
+ <value>freq_offset</value>
</param>
<param>
<key>_enabled</key>
@@ -550,7 +494,7 @@
</param>
<param>
<key>label</key>
- <value>Timing Beta</value>
+ <value>Frequency Offset</value>
</param>
<param>
<key>value</key>
@@ -558,11 +502,11 @@
</param>
<param>
<key>min</key>
- <value>0.0</value>
+ <value>-0.5</value>
</param>
<param>
<key>max</key>
- <value>0.1</value>
+ <value>0.5</value>
</param>
<param>
<key>num_steps</key>
@@ -586,62 +530,53 @@
</param>
<param>
<key>_coordinate</key>
- <value>(668, 5)</value>
+ <value>(236, 465)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>alpha</value>
+ <value>samp_rate</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Timing Alpha</value>
- </param>
- <param>
<key>value</key>
- <value>0</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
- </param>
- <param>
- <key>max</key>
- <value>1</value>
+ <value>32000</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>_coordinate</key>
+ <value>(282, 324)</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>id</key>
+ <value>const</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>value</key>
+ <value>digital.qpsk_constellation()</value>
</param>
<param>
<key>_coordinate</key>
- <value>(552, 4)</value>
+ <value>(206, 116)</value>
</param>
<param>
<key>_rotation</key>
@@ -649,22 +584,22 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>import</key>
<param>
<key>id</key>
- <value>pam_amp</value>
+ <value>import_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>2</value>
+ <key>import</key>
+ <value>from gnuradio import digital</value>
</param>
<param>
<key>_coordinate</key>
- <value>(223, 9)</value>
+ <value>(-1, 61)</value>
</param>
<param>
<key>_rotation</key>
@@ -675,7 +610,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>sig_amp</value>
+ <value>rolloff</value>
</param>
<param>
<key>_enabled</key>
@@ -683,11 +618,11 @@
</param>
<param>
<key>value</key>
- <value>1</value>
+ <value>.35</value>
</param>
<param>
<key>_coordinate</key>
- <value>(315, 9)</value>
+ <value>(459, 262)</value>
</param>
<param>
<key>_rotation</key>
@@ -695,74 +630,77 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>nfilts</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>value</key>
+ <value>32</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>_coordinate</key>
+ <value>(539, 262)</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>gr_pfb_clock_sync_xxx</key>
<param>
- <key>v_scale</key>
- <value>0</value>
+ <key>id</key>
+ <value>gr_pfb_clock_sync_xxx_0</value>
</param>
<param>
- <key>v_offset</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>t_scale</key>
- <value>0</value>
+ <key>type</key>
+ <value>ccf</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>sps</key>
+ <value>spb</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>alpha</key>
+ <value>alpha</value>
</param>
<param>
- <key>num_inputs</key>
- <value>1</value>
+ <key>beta</key>
+ <value>beta</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>taps</key>
+ <value>firdes.root_raised_cosine(nfilts, nfilts*spb, 1.0, rolloff, 44*nfilts)</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>filter_size</key>
+ <value>nfilts</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>init_phase</key>
+ <value>16</value>
</param>
<param>
- <key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <key>max_dev</key>
+ <value>1.5</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>osps</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1116, 500)</value>
+ <value>(444, 331)</value>
</param>
<param>
<key>_rotation</key>
@@ -770,30 +708,30 @@
</param>
</block>
<block>
- <key>gr_throttle</key>
+ <key>blks2_pfb_arb_resampler_ccf</key>
<param>
<key>id</key>
- <value>gr_throttle_0</value>
+ <value>blks2_pfb_arb_resampler_ccf_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>rate</key>
+ <value>spb</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>samp_rate</value>
+ <key>taps</key>
+ <value>firdes.root_raised_cosine(nfilts, nfilts, 1.0, rolloff, 44*nfilts)</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>size</key>
+ <value>nfilts</value>
</param>
<param>
<key>_coordinate</key>
- <value>(290, 575)</value>
+ <value>(438, 171)</value>
</param>
<param>
<key>_rotation</key>
@@ -804,7 +742,7 @@
<key>wxgui_scopesink2</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0_0</value>
+ <value>wxgui_scopesink2_0_0_1</value>
</param>
<param>
<key>_enabled</key>
@@ -812,11 +750,11 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>complex</value>
</param>
<param>
<key>title</key>
- <value>Scope Plot</value>
+ <value>Error</value>
</param>
<param>
<key>samp_rate</key>
@@ -824,7 +762,7 @@
</param>
<param>
<key>v_scale</key>
- <value>9</value>
+ <value>.5</value>
</param>
<param>
<key>v_offset</key>
@@ -856,7 +794,7 @@
</param>
<param>
<key>notebook</key>
- <value>notebook_0,1</value>
+ <value>notebook_0,3</value>
</param>
<param>
<key>trig_mode</key>
@@ -868,30 +806,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(1112, 881)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>rrctaps</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), .35, int(11*spb*nfilts))</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(513, 679)</value>
+ <value>(826, 112)</value>
</param>
<param>
<key>_rotation</key>
@@ -902,7 +817,7 @@
<key>wxgui_scopesink2</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0_1</value>
+ <value>wxgui_scopesink2_0</value>
</param>
<param>
<key>_enabled</key>
@@ -914,7 +829,7 @@
</param>
<param>
<key>title</key>
- <value>Error</value>
+ <value>Scope Plot</value>
</param>
<param>
<key>samp_rate</key>
@@ -922,7 +837,7 @@
</param>
<param>
<key>v_scale</key>
- <value>.5</value>
+ <value>0</value>
</param>
<param>
<key>v_offset</key>
@@ -954,7 +869,7 @@
</param>
<param>
<key>notebook</key>
- <value>notebook_0,3</value>
+ <value></value>
</param>
<param>
<key>trig_mode</key>
@@ -966,7 +881,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(1115, 358)</value>
+ <value>(829, 266)</value>
</param>
<param>
<key>_rotation</key>
@@ -974,92 +889,74 @@
</param>
</block>
<block>
- <key>gr_float_to_complex</key>
+ <key>wxgui_scopesink2</key>
<param>
<key>id</key>
- <value>gr_float_to_complex_0</value>
+ <value>wxgui_scopesink2_0_0_0_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(590, 184)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blks2_pfb_arb_resampler_ccf</key>
- <param>
- <key>id</key>
- <value>blks2_pfb_arb_resampler_ccf_0</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>title</key>
+ <value>Scope Plot</value>
</param>
<param>
- <key>rate</key>
- <value>spb</value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>taps</key>
- <value>firdes.root_raised_cosine(32, 32, 1.0, 0.35, 44*32)</value>
+ <key>v_scale</key>
+ <value>1.25</value>
</param>
<param>
- <key>size</key>
- <value>32</value>
+ <key>v_offset</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(816, 181)</value>
+ <key>t_scale</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>ac_couple</key>
+ <value>False</value>
</param>
- </block>
- <block>
- <key>gr_channel_model</key>
<param>
- <key>id</key>
- <value>gr_channel_model_0</value>
+ <key>xy_mode</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>num_inputs</key>
+ <value>1</value>
</param>
<param>
- <key>noise_voltage</key>
- <value>noise_amp</value>
+ <key>win_size</key>
+ <value></value>
</param>
<param>
- <key>freq_offset</key>
- <value>freq_offset</value>
+ <key>grid_pos</key>
+ <value></value>
</param>
<param>
- <key>epsilon</key>
- <value>interpratio</value>
+ <key>notebook</key>
+ <value>notebook_0,2</value>
</param>
<param>
- <key>taps</key>
- <value>1.0</value>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
</param>
<param>
- <key>seed</key>
- <value>42</value>
+ <key>y_axis_label</key>
+ <value>Counts</value>
</param>
<param>
<key>_coordinate</key>
- <value>(59, 543)</value>
+ <value>(824, 485)</value>
</param>
<param>
<key>_rotation</key>
@@ -1067,10 +964,10 @@
</param>
</block>
<block>
- <key>gr_multiply_const_vxx</key>
+ <key>wxgui_scopesink2</key>
<param>
<key>id</key>
- <value>gr_multiply_const_vxx_0</value>
+ <value>wxgui_scopesink2_0_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1078,97 +975,63 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>float</value>
</param>
<param>
- <key>const</key>
- <value>sig_amp</value>
+ <key>title</key>
+ <value>Error</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(714, 382)</value>
+ <key>v_scale</key>
+ <value>3</value>
</param>
<param>
- <key>_rotation</key>
+ <key>v_offset</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>spb</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>4.2563</value>
- </param>
<param>
- <key>_coordinate</key>
- <value>(42, 840)</value>
- </param>
- <param>
- <key>_rotation</key>
+ <key>t_scale</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>gr_pfb_clock_sync_xxx</key>
- <param>
- <key>id</key>
- <value>gr_pfb_clock_sync_xxx_0</value>
- </param>
<param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>ccf</value>
- </param>
- <param>
- <key>sps</key>
- <value>spb</value>
+ <key>ac_couple</key>
+ <value>False</value>
</param>
<param>
- <key>alpha</key>
- <value>alpha</value>
+ <key>xy_mode</key>
+ <value>False</value>
</param>
<param>
- <key>beta</key>
- <value>beta</value>
+ <key>num_inputs</key>
+ <value>1</value>
</param>
<param>
- <key>taps</key>
- <value>rrctaps</value>
+ <key>win_size</key>
+ <value></value>
</param>
<param>
- <key>filter_size</key>
- <value>nfilts</value>
+ <key>grid_pos</key>
+ <value></value>
</param>
<param>
- <key>init_phase</key>
- <value>16</value>
+ <key>notebook</key>
+ <value>notebook_0,0</value>
</param>
<param>
- <key>max_dev</key>
- <value>1.5</value>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
</param>
<param>
- <key>osps</key>
- <value>1</value>
+ <key>y_axis_label</key>
+ <value>Counts</value>
</param>
<param>
<key>_coordinate</key>
- <value>(512, 527)</value>
+ <value>(829, 358)</value>
</param>
<param>
<key>_rotation</key>
@@ -1179,7 +1042,7 @@
<key>wxgui_scopesink2</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0</value>
+ <value>wxgui_scopesink2_0_0_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1191,7 +1054,7 @@
</param>
<param>
<key>title</key>
- <value>Error</value>
+ <value>Scope Plot</value>
</param>
<param>
<key>samp_rate</key>
@@ -1199,7 +1062,7 @@
</param>
<param>
<key>v_scale</key>
- <value>3</value>
+ <value>9</value>
</param>
<param>
<key>v_offset</key>
@@ -1231,7 +1094,7 @@
</param>
<param>
<key>notebook</key>
- <value>notebook_0,0</value>
+ <value>notebook_0,1</value>
</param>
<param>
<key>trig_mode</key>
@@ -1243,7 +1106,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(1114, 615)</value>
+ <value>(754, 607)</value>
</param>
<param>
<key>_rotation</key>
@@ -1251,74 +1114,57 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>notebook</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0_0_0</value>
+ <value>notebook_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>style</key>
+ <value>wx.NB_TOP</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>labels</key>
+ <value>['error', 'phase', 'freq', 'Resampled Signal']</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>grid_pos</key>
+ <value></value>
</param>
<param>
- <key>v_scale</key>
- <value>1.25</value>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
- <key>v_offset</key>
- <value>0</value>
+ <key>_coordinate</key>
+ <value>(380, 511)</value>
</param>
<param>
- <key>t_scale</key>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>ac_couple</key>
- <value>False</value>
- </param>
- <param>
- <key>xy_mode</key>
- <value>False</value>
- </param>
- <param>
- <key>num_inputs</key>
- <value>1</value>
- </param>
- <param>
- <key>win_size</key>
- <value></value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
- </param>
- <param>
- <key>notebook</key>
- <value>notebook_0,2</value>
+ <key>id</key>
+ <value>spb</value>
</param>
<param>
- <key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>value</key>
+ <value>4.2563</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1080, 751)</value>
+ <value>(300, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -1326,110 +1172,68 @@
</param>
</block>
<connection>
- <source_block_id>random_source_x_0</source_block_id>
- <sink_block_id>gr_uchar_to_float_0</sink_block_id>
+ <source_block_id>gr_channel_model_0</source_block_id>
+ <sink_block_id>gr_throttle_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_uchar_to_float_0</source_block_id>
- <sink_block_id>gr_add_xx_0</sink_block_id>
+ <source_block_id>gr_throttle_0</source_block_id>
+ <sink_block_id>gr_pfb_clock_sync_xxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>const_source_x_0</source_block_id>
- <sink_block_id>gr_add_xx_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>gr_uchar_to_float_0_0</source_block_id>
- <sink_block_id>gr_add_xx_0_1</sink_block_id>
- <source_key>0</source_key>
+ <source_block_id>gr_pfb_clock_sync_xxx_0</source_block_id>
+ <sink_block_id>wxgui_scopesink2_0_0_0_0</sink_block_id>
+ <source_key>2</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>const_source_x_0_0</source_block_id>
- <sink_block_id>gr_add_xx_0_1</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>random_source_x_0_0</source_block_id>
- <sink_block_id>gr_uchar_to_float_0_0</sink_block_id>
+ <source_block_id>gr_multiply_const_vxx_0</source_block_id>
+ <sink_block_id>wxgui_scopesink2_0_0_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_channel_model_0</source_block_id>
- <sink_block_id>gr_throttle_0</sink_block_id>
+ <source_block_id>blks2_pfb_arb_resampler_ccf_0</source_block_id>
+ <sink_block_id>gr_multiply_const_vxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_add_xx_0</source_block_id>
- <sink_block_id>gr_float_to_complex_0</sink_block_id>
+ <source_block_id>gr_multiply_const_vxx_0</source_block_id>
+ <sink_block_id>gr_channel_model_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_add_xx_0_1</source_block_id>
- <sink_block_id>gr_float_to_complex_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>gr_pfb_clock_sync_xxx_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <source_block_id>gr_chunks_to_symbols_xx</source_block_id>
+ <sink_block_id>blks2_pfb_arb_resampler_ccf_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_throttle_0</source_block_id>
- <sink_block_id>gr_pfb_clock_sync_xxx_0</sink_block_id>
+ <source_block_id>random_source_x</source_block_id>
+ <sink_block_id>gr_chunks_to_symbols_xx</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_pfb_clock_sync_xxx_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0_0</sink_block_id>
- <source_key>1</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>gr_pfb_clock_sync_xxx_0</source_block_id>
<sink_block_id>wxgui_scopesink2_0_0_0</sink_block_id>
<source_key>3</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_pfb_clock_sync_xxx_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0_0_0_0</sink_block_id>
- <source_key>2</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>gr_multiply_const_vxx_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0_0_1</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>gr_float_to_complex_0</source_block_id>
- <sink_block_id>blks2_pfb_arb_resampler_ccf_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blks2_pfb_arb_resampler_ccf_0</source_block_id>
- <sink_block_id>gr_multiply_const_vxx_0</sink_block_id>
- <source_key>0</source_key>
+ <sink_block_id>wxgui_scopesink2_0_0</sink_block_id>
+ <source_key>1</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_multiply_const_vxx_0</source_block_id>
- <sink_block_id>gr_channel_model_0</sink_block_id>
+ <source_block_id>gr_pfb_clock_sync_xxx_0</source_block_id>
+ <sink_block_id>wxgui_scopesink2_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-digital/lib/CMakeLists.txt b/gr-digital/lib/CMakeLists.txt
index 155a100988..6f83ff0364 100644
--- a/gr-digital/lib/CMakeLists.txt
+++ b/gr-digital/lib/CMakeLists.txt
@@ -21,16 +21,16 @@
# Setup the include and linker paths
########################################################################
include_directories(
- ${GNURADIO_CORE_INCLUDE_DIRS}
- ${GR_ANALOG_INCLUDE_DIRS}
- ${GR_DIGITAL_INCLUDE_DIRS}
${CMAKE_CURRENT_BINARY_DIR}/../include
+ ${GR_DIGITAL_INCLUDE_DIRS}
+ ${GR_ANALOG_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
-include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
-
########################################################################
# generate helper scripts to expand templated files
########################################################################
diff --git a/gr-digital/swig/CMakeLists.txt b/gr-digital/swig/CMakeLists.txt
index efbd1c2c92..746bc6111b 100644
--- a/gr-digital/swig/CMakeLists.txt
+++ b/gr-digital/swig/CMakeLists.txt
@@ -105,11 +105,13 @@ execute_process(
)
set(GR_SWIG_INCLUDE_DIRS
- ${GR_ANALOG_INCLUDE_DIRS}
- ${GR_DIGITAL_INCLUDE_DIRS}
- ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_BINARY_DIR}/../include
+ ${GR_DIGITAL_INCLUDE_DIRS}
+ ${GR_ANALOG_INCLUDE_DIRS}
+ ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
# Setup swig docs to depend on includes and pull in from build directory
diff --git a/gr-fcd/examples/c++/CMakeLists.txt b/gr-fcd/examples/c++/CMakeLists.txt
index 05574f4a8c..7ff69777d3 100644
--- a/gr-fcd/examples/c++/CMakeLists.txt
+++ b/gr-fcd/examples/c++/CMakeLists.txt
@@ -17,9 +17,13 @@
# the Free Software Foundation, Inc., 51 Franklin Street,
# Boston, MA 02110-1301, USA.
-include_directories(${GR_FCD_INCLUDE_DIRS})
-include_directories(${GNURADIO_CORE_INCLUDE_DIRS})
-include_directories(${GR_AUDIO_INCLUDE_DIRS})
+include_directories(
+ ${GR_FCD_INCLUDE_DIRS}
+ ${GR_AUDIO_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+)
add_executable(fcd_nfm_rx fcd_nfm_rx.cc)
target_link_libraries(fcd_nfm_rx gnuradio-fcd)
diff --git a/gr-fcd/lib/CMakeLists.txt b/gr-fcd/lib/CMakeLists.txt
index 9a5605d99c..a5c95ceb7d 100644
--- a/gr-fcd/lib/CMakeLists.txt
+++ b/gr-fcd/lib/CMakeLists.txt
@@ -24,15 +24,16 @@ GR_INCLUDE_SUBDIRECTORY(fcd)
# Setup the include and linker paths
########################################################################
include_directories(
- ${GNURADIO_CORE_INCLUDE_DIRS}
- ${GR_FCD_INCLUDE_DIRS}
- ${GR_AUDIO_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}/hid
${CMAKE_CURRENT_SOURCE_DIR}/fcd
+ ${GR_FCD_INCLUDE_DIRS}
+ ${GR_AUDIO_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
${LIBUSB_INCLUDE_DIR}
)
-include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
########################################################################
diff --git a/gr-fcd/swig/CMakeLists.txt b/gr-fcd/swig/CMakeLists.txt
index f715c47856..c170f3f663 100644
--- a/gr-fcd/swig/CMakeLists.txt
+++ b/gr-fcd/swig/CMakeLists.txt
@@ -27,8 +27,10 @@ include(GrSwig)
set(GR_SWIG_INCLUDE_DIRS
${GR_FCD_INCLUDE_DIRS}
- ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
${GR_AUDIO_INCLUDE_DIRS}
+ ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/fcd_swig_doc.i)
diff --git a/gr-fft/lib/CMakeLists.txt b/gr-fft/lib/CMakeLists.txt
index c16e0d1164..26fcaa7cde 100644
--- a/gr-fft/lib/CMakeLists.txt
+++ b/gr-fft/lib/CMakeLists.txt
@@ -23,8 +23,9 @@
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
- ${GNURADIO_CORE_INCLUDE_DIRS}
${GR_FFT_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
${Boost_INCLUDE_DIRS}
${FFTW3F_INCLUDE_DIRS}
)
diff --git a/gr-fft/swig/CMakeLists.txt b/gr-fft/swig/CMakeLists.txt
index 7ea41f220e..13ade2c908 100644
--- a/gr-fft/swig/CMakeLists.txt
+++ b/gr-fft/swig/CMakeLists.txt
@@ -26,6 +26,8 @@ include(GrSwig)
set(GR_SWIG_INCLUDE_DIRS
${GR_FFT_INCLUDE_DIRS}
${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
${FFTW3F_INCLUDE_DIRS}
)
diff --git a/gr-filter/lib/CMakeLists.txt b/gr-filter/lib/CMakeLists.txt
index 81f62aa545..626f5521f2 100644
--- a/gr-filter/lib/CMakeLists.txt
+++ b/gr-filter/lib/CMakeLists.txt
@@ -90,12 +90,13 @@ expand_cc(rational_resampler_base_XXX_impl ccc ccf fcc fff fsf scc)
# Setup the include and linker paths
########################################################################
include_directories(
- ${GR_FILTER_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
- ${VOLK_INCLUDE_DIRS}
- ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GR_FILTER_INCLUDE_DIRS}
${GR_FFT_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${VOLK_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
${Boost_INCLUDE_DIRS}
)
diff --git a/gr-filter/swig/CMakeLists.txt b/gr-filter/swig/CMakeLists.txt
index 3eee3a1ee4..50c5bca6de 100644
--- a/gr-filter/swig/CMakeLists.txt
+++ b/gr-filter/swig/CMakeLists.txt
@@ -25,8 +25,10 @@ include(GrSwig)
set(GR_SWIG_INCLUDE_DIRS
${GR_FILTER_INCLUDE_DIRS}
+ ${GR_FFT_INCLUDE_DIRS}
${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
- ${FFT_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
${FFTW3F_INCLUDE_DIRS}
)
diff --git a/gr-howto-write-a-block/CMakeLists.txt b/gr-howto-write-a-block/CMakeLists.txt
index 5d2477f893..02b13c6b69 100644
--- a/gr-howto-write-a-block/CMakeLists.txt
+++ b/gr-howto-write-a-block/CMakeLists.txt
@@ -99,15 +99,15 @@ endif()
########################################################################
include_directories(
${CMAKE_SOURCE_DIR}/include
- ${Boost_INCLUDE_DIRS}
- ${GRUEL_INCLUDE_DIRS}
${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
link_directories(
- ${Boost_LIBRARY_DIRS}
- ${GRUEL_LIBRARY_DIRS}
${GNURADIO_CORE_LIBRARY_DIRS}
+ ${GRUEL_LIBRARY_DIRS}
+ ${Boost_LIBRARY_DIRS}
)
# Set component parameters
diff --git a/gr-howto-write-a-block/swig/CMakeLists.txt b/gr-howto-write-a-block/swig/CMakeLists.txt
index 1e3e59e2c4..4d5f1156e3 100644
--- a/gr-howto-write-a-block/swig/CMakeLists.txt
+++ b/gr-howto-write-a-block/swig/CMakeLists.txt
@@ -39,6 +39,8 @@ foreach(incdir ${GRUEL_INCLUDE_DIRS})
list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gruel/swig)
endforeach(incdir)
+list(APPEND GR_SWIG_INCLUDE_DIRS ${Boost_INCLUDE_DIRS})
+
set(GR_SWIG_LIBRARIES gnuradio-howto)
set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/howto_swig_doc.i)
set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
diff --git a/gr-noaa/lib/CMakeLists.txt b/gr-noaa/lib/CMakeLists.txt
index 7bac21e4a4..3f369f8aff 100644
--- a/gr-noaa/lib/CMakeLists.txt
+++ b/gr-noaa/lib/CMakeLists.txt
@@ -21,11 +21,12 @@
# Setup the include and linker paths
########################################################################
include_directories(
- ${GNURADIO_CORE_INCLUDE_DIRS}
${GR_NOAA_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
-include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
########################################################################
diff --git a/gr-noaa/swig/CMakeLists.txt b/gr-noaa/swig/CMakeLists.txt
index a8335062cb..5329840368 100644
--- a/gr-noaa/swig/CMakeLists.txt
+++ b/gr-noaa/swig/CMakeLists.txt
@@ -26,6 +26,8 @@ include(GrSwig)
set(GR_SWIG_INCLUDE_DIRS
${GR_NOAA_INCLUDE_DIRS}
${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/noaa_swig_doc.i)
diff --git a/gr-pager/lib/CMakeLists.txt b/gr-pager/lib/CMakeLists.txt
index 7b91c5a33b..cb62bcc752 100644
--- a/gr-pager/lib/CMakeLists.txt
+++ b/gr-pager/lib/CMakeLists.txt
@@ -21,11 +21,12 @@
# Setup the include and linker paths
########################################################################
include_directories(
- ${GNURADIO_CORE_INCLUDE_DIRS}
${GR_PAGER_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
-include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
########################################################################
diff --git a/gr-pager/swig/CMakeLists.txt b/gr-pager/swig/CMakeLists.txt
index 9a8d9d0d8b..c98369a365 100644
--- a/gr-pager/swig/CMakeLists.txt
+++ b/gr-pager/swig/CMakeLists.txt
@@ -26,6 +26,8 @@ include(GrSwig)
set(GR_SWIG_INCLUDE_DIRS
${GR_PAGER_INCLUDE_DIRS}
${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/pager_swig_doc.i)
diff --git a/gr-qtgui/CMakeLists.txt b/gr-qtgui/CMakeLists.txt
index f6260bc7e9..d7d889e93a 100644
--- a/gr-qtgui/CMakeLists.txt
+++ b/gr-qtgui/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright 2010-2011 Free Software Foundation, Inc.
+# Copyright 2010-2011,2013 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -64,7 +64,8 @@ SET(GR_PKG_QTGUI_EXAMPLES_DIR ${GR_PKG_DATA_DIR}/examples/qt-gui)
########################################################################
if(ENABLE_GR_QTGUI)
-include(${QT_USE_FILE}) #sets up the environment
+# populate the environment with QT variables
+include(GrSetupQt4)
########################################################################
# Setup CPack components
diff --git a/gr-qtgui/lib/CMakeLists.txt b/gr-qtgui/lib/CMakeLists.txt
index 2dc35e81cb..49fa525d7e 100644
--- a/gr-qtgui/lib/CMakeLists.txt
+++ b/gr-qtgui/lib/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright 2010-2011 Free Software Foundation, Inc.
+# Copyright 2010-2011,2013 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -62,17 +62,20 @@ set(qtgui_srcs
# Setup the include and linker paths
########################################################################
include_directories(
- ${GNURADIO_CORE_INCLUDE_DIRS}
${GR_QTGUI_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${QWT_INCLUDE_DIRS}
+ ${QT_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+ ${PYTHON_INCLUDE_DIRS}
)
-include_directories(${Boost_INCLUDE_DIRS})
-link_directories(${Boost_LIBRARY_DIRS})
-
-include_directories(${QWT_INCLUDE_DIRS})
-link_directories(${QWT_LIBRARY_DIRS})
+link_directories(
+ ${QWT_LIBRARY_DIRS}
+ ${Boost_LIBRARY_DIRS}
+)
-include_directories(${PYTHON_INCLUDE_DIRS})
include_directories(${PYTHON_INCLUDE_PATH}) #deprecated for dirs (cmake 2.6)
########################################################################
@@ -80,8 +83,8 @@ include_directories(${PYTHON_INCLUDE_PATH}) #deprecated for dirs (cmake 2.6)
########################################################################
list(APPEND qtgui_libs
gnuradio-core
- ${QT_LIBRARIES}
${QWT_LIBRARIES}
+ ${QT_LIBRARIES}
${PYTHON_LIBRARIES}
)
diff --git a/gr-qtgui/swig/CMakeLists.txt b/gr-qtgui/swig/CMakeLists.txt
index 9f092f6c6e..a1f70240c3 100644
--- a/gr-qtgui/swig/CMakeLists.txt
+++ b/gr-qtgui/swig/CMakeLists.txt
@@ -24,9 +24,12 @@ include(GrPython)
include(GrSwig)
set(GR_SWIG_INCLUDE_DIRS
- ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
${GR_QTGUI_INCLUDE_DIRS}
+ ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
${QWT_INCLUDE_DIRS}
+ ${QT_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/qtgui_swig_doc.i)
diff --git a/gr-shd/lib/CMakeLists.txt b/gr-shd/lib/CMakeLists.txt
index 9ddf109af0..38154755c1 100644
--- a/gr-shd/lib/CMakeLists.txt
+++ b/gr-shd/lib/CMakeLists.txt
@@ -21,14 +21,14 @@
# Setup the include and linker paths
########################################################################
include_directories(
- ${GNURADIO_CORE_INCLUDE_DIRS}
${GR_SHD_INCLUDE_DIRS}
-)
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${SHD_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+}
-include_directories(${SHD_INCLUDE_DIRS})
link_directories(${SHD_LIBRARY_DIRS})
-
-include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
########################################################################
diff --git a/gr-shd/swig/CMakeLists.txt b/gr-shd/swig/CMakeLists.txt
index b61adfcad5..364656b866 100644
--- a/gr-shd/swig/CMakeLists.txt
+++ b/gr-shd/swig/CMakeLists.txt
@@ -28,6 +28,8 @@ set(GR_SWIG_FLAGS -DGR_HAVE_SHD) #needed to parse shd_swig.i
set(GR_SWIG_INCLUDE_DIRS
${GR_SHD_INCLUDE_DIRS}
${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/shd_swig_doc.i)
diff --git a/gr-trellis/src/lib/CMakeLists.txt b/gr-trellis/src/lib/CMakeLists.txt
index a42aa19cf1..e2abf0238f 100644
--- a/gr-trellis/src/lib/CMakeLists.txt
+++ b/gr-trellis/src/lib/CMakeLists.txt
@@ -23,12 +23,13 @@ include(GrPython)
# Setup the include and linker paths
########################################################################
include_directories(
- ${GNURADIO_CORE_INCLUDE_DIRS}
${GR_TRELLIS_INCLUDE_DIRS}
${GR_DIGITAL_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
-include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
########################################################################
@@ -204,8 +205,10 @@ set(GR_SWIG_SOURCE_DEPS
)
set(GR_SWIG_INCLUDE_DIRS
${GR_TRELLIS_INCLUDE_DIRS}
- ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
${GR_DIGITAL_SWIG_INCLUDE_DIRS}
+ ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/trellis_swig_doc.i)
diff --git a/gr-uhd/CMakeLists.txt b/gr-uhd/CMakeLists.txt
index 8d5c3a8849..38624b8712 100644
--- a/gr-uhd/CMakeLists.txt
+++ b/gr-uhd/CMakeLists.txt
@@ -36,7 +36,6 @@ GR_REGISTER_COMPONENT("gr-uhd" ENABLE_GR_UHD
GR_SET_GLOBAL(GR_UHD_INCLUDE_DIRS
${CMAKE_CURRENT_SOURCE_DIR}/include
- ${UHD_INCLUDE_DIRS}
)
SET(GR_PKG_UHD_EXAMPLES_DIR ${GR_PKG_DATA_DIR}/examples/uhd)
diff --git a/gr-uhd/examples/c++/CMakeLists.txt b/gr-uhd/examples/c++/CMakeLists.txt
index 25645117c2..a6c9891d73 100644
--- a/gr-uhd/examples/c++/CMakeLists.txt
+++ b/gr-uhd/examples/c++/CMakeLists.txt
@@ -21,15 +21,15 @@
# Setup the include and linker paths
########################################################################
include_directories(
- ${GNURADIO_CORE_INCLUDE_DIRS}
- ${GR_UHD_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}
+ ${GR_UHD_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+ ${UHD_INCLUDE_DIRS}
)
-include_directories(${UHD_INCLUDE_DIRS})
link_directories(${UHD_LIBRARY_DIRS})
-
-include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
########################################################################
diff --git a/gr-uhd/lib/CMakeLists.txt b/gr-uhd/lib/CMakeLists.txt
index 810d1446ac..c494fddad5 100644
--- a/gr-uhd/lib/CMakeLists.txt
+++ b/gr-uhd/lib/CMakeLists.txt
@@ -21,16 +21,18 @@
# Setup the include and linker paths
########################################################################
include_directories(
- ${GNURADIO_CORE_INCLUDE_DIRS}
- ${GR_UHD_INCLUDE_DIRS}
${CMAKE_CURRENT_BINARY_DIR}
+ ${GR_UHD_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+ ${UHD_INCLUDE_DIRS}
)
-include_directories(${UHD_INCLUDE_DIRS})
-link_directories(${UHD_LIBRARY_DIRS})
-
-include_directories(${Boost_INCLUDE_DIRS})
-link_directories(${Boost_LIBRARY_DIRS})
+link_directories(
+ ${UHD_LIBRARY_DIRS}
+ ${Boost_LIBRARY_DIRS}
+)
########################################################################
# Setup library
diff --git a/gr-uhd/swig/CMakeLists.txt b/gr-uhd/swig/CMakeLists.txt
index 3b26b2bfac..3a5132e7fd 100644
--- a/gr-uhd/swig/CMakeLists.txt
+++ b/gr-uhd/swig/CMakeLists.txt
@@ -26,8 +26,11 @@ include(GrSwig)
set(GR_SWIG_FLAGS -DGR_HAVE_UHD) #needed to parse uhd_swig.i
set(GR_SWIG_INCLUDE_DIRS
- ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
${GR_UHD_INCLUDE_DIRS}
+ ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+ ${UHD_INCLUDE_DIRS}
)
set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/uhd_swig_doc.i)
diff --git a/gr-video-sdl/src/CMakeLists.txt b/gr-video-sdl/src/CMakeLists.txt
index 27fb4115f6..3050926bd7 100644
--- a/gr-video-sdl/src/CMakeLists.txt
+++ b/gr-video-sdl/src/CMakeLists.txt
@@ -21,15 +21,15 @@
# Setup the include and linker paths
########################################################################
include_directories(
- ${GNURADIO_CORE_INCLUDE_DIRS}
${GR_VIDEO_SDL_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+ ${SDL_INCLUDE_DIR}
)
-include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
-include_directories(${SDL_INCLUDE_DIR})
-
########################################################################
# Setup library
########################################################################
@@ -69,6 +69,8 @@ include(GrSwig)
set(GR_SWIG_INCLUDE_DIRS
${GR_COMEDI_INCLUDE_DIRS}
${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/video_sdl_swig_doc.i)
diff --git a/gr-vocoder/lib/CMakeLists.txt b/gr-vocoder/lib/CMakeLists.txt
index 69219b03f5..43a4156d06 100644
--- a/gr-vocoder/lib/CMakeLists.txt
+++ b/gr-vocoder/lib/CMakeLists.txt
@@ -21,11 +21,12 @@
# Setup the include and linker paths
########################################################################
include_directories(
- ${GNURADIO_CORE_INCLUDE_DIRS}
${GR_VOCODER_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
-include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
########################################################################
diff --git a/gr-vocoder/swig/CMakeLists.txt b/gr-vocoder/swig/CMakeLists.txt
index aaf09700f2..8417823c43 100644
--- a/gr-vocoder/swig/CMakeLists.txt
+++ b/gr-vocoder/swig/CMakeLists.txt
@@ -26,6 +26,8 @@ include(GrSwig)
set(GR_SWIG_INCLUDE_DIRS
${GR_VOCODER_INCLUDE_DIRS}
${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
)
set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/vocoder_swig_doc.i)
diff --git a/gr-wavelet/lib/CMakeLists.txt b/gr-wavelet/lib/CMakeLists.txt
index 9594f6a6ac..f446adb9c2 100644
--- a/gr-wavelet/lib/CMakeLists.txt
+++ b/gr-wavelet/lib/CMakeLists.txt
@@ -21,10 +21,11 @@
# Setup the include and linker paths
########################################################################
include_directories(
- ${GR_WAVELET_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
+ ${GR_WAVELET_INCLUDE_DIRS}
${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
${Boost_INCLUDE_DIRS}
${GSL_INCLUDE_DIRS}
)
diff --git a/gr-wavelet/swig/CMakeLists.txt b/gr-wavelet/swig/CMakeLists.txt
index 2c5f433ebb..ea7a24b244 100644
--- a/gr-wavelet/swig/CMakeLists.txt
+++ b/gr-wavelet/swig/CMakeLists.txt
@@ -26,6 +26,8 @@ include(GrSwig)
set(GR_SWIG_INCLUDE_DIRS
${GR_WAVELET_INCLUDE_DIRS}
${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
${GSL_INCLUDE_DIRS}
)
diff --git a/gr-wxgui/src/python/plotter/plotter_base.py b/gr-wxgui/src/python/plotter/plotter_base.py
index 2fdd0f20ab..25811f09b2 100644
--- a/gr-wxgui/src/python/plotter/plotter_base.py
+++ b/gr-wxgui/src/python/plotter/plotter_base.py
@@ -88,9 +88,9 @@ class plotter_base(wx.glcanvas.GLCanvas, common.mutex):
"""
attribList = (wx.glcanvas.WX_GL_DOUBLEBUFFER, wx.glcanvas.WX_GL_RGBA)
wx.glcanvas.GLCanvas.__init__(self, parent, attribList=attribList);
- self.use_persistence=False
- self.persist_alpha=2.0/15
- self.clear_accum=True
+ self.use_persistence=False
+ self.persist_alpha=2.0/15
+ self.clear_accum=True
self._gl_init_flag = False
self._resized_flag = True
self._init_fcns = list()
@@ -100,12 +100,12 @@ class plotter_base(wx.glcanvas.GLCanvas, common.mutex):
self.Bind(wx.EVT_SIZE, self._on_size)
self.Bind(wx.EVT_ERASE_BACKGROUND, lambda e: None)
- def set_use_persistence(self,enable):
- self.use_persistence=enable
- self.clear_accum=True
+ def set_use_persistence(self,enable):
+ self.use_persistence=enable
+ self.clear_accum=True
- def set_persist_alpha(self,analog_alpha):
- self.persist_alpha=analog_alpha
+ def set_persist_alpha(self,analog_alpha):
+ self.persist_alpha=analog_alpha
def new_gl_cache(self, draw_fcn, draw_pri=50):
"""
@@ -141,7 +141,7 @@ class plotter_base(wx.glcanvas.GLCanvas, common.mutex):
"""
self.lock()
self._resized_flag = True
- self.clear_accum=True
+ self.clear_accum=True
self.unlock()
def _on_paint(self, event):
@@ -153,12 +153,14 @@ class plotter_base(wx.glcanvas.GLCanvas, common.mutex):
"""
self.lock()
self.SetCurrent()
- #check if gl was initialized
+
+ # check if gl was initialized
if not self._gl_init_flag:
GL.glClearColor(*BACKGROUND_COLOR_SPEC)
for fcn in self._init_fcns: fcn()
self._gl_init_flag = True
- #check for a change in window size
+
+ # check for a change in window size
if self._resized_flag:
self.width, self.height = self.GetSize()
GL.glMatrixMode(GL.GL_PROJECTION)
@@ -169,35 +171,31 @@ class plotter_base(wx.glcanvas.GLCanvas, common.mutex):
GL.glViewport(0, 0, self.width, self.height)
for cache in self._gl_caches: cache.changed(True)
self._resized_flag = False
- #clear, draw functions, swap
- GL.glClear(GL.GL_COLOR_BUFFER_BIT)
- if False:
- GL.glEnable (GL.GL_LINE_SMOOTH)
- GL.glEnable (GL.GL_POLYGON_SMOOTH)
- GL.glEnable (GL.GL_BLEND)
- GL.glBlendFunc (GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA)
- GL.glHint (GL.GL_LINE_SMOOTH_HINT, GL.GL_NICEST) #GL.GL_DONT_CARE)
- GL.glHint(GL.GL_POLYGON_SMOOTH_HINT, GL.GL_NICEST)
- #GL.glLineWidth (1.5)
+ # clear buffer if needed
+ if self.clear_accum or not self.use_persistence:
+ GL.glClear(GL.GL_COLOR_BUFFER_BIT)
+ self.clear_accum=False
+
+ # apply fading
+ if self.use_persistence:
+ GL.glEnable(GL.GL_BLEND)
+ GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA)
- GL.glEnable(GL.GL_MULTISAMPLE) #Enable Multisampling anti-aliasing
+ GL.glBegin(GL.GL_QUADS)
+ GL.glColor4f(1,1,1,self.persist_alpha)
+ GL.glVertex2f(0, self.height)
+ GL.glVertex2f(self.width, self.height)
+ GL.glVertex2f(self.width, 0)
+ GL.glVertex2f(0, 0)
+ GL.glEnd()
+ GL.glDisable(GL.GL_BLEND)
+ # draw functions
for fcn in self._draw_fcns: fcn[1]()
- if self.use_persistence:
- if self.clear_accum:
- #GL.glClear(GL.GL_ACCUM_BUFFER_BIT)
- try:
- GL.glAccum(GL.GL_LOAD, 1.0)
- except:
- pass
- self.clear_accum=False
-
- GL.glAccum(GL.GL_MULT, 1.0-self.persist_alpha)
- GL.glAccum(GL.GL_ACCUM, self.persist_alpha)
- GL.glAccum(GL.GL_RETURN, 1.0)
+ # show result
self.SwapBuffers()
self.unlock()
diff --git a/grc/blocks/block_tree.xml b/grc/blocks/block_tree.xml
index 183883959d..dcd6c54483 100644
--- a/grc/blocks/block_tree.xml
+++ b/grc/blocks/block_tree.xml
@@ -45,6 +45,7 @@
<block>gr_tagged_stream_to_pdu</block>
<block>gr_tuntap_pdu</block>
<block>gr_socket_pdu</block>
+ <block>gr_random_pdu</block>
</cat>
<cat>
<name>Operators</name>
diff --git a/grc/blocks/gr_random_pdu.xml b/grc/blocks/gr_random_pdu.xml
new file mode 100644
index 0000000000..ed5a79a924
--- /dev/null
+++ b/grc/blocks/gr_random_pdu.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## Random PDU
+###################################################
+ -->
+<block>
+ <name>Random PDU Generator</name>
+ <key>gr_random_pdu</key>
+ <import>from gnuradio import gr</import>
+ <import>from gruel import pmt</import>
+ <make>gr.random_pdu($minsize, $maxsize)</make>
+ <param>
+ <name>Min Bytes</name>
+ <key>minsize</key>
+ <value>50</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Max Bytes</name>
+ <key>maxsize</key>
+ <value>2000</value>
+ <type>int</type>
+ </param>
+ <sink>
+ <name>generate</name>
+ <type>message</type>
+ <optional>1</optional>
+ </sink>
+ <source>
+ <name>pdus</name>
+ <type>message</type>
+ <optional>1</optional>
+ </source>
+</block>
diff --git a/gruel/CMakeLists.txt b/gruel/CMakeLists.txt
index 627135abe9..3e8c5166e5 100644
--- a/gruel/CMakeLists.txt
+++ b/gruel/CMakeLists.txt
@@ -37,6 +37,7 @@ include(GrMiscUtils)
GR_SET_GLOBAL(GRUEL_INCLUDE_DIRS
${CMAKE_CURRENT_SOURCE_DIR}/src/include
${CMAKE_CURRENT_BINARY_DIR}/src/include
+ ${Boost_INCLUDE_DIRS}
)
########################################################################
diff --git a/gruel/src/include/gruel/pmt.h b/gruel/src/include/gruel/pmt.h
index 68b122105a..383a1d44d0 100644
--- a/gruel/src/include/gruel/pmt.h
+++ b/gruel/src/include/gruel/pmt.h
@@ -223,6 +223,12 @@ GRUEL_API bool pmt_is_complex(pmt_t obj);
//! Return a complex number constructed of the given real and imaginary parts.
GRUEL_API pmt_t pmt_make_rectangular(double re, double im);
+//! Return a complex number constructed of the given real and imaginary parts.
+GRUEL_API pmt_t pmt_from_complex(double re, double im);
+
+//! Return a complex number constructed of the given a complex number.
+GRUEL_API pmt_t pmt_from_complex(const std::complex<double> &z);
+
/*!
* If \p z is complex, real or integer, return the closest complex<double>.
* Otherwise, raise the wrong_type exception.
@@ -480,6 +486,20 @@ GRUEL_API const double *pmt_f64vector_elements(pmt_t v, size_t &len); //< len
GRUEL_API const std::complex<float> *pmt_c32vector_elements(pmt_t v, size_t &len); //< len is in elements
GRUEL_API const std::complex<double> *pmt_c64vector_elements(pmt_t v, size_t &len); //< len is in elements
+// len is in elements
+GRUEL_API const std::vector<uint8_t> pmt_u8vector_elements(pmt_t v);
+GRUEL_API const std::vector<int8_t> pmt_s8vector_elements(pmt_t v);
+GRUEL_API const std::vector<uint16_t> pmt_u16vector_elements(pmt_t v);
+GRUEL_API const std::vector<int16_t> pmt_s16vector_elements(pmt_t v);
+GRUEL_API const std::vector<uint32_t> pmt_u32vector_elements(pmt_t v);
+GRUEL_API const std::vector<int32_t> pmt_s32vector_elements(pmt_t v);
+GRUEL_API const std::vector<uint64_t> pmt_u64vector_elements(pmt_t v);
+GRUEL_API const std::vector<int64_t> pmt_s64vector_elements(pmt_t v);
+GRUEL_API const std::vector<float> pmt_f32vector_elements(pmt_t v);
+GRUEL_API const std::vector<double> pmt_f64vector_elements(pmt_t v);
+GRUEL_API const std::vector<std::complex<float> > pmt_c32vector_elements(pmt_t v);
+GRUEL_API const std::vector<std::complex<double> > pmt_c64vector_elements(pmt_t v);
+
// Return non-const pointers to the elements
GRUEL_API void *pmt_uniform_vector_writable_elements(pmt_t v, size_t &len); //< works with any; len is in bytes
diff --git a/gruel/src/lib/CMakeLists.txt b/gruel/src/lib/CMakeLists.txt
index e7713536ce..e33b80d64d 100644
--- a/gruel/src/lib/CMakeLists.txt
+++ b/gruel/src/lib/CMakeLists.txt
@@ -64,8 +64,8 @@ GR_INCLUDE_SUBDIRECTORY(pmt)
########################################################################
# Setup the include and linker paths
########################################################################
-include_directories(${GRUEL_INCLUDE_DIRS})
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+include_directories(${GRUEL_INCLUDE_DIRS})
include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
diff --git a/gruel/src/lib/pmt/pmt.cc b/gruel/src/lib/pmt/pmt.cc
index e5baca98a8..1d1e9ba7c8 100644
--- a/gruel/src/lib/pmt/pmt.cc
+++ b/gruel/src/lib/pmt/pmt.cc
@@ -388,9 +388,19 @@ pmt_is_complex(pmt_t x)
pmt_t
pmt_make_rectangular(double re, double im)
{
+ return pmt_from_complex(re, im);
+}
+
+pmt_t pmt_from_complex(double re, double im)
+{
return pmt_t(new pmt_complex(std::complex<double>(re, im)));
}
+pmt_t pmt_from_complex(const std::complex<double> &z)
+{
+ return pmt_t(new pmt_complex(z));
+}
+
std::complex<double>
pmt_to_complex(pmt_t x)
{
diff --git a/gruel/src/lib/pmt/pmt_serialize.cc b/gruel/src/lib/pmt/pmt_serialize.cc
index 1ee7ca1fe7..24be6b772c 100644
--- a/gruel/src/lib/pmt/pmt_serialize.cc
+++ b/gruel/src/lib/pmt/pmt_serialize.cc
@@ -711,12 +711,12 @@ pmt_deserialize(std::streambuf &sb)
{
pmt_t vec = pmt_make_c32vector(nitems, 0);
for(uint32_t i=0; i<nitems; i++) {
- std::complex<float> c;
+ float re, im;
deserialize_untagged_f64(&f64, sb);
- c.real(static_cast<float>(f64));
+ re = static_cast<float>(f64);
deserialize_untagged_f64(&f64, sb);
- c.imag(static_cast<float>(f64));
- pmt_c32vector_set(vec, i, c);
+ im = static_cast<float>(f64);
+ pmt_c32vector_set(vec, i, std::complex<float>(re, im));
}
return vec;
}
@@ -725,12 +725,12 @@ pmt_deserialize(std::streambuf &sb)
{
pmt_t vec = pmt_make_c64vector(nitems, 0);
for(uint32_t i=0; i<nitems; i++) {
- std::complex<double> c;
+ double re, im;
deserialize_untagged_f64(&f64, sb);
- c.real(f64);
+ re = f64;
deserialize_untagged_f64(&f64, sb);
- c.imag(f64);
- pmt_c64vector_set(vec, i, c);
+ im = f64;
+ pmt_c64vector_set(vec, i, std::complex<double>(re, im));
}
return vec;
}
diff --git a/gruel/src/lib/pmt/qa_pmt_prims.cc b/gruel/src/lib/pmt/qa_pmt_prims.cc
index 1bf5fcfb16..3ae4d70b6d 100644
--- a/gruel/src/lib/pmt/qa_pmt_prims.cc
+++ b/gruel/src/lib/pmt/qa_pmt_prims.cc
@@ -134,12 +134,24 @@ qa_pmt_prims::test_complexes()
{
pmt_t p1 = pmt_make_rectangular(2, -3);
pmt_t m1 = pmt_make_rectangular(-3, 2);
+ pmt_t p2 = pmt_from_complex(2, -3);
+ pmt_t m2 = pmt_from_complex(-3, 2);
+ pmt_t p3 = pmt_from_complex(std::complex<double>(2, -3));
+ pmt_t m3 = pmt_from_complex(std::complex<double>(-3, 2));
CPPUNIT_ASSERT(!pmt_is_complex(PMT_T));
CPPUNIT_ASSERT(pmt_is_complex(p1));
CPPUNIT_ASSERT(pmt_is_complex(m1));
+ CPPUNIT_ASSERT(pmt_is_complex(p2));
+ CPPUNIT_ASSERT(pmt_is_complex(m2));
+ CPPUNIT_ASSERT(pmt_is_complex(p3));
+ CPPUNIT_ASSERT(pmt_is_complex(m3));
CPPUNIT_ASSERT_THROW(pmt_to_complex(PMT_T), pmt_wrong_type);
CPPUNIT_ASSERT_EQUAL(std::complex<double>(2, -3), pmt_to_complex(p1));
CPPUNIT_ASSERT_EQUAL(std::complex<double>(-3, 2), pmt_to_complex(m1));
+ CPPUNIT_ASSERT_EQUAL(std::complex<double>(2, -3), pmt_to_complex(p2));
+ CPPUNIT_ASSERT_EQUAL(std::complex<double>(-3, 2), pmt_to_complex(m2));
+ CPPUNIT_ASSERT_EQUAL(std::complex<double>(2, -3), pmt_to_complex(p3));
+ CPPUNIT_ASSERT_EQUAL(std::complex<double>(-3, 2), pmt_to_complex(m3));
CPPUNIT_ASSERT_EQUAL(std::complex<double>(1.0, 0), pmt_to_complex(pmt_from_long(1)));
CPPUNIT_ASSERT_EQUAL(std::complex<double>(1.0, 0), pmt_to_complex(pmt_from_double(1.0)));
}
diff --git a/gruel/src/lib/pmt/unv_template.cc.t b/gruel/src/lib/pmt/unv_template.cc.t
index f74397421e..1ed505e29a 100644
--- a/gruel/src/lib/pmt/unv_template.cc.t
+++ b/gruel/src/lib/pmt/unv_template.cc.t
@@ -118,6 +118,18 @@ pmt_@TAG@vector_elements(pmt_t vector, size_t &len)
return _@TAG@vector(vector)->elements(len);
}
+const std::vector< @TYPE@ >
+pmt_@TAG@vector_elements(pmt_t vector)
+{
+ if (!vector->is_@TAG@vector())
+ throw pmt_wrong_type("pmt_@TAG@vector_elements", vector);
+ size_t len;
+ const @TYPE@ *array = _@TAG@vector(vector)->elements(len);
+ const std::vector< @TYPE@ > vec(array, array+len);
+ return vec;
+}
+
+
@TYPE@ *
pmt_@TAG@vector_writable_elements(pmt_t vector, size_t &len)
{
diff --git a/gruel/src/swig/CMakeLists.txt b/gruel/src/swig/CMakeLists.txt
index a5e3f93994..aeceaa6059 100644
--- a/gruel/src/swig/CMakeLists.txt
+++ b/gruel/src/swig/CMakeLists.txt
@@ -24,7 +24,11 @@ include(GrPython)
include(GrSwig)
set(GR_SWIG_TARGET_DEPS pmt_generated)
-set(GR_SWIG_INCLUDE_DIRS ${GRUEL_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR} ${Boost_INCLUDE_DIRS})
+set(GR_SWIG_INCLUDE_DIRS
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${GRUEL_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+)
set(GR_SWIG_LIBRARIES gruel)
set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/pmt_swig_doc.i)
diff --git a/gruel/src/swig/pmt_swig.i b/gruel/src/swig/pmt_swig.i
index b658571671..84f48b099a 100644
--- a/gruel/src/swig/pmt_swig.i
+++ b/gruel/src/swig/pmt_swig.i
@@ -212,6 +212,8 @@ bool pmt_is_complex(pmt_t obj);
//! Return a complex number constructed of the given real and imaginary parts.
pmt_t pmt_make_rectangular(double re, double im);
+pmt_t pmt_from_complex(const std::complex<double> &z);
+
/*!
* If \p z is complex, real or integer, return the closest complex<double>.
* Otherwise, raise the wrong_type exception.
@@ -441,37 +443,23 @@ void pmt_c64vector_set(pmt_t v, size_t k, std::complex<double> x);
// Return const pointers to the elements
-const void *pmt_uniform_vector_elements(pmt_t v, size_t &len); //< works with any; len is in bytes
-
-const uint8_t *pmt_u8vector_elements(pmt_t v, size_t &len); //< len is in elements
-const int8_t *pmt_s8vector_elements(pmt_t v, size_t &len); //< len is in elements
-const uint16_t *pmt_u16vector_elements(pmt_t v, size_t &len); //< len is in elements
-const int16_t *pmt_s16vector_elements(pmt_t v, size_t &len); //< len is in elements
-const uint32_t *pmt_u32vector_elements(pmt_t v, size_t &len); //< len is in elements
-const int32_t *pmt_s32vector_elements(pmt_t v, size_t &len); //< len is in elements
-const uint64_t *pmt_u64vector_elements(pmt_t v, size_t &len); //< len is in elements
-const int64_t *pmt_s64vector_elements(pmt_t v, size_t &len); //< len is in elements
-const float *pmt_f32vector_elements(pmt_t v, size_t &len); //< len is in elements
-const double *pmt_f64vector_elements(pmt_t v, size_t &len); //< len is in elements
-const std::complex<float> *pmt_c32vector_elements(pmt_t v, size_t &len); //< len is in elements
-const std::complex<double> *pmt_c64vector_elements(pmt_t v, size_t &len); //< len is in elements
-
-// Return non-const pointers to the elements
-
-void *pmt_uniform_vector_writable_elements(pmt_t v, size_t &len); //< works with any; len is in bytes
-
-uint8_t *pmt_u8vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
-int8_t *pmt_s8vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
-uint16_t *pmt_u16vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
-int16_t *pmt_s16vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
-uint32_t *pmt_u32vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
-int32_t *pmt_s32vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
-uint64_t *pmt_u64vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
-int64_t *pmt_s64vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
-float *pmt_f32vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
-double *pmt_f64vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
-std::complex<float> *pmt_c32vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
-std::complex<double> *pmt_c64vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
+%apply size_t & INOUT { size_t &len };
+
+// works with any; len is in bytes
+// Returns an opaque Python type
+const void *pmt_uniform_vector_elements(pmt_t v, size_t &len);
+
+// Returns a Python tuple
+const std::vector<uint8_t> pmt_u8vector_elements(pmt_t v);
+const std::vector<int8_t> pmt_s8vector_elements(pmt_t v);
+const std::vector<uint16_t> pmt_u16vector_elements(pmt_t v);
+const std::vector<int16_t> pmt_s16vector_elements(pmt_t v);
+const std::vector<uint32_t> pmt_u32vector_elements(pmt_t v);
+const std::vector<int32_t> pmt_s32vector_elements(pmt_t v);
+const std::vector<float> pmt_f32vector_elements(pmt_t v);
+const std::vector<double> pmt_f64vector_elements(pmt_t v);
+const std::vector<std::complex<float> > pmt_c32vector_elements(pmt_t v);
+const std::vector<std::complex<double> > pmt_c64vector_elements(pmt_t v);
/*
* ------------------------------------------------------------------------