Github messages for voidlinux
 help / color / mirror / Atom feed
* [PR PATCH] gnuradio: update to 3.9.5.0.
@ 2022-01-14 16:25 unspecd
  2022-01-14 20:34 ` unspecd
                   ` (64 more replies)
  0 siblings, 65 replies; 66+ messages in thread
From: unspecd @ 2022-01-14 16:25 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1165 bytes --]

There is a new pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.9.5.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 9655 bytes --]

From 96af4fdbba9fbb0004ecb259001c4612ff8e39ea Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH] gnuradio: update to 3.9.5.0.

---
 common/shlibs                                 | 36 ++++++++++---------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 18 ----------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 ---------------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ----------------
 srcpkgs/gnuradio/template                     | 34 +++++++++++-------
 5 files changed, 42 insertions(+), 105 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index c4b2c348f6f3..2da9f96786ba 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3240,22 +3240,26 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-pmt.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-blocks.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-audio.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-fec.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-fft.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-filter.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-analog.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-digital.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-dtv.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-channels.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-trellis.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-video-sdl.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-vocoder.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-wavelet.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-uhd.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-network.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-soapy.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-qtgui.so.3.9.5 gnuradio-3.9.5.0_1
+libgnuradio-zeromq.so.3.9.5 gnuradio-3.9.5.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
index 51952bd29b38..676f631ebf5d 100644
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
@@ -26,21 +26,3 @@ index 884bba7dd4b..44f616cdae1 100644
      def test01(self):
          a = pmt.intern("a")
          b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..18ecf1575160 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,38 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.9.5.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+# -DGR_PYTHON_DIR=/${py3_sitelib}
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+# TODO: add python3-pygccxml (not packaged in Void)
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen swig python3-Sphinx python3-pybind11 ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libsndfile-devel libsodium-devel libusb-devel
+ log4cpp-devel mpir-devel python3-devel python3-gobject-devel python3-pybind11 qwt-devel
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=066c88fcf05046593e534416a3526ee433c3b90a7faa40fca914add23989ef3e
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.9.5.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
@ 2022-01-14 20:34 ` unspecd
  2022-01-14 20:36 ` unspecd
                   ` (63 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-14 20:34 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 323 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1013455730

Comment:
GrSwig is deprecated in 3.9, so gnuradio-osmosdr cannot be revbumped. Here are similar issues:
- gnuradio/gr-bokehgui/issues/34
- https://github.com/troycurtisjr/gr-pager/issues/8

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.9.5.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
  2022-01-14 20:34 ` unspecd
@ 2022-01-14 20:36 ` unspecd
  2022-01-15  5:04 ` [PR PATCH] [Updated] " unspecd
                   ` (62 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-14 20:36 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 375 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1013455730

Comment:
GrSwig is deprecated in 3.9, so gnuradio-osmosdr cannot be revbumped. Here are similar issues:
- gnuradio/gr-bokehgui/issues/34
- https://github.com/ptrkrysik/gr-gsm/issues/582
- https://github.com/troycurtisjr/gr-pager/issues/8


^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.9.5.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
  2022-01-14 20:34 ` unspecd
  2022-01-14 20:36 ` unspecd
@ 2022-01-15  5:04 ` unspecd
  2022-01-15  6:34 ` [PR PATCH] [Updated] gnuradio: update to 3.10.0.0 unspecd
                   ` (61 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-15  5:04 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1180 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.9.5.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 12759 bytes --]

From 469524b1b9b0598d4d78058b608449959bbcb350 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/2] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index c4b2c348f6f3..96ba87e335af 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4098,3 +4098,4 @@ libkmailconfirmbeforedeleting.so.5 kdepim-addons-21.08.3_1
 libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 3d135534d47263eb12c4ed80f93985ad228dfc91 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 2/2] gnuradio: update to 3.10.0.0.

---
 common/shlibs                                 | 38 +++++++++++--------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 18 ---------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 --------------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ---------------
 srcpkgs/gnuradio/template                     | 34 +++++++++++------
 5 files changed, 44 insertions(+), 105 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index 96ba87e335af..52f9f51df89a 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3240,22 +3240,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pmt.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-blocks.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-audio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fec.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fft.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-filter.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-analog.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-digital.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-dtv.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-channels.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-trellis.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-video-sdl.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-vocoder.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-wavelet.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-uhd.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-network.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-soapy.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-qtgui.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-zeromq.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-iio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pdu.so.3.10.0 gnuradio-3.10.0.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
index 51952bd29b38..676f631ebf5d 100644
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
@@ -26,21 +26,3 @@ index 884bba7dd4b..44f616cdae1 100644
      def test01(self):
          a = pmt.intern("a")
          b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..8fa56e944b7e 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,38 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.0.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+# -DGR_PYTHON_DIR=/${py3_sitelib}
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+# TODO: add python3-pygccxml (not packaged in Void)
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen swig python3-Sphinx python3-pybind11 ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel libsodium-devel
+ libusb-devel mpir-devel python3-devel python3-gobject-devel python3-pybind11 spdlog qwt-devel
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=25535fb64d2541ec95325c3f901e2eb71ab794c5b53b9e97894d2d48bbd966da
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (2 preceding siblings ...)
  2022-01-15  5:04 ` [PR PATCH] [Updated] " unspecd
@ 2022-01-15  6:34 ` unspecd
  2022-01-15  6:38 ` unspecd
                   ` (60 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-15  6:34 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1181 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.0.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 12873 bytes --]

From 9ac61e1412d04881268bc908b777adb957be0016 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/2] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index d35944228287..ae32d2fe7038 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4098,3 +4098,4 @@ libkmailconfirmbeforedeleting.so.5 kdepim-addons-21.08.3_1
 libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 9d5a75a740c0ea7e72b0d8375b004de25ca7bfd9 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 2/2] gnuradio: update to 3.10.0.0.

---
 common/shlibs                                 | 38 +++++++++++--------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 18 ---------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 --------------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ---------------
 srcpkgs/gnuradio/template                     | 37 ++++++++++++------
 5 files changed, 47 insertions(+), 105 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index ae32d2fe7038..4b6887d5bed9 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3240,22 +3240,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pmt.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-blocks.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-audio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fec.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fft.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-filter.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-analog.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-digital.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-dtv.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-channels.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-trellis.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-video-sdl.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-vocoder.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-wavelet.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-uhd.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-network.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-soapy.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-qtgui.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-zeromq.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-iio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pdu.so.3.10.0 gnuradio-3.10.0.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
index 51952bd29b38..676f631ebf5d 100644
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
@@ -26,21 +26,3 @@ index 884bba7dd4b..44f616cdae1 100644
      def test01(self):
          a = pmt.intern("a")
          b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..fd4edf336a9a 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,41 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.0.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+# TODO: add python3-pygccxml (not packaged in Void)
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen python3-Sphinx python3-pybind11 ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel libsodium-devel
+ libusb-devel mpir-devel python3-devel python3-gobject-devel python3-pybind11 qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=25535fb64d2541ec95325c3f901e2eb71ab794c5b53b9e97894d2d48bbd966da
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (3 preceding siblings ...)
  2022-01-15  6:34 ` [PR PATCH] [Updated] gnuradio: update to 3.10.0.0 unspecd
@ 2022-01-15  6:38 ` unspecd
  2022-01-15  6:45 ` unspecd
                   ` (59 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-15  6:38 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 406 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1013455730

Comment:
GrSwig is deprecated in 3.9, so `gnuradio-nrsc5`, `gnuradio-osmosdr` and `gqrx` cannot be revbumped. Here are similar issues:
- gnuradio/gr-bokehgui/issues/34
- https://github.com/ptrkrysik/gr-gsm/issues/582
- https://github.com/troycurtisjr/gr-pager/issues/8


^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (4 preceding siblings ...)
  2022-01-15  6:38 ` unspecd
@ 2022-01-15  6:45 ` unspecd
  2022-01-15  6:55 ` [PR PATCH] [Updated] " unspecd
                   ` (58 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-15  6:45 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 338 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1013625999

Comment:
https://github.com/void-linux/void-packages/runs/4824997265?check_suite_focus=true#step:7:1764
> Python config failure: Python is 64-bit, chosen compiler is 32-bit

Need help to fix this error.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (5 preceding siblings ...)
  2022-01-15  6:45 ` unspecd
@ 2022-01-15  6:55 ` unspecd
  2022-01-15 20:12 ` unspecd
                   ` (57 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-15  6:55 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1181 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.0.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 15402 bytes --]

From 9ac61e1412d04881268bc908b777adb957be0016 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/5] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index d35944228287..ae32d2fe7038 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4098,3 +4098,4 @@ libkmailconfirmbeforedeleting.so.5 kdepim-addons-21.08.3_1
 libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From 9d5a75a740c0ea7e72b0d8375b004de25ca7bfd9 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 2/5] gnuradio: update to 3.10.0.0.

---
 common/shlibs                                 | 38 +++++++++++--------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 18 ---------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 --------------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ---------------
 srcpkgs/gnuradio/template                     | 37 ++++++++++++------
 5 files changed, 47 insertions(+), 105 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index ae32d2fe7038..4b6887d5bed9 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3240,22 +3240,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pmt.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-blocks.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-audio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fec.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fft.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-filter.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-analog.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-digital.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-dtv.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-channels.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-trellis.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-video-sdl.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-vocoder.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-wavelet.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-uhd.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-network.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-soapy.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-qtgui.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-zeromq.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-iio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pdu.so.3.10.0 gnuradio-3.10.0.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
index 51952bd29b38..676f631ebf5d 100644
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
@@ -26,21 +26,3 @@ index 884bba7dd4b..44f616cdae1 100644
      def test01(self):
          a = pmt.intern("a")
          b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..fd4edf336a9a 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,41 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.0.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+# TODO: add python3-pygccxml (not packaged in Void)
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen python3-Sphinx python3-pybind11 ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel libsodium-devel
+ libusb-devel mpir-devel python3-devel python3-gobject-devel python3-pybind11 qwt-devel spdlog
+ uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=25535fb64d2541ec95325c3f901e2eb71ab794c5b53b9e97894d2d48bbd966da
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications

From 7adc8b61de9c7b7f4ed47740c09f571c423302c9 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 3/5] gnuradio-nrsc5: broken

---
 srcpkgs/gnuradio-nrsc5/template | 1 +
 1 file changed, 1 insertion(+)

diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..da636f6654cf 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -14,6 +14,7 @@ license="GPL-3.0-or-later"
 homepage="https://github.com/argilo/gr-nrsc5/"
 distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
 checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+broken="Incompatible with current gnuradio"
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From 867bd1bdce4e23c2c54b55f45f28bca0fab64cd0 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 4/5] gnuradio-osmosdr: broken

---
 srcpkgs/gnuradio-osmosdr/template | 1 +
 1 file changed, 1 insertion(+)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..e211a7bb2a95 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -14,6 +14,7 @@ license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
 distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
 checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+broken="Incompatible with current gnuradio"
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From 639468741b1a66026a440f3dbeed17231066890c Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 5/5] gnuradio-rds: broken

---
 srcpkgs/gnuradio-rds/template | 1 +
 1 file changed, 1 insertion(+)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..224cb543ceb8 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -13,6 +13,7 @@ license="GPL-2.0-or-later"
 homepage="https://github.com/bastibl/gr-rds/"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
 checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+broken="Incompatible with current gnuradio"
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (6 preceding siblings ...)
  2022-01-15  6:55 ` [PR PATCH] [Updated] " unspecd
@ 2022-01-15 20:12 ` unspecd
  2022-01-15 22:08 ` unspecd
                   ` (56 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-15 20:12 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1181 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.0.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 380620 bytes --]

From 9ac61e1412d04881268bc908b777adb957be0016 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/6] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index d35944228287..ae32d2fe7038 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4098,3 +4098,4 @@ libkmailconfirmbeforedeleting.so.5 kdepim-addons-21.08.3_1
 libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From b04b46dbe97b5c99e724027b8512179763b8d831 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 2/6] gnuradio: update to 3.10.0.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 +++++++++++--------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 18 ---------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 --------------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ---------------
 srcpkgs/gnuradio/template                     | 38 ++++++++++++-------
 5 files changed, 47 insertions(+), 106 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index ae32d2fe7038..4b6887d5bed9 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3240,22 +3240,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pmt.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-blocks.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-audio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fec.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fft.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-filter.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-analog.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-digital.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-dtv.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-channels.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-trellis.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-video-sdl.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-vocoder.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-wavelet.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-uhd.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-network.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-soapy.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-qtgui.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-zeromq.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-iio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pdu.so.3.10.0 gnuradio-3.10.0.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
index 51952bd29b38..676f631ebf5d 100644
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
@@ -26,21 +26,3 @@ index 884bba7dd4b..44f616cdae1 100644
      def test01(self):
          a = pmt.intern("a")
          b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..e6d826e0f206 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,40 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.0.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+# TODO: add python3-pygccxml (not packaged in Void)
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen python3-Sphinx python3-pybind11 ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 qwt-devel spdlog uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=25535fb64d2541ec95325c3f901e2eb71ab794c5b53b9e97894d2d48bbd966da
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -39,7 +51,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From 614bc1c7e4a2f857524a0588bfb39b5b1f827c56 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 3/6] gnuradio-nrsc5: update to latest git revision

No release tag since 2018-12-04.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    24 +-
 2 files changed, 15 insertions(+), 13130 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio is free software; you can redistribute it and/or modify
--# it under the terms of the GNU General Public License as published by
--# the Free Software Foundation; either version 3, or (at your option)
--# any later version.
--#
--# GNU Radio is distributed in the hope that it will be useful,
--# but WITHOUT ANY WARRANTY; without even the implied warranty of
--# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--# GNU General Public License for more details.
--#
--# You should have received a copy of the GNU General Public License
--# along with GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio is free software; you can redistribute it and/or modify
--# it under the terms of the GNU General Public License as published by
--# the Free Software Foundation; either version 3, or (at your option)
--# any later version.
--#
--# GNU Radio is distributed in the hope that it will be useful,
--# but WITHOUT ANY WARRANTY; without even the implied warranty of
--# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--# GNU General Public License for more details.
--#
--# You should have received a copy of the GNU General Public License
--# along with GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio is free software; you can redistribute it and/or modify
--# it under the terms of the GNU General Public License as published by
--# the Free Software Foundation; either version 3, or (at your option)
--# any later version.
--#
--# GNU Radio is distributed in the hope that it will be useful,
--# but WITHOUT ANY WARRANTY; without even the implied warranty of
--# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--# GNU General Public License for more details.
--#
--# You should have received a copy of the GNU General Public License
--# along with GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio is free software; you can redistribute it and/or modify
--# it under the terms of the GNU General Public License as published by
--# the Free Software Foundation; either version 3, or (at your option)
--# any later version.
--#
--# GNU Radio is distributed in the hope that it will be useful,
--# but WITHOUT ANY WARRANTY; without even the implied warranty of
--# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--# GNU General Public License for more details.
--#
--# You should have received a copy of the GNU General Public License
--# along with GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio is free software; you can redistribute it and/or modify
--# it under the terms of the GNU General Public License as published by
--# the Free Software Foundation; either version 3, or (at your option)
--# any later version.
--#
--# GNU Radio is distributed in the hope that it will be useful,
--# but WITHOUT ANY WARRANTY; without even the implied warranty of
--# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--# GNU General Public License for more details.
--#
--# You should have received a copy of the GNU General Public License
--# along with GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # 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.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # 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
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * 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
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- * GNU General Public License for more details.
-- *
-- * You should have received a copy of the GNU General Public License
-- * along with GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- * GNU General Public License for more details.
-- *
-- * You should have received a copy of the GNU General Public License
-- * along with GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- * GNU General Public License for more details.
-- *
-- * You should have received a copy of the GNU General Public License
-- * along with GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio is free software; you can redistribute it and/or modify
--# it under the terms of the GNU General Public License as published by
--# the Free Software Foundation; either version 3, or (at your option)
--# any later version.
--#
--# GNU Radio is distributed in the hope that it will be useful,
--# but WITHOUT ANY WARRANTY; without even the implied warranty of
--# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--# GNU General Public License for more details.
--#
--# You should have received a copy of the GNU General Public License
--# along with GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 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.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..e723ce369750 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,25 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
-wrksrc="gr-nrsc5-${version}"
+version=1.0.0git
+revision=1
+_githash=145b2192a920907f98c9eef6c9181f9c13090a64
+wrksrc="gr-nrsc5-${_githash}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
-distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+homepage="https://github.com/argilo/gr-nrsc5"
+distfiles="https://github.com/argilo/gr-nrsc5/archive/${_githash}.tar.gz"
+checksum=14b65bbceb725579fecea3423905699b177835bc5a3d480246a77f654d605ecb
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From a3c509976627eebe8527a3fa3c496964e8fae786 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 4/6] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..91ea824f9e3b 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From 9cf207b3ac4b416fe4c69849e198f49d2912c3a0 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 5/6] gnuradio-rds: update to latest git revision

No release tag since 2020-01-06.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..5cd351660851 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,23 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
-wrksrc="gr-rds-${version}"
+version=3.8.0git
+revision=1
+_githash=113b70bc0bfb8dccb2358d571ba64c0d2c90e9b4
+wrksrc="gr-rds-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
 homepage="https://github.com/bastibl/gr-rds/"
-distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+distfiles="https://github.com/bastibl/gr-rds/archive/${_githash}.tar.gz"
+checksum=8c5ab468388758d63e6e90126dddc3d5aa3ba8327e27ba9a4c4eda3930f0d19a
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From a3f1fc0718617101e019664afe07e1de15be79b4 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 6/6] gqrx: update to 2.15.2.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..52f5e08bebd9 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,23 +1,20 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.2
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=c4fc85e6aec257e56e0c2963c5c2f7aa210a8b6df73f7cb4e398ec2f1c9e1d33
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (7 preceding siblings ...)
  2022-01-15 20:12 ` unspecd
@ 2022-01-15 22:08 ` unspecd
  2022-01-17  9:03 ` [PR REVIEW] " ericonr
                   ` (55 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-15 22:08 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 253 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1013761792

Comment:
> `gnuradio-nrsc5`, `gnuradio-osmosdr` and `gqrx` cannot be revbumped

Fixed by updating to latest revisions.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR REVIEW] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (8 preceding siblings ...)
  2022-01-15 22:08 ` unspecd
@ 2022-01-17  9:03 ` ericonr
  2022-01-17  9:03 ` ericonr
                   ` (54 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: ericonr @ 2022-01-17  9:03 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 206 bytes --]

New review comment by ericonr on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#discussion_r785754909

Comment:
What does this todo mean? Is it just missing functionality?

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR REVIEW] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (9 preceding siblings ...)
  2022-01-17  9:03 ` [PR REVIEW] " ericonr
@ 2022-01-17  9:03 ` ericonr
  2022-01-17  9:03 ` ericonr
                   ` (53 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: ericonr @ 2022-01-17  9:03 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 179 bytes --]

New review comment by ericonr on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#discussion_r785755665

Comment:
Will try to investigate this ;-;

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR REVIEW] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (10 preceding siblings ...)
  2022-01-17  9:03 ` ericonr
@ 2022-01-17  9:03 ` ericonr
  2022-01-17 11:10 ` unspecd
                   ` (52 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: ericonr @ 2022-01-17  9:03 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 182 bytes --]

New review comment by ericonr on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#discussion_r785755260

Comment:
Any chance it can use SDL2 instead?

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR REVIEW] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (11 preceding siblings ...)
  2022-01-17  9:03 ` ericonr
@ 2022-01-17 11:10 ` unspecd
  2022-01-17 11:10 ` unspecd
                   ` (51 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-17 11:10 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 590 bytes --]

New review comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#discussion_r785865792

Comment:
No, they use SDL_Overlay is no longer available in SDL2: 
```console
$ git clone https://github.com/gnuradio/gnuradio
$ cd gnuradio && grep -Rhow 'SDL_[A-Z][a-z][a-zA-Z]*' gr-video-sdl/lib/ | sort | uniq
SDL_CreateYUVOverlay
SDL_Delay
SDL_DisplayYUVOverlay
SDL_Flip
SDL_FreeYUVOverlay
SDL_GetError
SDL_GetTicks
SDL_Init
SDL_LockYUVOverlay
SDL_Overlay
SDL_Quit
SDL_Rect
SDL_SetVideoMode
SDL_Surface
SDL_UnlockYUVOverlay
```


^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR REVIEW] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (12 preceding siblings ...)
  2022-01-17 11:10 ` unspecd
@ 2022-01-17 11:10 ` unspecd
  2022-01-17 13:10 ` unspecd
                   ` (50 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-17 11:10 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 595 bytes --]

New review comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#discussion_r785865792

Comment:
No, they use SDL_Overlay that is no longer available in SDL2: 
```console
$ git clone https://github.com/gnuradio/gnuradio
$ cd gnuradio && grep -Rhow 'SDL_[A-Z][a-z][a-zA-Z]*' gr-video-sdl/lib/ | sort | uniq
SDL_CreateYUVOverlay
SDL_Delay
SDL_DisplayYUVOverlay
SDL_Flip
SDL_FreeYUVOverlay
SDL_GetError
SDL_GetTicks
SDL_Init
SDL_LockYUVOverlay
SDL_Overlay
SDL_Quit
SDL_Rect
SDL_SetVideoMode
SDL_Surface
SDL_UnlockYUVOverlay
```


^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR REVIEW] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (13 preceding siblings ...)
  2022-01-17 11:10 ` unspecd
@ 2022-01-17 13:10 ` unspecd
  2022-01-18 10:35 ` [PR PATCH] [Updated] " unspecd
                   ` (49 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-17 13:10 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1199 bytes --]

New review comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#discussion_r785992198

Comment:
This is used internally to generate Python bindings. In the release tarballs these binding are pre-generated. In any case, it would be nice to have this package in Void.

