summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt11
-rw-r--r--RELEASE-NOTES.md287
-rw-r--r--cmake/Modules/FindSWIG.cmake4
-rw-r--r--cmake/Modules/UseSWIG.cmake4
-rw-r--r--cmake/msvc/config.h21
-rw-r--r--cmake/msvc/inttypes.h301
-rw-r--r--cmake/msvc/stdbool.h45
-rw-r--r--cmake/msvc/stdint.h251
-rw-r--r--cmake/msvc/sys/time.h2
-rw-r--r--docs/RELEASE-NOTES-3.7.10.2.md165
-rw-r--r--docs/RELEASE-NOTES-3.7.11.md137
-rw-r--r--docs/doxygen/Doxyfile.in3
-rw-r--r--docs/doxygen/other/LICENSE.html490
-rw-r--r--docs/doxygen/other/build_guide.dox9
-rw-r--r--docs/doxygen/other/components.dox9
-rw-r--r--docs/doxygen/other/ctrlport.dox9
-rw-r--r--docs/doxygen/other/group_defs.dox9
-rw-r--r--docs/doxygen/other/license.dox15
-rw-r--r--docs/doxygen/other/logger.dox9
-rw-r--r--docs/doxygen/other/main_page.dox22
-rw-r--r--docs/doxygen/other/metadata.dox9
-rw-r--r--docs/doxygen/other/msg_passing.dox9
-rw-r--r--docs/doxygen/other/ofdm.dox9
-rw-r--r--docs/doxygen/other/oot_config.dox9
-rw-r--r--docs/doxygen/other/operating_fg.dox9
-rw-r--r--docs/doxygen/other/packet_txrx.dox9
-rw-r--r--docs/doxygen/other/perf_counters.dox9
-rw-r--r--docs/doxygen/other/pfb_intro.dox9
-rw-r--r--docs/doxygen/other/pmt.dox9
-rw-r--r--docs/doxygen/other/prefs.dox9
-rw-r--r--docs/doxygen/other/python_blocks.dox11
-rw-r--r--docs/doxygen/other/stream_tags.dox9
-rw-r--r--docs/doxygen/other/tagged_stream_blocks.dox9
-rw-r--r--docs/doxygen/other/thread_affinity.dox9
-rw-r--r--docs/doxygen/other/usage.dox9
-rw-r--r--docs/doxygen/other/volk_guide.dox9
-rw-r--r--gnuradio-runtime/CMakeLists.txt10
-rw-r--r--gnuradio-runtime/include/gnuradio/block.h2
-rw-r--r--gnuradio-runtime/include/gnuradio/random.h4
-rw-r--r--gnuradio-runtime/include/gnuradio/unittests.h2
-rw-r--r--gnuradio-runtime/lib/controlport/CMakeLists.txt28
-rw-r--r--gnuradio-runtime/lib/math/random.cc11
-rw-r--r--gnuradio-runtime/python/gnuradio/ctrlport/CMakeLists.txt35
-rw-r--r--gr-analog/grc/analog_probe_avg_mag_sqrd_x.xml17
-rw-r--r--gr-blocks/swig/CMakeLists.txt5
-rw-r--r--gr-blocks/swig/blocks_swig.py.in5
-rw-r--r--gr-blocks/swig/blocks_swig0.i1
-rw-r--r--gr-blocks/swig/blocks_swig1.i46
-rw-r--r--gr-blocks/swig/blocks_swig10.i90
-rw-r--r--gr-blocks/swig/blocks_swig2.i75
-rw-r--r--gr-blocks/swig/blocks_swig3.i81
-rw-r--r--gr-blocks/swig/blocks_swig4.i36
-rw-r--r--gr-blocks/swig/blocks_swig5.i72
-rw-r--r--gr-blocks/swig/blocks_swig6.i107
-rw-r--r--gr-blocks/swig/blocks_swig7.i96
-rw-r--r--gr-blocks/swig/blocks_swig8.i93
-rw-r--r--gr-blocks/swig/blocks_swig9.i93
-rw-r--r--gr-digital/grc/variable_header_format_default.xml13
-rw-r--r--gr-digital/include/gnuradio/digital/header_format_counter.h1
-rw-r--r--gr-digital/include/gnuradio/digital/header_format_default.h10
-rw-r--r--gr-digital/lib/header_format_counter.cc3
-rw-r--r--gr-digital/lib/header_format_default.cc10
-rw-r--r--gr-digital/python/digital/qa_packet_format.py47
-rw-r--r--gr-dtv/lib/catv/catv_trellis_enc_bb_impl.cc4
-rw-r--r--gr-dtv/lib/dvbt2/dvbt2_modulator_bc_impl.cc357
-rw-r--r--gr-fec/include/gnuradio/fec/polar_decoder_common.h6
-rw-r--r--gr-uhd/apps/uhd_app.py73
-rwxr-xr-xgr-uhd/apps/uhd_fft5
-rwxr-xr-xgr-uhd/apps/uhd_rx_cfile5
-rw-r--r--gr-uhd/lib/usrp_source_impl.cc5
-rw-r--r--gr-uhd/lib/usrp_source_impl.h1
-rw-r--r--gr-utils/python/modtool/gr-newmod/cmake/Modules/UseSWIG.cmake4
-rw-r--r--grc/core/Port.py7
-rw-r--r--grc/gui/ActionHandler.py27
-rw-r--r--grc/gui/Actions.py10
-rw-r--r--grc/gui/Bars.py2
76 files changed, 1874 insertions, 1574 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 30ca73711d..eab6d9bd52 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright 2010-2016 Free Software Foundation, Inc.
+# Copyright 2010-2017 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -46,7 +46,7 @@ message(STATUS "Build type set to ${CMAKE_BUILD_TYPE}.")
# Set the version information here
set(VERSION_INFO_MAJOR_VERSION 3)
set(VERSION_INFO_API_COMPAT 7)
-set(VERSION_INFO_MINOR_VERSION 11)
+set(VERSION_INFO_MINOR_VERSION 12)
set(VERSION_INFO_MAINT_VERSION git)
include(GrVersion) #setup version info
@@ -135,6 +135,7 @@ endif(CMAKE_COMPILER_IS_GNUCXX)
if(MSVC)
include_directories(${CMAKE_SOURCE_DIR}/cmake/msvc) #missing headers
+ add_definitions(-D_USE_MATH_DEFINES) #enables math constants on all supported versions of MSVC
add_definitions(-D_WIN32_WINNT=0x0502) #Minimum version: "Windows Server 2003 with SP1, Windows XP with SP2"
add_definitions(-DNOMINMAX) #disables stupidity and enables std::min and std::max
add_definitions( #stop all kinds of compatibility warnings
@@ -286,9 +287,11 @@ find_package(PythonLibs 2)
find_package(SWIG)
if(SWIG_FOUND)
- # Minimum SWIG version required is 1.3.31
+ # Minimum SWIG version required is 2.0.4
+ # Recommended revisit: EOL of Ubuntu 12.04 LTS, bump to 2.0.7
+ # see https://github.com/gnuradio/gnuradio/issues/1222
set(SWIG_VERSION_CHECK FALSE)
- if("${SWIG_VERSION}" VERSION_GREATER "1.3.30")
+ if("${SWIG_VERSION}" VERSION_GREATER "2.0.3")
set(SWIG_VERSION_CHECK TRUE)
endif()
endif(SWIG_FOUND)
diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index 8f17d7e86f..b1b118bb33 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -1,212 +1,137 @@
-ChangeLog v3.7.10
+ChangeLog v3.7.11
=================
-This significant feature release of the 3.7 API series, and
-incorporates all the bug fixes implemented in the 3.7.9.3 maintenance
-release.
+This is a feature release of the 3.7 API series, and incorporates all
+the bug fixes implemented in the 3.7.10.2 maintenance release.
Contributors
------------
The following list of people directly contributed code to this
-release:
-
- * A. Maitland Bottoms <bottoms@debian.org>
- * Andrej Rode <mail@andrejro.de>
- * Andy Sloane <andy@a1k0n.net>
- * Andy Walls <awalls@md.metrocast.net>
- * Chris Kuethe <chris.kuethe+github@gmail.com>
- * Clayton Smith <argilo@gmail.com>
- * Daehyun Yang <daehyun.yang@gmail.com>
- * Derek Kozel <derek.kozel@ettus.com>
- * Federico La Rocca <flarroca@fing.edu.uy>
- * Geof Nieboer <gnieboer@corpcomm.net>
- * Glenn Richardson <glenn.richardson@live.com>
- * Glenn Richardson <glenn.richardson@live.com>
- * Jiří Pinkava <j-pi@seznam.cz>
- * Johannes Schmitz <johannes.schmitz1@gmail.com>
- * Johnathan Corgan <johnathan@corganlabs.com>
- * Kevin McQuiggin <mcquiggi@sfu.ca>
- * Laur Joost <daremion@gmail.com>
- * Marcus Müller <marcus.mueller@ettus.com>
- * Martin Braun <martin.braun@ettus.com>
- * Matt Hostetter <mhostetter@users.noreply.github.com>
- * Michael Dickens <michael.dickens@ettus.com>
- * Nathan West <nathan.west@gnuradio.org>
- * Paul Cercueil <paul.cercueil@analog.com>
- * Paul David <paul.david@ettus.com>
- * Philip Balister <philip@balister.org>
- * Ron Economos <w6rz@comcast.net>
- * Sean Nowlan <sean.nowlan@gtri.gatech.edu>
- * Sebastian Koslowski <koslowski@kit.edu>
- * Seth Hitefield <sdh11@vt.edu>
- * Stefan Wunsch <stefan.wunsch@student.kit.edu>
- * Tim O'Shea <tim.oshea753@gmail.com>
- * Tom Rondeau <tom@trondeau.com>
- * Tracie Renea <tracie.perez@mavs.uta.edu>
-
-## Major Development Areas
-
-This release sees the integration of a number of long-time development
-efforts in various areas of the tree, including GRC, new packet/burst
-communications features for gr-digital, new standards implementations
-for gr-dtv. In addition, it incorporates all of the bug fixes
-released as part of the 3.7.9.3 maintenance release.
-
-
-### GRC
-
-The GNU Radio Companion development environment continues to undergo
-rapid development and refactoring. The tools and workflow have been
-improved in the following ways:
-
- * Variable explorer panel and option to hide variables from canvas
- * Nicer block documentation tool-tip and properties dialog tab
- * Screenshots can have transparent background
- * Darker color for bypassed blocks
- * Select all action
- * Block alignment tools
- * Added bits (unpacked bytes) as a data type
- * Show warning for blocks flagged as deprecated
- * Remove [] around categories in the block library
- * Separate core and OOT block trees via the category of each block
-
-The refactor of GRC continues. This should be mostly feature neutral
-and make it easier for new contributors to come in and make useful
-changes. Part of this is deprecating blks2 and and xmlrpc blocks and
-moving them to components where they would be expected to be found
-rather than the GRC sub-tree.
-
-### Packet Communications
-
-A long-time feature branch developed by Tom Rondeau has been merged
-into the tree, implementing new blocks and methods for packet
-communications. This is intended to replace much of the older,
-overlapping, and Python-only packet-based code that already exists.
-As this code matures, we will be marking this older code as deprecated
-with the plan to remove it in the new 3.8 API.
-
-### DTV
-
-DTV has new transmitters for DVB-S and ITU-T J.83B 64QAM. New support
-for DVB-S2X VL-SNR code rates, modulation, and framing for AMSAT are
-also available.
-
-A significantly improved OFDM symbol synchronizer was implemented for
-the DVB-T receiver (Ron Economos, Federico La Rocca).
-
-## Other Feature Development
-
-### Runtime
-
-Clear tags and reset all item counters when merging connections
-between blocks, which prevents bad values from being propagated on
-lock/unlock operations.
-
-Blocks always set their max_noutput_items before a flowgraph starts if
-it hasn't already been set.
-
-Added some options to gnuradio-config-info that prints information
-about the gnuradio prefs file. The old customized preference file
-reader is replaced with a boost program options object.
-
-### QT GUIs
-
-The QT GUI widgets can now toggle axis labels and the frequency sink
-has a new feature to set the y-axis label. This could be useful for
-changing units on calibrated measurements.
-
-The QT GUI Entry widget has a new message port that emits a message
-containing the new text whenever editing is finished.
-
-QT widgets recently had an optional message port to plot PDUs. This
-release adds a feature to plot the tag metadata contained in the PDU.
-
-A new example shows how to build a C++ only QT based application.
+release and the incorporated maintenance release:
+
+* A. Maitland Bottoms <bottoms@debian.org>
+* Alexandru Csete <oz9aec@gmail.com>
+* Andrej Rode <andrej.rode@ettus.com>
+* Andy Walls <awalls.cx18@gmail.com>
+* Artem Pisarenko <ArtemPisarenko@users.noreply.github.com>
+* Bastian Bloessl <bloessl@ccs-labs.org>
+* Ben Hilburn <ben.hilburn@ettus.com>
+* Bob Iannucci <bob@sv.cmu.edu>
+* Chris Kuethe <chris.kuethe+github@gmail.com>
+* Christopher Chavez <chrischavez@gmx.us>
+* Clayton Smith <argilo@gmail.com>
+* Darek Kawamoto <darek@he360.com>
+* Ethan Trewhitt <ethan.trewhitt@gtri.gatech.edu>
+* Geof Gnieboer <gnieboer@corpcomm.net>
+* Hatsune Aru <email witheld>
+* Jacob Gilbert <mrjacobagilbert@gmail.com>
+* Jiří Pinkava <j-pi@seznam.cz>
+* Johannes Demel <demel@ant.uni-bremen.de>
+* Johannes Schmitz <johannes.schmitz1@gmail.com>
+* Johnathan Corgan <johnathan@corganlabs.com>
+* Jonathan Brucker <jonathan.brucke@gmail.com>
+* Josh Blum <josh@joshknows.com>
+* Kartik Patel <kartikpatel1995@gmail.com>
+* Konstantin Mochalov <incredible.angst@gmail.com>
+* Kyle Unice <kyle.unice@L-3com.com>
+* Marcus Müller <marcus@hostalia.de>
+* Martin Braun <martin.braun@ettus.com>
+* Michael De Nil <michael@morsemicro.com>
+* Michael Dickens <michael.dickens@ettus.com>
+* Nathan West <nathan.west@gnuradio.org>
+* Nicholas Corgan <n.corgan@gmail.com>
+* Nick Foster <bistromath@gmail.com>
+* Nicolas Cuervo <nicolas.cuervo@ettus.com>
+* Paul Cercueil <paul.cercueil@analog.com>
+* Pedro Lobo <pedro.lobo@upm.es>
+* Peter Horvath <ejcspii@gmail.com>
+* Philip Balister <philip@balister.org>
+* Ron Economos <w6rz@comcast.net>
+* Sean Nowlan <nowlans@ieee.org>
+* Sebastian Koslowski <koslowski@kit.edu>
+* Sebastian Müller <senpo@posteo.de>
+* Stephen Larew <stephen@slarew.net>
+* Sylvain Munaut <tnt@246tNt.com>
+* Thomas Habets <habets@google.com>
+* Tim O'Shea <tim.oshea753@gmail.com>
+* Tobias Blomberg <email witheld>
+
+
+Changes
+=======
+
+The GNU Radio project tracks changes via Github pull requests. You
+can get details on each of the below by going to:
+
+https://github.com/gnuradio/gnuradio
+
+Note: Please see the release notes for 3.7.10.2 for details on the bug
+fixes included in this release.
+
+
+### gnuradio-runtime
+
+* \#1077 Support dynamically loaded gnuradio installs (Josh Blum)
+
+
+### gnuradio-companion
+
+* \#1118 Support vector types in embedded Python blocks (Clayton Smith)
-### gr-digital
-
-New QA for tagged stream correlate access code blocks further cement
-how these blocks should be behaving.
-
-16QAM is now available from the GRC constellation object dialog drop
-down menu.
-
-### gr-analog
-
-The frequency modulator now has sensitivity exposed through
-controlport.
-
-New FM pre emphasis and de-emphasis filters. The previous filters were
-effectively all-pass filters. There is a very nice write up on the new
-filters in gr-analog/python/analog/fm_emph.py
-
-A new message port to sig_source is available that can set signal
-frequency with the same convention as gr-uhd usrp_source.
+### gr-audio
-### gr-filter
+* \#1051 Re-implemented defunct Windows audio source (Geof Gnieboer)
+* \#1052 Implemented block in Windows audio sink (Geof Gnieboer)
-Use the max_noutput_items in start() to allocate FFT buffers for the
-PFB decimator rather than always allocating/freeing a buffer in
-work().
### gr-blocks
-Add a run-time accessor and setter for interpolation of repeat blocks.
+* \#896 Added PDU block setters and GRC callbacks (Jacob Gilbert)
+* \#900 Exposed non-vector multiply const to GRC (Ron Economos)
+* \#903 Deprecated old-style message queue blocks (Johnathan Corgan)
+* \#1067 Deprecated blks2 namespace blocks (Johnathan Corgan)
-vector_sink.reset() clears tags now
-Add accessors for the vector_source repeat flag so it's settable
-outside the ctor.
-
-Fix tuntap devices MTU size. Previously MTU size argument was used to
-allocate correct buffer size, but didn't actually change the MTU of
-the underlying device.
-
-The UDP source block can read gr prefs file for the payload buffer
-size or default to the existing value of 50.
-
-Yet another block making use of VOLK: the divide_cc block is now 10x
-faster on some machines.
-
-### gr-uhd
+### gr-digital
-New argument in usrp_source initializer to start streaming on the
-start of a flowgraph which defaults to true (the existing behavior).
+* \#910 Deprecated correlate_and_sync block 3.8 (Johnathan Corgan)
+* \#912 Deprecated modulation blocks for 3.8 (Sebastian Müller)
+* \#1069 Improved build memory usage with swig split (Michael Dickens)
+* \#1097 Deprecated mpsk_receiver_cc block (Johnathan Corgan)
+* \#1099 Deprecated old-style OFDM receiver blocks (Martin Braun)
-Add a clock-source argument to uhd_fft.
+### gr-dtv
-A new message command handler for the usrp_source block will trigger a
-time and rate tag to be emitted.
+* \#875 Added ability to cross-compile gr-dtv (Ron Economos)
+* \#876 Improved ATSC transmitter performance (Ron Economos)
+* \#894 Refactored DVB-T RS decoder to use gr-fec (Ron Economos)
+* \#898 Improved error handling and logging (Ron Economos)
+* \#900 Improved DVB-T performance (Ron Economos)
+* \#907 Updated examples to use QT (Ron Economos)
+* \#1025 Refactor DVB-T2 interleaver (Ron Economos)
-Added support for importing, exporting, and sharing LOs.
-### gr-audio
+### gr-filter
-Refactor audio sink for windows with multiple buffers to prevent
-skipping.
+* \#885 Added set parameter msg port to fractional resampler (Sebastian Müller)
-### modtool
-Add an option to set the copyright field for new files.
+### gr-trellis
-New modules will detect PYBOMBS_PREFIX and install to the defined
-location.
+* \#908 Updated examples to use QT (Martin Braun)
-Add versioning support for OOT modules by default.
-### Builds
+### gr-uhd
-Enable controlport for static builds.
+* \#872 Added relative phase plots to uhd_fft (Martin Braun)
+* \#1032 Replace zero-timeout double-recv() with one recv() (Martin Braun)
+* \#1053 UHD apps may now specify multiple subdevs (Martin Braun)
+* \#1101 Support TwinRX LO sharing parameters (Andrej Rode)
+* \#1139 Use UHD internal normalized gain methods (Martin Braun)
-Enable GR_GIT_COUNT and GR_GIT_HASH environment variables for extended
-versioning number for packagers.
-We explicitly set the C/C++ standards to C++98 and gnu11 rather than
-use the compiler defaults since many compilers are moving to C++11 by
-default. Incidentally this caused minor breakage with a subtle VOLK
-API fix in gr-dtv which was also fixed.
+### gr-utils
-Fixed finding GNU Radio + VOLK in non-standard prefixes when compiling
-OOT modules.
+* \#897 Improved python docstring generation in gr_modtool
diff --git a/cmake/Modules/FindSWIG.cmake b/cmake/Modules/FindSWIG.cmake
index 156bd5ed52..ed1ac93341 100644
--- a/cmake/Modules/FindSWIG.cmake
+++ b/cmake/Modules/FindSWIG.cmake
@@ -86,7 +86,7 @@ if(SWIG_FOUND)
# SWIG was found; make sure the version meets GR's needs
message(STATUS "Found SWIG version ${SWIG_VERSION}.")
- if("${SWIG_VERSION}" VERSION_GREATER "1.3.30")
+ if("${SWIG_VERSION}" VERSION_GREATER "2.0.3")
if(NOT "${SWIG_VERSION}" VERSION_EQUAL "3.0.3" AND
NOT "${SWIG_VERSION}" VERSION_EQUAL "3.0.4")
set(SWIG_VERSION_CHECK TRUE)
@@ -94,7 +94,7 @@ if(SWIG_FOUND)
message(STATUS "SWIG versions 3.0.3 and 3.0.4 fail to work with GNU Radio.")
endif()
else()
- message(STATUS "Minimum SWIG version required is 1.3.31 for GNU Radio.")
+ message(STATUS "Minimum SWIG version required is 2.0.4 for GNU Radio.")
endif()
else()
diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
index d1014943de..b7e3e05dc5 100644
--- a/cmake/Modules/UseSWIG.cmake
+++ b/cmake/Modules/UseSWIG.cmake
@@ -224,9 +224,9 @@ print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
foreach(swig_gen_file ${${outfiles}})
add_custom_command(
OUTPUT ${swig_gen_file}
- COMMAND
+ COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
DEPENDS ${_target}
- COMMENT
+ COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
)
endforeach()
diff --git a/cmake/msvc/config.h b/cmake/msvc/config.h
index d3daed1587..8b12c2a47b 100644
--- a/cmake/msvc/config.h
+++ b/cmake/msvc/config.h
@@ -21,8 +21,8 @@ typedef ptrdiff_t ssize_t;
////////////////////////////////////////////////////////////////////////
// rint functions
////////////////////////////////////////////////////////////////////////
-#include <math.h>
#if _MSC_VER < 1800
+#include <math.h>
static inline long lrint(double x){return (long)(x > 0.0 ? x + 0.5 : x - 0.5);}
static inline long lrintf(float x){return (long)(x > 0.0f ? x + 0.5f : x - 0.5f);}
static inline long long llrint(double x){return (long long)(x > 0.0 ? x + 0.5 : x - 0.5);}
@@ -34,26 +34,11 @@ static inline float rintf(float x){return (x > 0.0f)? floorf(x + 0.5f) : ceilf(x
////////////////////////////////////////////////////////////////////////
// math constants
////////////////////////////////////////////////////////////////////////
-#ifndef INFINITY
+#if _MSC_VER < 1800
+#include <math.h>
#define INFINITY HUGE_VAL
#endif
-#ifndef _MATH_DEFINES_DEFINED
-# define M_E 2.7182818284590452354 /* e */
-# define M_LOG2E 1.4426950408889634074 /* log_2 e */
-# define M_LOG10E 0.43429448190325182765 /* log_10 e */
-# define M_LN2 0.69314718055994530942 /* log_e 2 */
-# define M_LN10 2.30258509299404568402 /* log_e 10 */
-# define M_PI 3.14159265358979323846 /* pi */
-# define M_PI_2 1.57079632679489661923 /* pi/2 */
-# define M_PI_4 0.78539816339744830962 /* pi/4 */
-# define M_1_PI 0.31830988618379067154 /* 1/pi */
-# define M_2_PI 0.63661977236758134308 /* 2/pi */
-# define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */
-# define M_SQRT2 1.41421356237309504880 /* sqrt(2) */
-# define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */
-#endif
-
////////////////////////////////////////////////////////////////////////
// random and srandom
////////////////////////////////////////////////////////////////////////
diff --git a/cmake/msvc/inttypes.h b/cmake/msvc/inttypes.h
deleted file mode 100644
index 0a1b60fc16..0000000000
--- a/cmake/msvc/inttypes.h
+++ /dev/null
@@ -1,301 +0,0 @@
-// ISO C9x compliant inttypes.h for Microsoft Visual Studio
-// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
-//
-// Copyright (c) 2006 Alexander Chemeris
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the following disclaimer.
-//
-// 2. 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.
-//
-// 3. The name of the author may be used to endorse or promote products
-// derived from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef _MSC_VER // [
-#error "Use this header only with Microsoft Visual C++ compilers!"
-#endif // _MSC_VER ]
-
-#ifndef _MSC_INTTYPES_H_ // [
-#define _MSC_INTTYPES_H_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif
-
-#include <stdint.h>
-
-// 7.8 Format conversion of integer types
-
-typedef struct {
- intmax_t quot;
- intmax_t rem;
-} imaxdiv_t;
-
-// 7.8.1 Macros for format specifiers
-
-// The fprintf macros for signed integers are:
-#define PRId8 "d"
-#define PRIi8 "i"
-#define PRIdLEAST8 "d"
-#define PRIiLEAST8 "i"
-#define PRIdFAST8 "d"
-#define PRIiFAST8 "i"
-
-#define PRId16 "hd"
-#define PRIi16 "hi"
-#define PRIdLEAST16 "hd"
-#define PRIiLEAST16 "hi"
-#define PRIdFAST16 "hd"
-#define PRIiFAST16 "hi"
-
-#define PRId32 "I32d"
-#define PRIi32 "I32i"
-#define PRIdLEAST32 "I32d"
-#define PRIiLEAST32 "I32i"
-#define PRIdFAST32 "I32d"
-#define PRIiFAST32 "I32i"
-
-#define PRId64 "I64d"
-#define PRIi64 "I64i"
-#define PRIdLEAST64 "I64d"
-#define PRIiLEAST64 "I64i"
-#define PRIdFAST64 "I64d"
-#define PRIiFAST64 "I64i"
-
-#define PRIdMAX "I64d"
-#define PRIiMAX "I64i"
-
-#define PRIdPTR "Id"
-#define PRIiPTR "Ii"
-
-// The fprintf macros for unsigned integers are:
-#define PRIo8 "o"
-#define PRIu8 "u"
-#define PRIx8 "x"
-#define PRIX8 "X"
-#define PRIoLEAST8 "o"
-#define PRIuLEAST8 "u"
-#define PRIxLEAST8 "x"
-#define PRIXLEAST8 "X"
-#define PRIoFAST8 "o"
-#define PRIuFAST8 "u"
-#define PRIxFAST8 "x"
-#define PRIXFAST8 "X"
-
-#define PRIo16 "ho"
-#define PRIu16 "hu"
-#define PRIx16 "hx"
-#define PRIX16 "hX"
-#define PRIoLEAST16 "ho"
-#define PRIuLEAST16 "hu"
-#define PRIxLEAST16 "hx"
-#define PRIXLEAST16 "hX"
-#define PRIoFAST16 "ho"
-#define PRIuFAST16 "hu"
-#define PRIxFAST16 "hx"
-#define PRIXFAST16 "hX"
-
-#define PRIo32 "I32o"
-#define PRIu32 "I32u"
-#define PRIx32 "I32x"
-#define PRIX32 "I32X"
-#define PRIoLEAST32 "I32o"
-#define PRIuLEAST32 "I32u"
-#define PRIxLEAST32 "I32x"
-#define PRIXLEAST32 "I32X"
-#define PRIoFAST32 "I32o"
-#define PRIuFAST32 "I32u"
-#define PRIxFAST32 "I32x"
-#define PRIXFAST32 "I32X"
-
-#define PRIo64 "I64o"
-#define PRIu64 "I64u"
-#define PRIx64 "I64x"
-#define PRIX64 "I64X"
-#define PRIoLEAST64 "I64o"
-#define PRIuLEAST64 "I64u"
-#define PRIxLEAST64 "I64x"
-#define PRIXLEAST64 "I64X"
-#define PRIoFAST64 "I64o"
-#define PRIuFAST64 "I64u"
-#define PRIxFAST64 "I64x"
-#define PRIXFAST64 "I64X"
-
-#define PRIoMAX "I64o"
-#define PRIuMAX "I64u"
-#define PRIxMAX "I64x"
-#define PRIXMAX "I64X"
-
-#define PRIoPTR "Io"
-#define PRIuPTR "Iu"
-#define PRIxPTR "Ix"
-#define PRIXPTR "IX"
-
-// The fscanf macros for signed integers are:
-#define SCNd8 "d"
-#define SCNi8 "i"
-#define SCNdLEAST8 "d"
-#define SCNiLEAST8 "i"
-#define SCNdFAST8 "d"
-#define SCNiFAST8 "i"
-
-#define SCNd16 "hd"
-#define SCNi16 "hi"
-#define SCNdLEAST16 "hd"
-#define SCNiLEAST16 "hi"
-#define SCNdFAST16 "hd"
-#define SCNiFAST16 "hi"
-
-#define SCNd32 "ld"
-#define SCNi32 "li"
-#define SCNdLEAST32 "ld"
-#define SCNiLEAST32 "li"
-#define SCNdFAST32 "ld"
-#define SCNiFAST32 "li"
-
-#define SCNd64 "I64d"
-#define SCNi64 "I64i"
-#define SCNdLEAST64 "I64d"
-#define SCNiLEAST64 "I64i"
-#define SCNdFAST64 "I64d"
-#define SCNiFAST64 "I64i"
-
-#define SCNdMAX "I64d"
-#define SCNiMAX "I64i"
-
-#ifdef _WIN64 // [
-# define SCNdPTR "I64d"
-# define SCNiPTR "I64i"
-#else // _WIN64 ][
-# define SCNdPTR "ld"
-# define SCNiPTR "li"
-#endif // _WIN64 ]
-
-// The fscanf macros for unsigned integers are:
-#define SCNo8 "o"
-#define SCNu8 "u"
-#define SCNx8 "x"
-#define SCNX8 "X"
-#define SCNoLEAST8 "o"
-#define SCNuLEAST8 "u"
-#define SCNxLEAST8 "x"
-#define SCNXLEAST8 "X"
-#define SCNoFAST8 "o"
-#define SCNuFAST8 "u"
-#define SCNxFAST8 "x"
-#define SCNXFAST8 "X"
-
-#define SCNo16 "ho"
-#define SCNu16 "hu"
-#define SCNx16 "hx"
-#define SCNX16 "hX"
-#define SCNoLEAST16 "ho"
-#define SCNuLEAST16 "hu"
-#define SCNxLEAST16 "hx"
-#define SCNXLEAST16 "hX"
-#define SCNoFAST16 "ho"
-#define SCNuFAST16 "hu"
-#define SCNxFAST16 "hx"
-#define SCNXFAST16 "hX"
-
-#define SCNo32 "lo"
-#define SCNu32 "lu"
-#define SCNx32 "lx"
-#define SCNX32 "lX"
-#define SCNoLEAST32 "lo"
-#define SCNuLEAST32 "lu"
-#define SCNxLEAST32 "lx"
-#define SCNXLEAST32 "lX"
-#define SCNoFAST32 "lo"
-#define SCNuFAST32 "lu"
-#define SCNxFAST32 "lx"
-#define SCNXFAST32 "lX"
-
-#define SCNo64 "I64o"
-#define SCNu64 "I64u"
-#define SCNx64 "I64x"
-#define SCNX64 "I64X"
-#define SCNoLEAST64 "I64o"
-#define SCNuLEAST64 "I64u"
-#define SCNxLEAST64 "I64x"
-#define SCNXLEAST64 "I64X"
-#define SCNoFAST64 "I64o"
-#define SCNuFAST64 "I64u"
-#define SCNxFAST64 "I64x"
-#define SCNXFAST64 "I64X"
-
-#define SCNoMAX "I64o"
-#define SCNuMAX "I64u"
-#define SCNxMAX "I64x"
-#define SCNXMAX "I64X"
-
-#ifdef _WIN64 // [
-# define SCNoPTR "I64o"
-# define SCNuPTR "I64u"
-# define SCNxPTR "I64x"
-# define SCNXPTR "I64X"
-#else // _WIN64 ][
-# define SCNoPTR "lo"
-# define SCNuPTR "lu"
-# define SCNxPTR "lx"
-# define SCNXPTR "lX"
-#endif // _WIN64 ]
-
-// 7.8.2 Functions for greatest-width integer types
-
-// 7.8.2.1 The imaxabs function
-#define imaxabs _abs64
-
-// 7.8.2.2 The imaxdiv function
-
-// This is modified version of div() function from Microsoft's div.c found
-// in %MSVC.NET%\crt\src\div.c
-#ifdef STATIC_IMAXDIV // [
-static
-#else // STATIC_IMAXDIV ][
-_inline
-#endif // STATIC_IMAXDIV ]
-imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom)
-{
- imaxdiv_t result;
-
- result.quot = numer / denom;
- result.rem = numer % denom;
-
- if (numer < 0 && result.rem > 0) {
- // did division wrong; must fix up
- ++result.quot;
- result.rem -= denom;
- }
-
- return result;
-}
-
-// 7.8.2.3 The strtoimax and strtoumax functions
-#define strtoimax _strtoi64
-#define strtoumax _strtoui64
-
-// 7.8.2.4 The wcstoimax and wcstoumax functions
-#define wcstoimax _wcstoi64
-#define wcstoumax _wcstoui64
-
-
-#endif // _MSC_INTTYPES_H_ ]
diff --git a/cmake/msvc/stdbool.h b/cmake/msvc/stdbool.h
deleted file mode 100644
index ca4581d37a..0000000000
--- a/cmake/msvc/stdbool.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2005, 2006 Apple Computer, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef STDBOOL_WIN32_H
-#define STDBOOL_WIN32_H
-
-#ifndef _MSC_VER // [
-#error "Use this header only with Microsoft Visual C++ compilers!"
-#endif // _MSC_VER ]
-
-#ifndef __cplusplus
-
-typedef unsigned char bool;
-
-#define true 1
-#define false 0
-
-#ifndef CASSERT
-#define CASSERT(exp, name) typedef int dummy##name [(exp) ? 1 : -1];
-#endif
-
-CASSERT(sizeof(bool) == 1, bool_is_one_byte)
-CASSERT(true, true_is_true)
-CASSERT(!false, false_is_false)
-
-#endif
-
-#endif
diff --git a/cmake/msvc/stdint.h b/cmake/msvc/stdint.h
deleted file mode 100644
index 108bc89826..0000000000
--- a/cmake/msvc/stdint.h
+++ /dev/null
@@ -1,251 +0,0 @@
-// ISO C9x compliant stdint.h for Microsoft Visual Studio
-// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
-//
-// Copyright (c) 2006-2008 Alexander Chemeris
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the following disclaimer.
-//
-// 2. 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.
-//
-// 3. The name of the author may be used to endorse or promote products
-// derived from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef _MSC_VER // [
-#error "Use this header only with Microsoft Visual C++ compilers!"
-#endif // _MSC_VER ]
-
-#ifndef _MSC_STDINT_H_ // [
-#define _MSC_STDINT_H_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif
-
-#include <limits.h>
-
-// For Visual Studio 6 in C++ mode and for many Visual Studio versions when
-// compiling for ARM we should wrap <wchar.h> include with 'extern "C++" {}'
-// or compiler give many errors like this:
-// error C2733: second C linkage of overloaded function 'wmemchr' not allowed
-#ifdef __cplusplus
-extern "C" {
-#endif
-# include <wchar.h>
-#ifdef __cplusplus
-}
-#endif
-
-// Define _W64 macros to mark types changing their size, like intptr_t.
-#ifndef _W64
-# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
-# define _W64 __w64
-# else
-# define _W64
-# endif
-#endif
-
-
-// 7.18.1 Integer types
-
-// 7.18.1.1 Exact-width integer types
-
-// Visual Studio 6 and Embedded Visual C++ 4 doesn't
-// realize that, e.g. char has the same size as __int8
-// so we give up on __intX for them.
-#if (_MSC_VER < 1300)
- typedef signed char int8_t;
- typedef signed short int16_t;
- typedef signed int int32_t;
- typedef unsigned char uint8_t;
- typedef unsigned short uint16_t;
- typedef unsigned int uint32_t;
-#else
- typedef signed __int8 int8_t;
- typedef signed __int16 int16_t;
- typedef signed __int32 int32_t;
- typedef unsigned __int8 uint8_t;
- typedef unsigned __int16 uint16_t;
- typedef unsigned __int32 uint32_t;
-#endif
-typedef signed __int64 int64_t;
-typedef unsigned __int64 uint64_t;
-
-
-// 7.18.1.2 Minimum-width integer types
-typedef int8_t int_least8_t;
-typedef int16_t int_least16_t;
-typedef int32_t int_least32_t;
-typedef int64_t int_least64_t;
-typedef uint8_t uint_least8_t;
-typedef uint16_t uint_least16_t;
-typedef uint32_t uint_least32_t;
-typedef uint64_t uint_least64_t;
-
-// 7.18.1.3 Fastest minimum-width integer types
-typedef int8_t int_fast8_t;
-typedef int16_t int_fast16_t;
-typedef int32_t int_fast32_t;
-typedef int64_t int_fast64_t;
-typedef uint8_t uint_fast8_t;
-typedef uint16_t uint_fast16_t;
-typedef uint32_t uint_fast32_t;
-typedef uint64_t uint_fast64_t;
-
-// 7.18.1.4 Integer types capable of holding object pointers
-#ifdef _WIN64 // [
- typedef signed __int64 intptr_t;
- typedef unsigned __int64 uintptr_t;
-#else // _WIN64 ][
- typedef _W64 signed int intptr_t;
- typedef _W64 unsigned int uintptr_t;
-#endif // _WIN64 ]
-
-// 7.18.1.5 Greatest-width integer types
-typedef int64_t intmax_t;
-typedef uint64_t uintmax_t;
-
-
-// 7.18.2 Limits of specified-width integer types
-
-#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259
-
-// 7.18.2.1 Limits of exact-width integer types
-#define INT8_MIN ((int8_t)_I8_MIN)
-#define INT8_MAX _I8_MAX
-#define INT16_MIN ((int16_t)_I16_MIN)
-#define INT16_MAX _I16_MAX
-#define INT32_MIN ((int32_t)_I32_MIN)
-#define INT32_MAX _I32_MAX
-#define INT64_MIN ((int64_t)_I64_MIN)
-#define INT64_MAX _I64_MAX
-#define UINT8_MAX _UI8_MAX
-#define UINT16_MAX _UI16_MAX
-#define UINT32_MAX _UI32_MAX
-#define UINT64_MAX _UI64_MAX
-
-// 7.18.2.2 Limits of minimum-width integer types
-#define INT_LEAST8_MIN INT8_MIN
-#define INT_LEAST8_MAX INT8_MAX
-#define INT_LEAST16_MIN INT16_MIN
-#define INT_LEAST16_MAX INT16_MAX
-#define INT_LEAST32_MIN INT32_MIN
-#define INT_LEAST32_MAX INT32_MAX
-#define INT_LEAST64_MIN INT64_MIN
-#define INT_LEAST64_MAX INT64_MAX
-#define UINT_LEAST8_MAX UINT8_MAX
-#define UINT_LEAST16_MAX UINT16_MAX
-#define UINT_LEAST32_MAX UINT32_MAX
-#define UINT_LEAST64_MAX UINT64_MAX
-
-// 7.18.2.3 Limits of fastest minimum-width integer types
-#define INT_FAST8_MIN INT8_MIN
-#define INT_FAST8_MAX INT8_MAX
-#define INT_FAST16_MIN INT16_MIN
-#define INT_FAST16_MAX INT16_MAX
-#define INT_FAST32_MIN INT32_MIN
-#define INT_FAST32_MAX INT32_MAX
-#define INT_FAST64_MIN INT64_MIN
-#define INT_FAST64_MAX INT64_MAX
-#define UINT_FAST8_MAX UINT8_MAX
-#define UINT_FAST16_MAX UINT16_MAX
-#define UINT_FAST32_MAX UINT32_MAX
-#define UINT_FAST64_MAX UINT64_MAX
-
-// 7.18.2.4 Limits of integer types capable of holding object pointers
-#ifdef _WIN64 // [
-# define INTPTR_MIN INT64_MIN
-# define INTPTR_MAX INT64_MAX
-# define UINTPTR_MAX UINT64_MAX
-#else // _WIN64 ][
-# define INTPTR_MIN INT32_MIN
-# define INTPTR_MAX INT32_MAX
-# define UINTPTR_MAX UINT32_MAX
-#endif // _WIN64 ]
-
-// 7.18.2.5 Limits of greatest-width integer types
-#define INTMAX_MIN INT64_MIN
-#define INTMAX_MAX INT64_MAX
-#define UINTMAX_MAX UINT64_MAX
-
-// 7.18.3 Limits of other integer types
-
-#ifdef _WIN64 // [
-# define PTRDIFF_MIN _I64_MIN
-# define PTRDIFF_MAX _I64_MAX
-#else // _WIN64 ][
-# define PTRDIFF_MIN _I32_MIN
-# define PTRDIFF_MAX _I32_MAX
-#endif // _WIN64 ]
-
-#define SIG_ATOMIC_MIN INT_MIN
-#define SIG_ATOMIC_MAX INT_MAX
-
-#ifndef SIZE_MAX // [
-# ifdef _WIN64 // [
-# define SIZE_MAX _UI64_MAX
-# else // _WIN64 ][
-# define SIZE_MAX _UI32_MAX
-# endif // _WIN64 ]
-#endif // SIZE_MAX ]
-
-// WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h>
-#ifndef WCHAR_MIN // [
-# define WCHAR_MIN 0
-#endif // WCHAR_MIN ]
-#ifndef WCHAR_MAX // [
-# define WCHAR_MAX _UI16_MAX
-#endif // WCHAR_MAX ]
-
-#define WINT_MIN 0
-#define WINT_MAX _UI16_MAX
-
-#endif // __STDC_LIMIT_MACROS ]
-
-
-// 7.18.4 Limits of other integer types
-
-#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260
-
-// 7.18.4.1 Macros for minimum-width integer constants
-
-#define INT8_C(val) val##i8
-#define INT16_C(val) val##i16
-#define INT32_C(val) val##i32
-#define INT64_C(val) val##i64
-
-#define UINT8_C(val) val##ui8
-#define UINT16_C(val) val##ui16
-#define UINT32_C(val) val##ui32
-#define UINT64_C(val) val##ui64
-
-// 7.18.4.2 Macros for greatest-width integer constants
-#ifndef INTMAX_C
-#define INTMAX_C INT64_C
-#endif
-#ifndef UINTMAX_C
-#define UINTMAX_C UINT64_C
-#endif
-
-#endif // __STDC_CONSTANT_MACROS ]
-
-
-#endif // _MSC_STDINT_H_ ]
diff --git a/cmake/msvc/sys/time.h b/cmake/msvc/sys/time.h
index 8800ed5cbf..12acc8dc31 100644
--- a/cmake/msvc/sys/time.h
+++ b/cmake/msvc/sys/time.h
@@ -14,6 +14,7 @@
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL
#endif
+#if _MSC_VER < 1900
struct timespec {
time_t tv_sec; /* Seconds since 00:00:00 GMT, */
@@ -25,6 +26,7 @@ long tv_nsec; /* Additional nanoseconds since */
/* tv_sec */
};
+#endif
struct timezone
{
diff --git a/docs/RELEASE-NOTES-3.7.10.2.md b/docs/RELEASE-NOTES-3.7.10.2.md
new file mode 100644
index 0000000000..ff5638df31
--- /dev/null
+++ b/docs/RELEASE-NOTES-3.7.10.2.md
@@ -0,0 +1,165 @@
+ChangeLog v3.7.10.2
+===================
+
+This is the second bug-fix release for v3.7.10.
+
+Contributors
+------------
+
+The following list of people directly contributed code to this
+release:
+
+* Alexandru Csete <oz9aec@gmail.com>
+* A. Maitland Bottoms <bottoms@debian.org>
+* Andrej Rode <andrej.rode@ettus.com>
+* Andy Walls <awalls.cx18@gmail.com>
+* Bastian Bloessl <bloessl@ccs-labs.org>
+* Ben Hilburn <ben.hilburn@ettus.com>
+* Bob Iannucci <bob@sv.cmu.edu>
+* Chris Kuethe <chris.kuethe+github@gmail.com>
+* Clayton Smith <argilo@gmail.com>
+* Darek Kawamoto <darek@he360.com>
+* Ethan Trewhitt <ethan.trewhitt@gtri.gatech.edu>
+* Geof Nieboer <gnieboer@corpcomm.net>
+* Hatsune Aru <email witheld>
+* Jacob Gilbert <mrjacobagilbert@gmail.com>
+* Jiří Pinkava <j-pi@seznam.cz>
+* Johannes Demel <demel@ant.uni-bremen.de>
+* Johnathan Corgan <johnathan@corganlabs.com>
+* Johannes Schmitz <johannes.schmitz1@gmail.com>
+* Josh Blum <josh@joshknows.com>
+* Kartik Patel <kartikpatel1995@gmail.com>
+* Konstantin Mochalov <incredible.angst@gmail.com>
+* Kyle Unice <kyle.unice@L-3com.com>
+* Marcus Müller <marcus@hostalia.de>
+* Martin Braun <martin.braun@ettus.com>
+* Michael De Nil <michael@morsemicro.com>
+* Michael Dickens <michael.dickens@ettus.com>
+* Nick Foster <bistromath@gmail.com>
+* Paul Cercueil <paul.cercueil@analog.com>
+* Pedro Lobo <pedro.lobo@upm.es>
+* Peter Horvath <ejcspii@gmail.com>
+* Philip Balister <philip@balister.org>
+* Ron Economos <w6rz@comcast.net>
+* Sean Nowlan <nowlans@ieee.org>
+* Sebastian Koslowski <koslowski@kit.edu>
+* Sebastian Müller <senpo@posteo.de>
+* Sylvain Munaut <tnt@246tNt.com>
+* Thomas Habets <habets@google.com>
+* Tim O'Shea <tim.oshea753@gmail.com>
+* Tobias Blomberg <email witheld>
+
+
+Bug Fixes
+=========
+
+The GNU Radio project tracks bug fixes via Github pull requests. You
+can get details on each of the below by going to:
+
+https://github.com/gnuradio/gnuradio
+
+
+### gnuradio-runtime
+
+* \#1034 Fixed performance counter clock option (Pedro Lobo)
+* \#1041 Connect message ports before unlock (Bastian Bloessl)
+* \#1065 Fixed initialization order of ctrlport static variables (Kyle Unice)
+* \#1071 Fixed cmake lib/lib64 issues (Philip Balister)
+* \#1075 Fixed pmt thread safety issue (Darek Kawamoto)
+* \#1119 Start RPC on message port only blocks (Jacob Gilbert)
+* \#1121 Fixed tag_t default copy constructor / operator= bug (Darek Kawamoto)
+* \#1125 Fixed pmt_t threading issue with memory fence (Darek Kawamoto)
+* \#1152 Fixed numpy warning in pmt code (Bob Iannucci)
+* \#1160 Fixed swig operator= warning messages (Darek Kawamoto)
+
+
+### gnuradio-companion
+
+* \#901 Backwards compatibility fix for pygtk 2.16 (Michael De Nil)
+* \#1060 Fixed for Python 2.6.6 compatibility (Ben Hilburn)
+* \#1063 Fixed IndexError when consuming \b (Sebastian Koslowski)
+* \#1074 Fixed display scaling (Sebastian Koslowski)
+* \#1095 Fixed new flowgraph generation mode (Sebastian Koslowski)
+* \#1096 Fixed column widths for proper scaling (Sebastian Müller)
+* \#1135 Fixed trailing whitespace output (Clayton Smith)
+* \#1168 Fixed virtual connection with multiple upstream (Sebastian Koslowski)
+* \#1200 Fixed cheetah template evaluation 'optional' tag (Sean Nowls)
+
+
+### docs
+
+* \#1114 Fixed obsolete doxygen tags (A. Maitland Bottoms)
+
+
+### gr-analog
+
+* \#1201 Added missing probe_avg_mag_sqrd_cf block to GRC (Sean Nowls)
+
+
+### gr-blocks
+
+* \#1161 Fixed minor inconsistencies in block XML (Sebastian Koslowski)
+* \#1191 Fixed typo on xor block XML (Hatsune Aru)
+* \#1194 Fixed peak detector fix initial value (Bastian Bloessl)
+
+
+### gr-digital
+
+* \#1084 Fixed msk_timing_recovery out-of-bounds (warning) (Nick Foster)
+* \#1149 Clarify documentation of clock_recovery_mm_xx (Thomas Habets)
+
+
+### gr-dtv
+
+* \#902 Fixed incorrect assert and set_relative_rate() (Ron Economos)
+* \#1066 Fixed GSL link problem with gr-dtv and gr-atsc (Peter Horvath)
+* \#1177 Add missing find_package for GSL (Geof Gnieboer)
+
+
+### gr-fcd
+
+* \#1030 Updated hidapi to latest HEAD (Alexandru Csete)
+
+
+### gr-fec
+
+* \#1049 Throw exception if K and R are not supported (Clayton Smith)
+* \#1174 Fixed missing header file installation (Sean Nowls)
+
+
+### gr-filter
+
+* \#1070 Fix pfb_arb_resampler producing too many samples (Sylvain Munaut)
+
+
+### gr-qtgui
+
+* \#899 Fixed dark.qss data lines forced-on (Tim O'Shea)
+* \#918 Fixed y-axis unit display in Frequency Sink (Tobias Blomberg)
+* \#920 Fixed axis labels checkbox in Frequency Sink (Tobias Blomberg)
+* \#1023 Fixed control panel FFT slider in Frequency Sink (Tobias Blomberg)
+* \#1028 Fixed cmake for C++ example (Bastian Bloessl)
+* \#1036 Corrected whitespace issues (Sebastian Koslowski)
+* \#1037 Fixed tag color to obey style sheet (Johannes Demel)
+* \#1158 Fixed SIGSEGV for tag trigger with constellation sink (Andy Walls)
+* \#1187 Fixed time sink complex message configuration (Kartik Patel)
+* \#1192 Fixed redundant time sink configuration options (Kartik Patel)
+
+
+### gr-uhd
+
+* \#914 Fixed order of include dirs (Martin Braun)
+* \#1133 Fixed channel number resolution (Andrej Rode)
+* \#1137 Disable boost thread interrupts during send() and recv() (Andrej Rode)
+* \#1142 Fixed documentation for pmt usage (Marcus Müller)
+
+
+### Platform-specific changes
+
+* \#886 Fixed numerous Windows/MSVC portability issues (Josh Blum)
+* \#1062 Set default filepath to documents dir for windows (Geof Gnieboer)
+* \#1085 Fixed mingw-w64 portability issues (Paul Cercueil)
+* \#1140 Added boost atomic and chrono linkage for Windows (Josh Blum)
+* \#1146 Use -undefined dynamic_lookup linkage for (swig) on MacOS (Konstantin Mochalov)
+* \#1172 Fixed file monitor on windows (Sebastian Koslowski)
+* \#1179 MSVC build updates (Josh Blum)
diff --git a/docs/RELEASE-NOTES-3.7.11.md b/docs/RELEASE-NOTES-3.7.11.md
new file mode 100644
index 0000000000..b1b118bb33
--- /dev/null
+++ b/docs/RELEASE-NOTES-3.7.11.md
@@ -0,0 +1,137 @@
+ChangeLog v3.7.11
+=================
+
+This is a feature release of the 3.7 API series, and incorporates all
+the bug fixes implemented in the 3.7.10.2 maintenance release.
+
+
+Contributors
+------------
+
+The following list of people directly contributed code to this
+release and the incorporated maintenance release:
+
+* A. Maitland Bottoms <bottoms@debian.org>
+* Alexandru Csete <oz9aec@gmail.com>
+* Andrej Rode <andrej.rode@ettus.com>
+* Andy Walls <awalls.cx18@gmail.com>
+* Artem Pisarenko <ArtemPisarenko@users.noreply.github.com>
+* Bastian Bloessl <bloessl@ccs-labs.org>
+* Ben Hilburn <ben.hilburn@ettus.com>
+* Bob Iannucci <bob@sv.cmu.edu>
+* Chris Kuethe <chris.kuethe+github@gmail.com>
+* Christopher Chavez <chrischavez@gmx.us>
+* Clayton Smith <argilo@gmail.com>
+* Darek Kawamoto <darek@he360.com>
+* Ethan Trewhitt <ethan.trewhitt@gtri.gatech.edu>
+* Geof Gnieboer <gnieboer@corpcomm.net>
+* Hatsune Aru <email witheld>
+* Jacob Gilbert <mrjacobagilbert@gmail.com>
+* Jiří Pinkava <j-pi@seznam.cz>
+* Johannes Demel <demel@ant.uni-bremen.de>
+* Johannes Schmitz <johannes.schmitz1@gmail.com>
+* Johnathan Corgan <johnathan@corganlabs.com>
+* Jonathan Brucker <jonathan.brucke@gmail.com>
+* Josh Blum <josh@joshknows.com>
+* Kartik Patel <kartikpatel1995@gmail.com>
+* Konstantin Mochalov <incredible.angst@gmail.com>
+* Kyle Unice <kyle.unice@L-3com.com>
+* Marcus Müller <marcus@hostalia.de>
+* Martin Braun <martin.braun@ettus.com>
+* Michael De Nil <michael@morsemicro.com>
+* Michael Dickens <michael.dickens@ettus.com>
+* Nathan West <nathan.west@gnuradio.org>
+* Nicholas Corgan <n.corgan@gmail.com>
+* Nick Foster <bistromath@gmail.com>
+* Nicolas Cuervo <nicolas.cuervo@ettus.com>
+* Paul Cercueil <paul.cercueil@analog.com>
+* Pedro Lobo <pedro.lobo@upm.es>
+* Peter Horvath <ejcspii@gmail.com>
+* Philip Balister <philip@balister.org>
+* Ron Economos <w6rz@comcast.net>
+* Sean Nowlan <nowlans@ieee.org>
+* Sebastian Koslowski <koslowski@kit.edu>
+* Sebastian Müller <senpo@posteo.de>
+* Stephen Larew <stephen@slarew.net>
+* Sylvain Munaut <tnt@246tNt.com>
+* Thomas Habets <habets@google.com>
+* Tim O'Shea <tim.oshea753@gmail.com>
+* Tobias Blomberg <email witheld>
+
+
+Changes
+=======
+
+The GNU Radio project tracks changes via Github pull requests. You
+can get details on each of the below by going to:
+
+https://github.com/gnuradio/gnuradio
+
+Note: Please see the release notes for 3.7.10.2 for details on the bug
+fixes included in this release.
+
+
+### gnuradio-runtime
+
+* \#1077 Support dynamically loaded gnuradio installs (Josh Blum)
+
+
+### gnuradio-companion
+
+* \#1118 Support vector types in embedded Python blocks (Clayton Smith)
+
+### gr-audio
+
+* \#1051 Re-implemented defunct Windows audio source (Geof Gnieboer)
+* \#1052 Implemented block in Windows audio sink (Geof Gnieboer)
+
+
+### gr-blocks
+
+* \#896 Added PDU block setters and GRC callbacks (Jacob Gilbert)
+* \#900 Exposed non-vector multiply const to GRC (Ron Economos)
+* \#903 Deprecated old-style message queue blocks (Johnathan Corgan)
+* \#1067 Deprecated blks2 namespace blocks (Johnathan Corgan)
+
+
+### gr-digital
+
+* \#910 Deprecated correlate_and_sync block 3.8 (Johnathan Corgan)
+* \#912 Deprecated modulation blocks for 3.8 (Sebastian Müller)
+* \#1069 Improved build memory usage with swig split (Michael Dickens)
+* \#1097 Deprecated mpsk_receiver_cc block (Johnathan Corgan)
+* \#1099 Deprecated old-style OFDM receiver blocks (Martin Braun)
+
+### gr-dtv
+
+* \#875 Added ability to cross-compile gr-dtv (Ron Economos)
+* \#876 Improved ATSC transmitter performance (Ron Economos)
+* \#894 Refactored DVB-T RS decoder to use gr-fec (Ron Economos)
+* \#898 Improved error handling and logging (Ron Economos)
+* \#900 Improved DVB-T performance (Ron Economos)
+* \#907 Updated examples to use QT (Ron Economos)
+* \#1025 Refactor DVB-T2 interleaver (Ron Economos)
+
+
+### gr-filter
+
+* \#885 Added set parameter msg port to fractional resampler (Sebastian Müller)
+
+
+### gr-trellis
+
+* \#908 Updated examples to use QT (Martin Braun)
+
+
+### gr-uhd
+
+* \#872 Added relative phase plots to uhd_fft (Martin Braun)
+* \#1032 Replace zero-timeout double-recv() with one recv() (Martin Braun)
+* \#1053 UHD apps may now specify multiple subdevs (Martin Braun)
+* \#1101 Support TwinRX LO sharing parameters (Andrej Rode)
+* \#1139 Use UHD internal normalized gain methods (Martin Braun)
+
+
+### gr-utils
+
+* \#897 Improved python docstring generation in gr_modtool
diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
index 5782513d27..8d06249abb 100644
--- a/docs/doxygen/Doxyfile.in
+++ b/docs/doxygen/Doxyfile.in
@@ -704,7 +704,8 @@ WARN_LOGFILE =
# with spaces.
INPUT = @top_srcdir@ \
- @top_builddir@
+ @top_builddir@ \
+ @top_srcdir@/docs/doxygen/other/license.dox
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
diff --git a/docs/doxygen/other/LICENSE.html b/docs/doxygen/other/LICENSE.html
new file mode 100644
index 0000000000..a279a5f120
--- /dev/null
+++ b/docs/doxygen/other/LICENSE.html
@@ -0,0 +1,490 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>GNU Free Documentation License v1.3 - GNU Project - Free Software Foundation (FSF)</title>
+ <link rel="alternate" type="application/rdf+xml"
+ href="http://www.gnu.org/licenses/fdl-1.3.rdf" />
+</head>
+<body>
+
+<h3 style="text-align: center;">GNU Free Documentation License</h3>
+
+<p style="text-align: center;">Version 1.3, 3 November 2008</p>
+
+<p> Copyright &copy; 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ &lt;<a href="http://fsf.org/">http://fsf.org/</a>&gt;
+ </p><p>Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.</p>
+
+<h4><a name="section0"></a>0. PREAMBLE</h4>
+
+<p>The purpose of this License is to make a manual, textbook, or other
+functional and useful document &quot;free&quot; in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.</p>
+
+<p>This License is a kind of &quot;copyleft&quot;, which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.</p>
+
+<p>We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.</p>
+
+<h4><a name="section1"></a>1. APPLICABILITY AND DEFINITIONS</h4>
+
+<p>This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The &quot;Document&quot;, below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as &quot;you&quot;. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.</p>
+
+<p>A &quot;Modified Version&quot; of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.</p>
+
+<p>A &quot;Secondary Section&quot; is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject. (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.</p>
+
+<p>The &quot;Invariant Sections&quot; are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.</p>
+
+<p>The &quot;Cover Texts&quot; are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.</p>
+
+<p>A &quot;Transparent&quot; copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not &quot;Transparent&quot; is called &quot;Opaque&quot;.</p>
+
+<p>Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML, PostScript or PDF designed for human modification. Examples of
+transparent image formats include PNG, XCF and JPG. Opaque formats
+include proprietary formats that can be read and edited only by
+proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML, PostScript or PDF produced by some word
+processors for output purposes only.</p>
+
+<p>The &quot;Title Page&quot; means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, &quot;Title Page&quot; means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.</p>
+
+<p>The &quot;publisher&quot; means any person or entity that distributes copies of
+the Document to the public.</p>
+
+<p>A section &quot;Entitled XYZ&quot; means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as &quot;Acknowledgements&quot;,
+&quot;Dedications&quot;, &quot;Endorsements&quot;, or &quot;History&quot;.) To &quot;Preserve the Title&quot;
+of such a section when you modify the Document means that it remains a
+section &quot;Entitled XYZ&quot; according to this definition.</p>
+
+<p>The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.</p>
+
+<h4><a name="section2"></a>2. VERBATIM COPYING</h4>
+
+<p>You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no
+other conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.</p>
+
+<p>You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.</p>
+
+<h4><a name="section3"></a>3. COPYING IN QUANTITY</h4>
+
+<p>If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.</p>
+
+<p>If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.</p>
+
+<p>If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.</p>
+
+<p>It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to
+give them a chance to provide you with an updated version of the
+Document.</p>
+
+<h4><a name="section4"></a>4. MODIFICATIONS</h4>
+
+<p>You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:</p>
+
+<ul>
+
+
+<li>A. Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+</li>
+
+<li>B. List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has fewer than five),
+ unless they release you from this requirement.
+</li>
+
+<li>C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+</li>
+
+<li>D. Preserve all the copyright notices of the Document.
+</li>
+
+<li>E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+</li>
+
+<li>F. Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+</li>
+
+<li>G. Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+</li>
+
+<li>H. Include an unaltered copy of this License.
+</li>
+
+<li>I. Preserve the section Entitled &quot;History&quot;, Preserve its Title, and add
+ to it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section Entitled &quot;History&quot; in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+</li>
+
+<li>J. Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the &quot;History&quot; section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+</li>
+
+<li>K. For any section Entitled &quot;Acknowledgements&quot; or &quot;Dedications&quot;,
+ Preserve the Title of the section, and preserve in the section all
+ the substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+</li>
+
+<li>L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+</li>
+
+<li>M. Delete any section Entitled &quot;Endorsements&quot;. Such a section
+ may not be included in the Modified Version.
+</li>
+
+<li>N. Do not retitle any existing section to be Entitled &quot;Endorsements&quot;
+ or to conflict in title with any Invariant Section.
+</li>
+
+<li>O. Preserve any Warranty Disclaimers.</li>
+
+</ul>
+
+<p>If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.</p>
+
+<p>You may add a section Entitled &quot;Endorsements&quot;, provided it contains
+nothing but endorsements of your Modified Version by various
+parties&mdash;for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.</p>
+
+<p>You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.</p>
+
+<p>The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.</p>
+
+<h4><a name="section5"></a>5. COMBINING DOCUMENTS</h4>
+
+<p>You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.</p>
+
+<p>The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.</p>
+
+<p>In the combination, you must combine any sections Entitled &quot;History&quot;
+in the various original documents, forming one section Entitled
+&quot;History&quot;; likewise combine any sections Entitled &quot;Acknowledgements&quot;,
+and any sections Entitled &quot;Dedications&quot;. You must delete all sections
+Entitled &quot;Endorsements&quot;.</p>
+
+<h4><a name="section6"></a>6. COLLECTIONS OF DOCUMENTS</h4>
+
+<p>You may make a collection consisting of the Document and other
+documents released under this License, and replace the individual
+copies of this License in the various documents with a single copy
+that is included in the collection, provided that you follow the rules
+of this License for verbatim copying of each of the documents in all
+other respects.</p>
+
+<p>You may extract a single document from such a collection, and
+distribute it individually under this License, provided you insert a
+copy of this License into the extracted document, and follow this
+License in all other respects regarding verbatim copying of that
+document.</p>
+
+<h4><a name="section7"></a>7. AGGREGATION WITH INDEPENDENT WORKS</h4>
+
+<p>A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an &quot;aggregate&quot; if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.</p>
+
+<p>If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.</p>
+
+<h4><a name="section8"></a>8. TRANSLATION</h4>
+
+<p>Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.</p>
+
+<p>If a section in the Document is Entitled &quot;Acknowledgements&quot;,
+&quot;Dedications&quot;, or &quot;History&quot;, the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.</p>
+
+<h4><a name="section9"></a>9. TERMINATION</h4>
+
+<p>You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.</p>
+
+<p>However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.</p>
+
+<p>Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.</p>
+
+<p>Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.</p>
+
+<h4><a name="section10"></a>10. FUTURE REVISIONS OF THIS LICENSE</h4>
+
+<p>The Free Software Foundation may publish new, revised versions of the
+GNU Free Documentation License from time to time. Such new versions
+will be similar in spirit to the present version, but may differ in
+detail to address new problems or concerns. See
+<a href="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</a>.</p>
+
+<p>Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License &quot;or any later version&quot; applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation. If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.</p>
+
+<h4><a name="section11"></a>11. RELICENSING</h4>
+
+<p>&quot;Massive Multiauthor Collaboration Site&quot; (or &quot;MMC Site&quot;) means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works. A
+public wiki that anybody can edit is an example of such a server. A
+&quot;Massive Multiauthor Collaboration&quot; (or &quot;MMC&quot;) contained in the site
+means any set of copyrightable works thus published on the MMC site.</p>
+
+<p>&quot;CC-BY-SA&quot; means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.</p>
+
+<p>&quot;Incorporate&quot; means to publish or republish a Document, in whole or in
+part, as part of another Document.</p>
+
+<p>An MMC is &quot;eligible for relicensing&quot; if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole or
+in part into the MMC, (1) had no cover texts or invariant sections, and
+(2) were thus incorporated prior to November 1, 2008.</p>
+
+<p>The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.</p>
+
+<h3><a name="addendum"></a>ADDENDUM: How to use this License for your documents</h3>
+
+<p>To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:</p>
+
+<pre> Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled &quot;GNU
+ Free Documentation License&quot;.
+</pre>
+
+<p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the &quot;with &hellip; Texts.&quot; line with this:</p>
+
+<pre> with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+</pre>
+
+<p>If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.</p>
+
+<p>If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+</p>
+
+</body></html>
diff --git a/docs/doxygen/other/build_guide.dox b/docs/doxygen/other/build_guide.dox
index 8fc3f911fb..f3bea608a4 100644
--- a/docs/doxygen/other/build_guide.dox
+++ b/docs/doxygen/other/build_guide.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page build_guide Build Instructions and Information
\section dependencies Dependencies
diff --git a/docs/doxygen/other/components.dox b/docs/doxygen/other/components.dox
index 564085fc80..b1f88d20b6 100644
--- a/docs/doxygen/other/components.dox
+++ b/docs/doxygen/other/components.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page page_components Components
\section components_blocks GNU Radio Blocks
diff --git a/docs/doxygen/other/ctrlport.dox b/docs/doxygen/other/ctrlport.dox
index fc0ac70320..d5ba8fdefc 100644
--- a/docs/doxygen/other/ctrlport.dox
+++ b/docs/doxygen/other/ctrlport.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page page_ctrlport ControlPort
\section ctrlport_introduction Introduction
diff --git a/docs/doxygen/other/group_defs.dox b/docs/doxygen/other/group_defs.dox
index 428ac9a8f3..8edc8ab5ef 100644
--- a/docs/doxygen/other/group_defs.dox
+++ b/docs/doxygen/other/group_defs.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*!
* \defgroup block GNU Radio C++ Signal Processing Blocks
* \brief All C++ blocks that can be used in GR graphs are listed here or in
diff --git a/docs/doxygen/other/license.dox b/docs/doxygen/other/license.dox
new file mode 100644
index 0000000000..d1c511a614
--- /dev/null
+++ b/docs/doxygen/other/license.dox
@@ -0,0 +1,15 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
+/*! \page License
+
+\htmlinclude ./LICENSE.html
+
+*/
+
diff --git a/docs/doxygen/other/logger.dox b/docs/doxygen/other/logger.dox
index f057e59d9b..ae6a744d00 100644
--- a/docs/doxygen/other/logger.dox
+++ b/docs/doxygen/other/logger.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page page_logger Logging
\section logging Logging
diff --git a/docs/doxygen/other/main_page.dox b/docs/doxygen/other/main_page.dox
index 67487ddfd6..fede4524fd 100644
--- a/docs/doxygen/other/main_page.dox
+++ b/docs/doxygen/other/main_page.dox
@@ -1,15 +1,24 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \mainpage
\image html gnuradio-logo.svg
-Welcome to GNU Radio!
+<H1> Welcome to GNU Radio! </H1>
For details about GNU Radio and using it, please see the
<a href="http://gnuradio.org" target="_blank"><b>main project page</b></a>.
Other information about the project and discussion about GNU Radio,
software radio, and communication theory in general can be found at
-the <a href="http://www.trondeau.com" target="_blank"><b>GNU Radio blog</b></a>.
+the <a href="http://www.gnuradio.org/blog" target="_blank"><b>GNU Radio blog</b></a>.
This manual is split into two parts: A usage manual and a reference. The usage manual
deals with concepts of GNU Radio, introductions, how to build GNU Radio etc.
@@ -22,4 +31,13 @@ A search function is also available at the top right.
\li \subpage page_usage "Part I - GNU Radio Usage"
\li \subpage page_components "Part II - Reference"
+<H3> Documentation License </H3>
+
+The Free Software Foundation gives permission to use and distribute
+the program source documentation strings, after processing them
+through Doxygen or some comparable program, under the GNU Free
+Documentation License, version 1.3 or later. However, we do not grant
+such permission for the program code in our release (aside from the
+documentation strings).
+
*/
diff --git a/docs/doxygen/other/metadata.dox b/docs/doxygen/other/metadata.dox
index 4958e08aaa..d64f404e96 100644
--- a/docs/doxygen/other/metadata.dox
+++ b/docs/doxygen/other/metadata.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page page_metadata Metadata Information
\section metadata_introduction Introduction
diff --git a/docs/doxygen/other/msg_passing.dox b/docs/doxygen/other/msg_passing.dox
index 494ca03921..827ad4ee62 100644
--- a/docs/doxygen/other/msg_passing.dox
+++ b/docs/doxygen/other/msg_passing.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page page_msg_passing Message Passing
\section msg_passing_introduction Introduction
diff --git a/docs/doxygen/other/ofdm.dox b/docs/doxygen/other/ofdm.dox
index 9a3a18fab8..77d80a7441 100644
--- a/docs/doxygen/other/ofdm.dox
+++ b/docs/doxygen/other/ofdm.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page page_ofdm OFDM
\section ofdm_introduction Introduction
diff --git a/docs/doxygen/other/oot_config.dox b/docs/doxygen/other/oot_config.dox
index bb441c5060..d07c7a2808 100644
--- a/docs/doxygen/other/oot_config.dox
+++ b/docs/doxygen/other/oot_config.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page page_oot_config Out-of-Tree Configuration
New as of 3.6.5.
diff --git a/docs/doxygen/other/operating_fg.dox b/docs/doxygen/other/operating_fg.dox
index b075ca648a..c2c66cccd9 100644
--- a/docs/doxygen/other/operating_fg.dox
+++ b/docs/doxygen/other/operating_fg.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page page_operating_fg Handling flow graphs
\section flowgraph Operating a Flowgraph
diff --git a/docs/doxygen/other/packet_txrx.dox b/docs/doxygen/other/packet_txrx.dox
index 2a8aeae51e..c481e7e207 100644
--- a/docs/doxygen/other/packet_txrx.dox
+++ b/docs/doxygen/other/packet_txrx.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page page_packet_data Packet Data Transmission
\section packet_data_introduction Introduction
diff --git a/docs/doxygen/other/perf_counters.dox b/docs/doxygen/other/perf_counters.dox
index 9bca38268a..7562b11298 100644
--- a/docs/doxygen/other/perf_counters.dox
+++ b/docs/doxygen/other/perf_counters.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page page_perf_counters Performance Counters
\section pc_introduction Introduction
diff --git a/docs/doxygen/other/pfb_intro.dox b/docs/doxygen/other/pfb_intro.dox
index 43bea77777..83313e9568 100644
--- a/docs/doxygen/other/pfb_intro.dox
+++ b/docs/doxygen/other/pfb_intro.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page page_pfb Polyphase Filterbanks
\section pfb_introduction Introduction
diff --git a/docs/doxygen/other/pmt.dox b/docs/doxygen/other/pmt.dox
index 6805b27a8a..76f598809d 100644
--- a/docs/doxygen/other/pmt.dox
+++ b/docs/doxygen/other/pmt.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page page_pmt Polymorphic Types
\section pmt_introduction Introduction
diff --git a/docs/doxygen/other/prefs.dox b/docs/doxygen/other/prefs.dox
index 46f68c447e..d8c2782b1d 100644
--- a/docs/doxygen/other/prefs.dox
+++ b/docs/doxygen/other/prefs.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page page_prefs Configuration files
\section prefs Configuration / Preference Files
diff --git a/docs/doxygen/other/python_blocks.dox b/docs/doxygen/other/python_blocks.dox
index 49273cdcd8..2381b0cad0 100644
--- a/docs/doxygen/other/python_blocks.dox
+++ b/docs/doxygen/other/python_blocks.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page page_python_blocks Python Blocks
How to create blocks in Python
@@ -151,4 +160,4 @@ class msg_block(gr.basic_block):
pmt.intern('message received!'))
\endcode
-*/ \ No newline at end of file
+*/
diff --git a/docs/doxygen/other/stream_tags.dox b/docs/doxygen/other/stream_tags.dox
index 2af431b526..8edc598e96 100644
--- a/docs/doxygen/other/stream_tags.dox
+++ b/docs/doxygen/other/stream_tags.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page page_stream_tags Stream Tags
\section stream_tags_introduction Introduction
diff --git a/docs/doxygen/other/tagged_stream_blocks.dox b/docs/doxygen/other/tagged_stream_blocks.dox
index 4e75b29c6b..1a10483323 100644
--- a/docs/doxygen/other/tagged_stream_blocks.dox
+++ b/docs/doxygen/other/tagged_stream_blocks.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page page_tagged_stream_blocks Tagged Stream Blocks
\section tsb_introduction Introduction
diff --git a/docs/doxygen/other/thread_affinity.dox b/docs/doxygen/other/thread_affinity.dox
index edac813866..405477b8d3 100644
--- a/docs/doxygen/other/thread_affinity.dox
+++ b/docs/doxygen/other/thread_affinity.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page page_affinity Block Thread Affinity and Priority
\section affinity Block Thread Affinity
diff --git a/docs/doxygen/other/usage.dox b/docs/doxygen/other/usage.dox
index 717f14e610..2df378c670 100644
--- a/docs/doxygen/other/usage.dox
+++ b/docs/doxygen/other/usage.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page page_usage Usage Manual
Note: Once built, check out <a href="http://gnuradio.org" target="_blank">gnuradio.org</a> for
diff --git a/docs/doxygen/other/volk_guide.dox b/docs/doxygen/other/volk_guide.dox
index a6a24457a6..e5a55c1719 100644
--- a/docs/doxygen/other/volk_guide.dox
+++ b/docs/doxygen/other/volk_guide.dox
@@ -1,3 +1,12 @@
+# Copyright (C) 2017 Free Software Foundation, Inc.
+#
+# Permission is granted to copy, distribute and/or modify this document
+# under the terms of the GNU Free Documentation License, Version 1.3
+# or any later version published by the Free Software Foundation;
+# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+# A copy of the license is included in the section entitled "GNU
+# Free Documentation License".
+
/*! \page volk_guide Instructions for using VOLK in GNU Radio
Note: Many blocks have already been converted to use VOLK in their calls, so
diff --git a/gnuradio-runtime/CMakeLists.txt b/gnuradio-runtime/CMakeLists.txt
index 7660642509..17fc61e393 100644
--- a/gnuradio-runtime/CMakeLists.txt
+++ b/gnuradio-runtime/CMakeLists.txt
@@ -62,16 +62,6 @@ GR_SET_GLOBAL(GNURADIO_RUNTIME_PYTHONPATH ${GNURADIO_RUNTIME_PYTHONPATH})
FIND_PACKAGE(SWIG)
-if(SWIG_FOUND)
- set(SWIG_VERSION_CHECK FALSE)
- if("${SWIG_VERSION}" VERSION_GREATER "2.0.0")
- set(SWIG_VERSION_CHECK TRUE)
- else("${SWIG_VERSION}" VERSION_GREATER "2.0.0")
- message(STATUS "")
- message(STATUS "Ctrlport requires SWIG version >= 2.0")
- endif()
-endif(SWIG_FOUND)
-
GR_REGISTER_COMPONENT("gr-ctrlport" ENABLE_GR_CTRLPORT
Boost_FOUND
SWIG_FOUND
diff --git a/gnuradio-runtime/include/gnuradio/block.h b/gnuradio-runtime/include/gnuradio/block.h
index 3e85f22823..10742e0934 100644
--- a/gnuradio-runtime/include/gnuradio/block.h
+++ b/gnuradio-runtime/include/gnuradio/block.h
@@ -857,7 +857,7 @@ namespace gr {
return boost::dynamic_pointer_cast<block, basic_block>(p);
}
- std::ostream&
+ GR_RUNTIME_API std::ostream&
operator << (std::ostream& os, const block *m);
} /* namespace gr */
diff --git a/gnuradio-runtime/include/gnuradio/random.h b/gnuradio-runtime/include/gnuradio/random.h
index 2167247526..9aadadff29 100644
--- a/gnuradio-runtime/include/gnuradio/random.h
+++ b/gnuradio-runtime/include/gnuradio/random.h
@@ -45,9 +45,9 @@ namespace gr {
boost::mt19937 *d_rng; // mersenne twister as random number generator
boost::uniform_real<float> *d_uniform; // choose uniform distribution, default is [0,1)
- boost::random::uniform_int_distribution<> *d_integer_dis;
+ boost::uniform_int<> *d_integer_dis;
boost::variate_generator<boost::mt19937&, boost::uniform_real<float> > *d_generator;
- boost::variate_generator<boost::mt19937&, boost::random::uniform_int_distribution<> > *d_integer_generator;
+ boost::variate_generator<boost::mt19937&, boost::uniform_int<> > *d_integer_generator;
public:
random(unsigned int seed=0, int min_integer = 0, int max_integer = 2);
diff --git a/gnuradio-runtime/include/gnuradio/unittests.h b/gnuradio-runtime/include/gnuradio/unittests.h
index 209c3ab32a..14c201ecb1 100644
--- a/gnuradio-runtime/include/gnuradio/unittests.h
+++ b/gnuradio-runtime/include/gnuradio/unittests.h
@@ -26,7 +26,9 @@
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
+#ifndef _MSC_VER
#include <unistd.h>
+#endif
#include <string>
#include <boost/filesystem/operations.hpp>
diff --git a/gnuradio-runtime/lib/controlport/CMakeLists.txt b/gnuradio-runtime/lib/controlport/CMakeLists.txt
index c9bdeb949e..0d5d0376cc 100644
--- a/gnuradio-runtime/lib/controlport/CMakeLists.txt
+++ b/gnuradio-runtime/lib/controlport/CMakeLists.txt
@@ -51,28 +51,28 @@ MATH(EXPR CTRLPORT_BACKENDS "${CTRLPORT_BACKENDS} + 1")
message(STATUS "Found and enabling Thrift backend to ControlPort")
GR_APPEND_SUBCOMPONENT("thrift")
-# Run Thrrift To compile C++ and Python files
+# Run Thrift To compile C++ and Python files
message(STATUS "Running thrift to build C++ bindings")
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/thrift/)
-EXECUTE_PROCESS(
- COMMAND ${THRIFT_BIN} --gen cpp -out ${CMAKE_CURRENT_BINARY_DIR}/thrift/ ${CMAKE_CURRENT_SOURCE_DIR}/thrift/gnuradio.thrift
- OUTPUT_VARIABLE THRIFT_CPP_OUTPUT
- ERROR_VARIABLE THRIFT_CPP_ERROR
- )
+list(APPEND gnuradio_thrift_generated_sources
+ ${CMAKE_CURRENT_BINARY_DIR}/thrift/gnuradio_types.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/thrift/gnuradio_constants.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/thrift/ControlPort.cpp
+ )
+add_custom_command(
+ DEPENDS ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/controlport/thrift/gnuradio.thrift
+ OUTPUT ${gnuradio_thrift_generated_sources}
+ COMMAND ${THRIFT_BIN} --gen cpp -out ${CMAKE_CURRENT_BINARY_DIR}/thrift/ ${CMAKE_CURRENT_SOURCE_DIR}/thrift/gnuradio.thrift
+ )
list(APPEND gnuradio_ctrlport_sources
${CMAKE_CURRENT_SOURCE_DIR}/thrift/rpcserver_thrift.cc
${CMAKE_CURRENT_SOURCE_DIR}/thrift/rpcpmtconverters_thrift.cc
${CMAKE_CURRENT_SOURCE_DIR}/thrift/rpcserver_booter_thrift.cc
${CMAKE_CURRENT_SOURCE_DIR}/thrift/thrift_application_base.cc
-)
-
-# add files built by compiling gnuradio.thrift
-list(APPEND gnuradio_ctrlport_sources
- ${CMAKE_CURRENT_BINARY_DIR}/thrift/gnuradio_types.cpp
- ${CMAKE_CURRENT_BINARY_DIR}/thrift/gnuradio_constants.cpp
- ${CMAKE_CURRENT_BINARY_DIR}/thrift/ControlPort.cpp
-)
+ # add files built by compiling gnuradio.thrift
+ ${gnuradio_thrift_generated_sources}
+ )
# Add required libraries here
list(APPEND gnuradio_runtime_libs
diff --git a/gnuradio-runtime/lib/math/random.cc b/gnuradio-runtime/lib/math/random.cc
index 35f63076b2..59f2f22bd0 100644
--- a/gnuradio-runtime/lib/math/random.cc
+++ b/gnuradio-runtime/lib/math/random.cc
@@ -51,7 +51,7 @@ namespace gr {
// Setup random number generators
d_rng = new boost::mt19937; // random numbers are generated here.
d_uniform = new boost::uniform_real<float>; // map random number to distribution
- d_integer_dis = new boost::random::uniform_int_distribution<>(0, 1); // another "mapper"
+ d_integer_dis = new boost::uniform_int<>(0, 1); // another "mapper"
d_generator = NULL; // MUST be reinstantiated on every call to reseed.
d_integer_generator = NULL; // MUST be reinstantiated on everytime d_rng or d_integer_dis is changed.
reseed(seed); // set seed for random number generator
@@ -80,16 +80,17 @@ namespace gr {
delete d_generator;
d_generator = new boost::variate_generator<boost::mt19937&, boost::uniform_real<float> > (*d_rng,*d_uniform); // create number generator in [0,1) from boost.random
delete d_integer_generator;
- d_integer_generator = new boost::variate_generator<boost::mt19937&, boost::random::uniform_int_distribution<> >(*d_rng, *d_integer_dis);
+ d_integer_generator = new boost::variate_generator<boost::mt19937&, boost::uniform_int<> >(*d_rng, *d_integer_dis);
}
void
random::set_integer_limits(const int minimum, const int maximum){
// boost expects integer limits defined as [minimum, maximum] which is unintuitive.
- boost::random::uniform_int_distribution<>::param_type dis_params(minimum, maximum - 1);
- d_integer_dis->param(dis_params);
+ // use the expected half open interval behavior! [minimum, maximum)!
delete d_integer_generator;
- d_integer_generator = new boost::variate_generator<boost::mt19937&, boost::random::uniform_int_distribution<> >(*d_rng, *d_integer_dis);
+ delete d_integer_dis;
+ d_integer_dis = new boost::uniform_int<>(minimum, maximum - 1);
+ d_integer_generator = new boost::variate_generator<boost::mt19937&, boost::uniform_int<> >(*d_rng, *d_integer_dis);
}
/*!
diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/CMakeLists.txt b/gnuradio-runtime/python/gnuradio/ctrlport/CMakeLists.txt
index f40f253a72..be959467cf 100644
--- a/gnuradio-runtime/python/gnuradio/ctrlport/CMakeLists.txt
+++ b/gnuradio-runtime/python/gnuradio/ctrlport/CMakeLists.txt
@@ -50,21 +50,7 @@ GR_PYTHON_INSTALL(
if(THRIFT_FOUND)
-EXECUTE_PROCESS(
- COMMAND ${THRIFT_BIN} --gen py -out ${CMAKE_CURRENT_BINARY_DIR}/ ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/controlport/thrift/gnuradio.thrift
- OUTPUT_VARIABLE THRIFT_PY_OUTPUT
- ERROR_VARIABLE THRIFT_PY_ERROR
- )
-
-GR_PYTHON_INSTALL(
- FILES
- ${CMAKE_CURRENT_SOURCE_DIR}/RPCConnectionThrift.py
- DESTINATION ${GR_PYTHON_DIR}/gnuradio/ctrlport/
- COMPONENT "runtime_python"
-)
-
-GR_PYTHON_INSTALL(
- FILES
+ list(APPEND thrift_targets
${CMAKE_CURRENT_BINARY_DIR}/GNURadio/__init__.py
${CMAKE_CURRENT_BINARY_DIR}/GNURadio/constants.py
${CMAKE_CURRENT_BINARY_DIR}/GNURadio/ControlPort.py
@@ -72,8 +58,25 @@ GR_PYTHON_INSTALL(
${CMAKE_CURRENT_BINARY_DIR}/GNURadio/StreamReceiver.py
${CMAKE_CURRENT_BINARY_DIR}/GNURadio/StreamReceiver-remote
${CMAKE_CURRENT_BINARY_DIR}/GNURadio/ttypes.py
+ )
+ add_custom_command(
+ DEPENDS ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/controlport/thrift/gnuradio.thrift
+ OUTPUT ${thrift_targets}
+ COMMAND ${THRIFT_BIN} --gen py -out ${CMAKE_CURRENT_BINARY_DIR}/ ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/controlport/thrift/gnuradio.thrift
+ )
+
+ GR_PYTHON_INSTALL(
+ FILES
+ ${CMAKE_CURRENT_SOURCE_DIR}/RPCConnectionThrift.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/ctrlport/
+ COMPONENT "runtime_python"
+ )
+
+ GR_PYTHON_INSTALL(
+ FILES
+ ${thrift_targets}
DESTINATION ${GR_PYTHON_DIR}/gnuradio/ctrlport/GNURadio
COMPONENT "runtime_python"
-)
+ )
endif(THRIFT_FOUND)
diff --git a/gr-analog/grc/analog_probe_avg_mag_sqrd_x.xml b/gr-analog/grc/analog_probe_avg_mag_sqrd_x.xml
index 482982b21f..98e6702ffd 100644
--- a/gr-analog/grc/analog_probe_avg_mag_sqrd_x.xml
+++ b/gr-analog/grc/analog_probe_avg_mag_sqrd_x.xml
@@ -20,11 +20,22 @@
<name>Complex</name>
<key>c</key>
<opt>input:complex</opt>
+ <opt>optional:1</opt>
+ <opt>hide:all</opt>
</option>
<option>
<name>Float</name>
<key>f</key>
<opt>input:float</opt>
+ <opt>optional:1</opt>
+ <opt>hide:all</opt>
+ </option>
+ <option>
+ <name>Complex->Float</name>
+ <key>cf</key>
+ <opt>input:complex</opt>
+ <opt>optional:0</opt>
+ <opt>hide:</opt>
</option>
</param>
<param>
@@ -43,6 +54,12 @@
<name>in</name>
<type>$type.input</type>
</sink>
+ <source>
+ <name>out</name>
+ <type>float</type>
+ <optional>$type.optional</optional>
+ <hide>$type.hide</hide>
+ </source>
<doc>
Available functions to probe: level()
diff --git a/gr-blocks/swig/CMakeLists.txt b/gr-blocks/swig/CMakeLists.txt
index c128a9b26c..d64c347919 100644
--- a/gr-blocks/swig/CMakeLists.txt
+++ b/gr-blocks/swig/CMakeLists.txt
@@ -52,6 +52,11 @@ set(GR_SWIG_BLOCK_IFILES
blocks_swig3
blocks_swig4
blocks_swig5
+ blocks_swig6
+ blocks_swig7
+ blocks_swig8
+ blocks_swig9
+ blocks_swig10
)
foreach(swigfile ${GR_SWIG_BLOCK_IFILES})
diff --git a/gr-blocks/swig/blocks_swig.py.in b/gr-blocks/swig/blocks_swig.py.in
index a0bd574c18..7682f17d83 100644
--- a/gr-blocks/swig/blocks_swig.py.in
+++ b/gr-blocks/swig/blocks_swig.py.in
@@ -25,3 +25,8 @@ from blocks_swig2 import *
from blocks_swig3 import *
from blocks_swig4 import *
from blocks_swig5 import *
+from blocks_swig6 import *
+from blocks_swig7 import *
+from blocks_swig8 import *
+from blocks_swig9 import *
+from blocks_swig10 import *
diff --git a/gr-blocks/swig/blocks_swig0.i b/gr-blocks/swig/blocks_swig0.i
index 37b8ef6b0b..66e6ca10f8 100644
--- a/gr-blocks/swig/blocks_swig0.i
+++ b/gr-blocks/swig/blocks_swig0.i
@@ -24,6 +24,7 @@
%include "gnuradio.i"
+//load generated python docstrings
%include "blocks_swig0_doc.i"
%{
diff --git a/gr-blocks/swig/blocks_swig1.i b/gr-blocks/swig/blocks_swig1.i
index 24483fcf91..cbff920d02 100644
--- a/gr-blocks/swig/blocks_swig1.i
+++ b/gr-blocks/swig/blocks_swig1.i
@@ -24,24 +24,10 @@
%include "gnuradio.i"
+//load generated python docstrings
%include "blocks_swig1_doc.i"
%{
-#include "gnuradio/blocks/skiphead.h"
-#include "gnuradio/blocks/stream_mux.h"
-#include "gnuradio/blocks/stream_to_streams.h"
-#include "gnuradio/blocks/stream_to_tagged_stream.h"
-#include "gnuradio/blocks/stream_to_vector.h"
-#include "gnuradio/blocks/streams_to_stream.h"
-#include "gnuradio/blocks/streams_to_vector.h"
-#include "gnuradio/blocks/tag_debug.h"
-#include "gnuradio/blocks/tagged_file_sink.h"
-#include "gnuradio/blocks/tsb_vector_sink_b.h"
-#include "gnuradio/blocks/tsb_vector_sink_c.h"
-#include "gnuradio/blocks/tsb_vector_sink_f.h"
-#include "gnuradio/blocks/tsb_vector_sink_i.h"
-#include "gnuradio/blocks/tsb_vector_sink_s.h"
-#include "gnuradio/blocks/throttle.h"
#include "gnuradio/blocks/vector_map.h"
#include "gnuradio/blocks/vector_to_stream.h"
#include "gnuradio/blocks/vector_to_streams.h"
@@ -64,21 +50,6 @@
#include "gnuradio/blocks/wavfile_source.h"
%}
-%include "gnuradio/blocks/skiphead.h"
-%include "gnuradio/blocks/stream_mux.h"
-%include "gnuradio/blocks/stream_to_streams.h"
-%include "gnuradio/blocks/stream_to_tagged_stream.h"
-%include "gnuradio/blocks/stream_to_vector.h"
-%include "gnuradio/blocks/streams_to_stream.h"
-%include "gnuradio/blocks/streams_to_vector.h"
-%include "gnuradio/blocks/tag_debug.h"
-%include "gnuradio/blocks/tagged_file_sink.h"
-%include "gnuradio/blocks/tsb_vector_sink_b.h"
-%include "gnuradio/blocks/tsb_vector_sink_c.h"
-%include "gnuradio/blocks/tsb_vector_sink_f.h"
-%include "gnuradio/blocks/tsb_vector_sink_i.h"
-%include "gnuradio/blocks/tsb_vector_sink_s.h"
-%include "gnuradio/blocks/throttle.h"
%include "gnuradio/blocks/vector_map.h"
%include "gnuradio/blocks/vector_to_stream.h"
%include "gnuradio/blocks/vector_to_streams.h"
@@ -100,21 +71,6 @@
%include "gnuradio/blocks/wavfile_sink.h"
%include "gnuradio/blocks/wavfile_source.h"
-GR_SWIG_BLOCK_MAGIC2(blocks, skiphead);
-GR_SWIG_BLOCK_MAGIC2(blocks, stream_mux);
-GR_SWIG_BLOCK_MAGIC2(blocks, stream_to_streams);
-GR_SWIG_BLOCK_MAGIC2(blocks, stream_to_tagged_stream);
-GR_SWIG_BLOCK_MAGIC2(blocks, stream_to_vector);
-GR_SWIG_BLOCK_MAGIC2(blocks, streams_to_stream);
-GR_SWIG_BLOCK_MAGIC2(blocks, streams_to_vector);
-GR_SWIG_BLOCK_MAGIC2(blocks, tag_debug);
-GR_SWIG_BLOCK_MAGIC2(blocks, tagged_file_sink);
-GR_SWIG_BLOCK_MAGIC2(blocks, tsb_vector_sink_b);
-GR_SWIG_BLOCK_MAGIC2(blocks, tsb_vector_sink_c);
-GR_SWIG_BLOCK_MAGIC2(blocks, tsb_vector_sink_f);
-GR_SWIG_BLOCK_MAGIC2(blocks, tsb_vector_sink_i);
-GR_SWIG_BLOCK_MAGIC2(blocks, tsb_vector_sink_s);
-GR_SWIG_BLOCK_MAGIC2(blocks, throttle);
GR_SWIG_BLOCK_MAGIC2(blocks, vector_map);
GR_SWIG_BLOCK_MAGIC2(blocks, vector_to_stream);
GR_SWIG_BLOCK_MAGIC2(blocks, vector_to_streams);
diff --git a/gr-blocks/swig/blocks_swig10.i b/gr-blocks/swig/blocks_swig10.i
new file mode 100644
index 0000000000..5872b17cf3
--- /dev/null
+++ b/gr-blocks/swig/blocks_swig10.i
@@ -0,0 +1,90 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2017 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.
+ */
+
+#define BLOCKS_API
+
+%include "gnuradio.i"
+
+//load generated python docstrings
+%include "blocks_swig10_doc.i"
+
+%{
+#include "gnuradio/blocks/min_ff.h"
+#include "gnuradio/blocks/min_ii.h"
+#include "gnuradio/blocks/min_ss.h"
+#include "gnuradio/blocks/moving_average_cc.h"
+#include "gnuradio/blocks/moving_average_ff.h"
+#include "gnuradio/blocks/moving_average_ii.h"
+#include "gnuradio/blocks/moving_average_ss.h"
+#include "gnuradio/blocks/nlog10_ff.h"
+#include "gnuradio/blocks/not_bb.h"
+#include "gnuradio/blocks/not_ss.h"
+#include "gnuradio/blocks/not_ii.h"
+#include "gnuradio/blocks/or_bb.h"
+#include "gnuradio/blocks/or_ss.h"
+#include "gnuradio/blocks/or_ii.h"
+#include "gnuradio/blocks/patterned_interleaver.h"
+#include "gnuradio/blocks/pack_k_bits_bb.h"
+#include "gnuradio/blocks/packed_to_unpacked_bb.h"
+#include "gnuradio/blocks/packed_to_unpacked_ss.h"
+#include "gnuradio/blocks/packed_to_unpacked_ii.h"
+%}
+
+%include "gnuradio/blocks/min_ff.h"
+%include "gnuradio/blocks/min_ii.h"
+%include "gnuradio/blocks/min_ss.h"
+%include "gnuradio/blocks/moving_average_cc.h"
+%include "gnuradio/blocks/moving_average_ff.h"
+%include "gnuradio/blocks/moving_average_ii.h"
+%include "gnuradio/blocks/moving_average_ss.h"
+%include "gnuradio/blocks/nlog10_ff.h"
+%include "gnuradio/blocks/not_bb.h"
+%include "gnuradio/blocks/not_ss.h"
+%include "gnuradio/blocks/not_ii.h"
+%include "gnuradio/blocks/or_bb.h"
+%include "gnuradio/blocks/or_ss.h"
+%include "gnuradio/blocks/or_ii.h"
+%include "gnuradio/blocks/patterned_interleaver.h"
+%include "gnuradio/blocks/pack_k_bits_bb.h"
+%include "gnuradio/blocks/packed_to_unpacked_bb.h"
+%include "gnuradio/blocks/packed_to_unpacked_ss.h"
+%include "gnuradio/blocks/packed_to_unpacked_ii.h"
+
+GR_SWIG_BLOCK_MAGIC2(blocks, min_ff);
+GR_SWIG_BLOCK_MAGIC2(blocks, min_ii);
+GR_SWIG_BLOCK_MAGIC2(blocks, min_ss);
+GR_SWIG_BLOCK_MAGIC2(blocks, moving_average_cc);
+GR_SWIG_BLOCK_MAGIC2(blocks, moving_average_ff);
+GR_SWIG_BLOCK_MAGIC2(blocks, moving_average_ii);
+GR_SWIG_BLOCK_MAGIC2(blocks, moving_average_ss);
+GR_SWIG_BLOCK_MAGIC2(blocks, nlog10_ff);
+GR_SWIG_BLOCK_MAGIC2(blocks, not_bb);
+GR_SWIG_BLOCK_MAGIC2(blocks, not_ss);
+GR_SWIG_BLOCK_MAGIC2(blocks, not_ii);
+GR_SWIG_BLOCK_MAGIC2(blocks, or_bb);
+GR_SWIG_BLOCK_MAGIC2(blocks, or_ss);
+GR_SWIG_BLOCK_MAGIC2(blocks, or_ii);
+GR_SWIG_BLOCK_MAGIC2(blocks, patterned_interleaver);
+GR_SWIG_BLOCK_MAGIC2(blocks, pack_k_bits_bb);
+GR_SWIG_BLOCK_MAGIC2(blocks, packed_to_unpacked_bb);
+GR_SWIG_BLOCK_MAGIC2(blocks, packed_to_unpacked_ss);
+GR_SWIG_BLOCK_MAGIC2(blocks, packed_to_unpacked_ii);
diff --git a/gr-blocks/swig/blocks_swig2.i b/gr-blocks/swig/blocks_swig2.i
index 92db800d95..ea25a6bccc 100644
--- a/gr-blocks/swig/blocks_swig2.i
+++ b/gr-blocks/swig/blocks_swig2.i
@@ -31,26 +31,6 @@
%include "feval.i"
%{
-#include "gnuradio/blocks/abs_ff.h"
-#include "gnuradio/blocks/abs_ss.h"
-#include "gnuradio/blocks/abs_ii.h"
-#include "gnuradio/blocks/add_ff.h"
-#include "gnuradio/blocks/add_ss.h"
-#include "gnuradio/blocks/add_ii.h"
-#include "gnuradio/blocks/add_cc.h"
-#include "gnuradio/blocks/add_const_bb.h"
-#include "gnuradio/blocks/add_const_ff.h"
-#include "gnuradio/blocks/add_const_ss.h"
-#include "gnuradio/blocks/add_const_ii.h"
-#include "gnuradio/blocks/add_const_cc.h"
-#include "gnuradio/blocks/add_const_vbb.h"
-#include "gnuradio/blocks/add_const_vff.h"
-#include "gnuradio/blocks/add_const_vss.h"
-#include "gnuradio/blocks/add_const_vii.h"
-#include "gnuradio/blocks/add_const_vcc.h"
-#include "gnuradio/blocks/and_bb.h"
-#include "gnuradio/blocks/and_ss.h"
-#include "gnuradio/blocks/and_ii.h"
#include "gnuradio/blocks/and_const_bb.h"
#include "gnuradio/blocks/and_const_ss.h"
#include "gnuradio/blocks/and_const_ii.h"
@@ -72,33 +52,8 @@
#include "gnuradio/blocks/complex_to_mag_squared.h"
#include "gnuradio/blocks/complex_to_arg.h"
#include "gnuradio/blocks/conjugate_cc.h"
-#include "gnuradio/blocks/deinterleave.h"
-#include "gnuradio/blocks/divide_ff.h"
-#include "gnuradio/blocks/divide_ss.h"
-#include "gnuradio/blocks/divide_ii.h"
-#include "gnuradio/blocks/divide_cc.h"
%}
-%include "gnuradio/blocks/abs_ff.h"
-%include "gnuradio/blocks/abs_ss.h"
-%include "gnuradio/blocks/abs_ii.h"
-%include "gnuradio/blocks/add_ff.h"
-%include "gnuradio/blocks/add_ss.h"
-%include "gnuradio/blocks/add_ii.h"
-%include "gnuradio/blocks/add_cc.h"
-%include "gnuradio/blocks/add_const_bb.h"
-%include "gnuradio/blocks/add_const_ff.h"
-%include "gnuradio/blocks/add_const_ss.h"
-%include "gnuradio/blocks/add_const_ii.h"
-%include "gnuradio/blocks/add_const_cc.h"
-%include "gnuradio/blocks/add_const_vbb.h"
-%include "gnuradio/blocks/add_const_vff.h"
-%include "gnuradio/blocks/add_const_vss.h"
-%include "gnuradio/blocks/add_const_vii.h"
-%include "gnuradio/blocks/add_const_vcc.h"
-%include "gnuradio/blocks/and_bb.h"
-%include "gnuradio/blocks/and_ss.h"
-%include "gnuradio/blocks/and_ii.h"
%include "gnuradio/blocks/and_const_bb.h"
%include "gnuradio/blocks/and_const_ss.h"
%include "gnuradio/blocks/and_const_ii.h"
@@ -120,32 +75,7 @@
%include "gnuradio/blocks/complex_to_mag_squared.h"
%include "gnuradio/blocks/complex_to_arg.h"
%include "gnuradio/blocks/conjugate_cc.h"
-%include "gnuradio/blocks/deinterleave.h"
-%include "gnuradio/blocks/divide_ff.h"
-%include "gnuradio/blocks/divide_ss.h"
-%include "gnuradio/blocks/divide_ii.h"
-%include "gnuradio/blocks/divide_cc.h"
-GR_SWIG_BLOCK_MAGIC2(blocks, abs_ff);
-GR_SWIG_BLOCK_MAGIC2(blocks, abs_ss);
-GR_SWIG_BLOCK_MAGIC2(blocks, abs_ii);
-GR_SWIG_BLOCK_MAGIC2(blocks, add_ff);
-GR_SWIG_BLOCK_MAGIC2(blocks, add_ss);
-GR_SWIG_BLOCK_MAGIC2(blocks, add_ii);
-GR_SWIG_BLOCK_MAGIC2(blocks, add_cc);
-GR_SWIG_BLOCK_MAGIC2(blocks, add_const_bb);
-GR_SWIG_BLOCK_MAGIC2(blocks, add_const_ff);
-GR_SWIG_BLOCK_MAGIC2(blocks, add_const_ss);
-GR_SWIG_BLOCK_MAGIC2(blocks, add_const_ii);
-GR_SWIG_BLOCK_MAGIC2(blocks, add_const_cc);
-GR_SWIG_BLOCK_MAGIC2(blocks, add_const_vbb);
-GR_SWIG_BLOCK_MAGIC2(blocks, add_const_vff);
-GR_SWIG_BLOCK_MAGIC2(blocks, add_const_vss);
-GR_SWIG_BLOCK_MAGIC2(blocks, add_const_vii);
-GR_SWIG_BLOCK_MAGIC2(blocks, add_const_vcc);
-GR_SWIG_BLOCK_MAGIC2(blocks, and_bb);
-GR_SWIG_BLOCK_MAGIC2(blocks, and_ss);
-GR_SWIG_BLOCK_MAGIC2(blocks, and_ii);
GR_SWIG_BLOCK_MAGIC2(blocks, and_const_bb);
GR_SWIG_BLOCK_MAGIC2(blocks, and_const_ss);
GR_SWIG_BLOCK_MAGIC2(blocks, and_const_ii);
@@ -167,8 +97,3 @@ GR_SWIG_BLOCK_MAGIC2(blocks, complex_to_mag);
GR_SWIG_BLOCK_MAGIC2(blocks, complex_to_mag_squared);
GR_SWIG_BLOCK_MAGIC2(blocks, complex_to_arg);
GR_SWIG_BLOCK_MAGIC2(blocks, conjugate_cc);
-GR_SWIG_BLOCK_MAGIC2(blocks, deinterleave);
-GR_SWIG_BLOCK_MAGIC2(blocks, divide_ff);
-GR_SWIG_BLOCK_MAGIC2(blocks, divide_ss);
-GR_SWIG_BLOCK_MAGIC2(blocks, divide_ii);
-GR_SWIG_BLOCK_MAGIC2(blocks, divide_cc);
diff --git a/gr-blocks/swig/blocks_swig3.i b/gr-blocks/swig/blocks_swig3.i
index 629ada54ea..6794b75d57 100644
--- a/gr-blocks/swig/blocks_swig3.i
+++ b/gr-blocks/swig/blocks_swig3.i
@@ -28,33 +28,6 @@
%include "blocks_swig3_doc.i"
%{
-#include "gnuradio/blocks/float_to_char.h"
-#include "gnuradio/blocks/float_to_complex.h"
-#include "gnuradio/blocks/magphase_to_complex.h"
-#include "gnuradio/blocks/float_to_int.h"
-#include "gnuradio/blocks/float_to_short.h"
-#include "gnuradio/blocks/float_to_uchar.h"
-#include "gnuradio/blocks/int_to_float.h"
-#include "gnuradio/blocks/integrate_ss.h"
-#include "gnuradio/blocks/integrate_ii.h"
-#include "gnuradio/blocks/integrate_ff.h"
-#include "gnuradio/blocks/integrate_cc.h"
-#include "gnuradio/blocks/interleave.h"
-#include "gnuradio/blocks/interleaved_short_to_complex.h"
-#include "gnuradio/blocks/interleaved_char_to_complex.h"
-#include "gnuradio/blocks/keep_m_in_n.h"
-#include "gnuradio/blocks/keep_one_in_n.h"
-#include "gnuradio/blocks/lfsr_32k_source_s.h"
-#include "gnuradio/blocks/max_ff.h"
-#include "gnuradio/blocks/max_ii.h"
-#include "gnuradio/blocks/max_ss.h"
-#include "gnuradio/blocks/min_ff.h"
-#include "gnuradio/blocks/min_ii.h"
-#include "gnuradio/blocks/min_ss.h"
-#include "gnuradio/blocks/moving_average_cc.h"
-#include "gnuradio/blocks/moving_average_ff.h"
-#include "gnuradio/blocks/moving_average_ii.h"
-#include "gnuradio/blocks/moving_average_ss.h"
#include "gnuradio/blocks/multiply_ss.h"
#include "gnuradio/blocks/multiply_ii.h"
#include "gnuradio/blocks/multiply_ff.h"
@@ -77,33 +50,6 @@
#include "gnuradio/blocks/mute_cc.h"
%}
-%include "gnuradio/blocks/float_to_char.h"
-%include "gnuradio/blocks/float_to_complex.h"
-%include "gnuradio/blocks/magphase_to_complex.h"
-%include "gnuradio/blocks/float_to_int.h"
-%include "gnuradio/blocks/float_to_short.h"
-%include "gnuradio/blocks/float_to_uchar.h"
-%include "gnuradio/blocks/int_to_float.h"
-%include "gnuradio/blocks/integrate_ss.h"
-%include "gnuradio/blocks/integrate_ii.h"
-%include "gnuradio/blocks/integrate_ff.h"
-%include "gnuradio/blocks/integrate_cc.h"
-%include "gnuradio/blocks/interleave.h"
-%include "gnuradio/blocks/interleaved_short_to_complex.h"
-%include "gnuradio/blocks/interleaved_char_to_complex.h"
-%include "gnuradio/blocks/keep_m_in_n.h"
-%include "gnuradio/blocks/keep_one_in_n.h"
-%include "gnuradio/blocks/lfsr_32k_source_s.h"
-%include "gnuradio/blocks/max_ff.h"
-%include "gnuradio/blocks/max_ii.h"
-%include "gnuradio/blocks/max_ss.h"
-%include "gnuradio/blocks/min_ff.h"
-%include "gnuradio/blocks/min_ii.h"
-%include "gnuradio/blocks/min_ss.h"
-%include "gnuradio/blocks/moving_average_cc.h"
-%include "gnuradio/blocks/moving_average_ff.h"
-%include "gnuradio/blocks/moving_average_ii.h"
-%include "gnuradio/blocks/moving_average_ss.h"
%include "gnuradio/blocks/multiply_ss.h"
%include "gnuradio/blocks/multiply_ii.h"
%include "gnuradio/blocks/multiply_ff.h"
@@ -125,33 +71,6 @@
%include "gnuradio/blocks/mute_ff.h"
%include "gnuradio/blocks/mute_cc.h"
-GR_SWIG_BLOCK_MAGIC2(blocks, float_to_char);
-GR_SWIG_BLOCK_MAGIC2(blocks, float_to_complex);
-GR_SWIG_BLOCK_MAGIC2(blocks, magphase_to_complex);
-GR_SWIG_BLOCK_MAGIC2(blocks, float_to_int);
-GR_SWIG_BLOCK_MAGIC2(blocks, float_to_short);
-GR_SWIG_BLOCK_MAGIC2(blocks, float_to_uchar);
-GR_SWIG_BLOCK_MAGIC2(blocks, int_to_float);
-GR_SWIG_BLOCK_MAGIC2(blocks, integrate_ss);
-GR_SWIG_BLOCK_MAGIC2(blocks, integrate_ii);
-GR_SWIG_BLOCK_MAGIC2(blocks, integrate_ff);
-GR_SWIG_BLOCK_MAGIC2(blocks, integrate_cc);
-GR_SWIG_BLOCK_MAGIC2(blocks, interleave);
-GR_SWIG_BLOCK_MAGIC2(blocks, interleaved_short_to_complex);
-GR_SWIG_BLOCK_MAGIC2(blocks, interleaved_char_to_complex);
-GR_SWIG_BLOCK_MAGIC2(blocks, keep_m_in_n);
-GR_SWIG_BLOCK_MAGIC2(blocks, keep_one_in_n);
-GR_SWIG_BLOCK_MAGIC2(blocks, lfsr_32k_source_s);
-GR_SWIG_BLOCK_MAGIC2(blocks, max_ff);
-GR_SWIG_BLOCK_MAGIC2(blocks, max_ii);
-GR_SWIG_BLOCK_MAGIC2(blocks, max_ss);
-GR_SWIG_BLOCK_MAGIC2(blocks, min_ff);
-GR_SWIG_BLOCK_MAGIC2(blocks, min_ii);
-GR_SWIG_BLOCK_MAGIC2(blocks, min_ss);
-GR_SWIG_BLOCK_MAGIC2(blocks, moving_average_cc);
-GR_SWIG_BLOCK_MAGIC2(blocks, moving_average_ff);
-GR_SWIG_BLOCK_MAGIC2(blocks, moving_average_ii);
-GR_SWIG_BLOCK_MAGIC2(blocks, moving_average_ss);
GR_SWIG_BLOCK_MAGIC2(blocks, multiply_ss);
GR_SWIG_BLOCK_MAGIC2(blocks, multiply_ii);
GR_SWIG_BLOCK_MAGIC2(blocks, multiply_ff);
diff --git a/gr-blocks/swig/blocks_swig4.i b/gr-blocks/swig/blocks_swig4.i
index 4c2c93e6b1..bb39740123 100644
--- a/gr-blocks/swig/blocks_swig4.i
+++ b/gr-blocks/swig/blocks_swig4.i
@@ -31,15 +31,6 @@
%include "blocks_swig4_doc.i"
%{
-#include "gnuradio/blocks/nlog10_ff.h"
-#include "gnuradio/blocks/not_bb.h"
-#include "gnuradio/blocks/not_ss.h"
-#include "gnuradio/blocks/not_ii.h"
-#include "gnuradio/blocks/patterned_interleaver.h"
-#include "gnuradio/blocks/pack_k_bits_bb.h"
-#include "gnuradio/blocks/packed_to_unpacked_bb.h"
-#include "gnuradio/blocks/packed_to_unpacked_ss.h"
-#include "gnuradio/blocks/packed_to_unpacked_ii.h"
#include "gnuradio/blocks/pdu_filter.h"
#include "gnuradio/blocks/pdu_set.h"
#include "gnuradio/blocks/pdu_remove.h"
@@ -60,15 +51,8 @@
#include "gnuradio/blocks/probe_signal_vi.h"
#include "gnuradio/blocks/probe_signal_vf.h"
#include "gnuradio/blocks/probe_signal_vc.h"
-#include "gnuradio/blocks/or_bb.h"
-#include "gnuradio/blocks/or_ss.h"
-#include "gnuradio/blocks/or_ii.h"
%}
-%include "gnuradio/blocks/nlog10_ff.h"
-%include "gnuradio/blocks/not_bb.h"
-%include "gnuradio/blocks/not_ss.h"
-%include "gnuradio/blocks/not_ii.h"
%include "gnuradio/blocks/probe_signal_b.h"
%include "gnuradio/blocks/probe_signal_s.h"
%include "gnuradio/blocks/probe_signal_i.h"
@@ -79,14 +63,6 @@
%include "gnuradio/blocks/probe_signal_vi.h"
%include "gnuradio/blocks/probe_signal_vf.h"
%include "gnuradio/blocks/probe_signal_vc.h"
-%include "gnuradio/blocks/or_bb.h"
-%include "gnuradio/blocks/or_ss.h"
-%include "gnuradio/blocks/or_ii.h"
-%include "gnuradio/blocks/pack_k_bits_bb.h"
-%include "gnuradio/blocks/packed_to_unpacked_bb.h"
-%include "gnuradio/blocks/packed_to_unpacked_ss.h"
-%include "gnuradio/blocks/packed_to_unpacked_ii.h"
-%include "gnuradio/blocks/patterned_interleaver.h"
%include "gnuradio/blocks/pdu_filter.h"
%include "gnuradio/blocks/pdu_set.h"
%include "gnuradio/blocks/pdu_remove.h"
@@ -98,15 +74,6 @@
%include "gnuradio/blocks/plateau_detector_fb.h"
%include "gnuradio/blocks/probe_rate.h"
-GR_SWIG_BLOCK_MAGIC2(blocks, nlog10_ff);
-GR_SWIG_BLOCK_MAGIC2(blocks, not_bb);
-GR_SWIG_BLOCK_MAGIC2(blocks, not_ss);
-GR_SWIG_BLOCK_MAGIC2(blocks, not_ii);
-GR_SWIG_BLOCK_MAGIC2(blocks, patterned_interleaver);
-GR_SWIG_BLOCK_MAGIC2(blocks, pack_k_bits_bb);
-GR_SWIG_BLOCK_MAGIC2(blocks, packed_to_unpacked_bb);
-GR_SWIG_BLOCK_MAGIC2(blocks, packed_to_unpacked_ss);
-GR_SWIG_BLOCK_MAGIC2(blocks, packed_to_unpacked_ii);
GR_SWIG_BLOCK_MAGIC2(blocks, peak_detector_fb);
GR_SWIG_BLOCK_MAGIC2(blocks, peak_detector_ib);
GR_SWIG_BLOCK_MAGIC2(blocks, peak_detector_sb);
@@ -117,9 +84,6 @@ GR_SWIG_BLOCK_MAGIC2(blocks, pdu_set);
GR_SWIG_BLOCK_MAGIC2(blocks, pdu_remove);
GR_SWIG_BLOCK_MAGIC2(blocks, pdu_to_tagged_stream);
GR_SWIG_BLOCK_MAGIC2(blocks, probe_rate);
-GR_SWIG_BLOCK_MAGIC2(blocks, or_bb);
-GR_SWIG_BLOCK_MAGIC2(blocks, or_ss);
-GR_SWIG_BLOCK_MAGIC2(blocks, or_ii);
GR_SWIG_BLOCK_MAGIC2(blocks, probe_signal_b);
GR_SWIG_BLOCK_MAGIC2(blocks, probe_signal_s);
GR_SWIG_BLOCK_MAGIC2(blocks, probe_signal_i);
diff --git a/gr-blocks/swig/blocks_swig5.i b/gr-blocks/swig/blocks_swig5.i
index 761b0a855a..da8048370a 100644
--- a/gr-blocks/swig/blocks_swig5.i
+++ b/gr-blocks/swig/blocks_swig5.i
@@ -31,6 +31,7 @@
%include "blocks_swig5_doc.i"
%{
+#include "gnuradio/blocks/pdu.h"
#include "gnuradio/blocks/random_pdu.h"
#include "gnuradio/blocks/regenerate_bb.h"
#include "gnuradio/blocks/repack_bits_bb.h"
@@ -50,30 +51,6 @@
#include "gnuradio/blocks/sub_ss.h"
#include "gnuradio/blocks/sub_ii.h"
#include "gnuradio/blocks/sub_cc.h"
-#include "gnuradio/blocks/tag_gate.h"
-#include "gnuradio/blocks/tagged_stream_align.h"
-#include "gnuradio/blocks/tagged_stream_mux.h"
-#include "gnuradio/blocks/tagged_stream_multiply_length.h"
-#include "gnuradio/blocks/tagged_stream_to_pdu.h"
-#include "gnuradio/blocks/tags_strobe.h"
-#include "gnuradio/blocks/tcp_server_sink.h"
-#include "gnuradio/blocks/test_tag_variable_rate_ff.h"
-#include "gnuradio/blocks/threshold_ff.h"
-#include "gnuradio/blocks/transcendental.h"
-#include "gnuradio/blocks/tuntap_pdu.h"
-#include "gnuradio/blocks/uchar_to_float.h"
-#include "gnuradio/blocks/udp_sink.h"
-#include "gnuradio/blocks/udp_source.h"
-#include "gnuradio/blocks/unpack_k_bits.h"
-#include "gnuradio/blocks/unpack_k_bits_bb.h"
-#include "gnuradio/blocks/unpacked_to_packed_bb.h"
-#include "gnuradio/blocks/unpacked_to_packed_ss.h"
-#include "gnuradio/blocks/unpacked_to_packed_ii.h"
-#include "gnuradio/blocks/vco_f.h"
-#include "gnuradio/blocks/vco_c.h"
-#include "gnuradio/blocks/xor_bb.h"
-#include "gnuradio/blocks/xor_ss.h"
-#include "gnuradio/blocks/xor_ii.h"
%}
%include "gnuradio/blocks/random_pdu.h"
@@ -95,30 +72,6 @@
%include "gnuradio/blocks/sub_ss.h"
%include "gnuradio/blocks/sub_ii.h"
%include "gnuradio/blocks/sub_cc.h"
-%include "gnuradio/blocks/tag_gate.h"
-%include "gnuradio/blocks/tagged_stream_align.h"
-%include "gnuradio/blocks/tagged_stream_mux.h"
-%include "gnuradio/blocks/tagged_stream_multiply_length.h"
-%include "gnuradio/blocks/tagged_stream_to_pdu.h"
-%include "gnuradio/blocks/tags_strobe.h"
-%include "gnuradio/blocks/tcp_server_sink.h"
-%include "gnuradio/blocks/test_tag_variable_rate_ff.h"
-%include "gnuradio/blocks/threshold_ff.h"
-%include "gnuradio/blocks/transcendental.h"
-%include "gnuradio/blocks/tuntap_pdu.h"
-%include "gnuradio/blocks/uchar_to_float.h"
-%include "gnuradio/blocks/udp_sink.h"
-%include "gnuradio/blocks/udp_source.h"
-%include "gnuradio/blocks/unpack_k_bits.h"
-%include "gnuradio/blocks/unpack_k_bits_bb.h"
-%include "gnuradio/blocks/unpacked_to_packed_bb.h"
-%include "gnuradio/blocks/unpacked_to_packed_ss.h"
-%include "gnuradio/blocks/unpacked_to_packed_ii.h"
-%include "gnuradio/blocks/vco_f.h"
-%include "gnuradio/blocks/vco_c.h"
-%include "gnuradio/blocks/xor_bb.h"
-%include "gnuradio/blocks/xor_ss.h"
-%include "gnuradio/blocks/xor_ii.h"
GR_SWIG_BLOCK_MAGIC2(blocks, random_pdu);
GR_SWIG_BLOCK_MAGIC2(blocks, regenerate_bb);
@@ -139,26 +92,3 @@ GR_SWIG_BLOCK_MAGIC2(blocks, sub_ff);
GR_SWIG_BLOCK_MAGIC2(blocks, sub_ss);
GR_SWIG_BLOCK_MAGIC2(blocks, sub_ii);
GR_SWIG_BLOCK_MAGIC2(blocks, sub_cc);
-GR_SWIG_BLOCK_MAGIC2(blocks, tag_gate);
-GR_SWIG_BLOCK_MAGIC2(blocks, tagged_stream_align);
-GR_SWIG_BLOCK_MAGIC2(blocks, tagged_stream_mux);
-GR_SWIG_BLOCK_MAGIC2(blocks, tagged_stream_multiply_length);
-GR_SWIG_BLOCK_MAGIC2(blocks, tagged_stream_to_pdu);
-GR_SWIG_BLOCK_MAGIC2(blocks, tags_strobe);
-GR_SWIG_BLOCK_MAGIC2(blocks, tcp_server_sink);
-GR_SWIG_BLOCK_MAGIC2(blocks, test_tag_variable_rate_ff);
-GR_SWIG_BLOCK_MAGIC2(blocks, threshold_ff);
-GR_SWIG_BLOCK_MAGIC2(blocks, transcendental);
-GR_SWIG_BLOCK_MAGIC2(blocks, tuntap_pdu);
-GR_SWIG_BLOCK_MAGIC2(blocks, uchar_to_float);
-GR_SWIG_BLOCK_MAGIC2(blocks, udp_sink);
-GR_SWIG_BLOCK_MAGIC2(blocks, udp_source);
-GR_SWIG_BLOCK_MAGIC2(blocks, unpack_k_bits_bb);
-GR_SWIG_BLOCK_MAGIC2(blocks, unpacked_to_packed_bb);
-GR_SWIG_BLOCK_MAGIC2(blocks, unpacked_to_packed_ss);
-GR_SWIG_BLOCK_MAGIC2(blocks, unpacked_to_packed_ii);
-GR_SWIG_BLOCK_MAGIC2(blocks, vco_f);
-GR_SWIG_BLOCK_MAGIC2(blocks, vco_c);
-GR_SWIG_BLOCK_MAGIC2(blocks, xor_bb);
-GR_SWIG_BLOCK_MAGIC2(blocks, xor_ss);
-GR_SWIG_BLOCK_MAGIC2(blocks, xor_ii);
diff --git a/gr-blocks/swig/blocks_swig6.i b/gr-blocks/swig/blocks_swig6.i
new file mode 100644
index 0000000000..8c1baa3d98
--- /dev/null
+++ b/gr-blocks/swig/blocks_swig6.i
@@ -0,0 +1,107 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2017 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.
+ */
+
+#define BLOCKS_API
+
+%include "gnuradio.i"
+%include "gnuradio/blocks/pdu.h"
+
+%include <gnuradio/endianness.h>
+
+//load generated python docstrings
+%include "blocks_swig6_doc.i"
+
+%{
+#include "gnuradio/blocks/tag_gate.h"
+#include "gnuradio/blocks/tagged_stream_align.h"
+#include "gnuradio/blocks/tagged_stream_mux.h"
+#include "gnuradio/blocks/tagged_stream_multiply_length.h"
+#include "gnuradio/blocks/tagged_stream_to_pdu.h"
+#include "gnuradio/blocks/tags_strobe.h"
+#include "gnuradio/blocks/tcp_server_sink.h"
+#include "gnuradio/blocks/test_tag_variable_rate_ff.h"
+#include "gnuradio/blocks/threshold_ff.h"
+#include "gnuradio/blocks/transcendental.h"
+#include "gnuradio/blocks/tuntap_pdu.h"
+#include "gnuradio/blocks/uchar_to_float.h"
+#include "gnuradio/blocks/udp_sink.h"
+#include "gnuradio/blocks/udp_source.h"
+#include "gnuradio/blocks/unpack_k_bits.h"
+#include "gnuradio/blocks/unpack_k_bits_bb.h"
+#include "gnuradio/blocks/unpacked_to_packed_bb.h"
+#include "gnuradio/blocks/unpacked_to_packed_ss.h"
+#include "gnuradio/blocks/unpacked_to_packed_ii.h"
+#include "gnuradio/blocks/vco_f.h"
+#include "gnuradio/blocks/vco_c.h"
+#include "gnuradio/blocks/xor_bb.h"
+#include "gnuradio/blocks/xor_ss.h"
+#include "gnuradio/blocks/xor_ii.h"
+%}
+
+%include "gnuradio/blocks/tag_gate.h"
+%include "gnuradio/blocks/tagged_stream_align.h"
+%include "gnuradio/blocks/tagged_stream_mux.h"
+%include "gnuradio/blocks/tagged_stream_multiply_length.h"
+%include "gnuradio/blocks/tagged_stream_to_pdu.h"
+%include "gnuradio/blocks/tags_strobe.h"
+%include "gnuradio/blocks/tcp_server_sink.h"
+%include "gnuradio/blocks/test_tag_variable_rate_ff.h"
+%include "gnuradio/blocks/threshold_ff.h"
+%include "gnuradio/blocks/transcendental.h"
+%include "gnuradio/blocks/tuntap_pdu.h"
+%include "gnuradio/blocks/uchar_to_float.h"
+%include "gnuradio/blocks/udp_sink.h"
+%include "gnuradio/blocks/udp_source.h"
+%include "gnuradio/blocks/unpack_k_bits.h"
+%include "gnuradio/blocks/unpack_k_bits_bb.h"
+%include "gnuradio/blocks/unpacked_to_packed_bb.h"
+%include "gnuradio/blocks/unpacked_to_packed_ss.h"
+%include "gnuradio/blocks/unpacked_to_packed_ii.h"
+%include "gnuradio/blocks/vco_f.h"
+%include "gnuradio/blocks/vco_c.h"
+%include "gnuradio/blocks/xor_bb.h"
+%include "gnuradio/blocks/xor_ss.h"
+%include "gnuradio/blocks/xor_ii.h"
+
+GR_SWIG_BLOCK_MAGIC2(blocks, tag_gate);
+GR_SWIG_BLOCK_MAGIC2(blocks, tagged_stream_align);
+GR_SWIG_BLOCK_MAGIC2(blocks, tagged_stream_mux);
+GR_SWIG_BLOCK_MAGIC2(blocks, tagged_stream_multiply_length);
+GR_SWIG_BLOCK_MAGIC2(blocks, tagged_stream_to_pdu);
+GR_SWIG_BLOCK_MAGIC2(blocks, tags_strobe);
+GR_SWIG_BLOCK_MAGIC2(blocks, tcp_server_sink);
+GR_SWIG_BLOCK_MAGIC2(blocks, test_tag_variable_rate_ff);
+GR_SWIG_BLOCK_MAGIC2(blocks, threshold_ff);
+GR_SWIG_BLOCK_MAGIC2(blocks, transcendental);
+GR_SWIG_BLOCK_MAGIC2(blocks, tuntap_pdu);
+GR_SWIG_BLOCK_MAGIC2(blocks, uchar_to_float);
+GR_SWIG_BLOCK_MAGIC2(blocks, udp_sink);
+GR_SWIG_BLOCK_MAGIC2(blocks, udp_source);
+GR_SWIG_BLOCK_MAGIC2(blocks, unpack_k_bits_bb);
+GR_SWIG_BLOCK_MAGIC2(blocks, unpacked_to_packed_bb);
+GR_SWIG_BLOCK_MAGIC2(blocks, unpacked_to_packed_ss);
+GR_SWIG_BLOCK_MAGIC2(blocks, unpacked_to_packed_ii);
+GR_SWIG_BLOCK_MAGIC2(blocks, vco_f);
+GR_SWIG_BLOCK_MAGIC2(blocks, vco_c);
+GR_SWIG_BLOCK_MAGIC2(blocks, xor_bb);
+GR_SWIG_BLOCK_MAGIC2(blocks, xor_ss);
+GR_SWIG_BLOCK_MAGIC2(blocks, xor_ii);
diff --git a/gr-blocks/swig/blocks_swig7.i b/gr-blocks/swig/blocks_swig7.i
new file mode 100644
index 0000000000..d48ea8324d
--- /dev/null
+++ b/gr-blocks/swig/blocks_swig7.i
@@ -0,0 +1,96 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2017 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.
+ */
+
+#define BLOCKS_API
+#define GR_RUNTIME_API
+
+%include "gnuradio.i"
+
+//load generated python docstrings
+%include "blocks_swig7_doc.i"
+
+%include "feval.i"
+
+%{
+#include "gnuradio/blocks/deinterleave.h"
+#include "gnuradio/blocks/divide_ff.h"
+#include "gnuradio/blocks/divide_ss.h"
+#include "gnuradio/blocks/divide_ii.h"
+#include "gnuradio/blocks/divide_cc.h"
+#include "gnuradio/blocks/skiphead.h"
+#include "gnuradio/blocks/stream_mux.h"
+#include "gnuradio/blocks/stream_to_streams.h"
+#include "gnuradio/blocks/stream_to_tagged_stream.h"
+#include "gnuradio/blocks/stream_to_vector.h"
+#include "gnuradio/blocks/streams_to_stream.h"
+#include "gnuradio/blocks/streams_to_vector.h"
+#include "gnuradio/blocks/tag_debug.h"
+#include "gnuradio/blocks/tagged_file_sink.h"
+#include "gnuradio/blocks/tsb_vector_sink_b.h"
+#include "gnuradio/blocks/tsb_vector_sink_c.h"
+#include "gnuradio/blocks/tsb_vector_sink_f.h"
+#include "gnuradio/blocks/tsb_vector_sink_i.h"
+#include "gnuradio/blocks/tsb_vector_sink_s.h"
+#include "gnuradio/blocks/throttle.h"
+%}
+
+%include "gnuradio/blocks/deinterleave.h"
+%include "gnuradio/blocks/divide_ff.h"
+%include "gnuradio/blocks/divide_ss.h"
+%include "gnuradio/blocks/divide_ii.h"
+%include "gnuradio/blocks/divide_cc.h"
+%include "gnuradio/blocks/skiphead.h"
+%include "gnuradio/blocks/stream_mux.h"
+%include "gnuradio/blocks/stream_to_streams.h"
+%include "gnuradio/blocks/stream_to_tagged_stream.h"
+%include "gnuradio/blocks/stream_to_vector.h"
+%include "gnuradio/blocks/streams_to_stream.h"
+%include "gnuradio/blocks/streams_to_vector.h"
+%include "gnuradio/blocks/tag_debug.h"
+%include "gnuradio/blocks/tagged_file_sink.h"
+%include "gnuradio/blocks/tsb_vector_sink_b.h"
+%include "gnuradio/blocks/tsb_vector_sink_c.h"
+%include "gnuradio/blocks/tsb_vector_sink_f.h"
+%include "gnuradio/blocks/tsb_vector_sink_i.h"
+%include "gnuradio/blocks/tsb_vector_sink_s.h"
+%include "gnuradio/blocks/throttle.h"
+
+GR_SWIG_BLOCK_MAGIC2(blocks, deinterleave);
+GR_SWIG_BLOCK_MAGIC2(blocks, divide_ff);
+GR_SWIG_BLOCK_MAGIC2(blocks, divide_ss);
+GR_SWIG_BLOCK_MAGIC2(blocks, divide_ii);
+GR_SWIG_BLOCK_MAGIC2(blocks, divide_cc);
+GR_SWIG_BLOCK_MAGIC2(blocks, skiphead);
+GR_SWIG_BLOCK_MAGIC2(blocks, stream_mux);
+GR_SWIG_BLOCK_MAGIC2(blocks, stream_to_streams);
+GR_SWIG_BLOCK_MAGIC2(blocks, stream_to_tagged_stream);
+GR_SWIG_BLOCK_MAGIC2(blocks, stream_to_vector);
+GR_SWIG_BLOCK_MAGIC2(blocks, streams_to_stream);
+GR_SWIG_BLOCK_MAGIC2(blocks, streams_to_vector);
+GR_SWIG_BLOCK_MAGIC2(blocks, tag_debug);
+GR_SWIG_BLOCK_MAGIC2(blocks, tagged_file_sink);
+GR_SWIG_BLOCK_MAGIC2(blocks, tsb_vector_sink_b);
+GR_SWIG_BLOCK_MAGIC2(blocks, tsb_vector_sink_c);
+GR_SWIG_BLOCK_MAGIC2(blocks, tsb_vector_sink_f);
+GR_SWIG_BLOCK_MAGIC2(blocks, tsb_vector_sink_i);
+GR_SWIG_BLOCK_MAGIC2(blocks, tsb_vector_sink_s);
+GR_SWIG_BLOCK_MAGIC2(blocks, throttle);
diff --git a/gr-blocks/swig/blocks_swig8.i b/gr-blocks/swig/blocks_swig8.i
new file mode 100644
index 0000000000..2bf5070bb8
--- /dev/null
+++ b/gr-blocks/swig/blocks_swig8.i
@@ -0,0 +1,93 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2017 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.
+ */
+
+#define BLOCKS_API
+
+%include "gnuradio.i"
+
+//load generated python docstrings
+%include "blocks_swig8_doc.i"
+
+%{
+#include "gnuradio/blocks/abs_ff.h"
+#include "gnuradio/blocks/abs_ss.h"
+#include "gnuradio/blocks/abs_ii.h"
+#include "gnuradio/blocks/add_ff.h"
+#include "gnuradio/blocks/add_ss.h"
+#include "gnuradio/blocks/add_ii.h"
+#include "gnuradio/blocks/add_cc.h"
+#include "gnuradio/blocks/add_const_bb.h"
+#include "gnuradio/blocks/add_const_ff.h"
+#include "gnuradio/blocks/add_const_ss.h"
+#include "gnuradio/blocks/add_const_ii.h"
+#include "gnuradio/blocks/add_const_cc.h"
+#include "gnuradio/blocks/add_const_vbb.h"
+#include "gnuradio/blocks/add_const_vff.h"
+#include "gnuradio/blocks/add_const_vss.h"
+#include "gnuradio/blocks/add_const_vii.h"
+#include "gnuradio/blocks/add_const_vcc.h"
+#include "gnuradio/blocks/and_bb.h"
+#include "gnuradio/blocks/and_ss.h"
+#include "gnuradio/blocks/and_ii.h"
+%}
+
+%include "gnuradio/blocks/abs_ff.h"
+%include "gnuradio/blocks/abs_ss.h"
+%include "gnuradio/blocks/abs_ii.h"
+%include "gnuradio/blocks/add_ff.h"
+%include "gnuradio/blocks/add_ss.h"
+%include "gnuradio/blocks/add_ii.h"
+%include "gnuradio/blocks/add_cc.h"
+%include "gnuradio/blocks/add_const_bb.h"
+%include "gnuradio/blocks/add_const_ff.h"
+%include "gnuradio/blocks/add_const_ss.h"
+%include "gnuradio/blocks/add_const_ii.h"
+%include "gnuradio/blocks/add_const_cc.h"
+%include "gnuradio/blocks/add_const_vbb.h"
+%include "gnuradio/blocks/add_const_vff.h"
+%include "gnuradio/blocks/add_const_vss.h"
+%include "gnuradio/blocks/add_const_vii.h"
+%include "gnuradio/blocks/add_const_vcc.h"
+%include "gnuradio/blocks/and_bb.h"
+%include "gnuradio/blocks/and_ss.h"
+%include "gnuradio/blocks/and_ii.h"
+
+GR_SWIG_BLOCK_MAGIC2(blocks, abs_ff);
+GR_SWIG_BLOCK_MAGIC2(blocks, abs_ss);
+GR_SWIG_BLOCK_MAGIC2(blocks, abs_ii);
+GR_SWIG_BLOCK_MAGIC2(blocks, add_ff);
+GR_SWIG_BLOCK_MAGIC2(blocks, add_ss);
+GR_SWIG_BLOCK_MAGIC2(blocks, add_ii);
+GR_SWIG_BLOCK_MAGIC2(blocks, add_cc);
+GR_SWIG_BLOCK_MAGIC2(blocks, add_const_bb);
+GR_SWIG_BLOCK_MAGIC2(blocks, add_const_ff);
+GR_SWIG_BLOCK_MAGIC2(blocks, add_const_ss);
+GR_SWIG_BLOCK_MAGIC2(blocks, add_const_ii);
+GR_SWIG_BLOCK_MAGIC2(blocks, add_const_cc);
+GR_SWIG_BLOCK_MAGIC2(blocks, add_const_vbb);
+GR_SWIG_BLOCK_MAGIC2(blocks, add_const_vff);
+GR_SWIG_BLOCK_MAGIC2(blocks, add_const_vss);
+GR_SWIG_BLOCK_MAGIC2(blocks, add_const_vii);
+GR_SWIG_BLOCK_MAGIC2(blocks, add_const_vcc);
+GR_SWIG_BLOCK_MAGIC2(blocks, and_bb);
+GR_SWIG_BLOCK_MAGIC2(blocks, and_ss);
+GR_SWIG_BLOCK_MAGIC2(blocks, and_ii);
diff --git a/gr-blocks/swig/blocks_swig9.i b/gr-blocks/swig/blocks_swig9.i
new file mode 100644
index 0000000000..872abd9d46
--- /dev/null
+++ b/gr-blocks/swig/blocks_swig9.i
@@ -0,0 +1,93 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2017 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.
+ */
+
+#define BLOCKS_API
+
+%include "gnuradio.i"
+
+//load generated python docstrings
+%include "blocks_swig9_doc.i"
+
+%{
+#include "gnuradio/blocks/float_to_char.h"
+#include "gnuradio/blocks/float_to_complex.h"
+#include "gnuradio/blocks/magphase_to_complex.h"
+#include "gnuradio/blocks/float_to_int.h"
+#include "gnuradio/blocks/float_to_short.h"
+#include "gnuradio/blocks/float_to_uchar.h"
+#include "gnuradio/blocks/int_to_float.h"
+#include "gnuradio/blocks/integrate_ss.h"
+#include "gnuradio/blocks/integrate_ii.h"
+#include "gnuradio/blocks/integrate_ff.h"
+#include "gnuradio/blocks/integrate_cc.h"
+#include "gnuradio/blocks/interleave.h"
+#include "gnuradio/blocks/interleaved_short_to_complex.h"
+#include "gnuradio/blocks/interleaved_char_to_complex.h"
+#include "gnuradio/blocks/keep_m_in_n.h"
+#include "gnuradio/blocks/keep_one_in_n.h"
+#include "gnuradio/blocks/lfsr_32k_source_s.h"
+#include "gnuradio/blocks/max_ff.h"
+#include "gnuradio/blocks/max_ii.h"
+#include "gnuradio/blocks/max_ss.h"
+%}
+
+%include "gnuradio/blocks/float_to_char.h"
+%include "gnuradio/blocks/float_to_complex.h"
+%include "gnuradio/blocks/magphase_to_complex.h"
+%include "gnuradio/blocks/float_to_int.h"
+%include "gnuradio/blocks/float_to_short.h"
+%include "gnuradio/blocks/float_to_uchar.h"
+%include "gnuradio/blocks/int_to_float.h"
+%include "gnuradio/blocks/integrate_ss.h"
+%include "gnuradio/blocks/integrate_ii.h"
+%include "gnuradio/blocks/integrate_ff.h"
+%include "gnuradio/blocks/integrate_cc.h"
+%include "gnuradio/blocks/interleave.h"
+%include "gnuradio/blocks/interleaved_short_to_complex.h"
+%include "gnuradio/blocks/interleaved_char_to_complex.h"
+%include "gnuradio/blocks/keep_m_in_n.h"
+%include "gnuradio/blocks/keep_one_in_n.h"
+%include "gnuradio/blocks/lfsr_32k_source_s.h"
+%include "gnuradio/blocks/max_ff.h"
+%include "gnuradio/blocks/max_ii.h"
+%include "gnuradio/blocks/max_ss.h"
+
+GR_SWIG_BLOCK_MAGIC2(blocks, float_to_char);
+GR_SWIG_BLOCK_MAGIC2(blocks, float_to_complex);
+GR_SWIG_BLOCK_MAGIC2(blocks, magphase_to_complex);
+GR_SWIG_BLOCK_MAGIC2(blocks, float_to_int);
+GR_SWIG_BLOCK_MAGIC2(blocks, float_to_short);
+GR_SWIG_BLOCK_MAGIC2(blocks, float_to_uchar);
+GR_SWIG_BLOCK_MAGIC2(blocks, int_to_float);
+GR_SWIG_BLOCK_MAGIC2(blocks, integrate_ss);
+GR_SWIG_BLOCK_MAGIC2(blocks, integrate_ii);
+GR_SWIG_BLOCK_MAGIC2(blocks, integrate_ff);
+GR_SWIG_BLOCK_MAGIC2(blocks, integrate_cc);
+GR_SWIG_BLOCK_MAGIC2(blocks, interleave);
+GR_SWIG_BLOCK_MAGIC2(blocks, interleaved_short_to_complex);
+GR_SWIG_BLOCK_MAGIC2(blocks, interleaved_char_to_complex);
+GR_SWIG_BLOCK_MAGIC2(blocks, keep_m_in_n);
+GR_SWIG_BLOCK_MAGIC2(blocks, keep_one_in_n);
+GR_SWIG_BLOCK_MAGIC2(blocks, lfsr_32k_source_s);
+GR_SWIG_BLOCK_MAGIC2(blocks, max_ff);
+GR_SWIG_BLOCK_MAGIC2(blocks, max_ii);
+GR_SWIG_BLOCK_MAGIC2(blocks, max_ss);
diff --git a/gr-digital/grc/variable_header_format_default.xml b/gr-digital/grc/variable_header_format_default.xml
index 55b361f8ca..88727600ed 100644
--- a/gr-digital/grc/variable_header_format_default.xml
+++ b/gr-digital/grc/variable_header_format_default.xml
@@ -10,12 +10,12 @@
<import>from gnuradio import digital</import>
<var_make>
#if int($access_code())==0 #
-self.$(id) = $(id) = digital.header_format_default(digital.packet_utils.default_access_code, $threshold)
+self.$(id) = $(id) = digital.header_format_default(digital.packet_utils.default_access_code, $threshold, $bps)
#else
-self.$(id) = $(id) = digital.header_format_default($access_code, $threshold)
+self.$(id) = $(id) = digital.header_format_default($access_code, $threshold, $bps)
#end if
</var_make>
- <var_value>digital.header_format_default($access_code, $threshold)</var_value>
+ <var_value>digital.header_format_default($access_code, $threshold, $bps)</var_value>
<make></make>
<param>
@@ -32,4 +32,11 @@ self.$(id) = $(id) = digital.header_format_default($access_code, $threshold)
<type>int</type>
</param>
+ <param>
+ <name>Payload Bits per Symbol</name>
+ <key>bps</key>
+ <value>1</value>
+ <type>int</type>
+ </param>
+
</block>
diff --git a/gr-digital/include/gnuradio/digital/header_format_counter.h b/gr-digital/include/gnuradio/digital/header_format_counter.h
index 5eb075afb9..752a9ec775 100644
--- a/gr-digital/include/gnuradio/digital/header_format_counter.h
+++ b/gr-digital/include/gnuradio/digital/header_format_counter.h
@@ -112,7 +112,6 @@ namespace gr {
protected:
uint16_t d_counter; //!< keeps track of the number of packets transmitted
- uint16_t d_bps; //!< bits/sec of payload modulation
//! Verify that the header is valid
bool header_ok();
diff --git a/gr-digital/include/gnuradio/digital/header_format_default.h b/gr-digital/include/gnuradio/digital/header_format_default.h
index 4abd7bb2db..bfea3567f8 100644
--- a/gr-digital/include/gnuradio/digital/header_format_default.h
+++ b/gr-digital/include/gnuradio/digital/header_format_default.h
@@ -82,7 +82,8 @@ namespace gr {
: public header_format_base
{
public:
- header_format_default(const std::string &access_code, int threshold);
+ header_format_default(const std::string &access_code, int threshold,
+ int bps);
virtual ~header_format_default();
/*!
@@ -179,13 +180,18 @@ namespace gr {
* receiver. Can be up to 64-bits long.
* \param threshold How many bits can be wrong in the access
* code and still count as correct.
+ * \param bps The number of bits/second used in the payload's
+ * modulator.
*/
- static sptr make(const std::string &access_code, int threshold);
+ static sptr make(const std::string &access_code, int threshold,
+ int bps = 1);
protected:
uint64_t d_access_code; //!< register to hold the access code
size_t d_access_code_len; //!< length in bits of the access code
+ uint16_t d_bps; //!< bits/sec of payload modulation
+
unsigned long long d_data_reg; //!< used to look for access_code
unsigned long long d_mask; /*!< masks access_code bits (top N bits are set where
N is the number of bits in the access code) */
diff --git a/gr-digital/lib/header_format_counter.cc b/gr-digital/lib/header_format_counter.cc
index 6244ec1679..078d7d4be1 100644
--- a/gr-digital/lib/header_format_counter.cc
+++ b/gr-digital/lib/header_format_counter.cc
@@ -44,9 +44,8 @@ namespace gr {
header_format_counter::header_format_counter(const std::string &access_code,
int threshold, int bps)
- : header_format_default(access_code, threshold)
+ : header_format_default(access_code, threshold, bps)
{
- d_bps = bps;
d_counter = 0;
}
diff --git a/gr-digital/lib/header_format_default.cc b/gr-digital/lib/header_format_default.cc
index 1b7a60e17f..621a801729 100644
--- a/gr-digital/lib/header_format_default.cc
+++ b/gr-digital/lib/header_format_default.cc
@@ -34,16 +34,16 @@ namespace gr {
header_format_default::sptr
header_format_default::make(const std::string &access_code,
- int threshold)
+ int threshold, int bps)
{
return header_format_default::sptr
- (new header_format_default(access_code, threshold));
+ (new header_format_default(access_code, threshold, bps));
}
header_format_default::header_format_default(const std::string &access_code,
- int threshold)
+ int threshold, int bps)
: header_format_base(),
- d_data_reg(0), d_mask(0), d_threshold(0),
+ d_bps(bps), d_data_reg(0), d_mask(0), d_threshold(0),
d_pkt_len(0), d_pkt_count(0), d_nbits(0)
{
if(!set_access_code(access_code)) {
@@ -214,7 +214,7 @@ namespace gr {
d_info = pmt::make_dict();
d_info = pmt::dict_add(d_info, pmt::intern("payload symbols"),
- pmt::from_long(8*len));
+ pmt::from_long(8*len / d_bps));
return static_cast<int>(len);
}
diff --git a/gr-digital/python/digital/qa_packet_format.py b/gr-digital/python/digital/qa_packet_format.py
index 6440b80a5e..ae1a79f1f4 100644
--- a/gr-digital/python/digital/qa_packet_format.py
+++ b/gr-digital/python/digital/qa_packet_format.py
@@ -20,7 +20,7 @@
# Boston, MA 02110-1301, USA.
#
-import random, time, struct
+import time, struct
import pmt
from gnuradio import gr, gr_unittest, digital, blocks
from gnuradio.digital import packet_utils
@@ -80,6 +80,51 @@ class test_packet_format_fb(gr_unittest.TestCase):
self.assertEqual(send_str, payload[0:length])
+ def test_packet_parse_default(self):
+ ac = packet_utils.default_access_code
+ length = '0000000000000001'
+
+ hdr_format_1bps = digital.header_format_default(ac, 0)
+ hdr_format_4bps = digital.header_format_default(ac, 0, 4)
+
+ ac_bits = [int(x) & 1 for x in ac]
+ length_bits = [int(x) & 1 for x in length]
+ header_bits = ac_bits + length_bits + length_bits
+
+ src_hdr = blocks.vector_source_b(header_bits)
+
+ parser_1bps = digital.protocol_parser_b(hdr_format_1bps)
+ parser_4bps = digital.protocol_parser_b(hdr_format_4bps)
+
+ snk_hdr_1bps = blocks.message_debug()
+ snk_hdr_4bps = blocks.message_debug()
+
+ self.tb.connect(src_hdr, parser_1bps)
+ self.tb.connect(src_hdr, parser_4bps)
+
+ self.tb.msg_connect(parser_1bps, 'info', snk_hdr_1bps, 'store')
+ self.tb.msg_connect(parser_4bps, 'info', snk_hdr_4bps, 'store')
+
+ self.tb.start()
+ while (snk_hdr_1bps.num_messages() < 1) and (snk_hdr_4bps.num_messages() < 1):
+ time.sleep(0.1)
+ self.tb.stop()
+ self.tb.wait()
+
+ result_1bps = snk_hdr_1bps.get_message(0)
+ result_4bps = snk_hdr_4bps.get_message(0)
+
+ self.assertTrue(pmt.dict_has_key(
+ result_1bps, pmt.intern('payload symbols')))
+ self.assertEqual(pmt.to_long(pmt.dict_ref(
+ result_1bps, pmt.intern('payload symbols'), pmt.PMT_F)), 8)
+
+ self.assertTrue(pmt.dict_has_key(
+ result_4bps, pmt.intern('payload symbols')))
+ self.assertEqual(pmt.to_long(pmt.dict_ref(
+ result_4bps, pmt.intern('payload symbols'), pmt.PMT_F)), 2)
+
+
def test_packet_format_async_counter(self):
bps = 2
ac = packet_utils.default_access_code
diff --git a/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.cc b/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.cc
index 8fdb8722b6..66aff00fee 100644
--- a/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.cc
+++ b/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.cc
@@ -89,8 +89,8 @@ namespace gr {
for (Z = 0; Z < 16; Z++) {
X = 0;
Y = 0;
- Xp = (XYp & 0b10) >> 1;
- Yp = (XYp & 0b01);
+ Xp = (XYp & 0x02) >> 1;
+ Yp = (XYp & 0x01);
for (i = 0; i < 4; i++) {
diff_precoder((W >> i) & 1, (Z >> i) & 1, &Xp, &Yp);
X |= (Xp << i);
diff --git a/gr-dtv/lib/dvbt2/dvbt2_modulator_bc_impl.cc b/gr-dtv/lib/dvbt2/dvbt2_modulator_bc_impl.cc
index b92738603b..05e3382ef9 100644
--- a/gr-dtv/lib/dvbt2/dvbt2_modulator_bc_impl.cc
+++ b/gr-dtv/lib/dvbt2/dvbt2_modulator_bc_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2017 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -45,6 +45,10 @@ namespace gr {
{
double normalization;
double rotation_angle;
+ double m_16qam_lookup[4] = {3.0, 1.0, -3.0, -1.0};
+ double m_64qam_lookup[8] = {7.0, 5.0, 1.0, 3.0, -7.0, -5.0, -1.0, -3.0};
+ double m_256qam_lookup[16] = {15.0, 13.0, 9.0, 11.0, 1.0, 3.0, 7.0, 5.0, -15.0, -13.0, -9.0, -11.0, -1.0, -3.0, -7.0, -5.0};
+ int real_index, imag_index;
gr_complex temp;
cyclic_delay = FALSE;
if (framesize == FECFRAME_NORMAL) {
@@ -103,22 +107,11 @@ namespace gr {
break;
case MOD_16QAM:
normalization = std::sqrt(10.0);
- m_16qam[0] = gr_complex( 3.0 / normalization, 3.0 / normalization);
- m_16qam[1] = gr_complex( 3.0 / normalization, 1.0 / normalization);
- m_16qam[2] = gr_complex( 1.0 / normalization, 3.0 / normalization);
- m_16qam[3] = gr_complex( 1.0 / normalization, 1.0 / normalization);
- m_16qam[4] = gr_complex( 3.0 / normalization, -3.0 / normalization);
- m_16qam[5] = gr_complex( 3.0 / normalization, -1.0 / normalization);
- m_16qam[6] = gr_complex( 1.0 / normalization, -3.0 / normalization);
- m_16qam[7] = gr_complex( 1.0 / normalization, -1.0 / normalization);
- m_16qam[8] = gr_complex(-3.0 / normalization, 3.0 / normalization);
- m_16qam[9] = gr_complex(-3.0 / normalization, 1.0 / normalization);
- m_16qam[10] = gr_complex(-1.0 / normalization, 3.0 / normalization);
- m_16qam[11] = gr_complex(-1.0 / normalization, 1.0 / normalization);
- m_16qam[12] = gr_complex(-3.0 / normalization, -3.0 / normalization);
- m_16qam[13] = gr_complex(-3.0 / normalization, -1.0 / normalization);
- m_16qam[14] = gr_complex(-1.0 / normalization, -3.0 / normalization);
- m_16qam[15] = gr_complex(-1.0 / normalization, -1.0 / normalization);
+ for (int i = 0; i < 16; i++) {
+ real_index = ((i & 0x8) >> 2) | ((i & 0x2) >> 1);
+ imag_index = ((i & 0x4) >> 1) | ((i & 0x1) >> 0);
+ m_16qam[i] = gr_complex(m_16qam_lookup[real_index] / normalization, m_16qam_lookup[imag_index] / normalization);
+ }
if (rotation == ROTATION_ON) {
cyclic_delay = TRUE;
rotation_angle = (2.0 * M_PI * 16.8) / 360.0;
@@ -130,70 +123,11 @@ namespace gr {
break;
case MOD_64QAM:
normalization = std::sqrt(42.0);
- m_64qam[0] = gr_complex( 7.0 / normalization, 7.0 / normalization);
- m_64qam[1] = gr_complex( 7.0 / normalization, 5.0 / normalization);
- m_64qam[2] = gr_complex( 5.0 / normalization, 7.0 / normalization);
- m_64qam[3] = gr_complex( 5.0 / normalization, 5.0 / normalization);
- m_64qam[4] = gr_complex( 7.0 / normalization, 1.0 / normalization);
- m_64qam[5] = gr_complex( 7.0 / normalization, 3.0 / normalization);
- m_64qam[6] = gr_complex( 5.0 / normalization, 1.0 / normalization);
- m_64qam[7] = gr_complex( 5.0 / normalization, 3.0 / normalization);
- m_64qam[8] = gr_complex( 1.0 / normalization, 7.0 / normalization);
- m_64qam[9] = gr_complex( 1.0 / normalization, 5.0 / normalization);
- m_64qam[10] = gr_complex( 3.0 / normalization, 7.0 / normalization);
- m_64qam[11] = gr_complex( 3.0 / normalization, 5.0 / normalization);
- m_64qam[12] = gr_complex( 1.0 / normalization, 1.0 / normalization);
- m_64qam[13] = gr_complex( 1.0 / normalization, 3.0 / normalization);
- m_64qam[14] = gr_complex( 3.0 / normalization, 1.0 / normalization);
- m_64qam[15] = gr_complex( 3.0 / normalization, 3.0 / normalization);
- m_64qam[16] = gr_complex( 7.0 / normalization, -7.0 / normalization);
- m_64qam[17] = gr_complex( 7.0 / normalization, -5.0 / normalization);
- m_64qam[18] = gr_complex( 5.0 / normalization, -7.0 / normalization);
- m_64qam[19] = gr_complex( 5.0 / normalization, -5.0 / normalization);
- m_64qam[20] = gr_complex( 7.0 / normalization, -1.0 / normalization);
- m_64qam[21] = gr_complex( 7.0 / normalization, -3.0 / normalization);
- m_64qam[22] = gr_complex( 5.0 / normalization, -1.0 / normalization);
- m_64qam[23] = gr_complex( 5.0 / normalization, -3.0 / normalization);
- m_64qam[24] = gr_complex( 1.0 / normalization, -7.0 / normalization);
- m_64qam[25] = gr_complex( 1.0 / normalization, -5.0 / normalization);
- m_64qam[26] = gr_complex( 3.0 / normalization, -7.0 / normalization);
- m_64qam[27] = gr_complex( 3.0 / normalization, -5.0 / normalization);
- m_64qam[28] = gr_complex( 1.0 / normalization, -1.0 / normalization);
- m_64qam[29] = gr_complex( 1.0 / normalization, -3.0 / normalization);
- m_64qam[30] = gr_complex( 3.0 / normalization, -1.0 / normalization);
- m_64qam[31] = gr_complex( 3.0 / normalization, -3.0 / normalization);
- m_64qam[32] = gr_complex(-7.0 / normalization, 7.0 / normalization);
- m_64qam[33] = gr_complex(-7.0 / normalization, 5.0 / normalization);
- m_64qam[34] = gr_complex(-5.0 / normalization, 7.0 / normalization);
- m_64qam[35] = gr_complex(-5.0 / normalization, 5.0 / normalization);
- m_64qam[36] = gr_complex(-7.0 / normalization, 1.0 / normalization);
- m_64qam[37] = gr_complex(-7.0 / normalization, 3.0 / normalization);
- m_64qam[38] = gr_complex(-5.0 / normalization, 1.0 / normalization);
- m_64qam[39] = gr_complex(-5.0 / normalization, 3.0 / normalization);
- m_64qam[40] = gr_complex(-1.0 / normalization, 7.0 / normalization);
- m_64qam[41] = gr_complex(-1.0 / normalization, 5.0 / normalization);
- m_64qam[42] = gr_complex(-3.0 / normalization, 7.0 / normalization);
- m_64qam[43] = gr_complex(-3.0 / normalization, 5.0 / normalization);
- m_64qam[44] = gr_complex(-1.0 / normalization, 1.0 / normalization);
- m_64qam[45] = gr_complex(-1.0 / normalization, 3.0 / normalization);
- m_64qam[46] = gr_complex(-3.0 / normalization, 1.0 / normalization);
- m_64qam[47] = gr_complex(-3.0 / normalization, 3.0 / normalization);
- m_64qam[48] = gr_complex(-7.0 / normalization, -7.0 / normalization);
- m_64qam[49] = gr_complex(-7.0 / normalization, -5.0 / normalization);
- m_64qam[50] = gr_complex(-5.0 / normalization, -7.0 / normalization);
- m_64qam[51] = gr_complex(-5.0 / normalization, -5.0 / normalization);
- m_64qam[52] = gr_complex(-7.0 / normalization, -1.0 / normalization);
- m_64qam[53] = gr_complex(-7.0 / normalization, -3.0 / normalization);
- m_64qam[54] = gr_complex(-5.0 / normalization, -1.0 / normalization);
- m_64qam[55] = gr_complex(-5.0 / normalization, -3.0 / normalization);
- m_64qam[56] = gr_complex(-1.0 / normalization, -7.0 / normalization);
- m_64qam[57] = gr_complex(-1.0 / normalization, -5.0 / normalization);
- m_64qam[58] = gr_complex(-3.0 / normalization, -7.0 / normalization);
- m_64qam[59] = gr_complex(-3.0 / normalization, -5.0 / normalization);
- m_64qam[60] = gr_complex(-1.0 / normalization, -1.0 / normalization);
- m_64qam[61] = gr_complex(-1.0 / normalization, -3.0 / normalization);
- m_64qam[62] = gr_complex(-3.0 / normalization, -1.0 / normalization);
- m_64qam[63] = gr_complex(-3.0 / normalization, -3.0 / normalization);
+ for (int i = 0; i < 64; i++) {
+ real_index = ((i & 0x20) >> 3) | ((i & 0x8) >> 2) | ((i & 0x2) >> 1);
+ imag_index = ((i & 0x10) >> 2) | ((i & 0x4) >> 1) | ((i & 0x1) >> 0);
+ m_64qam[i] = gr_complex(m_64qam_lookup[real_index] / normalization, m_64qam_lookup[imag_index] / normalization);
+ }
if (rotation == ROTATION_ON) {
cyclic_delay = TRUE;
rotation_angle = (2.0 * M_PI * 8.6) / 360.0;
@@ -205,262 +139,11 @@ namespace gr {
break;
case MOD_256QAM:
normalization = std::sqrt(170.0);
- m_256qam[0] = gr_complex( 15 / normalization, 15 / normalization);
- m_256qam[1] = gr_complex( 15 / normalization, 13 / normalization);
- m_256qam[2] = gr_complex( 13 / normalization, 15 / normalization);
- m_256qam[3] = gr_complex( 13 / normalization, 13 / normalization);
- m_256qam[4] = gr_complex( 15 / normalization, 9 / normalization);
- m_256qam[5] = gr_complex( 15 / normalization, 11 / normalization);
- m_256qam[6] = gr_complex( 13 / normalization, 9 / normalization);
- m_256qam[7] = gr_complex( 13 / normalization, 11 / normalization);
- m_256qam[8] = gr_complex( 9 / normalization, 15 / normalization);
- m_256qam[9] = gr_complex( 9 / normalization, 13 / normalization);
- m_256qam[10] = gr_complex( 11 / normalization, 15 / normalization);
- m_256qam[11] = gr_complex( 11 / normalization, 13 / normalization);
- m_256qam[12] = gr_complex( 9 / normalization, 9 / normalization);
- m_256qam[13] = gr_complex( 9 / normalization, 11 / normalization);
- m_256qam[14] = gr_complex( 11 / normalization, 9 / normalization);
- m_256qam[15] = gr_complex( 11 / normalization, 11 / normalization);
- m_256qam[16] = gr_complex( 15 / normalization, 1 / normalization);
- m_256qam[17] = gr_complex( 15 / normalization, 3 / normalization);
- m_256qam[18] = gr_complex( 13 / normalization, 1 / normalization);
- m_256qam[19] = gr_complex( 13 / normalization, 3 / normalization);
- m_256qam[20] = gr_complex( 15 / normalization, 7 / normalization);
- m_256qam[21] = gr_complex( 15 / normalization, 5 / normalization);
- m_256qam[22] = gr_complex( 13 / normalization, 7 / normalization);
- m_256qam[23] = gr_complex( 13 / normalization, 5 / normalization);
- m_256qam[24] = gr_complex( 9 / normalization, 1 / normalization);
- m_256qam[25] = gr_complex( 9 / normalization, 3 / normalization);
- m_256qam[26] = gr_complex( 11 / normalization, 1 / normalization);
- m_256qam[27] = gr_complex( 11 / normalization, 3 / normalization);
- m_256qam[28] = gr_complex( 9 / normalization, 7 / normalization);
- m_256qam[29] = gr_complex( 9 / normalization, 5 / normalization);
- m_256qam[30] = gr_complex( 11 / normalization, 7 / normalization);
- m_256qam[31] = gr_complex( 11 / normalization, 5 / normalization);
- m_256qam[32] = gr_complex( 1 / normalization, 15 / normalization);
- m_256qam[33] = gr_complex( 1 / normalization, 13 / normalization);
- m_256qam[34] = gr_complex( 3 / normalization, 15 / normalization);
- m_256qam[35] = gr_complex( 3 / normalization, 13 / normalization);
- m_256qam[36] = gr_complex( 1 / normalization, 9 / normalization);
- m_256qam[37] = gr_complex( 1 / normalization, 11 / normalization);
- m_256qam[38] = gr_complex( 3 / normalization, 9 / normalization);
- m_256qam[39] = gr_complex( 3 / normalization, 11 / normalization);
- m_256qam[40] = gr_complex( 7 / normalization, 15 / normalization);
- m_256qam[41] = gr_complex( 7 / normalization, 13 / normalization);
- m_256qam[42] = gr_complex( 5 / normalization, 15 / normalization);
- m_256qam[43] = gr_complex( 5 / normalization, 13 / normalization);
- m_256qam[44] = gr_complex( 7 / normalization, 9 / normalization);
- m_256qam[45] = gr_complex( 7 / normalization, 11 / normalization);
- m_256qam[46] = gr_complex( 5 / normalization, 9 / normalization);
- m_256qam[47] = gr_complex( 5 / normalization, 11 / normalization);
- m_256qam[48] = gr_complex( 1 / normalization, 1 / normalization);
- m_256qam[49] = gr_complex( 1 / normalization, 3 / normalization);
- m_256qam[50] = gr_complex( 3 / normalization, 1 / normalization);
- m_256qam[51] = gr_complex( 3 / normalization, 3 / normalization);
- m_256qam[52] = gr_complex( 1 / normalization, 7 / normalization);
- m_256qam[53] = gr_complex( 1 / normalization, 5 / normalization);
- m_256qam[54] = gr_complex( 3 / normalization, 7 / normalization);
- m_256qam[55] = gr_complex( 3 / normalization, 5 / normalization);
- m_256qam[56] = gr_complex( 7 / normalization, 1 / normalization);
- m_256qam[57] = gr_complex( 7 / normalization, 3 / normalization);
- m_256qam[58] = gr_complex( 5 / normalization, 1 / normalization);
- m_256qam[59] = gr_complex( 5 / normalization, 3 / normalization);
- m_256qam[60] = gr_complex( 7 / normalization, 7 / normalization);
- m_256qam[61] = gr_complex( 7 / normalization, 5 / normalization);
- m_256qam[62] = gr_complex( 5 / normalization, 7 / normalization);
- m_256qam[63] = gr_complex( 5 / normalization, 5 / normalization);
- m_256qam[64] = gr_complex( 15 / normalization, -15 / normalization);
- m_256qam[65] = gr_complex( 15 / normalization, -13 / normalization);
- m_256qam[66] = gr_complex( 13 / normalization, -15 / normalization);
- m_256qam[67] = gr_complex( 13 / normalization, -13 / normalization);
- m_256qam[68] = gr_complex( 15 / normalization, -9 / normalization);
- m_256qam[69] = gr_complex( 15 / normalization, -11 / normalization);
- m_256qam[70] = gr_complex( 13 / normalization, -9 / normalization);
- m_256qam[71] = gr_complex( 13 / normalization, -11 / normalization);
- m_256qam[72] = gr_complex( 9 / normalization, -15 / normalization);
- m_256qam[73] = gr_complex( 9 / normalization, -13 / normalization);
- m_256qam[74] = gr_complex( 11 / normalization, -15 / normalization);
- m_256qam[75] = gr_complex( 11 / normalization, -13 / normalization);
- m_256qam[76] = gr_complex( 9 / normalization, -9 / normalization);
- m_256qam[77] = gr_complex( 9 / normalization, -11 / normalization);
- m_256qam[78] = gr_complex( 11 / normalization, -9 / normalization);
- m_256qam[79] = gr_complex( 11 / normalization, -11 / normalization);
- m_256qam[80] = gr_complex( 15 / normalization, -1 / normalization);
- m_256qam[81] = gr_complex( 15 / normalization, -3 / normalization);
- m_256qam[82] = gr_complex( 13 / normalization, -1 / normalization);
- m_256qam[83] = gr_complex( 13 / normalization, -3 / normalization);
- m_256qam[84] = gr_complex( 15 / normalization, -7 / normalization);
- m_256qam[85] = gr_complex( 15 / normalization, -5 / normalization);
- m_256qam[86] = gr_complex( 13 / normalization, -7 / normalization);
- m_256qam[87] = gr_complex( 13 / normalization, -5 / normalization);
- m_256qam[88] = gr_complex( 9 / normalization, -1 / normalization);
- m_256qam[89] = gr_complex( 9 / normalization, -3 / normalization);
- m_256qam[90] = gr_complex( 11 / normalization, -1 / normalization);
- m_256qam[91] = gr_complex( 11 / normalization, -3 / normalization);
- m_256qam[92] = gr_complex( 9 / normalization, -7 / normalization);
- m_256qam[93] = gr_complex( 9 / normalization, -5 / normalization);
- m_256qam[94] = gr_complex( 11 / normalization, -7 / normalization);
- m_256qam[95] = gr_complex( 11 / normalization, -5 / normalization);
- m_256qam[96] = gr_complex( 1 / normalization, -15 / normalization);
- m_256qam[97] = gr_complex( 1 / normalization, -13 / normalization);
- m_256qam[98] = gr_complex( 3 / normalization, -15 / normalization);
- m_256qam[99] = gr_complex( 3 / normalization, -13 / normalization);
- m_256qam[100] = gr_complex( 1 / normalization, -9 / normalization);
- m_256qam[101] = gr_complex( 1 / normalization, -11 / normalization);
- m_256qam[102] = gr_complex( 3 / normalization, -9 / normalization);
- m_256qam[103] = gr_complex( 3 / normalization, -11 / normalization);
- m_256qam[104] = gr_complex( 7 / normalization, -15 / normalization);
- m_256qam[105] = gr_complex( 7 / normalization, -13 / normalization);
- m_256qam[106] = gr_complex( 5 / normalization, -15 / normalization);
- m_256qam[107] = gr_complex( 5 / normalization, -13 / normalization);
- m_256qam[108] = gr_complex( 7 / normalization, -9 / normalization);
- m_256qam[109] = gr_complex( 7 / normalization, -11 / normalization);
- m_256qam[110] = gr_complex( 5 / normalization, -9 / normalization);
- m_256qam[111] = gr_complex( 5 / normalization, -11 / normalization);
- m_256qam[112] = gr_complex( 1 / normalization, -1 / normalization);
- m_256qam[113] = gr_complex( 1 / normalization, -3 / normalization);
- m_256qam[114] = gr_complex( 3 / normalization, -1 / normalization);
- m_256qam[115] = gr_complex( 3 / normalization, -3 / normalization);
- m_256qam[116] = gr_complex( 1 / normalization, -7 / normalization);
- m_256qam[117] = gr_complex( 1 / normalization, -5 / normalization);
- m_256qam[118] = gr_complex( 3 / normalization, -7 / normalization);
- m_256qam[119] = gr_complex( 3 / normalization, -5 / normalization);
- m_256qam[120] = gr_complex( 7 / normalization, -1 / normalization);
- m_256qam[121] = gr_complex( 7 / normalization, -3 / normalization);
- m_256qam[122] = gr_complex( 5 / normalization, -1 / normalization);
- m_256qam[123] = gr_complex( 5 / normalization, -3 / normalization);
- m_256qam[124] = gr_complex( 7 / normalization, -7 / normalization);
- m_256qam[125] = gr_complex( 7 / normalization, -5 / normalization);
- m_256qam[126] = gr_complex( 5 / normalization, -7 / normalization);
- m_256qam[127] = gr_complex( 5 / normalization, -5 / normalization);
- m_256qam[128] = gr_complex(-15 / normalization, 15 / normalization);
- m_256qam[129] = gr_complex(-15 / normalization, 13 / normalization);
- m_256qam[130] = gr_complex(-13 / normalization, 15 / normalization);
- m_256qam[131] = gr_complex(-13 / normalization, 13 / normalization);
- m_256qam[132] = gr_complex(-15 / normalization, 9 / normalization);
- m_256qam[133] = gr_complex(-15 / normalization, 11 / normalization);
- m_256qam[134] = gr_complex(-13 / normalization, 9 / normalization);
- m_256qam[135] = gr_complex(-13 / normalization, 11 / normalization);
- m_256qam[136] = gr_complex( -9 / normalization, 15 / normalization);
- m_256qam[137] = gr_complex( -9 / normalization, 13 / normalization);
- m_256qam[138] = gr_complex(-11 / normalization, 15 / normalization);
- m_256qam[139] = gr_complex(-11 / normalization, 13 / normalization);
- m_256qam[140] = gr_complex( -9 / normalization, 9 / normalization);
- m_256qam[141] = gr_complex( -9 / normalization, 11 / normalization);
- m_256qam[142] = gr_complex(-11 / normalization, 9 / normalization);
- m_256qam[143] = gr_complex(-11 / normalization, 11 / normalization);
- m_256qam[144] = gr_complex(-15 / normalization, 1 / normalization);
- m_256qam[145] = gr_complex(-15 / normalization, 3 / normalization);
- m_256qam[146] = gr_complex(-13 / normalization, 1 / normalization);
- m_256qam[147] = gr_complex(-13 / normalization, 3 / normalization);
- m_256qam[148] = gr_complex(-15 / normalization, 7 / normalization);
- m_256qam[149] = gr_complex(-15 / normalization, 5 / normalization);
- m_256qam[150] = gr_complex(-13 / normalization, 7 / normalization);
- m_256qam[151] = gr_complex(-13 / normalization, 5 / normalization);
- m_256qam[152] = gr_complex( -9 / normalization, 1 / normalization);
- m_256qam[153] = gr_complex( -9 / normalization, 3 / normalization);
- m_256qam[154] = gr_complex(-11 / normalization, 1 / normalization);
- m_256qam[155] = gr_complex(-11 / normalization, 3 / normalization);
- m_256qam[156] = gr_complex( -9 / normalization, 7 / normalization);
- m_256qam[157] = gr_complex( -9 / normalization, 5 / normalization);
- m_256qam[158] = gr_complex(-11 / normalization, 7 / normalization);
- m_256qam[159] = gr_complex(-11 / normalization, 5 / normalization);
- m_256qam[160] = gr_complex( -1 / normalization, 15 / normalization);
- m_256qam[161] = gr_complex( -1 / normalization, 13 / normalization);
- m_256qam[162] = gr_complex( -3 / normalization, 15 / normalization);
- m_256qam[163] = gr_complex( -3 / normalization, 13 / normalization);
- m_256qam[164] = gr_complex( -1 / normalization, 9 / normalization);
- m_256qam[165] = gr_complex( -1 / normalization, 11 / normalization);
- m_256qam[166] = gr_complex( -3 / normalization, 9 / normalization);
- m_256qam[167] = gr_complex( -3 / normalization, 11 / normalization);
- m_256qam[168] = gr_complex( -7 / normalization, 15 / normalization);
- m_256qam[169] = gr_complex( -7 / normalization, 13 / normalization);
- m_256qam[170] = gr_complex( -5 / normalization, 15 / normalization);
- m_256qam[171] = gr_complex( -5 / normalization, 13 / normalization);
- m_256qam[172] = gr_complex( -7 / normalization, 9 / normalization);
- m_256qam[173] = gr_complex( -7 / normalization, 11 / normalization);
- m_256qam[174] = gr_complex( -5 / normalization, 9 / normalization);
- m_256qam[175] = gr_complex( -5 / normalization, 11 / normalization);
- m_256qam[176] = gr_complex( -1 / normalization, 1 / normalization);
- m_256qam[177] = gr_complex( -1 / normalization, 3 / normalization);
- m_256qam[178] = gr_complex( -3 / normalization, 1 / normalization);
- m_256qam[179] = gr_complex( -3 / normalization, 3 / normalization);
- m_256qam[180] = gr_complex( -1 / normalization, 7 / normalization);
- m_256qam[181] = gr_complex( -1 / normalization, 5 / normalization);
- m_256qam[182] = gr_complex( -3 / normalization, 7 / normalization);
- m_256qam[183] = gr_complex( -3 / normalization, 5 / normalization);
- m_256qam[184] = gr_complex( -7 / normalization, 1 / normalization);
- m_256qam[185] = gr_complex( -7 / normalization, 3 / normalization);
- m_256qam[186] = gr_complex( -5 / normalization, 1 / normalization);
- m_256qam[187] = gr_complex( -5 / normalization, 3 / normalization);
- m_256qam[188] = gr_complex( -7 / normalization, 7 / normalization);
- m_256qam[189] = gr_complex( -7 / normalization, 5 / normalization);
- m_256qam[190] = gr_complex( -5 / normalization, 7 / normalization);
- m_256qam[191] = gr_complex( -5 / normalization, 5 / normalization);
- m_256qam[192] = gr_complex(-15 / normalization, -15 / normalization);
- m_256qam[193] = gr_complex(-15 / normalization, -13 / normalization);
- m_256qam[194] = gr_complex(-13 / normalization, -15 / normalization);
- m_256qam[195] = gr_complex(-13 / normalization, -13 / normalization);
- m_256qam[196] = gr_complex(-15 / normalization, -9 / normalization);
- m_256qam[197] = gr_complex(-15 / normalization, -11 / normalization);
- m_256qam[198] = gr_complex(-13 / normalization, -9 / normalization);
- m_256qam[199] = gr_complex(-13 / normalization, -11 / normalization);
- m_256qam[200] = gr_complex( -9 / normalization, -15 / normalization);
- m_256qam[201] = gr_complex( -9 / normalization, -13 / normalization);
- m_256qam[202] = gr_complex(-11 / normalization, -15 / normalization);
- m_256qam[203] = gr_complex(-11 / normalization, -13 / normalization);
- m_256qam[204] = gr_complex( -9 / normalization, -9 / normalization);
- m_256qam[205] = gr_complex( -9 / normalization, -11 / normalization);
- m_256qam[206] = gr_complex(-11 / normalization, -9 / normalization);
- m_256qam[207] = gr_complex(-11 / normalization, -11 / normalization);
- m_256qam[208] = gr_complex(-15 / normalization, -1 / normalization);
- m_256qam[209] = gr_complex(-15 / normalization, -3 / normalization);
- m_256qam[210] = gr_complex(-13 / normalization, -1 / normalization);
- m_256qam[211] = gr_complex(-13 / normalization, -3 / normalization);
- m_256qam[212] = gr_complex(-15 / normalization, -7 / normalization);
- m_256qam[213] = gr_complex(-15 / normalization, -5 / normalization);
- m_256qam[214] = gr_complex(-13 / normalization, -7 / normalization);
- m_256qam[215] = gr_complex(-13 / normalization, -5 / normalization);
- m_256qam[216] = gr_complex( -9 / normalization, -1 / normalization);
- m_256qam[217] = gr_complex( -9 / normalization, -3 / normalization);
- m_256qam[218] = gr_complex(-11 / normalization, -1 / normalization);
- m_256qam[219] = gr_complex(-11 / normalization, -3 / normalization);
- m_256qam[220] = gr_complex( -9 / normalization, -7 / normalization);
- m_256qam[221] = gr_complex( -9 / normalization, -5 / normalization);
- m_256qam[222] = gr_complex(-11 / normalization, -7 / normalization);
- m_256qam[223] = gr_complex(-11 / normalization, -5 / normalization);
- m_256qam[224] = gr_complex( -1 / normalization, -15 / normalization);
- m_256qam[225] = gr_complex( -1 / normalization, -13 / normalization);
- m_256qam[226] = gr_complex( -3 / normalization, -15 / normalization);
- m_256qam[227] = gr_complex( -3 / normalization, -13 / normalization);
- m_256qam[228] = gr_complex( -1 / normalization, -9 / normalization);
- m_256qam[229] = gr_complex( -1 / normalization, -11 / normalization);
- m_256qam[230] = gr_complex( -3 / normalization, -9 / normalization);
- m_256qam[231] = gr_complex( -3 / normalization, -11 / normalization);
- m_256qam[232] = gr_complex( -7 / normalization, -15 / normalization);
- m_256qam[233] = gr_complex( -7 / normalization, -13 / normalization);
- m_256qam[234] = gr_complex( -5 / normalization, -15 / normalization);
- m_256qam[235] = gr_complex( -5 / normalization, -13 / normalization);
- m_256qam[236] = gr_complex( -7 / normalization, -9 / normalization);
- m_256qam[237] = gr_complex( -7 / normalization, -11 / normalization);
- m_256qam[238] = gr_complex( -5 / normalization, -9 / normalization);
- m_256qam[239] = gr_complex( -5 / normalization, -11 / normalization);
- m_256qam[240] = gr_complex( -1 / normalization, -1 / normalization);
- m_256qam[241] = gr_complex( -1 / normalization, -3 / normalization);
- m_256qam[242] = gr_complex( -3 / normalization, -1 / normalization);
- m_256qam[243] = gr_complex( -3 / normalization, -3 / normalization);
- m_256qam[244] = gr_complex( -1 / normalization, -7 / normalization);
- m_256qam[245] = gr_complex( -1 / normalization, -5 / normalization);
- m_256qam[246] = gr_complex( -3 / normalization, -7 / normalization);
- m_256qam[247] = gr_complex( -3 / normalization, -5 / normalization);
- m_256qam[248] = gr_complex( -7 / normalization, -1 / normalization);
- m_256qam[249] = gr_complex( -7 / normalization, -3 / normalization);
- m_256qam[250] = gr_complex( -5 / normalization, -1 / normalization);
- m_256qam[251] = gr_complex( -5 / normalization, -3 / normalization);
- m_256qam[252] = gr_complex( -7 / normalization, -7 / normalization);
- m_256qam[253] = gr_complex( -7 / normalization, -5 / normalization);
- m_256qam[254] = gr_complex( -5 / normalization, -7 / normalization);
- m_256qam[255] = gr_complex( -5 / normalization, -5 / normalization);
+ for (int i = 0; i < 256; i++) {
+ real_index = ((i & 0x80) >> 4) | ((i & 0x20) >> 3) | ((i & 0x8) >> 2) | ((i & 0x2) >> 1);
+ imag_index = ((i & 0x40) >> 3) | ((i & 0x10) >> 2) | ((i & 0x4) >> 1) | ((i & 0x1) >> 0);
+ m_256qam[i] = gr_complex(m_256qam_lookup[real_index] / normalization, m_256qam_lookup[imag_index] / normalization);
+ }
if (rotation == ROTATION_ON) {
cyclic_delay = TRUE;
rotation_angle = (2.0 * M_PI * 3.576334375) / 360.0;
diff --git a/gr-fec/include/gnuradio/fec/polar_decoder_common.h b/gr-fec/include/gnuradio/fec/polar_decoder_common.h
index 13b25ea19b..c160f4b871 100644
--- a/gr-fec/include/gnuradio/fec/polar_decoder_common.h
+++ b/gr-fec/include/gnuradio/fec/polar_decoder_common.h
@@ -28,10 +28,6 @@
#include <gnuradio/fec/generic_decoder.h>
#include <gnuradio/fec/polar_common.h>
-#ifndef BOOST_CONSTEXPR_OR_CONST
-#define BOOST_CONSTEXPR_OR_CONST const
-#endif
-
namespace gr {
namespace fec {
namespace code {
@@ -68,7 +64,7 @@ namespace gr {
bool set_frame_size(unsigned int frame_size){return false;};
private:
- static BOOST_CONSTEXPR_OR_CONST float D_LLR_FACTOR;
+ static const float D_LLR_FACTOR;
unsigned int d_frozen_bit_counter;
protected:
diff --git a/gr-uhd/apps/uhd_app.py b/gr-uhd/apps/uhd_app.py
index f9b08a6457..f4b6da67c3 100644
--- a/gr-uhd/apps/uhd_app.py
+++ b/gr-uhd/apps/uhd_app.py
@@ -106,43 +106,22 @@ class UHDApp(object):
except:
return "Can't establish USRP info."
- def normalize_antenna_sel(self, args):
+ def normalize_sel(self, num_name, arg_name, num, arg):
"""
- Make sure the --antenna option matches the --channels option.
+ num_name: meaningful name why we need num arguments
+ arg_name: name of current argument
+ num: required number of arguments
+ arg: actual argument
"""
- if args.antenna is None:
- return None
- antennas = [x.strip() for x in args.antenna.split(",")]
- if len(antennas) != 1 and len(antennas) != len(args.channels):
- raise ValueError("Invalid antenna setting for {n} channels: {a}".format(
- n=len(self.channels), a=args.antenna,
- ))
- if len(antennas) == 1:
- antennas = [antennas[0],] * len(args.channels)
- return antennas
- def normalize_subdev_sel(self, spec):
- """
- """
- if spec is None:
+ if arg is None:
return None
- specs = [x.strip() for x in spec.split(",")]
- if len(specs) == 1:
- return spec
- elif len(specs) != self.usrp.get_num_mboards():
- raise ValueError("Invalid subdev setting for {n} mboards: {a}".format(
- n=len(self.usrp.get_num_mboards()), a=spec
+ args = [x.strip() for x in arg.split(",")]
+ if len(args) != num:
+ raise ValueError("Invalid {m} setting for {n} {b}: {a}".format(
+ m=arg_name, n=num, a=arg, b=num_name
))
- return specs
-
- def normalize_lo_source_export_sel(self, args):
- lo_source = [x.strip() for x in args.lo_source.split(",")]
- lo_export = [x.strip() for x in args.lo_export.split(",")]
- if len(lo_source) != len(self.channels):
- raise ValueError("Invalid number of lo-source settings {n} for {c} channels. Must be one argument per channel.".format(n=len(lo_source), c=len(args.channels)))
- if len(lo_export) != len(self.channels):
- raise ValueError("Invalid number of lo-export settings {n} for {c} channels. Must be one argument per channel.".format(n=len(lo_source), c=len(args.channels)))
- return (lo_source, lo_export)
+ return args
def async_callback(self, msg):
"""
@@ -174,27 +153,40 @@ class UHDApp(object):
)
)
# Set the subdevice spec:
- args.spec = self.normalize_subdev_sel(args.spec)
+ args.spec = self.normalize_sel("mboards", "subdev",
+ self.usrp.get_num_mboards(), args.spec)
if args.spec:
for mb_idx in xrange(self.usrp.get_num_mboards()):
- if isinstance(args.spec, list):
- self.usrp.set_subdev_spec(args.spec[mb_idx], mb_idx)
- else:
+ if len(args.spec) == 1:
self.usrp.set_subdev_spec(args.spec, mb_idx)
+ else:
+ self.usrp.set_subdev_spec(args.spec[mb_idx], mb_idx)
# Set the clock and/or time source:
if args.clock_source is not None:
+ args.clock_source = self.normalize_sel("mboards", "clock-source",
+ self.usrp.get_num_mboards(), args.clock_source)
for mb_idx in xrange(self.usrp.get_num_mboards()):
- self.usrp.set_clock_source(args.clock_source, mb_idx)
+ if len(args.time_source) == 1:
+ self.usrp.set_clock_source(args.clock_source[0], mb_idx)
+ else:
+ self.usrp.set_clock_source(args.clock_source[mb_idx], mb_idx)
if args.time_source is not None:
+ args.time_source = self.normalize_sel("mboards", "time-source",
+ self.usrp.get_num_mboards(), args.time_source)
for mb_idx in xrange(self.usrp.get_num_mboards()):
- self.usrp.set_time_source(args.time_source, mb_idx)
+ if len(args.time_source) == 1:
+ self.usrp.set_time_source(args.time_source[0], mb_idx)
+ else:
+ self.usrp.set_time_source(args.time_source[mb_idx], mb_idx)
# Sampling rate:
self.usrp.set_samp_rate(args.samp_rate)
self.samp_rate = self.usrp.get_samp_rate()
self.vprint("Using sampling rate: {rate}".format(rate=self.samp_rate))
# Set the antenna:
- self.antenna = self.normalize_antenna_sel(args)
+ self.antenna = self.normalize_sel("channels", "antenna", len(args.channels), args.antenna)
if self.antenna is not None:
+ if len(self.antenna) == 1:
+ self.antenna = [self.antenna, ] * len(args.channels)
for i, chan in enumerate(self.channels):
if not self.antenna[i] in self.usrp.get_antennas(i):
self.vprint("[ERROR] {} is not a valid antenna name for this USRP device!".format(self.antenna[i]))
@@ -215,7 +207,8 @@ class UHDApp(object):
self.has_lo_sensor = 'lo_locked' in self.usrp.get_sensor_names()
# Set LO export and LO source operation
if (args.lo_export is not None) and (args.lo_source is not None):
- (args.lo_source,args.lo_export) = self.normalize_lo_source_export_sel(args)
+ args.lo_source = self.normalize_sel("channels", "lo-source", len(args.channels), args.lo_source)
+ args.lo_export = self.normalize_sel("channels", "lo-export", len(args.channels), args.lo_export)
for chan,lo_source,lo_export in zip(self.channels,args.lo_source,args.lo_export):
if (lo_source == "None") or (lo_export == "None"):
continue
diff --git a/gr-uhd/apps/uhd_fft b/gr-uhd/apps/uhd_fft
index b65bb7a062..1f0cf1cda5 100755
--- a/gr-uhd/apps/uhd_fft
+++ b/gr-uhd/apps/uhd_fft
@@ -98,6 +98,7 @@ class uhd_fft(gr.top_block, Qt.QWidget, UHDApp):
self.stream_args = args.stream_args
self.update_rate = args.update_rate
self.wire_format = args.otw_format
+ self.lo_offset = args.lo_offset
##################################################
# Variables
@@ -128,7 +129,7 @@ class uhd_fft(gr.top_block, Qt.QWidget, UHDApp):
self.setup_usrp(uhd.usrp_source, args)
self._ant_options = self.usrp.get_antennas(0)
for c in range(len(self.channels)):
- self.usrp.set_bandwidth(self.samp_rate, c)
+ self.usrp.set_bandwidth(self.samp_rate + abs(self.lo_offset), c)
self.usrp_device_info = self.get_usrp_info_string(compact=True, tx_or_rx='rx')
### Now set up the GUI widgets: #####################################
@@ -431,7 +432,7 @@ class uhd_fft(gr.top_block, Qt.QWidget, UHDApp):
self.qtgui_waterfall_sink_x_0.set_frequency_range(self.freq, self.samp_rate)
self.usrp.set_samp_rate(self.samp_rate)
for c in range(len(self.channels)):
- self.usrp.set_bandwidth(self.samp_rate, c)
+ self.usrp.set_bandwidth(self.samp_rate + abs(self.lo_offset), c)
def set_lo_locked_probe(self, lo_locked_probe):
self.lo_locked_probe = lo_locked_probe
diff --git a/gr-uhd/apps/uhd_rx_cfile b/gr-uhd/apps/uhd_rx_cfile
index f76dc2ed68..2a1ed0fcb5 100755
--- a/gr-uhd/apps/uhd_rx_cfile
+++ b/gr-uhd/apps/uhd_rx_cfile
@@ -108,7 +108,10 @@ class rx_cfile_block(gr.top_block):
print("[UHD_RX] Channel {chan} gain: {g} dB".format(chan=chan, g=self._u.get_gain(chan)))
else:
for chan in self.channels:
- self._u.set_gain(options.gain, chan)
+ if options.normalized_gain:
+ self._u.set_normalized_gain(options.gain, chan)
+ else:
+ self._u.set_gain(options.gain, chan)
gain = self._u.get_gain(self.channels[0])
# Set frequency (tune request takes lo_offset):
if options.lo_offset is not None:
diff --git a/gr-uhd/lib/usrp_source_impl.cc b/gr-uhd/lib/usrp_source_impl.cc
index 11b6300406..23b94c684f 100644
--- a/gr-uhd/lib/usrp_source_impl.cc
+++ b/gr-uhd/lib/usrp_source_impl.cc
@@ -79,7 +79,6 @@ namespace gr {
_id = pmt::string_to_symbol(str.str());
_samp_rate = this->get_samp_rate();
- _center_freq = this->get_center_freq(0);
#ifdef GR_UHD_USE_STREAM_API
_samps_per_packet = 1;
#endif
@@ -144,10 +143,8 @@ namespace gr {
usrp_source_impl::set_center_freq(const ::uhd::tune_request_t tune_request,
size_t chan)
{
- const size_t user_chan = chan;
chan = _stream_args.channels[chan];
const ::uhd::tune_result_t res = _dev->set_rx_freq(tune_request, chan);
- _center_freq = this->get_center_freq(user_chan);
_tag_now = true;
return res;
}
@@ -657,7 +654,7 @@ namespace gr {
this->add_item_tag(i, nitems_written(0), RATE_KEY,
pmt::from_double(_samp_rate), _id);
this->add_item_tag(i, nitems_written(0), FREQ_KEY,
- pmt::from_double(_center_freq), _id);
+ pmt::from_double(this->get_center_freq(i)), _id);
}
}
break;
diff --git a/gr-uhd/lib/usrp_source_impl.h b/gr-uhd/lib/usrp_source_impl.h
index ab0f5c62c4..7ee5a138d4 100644
--- a/gr-uhd/lib/usrp_source_impl.h
+++ b/gr-uhd/lib/usrp_source_impl.h
@@ -135,7 +135,6 @@ namespace gr {
//tag shadows
double _samp_rate;
- double _center_freq;
boost::recursive_mutex d_mutex;
};
diff --git a/gr-utils/python/modtool/gr-newmod/cmake/Modules/UseSWIG.cmake b/gr-utils/python/modtool/gr-newmod/cmake/Modules/UseSWIG.cmake
index c0f172870b..b7e3e05dc5 100644
--- a/gr-utils/python/modtool/gr-newmod/cmake/Modules/UseSWIG.cmake
+++ b/gr-utils/python/modtool/gr-newmod/cmake/Modules/UseSWIG.cmake
@@ -224,9 +224,9 @@ print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
foreach(swig_gen_file ${${outfiles}})
add_custom_command(
OUTPUT ${swig_gen_file}
- COMMAND ""
+ COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
DEPENDS ${_target}
- COMMENT ""
+ COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
)
endforeach()
diff --git a/grc/core/Port.py b/grc/core/Port.py
index f740a69809..acf4eea3d4 100644
--- a/grc/core/Port.py
+++ b/grc/core/Port.py
@@ -168,7 +168,8 @@ class Port(Element):
self._nports = n.find('nports') or ''
self._vlen = n.find('vlen') or ''
- self._optional = bool(n.find('optional'))
+ self._optional = n.find('optional') or ''
+ self._optional_evaluated = False # Updated on rewrite()
self._clones = [] # References to cloned ports (for nports > 1)
def __str__(self):
@@ -208,6 +209,8 @@ class Port(Element):
hide = self.get_parent().resolve_dependencies(self._hide).strip().lower()
self._hide_evaluated = False if hide in ('false', 'off', '0') else bool(hide)
+ optional = self.get_parent().resolve_dependencies(self._optional).strip().lower()
+ self._optional_evaluated = False if optional in ('false', 'off', '0') else bool(optional)
# Update domain if was deduced from (dynamic) port type
type_ = self.get_type()
@@ -272,7 +275,7 @@ class Port(Element):
return 1
def get_optional(self):
- return bool(self._optional)
+ return self._optional_evaluated
def get_color(self):
"""
diff --git a/grc/gui/ActionHandler.py b/grc/gui/ActionHandler.py
index b9f534fdf0..5d48485238 100644
--- a/grc/gui/ActionHandler.py
+++ b/grc/gui/ActionHandler.py
@@ -131,6 +131,7 @@ class ActionHandler:
for action in (
Actions.APPLICATION_QUIT, Actions.FLOW_GRAPH_NEW,
Actions.FLOW_GRAPH_OPEN, Actions.FLOW_GRAPH_SAVE_AS,
+ Actions.FLOW_GRAPH_DUPLICATE, Actions.FLOW_GRAPH_SAVE_A_COPY,
Actions.FLOW_GRAPH_CLOSE, Actions.ABOUT_WINDOW_DISPLAY,
Actions.FLOW_GRAPH_SCREEN_CAPTURE, Actions.HELP_WINDOW_DISPLAY,
Actions.TYPES_WINDOW_DISPLAY, Actions.TOGGLE_BLOCKS_WINDOW,
@@ -561,6 +562,32 @@ class ActionHandler:
Preferences.add_recent_file(file_path)
main.tool_bar.refresh_submenus()
main.menu_bar.refresh_submenus()
+ elif action == Actions.FLOW_GRAPH_SAVE_A_COPY:
+ try:
+ if not page.get_file_path():
+ Actions.FLOW_GRAPH_SAVE_AS()
+ else:
+ dup_file_path = page.get_file_path()
+ dup_file_name = '.'.join(dup_file_path.split('.')[:-1]) + "_copy" # Assuming .grc extension at the end of file_path
+ dup_file_path_temp = dup_file_name+'.grc'
+ count = 1
+ while os.path.exists(dup_file_path_temp):
+ dup_file_path_temp = dup_file_name+'('+str(count)+').grc'
+ count += 1
+ dup_file_path_user = SaveFlowGraphFileDialog(dup_file_path_temp).run()
+ if dup_file_path_user is not None:
+ ParseXML.to_file(flow_graph.export_data(), dup_file_path_user)
+ Messages.send('Saved Copy to: "' + dup_file_path_user + '"\n')
+ except IOError:
+ Messages.send_fail_save("Can not create a copy of the flowgraph\n")
+ elif action == Actions.FLOW_GRAPH_DUPLICATE:
+ flow_graph = main.get_flow_graph()
+ main.new_page()
+ curr_page = main.get_page()
+ new_flow_graph = main.get_flow_graph()
+ new_flow_graph.import_data(flow_graph.export_data())
+ flow_graph_update(new_flow_graph)
+ curr_page.set_saved(False)
elif action == Actions.FLOW_GRAPH_SCREEN_CAPTURE:
file_path, background_transparent = SaveScreenShotDialog(page.get_file_path()).run()
if file_path is not None:
diff --git a/grc/gui/Actions.py b/grc/gui/Actions.py
index 9b2af36b93..6eccab75fb 100644
--- a/grc/gui/Actions.py
+++ b/grc/gui/Actions.py
@@ -203,6 +203,16 @@ FLOW_GRAPH_SAVE_AS = Action(
stock_id=gtk.STOCK_SAVE_AS,
keypresses=(gtk.keysyms.s, gtk.gdk.CONTROL_MASK | gtk.gdk.SHIFT_MASK),
)
+FLOW_GRAPH_SAVE_A_COPY = Action(
+ label='Save A Copy',
+ tooltip='Save the copy of current flowgraph',
+)
+FLOW_GRAPH_DUPLICATE = Action(
+ label='_Duplicate',
+ tooltip='Create a duplicate of current flowgraph',
+ stock_id=gtk.STOCK_COPY,
+ keypresses=(gtk.keysyms.d, gtk.gdk.CONTROL_MASK | gtk.gdk.SHIFT_MASK),
+)
FLOW_GRAPH_CLOSE = Action(
label='_Close',
tooltip='Close the current flow graph',
diff --git a/grc/gui/Bars.py b/grc/gui/Bars.py
index a4819b973c..d9bc2aedb7 100644
--- a/grc/gui/Bars.py
+++ b/grc/gui/Bars.py
@@ -64,11 +64,13 @@ TOOLBAR_LIST = (
MENU_BAR_LIST = (
(gtk.Action('File', '_File', None, None), [
'flow_graph_new',
+ Actions.FLOW_GRAPH_DUPLICATE,
Actions.FLOW_GRAPH_OPEN,
'flow_graph_recent',
None,
Actions.FLOW_GRAPH_SAVE,
Actions.FLOW_GRAPH_SAVE_AS,
+ Actions.FLOW_GRAPH_SAVE_A_COPY,
None,
Actions.FLOW_GRAPH_SCREEN_CAPTURE,
None,