diff options
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 © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + <<a href="http://fsf.org/">http://fsf.org/</a>> + </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 "free" 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 "copyleft", 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 "Document", below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as "you". You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law.</p> + +<p>A "Modified Version" 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 "Secondary Section" 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 "Invariant Sections" 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 "Cover Texts" 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 "Transparent" 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 "Transparent" is called "Opaque".</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 "Title Page" 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, "Title Page" 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 "publisher" means any person or entity that distributes copies of +the Document to the public.</p> + +<p>A section "Entitled XYZ" 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 "Acknowledgements", +"Dedications", "Endorsements", or "History".) To "Preserve the Title" +of such a section when you modify the Document means that it remains a +section "Entitled XYZ" 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 "History", 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 "History" 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 "History" 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 "Acknowledgements" or "Dedications", + 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 "Endorsements". Such a section + may not be included in the Modified Version. +</li> + +<li>N. Do not retitle any existing section to be Entitled "Endorsements" + 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 "Endorsements", provided it contains +nothing but endorsements of your Modified Version by various +parties—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 "History" +in the various original documents, forming one section Entitled +"History"; likewise combine any sections Entitled "Acknowledgements", +and any sections Entitled "Dedications". You must delete all sections +Entitled "Endorsements".</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 "aggregate" 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 "Acknowledgements", +"Dedications", or "History", 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 "or any later version" 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>"Massive Multiauthor Collaboration Site" (or "MMC Site") 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 +"Massive Multiauthor Collaboration" (or "MMC") contained in the site +means any set of copyrightable works thus published on the MMC site.</p> + +<p>"CC-BY-SA" 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>"Incorporate" means to publish or republish a Document, in whole or in +part, as part of another Document.</p> + +<p>An MMC is "eligible for relicensing" 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 "GNU + Free Documentation License". +</pre> + +<p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the "with … Texts." 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, |