Here is what the [documentation](https://github.com/gnuradio/gnuradio/blob/master/docs/PYBIND11.md) says:

---

### Generating/maintaining Python bindings using Pybind11

As of the GNU Radio 3.9 release, python bindings are handled using pybind11, which is inherently different than they were in previous releases

#### Dependencies

- pybind11 > 2.4.3 https://pybind11.readthedocs.io/
- pygccxml https://pygccxml.readthedocs.io/en/develop/install.html
  - This is an optional dependency and basic functionality for OOT generation can be performed without pygccxml
  - It is required for automatically generating bindings for most of the GR source tree

...

Each block binding file contains an automatically generated and maintained comment block that informs CMake when the bindings are out of sync with the header file they refer to, and what to do about it


^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (14 preceding siblings ...)
  2022-01-17 13:10 ` unspecd
@ 2022-01-18 10:35 ` unspecd
  2022-01-18 10:35 ` unspecd
                   ` (48 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-18 10:35 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

There is an updated pull request by unspecd against master on the void-packages repository

https://github.com/unspecd/void-packages pkg/gnuradio
https://github.com/void-linux/void-packages/pull/35049

gnuradio: update to 3.10.0.0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please [skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration)
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
#### Local build testing
- I built this PR locally for my native architecture, (x86_64-musl)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - i686
  - ppc64le-musl


A patch file from https://github.com/void-linux/void-packages/pull/35049.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-pkg/gnuradio-35049.patch --]
[-- Type: text/x-diff, Size: 383207 bytes --]

From 801687687f4c237813328110f9ede8c6549f9646 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 12:43:05 +1100
Subject: [PATCH 1/8] New package: libiio-0.23

---
 common/shlibs           |  1 +
 srcpkgs/libiio-devel    |  1 +
 srcpkgs/libiio-tools    |  1 +
 srcpkgs/libiio/template | 42 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)
 create mode 120000 srcpkgs/libiio-devel
 create mode 120000 srcpkgs/libiio-tools
 create mode 100644 srcpkgs/libiio/template

diff --git a/common/shlibs b/common/shlibs
index b07e14379e28..154496b36c99 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4098,3 +4098,4 @@ libkmailconfirmbeforedeleting.so.5 kdepim-addons-21.08.3_1
 libkaddressbookprivate.so.5 kaddressbook-21.08.3_1
 libcodec2.so.1.0 codec2-1.0.1_1
 libx86emu.so.3 libx86emu-3.4_1
+libiio.so.0 libiio-0.23_1
diff --git a/srcpkgs/libiio-devel b/srcpkgs/libiio-devel
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-devel
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio-tools b/srcpkgs/libiio-tools
new file mode 120000
index 000000000000..0885e8969722
--- /dev/null
+++ b/srcpkgs/libiio-tools
@@ -0,0 +1 @@
+libiio
\ No newline at end of file
diff --git a/srcpkgs/libiio/template b/srcpkgs/libiio/template
new file mode 100644
index 000000000000..149371c250e9
--- /dev/null
+++ b/srcpkgs/libiio/template
@@ -0,0 +1,42 @@
+# Template file for 'libiio'
+pkgname=libiio
+version=0.23
+revision=1
+build_style=cmake
+configure_args="-DUDEV_RULES_INSTALL_DIR=/usr/lib/udev/rules.d -DWITH_SERIAL_BACKEND=YES
+ $(vopt_bool avahi HAVE_DNS_SD) $(vopt_bool doc WITH_DOC) $(vopt_bool python PYTHON_BINDINGS)"
+hostmakedepends="bison flex $(vopt_if doc doxygen)
+ $(vopt_if python 'python3 python3-Sphinx python3-sphinx_rtd_theme')"
+makedepends="libaio-devel libserialport-devel libusb-devel libxml2-devel
+ $(vopt_if avahi avahi-libs-devel)"
+short_desc="Library for interfacing with local and remote Linux IIO devices"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="LGPL-2.1-or-later"
+homepage="https://analogdevicesinc.github.io/libiio"
+distfiles="https://github.com/analogdevicesinc/libiio/archive/v${version}.tar.gz"
+checksum=df1577740ea93dca732e7d7c04786600cb083117901dee793f3d38980754af00
+
+build_options="avahi doc python"
+build_options_default="avahi doc python"
+desc_option_doc="Build documentation"
+
+libiio-devel_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove usr/lib/*.so
+		vmkdir usr/share/doc/libiio
+		mv ${DESTDIR}/usr/share/doc/libiio0-doc/v${version}/* \
+			${PKGDESTDIR}/usr/share/doc/libiio
+	}
+}
+
+libiio-tools_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - utilities"
+	pkg_install() {
+		vmove usr/bin
+	}
+}

From d4a0bcefb155f21aec033618b0eed19cda70bcb3 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:07 +1100
Subject: [PATCH 2/8] New package: CastXML-0.4.4

---
 srcpkgs/CastXML/template | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 srcpkgs/CastXML/template

diff --git a/srcpkgs/CastXML/template b/srcpkgs/CastXML/template
new file mode 100644
index 000000000000..3b25a1970075
--- /dev/null
+++ b/srcpkgs/CastXML/template
@@ -0,0 +1,23 @@
+# Template file for 'CastXML'
+pkgname=CastXML
+version=0.4.4
+revision=1
+build_style=cmake
+configure_args="-DSPHINX_MAN=YES -DCastXML_INSTALL_MAN_DIR=share/man"
+hostmakedepends="clang python3-Sphinx"
+makedepends="clang-tools-extra llvm"
+depends="clang"
+checkdepends="libxml2"
+short_desc="C-family abstract syntax tree XML output tool"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="Apache-2.0"
+homepage="https://github.com/CastXML/CastXML"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=e7343edf262b291a9a3d702dbfa6d660e8ed81170454eab6af10a6dbf8c8141d
+
+post_install() {
+	rm -r ${DESTDIR}/usr/share/castxml/clang/include
+	ln -s /usr/lib/clang/$(clang -dumpversion)/include ${DESTDIR}/usr/share/castxml/clang/include
+
+	rm ${DESTDIR}/usr/share/doc/castxml/{LICENSE,NOTICE}
+}

From ff2406945e7e570d1bcf27f59a5b6cfb7ddc575b Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Tue, 18 Jan 2022 03:14:15 +1100
Subject: [PATCH 3/8] New package: python3-pygccxml-2.2.1

---
 srcpkgs/python3-pygccxml/template | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 srcpkgs/python3-pygccxml/template

diff --git a/srcpkgs/python3-pygccxml/template b/srcpkgs/python3-pygccxml/template
new file mode 100644
index 000000000000..22ee0a4a326a
--- /dev/null
+++ b/srcpkgs/python3-pygccxml/template
@@ -0,0 +1,28 @@
+# Template file for 'python3-pygccxml'
+pkgname=python3-pygccxml
+version=2.2.1
+revision=1
+wrksrc="pygccxml-${version}"
+build_style=python3-module
+hostmakedepends="python3-setuptools python3-Sphinx python3-sphinx_rtd_theme"
+depends="CastXML which"
+checkdepends="${depends} python3-pycodestyle python3-pytest"
+short_desc="Python package for easy C++ declarations navigation"
+maintainer="Evgeny Ermakov <evgeny.v.ermakov@gmail.com>"
+license="BSL-1.0"
+homepage="https://github.com/CastXML/pygccxml"
+distfiles="${homepage}/archive/v${version}.tar.gz"
+checksum=9815a12e3bf6b83b2e9d8c88335fb3fa0e2b4067d7fbaaed09c3bf26c6206cc7
+
+post_extract() {
+	# Fails: ModuleNotFoundError: No module named 'hotshot'.
+	rm unittests/misc/test_performance.py
+}
+
+post_build() {
+	make man
+}
+
+post_install() {
+	vman docs/_build/man/pygccxml.1
+}

From 2ccdf797bdd4210f280f163acc94826d26ae89d3 Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Mon, 29 Nov 2021 00:53:30 +1100
Subject: [PATCH 4/8] gnuradio: update to 3.10.0.0.

Also add makedepends to devel package.
---
 common/shlibs                                 | 38 +++++++++++--------
 ...6495f3bdf579dae0c26531a16f6adcc7fb2f.patch | 18 ---------
 ...15d0b26b3c72fab736bcd28a67ab9d1404b7.patch | 28 --------------
 ...befbbe54e55fc4994899e92bcf5bf462fa2f.patch | 31 ---------------
 srcpkgs/gnuradio/template                     | 37 +++++++++++-------
 5 files changed, 46 insertions(+), 106 deletions(-)
 delete mode 100644 srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
 delete mode 100644 srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch

diff --git a/common/shlibs b/common/shlibs
index 154496b36c99..ecca45503159 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3240,22 +3240,28 @@ liblwipv6.so.2 lwipv6-1.5a_1
 libpipewire-0.2.so.1 libpipewire0.2-0.2.7_1
 libpipewire-0.3.so.0 libpipewire-0.3.6_1
 libvolk.so.2.5 volk-2.5.0_1
-libgnuradio-runtime.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-pmt.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-blocks.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-audio.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fec.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-fft.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-filter.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-analog.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-digital.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-dtv.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-channels.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-trellis.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-video-sdl.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-vocoder.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-wavelet.so.3.8.0 gnuradio-3.8.0.0_1
-libgnuradio-uhd.so.3.8.0 gnuradio-3.8.0.0_1
+libgnuradio-runtime.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pmt.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-blocks.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-audio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fec.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-fft.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-filter.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-analog.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-digital.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-dtv.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-channels.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-trellis.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-video-sdl.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-vocoder.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-wavelet.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-uhd.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-network.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-soapy.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-qtgui.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-zeromq.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-iio.so.3.10.0 gnuradio-3.10.0.0_1
+libgnuradio-pdu.so.3.10.0 gnuradio-3.10.0.0_1
 libgnuradio-osmosdr.so.0.2.0 gnuradio-osmosdr-0.2.0_1
 libflann_cpp.so.1.9 flann-1.9.1_1
 libflann.so.1.9 flann-1.9.1_1
diff --git a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
index 51952bd29b38..676f631ebf5d 100644
--- a/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
+++ b/srcpkgs/gnuradio/patches/596c6495f3bdf579dae0c26531a16f6adcc7fb2f.patch
@@ -26,21 +26,3 @@ index 884bba7dd4b..44f616cdae1 100644
      def test01(self):
          a = pmt.intern("a")
          b = pmt.from_double(123765)
-@@ -112,6 +116,8 @@ def test14(self):
-         self.assertEqual(const,pmt.to_long(deser))
- 
-     def test15(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MAXINT32 + 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
-@@ -137,6 +143,8 @@ def test17(self):
-         self.assertEqual(const, x_long)
- 
-     def test18(self):
-+        if(self.sizeof_long <= 4):
-+            return
-         const = self.MININT32 - 1
-         x_pmt = pmt.from_long(const)
-         s = pmt.serialize_str(x_pmt)
diff --git a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch b/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
deleted file mode 100644
index c49a047427e8..000000000000
--- a/srcpkgs/gnuradio/patches/aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From aa4b15d0b26b3c72fab736bcd28a67ab9d1404b7 Mon Sep 17 00:00:00 2001
-From: John Sallay <jasallay@gmail.com>
-Date: Sat, 23 Oct 2021 08:26:42 -0400
-Subject: [PATCH] Fix issue 4595 qa_agc Assertion Error.
-
-The number of input elements needs to be disivible by volk_alignment, which it wasn't
-for machines with 512-bit registers.
-
-Signed-off-by: John Sallay <jasallay@gmail.com>
----
- gr-analog/python/analog/qa_agc.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/gr-analog/python/analog/qa_agc.py b/gr-analog/python/analog/qa_agc.py
-index a5a8ea47b6a..9368dd5d2a8 100644
---- a/gr-analog/python/analog/qa_agc.py
-+++ b/gr-analog/python/analog/qa_agc.py
-@@ -454,7 +454,9 @@ def test_006(self):
-         tb = self.tb
- 
-         sampling_freq = 100
--        N = int(5*sampling_freq)
-+        # N must by a multiple of the volk_alignment of the system for this test to work.
-+        # For a machine with 512-bit registers, that would be 8 complex-floats.
-+        N = int(8 * sampling_freq)
-         src1 = analog.sig_source_c(sampling_freq, analog.GR_SIN_WAVE,
-                                    sampling_freq * 0.10, 100)
-         dst1 = blocks.vector_sink_c()
diff --git a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch b/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
deleted file mode 100644
index 4faa3468140a..000000000000
--- a/srcpkgs/gnuradio/patches/f259befbbe54e55fc4994899e92bcf5bf462fa2f.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From f259befbbe54e55fc4994899e92bcf5bf462fa2f Mon Sep 17 00:00:00 2001
-From: alekhgupta1441 <alekhgupta1441@gmail.com>
-Date: Sun, 12 Apr 2020 03:48:14 +0530
-Subject: [PATCH] gr-digital/python : Updated soft_dec_lut_gen.py
-
----
- gr-digital/python/digital/soft_dec_lut_gen.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
-index 4503c4fea7b..84f6de66e45 100644
---- a/gr-digital/python/digital/soft_dec_lut_gen.py
-+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
-@@ -73,7 +73,7 @@ def soft_dec_table_generator(soft_dec_gen, prec, Es=1):
- 
-     '''
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     maxd = Es*numpy.sqrt(2.0)/2.0
-     yrng = numpy.linspace(-maxd, maxd, npts)
-     xrng = numpy.linspace(-maxd, maxd, npts)
-@@ -110,7 +110,7 @@ def soft_dec_table(constel, symbols, prec, npwr=1):
-     re_max = max(numpy.array(constel).real)
-     im_max = max(numpy.array(constel).imag)
- 
--    npts = 2.0**prec
-+    npts = int(2.0**prec)
-     yrng = numpy.linspace(im_min, im_max, npts)
-     xrng = numpy.linspace(re_min, re_max, npts)
- 
diff --git a/srcpkgs/gnuradio/template b/srcpkgs/gnuradio/template
index c950b53e8bea..5bba5d71d4d7 100644
--- a/srcpkgs/gnuradio/template
+++ b/srcpkgs/gnuradio/template
@@ -1,28 +1,39 @@
 # Template file for 'gnuradio'
 pkgname=gnuradio
-version=3.8.0.0
-revision=9
+version=3.10.0.0
+revision=1
 build_style=cmake
 conf_files="/etc/gnuradio/conf.d/*"
-configure_args="-DENABLE_INTERNAL_VOLK=OFF -DGR_PYTHON_DIR=/${py3_sitelib}"
-hostmakedepends="pkg-config doxygen swig python3-Mako python3-Sphinx
- python3-cairo python3-numpy python3-yaml texlive texlive-latexextra texlive-dvi"
-makedepends="SDL-devel boost-devel fftw-devel gsl-devel jack-devel
- libgsm-devel libusb-devel volk-devel uhd-devel gtk+3-devel python3-devel
- python3-gobject-devel log4cpp-devel gmpxx-devel mpir-devel"
-depends="python3-cheetah3 python3-numpy python3-Mako python3-gobject
- python3-yaml"
-checkdepends="python3-scipy"
+configure_args="-DZEROMQ_INCLUDE_DIRS=${XBPS_CROSS_BASE}/usr/include
+ -Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+_pydeps="python3-Mako python3-cairo python3-click python3-click-plugins python3-gobject
+ python3-numpy python3-pygccxml python3-pyqtgraph python3-pyzmq python3-scipy python3-yaml"
+hostmakedepends="pkg-config doxygen python3-Sphinx python3-pybind11 ${_pydeps}
+ texlive texlive-latexextra texlive-dvi"
+makedepends="SDL-devel SoapySDR-devel boost-devel codec2-devel cppzmq fftw-devel gmpxx-devel
+ gsl-devel gtk+3-devel jack-devel libgsm-devel libiio-devel libsndfile-devel mpir-devel
+ python3-devel python3-gobject-devel python3-pybind11 qwt-devel spdlog uhd-devel volk-devel"
+depends="${_pydeps} python3-cheetah3 python3-lxml python3-matplotlib"
+checkdepends="python3-pytest"
 short_desc="Framework for software defined radio"
 maintainer="Andrew Benson <abenson+void@gmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://www.gnuradio.org"
 distfiles="https://github.com/gnuradio/gnuradio/archive/v${version}.tar.gz"
-checksum=03fd01f0b27033befb91709b3d56f95e0869b5fb8bc71bec2662266a3f0dedf5
+checksum=25535fb64d2541ec95325c3f901e2eb71ab794c5b53b9e97894d2d48bbd966da
 python_version=3
 
+if [ -n "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-host-tools qt5-qmake"
+fi
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
+
 post_install() {
 	rm ${DESTDIR}/usr/share/gnuradio/examples/audio/dial_tone \
+		${DESTDIR}/usr/share/gnuradio/examples/qt-gui/display_qt \
 		${DESTDIR}/usr/share/gnuradio/examples/uhd/tags_demo
 	vinstall grc/scripts/freedesktop/gnuradio-grc.desktop 644 \
 		usr/share/applications
@@ -39,7 +50,7 @@ gnuradio-doc_package() {
 
 gnuradio-devel_package() {
 	short_desc+=" - development files"
-	depends="${sourcepkg}>=${version}_${revision}"
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
 	pkg_install() {
 		vmove usr/include
 		vmove "usr/lib/*.so"

From 4a60d8a01225708a16d4a382e525940cd1d9b55f Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:03 +1100
Subject: [PATCH 5/8] gnuradio-nrsc5: update to latest git revision

No release tag since 2018-12-04.

Also clean up makedepends.
---
 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch | 13121 -------------------
 srcpkgs/gnuradio-nrsc5/template            |    24 +-
 2 files changed, 15 insertions(+), 13130 deletions(-)
 delete mode 100644 srcpkgs/gnuradio-nrsc5/patches/py3.8.patch

diff --git a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch b/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
deleted file mode 100644
index 902a0de43555..000000000000
--- a/srcpkgs/gnuradio-nrsc5/patches/py3.8.patch
+++ /dev/null
@@ -1,13121 +0,0 @@
-https://github.com/argilo/gr-nrsc5/commit/4f5fe69e69dd2dcef99582f7d4393660f78308bf.patch
-
-From 4f5fe69e69dd2dcef99582f7d4393660f78308bf Mon Sep 17 00:00:00 2001
-From: Clayton Smith <argilo@gmail.com>
-Date: Sat, 27 Jul 2019 10:34:29 -0400
-Subject: [PATCH] GNU Radio 3.8 support.
-
----
- CMakeLists.txt                                |  147 +-
- README.md                                     |    1 -
- apps/CMakeLists.txt                           |    3 +-
- apps/hd_tx_hackrf.grc                         | 2679 -------------
- apps/hd_tx_hackrf.py                          |  157 -
- apps/hd_tx_rtl_file.grc                       | 1908 +++-------
- apps/hd_tx_rtl_file.py                        |   52 +-
- apps/hd_tx_usrp.grc                           | 3333 +++++------------
- apps/hd_tx_usrp.py                            |   90 +-
- cmake/Modules/CMakeParseArgumentsCopy.cmake   |    2 +-
- cmake/Modules/FindCppUnit.cmake               |   39 -
- cmake/Modules/FindGnuradioRuntime.cmake       |   36 -
- cmake/Modules/GrMiscUtils.cmake               |  528 ---
- cmake/Modules/GrPlatform.cmake                |   62 -
- cmake/Modules/GrPython.cmake                  |  241 --
- cmake/Modules/GrSwig.cmake                    |  256 --
- cmake/Modules/GrTest.cmake                    |  143 -
- cmake/Modules/UseSWIG.cmake                   |  304 --
- cmake/Modules/nrsc5Config.cmake               |    5 +-
- .../Modules/targetConfig.cmake.in             |   40 +-
- docs/CMakeLists.txt                           |    3 +-
- docs/doxygen/CMakeLists.txt                   |    3 +-
- docs/doxygen/Doxyfile.in                      |   10 +-
- docs/doxygen/Doxyfile.swig_doc.in             |    8 +-
- docs/doxygen/doxyxml/__init__.py              |    6 +-
- docs/doxygen/doxyxml/base.py                  |   21 +-
- docs/doxygen/doxyxml/doxyindex.py             |   11 +-
- docs/doxygen/doxyxml/generated/__init__.py    |    1 +
- docs/doxygen/doxyxml/generated/compound.py    |    8 +-
- .../doxyxml/generated/compoundsuper.py        |   40 +-
- docs/doxygen/doxyxml/generated/index.py       |    6 +-
- docs/doxygen/doxyxml/generated/indexsuper.py  |   21 +-
- docs/doxygen/doxyxml/text.py                  |    8 +-
- docs/doxygen/swig_doc.py                      |   26 +-
- grc/CMakeLists.txt                            |   27 +-
- grc/nrsc5_hdc_encoder.block.yml               |   33 +
- grc/nrsc5_hdc_encoder.xml                     |   31 -
- grc/nrsc5_l1_fm_encoder_mp1.block.yml         |   26 +
- grc/nrsc5_l1_fm_encoder_mp1.xml               |   23 -
- grc/nrsc5_l1_fm_encoder_mp11.block.yml        |   34 +
- grc/nrsc5_l1_fm_encoder_mp11.xml              |   33 -
- grc/nrsc5_l1_fm_encoder_mp2.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp2.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp3.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp3.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp5.block.yml         |   34 +
- grc/nrsc5_l1_fm_encoder_mp5.xml               |   33 -
- grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml     |   46 +
- grc/nrsc5_l1_fm_encoder_mp5_ms1.xml           |   48 -
- grc/nrsc5_l1_fm_encoder_mp6.block.yml         |   30 +
- grc/nrsc5_l1_fm_encoder_mp6.xml               |   28 -
- grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml     |   42 +
- grc/nrsc5_l1_fm_encoder_mp6_ms1.xml           |   43 -
- grc/nrsc5_l2_encoder.block.yml                |   44 +
- grc/nrsc5_l2_encoder.xml                      |   71 -
- grc/nrsc5_psd_encoder.block.yml               |   31 +
- grc/nrsc5_psd_encoder.xml                     |   31 -
- grc/nrsc5_sis_encoder.block.yml               |   24 +
- grc/nrsc5_sis_encoder.xml                     |   20 -
- include/nrsc5/CMakeLists.txt                  |    9 +-
- include/nrsc5/api.h                           |    3 +-
- include/nrsc5/hdc_encoder.h                   |    1 -
- include/nrsc5/l1_fm_encoder.h                 |    1 -
- include/nrsc5/l2_encoder.h                    |    1 -
- include/nrsc5/psd_encoder.h                   |    1 -
- include/nrsc5/sis_encoder.h                   |    1 -
- lib/CMakeLists.txt                            |   64 +-
- lib/hdc_encoder_impl.cc                       |    1 +
- lib/hdc_encoder_impl.h                        |    1 +
- lib/l1_fm_encoder_impl.cc                     |    1 +
- lib/l1_fm_encoder_impl.h                      |    1 +
- lib/l2_encoder_impl.cc                        |    1 +
- lib/l2_encoder_impl.h                         |    1 +
- lib/psd_encoder_impl.cc                       |    1 +
- lib/qa_nrsc5.cc                               |   36 -
- lib/qa_nrsc5.h                                |   38 -
- lib/sis_encoder_impl.cc                       |    1 +
- lib/test_nrsc5.cc                             |   48 -
- python/CMakeLists.txt                         |    7 +-
- python/__init__.py                            |    7 +-
- python/build_utils.py                         |  226 --
- python/qa_hdc_encoder.py                      |   14 +-
- python/qa_l1_fm_encoder.py                    |   14 +-
- python/qa_l2_encoder.py                       |   14 +-
- python/qa_psd_encoder.py                      |   14 +-
- python/qa_sis_encoder.py                      |   14 +-
- swig/CMakeLists.txt                           |   15 +-
- swig/nrsc5_swig.i                             |   15 +-
- 88 files changed, 2112 insertions(+), 9485 deletions(-)
- delete mode 100644 apps/hd_tx_hackrf.grc
- delete mode 100755 apps/hd_tx_hackrf.py
- delete mode 100644 cmake/Modules/FindCppUnit.cmake
- delete mode 100644 cmake/Modules/FindGnuradioRuntime.cmake
- delete mode 100644 cmake/Modules/GrMiscUtils.cmake
- delete mode 100644 cmake/Modules/GrPlatform.cmake
- delete mode 100644 cmake/Modules/GrPython.cmake
- delete mode 100644 cmake/Modules/GrSwig.cmake
- delete mode 100644 cmake/Modules/GrTest.cmake
- delete mode 100644 cmake/Modules/UseSWIG.cmake
- rename python/build_utils_codes.py => cmake/Modules/targetConfig.cmake.in (52%)
- create mode 100644 grc/nrsc5_hdc_encoder.block.yml
- delete mode 100644 grc/nrsc5_hdc_encoder.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp11.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp11.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp2.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp2.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp3.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp3.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6.xml
- create mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
- delete mode 100644 grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
- create mode 100644 grc/nrsc5_l2_encoder.block.yml
- delete mode 100644 grc/nrsc5_l2_encoder.xml
- create mode 100644 grc/nrsc5_psd_encoder.block.yml
- delete mode 100644 grc/nrsc5_psd_encoder.xml
- create mode 100644 grc/nrsc5_sis_encoder.block.yml
- delete mode 100644 grc/nrsc5_sis_encoder.xml
- delete mode 100644 lib/qa_nrsc5.cc
- delete mode 100644 lib/qa_nrsc5.h
- delete mode 100644 lib/test_nrsc5.cc
- delete mode 100644 python/build_utils.py
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1beb55f..dd5c257 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2014,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -20,94 +21,86 @@
- ########################################################################
- # Project setup
- ########################################################################
--cmake_minimum_required(VERSION 2.6)
-+cmake_minimum_required(VERSION 3.8)
- project(gr-nrsc5 CXX C)
- enable_testing()
- 
--#install to PyBOMBS target prefix if defined
-+# Install to PyBOMBS target prefix if defined
- if(DEFINED ENV{PYBOMBS_PREFIX})
-     set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})
-     message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")
- endif()
- 
--#select the release build type by default to get optimization flags
-+# Select the release build type by default to get optimization flags
- if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Release")
-    message(STATUS "Build type not specified: defaulting to release.")
- endif(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
- 
--#make sure our local CMake Modules path comes first
-+# Make sure our local CMake Modules path comes first
- list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
- 
- # Set the version information here
--set(VERSION_INFO_MAJOR_VERSION 1)
--set(VERSION_INFO_API_COMPAT    0)
--set(VERSION_INFO_MINOR_VERSION 0)
--set(VERSION_INFO_MAINT_VERSION git)
-+set(VERSION_MAJOR 1)
-+set(VERSION_API    0)
-+set(VERSION_ABI 0)
-+set(VERSION_PATCH git)
- 
--# Set cmake policies.
--# This will suppress developer warnings during the cmake process that can occur
--# if a newer cmake version than the minimum is used.
-+cmake_policy(SET CMP0011 NEW)
- 
--if(POLICY CMP0026)
--    cmake_policy(SET CMP0026 OLD)
--endif()
--if(POLICY CMP0043)
--    cmake_policy(SET CMP0043 OLD)
--endif()
--if(POLICY CMP0045)
--    cmake_policy(SET CMP0045 OLD)
--endif()
--if(POLICY CMP0046)
--    cmake_policy(SET CMP0046 OLD)
--endif()
-+# Enable generation of compile_commands.json for code completion engines
-+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- 
- ########################################################################
- # Compiler specific setup
- ########################################################################
--if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
-+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
-+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    AND NOT WIN32)
-     #http://gcc.gnu.org/wiki/Visibility
-     add_definitions(-fvisibility=hidden)
- endif()
- 
--########################################################################
--# Find boost
--########################################################################
--if(UNIX AND EXISTS "/usr/lib64")
--    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
--endif(UNIX AND EXISTS "/usr/lib64")
--set(Boost_ADDITIONAL_VERSIONS
--    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
--    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
--    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
--    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
--    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
--    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
--    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
--)
--find_package(Boost "1.35" COMPONENTS filesystem system)
--
--if(NOT Boost_FOUND)
--    message(FATAL_ERROR "Boost required to compile nrsc5")
--endif()
-+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_CXX_STANDARD 11)
-+ELSE()
-+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
-+
-+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-+    SET(CMAKE_C_STANDARD 11)
-+ELSE()
-+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
-+ENDIF()
- 
- ########################################################################
- # Install directories
- ########################################################################
-+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks fec)
-+find_package(GSL)
-+include(GrVersion)
-+
- include(GrPlatform) #define LIB_SUFFIX
--set(GR_RUNTIME_DIR      bin)
--set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
-+
-+if(NOT CMAKE_MODULES_DIR)
-+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
-+endif(NOT CMAKE_MODULES_DIR)
-+
- set(GR_INCLUDE_DIR      include/nrsc5)
--set(GR_DATA_DIR         share)
-+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/nrsc5)
- set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
- set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
--set(GR_CONF_DIR         etc)
- set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
--set(GR_LIBEXEC_DIR      libexec)
- set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
--set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
- 
- ########################################################################
- # On Apple only, set install name and use rpath correctly, if not already set
-@@ -132,54 +125,17 @@ endif(APPLE)
- ########################################################################
- # Find gnuradio build dependencies
- ########################################################################
--find_package(CppUnit)
- find_package(Doxygen)
- 
--# Search for GNU Radio and its components and versions. Add any
--# components required to the list of GR_REQUIRED_COMPONENTS (in all
--# caps such as FILTER or FFT) and change the version to the minimum
--# API compatible version required.
--set(GR_REQUIRED_COMPONENTS RUNTIME FEC PMT)
--find_package(Gnuradio "3.7.2" REQUIRED)
--list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
--include(GrVersion)
--
--if(NOT CPPUNIT_FOUND)
--    message(FATAL_ERROR "CppUnit required to compile nrsc5")
--endif()
--
- ########################################################################
- # Setup doxygen option
- ########################################################################
- if(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
- else(DOXYGEN_FOUND)
--	option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
-+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
- endif(DOXYGEN_FOUND)
- 
--########################################################################
--# Setup the include and linker paths
--########################################################################
--include_directories(
--    ${CMAKE_SOURCE_DIR}/lib
--    ${CMAKE_SOURCE_DIR}/include
--    ${CMAKE_BINARY_DIR}/lib
--    ${CMAKE_BINARY_DIR}/include
--    ${Boost_INCLUDE_DIRS}
--    ${CPPUNIT_INCLUDE_DIRS}
--    ${GNURADIO_ALL_INCLUDE_DIRS}
--)
--
--link_directories(
--    ${Boost_LIBRARY_DIRS}
--    ${CPPUNIT_LIBRARY_DIRS}
--    ${GNURADIO_RUNTIME_LIBRARY_DIRS}
--)
--
--# Set component parameters
--set(GR_NRSC5_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
--set(GR_NRSC5_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
--
- ########################################################################
- # Create uninstall target
- ########################################################################
-@@ -226,18 +182,15 @@ endif()
- ########################################################################
- add_subdirectory(include/nrsc5)
- add_subdirectory(lib)
-+add_subdirectory(apps)
-+add_subdirectory(docs)
- add_subdirectory(swig)
- add_subdirectory(python)
- add_subdirectory(grc)
--add_subdirectory(apps)
--add_subdirectory(docs)
- 
- ########################################################################
- # Install cmake search helper for this library
- ########################################################################
--if(NOT CMAKE_MODULES_DIR)
--  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
--endif(NOT CMAKE_MODULES_DIR)
- 
- install(FILES cmake/Modules/nrsc5Config.cmake
-     DESTINATION ${CMAKE_MODULES_DIR}/nrsc5
-diff --git a/README.md b/README.md
-index 366f5a7..c11286a 100644
---- a/README.md
-+++ b/README.md
-@@ -84,7 +84,6 @@ The output bytes map to symbols as follows:
- Several sample flowgraphs are available in the apps folder:
- 
- * hd_tx_usrp.grc, hd_tx_usrp.py: tested on a USRP B200
--* hd_tx_hackrf.grc, hd_tx_hackrf.py: tested on a HackRF One
- * hd_tx_rtl_file.grc, hd_tx_rtl_file.py: produces an output file in the format used by https://github.com/theori-io/nrsc5/
- 
- These flowgraphs read a WAV file named sample.wav, which must be encoded at 44,100 samples per second. The license for the supplied sample.wav file is as follows:
-diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
-index c837d77..408bf6a 100644
---- a/apps/CMakeLists.txt
-+++ b/apps/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-diff --git a/apps/hd_tx_hackrf.grc b/apps/hd_tx_hackrf.grc
-deleted file mode 100644
-index 7f93279..0000000
---- a/apps/hd_tx_hackrf.grc
-+++ /dev/null
-@@ -1,2679 +0,0 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_hackrf</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>osmosdr_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>1.5e6</value>
--    </param>
--    <param>
--      <key>corr0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>if_gain0</key>
--      <value>40</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq10</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain10</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq11</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain11</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq12</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain12</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq13</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain13</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq14</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain14</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq15</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain15</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq16</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain16</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq17</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain17</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq18</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain18</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq19</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain19</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq1</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain1</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq20</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain20</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq21</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain21</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq22</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain22</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq23</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain23</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq24</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain24</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq25</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain25</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq26</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain26</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq27</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain27</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq28</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain28</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq29</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain29</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq2</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain2</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq30</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain30</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq31</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain31</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq3</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain3</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq4</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain4</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq5</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain5</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq6</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain6</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq7</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain7</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq8</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain8</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bb_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>corr9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>freq9</key>
--      <value>100e6</value>
--    </param>
--    <param>
--      <key>if_gain9</key>
--      <value>20</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>10</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(536, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>osmosdr_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>sample_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>osmosdr_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-diff --git a/apps/hd_tx_hackrf.py b/apps/hd_tx_hackrf.py
-deleted file mode 100755
-index ab96f73..0000000
---- a/apps/hd_tx_hackrf.py
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#!/usr/bin/env python2
--# -*- coding: utf-8 -*-
--##################################################
--# GNU Radio Python Flow Graph
--# Title: Hd Tx Hackrf
--# Generated: Sun Oct 15 00:11:49 2017
--##################################################
--
--from gnuradio import analog
--from gnuradio import blocks
--from gnuradio import digital
--from gnuradio import eng_notation
--from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
--import math
--import nrsc5
--import osmosdr
--import time
--
--
--class hd_tx_hackrf(gr.top_block):
--
--    def __init__(self):
--        gr.top_block.__init__(self, "Hd Tx Hackrf")
--
--        ##################################################
--        # Variables
--        ##################################################
--        self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
--
--        ##################################################
--        # Blocks
--        ##################################################
--        self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
--                interpolation=256,
--                decimation=243,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
--                interpolation=125,
--                decimation=49,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
--                decimation=1,
--                taps=None,
--                fractional_bw=None,
--        )
--        self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + '' )
--        self.osmosdr_sink_0.set_sample_rate(samp_rate)
--        self.osmosdr_sink_0.set_center_freq(freq, 0)
--        self.osmosdr_sink_0.set_freq_corr(0, 0)
--        self.osmosdr_sink_0.set_gain(0, 0)
--        self.osmosdr_sink_0.set_if_gain(40, 0)
--        self.osmosdr_sink_0.set_bb_gain(0, 0)
--        self.osmosdr_sink_0.set_antenna('', 0)
--        self.osmosdr_sink_0.set_bandwidth(1.5e6, 0)
--
--        self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
--        self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
--        self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
--        self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
--        self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
--        self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
--        self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
--        self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
--        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
--        self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
--        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
--        self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
--        self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
--        self.blocks_add_xx_0 = blocks.add_vcc(1)
--        self.analog_wfm_tx_0 = analog.wfm_tx(
--        	audio_rate=50000,
--        	quad_rate=200000,
--        	tau=75e-6,
--        	max_dev=75e3,
--        	fh=-1.0,
--        )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
--
--        ##################################################
--        # Connections
--        ##################################################
--        self.connect((self.analog_sig_source_x_0, 0), (self.analog_wfm_tx_0, 0))
--        self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
--        self.connect((self.blocks_add_xx_0, 0), (self.osmosdr_sink_0, 0))
--        self.connect((self.blocks_conjugate_cc_0, 0), (self.rational_resampler_xxx_1, 0))
--        self.connect((self.blocks_keep_m_in_n_0, 0), (self.blocks_multiply_xx_0, 1))
--        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0))
--        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 1))
--        self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_conjugate_cc_0, 0))
--        self.connect((self.blocks_repeat_0, 0), (self.blocks_vector_to_stream_0, 0))
--        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
--        self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_multiply_xx_0, 0))
--        self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_keep_m_in_n_0, 0))
--        self.connect((self.blocks_vector_to_stream_1, 0), (self.digital_chunks_to_symbols_xx_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 0), (self.nrsc5_hdc_encoder_0, 0))
--        self.connect((self.blocks_wavfile_source_0, 1), (self.nrsc5_hdc_encoder_0, 1))
--        self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
--        self.connect((self.fft_vxx_0, 0), (self.blocks_repeat_0, 0))
--        self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_1, 0))
--        self.connect((self.nrsc5_hdc_encoder_0, 0), (self.nrsc5_l2_encoder_0, 0))
--        self.connect((self.nrsc5_l1_fm_encoder_mp1_0, 0), (self.blocks_vector_to_stream_1, 0))
--        self.connect((self.nrsc5_l2_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 0))
--        self.connect((self.nrsc5_psd_encoder_0, 0), (self.nrsc5_l2_encoder_0, 1))
--        self.connect((self.nrsc5_sis_encoder_0, 0), (self.nrsc5_l1_fm_encoder_mp1_0, 1))
--        self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
--        self.connect((self.rational_resampler_xxx_1, 0), (self.rational_resampler_xxx_2, 0))
--        self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_const_vxx_0, 0))
--
--    def get_samp_rate(self):
--        return self.samp_rate
--
--    def set_samp_rate(self, samp_rate):
--        self.samp_rate = samp_rate
--        self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
--        self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--
--    def get_freq(self):
--        return self.freq
--
--    def set_freq(self, freq):
--        self.freq = freq
--        self.osmosdr_sink_0.set_center_freq(self.freq, 0)
--
--
--def main(top_block_cls=hd_tx_hackrf, options=None):
--
--    tb = top_block_cls()
--    tb.start()
--    try:
--        raw_input('Press Enter to quit: ')
--    except EOFError:
--        pass
--    tb.stop()
--    tb.wait()
--
--
--if __name__ == '__main__':
--    main()
-diff --git a/apps/hd_tx_rtl_file.grc b/apps/hd_tx_rtl_file.grc
-index 2994383..92f5351 100644
---- a/apps/hd_tx_rtl_file.grc
-+++ b/apps/hd_tx_rtl_file.grc
-@@ -1,1420 +1,488 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_rtl_file</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>run</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>127.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(600, 564)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_const_vxx_0_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_complex_to_float</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(296, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_complex_to_float_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_file_sink</key>
--    <param>
--      <key>append</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>hd-generated.raw</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(904, 548)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_file_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>unbuffered</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_float_to_uchar</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(744, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_float_to_uchar_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_interleave</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>blocksize</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 552)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_interleave_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_streams</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.5</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 372)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>False</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 196)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>blocks_add_const_vxx_0_0</source_block_id>
--    <sink_block_id>blocks_float_to_uchar_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_complex_to_float_0</source_block_id>
--    <sink_block_id>blocks_interleave_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_float_to_uchar_0</source_block_id>
--    <sink_block_id>blocks_file_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_interleave_0</source_block_id>
--    <sink_block_id>blocks_add_const_vxx_0_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_complex_to_float_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_rtl_file
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: blocks_add_const_vxx_0_0
-+  id: blocks_add_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '127.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [576, 548.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_complex_to_float_0
-+  id: blocks_complex_to_float
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_file_sink_0
-+  id: blocks_file_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    append: 'False'
-+    comment: ''
-+    file: hd-generated.raw
-+    type: byte
-+    unbuffered: 'False'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 532.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_float_to_uchar_0
-+  id: blocks_float_to_uchar
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [720, 552.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_interleave_0
-+  id: blocks_interleave
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    blocksize: '1'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_streams: '2'
-+    type: float
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [448, 536.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.5'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [272, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [440, 396.0]
-+    rotation: 180
-+    state: enabled
-+
-+connections:
-+- [blocks_add_const_vxx_0_0, '0', blocks_float_to_uchar_0, '0']
-+- [blocks_complex_to_float_0, '0', blocks_interleave_0, '0']
-+- [blocks_complex_to_float_0, '1', blocks_interleave_0, '1']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_float_to_uchar_0, '0', blocks_file_sink_0, '0']
-+- [blocks_interleave_0, '0', blocks_add_const_vxx_0_0, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_complex_to_float_0, '0']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_1, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_rtl_file.py b/apps/hd_tx_rtl_file.py
-index 41d19b1..77e7eb0 100755
---- a/apps/hd_tx_rtl_file.py
-+++ b/apps/hd_tx_rtl_file.py
-@@ -1,25 +1,28 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Rtl File
--# Generated: Sun Oct 15 00:14:13 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
--from gnuradio import filter
--from gnuradio import gr
--from gnuradio.eng_option import eng_option
- from gnuradio.fft import window
-+from gnuradio import filter
- from gnuradio.filter import firdes
--from optparse import OptionParser
-+from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- import math
- import nrsc5
- 
--
- class hd_tx_rtl_file(gr.top_block):
- 
-     def __init__(self):
-@@ -32,23 +35,22 @@ def __init__(self):
-                 interpolation=2,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
--        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', False)
-+        self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-         self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_vector_source_x_0 = blocks.vector_source_c([math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)], True, 1, [])
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.5, ))
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.5)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_interleave_0 = blocks.interleave(gr.sizeof_float*1, 1)
-         self.blocks_float_to_uchar_0 = blocks.float_to_uchar()
-@@ -56,7 +58,9 @@ def __init__(self):
-         self.blocks_file_sink_0.set_unbuffered(False)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
--        self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((127.5, ))
-+        self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(127.5)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -87,10 +91,24 @@ def __init__(self):
-         self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0))
- 
- 
--def main(top_block_cls=hd_tx_rtl_file, options=None):
- 
-+def main(top_block_cls=hd_tx_rtl_file, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-+    try:
-+        input('Press Enter to quit: ')
-+    except EOFError:
-+        pass
-+    tb.stop()
-     tb.wait()
- 
- 
-diff --git a/apps/hd_tx_usrp.grc b/apps/hd_tx_usrp.grc
-index fc6fc4e..8e34368 100644
---- a/apps/hd_tx_usrp.grc
-+++ b/apps/hd_tx_usrp.grc
-@@ -1,2487 +1,846 @@
--<?xml version='1.0' encoding='utf-8'?>
--<?grc format='1' created='3.7.12'?>
--<flow_graph>
--  <timestamp>Fri Sep 16 01:35:53 2016</timestamp>
--  <block>
--    <key>options</key>
--    <param>
--      <key>author</key>
--      <value></value>
--    </param>
--    <param>
--      <key>window_size</key>
--      <value></value>
--    </param>
--    <param>
--      <key>category</key>
--      <value>[GRC Hier Blocks]</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>description</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 12)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>generate_options</key>
--      <value>no_gui</value>
--    </param>
--    <param>
--      <key>hier_block_src_path</key>
--      <value>.:</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>hd_tx_usrp</value>
--    </param>
--    <param>
--      <key>max_nouts</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>qt_qss_theme</key>
--      <value></value>
--    </param>
--    <param>
--      <key>realtime_scheduling</key>
--      <value></value>
--    </param>
--    <param>
--      <key>run_command</key>
--      <value>{python} -u {filename}</value>
--    </param>
--    <param>
--      <key>run_options</key>
--      <value>prompt</value>
--    </param>
--    <param>
--      <key>run</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>thread_safe_setters</key>
--      <value></value>
--    </param>
--    <param>
--      <key>title</key>
--      <value></value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 164)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>95.7e6</value>
--    </param>
--  </block>
--  <block>
--    <key>variable</key>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 100)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>value</key>
--      <value>2000000</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_sig_source_x</key>
--    <param>
--      <key>amp</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>freq</key>
--      <value>1000</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(896, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_sig_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>float</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>waveform</key>
--      <value>analog.GR_COS_WAVE</value>
--    </param>
--  </block>
--  <block>
--    <key>analog_wfm_tx</key>
--    <param>
--      <key>audio_rate</key>
--      <value>50000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(640, 584)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>analog_wfm_tx_0</value>
--    </param>
--    <param>
--      <key>max_dev</key>
--      <value>75e3</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>fh</key>
--      <value>-1.0</value>
--    </param>
--    <param>
--      <key>quad_rate</key>
--      <value>200000</value>
--    </param>
--    <param>
--      <key>tau</key>
--      <value>75e-6</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_add_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(424, 472)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_add_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_conjugate_cc</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(624, 376)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_conjugate_cc_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_keep_m_in_n</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 340)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_keep_m_in_n_0</value>
--    </param>
--    <param>
--      <key>m</key>
--      <value>2160</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>n</key>
--      <value>4096</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>offset</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.001</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(248, 468)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_const_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>const</key>
--      <value>0.1</value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(104, 612)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_const_vxx_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_multiply_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(816, 360)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_multiply_xx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_inputs</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_repeat</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_repeat_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>2048</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_stream_to_vector</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_stream_to_vector_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_source_x</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(952, 428)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_source_x_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>tags</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>vector</key>
--      <value>[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112) + [math.cos(math.pi / 2 * i / 112) for i in range(112)]</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(1104, 356)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_vector_to_stream</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(288, 252)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_vector_to_stream_1</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_items</key>
--      <value>1048576</value>
--    </param>
--    <param>
--      <key>vlen</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>blocks_wavfile_source</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>file</key>
--      <value>sample.wav</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(328, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>blocks_wavfile_source_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>repeat</key>
--      <value>True</value>
--    </param>
--  </block>
--  <block>
--    <key>digital_chunks_to_symbols_xx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dimension</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(472, 244)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>digital_chunks_to_symbols_xx_0</value>
--    </param>
--    <param>
--      <key>in_type</key>
--      <value>byte</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_ports</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>out_type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>symbol_table</key>
--      <value>-1-1j, -1+1j, 1-1j, 1+1j, 0</value>
--    </param>
--  </block>
--  <block>
--    <key>fft_vxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fft_size</key>
--      <value>2048</value>
--    </param>
--    <param>
--      <key>forward</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(880, 224)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>fft_vxx_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>complex</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>nthreads</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>shift</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>window</key>
--      <value>window.rectangular(2048)</value>
--    </param>
--  </block>
--  <block>
--    <key>import</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(8, 236)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>import_0</value>
--    </param>
--    <param>
--      <key>import</key>
--      <value>import math</value>
--    </param>
--  </block>
--  <block>
--    <key>low_pass_filter</key>
--    <param>
--      <key>beta</key>
--      <value>6.76</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>cutoff_freq</key>
--      <value>80000</value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fir_filter_ccf</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(264, 568)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>gain</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>low_pass_filter_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>width</key>
--      <value>20000</value>
--    </param>
--    <param>
--      <key>win</key>
--      <value>firdes.WIN_HAMMING</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_hdc_encoder</key>
--    <param>
--      <key>bitrate</key>
--      <value>64000</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>channels</key>
--      <value>2</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(512, 16)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_hdc_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l1_fm_encoder_mp1</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(888, 48)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l1_fm_encoder_mp1_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_l2_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>first_prog</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>size</key>
--      <value>146176</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(696, 32)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_l2_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>num_progs</key>
--      <value>1</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_sis_encoder</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(688, 108)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_sis_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>short_name</key>
--      <value>ABCD</value>
--    </param>
--  </block>
--  <block>
--    <key>nrsc5_psd_encoder</key>
--    <param>
--      <key>artist</key>
--      <value>Artist</value>
--    </param>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(488, 92)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>nrsc5_psd_encoder_0</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>prog_num</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>title</key>
--      <value>Title</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(448, 592)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_0</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>samp_rate / 200000</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>49</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(432, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_1</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>125</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>rational_resampler_xxx</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>decim</key>
--      <value>243</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>fbw</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(240, 352)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>180</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>rational_resampler_xxx_2</value>
--    </param>
--    <param>
--      <key>interp</key>
--      <value>256</value>
--    </param>
--    <param>
--      <key>maxoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>minoutbuf</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>taps</key>
--      <value></value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>ccc</value>
--    </param>
--  </block>
--  <block>
--    <key>uhd_usrp_sink</key>
--    <param>
--      <key>alias</key>
--      <value></value>
--    </param>
--    <param>
--      <key>ant0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw0</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq0</key>
--      <value>freq</value>
--    </param>
--    <param>
--      <key>norm_gain0</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain0</key>
--      <value>70</value>
--    </param>
--    <param>
--      <key>ant10</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain10</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain10</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant11</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain11</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain11</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant12</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain12</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain12</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant13</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain13</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain13</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant14</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain14</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain14</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant15</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain15</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain15</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant16</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain16</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain16</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant17</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain17</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain17</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant18</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain18</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain18</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant19</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain19</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain19</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain1</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain1</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant20</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain20</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain20</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant21</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain21</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain21</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant22</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain22</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain22</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant23</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain23</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain23</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant24</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain24</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain24</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant25</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain25</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain25</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant26</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain26</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain26</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant27</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain27</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain27</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant28</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain28</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain28</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant29</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain29</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain29</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain2</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain2</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant30</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain30</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain30</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant31</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain31</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain31</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain3</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain3</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain4</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain4</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain5</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain5</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain6</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain6</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain7</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain7</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant8</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain8</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain8</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>ant9</key>
--      <value></value>
--    </param>
--    <param>
--      <key>bw9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>center_freq9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>norm_gain9</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>gain9</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>clock_rate</key>
--      <value>0.0</value>
--    </param>
--    <param>
--      <key>comment</key>
--      <value></value>
--    </param>
--    <param>
--      <key>affinity</key>
--      <value></value>
--    </param>
--    <param>
--      <key>dev_addr</key>
--      <value>""</value>
--    </param>
--    <param>
--      <key>dev_args</key>
--      <value>"send_frame_size=65536,num_send_frames=128"</value>
--    </param>
--    <param>
--      <key>_enabled</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>_coordinate</key>
--      <value>(528, 440)</value>
--    </param>
--    <param>
--      <key>_rotation</key>
--      <value>0</value>
--    </param>
--    <param>
--      <key>id</key>
--      <value>uhd_usrp_sink_0</value>
--    </param>
--    <param>
--      <key>type</key>
--      <value>fc32</value>
--    </param>
--    <param>
--      <key>clock_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source0</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source1</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source2</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source3</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source4</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source5</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source6</key>
--      <value></value>
--    </param>
--    <param>
--      <key>clock_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>sd_spec7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>time_source7</key>
--      <value></value>
--    </param>
--    <param>
--      <key>nchan</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>num_mboards</key>
--      <value>1</value>
--    </param>
--    <param>
--      <key>samp_rate</key>
--      <value>samp_rate</value>
--    </param>
--    <param>
--      <key>hide_cmd_port</key>
--      <value>False</value>
--    </param>
--    <param>
--      <key>hide_lo_controls</key>
--      <value>True</value>
--    </param>
--    <param>
--      <key>stream_args</key>
--      <value></value>
--    </param>
--    <param>
--      <key>stream_chans</key>
--      <value>[]</value>
--    </param>
--    <param>
--      <key>sync</key>
--      <value></value>
--    </param>
--    <param>
--      <key>len_tag_name</key>
--      <value></value>
--    </param>
--    <param>
--      <key>otw</key>
--      <value></value>
--    </param>
--  </block>
--  <connection>
--    <source_block_id>analog_sig_source_x_0</source_block_id>
--    <sink_block_id>analog_wfm_tx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>analog_wfm_tx_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_add_xx_0</source_block_id>
--    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_conjugate_cc_0</source_block_id>
--    <sink_block_id>rational_resampler_xxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_keep_m_in_n_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
--    <sink_block_id>blocks_add_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_multiply_xx_0</source_block_id>
--    <sink_block_id>blocks_conjugate_cc_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_repeat_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_stream_to_vector_0</source_block_id>
--    <sink_block_id>fft_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_source_x_0</source_block_id>
--    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_0</source_block_id>
--    <sink_block_id>blocks_keep_m_in_n_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_vector_to_stream_1</source_block_id>
--    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>blocks_wavfile_source_0</source_block_id>
--    <sink_block_id>nrsc5_hdc_encoder_0</sink_block_id>
--    <source_key>1</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
--    <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>fft_vxx_0</source_block_id>
--    <sink_block_id>blocks_repeat_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>low_pass_filter_0</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_hdc_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l1_fm_encoder_mp1_0</source_block_id>
--    <sink_block_id>blocks_vector_to_stream_1</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_l2_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_sis_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l1_fm_encoder_mp1_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>nrsc5_psd_encoder_0</source_block_id>
--    <sink_block_id>nrsc5_l2_encoder_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>1</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_0</source_block_id>
--    <sink_block_id>low_pass_filter_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_1</source_block_id>
--    <sink_block_id>rational_resampler_xxx_2</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--  <connection>
--    <source_block_id>rational_resampler_xxx_2</source_block_id>
--    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
--    <source_key>0</source_key>
--    <sink_key>0</sink_key>
--  </connection>
--</flow_graph>
-+options:
-+  parameters:
-+    author: ''
-+    category: '[GRC Hier Blocks]'
-+    cmake_opt: ''
-+    comment: ''
-+    copyright: ''
-+    description: ''
-+    gen_cmake: 'On'
-+    gen_linking: dynamic
-+    generate_options: no_gui
-+    hier_block_src_path: '.:'
-+    id: hd_tx_usrp
-+    max_nouts: '0'
-+    output_language: python
-+    placement: (0,0)
-+    qt_qss_theme: ''
-+    realtime_scheduling: ''
-+    run: 'True'
-+    run_command: '{python} -u {filename}'
-+    run_options: prompt
-+    sizing_mode: fixed
-+    thread_safe_setters: ''
-+    title: ''
-+    window_size: ''
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 12]
-+    rotation: 0
-+    state: enabled
-+
-+blocks:
-+- name: freq
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: 87.5e6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 164]
-+    rotation: 0
-+    state: enabled
-+- name: samp_rate
-+  id: variable
-+  parameters:
-+    comment: ''
-+    value: '2000000'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 100]
-+    rotation: 0
-+    state: enabled
-+- name: analog_sig_source_x_0
-+  id: analog_sig_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    amp: '0.1'
-+    comment: ''
-+    freq: '1000'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    offset: '0'
-+    phase: '0'
-+    samp_rate: '50000'
-+    type: float
-+    waveform: analog.GR_COS_WAVE
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1152, 644.0]
-+    rotation: 180
-+    state: enabled
-+- name: analog_wfm_tx_0
-+  id: analog_wfm_tx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    audio_rate: '50000'
-+    comment: ''
-+    fh: '-1.0'
-+    max_dev: 75e3
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    quad_rate: '200000'
-+    tau: 75e-6
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 652.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_add_xx_0
-+  id: blocks_add_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [424, 544.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_conjugate_cc_0
-+  id: blocks_conjugate_cc
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [624, 424.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_keep_m_in_n_0
-+  id: blocks_keep_m_in_n
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    m: '2160'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    n: '4096'
-+    offset: '0'
-+    type: complex
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 420.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_const_vxx_0
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.001'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [248, 540.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_multiply_const_vxx_1
-+  id: blocks_multiply_const_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    const: '0.1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [368, 684.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_multiply_xx_0
-+  id: blocks_multiply_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_inputs: '2'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [816, 408.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_repeat_0
-+  id: blocks_repeat
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    interp: '2'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    type: complex
-+    vlen: '2048'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 244]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_stream_to_vector_0
-+  id: blocks_stream_to_vector
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [696, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_vector_source_x_0
-+  id: blocks_vector_source_x
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    repeat: 'True'
-+    tags: '[]'
-+    type: complex
-+    vector: '[math.sin(math.pi / 2 * i / 112) for i in range(112)] + [1] * (2048-112)
-+      + [math.cos(math.pi / 2 * i / 112) for i in range(112)]'
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [952, 340.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_0
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '2048'
-+    type: complex
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [1104, 440.0]
-+    rotation: 180
-+    state: enabled
-+- name: blocks_vector_to_stream_1
-+  id: blocks_vector_to_stream
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_items: '1048576'
-+    type: byte
-+    vlen: '1'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: blocks_wavfile_source_0
-+  id: blocks_wavfile_source
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    file: sample.wav
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '2'
-+    repeat: 'True'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [896, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: digital_chunks_to_symbols_xx_0
-+  id: digital_chunks_to_symbols_xx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    dimension: '1'
-+    in_type: byte
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_ports: '1'
-+    out_type: complex
-+    symbol_table: (-1-1j, -1+1j, 1-1j, 1+1j, 0)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [472, 256.0]
-+    rotation: 0
-+    state: enabled
-+- name: fft_vxx_0
-+  id: fft_vxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    fft_size: '2048'
-+    forward: 'False'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nthreads: '1'
-+    shift: 'True'
-+    type: complex
-+    window: window.rectangular(2048)
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [880, 220.0]
-+    rotation: 0
-+    state: enabled
-+- name: import_0
-+  id: import
-+  parameters:
-+    alias: ''
-+    comment: ''
-+    imports: import math
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [8, 236]
-+    rotation: 0
-+    state: enabled
-+- name: low_pass_filter_0
-+  id: low_pass_filter
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    beta: '6.76'
-+    comment: ''
-+    cutoff_freq: '80000'
-+    decim: '1'
-+    gain: '1'
-+    interp: '1'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    samp_rate: samp_rate
-+    type: fir_filter_ccf
-+    width: '20000'
-+    win: firdes.WIN_HAMMING
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 636.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_hdc_encoder_0
-+  id: nrsc5_hdc_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    bitrate: '64000'
-+    channels: '2'
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 56.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l1_fm_encoder_mp1_0
-+  id: nrsc5_l1_fm_encoder_mp1
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [288, 88.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_l2_encoder_0
-+  id: nrsc5_l2_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    first_prog: '0'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    num_progs: '1'
-+    size: '146176'
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 68.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_psd_encoder_0
-+  id: nrsc5_psd_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    artist: Artist
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    prog_num: '0'
-+    title: Title
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [728, 132.0]
-+    rotation: 180
-+    state: enabled
-+- name: nrsc5_sis_encoder_0
-+  id: nrsc5_sis_encoder
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    short_name: ABCD
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 148.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_0
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '1'
-+    fbw: '0'
-+    interp: samp_rate // 200000
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [704, 660.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_1
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '49'
-+    fbw: '0'
-+    interp: '125'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [432, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: rational_resampler_xxx_2
-+  id: rational_resampler_xxx
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    comment: ''
-+    decim: '243'
-+    fbw: '0'
-+    interp: '256'
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    taps: ''
-+    type: ccc
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [240, 396.0]
-+    rotation: 180
-+    state: enabled
-+- name: uhd_usrp_sink_0
-+  id: uhd_usrp_sink
-+  parameters:
-+    affinity: ''
-+    alias: ''
-+    ant0: TX/RX
-+    ant1: ''
-+    ant10: ''
-+    ant11: ''
-+    ant12: ''
-+    ant13: ''
-+    ant14: ''
-+    ant15: ''
-+    ant16: ''
-+    ant17: ''
-+    ant18: ''
-+    ant19: ''
-+    ant2: ''
-+    ant20: ''
-+    ant21: ''
-+    ant22: ''
-+    ant23: ''
-+    ant24: ''
-+    ant25: ''
-+    ant26: ''
-+    ant27: ''
-+    ant28: ''
-+    ant29: ''
-+    ant3: ''
-+    ant30: ''
-+    ant31: ''
-+    ant4: ''
-+    ant5: ''
-+    ant6: ''
-+    ant7: ''
-+    ant8: ''
-+    ant9: ''
-+    bw0: '0'
-+    bw1: '0'
-+    bw10: '0'
-+    bw11: '0'
-+    bw12: '0'
-+    bw13: '0'
-+    bw14: '0'
-+    bw15: '0'
-+    bw16: '0'
-+    bw17: '0'
-+    bw18: '0'
-+    bw19: '0'
-+    bw2: '0'
-+    bw20: '0'
-+    bw21: '0'
-+    bw22: '0'
-+    bw23: '0'
-+    bw24: '0'
-+    bw25: '0'
-+    bw26: '0'
-+    bw27: '0'
-+    bw28: '0'
-+    bw29: '0'
-+    bw3: '0'
-+    bw30: '0'
-+    bw31: '0'
-+    bw4: '0'
-+    bw5: '0'
-+    bw6: '0'
-+    bw7: '0'
-+    bw8: '0'
-+    bw9: '0'
-+    center_freq0: freq
-+    center_freq1: '0'
-+    center_freq10: '0'
-+    center_freq11: '0'
-+    center_freq12: '0'
-+    center_freq13: '0'
-+    center_freq14: '0'
-+    center_freq15: '0'
-+    center_freq16: '0'
-+    center_freq17: '0'
-+    center_freq18: '0'
-+    center_freq19: '0'
-+    center_freq2: '0'
-+    center_freq20: '0'
-+    center_freq21: '0'
-+    center_freq22: '0'
-+    center_freq23: '0'
-+    center_freq24: '0'
-+    center_freq25: '0'
-+    center_freq26: '0'
-+    center_freq27: '0'
-+    center_freq28: '0'
-+    center_freq29: '0'
-+    center_freq3: '0'
-+    center_freq30: '0'
-+    center_freq31: '0'
-+    center_freq4: '0'
-+    center_freq5: '0'
-+    center_freq6: '0'
-+    center_freq7: '0'
-+    center_freq8: '0'
-+    center_freq9: '0'
-+    clock_rate: '0.0'
-+    clock_source0: ''
-+    clock_source1: ''
-+    clock_source2: ''
-+    clock_source3: ''
-+    clock_source4: ''
-+    clock_source5: ''
-+    clock_source6: ''
-+    clock_source7: ''
-+    comment: ''
-+    dev_addr: '""'
-+    dev_args: ''
-+    gain0: '70'
-+    gain1: '0'
-+    gain10: '0'
-+    gain11: '0'
-+    gain12: '0'
-+    gain13: '0'
-+    gain14: '0'
-+    gain15: '0'
-+    gain16: '0'
-+    gain17: '0'
-+    gain18: '0'
-+    gain19: '0'
-+    gain2: '0'
-+    gain20: '0'
-+    gain21: '0'
-+    gain22: '0'
-+    gain23: '0'
-+    gain24: '0'
-+    gain25: '0'
-+    gain26: '0'
-+    gain27: '0'
-+    gain28: '0'
-+    gain29: '0'
-+    gain3: '0'
-+    gain30: '0'
-+    gain31: '0'
-+    gain4: '0'
-+    gain5: '0'
-+    gain6: '0'
-+    gain7: '0'
-+    gain8: '0'
-+    gain9: '0'
-+    len_tag_name: ''
-+    lo_export0: 'False'
-+    lo_export1: 'False'
-+    lo_export10: 'False'
-+    lo_export11: 'False'
-+    lo_export12: 'False'
-+    lo_export13: 'False'
-+    lo_export14: 'False'
-+    lo_export15: 'False'
-+    lo_export16: 'False'
-+    lo_export17: 'False'
-+    lo_export18: 'False'
-+    lo_export19: 'False'
-+    lo_export2: 'False'
-+    lo_export20: 'False'
-+    lo_export21: 'False'
-+    lo_export22: 'False'
-+    lo_export23: 'False'
-+    lo_export24: 'False'
-+    lo_export25: 'False'
-+    lo_export26: 'False'
-+    lo_export27: 'False'
-+    lo_export28: 'False'
-+    lo_export29: 'False'
-+    lo_export3: 'False'
-+    lo_export30: 'False'
-+    lo_export31: 'False'
-+    lo_export4: 'False'
-+    lo_export5: 'False'
-+    lo_export6: 'False'
-+    lo_export7: 'False'
-+    lo_export8: 'False'
-+    lo_export9: 'False'
-+    lo_source0: internal
-+    lo_source1: internal
-+    lo_source10: internal
-+    lo_source11: internal
-+    lo_source12: internal
-+    lo_source13: internal
-+    lo_source14: internal
-+    lo_source15: internal
-+    lo_source16: internal
-+    lo_source17: internal
-+    lo_source18: internal
-+    lo_source19: internal
-+    lo_source2: internal
-+    lo_source20: internal
-+    lo_source21: internal
-+    lo_source22: internal
-+    lo_source23: internal
-+    lo_source24: internal
-+    lo_source25: internal
-+    lo_source26: internal
-+    lo_source27: internal
-+    lo_source28: internal
-+    lo_source29: internal
-+    lo_source3: internal
-+    lo_source30: internal
-+    lo_source31: internal
-+    lo_source4: internal
-+    lo_source5: internal
-+    lo_source6: internal
-+    lo_source7: internal
-+    lo_source8: internal
-+    lo_source9: internal
-+    maxoutbuf: '0'
-+    minoutbuf: '0'
-+    nchan: '1'
-+    norm_gain0: 'False'
-+    norm_gain1: 'False'
-+    norm_gain10: 'False'
-+    norm_gain11: 'False'
-+    norm_gain12: 'False'
-+    norm_gain13: 'False'
-+    norm_gain14: 'False'
-+    norm_gain15: 'False'
-+    norm_gain16: 'False'
-+    norm_gain17: 'False'
-+    norm_gain18: 'False'
-+    norm_gain19: 'False'
-+    norm_gain2: 'False'
-+    norm_gain20: 'False'
-+    norm_gain21: 'False'
-+    norm_gain22: 'False'
-+    norm_gain23: 'False'
-+    norm_gain24: 'False'
-+    norm_gain25: 'False'
-+    norm_gain26: 'False'
-+    norm_gain27: 'False'
-+    norm_gain28: 'False'
-+    norm_gain29: 'False'
-+    norm_gain3: 'False'
-+    norm_gain30: 'False'
-+    norm_gain31: 'False'
-+    norm_gain4: 'False'
-+    norm_gain5: 'False'
-+    norm_gain6: 'False'
-+    norm_gain7: 'False'
-+    norm_gain8: 'False'
-+    norm_gain9: 'False'
-+    num_mboards: '1'
-+    otw: ''
-+    samp_rate: samp_rate
-+    sd_spec0: ''
-+    sd_spec1: ''
-+    sd_spec2: ''
-+    sd_spec3: ''
-+    sd_spec4: ''
-+    sd_spec5: ''
-+    sd_spec6: ''
-+    sd_spec7: ''
-+    show_lo_controls: 'False'
-+    stream_args: ''
-+    stream_chans: '[]'
-+    sync: sync
-+    time_source0: ''
-+    time_source1: ''
-+    time_source2: ''
-+    time_source3: ''
-+    time_source4: ''
-+    time_source5: ''
-+    time_source6: ''
-+    time_source7: ''
-+    type: fc32
-+  states:
-+    bus_sink: false
-+    bus_source: false
-+    bus_structure: null
-+    coordinate: [528, 500.0]
-+    rotation: 0
-+    state: enabled
-+
-+connections:
-+- [analog_sig_source_x_0, '0', analog_wfm_tx_0, '0']
-+- [analog_wfm_tx_0, '0', rational_resampler_xxx_0, '0']
-+- [blocks_add_xx_0, '0', uhd_usrp_sink_0, '0']
-+- [blocks_conjugate_cc_0, '0', rational_resampler_xxx_1, '0']
-+- [blocks_keep_m_in_n_0, '0', blocks_multiply_xx_0, '1']
-+- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0']
-+- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1']
-+- [blocks_multiply_xx_0, '0', blocks_conjugate_cc_0, '0']
-+- [blocks_repeat_0, '0', blocks_vector_to_stream_0, '0']
-+- [blocks_stream_to_vector_0, '0', fft_vxx_0, '0']
-+- [blocks_vector_source_x_0, '0', blocks_multiply_xx_0, '0']
-+- [blocks_vector_to_stream_0, '0', blocks_keep_m_in_n_0, '0']
-+- [blocks_vector_to_stream_1, '0', digital_chunks_to_symbols_xx_0, '0']
-+- [blocks_wavfile_source_0, '0', nrsc5_hdc_encoder_0, '0']
-+- [blocks_wavfile_source_0, '1', nrsc5_hdc_encoder_0, '1']
-+- [digital_chunks_to_symbols_xx_0, '0', blocks_stream_to_vector_0, '0']
-+- [fft_vxx_0, '0', blocks_repeat_0, '0']
-+- [low_pass_filter_0, '0', blocks_multiply_const_vxx_1, '0']
-+- [nrsc5_hdc_encoder_0, '0', nrsc5_l2_encoder_0, '0']
-+- [nrsc5_l1_fm_encoder_mp1_0, '0', blocks_vector_to_stream_1, '0']
-+- [nrsc5_l2_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '0']
-+- [nrsc5_psd_encoder_0, '0', nrsc5_l2_encoder_0, '1']
-+- [nrsc5_sis_encoder_0, '0', nrsc5_l1_fm_encoder_mp1_0, '1']
-+- [rational_resampler_xxx_0, '0', low_pass_filter_0, '0']
-+- [rational_resampler_xxx_1, '0', rational_resampler_xxx_2, '0']
-+- [rational_resampler_xxx_2, '0', blocks_multiply_const_vxx_0, '0']
-+
-+metadata:
-+  file_format: 1
-diff --git a/apps/hd_tx_usrp.py b/apps/hd_tx_usrp.py
-index 45c7145..37426ab 100755
---- a/apps/hd_tx_usrp.py
-+++ b/apps/hd_tx_usrp.py
-@@ -1,27 +1,30 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
--##################################################
-+
-+#
-+# SPDX-License-Identifier: GPL-3.0
-+#
- # GNU Radio Python Flow Graph
- # Title: Hd Tx Usrp
--# Generated: Sun Oct 15 00:12:12 2017
--##################################################
-+# GNU Radio version: 3.8.0.0-rc2
- 
- from gnuradio import analog
- from gnuradio import blocks
- from gnuradio import digital
--from gnuradio import eng_notation
- from gnuradio import fft
-+from gnuradio.fft import window
- from gnuradio import filter
-+from gnuradio.filter import firdes
- from gnuradio import gr
-+import sys
-+import signal
-+from argparse import ArgumentParser
-+from gnuradio.eng_arg import eng_float, intx
-+from gnuradio import eng_notation
- from gnuradio import uhd
--from gnuradio.eng_option import eng_option
--from gnuradio.fft import window
--from gnuradio.filter import firdes
--from optparse import OptionParser
-+import time
- import math
- import nrsc5
--import time
--
- 
- class hd_tx_usrp(gr.top_block):
- 
-@@ -32,47 +35,55 @@ def __init__(self):
-         # Variables
-         ##################################################
-         self.samp_rate = samp_rate = 2000000
--        self.freq = freq = 95.7e6
-+        self.freq = freq = 87.5e6
- 
-         ##################################################
-         # Blocks
-         ##################################################
-         self.uhd_usrp_sink_0 = uhd.usrp_sink(
--        	",".join(("", "send_frame_size=65536,num_send_frames=128")),
--        	uhd.stream_args(
--        		cpu_format="fc32",
--        		channels=range(1),
--        	),
-+            ",".join(("", '')),
-+            uhd.stream_args(
-+                cpu_format="fc32",
-+                args='',
-+                channels=[],
-+            ),
-+            '',
-         )
--        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-         self.uhd_usrp_sink_0.set_center_freq(freq, 0)
-         self.uhd_usrp_sink_0.set_gain(70, 0)
-+        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
-+        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
-+        self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
-         self.rational_resampler_xxx_2 = filter.rational_resampler_ccc(
-                 interpolation=256,
-                 decimation=243,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_1 = filter.rational_resampler_ccc(
-                 interpolation=125,
-                 decimation=49,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
--                interpolation=samp_rate / 200000,
-+                interpolation=samp_rate // 200000,
-                 decimation=1,
-                 taps=None,
--                fractional_bw=None,
--        )
-+                fractional_bw=None)
-         self.nrsc5_sis_encoder_0 = nrsc5.sis_encoder('ABCD')
-         self.nrsc5_psd_encoder_0 = nrsc5.psd_encoder(0, 'Title', 'Artist')
-         self.nrsc5_l2_encoder_0 = nrsc5.l2_encoder(1, 0, 146176)
-         self.nrsc5_l1_fm_encoder_mp1_0 = nrsc5.l1_fm_encoder(1)
-         self.nrsc5_hdc_encoder_0 = nrsc5.hdc_encoder(2, 64000)
--        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
--        	1, samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
--        self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1)
-+        self.low_pass_filter_0 = filter.fir_filter_ccf(
-+            1,
-+            firdes.low_pass(
-+                1,
-+                samp_rate,
-+                80000,
-+                20000,
-+                firdes.WIN_HAMMING,
-+                6.76))
-+        self.fft_vxx_0 = fft.fft_vcc(2048, False, window.rectangular(2048), True, 1)
-         self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc((-1-1j, -1+1j, 1-1j, 1+1j, 0), 1)
-         self.blocks_wavfile_source_0 = blocks.wavfile_source('sample.wav', True)
-         self.blocks_vector_to_stream_1 = blocks.vector_to_stream(gr.sizeof_char*1, 1048576)
-@@ -81,8 +92,8 @@ def __init__(self):
-         self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, 2048)
-         self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*2048, 2)
-         self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
--        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.1, ))
--        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.001, ))
-+        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_cc(0.1)
-+        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(0.001)
-         self.blocks_keep_m_in_n_0 = blocks.keep_m_in_n(gr.sizeof_gr_complex, 2160, 4096, 0)
-         self.blocks_conjugate_cc_0 = blocks.conjugate_cc()
-         self.blocks_add_xx_0 = blocks.add_vcc(1)
-@@ -93,7 +104,9 @@ def __init__(self):
-         	max_dev=75e3,
-         	fh=-1.0,
-         )
--        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0)
-+        self.analog_sig_source_x_0 = analog.sig_source_f(50000, analog.GR_COS_WAVE, 1000, 0.1, 0, 0)
-+
-+
- 
-         ##################################################
-         # Connections
-@@ -130,8 +143,8 @@ def get_samp_rate(self):
- 
-     def set_samp_rate(self, samp_rate):
-         self.samp_rate = samp_rate
--        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
-         self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 80000, 20000, firdes.WIN_HAMMING, 6.76))
-+        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
- 
-     def get_freq(self):
-         return self.freq
-@@ -141,12 +154,21 @@ def set_freq(self, freq):
-         self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
- 
- 
--def main(top_block_cls=hd_tx_usrp, options=None):
- 
-+def main(top_block_cls=hd_tx_usrp, options=None):
-     tb = top_block_cls()
-+
-+    def sig_handler(sig=None, frame=None):
-+        tb.stop()
-+        tb.wait()
-+        sys.exit(0)
-+
-+    signal.signal(signal.SIGINT, sig_handler)
-+    signal.signal(signal.SIGTERM, sig_handler)
-+
-     tb.start()
-     try:
--        raw_input('Press Enter to quit: ')
-+        input('Press Enter to quit: ')
-     except EOFError:
-         pass
-     tb.stop()
-diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-index 7ce4c49..66016cb 100644
---- a/cmake/Modules/CMakeParseArgumentsCopy.cmake
-+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
-@@ -58,7 +58,7 @@
- # the new option.
- # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
- # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
--# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
-+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
- 
- #=============================================================================
- # Copyright 2010 Alexander Neundorf <neundorf@kde.org>
-diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
-deleted file mode 100644
-index f93ade3..0000000
---- a/cmake/Modules/FindCppUnit.cmake
-+++ /dev/null
-@@ -1,39 +0,0 @@
--# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
--# Modified to use pkg config and use standard var names
--
--#
--# Find the CppUnit includes and library
--#
--# This module defines
--# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
--# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
--# CPPUNIT_FOUND, If false, do not try to use CppUnit.
--
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
--
--FIND_PATH(CPPUNIT_INCLUDE_DIRS
--    NAMES cppunit/TestCase.h
--    HINTS ${PC_CPPUNIT_INCLUDE_DIR}
--    ${CMAKE_INSTALL_PREFIX}/include
--    PATHS
--    /usr/local/include
--    /usr/include
--)
--
--FIND_LIBRARY(CPPUNIT_LIBRARIES
--    NAMES cppunit
--    HINTS ${PC_CPPUNIT_LIBDIR}
--    ${CMAKE_INSTALL_PREFIX}/lib
--    ${CMAKE_INSTALL_PREFIX}/lib64
--    PATHS
--    ${CPPUNIT_INCLUDE_DIRS}/../lib
--    /usr/local/lib
--    /usr/lib
--)
--
--LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
--
--INCLUDE(FindPackageHandleStandardArgs)
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
--MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake
-deleted file mode 100644
-index afed684..0000000
---- a/cmake/Modules/FindGnuradioRuntime.cmake
-+++ /dev/null
-@@ -1,36 +0,0 @@
--INCLUDE(FindPkgConfig)
--PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)
--
--if(PC_GNURADIO_RUNTIME_FOUND)
--  # look for include files
--  FIND_PATH(
--    GNURADIO_RUNTIME_INCLUDE_DIRS
--    NAMES gnuradio/top_block.h
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include
--          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}
--          ${CMAKE_INSTALL_PREFIX}/include
--    PATHS /usr/local/include
--          /usr/include
--    )
--
--  # look for libs
--  FIND_LIBRARY(
--    GNURADIO_RUNTIME_LIBRARIES
--    NAMES gnuradio-runtime
--    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib
--          ${PC_GNURADIO_RUNTIME_LIBDIR}
--          ${CMAKE_INSTALL_PREFIX}/lib/
--          ${CMAKE_INSTALL_PREFIX}/lib64/
--    PATHS /usr/local/lib
--          /usr/local/lib64
--          /usr/lib
--          /usr/lib64
--    )
--
--  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})
--endif(PC_GNURADIO_RUNTIME_FOUND)
--
--INCLUDE(FindPackageHandleStandardArgs)
--# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.
--FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)
--MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)
-diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
-deleted file mode 100644
-index 5bad57c..0000000
---- a/cmake/Modules/GrMiscUtils.cmake
-+++ /dev/null
-@@ -1,528 +0,0 @@
--# Copyright 2010-2011,2014 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio is free software; you can redistribute it and/or modify
--# it under the terms of the GNU General Public License as published by
--# the Free Software Foundation; either version 3, or (at your option)
--# any later version.
--#
--# GNU Radio is distributed in the hope that it will be useful,
--# but WITHOUT ANY WARRANTY; without even the implied warranty of
--# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--# GNU General Public License for more details.
--#
--# You should have received a copy of the GNU General Public License
--# along with GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
--
--########################################################################
--# Set global variable macro.
--# Used for subdirectories to export settings.
--# Example: include and library paths.
--########################################################################
--function(GR_SET_GLOBAL var)
--    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
--endfunction(GR_SET_GLOBAL)
--
--########################################################################
--# Set the pre-processor definition if the condition is true.
--#  - def the pre-processor definition to set and condition name
--########################################################################
--function(GR_ADD_COND_DEF def)
--    if(${def})
--        add_definitions(-D${def})
--    endif(${def})
--endfunction(GR_ADD_COND_DEF)
--
--########################################################################
--# Check for a header and conditionally set a compile define.
--#  - hdr the relative path to the header file
--#  - def the pre-processor definition to set
--########################################################################
--function(GR_CHECK_HDR_N_DEF hdr def)
--    include(CheckIncludeFileCXX)
--    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
--    GR_ADD_COND_DEF(${def})
--endfunction(GR_CHECK_HDR_N_DEF)
--
--########################################################################
--# Include subdirectory macro.
--# Sets the CMake directory variables,
--# includes the subdirectory CMakeLists.txt,
--# resets the CMake directory variables.
--#
--# This macro includes subdirectories rather than adding them
--# so that the subdirectory can affect variables in the level above.
--# This provides a work-around for the lack of convenience libraries.
--# This way a subdirectory can append to the list of library sources.
--########################################################################
--macro(GR_INCLUDE_SUBDIRECTORY subdir)
--    #insert the current directories on the front of the list
--    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #set the current directories to the names of the subdirs
--    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
--    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
--
--    #include the subdirectory CMakeLists to run it
--    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
--    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
--
--    #reset the value of the current directories
--    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
--    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
--
--    #pop the subdir names of the front of the list
--    list(REMOVE_AT _cmake_source_dirs 0)
--    list(REMOVE_AT _cmake_binary_dirs 0)
--endmacro(GR_INCLUDE_SUBDIRECTORY)
--
--########################################################################
--# Check if a compiler flag works and conditionally set a compile define.
--#  - flag the compiler flag to check for
--#  - have the variable to set with result
--########################################################################
--macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
--    include(CheckCXXCompilerFlag)
--    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
--    if(${have})
--      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
--        if(${flag_dup} EQUAL -1)
--          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
--          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
--        endif(${flag_dup} EQUAL -1)
--      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
--    endif(${have})
--endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
--
--########################################################################
--# Generates the .la libtool file
--# This appears to generate libtool files that cannot be used by auto*.
--# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
--# Notice: there is not COMPONENT option, these will not get distributed.
--########################################################################
--function(GR_LIBTOOL)
--    if(NOT DEFINED GENERATE_LIBTOOL)
--        set(GENERATE_LIBTOOL OFF) #disabled by default
--    endif()
--
--    if(GENERATE_LIBTOOL)
--        include(CMakeParseArgumentsCopy)
--        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
--
--        find_program(LIBTOOL libtool)
--        if(LIBTOOL)
--            include(CMakeMacroLibtoolFile)
--            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
--        endif(LIBTOOL)
--    endif(GENERATE_LIBTOOL)
--
--endfunction(GR_LIBTOOL)
--
--########################################################################
--# Do standard things to the library target
--# - set target properties
--# - make install rules
--# Also handle gnuradio custom naming conventions w/ extras mode.
--########################################################################
--function(GR_LIBRARY_FOO target)
--    #parse the arguments for component names
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
--
--    #set additional target properties
--    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
--
--    #install the generated files like so...
--    install(TARGETS ${target}
--        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
--        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file
--        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
--    )
--
--    #extras mode enabled automatically on linux
--    if(NOT DEFINED LIBRARY_EXTRAS)
--        set(LIBRARY_EXTRAS ${LINUX})
--    endif()
--
--    #special extras mode to enable alternative naming conventions
--    if(LIBRARY_EXTRAS)
--
--        #create .la file before changing props
--        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
--
--        #give the library a special name with ultra-zero soversion
--        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
--        set(target_name lib${target}-${LIBVER}.so.0.0.0)
--
--        #custom command to generate symlinks
--        add_custom_command(
--            TARGET ${target}
--            POST_BUILD
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
--        )
--
--        #and install the extra symlinks
--        install(
--            FILES
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
--            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
--            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
--        )
--
--    endif(LIBRARY_EXTRAS)
--endfunction(GR_LIBRARY_FOO)
--
--########################################################################
--# Create a dummy custom command that depends on other targets.
--# Usage:
--#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
--#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
--#
--# Custom command cant depend on targets, but can depend on executables,
--# and executables can depend on targets. So this is the process:
--########################################################################
--function(GR_GEN_TARGET_DEPS name var)
--    file(
--        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        "int main(void){return 0;}\n"
--    )
--    execute_process(
--        COMMAND ${CMAKE_COMMAND} -E copy_if_different
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
--    )
--    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
--    if(ARGN)
--        add_dependencies(${name} ${ARGN})
--    endif(ARGN)
--
--    if(CMAKE_CROSSCOMPILING)
--        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
--    else()
--        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
--    endif()
--endfunction(GR_GEN_TARGET_DEPS)
--
--########################################################################
--# Control use of gr_logger
--# Usage:
--#   GR_LOGGING()
--#
--# Will set ENABLE_GR_LOG to 1 by default.
--# Can manually set with -DENABLE_GR_LOG=0|1
--########################################################################
--function(GR_LOGGING)
--  find_package(Log4cpp)
--
--  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)
--  if(ENABLE_GR_LOG)
--    # If gr_logger is enabled, make it usable
--    add_definitions( -DENABLE_GR_LOG )
--
--    # also test LOG4CPP; if we have it, use this version of the logger
--    # otherwise, default to the stdout/stderr model.
--    if(LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)
--      add_definitions( -DHAVE_LOG4CPP )
--    else(not LOG4CPP_FOUND)
--      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--    endif(LOG4CPP_FOUND)
--
--    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)
--
--  else(ENABLE_GR_LOG)
--    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)
--    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)
--  endif(ENABLE_GR_LOG)
--
--  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")
--  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")
--  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")
--
--endfunction(GR_LOGGING)
--
--########################################################################
--# Run GRCC to compile .grc files into .py files.
--#
--# Usage: GRCC(filename, directory)
--#    - filenames: List of file name of .grc file
--#    - directory: directory of built .py file - usually in
--#                 ${CMAKE_CURRENT_BINARY_DIR}
--#    - Sets PYFILES: output converted GRC file names to Python files.
--########################################################################
--function(GRCC)
--  # Extract directory from list of args, remove it for the list of filenames.
--  list(GET ARGV -1 directory)
--  list(REMOVE_AT ARGV -1)
--  set(filenames ${ARGV})
--  file(MAKE_DIRECTORY ${directory})
--
--  SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc)
--
--  # GRCC uses some stuff in grc and gnuradio-runtime, so we force
--  # the known paths here
--  list(APPEND PYTHONPATHS
--    ${CMAKE_SOURCE_DIR}
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python
--    ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig
--    ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig
--    )
--
--  if(WIN32)
--    #SWIG generates the python library files into a subdirectory.
--    #Therefore, we must append this subdirectory into PYTHONPATH.
--    #Only do this for the python directories matching the following:
--    foreach(pydir ${PYTHONPATHS})
--      get_filename_component(name ${pydir} NAME)
--      if(name MATCHES "^(swig|lib|src)$")
--        list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE})
--      endif()
--    endforeach(pydir)
--  endif(WIN32)
--
--  file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath)
--
--  if(UNIX)
--    list(APPEND pypath "$PYTHONPATH")
--    string(REPLACE ";" ":" pypath "${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(UNIX)
--
--  if(WIN32)
--    list(APPEND pypath "%PYTHONPATH%")
--    string(REPLACE ";" "\\;" pypath "${pypath}")
--    #list(APPEND environs "PYTHONPATH=${pypath}")
--    set(ENV{PYTHONPATH} ${pypath})
--  endif(WIN32)
--
--  foreach(f ${filenames})
--    execute_process(
--      COMMAND ${GRCC_COMMAND} -d ${directory} ${f}
--      )
--    string(REPLACE ".grc" ".py" pyfile "${f}")
--    string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}")
--    list(APPEND pyfiles ${pyfile})
--  endforeach(f)
--
--  set(PYFILES ${pyfiles} PARENT_SCOPE)
--endfunction(GRCC)
--
--########################################################################
--# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
--#  should be defined
--########################################################################
--macro(GR_CHECK_LINUX_SCHED_AVAIL)
--set(CMAKE_REQUIRED_LIBRARIES -lpthread)
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <pthread.h>
--        int main(){
--            pthread_t pthread;
--            pthread_setschedparam(pthread,  0, 0);
--            return 0;
--        } " HAVE_PTHREAD_SETSCHEDPARAM
--    )
--    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
--
--    CHECK_CXX_SOURCE_COMPILES("
--        #include <sched.h>
--        int main(){
--            pid_t pid;
--            sched_setscheduler(pid, 0, 0);
--            return 0;
--        } " HAVE_SCHED_SETSCHEDULER
--    )
--    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
--endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
--
--########################################################################
--# Macros to generate source and header files from template
--########################################################################
--macro(GR_EXPAND_X_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated headers
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the headers
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #install rules for the generated headers
--  list(APPEND generated_includes ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_H)
--
--macro(GR_EXPAND_X_CC_H component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_impl_dict2(name, sig, '${component}')
--        build_utils.expand_template(d, inp)
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
--    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the source files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.cc.t ${ARGN}
--  )
--
--  #create a command to generate the header files
--  add_custom_command(
--    OUTPUT ${expanded_files_h}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}.h.t ${ARGN}
--  )
--
--  #make source files depends on headers to force generation
--  set_source_files_properties(${expanded_files_cc}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc})
--  list(APPEND generated_headers ${expanded_files_h})
--
--endmacro(GR_EXPAND_X_CC_H)
--
--macro(GR_EXPAND_X_CC_H_IMPL component root)
--
--  include(GrPython)
--
--  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--"#!${PYTHON_EXECUTABLE}
--
--import sys, os, re
--sys.path.append('${GR_RUNTIME_PYTHONPATH}')
--sys.path.append('${CMAKE_SOURCE_DIR}/python')
--os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
--os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
--
--if __name__ == '__main__':
--    import build_utils
--    root, inp = sys.argv[1:3]
--    for sig in sys.argv[3:]:
--        name = re.sub ('X+', sig, root)
--        d = build_utils.standard_dict(name, sig, '${component}')
--        build_utils.expand_template(d, inp, '_impl')
--")
--
--  #make a list of all the generated files
--  unset(expanded_files_cc_impl)
--  unset(expanded_files_h_impl)
--  unset(expanded_files_h)
--  foreach(sig ${ARGN})
--    string(REGEX REPLACE "X+" ${sig} name ${root})
--    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
--    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
--    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
--  endforeach(sig)
--  unset(name)
--
--  #create a command to generate the _impl.cc files
--  add_custom_command(
--    OUTPUT ${expanded_files_cc_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.cc.t ${ARGN}
--  )
--
--  #create a command to generate the _impl.h files
--  add_custom_command(
--    OUTPUT ${expanded_files_h_impl}
--    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
--    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
--    ${root} ${root}_impl.h.t ${ARGN}
--  )
--
--  #make _impl.cc source files depend on _impl.h to force generation
--  set_source_files_properties(${expanded_files_cc_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
--  )
--
--  #make _impl.h source files depend on headers to force generation
--  set_source_files_properties(${expanded_files_h_impl}
--    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
--  )
--
--  #install rules for the generated files
--  list(APPEND generated_sources ${expanded_files_cc_impl})
--  list(APPEND generated_headers ${expanded_files_h_impl})
--
--endmacro(GR_EXPAND_X_CC_H_IMPL)
-diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
-deleted file mode 100644
-index 00a53d0..0000000
---- a/cmake/Modules/GrPlatform.cmake
-+++ /dev/null
-@@ -1,62 +0,0 @@
--# Copyright 2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio is free software; you can redistribute it and/or modify
--# it under the terms of the GNU General Public License as published by
--# the Free Software Foundation; either version 3, or (at your option)
--# any later version.
--#
--# GNU Radio is distributed in the hope that it will be useful,
--# but WITHOUT ANY WARRANTY; without even the implied warranty of
--# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--# GNU General Public License for more details.
--#
--# You should have received a copy of the GNU General Public License
--# along with GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
--
--########################################################################
--# Setup additional defines for OS types
--########################################################################
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
--    set(LINUX TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/debian_version")
--    set(DEBIAN TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/redhat-release")
--    set(REDHAT TRUE)
--endif()
--
--if(NOT CMAKE_CROSSCOMPILING AND LINUX AND EXISTS "/etc/slackware-version")
--    set(SLACKWARE TRUE)
--endif()
--
--########################################################################
--# when the library suffix should be 64 (applies to redhat linux family)
--########################################################################
--if (REDHAT OR SLACKWARE)
--    set(LIB64_CONVENTION TRUE)
--endif()
--
--if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
--    set(LIB_SUFFIX 64)
--endif()
--
--########################################################################
--# Detect /lib versus /lib64
--########################################################################
--if (CMAKE_INSTALL_LIBDIR MATCHES lib64)
--    set(LIB_SUFFIX 64)
--endif()
--
--set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
-diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
-deleted file mode 100644
-index 06e061e..0000000
---- a/cmake/Modules/GrPython.cmake
-+++ /dev/null
-@@ -1,241 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio is free software; you can redistribute it and/or modify
--# it under the terms of the GNU General Public License as published by
--# the Free Software Foundation; either version 3, or (at your option)
--# any later version.
--#
--# GNU Radio is distributed in the hope that it will be useful,
--# but WITHOUT ANY WARRANTY; without even the implied warranty of
--# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--# GNU General Public License for more details.
--#
--# You should have received a copy of the GNU General Public License
--# along with GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
--
--########################################################################
--# Setup the python interpreter:
--# This allows the user to specify a specific interpreter,
--# or finds the interpreter via the built-in cmake module.
--########################################################################
--#this allows the user to override PYTHON_EXECUTABLE
--if(PYTHON_EXECUTABLE)
--
--    set(PYTHONINTERP_FOUND TRUE)
--
--#otherwise if not set, try to automatically find it
--else(PYTHON_EXECUTABLE)
--
--    #use the built-in find script
--    find_package(PythonInterp 2)
--
--    #and if that fails use the find program routine
--    if(NOT PYTHONINTERP_FOUND)
--        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)
--        if(PYTHON_EXECUTABLE)
--            set(PYTHONINTERP_FOUND TRUE)
--        endif(PYTHON_EXECUTABLE)
--    endif(NOT PYTHONINTERP_FOUND)
--
--endif(PYTHON_EXECUTABLE)
--
--if (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE "/usr/bin/python")
--else (CMAKE_CROSSCOMPILING)
--    set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
--endif(CMAKE_CROSSCOMPILING)
--
--#make the path to the executable appear in the cmake gui
--set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
--set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests")
--
--#make sure we can use -B with python (introduced in 2.6)
--if(PYTHON_EXECUTABLE)
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -B -c ""
--        OUTPUT_QUIET ERROR_QUIET
--        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
--    )
--    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
--        set(PYTHON_DASH_B "-B")
--    endif()
--endif(PYTHON_EXECUTABLE)
--
--########################################################################
--# Check for the existence of a python module:
--# - desc a string description of the check
--# - mod the name of the module to import
--# - cmd an additional command to run
--# - have the result variable to set
--########################################################################
--macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
--    message(STATUS "")
--    message(STATUS "Python checking for ${desc}")
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE} -c "
--#########################################
--try:
--    import ${mod}
--    assert ${cmd}
--except ImportError, AssertionError: exit(-1)
--except: pass
--#########################################"
--        RESULT_VARIABLE ${have}
--    )
--    if(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - found")
--        set(${have} TRUE)
--    else(${have} EQUAL 0)
--        message(STATUS "Python checking for ${desc} - not found")
--        set(${have} FALSE)
--    endif(${have} EQUAL 0)
--endmacro(GR_PYTHON_CHECK_MODULE)
--
--########################################################################
--# Sets the python installation directory GR_PYTHON_DIR
--########################################################################
--if(NOT DEFINED GR_PYTHON_DIR)
--execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
--from distutils import sysconfig
--print sysconfig.get_python_lib(plat_specific=True, prefix='')
--" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
--)
--endif()
--file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
--
--########################################################################
--# Create an always-built target with a unique name
--# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
--########################################################################
--function(GR_UNIQUE_TARGET desc)
--    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
--    add_custom_target(${_target} ALL DEPENDS ${ARGN})
--endfunction(GR_UNIQUE_TARGET)
--
--########################################################################
--# Install python sources (also builds and installs byte-compiled python)
--########################################################################
--function(GR_PYTHON_INSTALL)
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
--
--    ####################################################################
--    if(GR_PYTHON_INSTALL_FILES)
--    ####################################################################
--        install(${ARGN}) #installs regular python files
--
--        #create a list of all generated files
--        unset(pysrcfiles)
--        unset(pycfiles)
--        unset(pyofiles)
--        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            list(APPEND pysrcfiles ${pyfile})
--
--            #determine if this file is in the source or binary directory
--            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
--            string(LENGTH "${source_rel_path}" source_rel_path_len)
--            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
--            string(LENGTH "${binary_rel_path}" binary_rel_path_len)
--
--            #and set the generated path appropriately
--            if(${source_rel_path_len} GREATER ${binary_rel_path_len})
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
--            else()
--                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
--            endif()
--            list(APPEND pycfiles ${pygenfile}c)
--            list(APPEND pyofiles ${pygenfile}o)
--
--            #ensure generation path exists
--            get_filename_component(pygen_path ${pygenfile} PATH)
--            file(MAKE_DIRECTORY ${pygen_path})
--
--        endforeach(pyfile)
--
--        #the command to generate the pyc files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
--            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
--        )
--
--        #the command to generate the pyo files
--        add_custom_command(
--            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
--            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
--        )
--
--        #create install rule and add generated files to target list
--        set(python_install_gen_targets ${pycfiles} ${pyofiles})
--        install(FILES ${python_install_gen_targets}
--            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--        )
--
--    ####################################################################
--    elseif(GR_PYTHON_INSTALL_PROGRAMS)
--    ####################################################################
--        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
--
--        if (CMAKE_CROSSCOMPILING)
--           set(pyexe_native "/usr/bin/env python")
--        endif()
--
--        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
--            get_filename_component(pyfile_name ${pyfile} NAME)
--            get_filename_component(pyfile ${pyfile} ABSOLUTE)
--            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
--            list(APPEND python_install_gen_targets ${pyexefile})
--
--            get_filename_component(pyexefile_path ${pyexefile} PATH)
--            file(MAKE_DIRECTORY ${pyexefile_path})
--
--            add_custom_command(
--                OUTPUT ${pyexefile} DEPENDS ${pyfile}
--                COMMAND ${PYTHON_EXECUTABLE} -c
--                "import re; R=re.compile('^\#!.*$\\n',flags=re.MULTILINE); open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+R.sub('',open('${pyfile}','r').read()))"
--                COMMENT "Shebangin ${pyfile_name}"
--                VERBATIM
--            )
--
--            #on windows, python files need an extension to execute
--            get_filename_component(pyfile_ext ${pyfile} EXT)
--            if(WIN32 AND NOT pyfile_ext)
--                set(pyfile_name "${pyfile_name}.py")
--            endif()
--
--            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
--                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
--                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
--            )
--        endforeach(pyfile)
--
--    endif()
--
--    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
--
--endfunction(GR_PYTHON_INSTALL)
--
--########################################################################
--# Write the python helper script that generates byte code files
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
--import sys, py_compile
--files = sys.argv[1:]
--srcs, gens = files[:len(files)/2], files[len(files)/2:]
--for src, gen in zip(srcs, gens):
--    py_compile.compile(file=src, cfile=gen, doraise=True)
--")
-diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
-deleted file mode 100644
-index 33f37d2..0000000
---- a/cmake/Modules/GrSwig.cmake
-+++ /dev/null
-@@ -1,256 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio is free software; you can redistribute it and/or modify
--# it under the terms of the GNU General Public License as published by
--# the Free Software Foundation; either version 3, or (at your option)
--# any later version.
--#
--# GNU Radio is distributed in the hope that it will be useful,
--# but WITHOUT ANY WARRANTY; without even the implied warranty of
--# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--# GNU General Public License for more details.
--#
--# You should have received a copy of the GNU General Public License
--# along with GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_SWIG_CMAKE TRUE)
--
--include(GrPython)
--
--########################################################################
--# Builds a swig documentation file to be generated into python docstrings
--# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
--#
--# Set the following variable to specify extra dependent targets:
--#   - GR_SWIG_DOCS_SOURCE_DEPS
--#   - GR_SWIG_DOCS_TARGET_DEPS
--########################################################################
--function(GR_SWIG_MAKE_DOCS output_file)
--    if(ENABLE_DOXYGEN)
--
--        #setup the input files variable list, quote formated
--        set(input_files)
--        unset(INPUT_PATHS)
--        foreach(input_path ${ARGN})
--            if(IS_DIRECTORY ${input_path}) #when input path is a directory
--                file(GLOB input_path_h_files ${input_path}/*.h)
--            else() #otherwise its just a file, no glob
--                set(input_path_h_files ${input_path})
--            endif()
--            list(APPEND input_files ${input_path_h_files})
--            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
--        endforeach(input_path)
--
--        #determine the output directory
--        get_filename_component(name ${output_file} NAME_WE)
--        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
--        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
--        make_directory(${OUTPUT_DIRECTORY})
--
--        #generate the Doxyfile used by doxygen
--        configure_file(
--            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
--            ${OUTPUT_DIRECTORY}/Doxyfile
--        @ONLY)
--
--        #Create a dummy custom command that depends on other targets
--        include(GrMiscUtils)
--        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
--
--        #call doxygen on the Doxyfile + input headers
--        add_custom_command(
--            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
--            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
--            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
--            COMMENT "Generating doxygen xml for ${name} docs"
--        )
--
--        #call the swig_doc script on the xml files
--        add_custom_command(
--            OUTPUT ${output_file}
--            DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml
--            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
--                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
--                ${OUTPUT_DIRECTORY}/xml
--                ${output_file}
--            COMMENT "Generating python docstrings for ${name}"
--            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
--        )
--
--    else(ENABLE_DOXYGEN)
--        file(WRITE ${output_file} "\n") #no doxygen -> empty file
--    endif(ENABLE_DOXYGEN)
--endfunction(GR_SWIG_MAKE_DOCS)
--
--########################################################################
--# Build a swig target for the common gnuradio use case. Usage:
--# GR_SWIG_MAKE(target ifile ifile ifile...)
--#
--# Set the following variables before calling:
--#   - GR_SWIG_FLAGS
--#   - GR_SWIG_INCLUDE_DIRS
--#   - GR_SWIG_LIBRARIES
--#   - GR_SWIG_SOURCE_DEPS
--#   - GR_SWIG_TARGET_DEPS
--#   - GR_SWIG_DOC_FILE
--#   - GR_SWIG_DOC_DIRS
--########################################################################
--macro(GR_SWIG_MAKE name)
--    set(ifiles ${ARGN})
--
--    # Shimming this in here to take care of a SWIG bug with handling
--    # vector<size_t> and vector<unsigned int> (on 32-bit machines) and
--    # vector<long unsigned int> (on 64-bit machines). Use this to test
--    # the size of size_t, then set SIZE_T_32 if it's a 32-bit machine
--    # or not if it's 64-bit. The logic in gr_type.i handles the rest.
--    INCLUDE(CheckTypeSize)
--    CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
--    CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
--    if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--      list(APPEND GR_SWIG_FLAGS -DSIZE_T_32)
--    endif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT})
--
--    #do swig doc generation if specified
--    if(GR_SWIG_DOC_FILE)
--        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
--        list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS})
--        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
--        add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE})
--        list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE})
--    endif()
--
--    #append additional include directories
--    find_package(PythonLibs 2)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
--
--    #prepend local swig directories
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR})
--    list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR})
--
--    #determine include dependencies for swig file
--    execute_process(
--        COMMAND ${PYTHON_EXECUTABLE}
--            ${CMAKE_BINARY_DIR}/get_swig_deps.py
--            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
--        OUTPUT_STRIP_TRAILING_WHITESPACE
--        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
--        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
--    )
--
--    #Create a dummy custom command that depends on other targets
--    include(GrMiscUtils)
--    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
--    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
--    add_custom_command(
--        OUTPUT ${tag_file}
--        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
--        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
--    )
--
--    #append the specified include directories
--    include_directories(${GR_SWIG_INCLUDE_DIRS})
--    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
--
--    #setup the swig flags with flags and include directories
--    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
--    foreach(dir ${GR_SWIG_INCLUDE_DIRS})
--        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
--    endforeach(dir)
--
--    #set the C++ property on the swig .i file so it builds
--    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
--
--    #setup the actual swig library target to be built
--    include(UseSWIG)
--    SWIG_ADD_MODULE(${name} python ${ifiles})
--    if(APPLE)
--      set(PYTHON_LINK_OPTIONS "-undefined dynamic_lookup")
--    else()
--      set(PYTHON_LINK_OPTIONS ${PYTHON_LIBRARIES})
--    endif(APPLE)
--    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LINK_OPTIONS} ${GR_SWIG_LIBRARIES})
--    if(${name} STREQUAL "runtime_swig")
--        SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS")
--    endif(${name} STREQUAL "runtime_swig")
--
--endmacro(GR_SWIG_MAKE)
--
--########################################################################
--# Install swig targets generated by GR_SWIG_MAKE. Usage:
--# GR_SWIG_INSTALL(
--#   TARGETS target target target...
--#   [DESTINATION destination]
--#   [COMPONENT component]
--# )
--########################################################################
--macro(GR_SWIG_INSTALL)
--
--    include(CMakeParseArgumentsCopy)
--    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
--
--    foreach(name ${GR_SWIG_INSTALL_TARGETS})
--        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        include(GrPython)
--        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
--        )
--
--        GR_LIBTOOL(
--            TARGET ${SWIG_MODULE_${name}_REAL_NAME}
--            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
--        )
--
--    endforeach(name)
--
--endmacro(GR_SWIG_INSTALL)
--
--########################################################################
--# Generate a python file that can determine swig dependencies.
--# Used by the make macro above to determine extra dependencies.
--# When you build C++, CMake figures out the header dependencies.
--# This code essentially performs that logic for swig includes.
--########################################################################
--file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
--
--import os, sys, re
--
--i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]')
--h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]')
--include_dirs = sys.argv[2].split(';')
--
--def get_swig_incs(file_path):
--    if file_path.endswith('.i'): matcher = i_include_matcher
--    else: matcher = h_include_matcher
--    file_contents = open(file_path, 'r').read()
--    return matcher.findall(file_contents, re.MULTILINE)
--
--def get_swig_deps(file_path, level):
--    deps = [file_path]
--    if level == 0: return deps
--    for keyword, inc_file in get_swig_incs(file_path):
--        for inc_dir in include_dirs:
--            inc_path = os.path.join(inc_dir, inc_file)
--            if not os.path.exists(inc_path): continue
--            deps.extend(get_swig_deps(inc_path, level-1))
--            break #found, we dont search in lower prio inc dirs
--    return deps
--
--if __name__ == '__main__':
--    ifiles = sys.argv[1].split(';')
--    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
--    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
--    print(';'.join(set(deps)))
--")
-diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
-deleted file mode 100644
-index 62caab4..0000000
---- a/cmake/Modules/GrTest.cmake
-+++ /dev/null
-@@ -1,143 +0,0 @@
--# Copyright 2010-2011 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio is free software; you can redistribute it and/or modify
--# it under the terms of the GNU General Public License as published by
--# the Free Software Foundation; either version 3, or (at your option)
--# any later version.
--#
--# GNU Radio is distributed in the hope that it will be useful,
--# but WITHOUT ANY WARRANTY; without even the implied warranty of
--# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--# GNU General Public License for more details.
--#
--# You should have received a copy of the GNU General Public License
--# along with GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--
--if(DEFINED __INCLUDED_GR_TEST_CMAKE)
--    return()
--endif()
--set(__INCLUDED_GR_TEST_CMAKE TRUE)
--
--########################################################################
--# Add a unit test and setup the environment for a unit test.
--# Takes the same arguments as the ADD_TEST function.
--#
--# Before calling set the following variables:
--# GR_TEST_TARGET_DEPS  - built targets for the library path
--# GR_TEST_LIBRARY_DIRS - directories for the library path
--# GR_TEST_PYTHON_DIRS  - directories for the python path
--# GR_TEST_ENVIRONS  - other environment key/value pairs
--########################################################################
--function(GR_ADD_TEST test_name)
--
--        #Ensure that the build exe also appears in the PATH.
--        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
--
--        #In the land of windows, all libraries must be in the PATH.
--        #Since the dependent libraries are not yet installed,
--        #we must manually set them in the PATH to run tests.
--        #The following appends the path of a target dependency.
--        foreach(target ${GR_TEST_TARGET_DEPS})
--            get_target_property(location ${target} LOCATION)
--            if(location)
--                get_filename_component(path ${location} PATH)
--                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
--                list(APPEND GR_TEST_LIBRARY_DIRS ${path})
--            endif(location)
--        endforeach(target)
--
--    if(WIN32)
--        #SWIG generates the python library files into a subdirectory.
--        #Therefore, we must append this subdirectory into PYTHONPATH.
--        #Only do this for the python directories matching the following:
--        foreach(pydir ${GR_TEST_PYTHON_DIRS})
--            get_filename_component(name ${pydir} NAME)
--            if(name MATCHES "^(swig|lib|src)$")
--                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
--            endif()
--        endforeach(pydir)
--    endif(WIN32)
--
--    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
--    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
--    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
--
--    set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
--    list(APPEND environs ${GR_TEST_ENVIRONS})
--
--    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
--    #Replaced this add test + set environs code with the shell script generation.
--    #Its nicer to be able to manually run the shell script to diagnose problems.
--    #ADD_TEST(${ARGV})
--    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
--
--    if(UNIX)
--        set(LD_PATH_VAR "LD_LIBRARY_PATH")
--        if(APPLE)
--            set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
--        endif()
--
--        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
--        list(APPEND libpath "$${LD_PATH_VAR}")
--        list(APPEND pypath "$PYTHONPATH")
--
--        #replace list separator with the path separator
--        string(REPLACE ";" ":" libpath "${libpath}")
--        string(REPLACE ";" ":" pypath "${pypath}")
--        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--	if (CMAKE_CROSSCOMPILING)
--                set(SHELL "/bin/sh")
--        else(CMAKE_CROSSCOMPILING)
--                find_program(SHELL sh)
--        endif(CMAKE_CROSSCOMPILING)
--        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
--        file(WRITE ${sh_file} "#!${SHELL}\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${sh_file} "export ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${sh_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${sh_file} "\n")
--
--        #make the shell file executable
--        execute_process(COMMAND chmod +x ${sh_file})
--
--        add_test(${test_name} ${SHELL} ${sh_file})
--
--    endif(UNIX)
--
--    if(WIN32)
--        list(APPEND libpath ${DLL_PATHS} "%PATH%")
--        list(APPEND pypath "%PYTHONPATH%")
--
--        #replace list separator with the path separator (escaped)
--        string(REPLACE ";" "\\;" libpath "${libpath}")
--        string(REPLACE ";" "\\;" pypath "${pypath}")
--        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
--
--        #generate a bat file that sets the environment and runs the test
--        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
--        file(WRITE ${bat_file} "@echo off\n")
--        #each line sets an environment variable
--        foreach(environ ${environs})
--            file(APPEND ${bat_file} "SET ${environ}\n")
--        endforeach(environ)
--        #load the command to run with its arguments
--        foreach(arg ${ARGN})
--            file(APPEND ${bat_file} "${arg} ")
--        endforeach(arg)
--        file(APPEND ${bat_file} "\n")
--
--        add_test(${test_name} ${bat_file})
--    endif(WIN32)
--
--endfunction(GR_ADD_TEST)
-diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake
-deleted file mode 100644
-index b7e3e05..0000000
---- a/cmake/Modules/UseSWIG.cmake
-+++ /dev/null
-@@ -1,304 +0,0 @@
--# - SWIG module for CMake
--# Defines the following macros:
--#   SWIG_ADD_MODULE(name language [ files ])
--#     - Define swig module with given name and specified language
--#   SWIG_LINK_LIBRARIES(name [ libraries ])
--#     - Link libraries to swig module
--# All other macros are for internal use only.
--# To get the actual name of the swig module,
--# use: ${SWIG_MODULE_${name}_REAL_NAME}.
--# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify
--# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add
--# special flags to all swig calls.
--# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify
--# where to write all the swig generated module (swig -outdir option)
--# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used
--# to specify extra dependencies for the generated modules.
--# If the source file generated by swig need some special flag you can use
--# set_source_files_properties( ${swig_generated_file_fullname}
--#        PROPERTIES COMPILE_FLAGS "-bla")
--
--
--#=============================================================================
--# Copyright 2004-2009 Kitware, Inc.
--# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
--#
--# Distributed under the OSI-approved BSD License (the "License");
--# see accompanying file Copyright.txt for details.
--#
--# This software is distributed WITHOUT ANY WARRANTY; without even the
--# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--# See the License for more information.
--#=============================================================================
--# (To distribute this file outside of CMake, substitute the full
--#  License text for the above reference.)
--
--set(SWIG_CXX_EXTENSION "cxx")
--set(SWIG_EXTRA_LIBRARIES "")
--
--set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
--
--#
--# For given swig module initialize variables associated with it
--#
--macro(SWIG_MODULE_INITIALIZE name language)
--  string(TOUPPER "${language}" swig_uppercase_language)
--  string(TOLOWER "${language}" swig_lowercase_language)
--  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
--  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
--
--  set(SWIG_MODULE_${name}_REAL_NAME "${name}")
--  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
--    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
--    # when swig is used without the -interface it will produce in the module.py
--    # a 'import _modulename' statement, which implies having a corresponding
--    # _modulename.so (*NIX), _modulename.pyd (Win32).
--    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")
--  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
--    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
--  endif()
--endmacro()
--
--#
--# For a given language, input file, and output file, determine extra files that
--# will be generated. This is internal swig macro.
--#
--
--macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
--  set(${outfiles} "")
--  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename
--    ${infile} SWIG_MODULE_NAME)
--  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
--    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)
--  endif()
--  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})
--    set(${outfiles} ${${outfiles}}
--      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")
--  endforeach()
--endmacro()
--
--#
--# Take swig (*.i) file and add proper custom commands for it
--#
--macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
--  set(swig_full_infile ${infile})
--  get_filename_component(swig_source_file_path "${infile}" PATH)
--  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
--  get_source_file_property(swig_source_file_generated ${infile} GENERATED)
--  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)
--  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)
--  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")
--    set(swig_source_file_flags "")
--  endif()
--  set(swig_source_file_fullname "${infile}")
--  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")
--    string(REGEX REPLACE
--      "^${CMAKE_CURRENT_SOURCE_DIR}" ""
--      swig_source_file_relative_path
--      "${swig_source_file_path}")
--  else()
--    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")
--      string(REGEX REPLACE
--        "^${CMAKE_CURRENT_BINARY_DIR}" ""
--        swig_source_file_relative_path
--        "${swig_source_file_path}")
--      set(swig_source_file_generated 1)
--    else()
--      set(swig_source_file_relative_path "${swig_source_file_path}")
--      if(swig_source_file_generated)
--        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")
--      else()
--        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")
--      endif()
--    endif()
--  endif()
--
--  set(swig_generated_file_fullname
--    "${CMAKE_CURRENT_BINARY_DIR}")
--  if(swig_source_file_relative_path)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")
--  endif()
--  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
--  if(CMAKE_SWIG_OUTDIR)
--    set(swig_outdir ${CMAKE_SWIG_OUTDIR})
--  else()
--    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})
--  endif()
--  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
--    swig_extra_generated_files
--    "${swig_outdir}"
--    "${infile}")
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}/${swig_source_file_name_we}")
--  # add the language into the name of the file (i.e. TCL_wrap)
--  # this allows for the same .i file to be wrapped into different languages
--  set(swig_generated_file_fullname
--    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")
--
--  if(swig_source_file_cplusplus)
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")
--  else()
--    set(swig_generated_file_fullname
--      "${swig_generated_file_fullname}.c")
--  endif()
--
--  # Shut up some warnings from poor SWIG code generation that we
--  # can do nothing about, when this flag is available
--  include(CheckCXXCompilerFlag)
--  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--    set_source_files_properties(${swig_generated_file_fullname}
--      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
--  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)
--
--  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)
--  set(swig_include_dirs)
--  foreach(it ${cmake_include_directories})
--    set(swig_include_dirs ${swig_include_dirs} "-I${it}")
--  endforeach()
--
--  set(swig_special_flags)
--  # default is c, so add c++ flag if it is c++
--  if(swig_source_file_cplusplus)
--    set(swig_special_flags ${swig_special_flags} "-c++")
--  endif()
--  set(swig_extra_flags)
--  if(SWIG_MODULE_${name}_EXTRA_FLAGS)
--    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
--  endif()
--
--  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files
--
--  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
--  execute_process(
--    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
--unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
--print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"
--    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE
--  )
--
--  file(
--    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--   "int main(void){return 0;}\n"
--  )
--
--  # create dummy dependencies
--  add_custom_command(
--    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    COMMAND ${CMAKE_COMMAND} -E copy
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in
--        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp
--    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}
--    COMMENT ""
--  )
--
--  # create the dummy target
--  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)
--
--  # add a custom command to the dummy target
--  add_custom_command(
--    TARGET ${_target}
--    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)
--    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}
--    COMMAND "${SWIG_EXECUTABLE}"
--    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
--    ${swig_source_file_flags}
--    ${CMAKE_SWIG_FLAGS}
--    -outdir ${swig_outdir}
--    ${swig_special_flags}
--    ${swig_extra_flags}
--    ${swig_include_dirs}
--    -o "${swig_generated_file_fullname}"
--    "${swig_source_file_fullname}"
--    COMMENT "Swig source"
--  )
--
--  #add dummy independent dependencies from the _target to each file
--  #that will be generated by the SWIG command above
--
--  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})
--
--  foreach(swig_gen_file ${${outfiles}})
--    add_custom_command(
--      OUTPUT ${swig_gen_file}
--      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"
--      DEPENDS ${_target}
--      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"
--    )
--  endforeach()
--
--  set_source_files_properties(
--    ${outfiles} PROPERTIES GENERATED 1
--  )
--
--endmacro()
--
--#
--# Create Swig module
--#
--macro(SWIG_ADD_MODULE name language)
--  SWIG_MODULE_INITIALIZE(${name} ${language})
--  set(swig_dot_i_sources)
--  set(swig_other_sources)
--  foreach(it ${ARGN})
--    if(${it} MATCHES ".*\\.i$")
--      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")
--    else()
--      set(swig_other_sources ${swig_other_sources} "${it}")
--    endif()
--  endforeach()
--
--  set(swig_generated_sources)
--  foreach(it ${swig_dot_i_sources})
--    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})
--    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")
--  endforeach()
--  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
--  set_directory_properties(PROPERTIES
--    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")
--  add_library(${SWIG_MODULE_${name}_REAL_NAME}
--    MODULE
--    ${swig_generated_sources}
--    ${swig_other_sources})
--  string(TOLOWER "${language}" swig_lowercase_language)
--  if ("${swig_lowercase_language}" STREQUAL "java")
--    if (APPLE)
--        # In java you want:
--        #      System.loadLibrary("LIBRARY");
--        # then JNI will look for a library whose name is platform dependent, namely
--        #   MacOS  : libLIBRARY.jnilib
--        #   Windows: LIBRARY.dll
--        #   Linux  : libLIBRARY.so
--        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
--      endif ()
--  endif ()
--  if ("${swig_lowercase_language}" STREQUAL "python")
--    # this is only needed for the python case where a _modulename.so is generated
--    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")
--    # Python extension modules on Windows must have the extension ".pyd"
--    # instead of ".dll" as of Python 2.5.  Older python versions do support
--    # this suffix.
--    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
--    # <quote>
--    # Windows: .dll is no longer supported as a filename extension for extension modules.
--    # .pyd is now the only filename extension that will be searched for.
--    # </quote>
--    if(WIN32 AND NOT CYGWIN)
--      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
--    endif()
--  endif ()
--endmacro()
--
--#
--# Like TARGET_LINK_LIBRARIES but for swig modules
--#
--macro(SWIG_LINK_LIBRARIES name)
--  if(SWIG_MODULE_${name}_REAL_NAME)
--    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
--  else()
--    message(SEND_ERROR "Cannot find Swig library \"${name}\".")
--  endif()
--endmacro()
-diff --git a/cmake/Modules/nrsc5Config.cmake b/cmake/Modules/nrsc5Config.cmake
-index 2cd34a4..0911a25 100644
---- a/cmake/Modules/nrsc5Config.cmake
-+++ b/cmake/Modules/nrsc5Config.cmake
-@@ -22,9 +22,10 @@ FIND_LIBRARY(
-           /usr/local/lib64
-           /usr/lib
-           /usr/lib64
--)
-+          )
-+
-+include("${CMAKE_CURRENT_LIST_DIR}/nrsc5Target.cmake")
- 
- INCLUDE(FindPackageHandleStandardArgs)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(NRSC5 DEFAULT_MSG NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
- MARK_AS_ADVANCED(NRSC5_LIBRARIES NRSC5_INCLUDE_DIRS)
--
-diff --git a/python/build_utils_codes.py b/cmake/Modules/targetConfig.cmake.in
-similarity index 52%
-rename from python/build_utils_codes.py
-rename to cmake/Modules/targetConfig.cmake.in
-index 9ea96ba..79e4a28 100644
---- a/python/build_utils_codes.py
-+++ b/cmake/Modules/targetConfig.cmake.in
-@@ -1,5 +1,4 @@
--#
--# Copyright 2004 Free Software Foundation, Inc.
-+# Copyright 2018 Free Software Foundation, Inc.
- #
- # This file is part of GNU Radio
- #
-@@ -17,36 +16,11 @@
- # 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.
--#
--
--def i_code (code3):
--    return code3[0]
--
--def o_code (code3):
--    if len (code3) >= 2:
--        return code3[1]
--    else:
--        return code3[0]
--
--def tap_code (code3):
--    if len (code3) >= 3:
--        return code3[2]
--    else:
--        return code3[0]
--
--def i_type (code3):
--    return char_to_type[i_code (code3)]
--
--def o_type (code3):
--    return char_to_type[o_code (code3)]
--
--def tap_type (code3):
--    return char_to_type[tap_code (code3)]
- 
-+include(CMakeFindDependencyMacro)
- 
--char_to_type = {}
--char_to_type['s'] = 'short'
--char_to_type['i'] = 'int'
--char_to_type['f'] = 'float'
--char_to_type['c'] = 'gr_complex'
--char_to_type['b'] = 'unsigned char'
-+set(target_deps "@TARGET_DEPENDENCIES@")
-+foreach(dep IN LISTS target_deps)
-+    find_dependency(${dep})
-+endforeach()
-+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
-diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
-index f16fbf6..2c318ee 100644
---- a/docs/CMakeLists.txt
-+++ b/docs/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
-index 1b44799..d5d98b8 100644
---- a/docs/doxygen/CMakeLists.txt
-+++ b/docs/doxygen/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
-index 3ad1a67..20dfc97 100644
---- a/docs/doxygen/Doxyfile.in
-+++ b/docs/doxygen/Doxyfile.in
-@@ -654,8 +654,8 @@ WARN_LOGFILE           =
- # directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
- 
--INPUT                  = @top_srcdir@ \
--                         @top_builddir@
-+INPUT                  = "@top_srcdir@" \
-+                         "@top_builddir@"
- 
- # 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
-@@ -791,7 +791,7 @@ INPUT_FILTER           =
- # info on how filters are used. If FILTER_PATTERNS is empty or if
- # non of the patterns match the file name, INPUT_FILTER is applied.
- 
--FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py
-+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py
- 
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER) will be used to filter the input files when producing source
-@@ -946,7 +946,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -990,7 +990,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in
-index 19e17dc..cbe06d6 100644
---- a/docs/doxygen/Doxyfile.swig_doc.in
-+++ b/docs/doxygen/Doxyfile.swig_doc.in
-@@ -54,7 +54,7 @@ PROJECT_LOGO           =
- # If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
- 
--OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
-+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"
- 
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
- # 4096 sub-directories (in 2 levels) under the output directory of each output
-@@ -121,7 +121,7 @@ INLINE_INHERITED_MEMB  = NO
- # path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
- 
--FULL_PATH_NAMES        = YES
-+FULL_PATH_NAMES        = NO
- 
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
- # can be used to strip a user-defined part of the path. Stripping is
-@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
- # user-defined cascading style sheet that is included after the standard
- # style sheets created by doxygen. Using this option one can overrule
- # certain style aspects. This is preferred over using HTML_STYLESHEET
--# since it does not replace the standard style sheet and is therefor more
-+# since it does not replace the standard style sheet and is therefore more
- # robust against future updates. Doxygen will copy the style sheet file to
- # the output directory.
- 
-@@ -957,7 +957,7 @@ HTML_COLORSTYLE_GAMMA  = 80
- # page will contain the date and time when the page was generated. Setting
- # this to NO can help when comparing the output of multiple runs.
- 
--HTML_TIMESTAMP         = YES
-+HTML_TIMESTAMP         = NO
- 
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
- # documentation will contain sections that can be hidden and shown after the
-diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
-index 5cd0b3c..5145b54 100644
---- a/docs/doxygen/doxyxml/__init__.py
-+++ b/docs/doxygen/doxyxml/__init__.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -63,8 +64,9 @@
- u'Outputs the vital aadvark statistics.'
- 
- """
-+from __future__ import unicode_literals
- 
--from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
-+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
- 
- def _test():
-     import os
-diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
-index e8f026a..4404c97 100644
---- a/docs/doxygen/doxyxml/base.py
-+++ b/docs/doxygen/doxyxml/base.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -24,24 +25,26 @@
- Classes based upon this are used to make more user-friendly interfaces
- to the doxygen xml docs than the generated classes provide.
- """
-+from __future__ import print_function
-+from __future__ import unicode_literals
- 
- import os
- import pdb
- 
- from xml.parsers.expat import ExpatError
- 
--from generated import compound
-+from .generated import compound
- 
- 
- class Base(object):
- 
--    class Duplicate(StandardError):
-+    class Duplicate(Exception):
-         pass
- 
--    class NoSuchMember(StandardError):
-+    class NoSuchMember(Exception):
-         pass
- 
--    class ParsingError(StandardError):
-+    class ParsingError(Exception):
-         pass
- 
-     def __init__(self, parse_data, top=None):
-@@ -94,7 +97,7 @@ def get_cls(self, mem):
-         for cls in self.mem_classes:
-             if cls.can_parse(mem):
-                 return cls
--        raise StandardError(("Did not find a class for object '%s'." \
-+        raise Exception(("Did not find a class for object '%s'." \
-                                  % (mem.get_name())))
- 
-     def convert_mem(self, mem):
-@@ -102,11 +105,11 @@ def convert_mem(self, mem):
-             cls = self.get_cls(mem)
-             converted = cls.from_parse_data(mem, self.top)
-             if converted is None:
--                raise StandardError('No class matched this object.')
-+                raise Exception('No class matched this object.')
-             self.add_ref(converted)
-             return converted
--        except StandardError, e:
--            print e
-+        except Exception as e:
-+            print(e)
- 
-     @classmethod
-     def includes(cls, inst):
-diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
-index 78e8153..30baf12 100644
---- a/docs/doxygen/doxyxml/doxyindex.py
-+++ b/docs/doxygen/doxyxml/doxyindex.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -22,12 +23,14 @@
- Classes providing more user-friendly interfaces to the doxygen xml
- docs than the generated classes provide.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- import os
- 
--from generated import index
--from base import Base
--from text import description
-+from .generated import index
-+from .base import Base
-+from .text import description
- 
- class DoxyIndex(Base):
-     """
-diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py
-index 3982397..23095c1 100644
---- a/docs/doxygen/doxyxml/generated/__init__.py
-+++ b/docs/doxygen/doxyxml/generated/__init__.py
-@@ -5,3 +5,4 @@
- resultant classes are not very friendly to navigate so the rest of the
- doxyxml module processes them further.
- """
-+from __future__ import unicode_literals
-diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py
-index 1522ac2..acfa0dd 100644
---- a/docs/doxygen/doxyxml/generated/compound.py
-+++ b/docs/doxygen/doxyxml/generated/compound.py
-@@ -3,15 +3,17 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
- 
--from string import lower as str_lower
- from xml.dom import minidom
- from xml.dom import Node
- 
- import sys
- 
--import compoundsuper as supermod
--from compoundsuper import MixedContainer
-+from . import compoundsuper as supermod
-+from .compoundsuper import MixedContainer
- 
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py
-index 6255dda..6e984e1 100644
---- a/docs/doxygen/doxyxml/generated/compoundsuper.py
-+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
-@@ -4,12 +4,17 @@
- # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
-+
- #
- # User methods
- #
-@@ -19,9 +24,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +69,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +77,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +107,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -4221,7 +4226,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('lineno'):
-             try:
-                 self.lineno = int(attrs.get('lineno').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
-         if attrs.get('refkind'):
-             self.refkind = attrs.get('refkind').value
-@@ -4504,12 +4509,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('endline'):
-             try:
-                 self.endline = int(attrs.get('endline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (endline): %s' % exp)
-         if attrs.get('startline'):
-             try:
-                 self.startline = int(attrs.get('startline').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (startline): %s' % exp)
-         if attrs.get('refid'):
-             self.refid = attrs.get('refid').value
-@@ -4627,17 +4632,17 @@ def buildAttributes(self, attrs):
-         if attrs.get('bodystart'):
-             try:
-                 self.bodystart = int(attrs.get('bodystart').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
-         if attrs.get('line'):
-             try:
-                 self.line = int(attrs.get('line').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (line): %s' % exp)
-         if attrs.get('bodyend'):
-             try:
-                 self.bodyend = int(attrs.get('bodyend').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
-         if attrs.get('bodyfile'):
-             self.bodyfile = attrs.get('bodyfile').value
-@@ -6778,12 +6783,12 @@ def buildAttributes(self, attrs):
-         if attrs.get('rows'):
-             try:
-                 self.rows = int(attrs.get('rows').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (rows): %s' % exp)
-         if attrs.get('cols'):
-             try:
-                 self.cols = int(attrs.get('cols').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (cols): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.ELEMENT_NODE and \
-@@ -7108,7 +7113,7 @@ def buildAttributes(self, attrs):
-         if attrs.get('level'):
-             try:
-                 self.level = int(attrs.get('level').value)
--            except ValueError, exp:
-+            except ValueError as exp:
-                 raise ValueError('Bad integer attribute (level): %s' % exp)
-     def buildChildren(self, child_, nodeName_):
-         if child_.nodeType == Node.TEXT_NODE:
-@@ -8283,7 +8288,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -8339,4 +8344,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py
-index 7a70e14..0c63512 100644
---- a/docs/doxygen/doxyxml/generated/index.py
-+++ b/docs/doxygen/doxyxml/generated/index.py
-@@ -3,14 +3,16 @@
- """
- Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
- """
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
- 
- from xml.dom import minidom
- 
- import os
- import sys
--import compound
-+from . import compound
- 
--import indexsuper as supermod
-+from . import indexsuper as supermod
- 
- class DoxygenTypeSub(supermod.DoxygenType):
-     def __init__(self, version=None, compound=None):
-diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py
-index a991530..11312db 100644
---- a/docs/doxygen/doxyxml/generated/indexsuper.py
-+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
-@@ -4,12 +4,16 @@
- # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
- #
- 
-+from __future__ import print_function
-+from __future__ import unicode_literals
-+
- import sys
--import getopt
--from string import lower as str_lower
-+
- from xml.dom import minidom
- from xml.dom import Node
- 
-+import six
-+
- #
- # User methods
- #
-@@ -19,9 +23,9 @@
- 
- try:
-     from generatedssuper import GeneratedsSuper
--except ImportError, exp:
-+except ImportError as exp:
- 
--    class GeneratedsSuper:
-+    class GeneratedsSuper(object):
-         def format_string(self, input_data, input_name=''):
-             return input_data
-         def format_integer(self, input_data, input_name=''):
-@@ -64,7 +68,7 @@ def showIndent(outfile, level):
-         outfile.write('    ')
- 
- def quote_xml(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -72,7 +76,7 @@ def quote_xml(inStr):
-     return s1
- 
- def quote_attrib(inStr):
--    s1 = (isinstance(inStr, basestring) and inStr or
-+    s1 = (isinstance(inStr, six.string_types) and inStr or
-           '%s' % inStr)
-     s1 = s1.replace('&', '&amp;')
-     s1 = s1.replace('<', '&lt;')
-@@ -102,7 +106,7 @@ def quote_python(inStr):
-             return '"""%s"""' % s1
- 
- 
--class MixedContainer:
-+class MixedContainer(object):
-     # Constants for category:
-     CategoryNone = 0
-     CategoryText = 1
-@@ -462,7 +466,7 @@ def buildChildren(self, child_, nodeName_):
- """
- 
- def usage():
--    print USAGE_TEXT
-+    print(USAGE_TEXT)
-     sys.exit(1)
- 
- 
-@@ -520,4 +524,3 @@ def main():
-     main()
-     #import pdb
-     #pdb.run('main()')
--
-diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
-index 629edd1..e7066ba 100644
---- a/docs/doxygen/doxyxml/text.py
-+++ b/docs/doxygen/doxyxml/text.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -21,12 +22,13 @@
- """
- Utilities for extracting text from generated classes.
- """
-+from __future__ import unicode_literals
- 
- def is_string(txt):
-     if isinstance(txt, str):
-         return True
-     try:
--        if isinstance(txt, unicode):
-+        if isinstance(txt, str):
-             return True
-     except NameError:
-         pass
-@@ -49,7 +51,7 @@ def description_bit(obj):
-     elif is_string(obj):
-         return obj
-     else:
--        raise StandardError('Expecting a string or something with content, content_ or value attribute')
-+        raise Exception('Expecting a string or something with content, content_ or value attribute')
-     # If this bit is a paragraph then add one some line breaks.
-     if hasattr(obj, 'name') and obj.name == 'para':
-         result += "\n\n"
-diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
-index d3536db..c127b9e 100644
---- a/docs/doxygen/swig_doc.py
-+++ b/docs/doxygen/swig_doc.py
-@@ -1,7 +1,8 @@
- #
- # Copyright 2010-2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -26,6 +27,7 @@
- python docstrings.
- 
- """
-+from __future__ import unicode_literals
- 
- import sys, time
- 
-@@ -79,13 +81,15 @@ def includes(cls, item):
- 
- def utoascii(text):
-     """
--    Convert unicode text into ascii and escape quotes.
-+    Convert unicode text into ascii and escape quotes and backslashes.
-     """
-     if text is None:
-         return ''
-     out = text.encode('ascii', 'replace')
--    out = out.replace('"', '\\"')
--    return out
-+    # swig will require us to replace blackslash with 4 backslashes
-+    out = out.replace(b'\\', b'\\\\\\\\')
-+    out = out.replace(b'"', b'\\"').decode('ascii')
-+    return str(out)
- 
- 
- def combine_descriptions(obj):
-@@ -135,7 +139,7 @@ def make_entry(obj, name=None, templ="{description}", description=None, params=[
-     return entry_templ.format(
-         name=name,
-         docstring=docstring,
--    )
-+        )
- 
- 
- def make_func_entry(func, name=None, description=None, params=None):
-@@ -226,12 +230,12 @@ def make_block2_entry(di, block):
-     # the make function.
-     output = []
-     output.append(make_class_entry(
--        block, description=description,
--        ignored_methods=['make'], params=make_func.params))
-+            block, description=description,
-+            ignored_methods=['make'], params=make_func.params))
-     makename = block.name() + '::make'
-     output.append(make_func_entry(
--        make_func, name=makename, description=description,
--        params=make_func.params))
-+            make_func, name=makename, description=description,
-+            params=make_func.params))
-     return "\n\n".join(output)
- 
- def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-@@ -301,7 +305,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
- 
-     output = "\n\n".join(output)
- 
--    swig_doc = file(swigdocfilename, 'w')
-+    swig_doc = open(swigdocfilename, 'w')
-     swig_doc.write(output)
-     swig_doc.close()
- 
-@@ -309,7 +313,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-     # Parse command line options and set up doxyxml.
-     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
-     if len(sys.argv) != 3:
--        raise StandardError(err_msg)
-+        raise Exception(err_msg)
-     xml_path = sys.argv[1]
-     swigdocfilename = sys.argv[2]
-     di = DoxyIndex(xml_path)
-diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
-index 1b5c801..8bc75e4 100644
---- a/grc/CMakeLists.txt
-+++ b/grc/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -18,16 +19,16 @@
- # Boston, MA 02110-1301, USA.
- 
- install(FILES
--    nrsc5_l1_fm_encoder_mp1.xml
--    nrsc5_l1_fm_encoder_mp2.xml
--    nrsc5_l1_fm_encoder_mp3.xml
--    nrsc5_l1_fm_encoder_mp11.xml
--    nrsc5_l1_fm_encoder_mp5.xml
--    nrsc5_l1_fm_encoder_mp5_ms1.xml
--    nrsc5_l1_fm_encoder_mp6.xml
--    nrsc5_l1_fm_encoder_mp6_ms1.xml
--    nrsc5_sis_encoder.xml
--    nrsc5_l2_encoder.xml
--    nrsc5_hdc_encoder.xml
--    nrsc5_psd_encoder.xml DESTINATION share/gnuradio/grc/blocks
-+    nrsc5_hdc_encoder.block.yml
-+    nrsc5_l1_fm_encoder_mp1.block.yml
-+    nrsc5_l1_fm_encoder_mp2.block.yml
-+    nrsc5_l1_fm_encoder_mp3.block.yml
-+    nrsc5_l1_fm_encoder_mp11.block.yml
-+    nrsc5_l1_fm_encoder_mp5.block.yml
-+    nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-+    nrsc5_l1_fm_encoder_mp6.block.yml
-+    nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-+    nrsc5_l2_encoder.block.yml
-+    nrsc5_psd_encoder.block.yml
-+    nrsc5_sis_encoder.block.yml DESTINATION share/gnuradio/grc/blocks
- )
-diff --git a/grc/nrsc5_hdc_encoder.block.yml b/grc/nrsc5_hdc_encoder.block.yml
-new file mode 100644
-index 0000000..520dcbe
---- /dev/null
-+++ b/grc/nrsc5_hdc_encoder.block.yml
-@@ -0,0 +1,33 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_hdc_encoder
-+label: HDC Encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: channels
-+    label: Channels
-+    dtype: int
-+    default: 2
-+-   id: bitrate
-+    label: Bitrate
-+    dtype: int
-+    default: 64000
-+
-+inputs:
-+-   domain: stream
-+    dtype: float
-+    multiplicity: ${ channels }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 1 <= channels <= 2 }
-+- ${ 0 < bitrate }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.hdc_encoder(${channels}, ${bitrate})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_hdc_encoder.xml b/grc/nrsc5_hdc_encoder.xml
-deleted file mode 100644
-index b4e472e..0000000
---- a/grc/nrsc5_hdc_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>HDC Encoder</name>
--  <key>nrsc5_hdc_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.hdc_encoder($channels, $bitrate)</make>
--  <param>
--    <name>Channels</name>
--    <key>channels</key>
--    <value>2</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Bitrate</name>
--    <key>bitrate</key>
--    <value>64000</value>
--    <type>int</type>
--  </param>
--  <check>1 &lt;= $channels &lt;= 2</check>
--  <check>0 &lt; $bitrate</check>
--  <sink>
--    <name>in</name>
--    <type>float</type>
--    <nports>$channels</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.block.yml b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-new file mode 100644
-index 0000000..2b69d4c
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp1.block.yml
-@@ -0,0 +1,26 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp1
-+label: 'Layer 1 FM encoder: MP1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp1.xml b/grc/nrsc5_l1_fm_encoder_mp1.xml
-deleted file mode 100644
-index 46714a7..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp1.xml
-+++ /dev/null
-@@ -1,23 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP1</name>
--  <key>nrsc5_l1_fm_encoder_mp1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.block.yml b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-new file mode 100644
-index 0000000..8c109f3
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp11.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp11
-+label: 'Layer 1 FM encoder: MP11'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p4
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(11)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp11.xml b/grc/nrsc5_l1_fm_encoder_mp11.xml
-deleted file mode 100644
-index cba0837..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp11.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP11</name>
--  <key>nrsc5_l1_fm_encoder_mp11</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(11)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p4</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.block.yml b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-new file mode 100644
-index 0000000..6e049b5
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp2.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp2
-+label: 'Layer 1 FM encoder: MP2'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 2304
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(2)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp2.xml b/grc/nrsc5_l1_fm_encoder_mp2.xml
-deleted file mode 100644
-index a176309..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp2.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP2</name>
--  <key>nrsc5_l1_fm_encoder_mp2</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(2)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>2304</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.block.yml b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-new file mode 100644
-index 0000000..e5077ca
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp3.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp3
-+label: 'Layer 1 FM encoder: MP3'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 146176
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(3)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp3.xml b/grc/nrsc5_l1_fm_encoder_mp3.xml
-deleted file mode 100644
-index 11af89a..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp3.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP3</name>
--  <key>nrsc5_l1_fm_encoder_mp3</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(3)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>146176</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.block.yml b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-new file mode 100644
-index 0000000..5a79a23
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5.block.yml
-@@ -0,0 +1,34 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5
-+label: 'Layer 1 FM encoder: MP5'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5.xml b/grc/nrsc5_l1_fm_encoder_mp5.xml
-deleted file mode 100644
-index e5b5209..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5.xml
-+++ /dev/null
-@@ -1,33 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5</name>
--  <key>nrsc5_l1_fm_encoder_mp5</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-new file mode 100644
-index 0000000..34f9d93
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp5_ms1.block.yml
-@@ -0,0 +1,46 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp5_ms1
-+label: 'Layer 1 FM encoder: MP5+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 109312
-+-   label: p3
-+    domain: stream
-+    dtype: byte
-+    vlen: 4608
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(5, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-deleted file mode 100644
-index fd66e29..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp5_ms1.xml
-+++ /dev/null
-@@ -1,48 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP5+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp5_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(5, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>109312</vlen>
--  </sink>
--  <sink>
--    <name>p3</name>
--    <type>byte</type>
--    <vlen>4608</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.block.yml b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-new file mode 100644
-index 0000000..32ee051
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6.block.yml
-@@ -0,0 +1,30 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6
-+label: 'Layer 1 FM encoder: MP6'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6.xml b/grc/nrsc5_l1_fm_encoder_mp6.xml
-deleted file mode 100644
-index b1b3f07..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6</name>
--  <key>nrsc5_l1_fm_encoder_mp6</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-new file mode 100644
-index 0000000..fe35996
---- /dev/null
-+++ b/grc/nrsc5_l1_fm_encoder_mp6_ms1.block.yml
-@@ -0,0 +1,42 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l1_fm_encoder_mp6_ms1
-+label: 'Layer 1 FM encoder: MP6+MS1'
-+category: '[NRSC-5]'
-+
-+inputs:
-+-   label: p1
-+    domain: stream
-+    dtype: byte
-+    vlen: 9216
-+-   label: p2
-+    domain: stream
-+    dtype: byte
-+    vlen: 72448
-+-   label: pids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+-   label: s4
-+    domain: stream
-+    dtype: byte
-+    vlen: 18272
-+-   label: s5
-+    domain: stream
-+    dtype: byte
-+    vlen: 512
-+-   label: sids
-+    domain: stream
-+    dtype: byte
-+    vlen: 80
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 1048576
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l1_fm_encoder(6, 1)
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml b/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-deleted file mode 100644
-index 2302341..0000000
---- a/grc/nrsc5_l1_fm_encoder_mp6_ms1.xml
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 1 FM encoder: MP6+MS1</name>
--  <key>nrsc5_l1_fm_encoder_mp6_ms1</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l1_fm_encoder(6, 1)</make>
--  <sink>
--    <name>p1</name>
--    <type>byte</type>
--    <vlen>9216</vlen>
--  </sink>
--  <sink>
--    <name>p2</name>
--    <type>byte</type>
--    <vlen>72448</vlen>
--  </sink>
--  <sink>
--    <name>pids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <sink>
--    <name>s4</name>
--    <type>byte</type>
--    <vlen>18272</vlen>
--  </sink>
--  <sink>
--    <name>s5</name>
--    <type>byte</type>
--    <vlen>512</vlen>
--  </sink>
--  <sink>
--    <name>sids</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>1048576</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_l2_encoder.block.yml b/grc/nrsc5_l2_encoder.block.yml
-new file mode 100644
-index 0000000..f946b2a
---- /dev/null
-+++ b/grc/nrsc5_l2_encoder.block.yml
-@@ -0,0 +1,44 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_l2_encoder
-+label: Layer 2 encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: num_progs
-+    label: Programs
-+    dtype: int
-+    default: 1
-+-   id: first_prog
-+    label: First prog. no.
-+    dtype: int
-+    default: 0
-+-   id: size
-+    label: Frame size
-+    dtype: int
-+    default: 146176
-+    options: [146176, 109312, 72448, 18272, 9216, 4608, 2304]
-+
-+inputs:
-+-   label: hdc
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+-   label: psd
-+    domain: stream
-+    dtype: byte
-+    multiplicity: ${ num_progs }
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: ${ size }
-+asserts:
-+- ${ 0 <= first_prog <= 7 }
-+- ${ 1 <= num_progs <= 8 - first_prog }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.l2_encoder(${num_progs}, ${first_prog}, ${size})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_l2_encoder.xml b/grc/nrsc5_l2_encoder.xml
-deleted file mode 100644
-index 216969a..0000000
---- a/grc/nrsc5_l2_encoder.xml
-+++ /dev/null
-@@ -1,71 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>Layer 2 encoder</name>
--  <key>nrsc5_l2_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.l2_encoder($num_progs, $first_prog, $size)</make>
--  <param>
--    <name>Programs</name>
--    <key>num_progs</key>
--    <value>1</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>First prog. no.</name>
--    <key>first_prog</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Frame size</name>
--    <key>size</key>
--    <value>146176</value>
--    <type>int</type>
--    <option>
--      <name>146176</name>
--      <key>146176</key>
--    </option>
--    <option>
--      <name>109312</name>
--      <key>109312</key>
--    </option>
--    <option>
--      <name>72448</name>
--      <key>72448</key>
--    </option>
--    <option>
--      <name>18272</name>
--      <key>18272</key>
--    </option>
--    <option>
--      <name>9216</name>
--      <key>9216</key>
--    </option>
--    <option>
--      <name>4608</name>
--      <key>4608</key>
--    </option>
--    <option>
--      <name>2304</name>
--      <key>2304</key>
--    </option>
--  </param>
--  <check>0 &lt;= $first_prog &lt;= 7</check>
--  <check>1 &lt;= $num_progs &lt;= 8 - $first_prog</check>
--  <sink>
--    <name>hdc</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <sink>
--    <name>psd</name>
--    <type>byte</type>
--    <nports>$num_progs</nports>
--  </sink>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>$size</vlen>
--  </source>
--</block>
-diff --git a/grc/nrsc5_psd_encoder.block.yml b/grc/nrsc5_psd_encoder.block.yml
-new file mode 100644
-index 0000000..b0d25ea
---- /dev/null
-+++ b/grc/nrsc5_psd_encoder.block.yml
-@@ -0,0 +1,31 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_psd_encoder
-+label: PSD encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: prog_num
-+    label: Program number
-+    dtype: int
-+    default: 0
-+-   id: title
-+    label: Title
-+    dtype: string
-+    default: Title
-+-   id: artist
-+    label: Artist
-+    dtype: string
-+    default: Artist
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+asserts:
-+- ${ 0 <= prog_num <= 7 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.psd_encoder(${prog_num}, ${title}, ${artist})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_psd_encoder.xml b/grc/nrsc5_psd_encoder.xml
-deleted file mode 100644
-index 8828da4..0000000
---- a/grc/nrsc5_psd_encoder.xml
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>PSD encoder</name>
--  <key>nrsc5_psd_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.psd_encoder($prog_num, $title, $artist)</make>
--  <param>
--    <name>Program number</name>
--    <key>prog_num</key>
--    <value>0</value>
--    <type>int</type>
--  </param>
--  <param>
--    <name>Title</name>
--    <key>title</key>
--    <value>Title</value>
--    <type>string</type>
--  </param>
--  <param>
--    <name>Artist</name>
--    <key>artist</key>
--    <value>Artist</value>
--    <type>string</type>
--  </param>
--  <check>0 &lt;= $prog_num &lt;= 7</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--  </source>
--</block>
-diff --git a/grc/nrsc5_sis_encoder.block.yml b/grc/nrsc5_sis_encoder.block.yml
-new file mode 100644
-index 0000000..448a753
---- /dev/null
-+++ b/grc/nrsc5_sis_encoder.block.yml
-@@ -0,0 +1,24 @@
-+# auto-generated by grc.converter
-+
-+id: nrsc5_sis_encoder
-+label: SIS encoder
-+category: '[NRSC-5]'
-+
-+parameters:
-+-   id: short_name
-+    label: Station name
-+    dtype: string
-+    default: ABCD
-+
-+outputs:
-+-   domain: stream
-+    dtype: byte
-+    vlen: 80
-+asserts:
-+- ${ len(short_name) == 4 }
-+
-+templates:
-+    imports: import nrsc5
-+    make: nrsc5.sis_encoder(${short_name})
-+
-+file_format: 1
-diff --git a/grc/nrsc5_sis_encoder.xml b/grc/nrsc5_sis_encoder.xml
-deleted file mode 100644
-index 2bd6f1a..0000000
---- a/grc/nrsc5_sis_encoder.xml
-+++ /dev/null
-@@ -1,20 +0,0 @@
--<?xml version="1.0"?>
--<block>
--  <name>SIS encoder</name>
--  <key>nrsc5_sis_encoder</key>
--  <category>[NRSC-5]</category>
--  <import>import nrsc5</import>
--  <make>nrsc5.sis_encoder($short_name)</make>
--  <param>
--    <name>Station name</name>
--    <key>short_name</key>
--    <value>ABCD</value>
--    <type>string</type>
--  </param>
--  <check>len($short_name) == 4</check>
--  <source>
--    <name>out</name>
--    <type>byte</type>
--    <vlen>80</vlen>
--  </source>
--</block>
-diff --git a/include/nrsc5/CMakeLists.txt b/include/nrsc5/CMakeLists.txt
-index b3c2c5d..04c74c3 100644
---- a/include/nrsc5/CMakeLists.txt
-+++ b/include/nrsc5/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011,2012 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -22,9 +23,9 @@
- ########################################################################
- install(FILES
-     api.h
-+    hdc_encoder.h
-     l1_fm_encoder.h
--    sis_encoder.h
-     l2_encoder.h
--    hdc_encoder.h
--    psd_encoder.h DESTINATION include/nrsc5
-+    psd_encoder.h
-+    sis_encoder.h DESTINATION include/nrsc5
- )
-diff --git a/include/nrsc5/api.h b/include/nrsc5/api.h
-index f0e8af7..449b586 100644
---- a/include/nrsc5/api.h
-+++ b/include/nrsc5/api.h
-@@ -1,7 +1,8 @@
- /*
-  * Copyright 2011 Free Software Foundation, Inc.
-  *
-- * This file is part of GNU Radio
-+ * This file was generated by gr_modtool, a tool from the GNU Radio framework
-+ * This file is a part of gr-nrsc5
-  *
-  * 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
-diff --git a/include/nrsc5/hdc_encoder.h b/include/nrsc5/hdc_encoder.h
-index 5de1490..4b40b14 100644
---- a/include/nrsc5/hdc_encoder.h
-+++ b/include/nrsc5/hdc_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_HDC_ENCODER_H
- #define INCLUDED_NRSC5_HDC_ENCODER_H
- 
-diff --git a/include/nrsc5/l1_fm_encoder.h b/include/nrsc5/l1_fm_encoder.h
-index 9cebec6..52df09d 100644
---- a/include/nrsc5/l1_fm_encoder.h
-+++ b/include/nrsc5/l1_fm_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L1_FM_ENCODER_H
- #define INCLUDED_NRSC5_L1_FM_ENCODER_H
- 
-diff --git a/include/nrsc5/l2_encoder.h b/include/nrsc5/l2_encoder.h
-index 935f3b6..4a3bac0 100644
---- a/include/nrsc5/l2_encoder.h
-+++ b/include/nrsc5/l2_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_L2_ENCODER_H
- #define INCLUDED_NRSC5_L2_ENCODER_H
- 
-diff --git a/include/nrsc5/psd_encoder.h b/include/nrsc5/psd_encoder.h
-index f916c71..d6cbca5 100644
---- a/include/nrsc5/psd_encoder.h
-+++ b/include/nrsc5/psd_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_PSD_ENCODER_H
- #define INCLUDED_NRSC5_PSD_ENCODER_H
- 
-diff --git a/include/nrsc5/sis_encoder.h b/include/nrsc5/sis_encoder.h
-index ae65c2f..73e26de 100644
---- a/include/nrsc5/sis_encoder.h
-+++ b/include/nrsc5/sis_encoder.h
-@@ -18,7 +18,6 @@
-  * Boston, MA 02110-1301, USA.
-  */
- 
--
- #ifndef INCLUDED_NRSC5_SIS_ENCODER_H
- #define INCLUDED_NRSC5_SIS_ENCODER_H
- 
-diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
-index 9f87e20..a23aef5 100644
---- a/lib/CMakeLists.txt
-+++ b/lib/CMakeLists.txt
-@@ -1,6 +1,7 @@
--# Copyright 2011,2012,2016 Free Software Foundation, Inc.
-+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -22,25 +23,26 @@
- ########################################################################
- include(GrPlatform) #define LIB_SUFFIX
- 
--include_directories(${Boost_INCLUDE_DIR})
--link_directories(${Boost_LIBRARY_DIRS})
--
- list(APPEND nrsc5_sources
-+    hdc_encoder_impl.cc
-     l1_fm_encoder_impl.cc
--    sis_encoder_impl.cc
-     l2_encoder_impl.cc
--    hdc_encoder_impl.cc
-     psd_encoder_impl.cc
-+    sis_encoder_impl.cc
- )
- 
- set(nrsc5_sources "${nrsc5_sources}" PARENT_SCOPE)
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping lib/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping lib/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- add_library(gnuradio-nrsc5 SHARED ${nrsc5_sources})
--target_link_libraries(gnuradio-nrsc5 ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES} fdk-aac)
-+target_link_libraries(gnuradio-nrsc5 gnuradio::gnuradio-runtime gnuradio::gnuradio-fec fdk-aac)
-+target_include_directories(gnuradio-nrsc5
-+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
-+    PUBLIC $<INSTALL_INTERFACE:include>
-+  )
- set_target_properties(gnuradio-nrsc5 PROPERTIES DEFINE_SYMBOL "gnuradio_nrsc5_EXPORTS")
- 
- if(APPLE)
-@@ -53,34 +55,34 @@ endif(APPLE)
- # Install built library files
- ########################################################################
- include(GrMiscUtils)
--GR_LIBRARY_FOO(gnuradio-nrsc5 RUNTIME_COMPONENT "nrsc5_runtime" DEVEL_COMPONENT "nrsc5_devel")
-+GR_LIBRARY_FOO(gnuradio-nrsc5)
-+
-+########################################################################
-+# Print summary
-+########################################################################
-+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
- 
- ########################################################################
- # Build and register unit test
- ########################################################################
- include(GrTest)
- 
--include_directories(${CPPUNIT_INCLUDE_DIRS})
--
-+# If your unit tests require special include paths, add them here
-+#include_directories()
-+# List all files that contain Boost.UTF unit tests here
- list(APPEND test_nrsc5_sources
--    ${CMAKE_CURRENT_SOURCE_DIR}/test_nrsc5.cc
--    ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrsc5.cc
- )
-+# Anything we need to link to for the unit tests go here
-+list(APPEND GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- 
--add_executable(test-nrsc5 ${test_nrsc5_sources})
--
--target_link_libraries(
--  test-nrsc5
--  ${GNURADIO_RUNTIME_LIBRARIES}
--  ${Boost_LIBRARIES}
--  ${CPPUNIT_LIBRARIES}
--  gnuradio-nrsc5
--)
-+if(NOT test_nrsc5_sources)
-+    MESSAGE(STATUS "No C++ unit tests... skipping")
-+    return()
-+endif(NOT test_nrsc5_sources)
- 
--GR_ADD_TEST(test_nrsc5 test-nrsc5)
--
--########################################################################
--# Print summary
--########################################################################
--message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
--message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
-+foreach(qa_file ${test_nrsc5_sources})
-+    GR_ADD_CPP_TEST("nrsc5_${qa_file}"
-+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
-+    )
-+endforeach(qa_file)
-diff --git a/lib/hdc_encoder_impl.cc b/lib/hdc_encoder_impl.cc
-index 706c2ac..89b1374 100644
---- a/lib/hdc_encoder_impl.cc
-+++ b/lib/hdc_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new hdc_encoder_impl(channels, bitrate));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/hdc_encoder_impl.h b/lib/hdc_encoder_impl.h
-index ff6b1d2..aa5a5a6 100644
---- a/lib/hdc_encoder_impl.h
-+++ b/lib/hdc_encoder_impl.h
-@@ -54,6 +54,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l1_fm_encoder_impl.cc b/lib/l1_fm_encoder_impl.cc
-index 6861700..bef95ea 100644
---- a/lib/l1_fm_encoder_impl.cc
-+++ b/lib/l1_fm_encoder_impl.cc
-@@ -105,6 +105,7 @@ namespace gr {
-         (new l1_fm_encoder_impl(psm, ssm));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l1_fm_encoder_impl.h b/lib/l1_fm_encoder_impl.h
-index e0bba24..a1db3c2 100644
---- a/lib/l1_fm_encoder_impl.h
-+++ b/lib/l1_fm_encoder_impl.h
-@@ -105,6 +105,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/l2_encoder_impl.cc b/lib/l2_encoder_impl.cc
-index ce14714..2ef81c8 100644
---- a/lib/l2_encoder_impl.cc
-+++ b/lib/l2_encoder_impl.cc
-@@ -41,6 +41,7 @@ namespace gr {
-         (new l2_encoder_impl(num_progs, first_prog, size));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/l2_encoder_impl.h b/lib/l2_encoder_impl.h
-index 9fa9494..084395a 100644
---- a/lib/l2_encoder_impl.h
-+++ b/lib/l2_encoder_impl.h
-@@ -85,6 +85,7 @@ namespace gr {
-            gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items,
-            gr_vector_void_star &output_items);
-+
-     };
- 
-   } // namespace nrsc5
-diff --git a/lib/psd_encoder_impl.cc b/lib/psd_encoder_impl.cc
-index acb4010..29c9ed7 100644
---- a/lib/psd_encoder_impl.cc
-+++ b/lib/psd_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new psd_encoder_impl(prog_num, title, artist));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/qa_nrsc5.cc b/lib/qa_nrsc5.cc
-deleted file mode 100644
-index b523eb2..0000000
---- a/lib/qa_nrsc5.cc
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- * GNU General Public License for more details.
-- *
-- * You should have received a copy of the GNU General Public License
-- * along with GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--/*
-- * This class gathers together all the test cases for the gr-filter
-- * directory into a single test suite.  As you create new test cases,
-- * add them here.
-- */
--
--#include "qa_nrsc5.h"
--
--CppUnit::TestSuite *
--qa_nrsc5::suite()
--{
--  CppUnit::TestSuite *s = new CppUnit::TestSuite("nrsc5");
--
--  return s;
--}
-diff --git a/lib/qa_nrsc5.h b/lib/qa_nrsc5.h
-deleted file mode 100644
-index 8ccf0f5..0000000
---- a/lib/qa_nrsc5.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- * GNU General Public License for more details.
-- *
-- * You should have received a copy of the GNU General Public License
-- * along with GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifndef _QA_NRSC5_H_
--#define _QA_NRSC5_H_
--
--#include <gnuradio/attributes.h>
--#include <cppunit/TestSuite.h>
--
--//! collect all the tests for the gr-filter directory
--
--class __GR_ATTR_EXPORT qa_nrsc5
--{
-- public:
--  //! return suite of tests for all of gr-filter directory
--  static CppUnit::TestSuite *suite();
--};
--
--#endif /* _QA_NRSC5_H_ */
-diff --git a/lib/sis_encoder_impl.cc b/lib/sis_encoder_impl.cc
-index 2e1cb19..714bfb0 100644
---- a/lib/sis_encoder_impl.cc
-+++ b/lib/sis_encoder_impl.cc
-@@ -35,6 +35,7 @@ namespace gr {
-         (new sis_encoder_impl(short_name));
-     }
- 
-+
-     /*
-      * The private constructor
-      */
-diff --git a/lib/test_nrsc5.cc b/lib/test_nrsc5.cc
-deleted file mode 100644
-index 59bd57c..0000000
---- a/lib/test_nrsc5.cc
-+++ /dev/null
-@@ -1,48 +0,0 @@
--/* -*- c++ -*- */
--/*
-- * Copyright 2012 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 3, or (at your option)
-- * any later version.
-- *
-- * GNU Radio is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- * GNU General Public License for more details.
-- *
-- * You should have received a copy of the GNU General Public License
-- * along with GNU Radio; see the file COPYING.  If not, write to
-- * the Free Software Foundation, Inc., 51 Franklin Street,
-- * Boston, MA 02110-1301, USA.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <cppunit/TextTestRunner.h>
--#include <cppunit/XmlOutputter.h>
--
--#include <gnuradio/unittests.h>
--#include "qa_nrsc5.h"
--#include <iostream>
--#include <fstream>
--
--int
--main (int argc, char **argv)
--{
--  CppUnit::TextTestRunner runner;
--  std::ofstream xmlfile(get_unittest_path("nrsc5.xml").c_str());
--  CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
--
--  runner.addTest(qa_nrsc5::suite());
--  runner.setOutputter(xmlout);
--
--  bool was_successful = runner.run("", false);
--
--  return was_successful ? 0 : 1;
--}
-diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
-index d0b133e..9b25913 100644
---- a/python/CMakeLists.txt
-+++ b/python/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -41,8 +42,8 @@ include(GrTest)
- 
- set(GR_TEST_TARGET_DEPS gnuradio-nrsc5)
- set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
-+GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_l1_fm_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l1_fm_encoder.py)
--GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
- GR_ADD_TEST(qa_l2_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_l2_encoder.py)
--GR_ADD_TEST(qa_hdc_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdc_encoder.py)
- GR_ADD_TEST(qa_psd_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_psd_encoder.py)
-+GR_ADD_TEST(qa_sis_encoder ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_sis_encoder.py)
-diff --git a/python/__init__.py b/python/__init__.py
-index f192a2d..476fb00 100644
---- a/python/__init__.py
-+++ b/python/__init__.py
-@@ -22,13 +22,14 @@
- This is the GNU Radio NRSC5 module. Place your Python package
- description here (python/__init__.py).
- '''
-+from __future__ import unicode_literals
- 
- # import swig generated symbols into the nrsc5 namespace
- try:
--	# this might fail if the module is python-only
--	from nrsc5_swig import *
-+    # this might fail if the module is python-only
-+    from .nrsc5_swig import *
- except ImportError:
--	pass
-+    pass
- 
- # import any pure python here
- #
-diff --git a/python/build_utils.py b/python/build_utils.py
-deleted file mode 100644
-index cf58a97..0000000
---- a/python/build_utils.py
-+++ /dev/null
-@@ -1,226 +0,0 @@
--#
--# Copyright 2004,2009,2012 Free Software Foundation, Inc.
--#
--# This file is part of GNU Radio
--#
--# GNU Radio is free software; you can redistribute it and/or modify
--# it under the terms of the GNU General Public License as published by
--# the Free Software Foundation; either version 3, or (at your option)
--# any later version.
--#
--# GNU Radio is distributed in the hope that it will be useful,
--# but WITHOUT ANY WARRANTY; without even the implied warranty of
--# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--# GNU General Public License for more details.
--#
--# You should have received a copy of the GNU General Public License
--# along with GNU Radio; see the file COPYING.  If not, write to
--# the Free Software Foundation, Inc., 51 Franklin Street,
--# Boston, MA 02110-1301, USA.
--#
--
--"""Misc utilities used at build time
--"""
--
--import re, os, os.path
--from build_utils_codes import *
--
--
--# set srcdir to the directory that contains Makefile.am
--try:
--    srcdir = os.environ['srcdir']
--except KeyError, e:
--    srcdir = "."
--srcdir = srcdir + '/'
--
--# set do_makefile to either true or false dependeing on the environment
--try:
--    if os.environ['do_makefile'] == '0':
--        do_makefile = False
--    else:
--        do_makefile = True
--except KeyError, e:
--    do_makefile = False
--
--# set do_sources to either true or false dependeing on the environment
--try:
--    if os.environ['do_sources'] == '0':
--        do_sources = False
--    else:
--        do_sources = True
--except KeyError, e:
--    do_sources = True
--
--name_dict = {}
--
--def log_output_name (name):
--    (base, ext) = os.path.splitext (name)
--    ext = ext[1:]                       # drop the leading '.'
--
--    entry = name_dict.setdefault (ext, [])
--    entry.append (name)
--
--def open_and_log_name (name, dir):
--    global do_sources
--    if do_sources:
--        f = open (name, dir)
--    else:
--        f = None
--    log_output_name (name)
--    return f
--
--def expand_template (d, template_filename, extra = ""):
--    '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file
--    '''
--    global do_sources
--    output_extension = extract_extension (template_filename)
--    template = open_src (template_filename, 'r')
--    output_name = d['NAME'] + extra + '.' + output_extension
--    log_output_name (output_name)
--    if do_sources:
--        output = open (output_name, 'w')
--        do_substitution (d, template, output)
--        output.close ()
--    template.close ()
--
--def output_glue (dirname):
--    output_makefile_fragment ()
--    output_ifile_include (dirname)
--
--def output_makefile_fragment ():
--    global do_makefile
--    if not do_makefile:
--        return
--# overwrite the source, which must be writable; this should have been
--# checked for beforehand in the top-level Makefile.gen.gen .
--    f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w')
--    f.write ('#\n# This file is machine generated.  All edits will be overwritten\n#\n')
--    output_subfrag (f, 'h')
--    output_subfrag (f, 'i')
--    output_subfrag (f, 'cc')
--    f.close ()
--
--def output_ifile_include (dirname):
--    global do_sources
--    if do_sources:
--        f = open ('%s_generated.i' % (dirname,), 'w')
--        f.write ('//\n// This file is machine generated.  All edits will be overwritten\n//\n')
--        files = name_dict.setdefault ('i', [])
--        files.sort ()
--        f.write ('%{\n')
--        for file in files:
--            f.write ('#include <%s>\n' % (file[0:-1] + 'h',))
--        f.write ('%}\n\n')
--        for file in files:
--            f.write ('%%include <%s>\n' % (file,))
--
--def output_subfrag (f, ext):
--    files = name_dict.setdefault (ext, [])
--    files.sort ()
--    f.write ("GENERATED_%s =" % (ext.upper ()))
--    for file in files:
--        f.write (" \\\n\t%s" % (file,))
--    f.write ("\n\n")
--
--def extract_extension (template_name):
--    # template name is something like: GrFIRfilterXXX.h.t
--    # we return everything between the penultimate . and .t
--    mo = re.search (r'\.([a-z]+)\.t$', template_name)
--    if not mo:
--        raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,)
--    return mo.group (1)
--
--def open_src (name, mode):
--    global srcdir
--    return open (os.path.join (srcdir, name), mode)
--
--def do_substitution (d, in_file, out_file):
--    def repl (match_obj):
--        key = match_obj.group (1)
--        # print key
--        return d[key]
--
--    inp = in_file.read ()
--    out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp)
--    out_file.write (out)
--
--
--
--copyright = '''/* -*- c++ -*- */
--/*
-- * Copyright 2003,2004 Free Software Foundation, Inc.
-- *
-- * This file is part of GNU Radio
-- *
-- * GNU Radio is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 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.
-- */
--'''
--
--def is_complex (code3):
--    if i_code (code3) == 'c' or o_code (code3) == 'c':
--        return '1'
--    else:
--        return '0'
--
--
--def standard_dict (name, code3, package='gr'):
--    d = {}
--    d['NAME'] = name
--    d['NAME_IMPL'] = name+'_impl'
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())
--    d['BASE_NAME'] = re.sub ('^' + package + '_', '', name)
--    d['SPTR_NAME'] = '%s_sptr' % name
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--
--def standard_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['BASE_NAME'] = name
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
--
--def standard_impl_dict2 (name, code3, package):
--    d = {}
--    d['NAME'] = name
--    d['IMPL_NAME'] = name
--    d['BASE_NAME'] = name.rstrip("impl").rstrip("_")
--    d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper())
--    d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten'
--    d['COPYRIGHT'] = copyright
--    d['FIR_TYPE'] = "fir_filter_" + code3
--    d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c'
--    d['TYPE'] = i_type (code3)
--    d['I_TYPE'] = i_type (code3)
--    d['O_TYPE'] = o_type (code3)
--    d['TAP_TYPE'] = tap_type (code3)
--    d['IS_COMPLEX'] = is_complex (code3)
--    return d
-diff --git a/python/qa_hdc_encoder.py b/python/qa_hdc_encoder.py
-index b57d841..7266aa9 100755
---- a/python/qa_hdc_encoder.py
-+++ b/python/qa_hdc_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_hdc_encoder (gr_unittest.TestCase):
-+class qa_hdc_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_hdc_encoder, "qa_hdc_encoder.xml")
-+    gr_unittest.run(qa_hdc_encoder)
-diff --git a/python/qa_l1_fm_encoder.py b/python/qa_l1_fm_encoder.py
-index 9b22e0e..3ebd761 100755
---- a/python/qa_l1_fm_encoder.py
-+++ b/python/qa_l1_fm_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l1_fm_encoder (gr_unittest.TestCase):
-+class qa_l1_fm_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l1_fm_encoder, "qa_l1_fm_encoder.xml")
-+    gr_unittest.run(qa_l1_fm_encoder)
-diff --git a/python/qa_l2_encoder.py b/python/qa_l2_encoder.py
-index cb71f27..cb48bd2 100755
---- a/python/qa_l2_encoder.py
-+++ b/python/qa_l2_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_l2_encoder (gr_unittest.TestCase):
-+class qa_l2_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_l2_encoder, "qa_l2_encoder.xml")
-+    gr_unittest.run(qa_l2_encoder)
-diff --git a/python/qa_psd_encoder.py b/python/qa_psd_encoder.py
-index a274a9c..944240d 100755
---- a/python/qa_psd_encoder.py
-+++ b/python/qa_psd_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_psd_encoder (gr_unittest.TestCase):
-+class qa_psd_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_psd_encoder, "qa_psd_encoder.xml")
-+    gr_unittest.run(qa_psd_encoder)
-diff --git a/python/qa_sis_encoder.py b/python/qa_sis_encoder.py
-index 96a83cd..485ab68 100755
---- a/python/qa_sis_encoder.py
-+++ b/python/qa_sis_encoder.py
-@@ -23,19 +23,19 @@
- from gnuradio import blocks
- import nrsc5_swig as nrsc5
- 
--class qa_sis_encoder (gr_unittest.TestCase):
-+class qa_sis_encoder(gr_unittest.TestCase):
- 
--    def setUp (self):
--        self.tb = gr.top_block ()
-+    def setUp(self):
-+        self.tb = gr.top_block()
- 
--    def tearDown (self):
-+    def tearDown(self):
-         self.tb = None
- 
--    def test_001_t (self):
-+    def test_001_t(self):
-         # set up fg
--        self.tb.run ()
-+        self.tb.run()
-         # check data
- 
- 
- if __name__ == '__main__':
--    gr_unittest.run(qa_sis_encoder, "qa_sis_encoder.xml")
-+    gr_unittest.run(qa_sis_encoder)
-diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
-index 06747c5..351aa9b 100644
---- a/swig/CMakeLists.txt
-+++ b/swig/CMakeLists.txt
-@@ -1,6 +1,7 @@
- # Copyright 2011 Free Software Foundation, Inc.
- #
--# This file is part of GNU Radio
-+# This file was generated by gr_modtool, a tool from the GNU Radio framework
-+# This file is a part of gr-nrsc5
- #
- # 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
-@@ -21,15 +22,15 @@
- # Check if there is C++ code at all
- ########################################################################
- if(NOT nrsc5_sources)
--	MESSAGE(STATUS "No C++ sources... skipping swig/")
--	return()
-+    MESSAGE(STATUS "No C++ sources... skipping swig/")
-+    return()
- endif(NOT nrsc5_sources)
- 
- ########################################################################
- # Include swig generation macros
- ########################################################################
- find_package(SWIG)
--find_package(PythonLibs 2)
-+find_package(PythonLibs)
- if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
-     return()
- endif()
-@@ -39,11 +40,11 @@ include(GrPython)
- ########################################################################
- # Setup swig generation
- ########################################################################
--foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})
--    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)
--endforeach(incdir)
-+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)
-+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)
- 
- set(GR_SWIG_LIBRARIES gnuradio-nrsc5)
-+
- set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/nrsc5_swig_doc.i)
- set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
- 
-diff --git a/swig/nrsc5_swig.i b/swig/nrsc5_swig.i
-index 99841a3..4b75b62 100644
---- a/swig/nrsc5_swig.i
-+++ b/swig/nrsc5_swig.i
-@@ -2,27 +2,26 @@
- 
- #define NRSC5_API
- 
--%include "gnuradio.i"			// the common stuff
-+%include "gnuradio.i"           // the common stuff
- 
- //load generated python docstrings
- %include "nrsc5_swig_doc.i"
- 
- %{
-+#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/l1_fm_encoder.h"
--#include "nrsc5/sis_encoder.h"
- #include "nrsc5/l2_encoder.h"
--#include "nrsc5/hdc_encoder.h"
- #include "nrsc5/psd_encoder.h"
-+#include "nrsc5/sis_encoder.h"
- %}
- 
--
-+%include "nrsc5/hdc_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/l1_fm_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l1_fm_encoder);
--%include "nrsc5/sis_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
- %include "nrsc5/l2_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, l2_encoder);
--%include "nrsc5/hdc_encoder.h"
--GR_SWIG_BLOCK_MAGIC2(nrsc5, hdc_encoder);
- %include "nrsc5/psd_encoder.h"
- GR_SWIG_BLOCK_MAGIC2(nrsc5, psd_encoder);
-+%include "nrsc5/sis_encoder.h"
-+GR_SWIG_BLOCK_MAGIC2(nrsc5, sis_encoder);
diff --git a/srcpkgs/gnuradio-nrsc5/template b/srcpkgs/gnuradio-nrsc5/template
index f0d91aa1c8d2..e723ce369750 100644
--- a/srcpkgs/gnuradio-nrsc5/template
+++ b/srcpkgs/gnuradio-nrsc5/template
@@ -1,19 +1,25 @@
 # Template file for 'gnuradio-nrsc5'
 pkgname=gnuradio-nrsc5
-version=1.0.0
-revision=5
-wrksrc="gr-nrsc5-${version}"
+version=1.0.0git
+revision=1
+_githash=145b2192a920907f98c9eef6c9181f9c13090a64
+wrksrc="gr-nrsc5-${_githash}"
 build_style=cmake
 make_cmd=make
-hostmakedepends="git automake libtool pkg-config gnuradio swig"
-makedepends="gnuradio-devel boost-devel libcppunit-devel python3-devel
- log4cpp-devel gmpxx-devel mpir-devel gsl-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="git automake libtool pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNU Radio implementation of HD Radio"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-3.0-or-later"
-homepage="https://github.com/argilo/gr-nrsc5/"
-distfiles="https://github.com/argilo/gr-nrsc5/archive/v${version}.tar.gz"
-checksum=d736c4cb1104254d07296d2a61880e07149c9bfd1a49aed504215672d4e09485
+homepage="https://github.com/argilo/gr-nrsc5"
+distfiles="https://github.com/argilo/gr-nrsc5/archive/${_githash}.tar.gz"
+checksum=14b65bbceb725579fecea3423905699b177835bc5a3d480246a77f654d605ecb
+make_check=no  # XXX: ModuleNotFoundError: No module named 'nrsc5'
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 export CMAKE_GENERATOR="Unix Makefiles"
 

From b629fdc7a38847bfe3e5e677f488412371c59a9a Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:52:18 +1100
Subject: [PATCH 6/8] gnuradio-osmosdr: update to latest git revision

No release tag since 2020-12-18.

Also clean up makedepends.
---
 srcpkgs/gnuradio-osmosdr/template | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/srcpkgs/gnuradio-osmosdr/template b/srcpkgs/gnuradio-osmosdr/template
index 886d2a9db2af..91ea824f9e3b 100644
--- a/srcpkgs/gnuradio-osmosdr/template
+++ b/srcpkgs/gnuradio-osmosdr/template
@@ -1,19 +1,23 @@
 # Template file for 'gnuradio-osmosdr'
 pkgname=gnuradio-osmosdr
-version=0.2.0
-revision=4
-wrksrc="gr-osmosdr-${version}"
+version=0.2.3git
+revision=1
+_githash=a100eb024c0210b95e4738b6efd836d48225bd03
+wrksrc="gr-osmosdr-${_githash}"
 build_style=cmake
-hostmakedepends="pkg-config swig python3 gnuradio"
-makedepends="boost-devel gnuradio-devel libairspy-devel libhackrf-devel
- librtlsdr-devel python3-devel uhd-devel log4cpp-devel mpir-devel
- SoapySDR-devel volk-devel fftw-devel gmpxx-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="SoapySDR-devel gnuradio-devel libairspy-devel libhackrf-devel librtlsdr-devel"
 short_desc="GNU Radio source block for rtlsdr, hackrf and airspy"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
 homepage="https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR"
-distfiles="https://github.com/osmocom/gr-osmosdr/archive/v${version}.tar.gz"
-checksum=9812429d97bc54f0a8917b880ca9e7e2421c66aeaac8ce5608161a8ae7007122
+distfiles="https://github.com/osmocom/gr-osmosdr/archive/${_githash}.tar.gz"
+checksum=a3cc85dd708d06d234ff4ab7f274a4a49db6427eed1e7e58711a1b61a4fa4de1
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-osmosdr-devel_package() {
 	short_desc+=" - development files"

From 39685f7ebba738a8470ad18362cc47bc9ab6695d Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 17:53:48 +1100
Subject: [PATCH 7/8] gnuradio-rds: update to 3.10.

Also clean up makedepends.
---
 srcpkgs/gnuradio-rds/template | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/srcpkgs/gnuradio-rds/template b/srcpkgs/gnuradio-rds/template
index 4da5c54e812e..35d19fb82b11 100644
--- a/srcpkgs/gnuradio-rds/template
+++ b/srcpkgs/gnuradio-rds/template
@@ -1,18 +1,22 @@
 # Template file for 'gnuradio-rds'
 pkgname=gnuradio-rds
-version=3.8.0
-revision=3
+version=3.10
+revision=1
 wrksrc="gr-rds-${version}"
 build_style=cmake
-hostmakedepends="pkg-config gnuradio swig"
-makedepends="gnuradio-devel python3-devel boost-devel log4cpp-devel
- gmpxx-devel mpir-devel volk-devel"
+configure_args="-Dpybind11_DIR=/${py3_sitelib}/pybind11/share/cmake/pybind11"
+hostmakedepends="pkg-config gnuradio python3 python3-pybind11"
+makedepends="gnuradio-devel"
 short_desc="GNUradio FM RDS/TMC Transceiver"
 maintainer="Remi Pommarel <repk@triplefau.lt>"
 license="GPL-2.0-or-later"
-homepage="https://github.com/bastibl/gr-rds/"
+homepage="https://github.com/bastibl/gr-rds"
 distfiles="https://github.com/bastibl/gr-rds/archive/v${version}.tar.gz"
-checksum=39cada996eca9f362fb07548c5f4f7b95c9d138c3859aa7a673a58cc105f563a
+checksum=083a9f479d83ac2f6273cdf3b3cf1beca47dfdce2d28264ce979f23c119607f7
+
+if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ]; then
+	nocross="pybind11: Python config failure: Python is 64-bit, chosen compiler is 32-bit"
+fi
 
 gnuradio-rds-devel_package() {
 	depends="${makedepends} ${sourcepkg}-${version}_${revision}"

From 0578e6d35990da439cec99bb58df60a58823333b Mon Sep 17 00:00:00 2001
From: Evgeny Ermakov <evgeny.v.ermakov@gmail.com>
Date: Sat, 15 Jan 2022 20:10:40 +1100
Subject: [PATCH 8/8] gqrx: update to 2.15.2.

Also clean up makedepends.
---
 srcpkgs/gqrx/template | 21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gqrx/template b/srcpkgs/gqrx/template
index 9cab32fcf3ee..52f5e08bebd9 100644
--- a/srcpkgs/gqrx/template
+++ b/srcpkgs/gqrx/template
@@ -1,23 +1,20 @@
 # Template file for 'gqrx'
 pkgname=gqrx
-version=2.14.4
-revision=3
+version=2.15.2
+revision=1
 build_style=cmake
 configure_args="$(vopt_if gr_audio -DLINUX_AUDIO_BACKEND=Gr-audio)
  $(vopt_if portaudio -DLINUX_AUDIO_BACKEND=Portaudio)"
-hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3
- gnuradio"
-makedepends="boost-devel gnuradio-devel gnuradio-osmosdr-devel
- pulseaudio-devel qt5-svg-devel log4cpp-devel mpir-devel volk-devel
- fftw-devel python3-devel alsa-lib-devel jack-devel gmpxx-devel
- qt5-tools $(vopt_if portaudio portaudio-devel)"
+hostmakedepends="pkg-config qt5-qmake qt5-host-tools python3 gnuradio"
+makedepends="gnuradio-devel gnuradio-osmosdr-devel pulseaudio-devel qt5-svg-devel
+ alsa-lib-devel jack-devel qt5-tools $(vopt_if portaudio portaudio-devel)"
 short_desc="Software defined radio receiver powered by GNU Radio and Qt"
 maintainer="bra1nwave <bra1nwave@protonmail.com>"
 license="GPL-3.0-or-later"
-homepage="http://gqrx.dk/"
-changelog="https://raw.githubusercontent.com/csete/gqrx/master/resources/news.txt"
-distfiles="https://github.com/csete/gqrx/archive/v${version}.tar.gz"
-checksum=aec35c77ebde9c71a5f973c509eec3d6aa2f18a6e052b180fcd9029d88273e5b
+homepage="https://gqrx.dk"
+changelog="https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/news.txt"
+distfiles="https://github.com/gqrx-sdr/gqrx/archive/v${version}.tar.gz"
+checksum=c4fc85e6aec257e56e0c2963c5c2f7aa210a8b6df73f7cb4e398ec2f1c9e1d33
 
 build_options="gr_audio portaudio"
 vopt_conflict gr_audio portaudio

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (15 preceding siblings ...)
  2022-01-18 10:35 ` [PR PATCH] [Updated] " unspecd
@ 2022-01-18 10:35 ` unspecd
  2022-01-18 10:40 ` unspecd
                   ` (47 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-18 10:35 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 165 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1015280515

Comment:
Added python3-pygccxml.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (16 preceding siblings ...)
  2022-01-18 10:35 ` unspecd
@ 2022-01-18 10:40 ` unspecd
  2022-01-18 11:04 ` [PR PATCH] [Updated] " unspecd
                   ` (46 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-18 10:40 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 171 bytes --]

New comment by unspecd on void-packages repository

https://github.com/void-linux/void-packages/pull/35049#issuecomment-1015284201

Comment:
Updated gnuradio-rds to 3.10.

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: [PR PATCH] [Updated] gnuradio: update to 3.10.0.0.
  2022-01-14 16:25 [PR PATCH] gnuradio: update to 3.9.5.0 unspecd
                   ` (17 preceding siblings ...)
  2022-01-18 10:40 ` unspecd
@ 2022-01-18 11:04 ` unspecd
  2022-01-18 11:06 ` unspecd
                   ` (45 subsequent siblings)
  64 siblings, 0 replies; 66+ messages in thread
From: unspecd @ 2022-01-18 11:04 UTC (permalink /