From d4f6b86a9bdea09c2c158b9982559a727f8c6a0b Mon Sep 17 00:00:00 2001
From: Tom Rondeau <trondeau@vt.edu>
Date: Sun, 17 Mar 2013 12:24:38 -0400
Subject: blocks: converting references to vector source/sink, null
 source/sink, nop, copy, head, skiphead, vector_map, and annotator blocks to
 use gr-blocks.

---
 gr-blocks/python/qa_cpp_py_binding.py | 174 ++++++++++++++++++++++++++++++++++
 1 file changed, 174 insertions(+)
 create mode 100755 gr-blocks/python/qa_cpp_py_binding.py

(limited to 'gr-blocks/python/qa_cpp_py_binding.py')

diff --git a/gr-blocks/python/qa_cpp_py_binding.py b/gr-blocks/python/qa_cpp_py_binding.py
new file mode 100755
index 0000000000..950f21b9f7
--- /dev/null
+++ b/gr-blocks/python/qa_cpp_py_binding.py
@@ -0,0 +1,174 @@
+#!/usr/bin/env python
+#
+# Copyright 2012,2013 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
+
+# 
+# This program tests mixed python and c++ ctrlport exports in a single app
+#
+
+import Ice
+import sys, time, random, numpy
+from gnuradio import gr, gr_unittest
+
+from gnuradio.ctrlport import GNURadio
+from gnuradio import ctrlport
+import os
+
+import blocks_swig as blocks
+
+def get1():
+    return "success"
+
+def get2():
+    return "failure"
+
+class inc_class:
+    def __init__(self):
+        self.val = 1
+    def pp(self):
+        self.val = self.val+1
+        return self.val
+
+get3 = inc_class()
+
+def get4():
+    random.seed(0)
+    rv = random.random()
+    return rv
+
+def get5():
+    numpy.random.seed(0)
+    samp_t = numpy.random.randn(24)+1j*numpy.random.randn(24);
+    samp_f = numpy.fft.fft(samp_t);
+    log_pow_f = 20*numpy.log10(numpy.abs(samp_f))
+    rv = list(log_pow_f)
+    return rv;
+
+def get6():
+    numpy.random.seed(0)
+    samp_t = numpy.random.randn(1024)+1j*numpy.random.randn(1024);
+    rv = list(samp_t)
+    return rv;
+
+class test_cpp_py_binding(gr_unittest.TestCase):
+
+    def setUp(self):
+        self.tb = gr.top_block()
+        os.environ['GR_CONF_CONTROLPORT_ON'] = 'True'
+
+    def tearDown(self):
+        self.tb = None
+
+    def test_001(self):
+        v1 = gr.RPC_get_string("pyland", "v1", "unit_1_string",
+                               "Python Exported String", "", "", "",
+                               gr.DISPNULL)
+        v1.activate(get1)
+
+        v2 = gr.RPC_get_string("pyland", "v2", "unit_2_string",
+                               "Python Exported String", "", "", "",
+                               gr.DISPNULL)
+        v2.activate(get2)
+
+        v3 = gr.RPC_get_int("pyland", "v3", "unit_3_int",
+                            "Python Exported Int", 0, 100, 1,
+                            gr.DISPNULL)
+        v3.activate(get3.pp)
+
+        v4 = gr.RPC_get_double("pyland", "time", "unit_4_time_double",
+                               "Python Exported Double", 0, 1000, 1,
+                               gr.DISPNULL)
+        v4.activate(get4)
+
+        v5 = gr.RPC_get_vector_float("pyland", "fvec", "unit_5_float_vector",
+                                     "Python Exported Float Vector", [], [], [],
+                                     gr.DISPTIME | gr.DISPOPTCPLX)
+        v5.activate(get5)
+
+        v6 = gr.RPC_get_vector_gr_complex("pyland", "cvec", "unit_6_gr_complex_vector",
+                                          "Python Exported Complex Vector", [], [], [],
+                                          gr.DISPXY | gr.DISPOPTSCATTER)
+        v6.activate(get6)
+
+        # print some variables locally
+        val = get1()
+        rval = v1.get()
+        self.assertEqual(val, rval)
+
+        val = get2()
+        rval = v2.get()
+        self.assertEqual(val, rval)
+
+        val = get3.pp()
+        rval = v3.get()
+        self.assertEqual(val+1, rval)
+
+        val = get4()
+        rval = v4.get()
+        self.assertEqual(val, rval)
+
+        val = get5()
+        rval = v5.get()
+        self.assertComplexTuplesAlmostEqual(val, rval, 5)
+        
+        val = get6()
+        rval = v6.get()
+        self.assertComplexTuplesAlmostEqual(val, rval, 5)
+
+    def test_002(self):
+        data = range(1,9)
+
+        self.src = blocks.vector_source_c(data)
+        self.p1 = gr.ctrlport_probe_c("aaa","C++ exported variable")
+        self.p2 = gr.ctrlport_probe_c("bbb","C++ exported variable")
+        probe_name = self.p2.alias()
+
+        self.tb.connect(self.src, self.p1)
+        self.tb.connect(self.src, self.p2)
+        self.tb.start()
+
+        # Probes return complex values as list of floats with re, im
+        # Imaginary parts of this data set are 0.
+        expected_result = [1, 0, 2, 0, 3, 0, 4, 0,
+                           5, 0, 6, 0, 7, 0, 8, 0]
+
+        # Make sure we have time for flowgraph to run
+        time.sleep(0.1)
+
+        # Get available endpoint
+        ep = gr.rpcmanager_get().endpoints()[0]
+
+        # Initialize a simple Ice client from endpoint
+        ic = Ice.initialize(sys.argv)
+        base = ic.stringToProxy(ep)
+        radio = GNURadio.ControlPortPrx.checkedCast(base)
+
+        # Get all exported knobs
+        ret = radio.get([probe_name + "::bbb"])
+        for name in ret.keys():
+            result = ret[name].value
+            self.assertEqual(result, expected_result)
+
+        self.tb.stop()
+
+if __name__ == '__main__':
+    gr_unittest.run(test_cpp_py_binding, "test_cpp_py_binding.xml")
+
-- 
cgit v1.2.3


From 701d844c1624ac51e3da4f0ef0f5bb346358cab8 Mon Sep 17 00:00:00 2001
From: Tom Rondeau <trondeau@vt.edu>
Date: Sun, 17 Mar 2013 17:03:18 -0400
Subject: blocks: moved ctrlport_probes to gr-blocks. Removed from
 gnuradio-core.

---
 gnuradio-core/src/examples/CMakeLists.txt          |   5 -
 gnuradio-core/src/examples/ctrlport/CMakeLists.txt |  25 -
 .../src/examples/ctrlport/comparing_resamplers.grc | 390 ----------
 .../src/examples/ctrlport/pfb_sync_test-qt.grc     | 850 ---------------------
 .../src/examples/ctrlport/pfb_sync_test.grc        | 668 ----------------
 gnuradio-core/src/lib/general/CMakeLists.txt       |   9 -
 gnuradio-core/src/lib/general/general.i            |  12 -
 .../src/lib/general/gr_ctrlport_probe2_c.cc        | 156 ----
 .../src/lib/general/gr_ctrlport_probe2_c.h         |  72 --
 .../src/lib/general/gr_ctrlport_probe2_c.i         |  36 -
 .../src/lib/general/gr_ctrlport_probe_c.cc         |  96 ---
 .../src/lib/general/gr_ctrlport_probe_c.h          |  65 --
 .../src/lib/general/gr_ctrlport_probe_c.i          |  34 -
 gr-blocks/examples/CMakeLists.txt                  |   4 +
 gr-blocks/examples/ctrlport/CMakeLists.txt         |  25 +
 .../examples/ctrlport/comparing_resamplers.grc     | 390 ++++++++++
 gr-blocks/examples/ctrlport/pfb_sync_test-qt.grc   | 831 ++++++++++++++++++++
 gr-blocks/examples/ctrlport/pfb_sync_test.grc      | 668 ++++++++++++++++
 gr-blocks/grc/CMakeLists.txt                       |  12 +-
 gr-blocks/grc/blocks_ctrlport_probe2_c.xml         |  66 ++
 gr-blocks/grc/blocks_ctrlport_probe_c.xml          |  56 ++
 gr-blocks/grc/blocks_ctrlport_viewer.xml           |  50 ++
 gr-blocks/include/blocks/CMakeLists.txt            |   9 +
 gr-blocks/include/blocks/ctrlport_probe2_c.h       |  64 ++
 gr-blocks/include/blocks/ctrlport_probe_c.h        |  62 ++
 gr-blocks/lib/CMakeLists.txt                       |   7 +
 gr-blocks/lib/ctrlport_probe2_c_impl.cc            | 163 ++++
 gr-blocks/lib/ctrlport_probe2_c_impl.h             |  67 ++
 gr-blocks/lib/ctrlport_probe_c_impl.cc             | 101 +++
 gr-blocks/lib/ctrlport_probe_c_impl.h              |  60 ++
 gr-blocks/python/qa_cpp_py_binding.py              |   4 +-
 gr-blocks/swig/CMakeLists.txt                      |   4 +
 gr-blocks/swig/blocks_swig.i                       |  16 +
 grc/blocks/CMakeLists.txt                          |   9 -
 grc/blocks/gr_ctrlport_probe2_c.xml                |  66 --
 grc/blocks/gr_ctrlport_probe_c.xml                 |  56 --
 grc/blocks/gr_ctrlport_viewer.xml                  |  50 --
 grc/blocks/gr_feedforward_agc_cc.xml               |  32 -
 38 files changed, 2656 insertions(+), 2634 deletions(-)
 delete mode 100644 gnuradio-core/src/examples/ctrlport/CMakeLists.txt
 delete mode 100644 gnuradio-core/src/examples/ctrlport/comparing_resamplers.grc
 delete mode 100644 gnuradio-core/src/examples/ctrlport/pfb_sync_test-qt.grc
 delete mode 100644 gnuradio-core/src/examples/ctrlport/pfb_sync_test.grc
 delete mode 100644 gnuradio-core/src/lib/general/gr_ctrlport_probe2_c.cc
 delete mode 100644 gnuradio-core/src/lib/general/gr_ctrlport_probe2_c.h
 delete mode 100644 gnuradio-core/src/lib/general/gr_ctrlport_probe2_c.i
 delete mode 100644 gnuradio-core/src/lib/general/gr_ctrlport_probe_c.cc
 delete mode 100644 gnuradio-core/src/lib/general/gr_ctrlport_probe_c.h
 delete mode 100644 gnuradio-core/src/lib/general/gr_ctrlport_probe_c.i
 create mode 100644 gr-blocks/examples/ctrlport/CMakeLists.txt
 create mode 100644 gr-blocks/examples/ctrlport/comparing_resamplers.grc
 create mode 100644 gr-blocks/examples/ctrlport/pfb_sync_test-qt.grc
 create mode 100644 gr-blocks/examples/ctrlport/pfb_sync_test.grc
 create mode 100644 gr-blocks/grc/blocks_ctrlport_probe2_c.xml
 create mode 100644 gr-blocks/grc/blocks_ctrlport_probe_c.xml
 create mode 100644 gr-blocks/grc/blocks_ctrlport_viewer.xml
 create mode 100644 gr-blocks/include/blocks/ctrlport_probe2_c.h
 create mode 100644 gr-blocks/include/blocks/ctrlport_probe_c.h
 create mode 100644 gr-blocks/lib/ctrlport_probe2_c_impl.cc
 create mode 100644 gr-blocks/lib/ctrlport_probe2_c_impl.h
 create mode 100644 gr-blocks/lib/ctrlport_probe_c_impl.cc
 create mode 100644 gr-blocks/lib/ctrlport_probe_c_impl.h
 delete mode 100644 grc/blocks/gr_ctrlport_probe2_c.xml
 delete mode 100644 grc/blocks/gr_ctrlport_probe_c.xml
 delete mode 100644 grc/blocks/gr_ctrlport_viewer.xml
 delete mode 100644 grc/blocks/gr_feedforward_agc_cc.xml

(limited to 'gr-blocks/python/qa_cpp_py_binding.py')

diff --git a/gnuradio-core/src/examples/CMakeLists.txt b/gnuradio-core/src/examples/CMakeLists.txt
index 532c658083..b90a5542df 100644
--- a/gnuradio-core/src/examples/CMakeLists.txt
+++ b/gnuradio-core/src/examples/CMakeLists.txt
@@ -20,8 +20,3 @@
 add_subdirectory(mp-sched)
 add_subdirectory(network)
 add_subdirectory(volk_benchmark)
-
-if(ENABLE_GR_CTRLPORT)
-add_subdirectory(ctrlport)
-endif(ENABLE_GR_CTRLPORT)
-  
diff --git a/gnuradio-core/src/examples/ctrlport/CMakeLists.txt b/gnuradio-core/src/examples/ctrlport/CMakeLists.txt
deleted file mode 100644
index 47ef4c225e..0000000000
--- a/gnuradio-core/src/examples/ctrlport/CMakeLists.txt
+++ /dev/null
@@ -1,25 +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.
-
-include(GrPython)
-
-GR_PYTHON_INSTALL(PROGRAMS
-    DESTINATION ${GR_PKG_CTRLPORT_EXAMPLES_DIR}
-    COMPONENT "core_python"
-)
diff --git a/gnuradio-core/src/examples/ctrlport/comparing_resamplers.grc b/gnuradio-core/src/examples/ctrlport/comparing_resamplers.grc
deleted file mode 100644
index 4ac4af247f..0000000000
--- a/gnuradio-core/src/examples/ctrlport/comparing_resamplers.grc
+++ /dev/null
@@ -1,390 +0,0 @@
-<?xml version='1.0' encoding='ASCII'?>
-<flow_graph>
-  <timestamp>Fri Mar 15 11:01:13 2013</timestamp>
-  <block>
-    <key>blocks_throttle</key>
-    <param>
-      <key>id</key>
-      <value>blocks_throttle_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>complex</value>
-    </param>
-    <param>
-      <key>samples_per_second</key>
-      <value>samp_rate</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(191, 125)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>gr_ctrlport_probe2_c</key>
-    <param>
-      <key>id</key>
-      <value>probe_arc_resamp</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>name</key>
-      <value>arb_resampler</value>
-    </param>
-    <param>
-      <key>desc</key>
-      <value>PFB Arbitrary Resampler</value>
-    </param>
-    <param>
-      <key>len</key>
-      <value>1024</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(9, 296)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>180</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>resamp_rate</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>1.25</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(272, 9)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>pfb_arb_resampler_xxx</key>
-    <param>
-      <key>id</key>
-      <value>pfb_arb_resampler_xxx_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>ccf</value>
-    </param>
-    <param>
-      <key>rrate</key>
-      <value>resamp_rate</value>
-    </param>
-    <param>
-      <key>taps</key>
-      <value></value>
-    </param>
-    <param>
-      <key>nfilts</key>
-      <value>32</value>
-    </param>
-    <param>
-      <key>atten</key>
-      <value>60</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(305, 280)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>180</value>
-    </param>
-  </block>
-  <block>
-    <key>gr_ctrlport_probe2_c</key>
-    <param>
-      <key>id</key>
-      <value>probe_frac_interp</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>name</key>
-      <value>fractional_interp</value>
-    </param>
-    <param>
-      <key>desc</key>
-      <value>Fractional Interpolator</value>
-    </param>
-    <param>
-      <key>len</key>
-      <value>1024</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(10, 204)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>180</value>
-    </param>
-  </block>
-  <block>
-    <key>fractional_interpolator_xx</key>
-    <param>
-      <key>id</key>
-      <value>fractional_interpolator_xx_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>complex</value>
-    </param>
-    <param>
-      <key>phase_shift</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>interp_ratio</key>
-      <value>1.0/resamp_rate</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(354, 212)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>180</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>samp_rate</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>30e6</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(181, 10)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>analog_sig_source_x</key>
-    <param>
-      <key>id</key>
-      <value>analog_sig_source_x_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>complex</value>
-    </param>
-    <param>
-      <key>samp_rate</key>
-      <value>samp_rate</value>
-    </param>
-    <param>
-      <key>waveform</key>
-      <value>analog.GR_COS_WAVE</value>
-    </param>
-    <param>
-      <key>freq</key>
-      <value>samp_rate/10</value>
-    </param>
-    <param>
-      <key>amp</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>offset</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(11, 93)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>channels_channel_model</key>
-    <param>
-      <key>id</key>
-      <value>channels_channel_model_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>noise_voltage</key>
-      <value>0.1</value>
-    </param>
-    <param>
-      <key>freq_offset</key>
-      <value>0.0</value>
-    </param>
-    <param>
-      <key>epsilon</key>
-      <value>1.0</value>
-    </param>
-    <param>
-      <key>taps</key>
-      <value>[1,]</value>
-    </param>
-    <param>
-      <key>seed</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(382, 93)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>options</key>
-    <param>
-      <key>id</key>
-      <value>comparing_resamplers</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>title</key>
-      <value></value>
-    </param>
-    <param>
-      <key>author</key>
-      <value></value>
-    </param>
-    <param>
-      <key>description</key>
-      <value></value>
-    </param>
-    <param>
-      <key>window_size</key>
-      <value>570,390</value>
-    </param>
-    <param>
-      <key>generate_options</key>
-      <value>no_gui</value>
-    </param>
-    <param>
-      <key>category</key>
-      <value>Custom</value>
-    </param>
-    <param>
-      <key>run_options</key>
-      <value>prompt</value>
-    </param>
-    <param>
-      <key>run</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>max_nouts</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>realtime_scheduling</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(10, 10)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <connection>
-    <source_block_id>analog_sig_source_x_0</source_block_id>
-    <sink_block_id>blocks_throttle_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_throttle_0</source_block_id>
-    <sink_block_id>channels_channel_model_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>channels_channel_model_0</source_block_id>
-    <sink_block_id>pfb_arb_resampler_xxx_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>channels_channel_model_0</source_block_id>
-    <sink_block_id>fractional_interpolator_xx_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>pfb_arb_resampler_xxx_0</source_block_id>
-    <sink_block_id>probe_arc_resamp</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>fractional_interpolator_xx_0</source_block_id>
-    <sink_block_id>probe_frac_interp</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-</flow_graph>
diff --git a/gnuradio-core/src/examples/ctrlport/pfb_sync_test-qt.grc b/gnuradio-core/src/examples/ctrlport/pfb_sync_test-qt.grc
deleted file mode 100644
index a24adfd9e7..0000000000
--- a/gnuradio-core/src/examples/ctrlport/pfb_sync_test-qt.grc
+++ /dev/null
@@ -1,850 +0,0 @@
-<?xml version='1.0' encoding='ASCII'?>
-<flow_graph>
-  <timestamp>Fri Mar 15 17:32:55 2013</timestamp>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>sps</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(105, 126)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>samp_rate</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>300000</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(14, 124)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>import</key>
-    <param>
-      <key>id</key>
-      <value>import_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>import</key>
-      <value>import random, math, cmath</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(14, 77)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>ctrlport_monitor</key>
-    <param>
-      <key>id</key>
-      <value>ctrlport_monitor_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>en</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(175, 10)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_vector_source_x</key>
-    <param>
-      <key>id</key>
-      <value>blocks_vector_source_x_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>byte</value>
-    </param>
-    <param>
-      <key>vector</key>
-      <value>0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50</value>
-    </param>
-    <param>
-      <key>repeat</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(190, 71)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_packed_to_unpacked_xx</key>
-    <param>
-      <key>id</key>
-      <value>blocks_packed_to_unpacked_xx_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>byte</value>
-    </param>
-    <param>
-      <key>bits_per_chunk</key>
-      <value>8</value>
-    </param>
-    <param>
-      <key>endianness</key>
-      <value>gr.GR_MSB_FIRST</value>
-    </param>
-    <param>
-      <key>num_ports</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(419, 10)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_throttle</key>
-    <param>
-      <key>id</key>
-      <value>blocks_throttle_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>byte</value>
-    </param>
-    <param>
-      <key>samples_per_second</key>
-      <value>samp_rate</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(436, 97)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>digital_psk_mod</key>
-    <param>
-      <key>id</key>
-      <value>digital_psk_mod_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>constellation_points</key>
-      <value>4</value>
-    </param>
-    <param>
-      <key>mod_code</key>
-      <value>"gray"</value>
-    </param>
-    <param>
-      <key>differential</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>samples_per_symbol</key>
-      <value>sps</value>
-    </param>
-    <param>
-      <key>excess_bw</key>
-      <value>0.35</value>
-    </param>
-    <param>
-      <key>verbose</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>log</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(627, 65)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>digital_pfb_clock_sync_xxx</key>
-    <param>
-      <key>id</key>
-      <value>digital_pfb_clock_sync_xxx_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>ccf</value>
-    </param>
-    <param>
-      <key>sps</key>
-      <value>sps</value>
-    </param>
-    <param>
-      <key>loop_bw</key>
-      <value>2*3.14/100.0</value>
-    </param>
-    <param>
-      <key>taps</key>
-      <value>firdes.root_raised_cosine(nfilts, nfilts,1.0/sps, 0.35, int(22*sps*nfilts))</value>
-    </param>
-    <param>
-      <key>filter_size</key>
-      <value>nfilts</value>
-    </param>
-    <param>
-      <key>init_phase</key>
-      <value>nfilts/2</value>
-    </param>
-    <param>
-      <key>max_dev</key>
-      <value>1.5</value>
-    </param>
-    <param>
-      <key>osps</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(339, 195)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>nfilts</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>32</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(74, 390)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>amps</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>[1]</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(7, 390)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>graymap</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>[[3,1,0,2]]</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(7, 326)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>qtgui_const_sink_x</key>
-    <param>
-      <key>id</key>
-      <value>qtgui_const_sink_x_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>complex</value>
-    </param>
-    <param>
-      <key>name</key>
-      <value>QT GUI Plot</value>
-    </param>
-    <param>
-      <key>size</key>
-      <value>1024</value>
-    </param>
-    <param>
-      <key>ymin</key>
-      <value>-2</value>
-    </param>
-    <param>
-      <key>ymax</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>xmin</key>
-      <value>-2</value>
-    </param>
-    <param>
-      <key>xmax</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>nconnections</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>update_time</key>
-      <value>0.10</value>
-    </param>
-    <param>
-      <key>gui_hint</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(752, 196)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>channels_channel_model</key>
-    <param>
-      <key>id</key>
-      <value>channels_channel_model_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>noise_voltage</key>
-      <value>noise</value>
-    </param>
-    <param>
-      <key>freq_offset</key>
-      <value>0.0</value>
-    </param>
-    <param>
-      <key>epsilon</key>
-      <value>1.0</value>
-    </param>
-    <param>
-      <key>taps</key>
-      <value>cmath.exp(1j*phase)</value>
-    </param>
-    <param>
-      <key>seed</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(68, 211)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>gr_ctrlport_probe2_c</key>
-    <param>
-      <key>id</key>
-      <value>received_probe2</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>name</key>
-      <value>received</value>
-    </param>
-    <param>
-      <key>desc</key>
-      <value>Constellation Points</value>
-    </param>
-    <param>
-      <key>len</key>
-      <value>1024</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(195, 519)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable_qtgui_range</key>
-    <param>
-      <key>id</key>
-      <value>phase</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>label</key>
-      <value>Phase</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>0.5</value>
-    </param>
-    <param>
-      <key>start</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>stop</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>step</key>
-      <value>0.01</value>
-    </param>
-    <param>
-      <key>widget</key>
-      <value>counter_slider</value>
-    </param>
-    <param>
-      <key>orient</key>
-      <value>Qt.Horizontal</value>
-    </param>
-    <param>
-      <key>min_len</key>
-      <value>200</value>
-    </param>
-    <param>
-      <key>gui_hint</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(266, 344)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>gr_ctrlport_probe2_c</key>
-    <param>
-      <key>id</key>
-      <value>time_probe2</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>name</key>
-      <value>time locked</value>
-    </param>
-    <param>
-      <key>desc</key>
-      <value>Constellation Points</value>
-    </param>
-    <param>
-      <key>len</key>
-      <value>1024</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(447, 440)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable_qtgui_range</key>
-    <param>
-      <key>id</key>
-      <value>noise</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>label</key>
-      <value>Noise</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>0.050</value>
-    </param>
-    <param>
-      <key>start</key>
-      <value>0.0001</value>
-    </param>
-    <param>
-      <key>stop</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>step</key>
-      <value>0.01</value>
-    </param>
-    <param>
-      <key>widget</key>
-      <value>counter_slider</value>
-    </param>
-    <param>
-      <key>orient</key>
-      <value>Qt.Horizontal</value>
-    </param>
-    <param>
-      <key>min_len</key>
-      <value>200</value>
-    </param>
-    <param>
-      <key>gui_hint</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(7, 455)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>digital_costas_loop_cc</key>
-    <param>
-      <key>id</key>
-      <value>digital_costas_loop_cc_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>w</key>
-      <value>6.28/100.0</value>
-    </param>
-    <param>
-      <key>order</key>
-      <value>4</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(610, 279)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_null_sink</key>
-    <param>
-      <key>id</key>
-      <value>blocks_null_sink_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>complex</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(859, 279)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>gr_ctrlport_probe2_c</key>
-    <param>
-      <key>id</key>
-      <value>phase_probe2</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>name</key>
-      <value>phase locked</value>
-    </param>
-    <param>
-      <key>desc</key>
-      <value>Constellation Points</value>
-    </param>
-    <param>
-      <key>len</key>
-      <value>1024</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(681, 379)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>options</key>
-    <param>
-      <key>id</key>
-      <value>pfb_sync_test_qt</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>title</key>
-      <value></value>
-    </param>
-    <param>
-      <key>author</key>
-      <value></value>
-    </param>
-    <param>
-      <key>description</key>
-      <value></value>
-    </param>
-    <param>
-      <key>window_size</key>
-      <value>1280,1024</value>
-    </param>
-    <param>
-      <key>generate_options</key>
-      <value>qt_gui</value>
-    </param>
-    <param>
-      <key>category</key>
-      <value>Custom</value>
-    </param>
-    <param>
-      <key>run_options</key>
-      <value>prompt</value>
-    </param>
-    <param>
-      <key>run</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>max_nouts</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>realtime_scheduling</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(10, 10)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <connection>
-    <source_block_id>blocks_throttle_0</source_block_id>
-    <sink_block_id>digital_psk_mod_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>digital_pfb_clock_sync_xxx_0</source_block_id>
-    <sink_block_id>qtgui_const_sink_x_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>digital_costas_loop_cc_0</source_block_id>
-    <sink_block_id>qtgui_const_sink_x_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>1</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>digital_costas_loop_cc_0</source_block_id>
-    <sink_block_id>blocks_null_sink_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>channels_channel_model_0</source_block_id>
-    <sink_block_id>digital_pfb_clock_sync_xxx_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>digital_psk_mod_0</source_block_id>
-    <sink_block_id>channels_channel_model_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>digital_costas_loop_cc_0</source_block_id>
-    <sink_block_id>phase_probe2</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_packed_to_unpacked_xx_0</source_block_id>
-    <sink_block_id>blocks_throttle_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_packed_to_unpacked_xx_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>channels_channel_model_0</source_block_id>
-    <sink_block_id>received_probe2</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>digital_pfb_clock_sync_xxx_0</source_block_id>
-    <sink_block_id>time_probe2</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>digital_pfb_clock_sync_xxx_0</source_block_id>
-    <sink_block_id>digital_costas_loop_cc_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-</flow_graph>
diff --git a/gnuradio-core/src/examples/ctrlport/pfb_sync_test.grc b/gnuradio-core/src/examples/ctrlport/pfb_sync_test.grc
deleted file mode 100644
index da63b4f5b3..0000000000
--- a/gnuradio-core/src/examples/ctrlport/pfb_sync_test.grc
+++ /dev/null
@@ -1,668 +0,0 @@
-<?xml version='1.0' encoding='ASCII'?>
-<flow_graph>
-  <timestamp>Thu Feb 21 19:08:39 2013</timestamp>
-  <block>
-    <key>options</key>
-    <param>
-      <key>id</key>
-      <value>pfb_sync_test</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>title</key>
-      <value></value>
-    </param>
-    <param>
-      <key>author</key>
-      <value></value>
-    </param>
-    <param>
-      <key>description</key>
-      <value></value>
-    </param>
-    <param>
-      <key>window_size</key>
-      <value>1280, 1024</value>
-    </param>
-    <param>
-      <key>generate_options</key>
-      <value>wx_gui</value>
-    </param>
-    <param>
-      <key>category</key>
-      <value>Custom</value>
-    </param>
-    <param>
-      <key>run_options</key>
-      <value>prompt</value>
-    </param>
-    <param>
-      <key>run</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>max_nouts</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>realtime_scheduling</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(10, 10)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>import</key>
-    <param>
-      <key>id</key>
-      <value>import_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>import</key>
-      <value>import random, math, cmath</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(14, 77)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>samp_rate</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>300000</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(14, 124)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>graymap</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>[[3,1,0,2]]</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(32, 387)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>amps</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>[1]</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(32, 451)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>nfilts</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>32</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(99, 451)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>digital_costas_loop_cc</key>
-    <param>
-      <key>id</key>
-      <value>digital_costas_loop_cc_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>w</key>
-      <value>6.28/100.0</value>
-    </param>
-    <param>
-      <key>order</key>
-      <value>4</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(626, 223)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>sps</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(105, 126)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_null_sink</key>
-    <param>
-      <key>id</key>
-      <value>blocks_null_sink_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>complex</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(964, 200)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable_slider</key>
-    <param>
-      <key>id</key>
-      <value>noise</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>label</key>
-      <value></value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>0.05</value>
-    </param>
-    <param>
-      <key>min</key>
-      <value>0.00000001</value>
-    </param>
-    <param>
-      <key>max</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>num_steps</key>
-      <value>100</value>
-    </param>
-    <param>
-      <key>style</key>
-      <value>wx.SL_HORIZONTAL</value>
-    </param>
-    <param>
-      <key>converver</key>
-      <value>float_converter</value>
-    </param>
-    <param>
-      <key>grid_pos</key>
-      <value></value>
-    </param>
-    <param>
-      <key>notebook</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(281, 406)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable_slider</key>
-    <param>
-      <key>id</key>
-      <value>phase</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>label</key>
-      <value></value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>min</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>max</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>num_steps</key>
-      <value>100</value>
-    </param>
-    <param>
-      <key>style</key>
-      <value>wx.SL_HORIZONTAL</value>
-    </param>
-    <param>
-      <key>converver</key>
-      <value>float_converter</value>
-    </param>
-    <param>
-      <key>grid_pos</key>
-      <value></value>
-    </param>
-    <param>
-      <key>notebook</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(167, 405)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>digital_pfb_clock_sync_xxx</key>
-    <param>
-      <key>id</key>
-      <value>digital_pfb_clock_sync_xxx_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>ccf</value>
-    </param>
-    <param>
-      <key>sps</key>
-      <value>sps</value>
-    </param>
-    <param>
-      <key>loop_bw</key>
-      <value>2*3.14/100.0</value>
-    </param>
-    <param>
-      <key>taps</key>
-      <value>firdes.root_raised_cosine(nfilts, nfilts,1.0/sps, 0.35, int(22*sps*nfilts))</value>
-    </param>
-    <param>
-      <key>filter_size</key>
-      <value>nfilts</value>
-    </param>
-    <param>
-      <key>init_phase</key>
-      <value>nfilts/2</value>
-    </param>
-    <param>
-      <key>max_dev</key>
-      <value>1.5</value>
-    </param>
-    <param>
-      <key>osps</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(322, 231)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>digital_psk_mod</key>
-    <param>
-      <key>id</key>
-      <value>digital_psk_mod_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>constellation_points</key>
-      <value>4</value>
-    </param>
-    <param>
-      <key>mod_code</key>
-      <value>"gray"</value>
-    </param>
-    <param>
-      <key>differential</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>samples_per_symbol</key>
-      <value>sps</value>
-    </param>
-    <param>
-      <key>excess_bw</key>
-      <value>0.35</value>
-    </param>
-    <param>
-      <key>verbose</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>log</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(846, 32)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>channels_channel_model</key>
-    <param>
-      <key>id</key>
-      <value>channels_channel_model_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>noise_voltage</key>
-      <value>noise</value>
-    </param>
-    <param>
-      <key>freq_offset</key>
-      <value>0.0</value>
-    </param>
-    <param>
-      <key>epsilon</key>
-      <value>1.0</value>
-    </param>
-    <param>
-      <key>taps</key>
-      <value>cmath.exp(1j*phase)</value>
-    </param>
-    <param>
-      <key>seed</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(73, 247)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>ctrlport_monitor</key>
-    <param>
-      <key>id</key>
-      <value>ctrlport_monitor_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>en</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(228, 5)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_file_source</key>
-    <param>
-      <key>id</key>
-      <value>blocks_file_source_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>file</key>
-      <value>/dev/urandom</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>byte</value>
-    </param>
-    <param>
-      <key>repeat</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(229, 56)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_throttle</key>
-    <param>
-      <key>id</key>
-      <value>blocks_throttle_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>byte</value>
-    </param>
-    <param>
-      <key>samples_per_second</key>
-      <value>samp_rate</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(623, 64)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_packed_to_unpacked_xx</key>
-    <param>
-      <key>id</key>
-      <value>blocks_packed_to_unpacked_xx_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>byte</value>
-    </param>
-    <param>
-      <key>bits_per_chunk</key>
-      <value>8</value>
-    </param>
-    <param>
-      <key>endianness</key>
-      <value>gr.GR_MSB_FIRST</value>
-    </param>
-    <param>
-      <key>num_ports</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(415, 56)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <connection>
-    <source_block_id>blocks_throttle_0</source_block_id>
-    <sink_block_id>digital_psk_mod_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>digital_pfb_clock_sync_xxx_0</source_block_id>
-    <sink_block_id>digital_costas_loop_cc_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>digital_costas_loop_cc_0</source_block_id>
-    <sink_block_id>blocks_null_sink_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>channels_channel_model_0</source_block_id>
-    <sink_block_id>digital_pfb_clock_sync_xxx_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>digital_psk_mod_0</source_block_id>
-    <sink_block_id>channels_channel_model_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_file_source_0</source_block_id>
-    <sink_block_id>blocks_packed_to_unpacked_xx_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_packed_to_unpacked_xx_0</source_block_id>
-    <sink_block_id>blocks_throttle_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-</flow_graph>
diff --git a/gnuradio-core/src/lib/general/CMakeLists.txt b/gnuradio-core/src/lib/general/CMakeLists.txt
index d1cf08103e..2ef7c11055 100644
--- a/gnuradio-core/src/lib/general/CMakeLists.txt
+++ b/gnuradio-core/src/lib/general/CMakeLists.txt
@@ -119,15 +119,6 @@ set(gr_core_general_triple_threats
     gr_test
 )
 
-if(ENABLE_GR_CTRLPORT)
-ADD_DEFINITIONS(-DGR_CTRLPORT)
-list(APPEND gr_core_general_triple_threats
-    gr_ctrlport_probe_c
-    gr_ctrlport_probe2_c
-)
-endif(ENABLE_GR_CTRLPORT)
-
-
 foreach(file_tt ${gr_core_general_triple_threats})
     list(APPEND gnuradio_core_sources ${CMAKE_CURRENT_SOURCE_DIR}/${file_tt}.cc)
     install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${file_tt}.h DESTINATION ${GR_INCLUDE_DIR}/gnuradio COMPONENT "core_devel")
diff --git a/gnuradio-core/src/lib/general/general.i b/gnuradio-core/src/lib/general/general.i
index b8b803de98..e0c735f100 100644
--- a/gnuradio-core/src/lib/general/general.i
+++ b/gnuradio-core/src/lib/general/general.i
@@ -51,15 +51,3 @@
 %include "complex_vec_test.i"
 %include "gr_block_gateway.i"
 %include "gr_endianness.h"
-
-#ifdef GR_CTRLPORT
-
-%{
-#include <gr_ctrlport_probe_c.h>
-#include <gr_ctrlport_probe2_c.h>
-%}
-
-%include "gr_ctrlport_probe_c.i"
-%include "gr_ctrlport_probe2_c.i"
-
-#endif /* GR_CTRLPORT */
diff --git a/gnuradio-core/src/lib/general/gr_ctrlport_probe2_c.cc b/gnuradio-core/src/lib/general/gr_ctrlport_probe2_c.cc
deleted file mode 100644
index ca6667a214..0000000000
--- a/gnuradio-core/src/lib/general/gr_ctrlport_probe2_c.cc
+++ /dev/null
@@ -1,156 +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 <gr_ctrlport_probe2_c.h>
-#include <gr_io_signature.h>
-
-gr_ctrlport_probe2_c_sptr
-gr_make_ctrlport_probe2_c(const std::string &id,
-			  const std::string &desc, int len)
-{
-  return gnuradio::get_initial_sptr
-    (new gr_ctrlport_probe2_c(id, desc, len));
-}
-
-gr_ctrlport_probe2_c::gr_ctrlport_probe2_c(const std::string &id,
-					   const std::string &desc, int len)
-  : gr_sync_block("probe2_c",
-		  gr_make_io_signature(1, 1, sizeof(gr_complex)),
-		  gr_make_io_signature(0, 0, 0)),
-    d_id(id), d_desc(desc), d_len(len)
-{
-  set_length(len);
-}
-
-gr_ctrlport_probe2_c::~gr_ctrlport_probe2_c()
-{
-}
-
-void
-gr_ctrlport_probe2_c::forecast(int noutput_items, gr_vector_int &ninput_items_required)
-{
-  // make sure all inputs have noutput_items available
-  unsigned ninputs = ninput_items_required.size();
-  for(unsigned i = 0; i < ninputs; i++)
-    ninput_items_required[i] = d_len;
-}
-    
-//    boost::shared_mutex mutex_buffer;
-//    mutable boost::mutex mutex_notify;
-//    boost::condition_variable condition_buffer_ready;
-std::vector<gr_complex>
-gr_ctrlport_probe2_c::get()
-{
-  mutex_buffer.lock();
-  d_buffer.clear();
-  mutex_buffer.unlock();
-
-  // wait for condition
-  boost::mutex::scoped_lock lock(mutex_notify);
-  condition_buffer_ready.wait(lock);
-
-  mutex_buffer.lock();
-  std::vector<gr_complex> buf_copy = d_buffer;
-  assert(buf_copy.size() == d_len);
-  mutex_buffer.unlock();
-
-  return buf_copy;
-}
-
-void
-gr_ctrlport_probe2_c::set_length(int len)
-{
-  if(len > 8191) {
-    std::cerr << "probe2_c: length " << len
-	      << " exceeds maximum buffer size of 8191" << std::endl;
-    len = 8191;
-  }
-
-  d_len = len;
-  d_buffer.reserve(d_len);
-}
-
-int
-gr_ctrlport_probe2_c::length() const
-{
-  return (int)d_len;
-}
-
-int
-gr_ctrlport_probe2_c::work(int noutput_items,
-			   gr_vector_const_void_star &input_items,
-			   gr_vector_void_star &output_items)
-{
-  const gr_complex *in = (const gr_complex*)input_items[0];
-
-  // copy samples to get buffer if we need samples
-  mutex_buffer.lock();
-  if(d_buffer.size() < d_len) {
-    // copy smaller of remaining buffer space and num inputs to work()
-    int num_copy = std::min( (int)(d_len - d_buffer.size()), noutput_items );
-
-    // TODO: convert this to a copy operator for speed...
-    for(int i = 0; i < num_copy; i++) {
-      d_buffer.push_back(in[i]);
-    }
-    
-    // notify the waiting get() if we fill up the buffer
-    if(d_buffer.size() == d_len) {
-      condition_buffer_ready.notify_one();
-    }
-  }
-  mutex_buffer.unlock();
-    
-  return noutput_items;
-}
-
-void
-gr_ctrlport_probe2_c::setup_rpc()
-{
-#ifdef GR_CTRLPORT
-  int len = static_cast<int>(d_len);
-  d_rpc_vars.push_back(
-    rpcbasic_sptr(new rpcbasic_register_get<gr_ctrlport_probe2_c, std::vector<std::complex<float> > >(
-      alias(), d_id.c_str(), &gr_ctrlport_probe2_c::get,
-      pmt::make_c32vector(0,-2),
-      pmt::make_c32vector(0,2),
-      pmt::make_c32vector(0,0), 
-      "volts", d_desc.c_str(), RPC_PRIVLVL_MIN,
-      DISPXY | DISPOPTSCATTER)));
-
-  d_rpc_vars.push_back(
-    rpcbasic_sptr(new rpcbasic_register_get<gr_ctrlport_probe2_c, int>(
-      alias(), "length", &gr_ctrlport_probe2_c::length,
-      pmt::mp(1), pmt::mp(10*len), pmt::mp(len),
-      "samples", "get vector length", RPC_PRIVLVL_MIN, DISPNULL)));
-
-  d_rpc_vars.push_back(
-    rpcbasic_sptr(new rpcbasic_register_set<gr_ctrlport_probe2_c, int>(
-      alias(), "length", &gr_ctrlport_probe2_c::set_length,
-      pmt::mp(1), pmt::mp(10*len), pmt::mp(len),
-      "samples", "set vector length", RPC_PRIVLVL_MIN, DISPNULL)));
-#endif /* GR_CTRLPORT */
-}
diff --git a/gnuradio-core/src/lib/general/gr_ctrlport_probe2_c.h b/gnuradio-core/src/lib/general/gr_ctrlport_probe2_c.h
deleted file mode 100644
index 0920c0f4e8..0000000000
--- a/gnuradio-core/src/lib/general/gr_ctrlport_probe2_c.h
+++ /dev/null
@@ -1,72 +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 INCLUDED_CTRLPORT_PROBE2_C_H
-#define INCLUDED_CTRLPORT_PROBE2_C_H
-
-#include <gr_core_api.h>
-#include <gr_sync_block.h>
-#include <rpcregisterhelpers.h>
-#include <boost/thread/shared_mutex.hpp>
-
-class gr_ctrlport_probe2_c;
-typedef boost::shared_ptr<gr_ctrlport_probe2_c> gr_ctrlport_probe2_c_sptr;
-
-GR_CORE_API gr_ctrlport_probe2_c_sptr
-gr_make_ctrlport_probe2_c(const std::string &id, const std::string &desc, int len);
-
-class GR_CORE_API gr_ctrlport_probe2_c : public gr_sync_block
-{
- private:
-  friend GR_CORE_API gr_ctrlport_probe2_c_sptr gr_make_ctrlport_probe2_c
-    (const std::string &id, const std::string &desc, int len);
-
-  gr_ctrlport_probe2_c(const std::string &id, const std::string &desc, int len);
-
-  std::string d_id;
-  std::string d_desc;
-  size_t d_len;
-  boost::shared_mutex mutex_buffer;
-  mutable boost::mutex mutex_notify;
-  boost::condition_variable condition_buffer_ready;
-
-  std::vector<gr_complex> d_buffer;
-
- public:
-  ~gr_ctrlport_probe2_c();
-
-  void setup_rpc();
-
-  void forecast(int noutput_items, gr_vector_int &ninput_items_required);
-
-  std::vector<gr_complex> get();
-
-  void set_length(int len);
-  int length() const;
-
-  int work(int noutput_items,
-	   gr_vector_const_void_star &input_items,
-	   gr_vector_void_star &output_items);
-};
-
-#endif /* INCLUDED_CTRLPORT_PROBE2_C_H */
-
diff --git a/gnuradio-core/src/lib/general/gr_ctrlport_probe2_c.i b/gnuradio-core/src/lib/general/gr_ctrlport_probe2_c.i
deleted file mode 100644
index 18858595ea..0000000000
--- a/gnuradio-core/src/lib/general/gr_ctrlport_probe2_c.i
+++ /dev/null
@@ -1,36 +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.
- */
-
-GR_SWIG_BLOCK_MAGIC(gr,ctrlport_probe2_c)
-
-gr_ctrlport_probe2_c_sptr
-gr_make_ctrlport_probe2_c(const std::string &id, const std::string &desc, int len);
-
-class gr_ctrlport_probe2_c : public gr_sync_block
-{
-public:
-  ~gr_ctrlport_probe2_c();
-  std::vector<gr_complex> get();
-  void set_length(int len);
-  int length() const;
-};
-
diff --git a/gnuradio-core/src/lib/general/gr_ctrlport_probe_c.cc b/gnuradio-core/src/lib/general/gr_ctrlport_probe_c.cc
deleted file mode 100644
index 253d4c380e..0000000000
--- a/gnuradio-core/src/lib/general/gr_ctrlport_probe_c.cc
+++ /dev/null
@@ -1,96 +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 <gr_ctrlport_probe_c.h>
-#include <gr_io_signature.h>
-
-gr_ctrlport_probe_c_sptr
-gr_make_ctrlport_probe_c(const std::string &id,
-			 const std::string &desc)
-{
-  return gnuradio::get_initial_sptr
-    (new gr_ctrlport_probe_c(id, desc));
-}
-
-
-gr_ctrlport_probe_c::gr_ctrlport_probe_c(const std::string &id,
-					 const std::string &desc)
-  : gr_sync_block("probe_c",
-		  gr_make_io_signature(1, 1, sizeof(gr_complex)),
-		  gr_make_io_signature(0, 0, 0)),
-    d_id(id), d_desc(desc), d_ptr(NULL), d_ptrLen(0)
-{
-}
-
-gr_ctrlport_probe_c::~gr_ctrlport_probe_c()
-{
-}
-
-std::vector<gr_complex>
-gr_ctrlport_probe_c::get()
-{
-  if(d_ptr != NULL && d_ptrLen > 0) {
-    ptrlock.lock();
-    std::vector<gr_complex> vec(d_ptr, d_ptr+d_ptrLen);
-    ptrlock.unlock();
-    return vec;
-  }
-  else {
-    std::vector<gr_complex> vec;
-    return vec;
-  }
-}
-
-int
-gr_ctrlport_probe_c::work(int noutput_items,
-			  gr_vector_const_void_star &input_items,
-			  gr_vector_void_star &output_items)
-{
-  const gr_complex *in = (const gr_complex*)input_items[0];
-
-  // keep reference to symbols
-  ptrlock.lock();
-  d_ptr = in;
-  d_ptrLen = noutput_items;
-  ptrlock.unlock();
-    
-  return noutput_items;
-}
-
-void
-gr_ctrlport_probe_c::setup_rpc()
-{
-#ifdef GR_CTRLPORT
-  d_rpc_vars.push_back(
-    rpcbasic_sptr(new rpcbasic_register_get<gr_ctrlport_probe_c, std::vector<std::complex<float> > >(
-      alias(), d_id.c_str(), &gr_ctrlport_probe_c::get, 
-      pmt::make_c32vector(0,-2),
-      pmt::make_c32vector(0,2),
-      pmt::make_c32vector(0,0), 
-      "volts", d_desc.c_str(), RPC_PRIVLVL_MIN,
-      DISPXY | DISPOPTSCATTER)));
-#endif /* GR_CTRLPORT */
-}
diff --git a/gnuradio-core/src/lib/general/gr_ctrlport_probe_c.h b/gnuradio-core/src/lib/general/gr_ctrlport_probe_c.h
deleted file mode 100644
index 27666ab597..0000000000
--- a/gnuradio-core/src/lib/general/gr_ctrlport_probe_c.h
+++ /dev/null
@@ -1,65 +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 INCLUDED_CTRLPORT_PROBE_C_H
-#define INCLUDED_CTRLPORT_PROBE_C_H
-
-#include <gr_core_api.h>
-#include <gr_sync_block.h>
-#include <rpcregisterhelpers.h>
-#include <boost/thread/shared_mutex.hpp>
-
-class gr_ctrlport_probe_c;
-typedef boost::shared_ptr<gr_ctrlport_probe_c> gr_ctrlport_probe_c_sptr;
-
-GR_CORE_API gr_ctrlport_probe_c_sptr
-gr_make_ctrlport_probe_c(const std::string &id, const std::string &desc);
-
-class GR_CORE_API gr_ctrlport_probe_c : public gr_sync_block
-{
- private:
-  friend GR_CORE_API gr_ctrlport_probe_c_sptr gr_make_ctrlport_probe_c
-    (const std::string &id, const std::string &desc);
-
-  gr_ctrlport_probe_c(const std::string &id, const std::string &desc);
-
-  boost::shared_mutex ptrlock;
-
-  std::string d_id;
-  std::string d_desc;
-  const gr_complex* d_ptr;
-  size_t d_ptrLen;
-
- public:
-  ~gr_ctrlport_probe_c();
-
-  void setup_rpc();
-
-  std::vector<gr_complex> get();
-
-  int work(int noutput_items,
-	   gr_vector_const_void_star &input_items,
-	   gr_vector_void_star &output_items);
-};
-
-#endif /* INCLUDED_CTRLPORT_GR_CTRLPORT_PROBE_C_H */
-
diff --git a/gnuradio-core/src/lib/general/gr_ctrlport_probe_c.i b/gnuradio-core/src/lib/general/gr_ctrlport_probe_c.i
deleted file mode 100644
index cd4c521cb0..0000000000
--- a/gnuradio-core/src/lib/general/gr_ctrlport_probe_c.i
+++ /dev/null
@@ -1,34 +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.
- */
-
-GR_SWIG_BLOCK_MAGIC(gr,ctrlport_probe_c)
-
-gr_ctrlport_probe_c_sptr
-gr_make_ctrlport_probe_c(const std::string &id, const std::string &desc);
-
-class gr_ctrlport_probe_c : public gr_sync_block
-{
-public:
-  ~gr_ctrlport_probe_c();
-  std::vector<gr_complex> get();
-};
-
diff --git a/gr-blocks/examples/CMakeLists.txt b/gr-blocks/examples/CMakeLists.txt
index 0f9db57b63..c9829661b6 100644
--- a/gr-blocks/examples/CMakeLists.txt
+++ b/gr-blocks/examples/CMakeLists.txt
@@ -19,3 +19,7 @@
 
 add_subdirectory(metadata)
 add_subdirectory(tags)
+
+if(ENABLE_GR_CTRLPORT)
+add_subdirectory(ctrlport)
+endif(ENABLE_GR_CTRLPORT)
diff --git a/gr-blocks/examples/ctrlport/CMakeLists.txt b/gr-blocks/examples/ctrlport/CMakeLists.txt
new file mode 100644
index 0000000000..47ef4c225e
--- /dev/null
+++ b/gr-blocks/examples/ctrlport/CMakeLists.txt
@@ -0,0 +1,25 @@
+# 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.
+
+include(GrPython)
+
+GR_PYTHON_INSTALL(PROGRAMS
+    DESTINATION ${GR_PKG_CTRLPORT_EXAMPLES_DIR}
+    COMPONENT "core_python"
+)
diff --git a/gr-blocks/examples/ctrlport/comparing_resamplers.grc b/gr-blocks/examples/ctrlport/comparing_resamplers.grc
new file mode 100644
index 0000000000..7b90a2066c
--- /dev/null
+++ b/gr-blocks/examples/ctrlport/comparing_resamplers.grc
@@ -0,0 +1,390 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+  <timestamp>Fri Mar 15 11:01:13 2013</timestamp>
+  <block>
+    <key>blocks_throttle</key>
+    <param>
+      <key>id</key>
+      <value>blocks_throttle_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>complex</value>
+    </param>
+    <param>
+      <key>samples_per_second</key>
+      <value>samp_rate</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(191, 125)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_ctrlport_probe2_c</key>
+    <param>
+      <key>id</key>
+      <value>probe_arc_resamp</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>name</key>
+      <value>arb_resampler</value>
+    </param>
+    <param>
+      <key>desc</key>
+      <value>PFB Arbitrary Resampler</value>
+    </param>
+    <param>
+      <key>len</key>
+      <value>1024</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(9, 296)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>180</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>resamp_rate</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>1.25</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(272, 9)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>pfb_arb_resampler_xxx</key>
+    <param>
+      <key>id</key>
+      <value>pfb_arb_resampler_xxx_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>ccf</value>
+    </param>
+    <param>
+      <key>rrate</key>
+      <value>resamp_rate</value>
+    </param>
+    <param>
+      <key>taps</key>
+      <value></value>
+    </param>
+    <param>
+      <key>nfilts</key>
+      <value>32</value>
+    </param>
+    <param>
+      <key>atten</key>
+      <value>60</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(305, 280)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>180</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_ctrlport_probe2_c</key>
+    <param>
+      <key>id</key>
+      <value>probe_frac_interp</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>name</key>
+      <value>fractional_interp</value>
+    </param>
+    <param>
+      <key>desc</key>
+      <value>Fractional Interpolator</value>
+    </param>
+    <param>
+      <key>len</key>
+      <value>1024</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(10, 204)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>180</value>
+    </param>
+  </block>
+  <block>
+    <key>fractional_interpolator_xx</key>
+    <param>
+      <key>id</key>
+      <value>fractional_interpolator_xx_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>complex</value>
+    </param>
+    <param>
+      <key>phase_shift</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>interp_ratio</key>
+      <value>1.0/resamp_rate</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(354, 212)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>180</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>samp_rate</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>30e6</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(181, 10)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>analog_sig_source_x</key>
+    <param>
+      <key>id</key>
+      <value>analog_sig_source_x_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>complex</value>
+    </param>
+    <param>
+      <key>samp_rate</key>
+      <value>samp_rate</value>
+    </param>
+    <param>
+      <key>waveform</key>
+      <value>analog.GR_COS_WAVE</value>
+    </param>
+    <param>
+      <key>freq</key>
+      <value>samp_rate/10</value>
+    </param>
+    <param>
+      <key>amp</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>offset</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(11, 93)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>channels_channel_model</key>
+    <param>
+      <key>id</key>
+      <value>channels_channel_model_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>noise_voltage</key>
+      <value>0.1</value>
+    </param>
+    <param>
+      <key>freq_offset</key>
+      <value>0.0</value>
+    </param>
+    <param>
+      <key>epsilon</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>taps</key>
+      <value>[1,]</value>
+    </param>
+    <param>
+      <key>seed</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(382, 93)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>options</key>
+    <param>
+      <key>id</key>
+      <value>comparing_resamplers</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>title</key>
+      <value></value>
+    </param>
+    <param>
+      <key>author</key>
+      <value></value>
+    </param>
+    <param>
+      <key>description</key>
+      <value></value>
+    </param>
+    <param>
+      <key>window_size</key>
+      <value>570,390</value>
+    </param>
+    <param>
+      <key>generate_options</key>
+      <value>no_gui</value>
+    </param>
+    <param>
+      <key>category</key>
+      <value>Custom</value>
+    </param>
+    <param>
+      <key>run_options</key>
+      <value>prompt</value>
+    </param>
+    <param>
+      <key>run</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>max_nouts</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>realtime_scheduling</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(10, 10)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <connection>
+    <source_block_id>analog_sig_source_x_0</source_block_id>
+    <sink_block_id>blocks_throttle_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>blocks_throttle_0</source_block_id>
+    <sink_block_id>channels_channel_model_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>channels_channel_model_0</source_block_id>
+    <sink_block_id>pfb_arb_resampler_xxx_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>channels_channel_model_0</source_block_id>
+    <sink_block_id>fractional_interpolator_xx_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>pfb_arb_resampler_xxx_0</source_block_id>
+    <sink_block_id>probe_arc_resamp</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>fractional_interpolator_xx_0</source_block_id>
+    <sink_block_id>probe_frac_interp</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+</flow_graph>
diff --git a/gr-blocks/examples/ctrlport/pfb_sync_test-qt.grc b/gr-blocks/examples/ctrlport/pfb_sync_test-qt.grc
new file mode 100644
index 0000000000..0d245089a5
--- /dev/null
+++ b/gr-blocks/examples/ctrlport/pfb_sync_test-qt.grc
@@ -0,0 +1,831 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+  <timestamp>Sun Mar 17 17:11:21 2013</timestamp>
+  <block>
+    <key>options</key>
+    <param>
+      <key>id</key>
+      <value>pfb_sync_test_qt</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>title</key>
+      <value></value>
+    </param>
+    <param>
+      <key>author</key>
+      <value></value>
+    </param>
+    <param>
+      <key>description</key>
+      <value></value>
+    </param>
+    <param>
+      <key>window_size</key>
+      <value>1280,1024</value>
+    </param>
+    <param>
+      <key>generate_options</key>
+      <value>qt_gui</value>
+    </param>
+    <param>
+      <key>category</key>
+      <value>Custom</value>
+    </param>
+    <param>
+      <key>run_options</key>
+      <value>prompt</value>
+    </param>
+    <param>
+      <key>run</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>max_nouts</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>realtime_scheduling</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(10, 10)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>sps</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>2</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(105, 126)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>samp_rate</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>300000</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(14, 124)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>import</key>
+    <param>
+      <key>id</key>
+      <value>import_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>import</key>
+      <value>import random, math, cmath</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(14, 77)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_vector_source_x</key>
+    <param>
+      <key>id</key>
+      <value>blocks_vector_source_x_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>byte</value>
+    </param>
+    <param>
+      <key>vector</key>
+      <value>0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50</value>
+    </param>
+    <param>
+      <key>tags</key>
+      <value>[]</value>
+    </param>
+    <param>
+      <key>repeat</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(190, 71)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_packed_to_unpacked_xx</key>
+    <param>
+      <key>id</key>
+      <value>blocks_packed_to_unpacked_xx_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>byte</value>
+    </param>
+    <param>
+      <key>bits_per_chunk</key>
+      <value>8</value>
+    </param>
+    <param>
+      <key>endianness</key>
+      <value>gr.GR_MSB_FIRST</value>
+    </param>
+    <param>
+      <key>num_ports</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(419, 10)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_throttle</key>
+    <param>
+      <key>id</key>
+      <value>blocks_throttle_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>byte</value>
+    </param>
+    <param>
+      <key>samples_per_second</key>
+      <value>samp_rate</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(436, 97)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>digital_psk_mod</key>
+    <param>
+      <key>id</key>
+      <value>digital_psk_mod_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>constellation_points</key>
+      <value>4</value>
+    </param>
+    <param>
+      <key>mod_code</key>
+      <value>"gray"</value>
+    </param>
+    <param>
+      <key>differential</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>samples_per_symbol</key>
+      <value>sps</value>
+    </param>
+    <param>
+      <key>excess_bw</key>
+      <value>0.35</value>
+    </param>
+    <param>
+      <key>verbose</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>log</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(627, 65)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>digital_pfb_clock_sync_xxx</key>
+    <param>
+      <key>id</key>
+      <value>digital_pfb_clock_sync_xxx_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>ccf</value>
+    </param>
+    <param>
+      <key>sps</key>
+      <value>sps</value>
+    </param>
+    <param>
+      <key>loop_bw</key>
+      <value>2*3.14/100.0</value>
+    </param>
+    <param>
+      <key>taps</key>
+      <value>firdes.root_raised_cosine(nfilts, nfilts,1.0/sps, 0.35, int(22*sps*nfilts))</value>
+    </param>
+    <param>
+      <key>filter_size</key>
+      <value>nfilts</value>
+    </param>
+    <param>
+      <key>init_phase</key>
+      <value>nfilts/2</value>
+    </param>
+    <param>
+      <key>max_dev</key>
+      <value>1.5</value>
+    </param>
+    <param>
+      <key>osps</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(339, 195)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>nfilts</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>32</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(74, 390)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>amps</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>[1]</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(7, 390)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>graymap</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>[[3,1,0,2]]</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(7, 326)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>qtgui_const_sink_x</key>
+    <param>
+      <key>id</key>
+      <value>qtgui_const_sink_x_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>complex</value>
+    </param>
+    <param>
+      <key>name</key>
+      <value>QT GUI Plot</value>
+    </param>
+    <param>
+      <key>size</key>
+      <value>1024</value>
+    </param>
+    <param>
+      <key>ymin</key>
+      <value>-2</value>
+    </param>
+    <param>
+      <key>ymax</key>
+      <value>2</value>
+    </param>
+    <param>
+      <key>xmin</key>
+      <value>-2</value>
+    </param>
+    <param>
+      <key>xmax</key>
+      <value>2</value>
+    </param>
+    <param>
+      <key>nconnections</key>
+      <value>2</value>
+    </param>
+    <param>
+      <key>update_time</key>
+      <value>0.10</value>
+    </param>
+    <param>
+      <key>gui_hint</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(752, 196)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>channels_channel_model</key>
+    <param>
+      <key>id</key>
+      <value>channels_channel_model_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>noise_voltage</key>
+      <value>noise</value>
+    </param>
+    <param>
+      <key>freq_offset</key>
+      <value>0.0</value>
+    </param>
+    <param>
+      <key>epsilon</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>taps</key>
+      <value>cmath.exp(1j*phase)</value>
+    </param>
+    <param>
+      <key>seed</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(68, 211)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_ctrlport_probe2_c</key>
+    <param>
+      <key>id</key>
+      <value>received_probe2</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>name</key>
+      <value>received</value>
+    </param>
+    <param>
+      <key>desc</key>
+      <value>Constellation Points</value>
+    </param>
+    <param>
+      <key>len</key>
+      <value>1024</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(195, 519)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable_qtgui_range</key>
+    <param>
+      <key>id</key>
+      <value>phase</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>label</key>
+      <value>Phase</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>0.5</value>
+    </param>
+    <param>
+      <key>start</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>stop</key>
+      <value>2</value>
+    </param>
+    <param>
+      <key>step</key>
+      <value>0.01</value>
+    </param>
+    <param>
+      <key>widget</key>
+      <value>counter_slider</value>
+    </param>
+    <param>
+      <key>orient</key>
+      <value>Qt.Horizontal</value>
+    </param>
+    <param>
+      <key>min_len</key>
+      <value>200</value>
+    </param>
+    <param>
+      <key>gui_hint</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(266, 344)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_ctrlport_probe2_c</key>
+    <param>
+      <key>id</key>
+      <value>time_probe2</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>name</key>
+      <value>time locked</value>
+    </param>
+    <param>
+      <key>desc</key>
+      <value>Constellation Points</value>
+    </param>
+    <param>
+      <key>len</key>
+      <value>1024</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(447, 440)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable_qtgui_range</key>
+    <param>
+      <key>id</key>
+      <value>noise</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>label</key>
+      <value>Noise</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>0.050</value>
+    </param>
+    <param>
+      <key>start</key>
+      <value>0.0001</value>
+    </param>
+    <param>
+      <key>stop</key>
+      <value>2</value>
+    </param>
+    <param>
+      <key>step</key>
+      <value>0.01</value>
+    </param>
+    <param>
+      <key>widget</key>
+      <value>counter_slider</value>
+    </param>
+    <param>
+      <key>orient</key>
+      <value>Qt.Horizontal</value>
+    </param>
+    <param>
+      <key>min_len</key>
+      <value>200</value>
+    </param>
+    <param>
+      <key>gui_hint</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(7, 455)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>digital_costas_loop_cc</key>
+    <param>
+      <key>id</key>
+      <value>digital_costas_loop_cc_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>w</key>
+      <value>6.28/100.0</value>
+    </param>
+    <param>
+      <key>order</key>
+      <value>4</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(610, 279)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_null_sink</key>
+    <param>
+      <key>id</key>
+      <value>blocks_null_sink_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>complex</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(859, 279)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_ctrlport_probe2_c</key>
+    <param>
+      <key>id</key>
+      <value>phase_probe2</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>name</key>
+      <value>phase locked</value>
+    </param>
+    <param>
+      <key>desc</key>
+      <value>Constellation Points</value>
+    </param>
+    <param>
+      <key>len</key>
+      <value>1024</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(681, 379)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <connection>
+    <source_block_id>blocks_throttle_0</source_block_id>
+    <sink_block_id>digital_psk_mod_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>digital_pfb_clock_sync_xxx_0</source_block_id>
+    <sink_block_id>qtgui_const_sink_x_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>digital_costas_loop_cc_0</source_block_id>
+    <sink_block_id>qtgui_const_sink_x_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>1</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>digital_costas_loop_cc_0</source_block_id>
+    <sink_block_id>blocks_null_sink_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>channels_channel_model_0</source_block_id>
+    <sink_block_id>digital_pfb_clock_sync_xxx_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>digital_psk_mod_0</source_block_id>
+    <sink_block_id>channels_channel_model_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>digital_costas_loop_cc_0</source_block_id>
+    <sink_block_id>phase_probe2</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>blocks_packed_to_unpacked_xx_0</source_block_id>
+    <sink_block_id>blocks_throttle_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_packed_to_unpacked_xx_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>channels_channel_model_0</source_block_id>
+    <sink_block_id>received_probe2</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>digital_pfb_clock_sync_xxx_0</source_block_id>
+    <sink_block_id>time_probe2</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>digital_pfb_clock_sync_xxx_0</source_block_id>
+    <sink_block_id>digital_costas_loop_cc_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+</flow_graph>
diff --git a/gr-blocks/examples/ctrlport/pfb_sync_test.grc b/gr-blocks/examples/ctrlport/pfb_sync_test.grc
new file mode 100644
index 0000000000..da63b4f5b3
--- /dev/null
+++ b/gr-blocks/examples/ctrlport/pfb_sync_test.grc
@@ -0,0 +1,668 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+  <timestamp>Thu Feb 21 19:08:39 2013</timestamp>
+  <block>
+    <key>options</key>
+    <param>
+      <key>id</key>
+      <value>pfb_sync_test</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>title</key>
+      <value></value>
+    </param>
+    <param>
+      <key>author</key>
+      <value></value>
+    </param>
+    <param>
+      <key>description</key>
+      <value></value>
+    </param>
+    <param>
+      <key>window_size</key>
+      <value>1280, 1024</value>
+    </param>
+    <param>
+      <key>generate_options</key>
+      <value>wx_gui</value>
+    </param>
+    <param>
+      <key>category</key>
+      <value>Custom</value>
+    </param>
+    <param>
+      <key>run_options</key>
+      <value>prompt</value>
+    </param>
+    <param>
+      <key>run</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>max_nouts</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>realtime_scheduling</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(10, 10)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>import</key>
+    <param>
+      <key>id</key>
+      <value>import_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>import</key>
+      <value>import random, math, cmath</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(14, 77)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>samp_rate</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>300000</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(14, 124)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>graymap</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>[[3,1,0,2]]</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(32, 387)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>amps</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>[1]</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(32, 451)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>nfilts</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>32</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(99, 451)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>digital_costas_loop_cc</key>
+    <param>
+      <key>id</key>
+      <value>digital_costas_loop_cc_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>w</key>
+      <value>6.28/100.0</value>
+    </param>
+    <param>
+      <key>order</key>
+      <value>4</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(626, 223)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>sps</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>2</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(105, 126)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_null_sink</key>
+    <param>
+      <key>id</key>
+      <value>blocks_null_sink_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>complex</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(964, 200)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable_slider</key>
+    <param>
+      <key>id</key>
+      <value>noise</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>label</key>
+      <value></value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>0.05</value>
+    </param>
+    <param>
+      <key>min</key>
+      <value>0.00000001</value>
+    </param>
+    <param>
+      <key>max</key>
+      <value>2</value>
+    </param>
+    <param>
+      <key>num_steps</key>
+      <value>100</value>
+    </param>
+    <param>
+      <key>style</key>
+      <value>wx.SL_HORIZONTAL</value>
+    </param>
+    <param>
+      <key>converver</key>
+      <value>float_converter</value>
+    </param>
+    <param>
+      <key>grid_pos</key>
+      <value></value>
+    </param>
+    <param>
+      <key>notebook</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(281, 406)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable_slider</key>
+    <param>
+      <key>id</key>
+      <value>phase</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>label</key>
+      <value></value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>min</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>max</key>
+      <value>2</value>
+    </param>
+    <param>
+      <key>num_steps</key>
+      <value>100</value>
+    </param>
+    <param>
+      <key>style</key>
+      <value>wx.SL_HORIZONTAL</value>
+    </param>
+    <param>
+      <key>converver</key>
+      <value>float_converter</value>
+    </param>
+    <param>
+      <key>grid_pos</key>
+      <value></value>
+    </param>
+    <param>
+      <key>notebook</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(167, 405)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>digital_pfb_clock_sync_xxx</key>
+    <param>
+      <key>id</key>
+      <value>digital_pfb_clock_sync_xxx_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>ccf</value>
+    </param>
+    <param>
+      <key>sps</key>
+      <value>sps</value>
+    </param>
+    <param>
+      <key>loop_bw</key>
+      <value>2*3.14/100.0</value>
+    </param>
+    <param>
+      <key>taps</key>
+      <value>firdes.root_raised_cosine(nfilts, nfilts,1.0/sps, 0.35, int(22*sps*nfilts))</value>
+    </param>
+    <param>
+      <key>filter_size</key>
+      <value>nfilts</value>
+    </param>
+    <param>
+      <key>init_phase</key>
+      <value>nfilts/2</value>
+    </param>
+    <param>
+      <key>max_dev</key>
+      <value>1.5</value>
+    </param>
+    <param>
+      <key>osps</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(322, 231)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>digital_psk_mod</key>
+    <param>
+      <key>id</key>
+      <value>digital_psk_mod_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>constellation_points</key>
+      <value>4</value>
+    </param>
+    <param>
+      <key>mod_code</key>
+      <value>"gray"</value>
+    </param>
+    <param>
+      <key>differential</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>samples_per_symbol</key>
+      <value>sps</value>
+    </param>
+    <param>
+      <key>excess_bw</key>
+      <value>0.35</value>
+    </param>
+    <param>
+      <key>verbose</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>log</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(846, 32)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>channels_channel_model</key>
+    <param>
+      <key>id</key>
+      <value>channels_channel_model_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>noise_voltage</key>
+      <value>noise</value>
+    </param>
+    <param>
+      <key>freq_offset</key>
+      <value>0.0</value>
+    </param>
+    <param>
+      <key>epsilon</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>taps</key>
+      <value>cmath.exp(1j*phase)</value>
+    </param>
+    <param>
+      <key>seed</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(73, 247)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>ctrlport_monitor</key>
+    <param>
+      <key>id</key>
+      <value>ctrlport_monitor_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>en</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(228, 5)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_file_source</key>
+    <param>
+      <key>id</key>
+      <value>blocks_file_source_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>file</key>
+      <value>/dev/urandom</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>byte</value>
+    </param>
+    <param>
+      <key>repeat</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(229, 56)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_throttle</key>
+    <param>
+      <key>id</key>
+      <value>blocks_throttle_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>byte</value>
+    </param>
+    <param>
+      <key>samples_per_second</key>
+      <value>samp_rate</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(623, 64)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_packed_to_unpacked_xx</key>
+    <param>
+      <key>id</key>
+      <value>blocks_packed_to_unpacked_xx_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>byte</value>
+    </param>
+    <param>
+      <key>bits_per_chunk</key>
+      <value>8</value>
+    </param>
+    <param>
+      <key>endianness</key>
+      <value>gr.GR_MSB_FIRST</value>
+    </param>
+    <param>
+      <key>num_ports</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(415, 56)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <connection>
+    <source_block_id>blocks_throttle_0</source_block_id>
+    <sink_block_id>digital_psk_mod_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>digital_pfb_clock_sync_xxx_0</source_block_id>
+    <sink_block_id>digital_costas_loop_cc_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>digital_costas_loop_cc_0</source_block_id>
+    <sink_block_id>blocks_null_sink_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>channels_channel_model_0</source_block_id>
+    <sink_block_id>digital_pfb_clock_sync_xxx_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>digital_psk_mod_0</source_block_id>
+    <sink_block_id>channels_channel_model_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>blocks_file_source_0</source_block_id>
+    <sink_block_id>blocks_packed_to_unpacked_xx_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>blocks_packed_to_unpacked_xx_0</source_block_id>
+    <sink_block_id>blocks_throttle_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+</flow_graph>
diff --git a/gr-blocks/grc/CMakeLists.txt b/gr-blocks/grc/CMakeLists.txt
index ed66d9e3b2..48cdd5859a 100644
--- a/gr-blocks/grc/CMakeLists.txt
+++ b/gr-blocks/grc/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright 2012 Free Software Foundation, Inc.
+# Copyright 2012-2013 Free Software Foundation, Inc.
 #
 # This file is part of GNU Radio
 #
@@ -19,4 +19,14 @@
 
 ########################################################################
 file(GLOB xml_files "*.xml")
+
+# Force out the controlport GRC blocks if we've disabled it.
+if(NOT ENABLE_GR_CTRLPORT)
+  list(REMOVE_ITEM xml_files
+    ${CMAKE_CURRENT_SOURCE_DIR}/ctrlport_viewer.xml
+    ${CMAKE_CURRENT_SOURCE_DIR}/ctrlport_probe_c.xml
+    ${CMAKE_CURRENT_SOURCE_DIR}/ctrlport_probe2_c.xml
+    )
+endif(NOT ENABLE_GR_CTRLPORT)
+
 install(FILES ${xml_files} DESTINATION ${GRC_BLOCKS_DIR} COMPONENT "blocks_python")
diff --git a/gr-blocks/grc/blocks_ctrlport_probe2_c.xml b/gr-blocks/grc/blocks_ctrlport_probe2_c.xml
new file mode 100644
index 0000000000..34f6dc0f50
--- /dev/null
+++ b/gr-blocks/grc/blocks_ctrlport_probe2_c.xml
@@ -0,0 +1,66 @@
+<?xml version="1.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.
+-->
+
+<block>
+  <name>Ctrlport Complex Probe (fixed len)</name>
+  <key>blocks_ctrlport_probe2_c</key>
+  <category>Control Port</category>
+  <import>from gnuradio import blocks</import>
+  <make>blocks.ctrlport_probe2_c($name, $desc, $len)</make>
+  <callback>set_length($len)</callback>
+
+  <param>
+    <name>Name</name>
+    <key>name</key>
+    <value>constellation</value>
+    <type>string</type>
+  </param>
+
+  <param>
+    <name>Description</name>
+    <key>desc</key>
+    <value>Constellation Points</value>
+    <type>string</type>
+  </param>
+  
+  <param>
+    <name>Length</name>
+    <key>len</key>
+    <value>1024</value>
+    <type>int</type>
+  </param>
+
+
+  <sink>
+    <name>in</name>
+    <type>complex</type>
+  </sink>
+
+  <doc>
+    Place this in a graph to export complex values to a GRCP port probe.
+
+    * Version 2 allows you to specify a length in samples that you wish to get every probe
+  </doc>
+
+</block>
+
diff --git a/gr-blocks/grc/blocks_ctrlport_probe_c.xml b/gr-blocks/grc/blocks_ctrlport_probe_c.xml
new file mode 100644
index 0000000000..3b17823931
--- /dev/null
+++ b/gr-blocks/grc/blocks_ctrlport_probe_c.xml
@@ -0,0 +1,56 @@
+<?xml version="1.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.
+-->
+
+<block>
+  <name>Ctrlport Complex Probe</name>
+  <key>blocks_ctrlport_probe_c</key>
+  <category>Control Port</category>
+  <import>from gnuradio import blocks</import>
+  <make>blocks.ctrlport_probe_c($name, $desc)</make>
+
+  <param>
+    <name>Name</name>
+    <key>name</key>
+    <value>constellation</value>
+    <type>string</type>
+  </param>
+
+  <param>
+    <name>Description</name>
+    <key>desc</key>
+    <value>Constellation Points</value>
+    <type>string</type>
+  </param>
+
+
+  <sink>
+    <name>in</name>
+    <type>complex</type>
+  </sink>
+
+  <doc>
+    Place this in a graph to export complex values to a GRCP port probe.
+  </doc>
+
+</block>
+
diff --git a/gr-blocks/grc/blocks_ctrlport_viewer.xml b/gr-blocks/grc/blocks_ctrlport_viewer.xml
new file mode 100644
index 0000000000..99abd6d4bd
--- /dev/null
+++ b/gr-blocks/grc/blocks_ctrlport_viewer.xml
@@ -0,0 +1,50 @@
+<?xml version="1.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.
+-->
+
+<block>
+  <name>CtrlPort Monitor</name>
+  <key>blocks_ctrlport_monitor</key>
+  <category>Control Port</category>
+  <import>from gnuradio.ctrlport.monitor import *</import>
+  <make>not $en or monitor()</make>
+  <param>
+    <name>Enabled</name>
+    <key>en</key>
+    <value></value>
+    <type>enum</type>
+        <option>
+            <name>True</name>
+            <key>True</key>
+        </option>
+        <option>
+            <name>False</name>
+            <key>False</key>
+      </option>
+  </param>
+
+  <doc>
+    Place this in a graph to launch a QtPy GR CtrlPort Monitor app.
+  </doc>
+
+</block>
+
diff --git a/gr-blocks/include/blocks/CMakeLists.txt b/gr-blocks/include/blocks/CMakeLists.txt
index a922af6426..e551468463 100644
--- a/gr-blocks/include/blocks/CMakeLists.txt
+++ b/gr-blocks/include/blocks/CMakeLists.txt
@@ -204,3 +204,12 @@ install(FILES
     DESTINATION ${GR_INCLUDE_DIR}/gnuradio/blocks
     COMPONENT "blocks_devel"
 )
+
+if(ENABLE_GR_CTRLPORT)
+install(FILES
+  ctrlport_probe_c.h
+  ctrlport_probe2_c.h
+  DESTINATION ${GR_INCLUDE_DIR}/gnuradio/blocks
+  COMPONENT "blocks_devel"
+)
+endif(ENABLE_GR_CTRLPORT)
diff --git a/gr-blocks/include/blocks/ctrlport_probe2_c.h b/gr-blocks/include/blocks/ctrlport_probe2_c.h
new file mode 100644
index 0000000000..9a6034fcca
--- /dev/null
+++ b/gr-blocks/include/blocks/ctrlport_probe2_c.h
@@ -0,0 +1,64 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2012-2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_CTRLPORT_PROBE2_C_H
+#define INCLUDED_CTRLPORT_PROBE2_C_H
+
+#include <blocks/api.h>
+#include <gr_sync_block.h>
+
+namespace gr {
+  namespace blocks {
+
+    /*!
+     * \brief A ControlPort probe to export vectors of signals.
+     *
+     * This block acts as a sink in the flowgraph but also exports
+     * vectors of complex samples over ControlPort. This block holds
+     * the latest \p len number of complex samples so that every query
+     * by a ControlPort client will get the same length vector.
+     */
+    class BLOCKS_API ctrlport_probe2_c : virtual public gr_sync_block
+    {
+    public:
+      // gr::blocks::ctrlport_probe2_c::sptr
+      typedef boost::shared_ptr<ctrlport_probe2_c> sptr;
+
+      /*!
+       * \brief Make a ControlPort probe block.
+       * \param id A string ID to name the probe over ControlPort.
+       * \param desc A string describing the probe.
+       * \param len Number of samples to transmit.
+       */
+      static sptr make(const std::string &id, const std::string &desc, int len);
+
+      virtual std::vector<gr_complex> get() = 0;
+
+      virtual void set_length(int len) = 0;
+      virtual int length() const = 0;
+    };
+
+  } /* namespace blocks */
+} /* namespace gr */
+
+#endif /* INCLUDED_CTRLPORT_PROBE2_C_H */
+
diff --git a/gr-blocks/include/blocks/ctrlport_probe_c.h b/gr-blocks/include/blocks/ctrlport_probe_c.h
new file mode 100644
index 0000000000..92fe8c5600
--- /dev/null
+++ b/gr-blocks/include/blocks/ctrlport_probe_c.h
@@ -0,0 +1,62 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2012-2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_CTRLPORT_PROBE_C_H
+#define INCLUDED_CTRLPORT_PROBE_C_H
+
+#include <blocks/api.h>
+#include <gr_sync_block.h>
+#include <rpcregisterhelpers.h>
+#include <boost/thread/shared_mutex.hpp>
+
+namespace gr {
+  namespace blocks {
+
+    /*!
+     * \brief A ControlPort probe to export vectors of signals.
+     *
+     * This block acts as a sink in the flowgraph but also exports
+     * vectors of complex samples over ControlPort. This block simply
+     * sends the current vector held in the work function when the
+     * queried by a ControlPort client.
+     */
+    class BLOCKS_API ctrlport_probe_c : virtual public gr_sync_block
+    {
+    public:
+      // gr::blocks::ctrlport_probe_c::sptr
+      typedef boost::shared_ptr<ctrlport_probe_c> sptr;
+
+      /*!
+       * \brief Make a ControlPort probe block.
+       * \param id A string ID to name the probe over ControlPort.
+       * \param desc A string describing the probe.
+       */
+      static sptr make(const std::string &id, const std::string &desc);
+
+      virtual std::vector<gr_complex> get() = 0;
+    };
+
+  } /* namespace blocks */
+} /* namespace gr */
+
+#endif /* INCLUDED_CTRLPORT_GR_CTRLPORT_PROBE_C_H */
+
diff --git a/gr-blocks/lib/CMakeLists.txt b/gr-blocks/lib/CMakeLists.txt
index f0dfcf4393..50c842398e 100644
--- a/gr-blocks/lib/CMakeLists.txt
+++ b/gr-blocks/lib/CMakeLists.txt
@@ -248,6 +248,13 @@ list(APPEND gr_blocks_sources
     wavfile_source_impl.cc
 )
 
+if(ENABLE_GR_CTRLPORT)
+list(APPEND gr_blocks_sources
+  ctrlport_probe_c_impl.cc
+  ctrlport_probe2_c_impl.cc
+)
+endif(ENABLE_GR_CTRLPORT)
+
 #Add Windows DLL resource file if using MSVC
 IF(MSVC)
     include(${CMAKE_SOURCE_DIR}/cmake/Modules/GrVersion.cmake)
diff --git a/gr-blocks/lib/ctrlport_probe2_c_impl.cc b/gr-blocks/lib/ctrlport_probe2_c_impl.cc
new file mode 100644
index 0000000000..f52e605a0d
--- /dev/null
+++ b/gr-blocks/lib/ctrlport_probe2_c_impl.cc
@@ -0,0 +1,163 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2012-2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "ctrlport_probe2_c_impl.h"
+#include <gr_io_signature.h>
+
+namespace gr {
+  namespace blocks {
+
+    ctrlport_probe2_c::sptr
+    ctrlport_probe2_c::make(const std::string &id,
+                            const std::string &desc, int len)
+    {
+      return gnuradio::get_initial_sptr
+        (new ctrlport_probe2_c_impl(id, desc, len));
+    }
+
+    ctrlport_probe2_c_impl::ctrlport_probe2_c_impl(const std::string &id,
+                                                   const std::string &desc, int len)
+      : gr_sync_block("probe2_c",
+                      gr_make_io_signature(1, 1, sizeof(gr_complex)),
+                      gr_make_io_signature(0, 0, 0)),
+        d_id(id), d_desc(desc), d_len(len)
+    {
+      set_length(len);
+    }
+
+    ctrlport_probe2_c_impl::~ctrlport_probe2_c_impl()
+    {
+    }
+
+    void
+    ctrlport_probe2_c_impl::forecast(int noutput_items,
+                                     gr_vector_int &ninput_items_required)
+    {
+      // make sure all inputs have noutput_items available
+      unsigned ninputs = ninput_items_required.size();
+      for(unsigned i = 0; i < ninputs; i++)
+        ninput_items_required[i] = d_len;
+    }
+    
+    //    boost::shared_mutex mutex_buffer;
+    //    mutable boost::mutex mutex_notify;
+    //    boost::condition_variable condition_buffer_ready;
+    std::vector<gr_complex>
+    ctrlport_probe2_c_impl::get()
+    {
+      mutex_buffer.lock();
+      d_buffer.clear();
+      mutex_buffer.unlock();
+
+      // wait for condition
+      boost::mutex::scoped_lock lock(mutex_notify);
+      condition_buffer_ready.wait(lock);
+
+      mutex_buffer.lock();
+      std::vector<gr_complex> buf_copy = d_buffer;
+      assert(buf_copy.size() == d_len);
+      mutex_buffer.unlock();
+
+      return buf_copy;
+    }
+
+    void
+    ctrlport_probe2_c_impl::set_length(int len)
+    {
+      if(len > 8191) {
+        std::cerr << "probe2_c: length " << len
+                  << " exceeds maximum buffer size of 8191" << std::endl;
+        len = 8191;
+      }
+
+      d_len = len;
+      d_buffer.reserve(d_len);
+    }
+
+    int
+    ctrlport_probe2_c_impl::length() const
+    {
+      return (int)d_len;
+    }
+
+    int
+    ctrlport_probe2_c_impl::work(int noutput_items,
+                                 gr_vector_const_void_star &input_items,
+                                 gr_vector_void_star &output_items)
+    {
+      const gr_complex *in = (const gr_complex*)input_items[0];
+
+      // copy samples to get buffer if we need samples
+      mutex_buffer.lock();
+      if(d_buffer.size() < d_len) {
+        // copy smaller of remaining buffer space and num inputs to work()
+        int num_copy = std::min( (int)(d_len - d_buffer.size()), noutput_items );
+
+        // TODO: convert this to a copy operator for speed...
+        for(int i = 0; i < num_copy; i++) {
+          d_buffer.push_back(in[i]);
+        }
+    
+        // notify the waiting get() if we fill up the buffer
+        if(d_buffer.size() == d_len) {
+          condition_buffer_ready.notify_one();
+        }
+      }
+      mutex_buffer.unlock();
+    
+      return noutput_items;
+    }
+
+    void
+    ctrlport_probe2_c_impl::setup_rpc()
+    {
+#ifdef GR_CTRLPORT
+      int len = static_cast<int>(d_len);
+      d_rpc_vars.push_back(
+        rpcbasic_sptr(new rpcbasic_register_get<ctrlport_probe2_c, std::vector<std::complex<float> > >(
+        alias(), d_id.c_str(), &ctrlport_probe2_c::get,
+        pmt::make_c32vector(0,-2),
+        pmt::make_c32vector(0,2),
+        pmt::make_c32vector(0,0), 
+        "volts", d_desc.c_str(), RPC_PRIVLVL_MIN,
+        DISPXY | DISPOPTSCATTER)));
+
+      d_rpc_vars.push_back(
+        rpcbasic_sptr(new rpcbasic_register_get<ctrlport_probe2_c, int>(
+          alias(), "length", &ctrlport_probe2_c::length,
+          pmt::mp(1), pmt::mp(10*len), pmt::mp(len),
+          "samples", "get vector length", RPC_PRIVLVL_MIN, DISPNULL)));
+
+      d_rpc_vars.push_back(
+        rpcbasic_sptr(new rpcbasic_register_set<ctrlport_probe2_c, int>(
+          alias(), "length", &ctrlport_probe2_c::set_length,
+          pmt::mp(1), pmt::mp(10*len), pmt::mp(len),
+          "samples", "set vector length", RPC_PRIVLVL_MIN, DISPNULL)));
+#endif /* GR_CTRLPORT */
+    }
+
+  } /* namespace blocks */
+} /* namespace gr */
diff --git a/gr-blocks/lib/ctrlport_probe2_c_impl.h b/gr-blocks/lib/ctrlport_probe2_c_impl.h
new file mode 100644
index 0000000000..4d290a4e8f
--- /dev/null
+++ b/gr-blocks/lib/ctrlport_probe2_c_impl.h
@@ -0,0 +1,67 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2012-2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_CTRLPORT_PROBE2_C_IMPL_H
+#define INCLUDED_CTRLPORT_PROBE2_C_IMPL_H
+
+#include <blocks/ctrlport_probe2_c.h>
+#include <rpcregisterhelpers.h>
+#include <boost/thread/shared_mutex.hpp>
+
+namespace gr {
+  namespace blocks {
+
+    class ctrlport_probe2_c_impl : public ctrlport_probe2_c
+    {
+    private:
+      std::string d_id;
+      std::string d_desc;
+      size_t d_len;
+      boost::shared_mutex mutex_buffer;
+      mutable boost::mutex mutex_notify;
+      boost::condition_variable condition_buffer_ready;
+
+      std::vector<gr_complex> d_buffer;
+
+    public:
+      ctrlport_probe2_c_impl(const std::string &id, const std::string &desc, int len);
+      ~ctrlport_probe2_c_impl();
+
+      void setup_rpc();
+
+      void forecast(int noutput_items, gr_vector_int &ninput_items_required);
+
+      std::vector<gr_complex> get();
+
+      void set_length(int len);
+      int length() const;
+
+      int work(int noutput_items,
+               gr_vector_const_void_star &input_items,
+               gr_vector_void_star &output_items);
+    };
+
+  } /* namespace blocks */
+} /* namespace gr */
+
+#endif /* INCLUDED_CTRLPORT_PROBE2_C_IMPL_H */
+
diff --git a/gr-blocks/lib/ctrlport_probe_c_impl.cc b/gr-blocks/lib/ctrlport_probe_c_impl.cc
new file mode 100644
index 0000000000..e11bd0496e
--- /dev/null
+++ b/gr-blocks/lib/ctrlport_probe_c_impl.cc
@@ -0,0 +1,101 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2012-2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "ctrlport_probe_c_impl.h"
+#include <gr_io_signature.h>
+
+namespace gr {
+  namespace blocks {
+
+    ctrlport_probe_c::sptr
+    ctrlport_probe_c::make(const std::string &id,
+                           const std::string &desc)
+    {
+      return gnuradio::get_initial_sptr
+        (new ctrlport_probe_c_impl(id, desc));
+    }
+
+    ctrlport_probe_c_impl::ctrlport_probe_c_impl(const std::string &id,
+                                                 const std::string &desc)
+      : gr_sync_block("probe_c",
+                      gr_make_io_signature(1, 1, sizeof(gr_complex)),
+                      gr_make_io_signature(0, 0, 0)),
+        d_id(id), d_desc(desc), d_ptr(NULL), d_ptrLen(0)
+    {
+    }
+
+    ctrlport_probe_c_impl::~ctrlport_probe_c_impl()
+    {
+    }
+
+    std::vector<gr_complex>
+    ctrlport_probe_c_impl::get()
+    {
+      if(d_ptr != NULL && d_ptrLen > 0) {
+        ptrlock.lock();
+        std::vector<gr_complex> vec(d_ptr, d_ptr+d_ptrLen);
+        ptrlock.unlock();
+        return vec;
+      }
+      else {
+        std::vector<gr_complex> vec;
+        return vec;
+      }
+    }
+
+    int
+    ctrlport_probe_c_impl::work(int noutput_items,
+                                gr_vector_const_void_star &input_items,
+                                gr_vector_void_star &output_items)
+    {
+      const gr_complex *in = (const gr_complex*)input_items[0];
+
+      // keep reference to symbols
+      ptrlock.lock();
+      d_ptr = in;
+      d_ptrLen = noutput_items;
+      ptrlock.unlock();
+    
+      return noutput_items;
+    }
+
+    void
+    ctrlport_probe_c_impl::setup_rpc()
+    {
+#ifdef GR_CTRLPORT
+      d_rpc_vars.push_back(
+        rpcbasic_sptr(new rpcbasic_register_get<ctrlport_probe_c, std::vector<std::complex<float> > >(
+          alias(), d_id.c_str(), &ctrlport_probe_c::get, 
+          pmt::make_c32vector(0,-2),
+          pmt::make_c32vector(0,2),
+          pmt::make_c32vector(0,0), 
+          "volts", d_desc.c_str(), RPC_PRIVLVL_MIN,
+          DISPXY | DISPOPTSCATTER)));
+#endif /* GR_CTRLPORT */
+    }
+
+  } /* namespace blocks */
+} /* namespace gr */
diff --git a/gr-blocks/lib/ctrlport_probe_c_impl.h b/gr-blocks/lib/ctrlport_probe_c_impl.h
new file mode 100644
index 0000000000..5d9073ac10
--- /dev/null
+++ b/gr-blocks/lib/ctrlport_probe_c_impl.h
@@ -0,0 +1,60 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2012-2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_CTRLPORT_PROBE_C_IMPL_H
+#define INCLUDED_CTRLPORT_PROBE_C_IMPL_H
+
+#include <blocks/ctrlport_probe_c.h>
+#include <rpcregisterhelpers.h>
+#include <boost/thread/shared_mutex.hpp>
+
+namespace gr {
+  namespace blocks {
+
+    class ctrlport_probe_c_impl : public ctrlport_probe_c
+    {
+    private:
+      boost::shared_mutex ptrlock;
+
+      std::string d_id;
+      std::string d_desc;
+      const gr_complex* d_ptr;
+      size_t d_ptrLen;
+
+    public:
+      ctrlport_probe_c_impl(const std::string &id, const std::string &desc);
+      ~ctrlport_probe_c_impl();
+
+      void setup_rpc();
+
+      std::vector<gr_complex> get();
+
+      int work(int noutput_items,
+               gr_vector_const_void_star &input_items,
+               gr_vector_void_star &output_items);
+    };
+
+  } /* namespace blocks */
+} /* namespace gr */
+
+#endif /* INCLUDED_CTRLPORT_GR_CTRLPORT_PROBE_C_IMPL_H */
+
diff --git a/gr-blocks/python/qa_cpp_py_binding.py b/gr-blocks/python/qa_cpp_py_binding.py
index 950f21b9f7..c3d6a3f3bc 100755
--- a/gr-blocks/python/qa_cpp_py_binding.py
+++ b/gr-blocks/python/qa_cpp_py_binding.py
@@ -137,8 +137,8 @@ class test_cpp_py_binding(gr_unittest.TestCase):
         data = range(1,9)
 
         self.src = blocks.vector_source_c(data)
-        self.p1 = gr.ctrlport_probe_c("aaa","C++ exported variable")
-        self.p2 = gr.ctrlport_probe_c("bbb","C++ exported variable")
+        self.p1 = blocks.ctrlport_probe_c("aaa","C++ exported variable")
+        self.p2 = blocks.ctrlport_probe_c("bbb","C++ exported variable")
         probe_name = self.p2.alias()
 
         self.tb.connect(self.src, self.p1)
diff --git a/gr-blocks/swig/CMakeLists.txt b/gr-blocks/swig/CMakeLists.txt
index 84ab5b660f..1e4213fdc2 100644
--- a/gr-blocks/swig/CMakeLists.txt
+++ b/gr-blocks/swig/CMakeLists.txt
@@ -31,6 +31,10 @@ set(GR_SWIG_INCLUDE_DIRS
     ${Boost_INCLUDE_DIRS}
 )
 
+if(ENABLE_GR_CTRLPORT)
+  SET(GR_SWIG_FLAGS "-DGR_CTRLPORT")
+endif(ENABLE_GR_CTRLPORT)
+
 set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/blocks_swig_doc.i)
 set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../lib)
 set(GR_SWIG_TARGET_DEPS blocks_generated_includes)
diff --git a/gr-blocks/swig/blocks_swig.i b/gr-blocks/swig/blocks_swig.i
index 8d5d0c0114..51861de8be 100644
--- a/gr-blocks/swig/blocks_swig.i
+++ b/gr-blocks/swig/blocks_swig.i
@@ -602,3 +602,19 @@ GR_SWIG_BLOCK_MAGIC2(blocks, wavfile_source);
 GR_SWIG_BLOCK_MAGIC2(blocks, xor_bb);
 GR_SWIG_BLOCK_MAGIC2(blocks, xor_ss);
 GR_SWIG_BLOCK_MAGIC2(blocks, xor_ii);
+
+
+#ifdef GR_CTRLPORT
+
+%{
+#include "blocks/ctrlport_probe_c.h"
+#include "blocks/ctrlport_probe2_c.h"
+%}
+
+%include "blocks/ctrlport_probe_c.h"
+%include "blocks/ctrlport_probe2_c.h"
+
+GR_SWIG_BLOCK_MAGIC2(blocks, ctrlport_probe_c);
+GR_SWIG_BLOCK_MAGIC2(blocks, ctrlport_probe2_c);
+
+#endif /* GR_CTRLPORT */
diff --git a/grc/blocks/CMakeLists.txt b/grc/blocks/CMakeLists.txt
index 879c69a8ec..98b6512a09 100644
--- a/grc/blocks/CMakeLists.txt
+++ b/grc/blocks/CMakeLists.txt
@@ -20,13 +20,4 @@
 ########################################################################
 file(GLOB xml_files "*.xml")
 
-# Force out the controlport GRC blocks if we've disabled it.
-if(NOT ENABLE_GR_CTRLPORT)
-  list(REMOVE_ITEM xml_files
-    ${CMAKE_CURRENT_SOURCE_DIR}/gr_ctrlport_viewer.xml
-    ${CMAKE_CURRENT_SOURCE_DIR}/gr_ctrlport_probe_c.xml
-    ${CMAKE_CURRENT_SOURCE_DIR}/gr_ctrlport_probe2_c.xml
-    )
-endif(NOT ENABLE_GR_CTRLPORT)
-
 install(FILES ${xml_files} DESTINATION ${GRC_BLOCKS_DIR} COMPONENT "grc")
diff --git a/grc/blocks/gr_ctrlport_probe2_c.xml b/grc/blocks/gr_ctrlport_probe2_c.xml
deleted file mode 100644
index bdf77084dd..0000000000
--- a/grc/blocks/gr_ctrlport_probe2_c.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.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.
--->
-
-<block>
-  <name>Ctrlport Complex Probe (fixed len)</name>
-  <key>gr_ctrlport_probe2_c</key>
-  <category>Control Port</category>
-  <import>from gnuradio import gr</import>
-  <make>gr.ctrlport_probe2_c($name, $desc, $len)</make>
-  <callback>set_length($len)</callback>
-
-  <param>
-    <name>Name</name>
-    <key>name</key>
-    <value>constellation</value>
-    <type>string</type>
-  </param>
-
-  <param>
-    <name>Description</name>
-    <key>desc</key>
-    <value>Constellation Points</value>
-    <type>string</type>
-  </param>
-  
-  <param>
-    <name>Length</name>
-    <key>len</key>
-    <value>1024</value>
-    <type>int</type>
-  </param>
-
-
-  <sink>
-    <name>in</name>
-    <type>complex</type>
-  </sink>
-
-  <doc>
-    Place this in a graph to export complex values to a GRCP port probe.
-
-    * Version 2 allows you to specify a length in samples that you wish to get every probe
-  </doc>
-
-</block>
-
diff --git a/grc/blocks/gr_ctrlport_probe_c.xml b/grc/blocks/gr_ctrlport_probe_c.xml
deleted file mode 100644
index 17cfdd1466..0000000000
--- a/grc/blocks/gr_ctrlport_probe_c.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.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.
--->
-
-<block>
-  <name>Ctrlport Complex Probe</name>
-  <key>gr_ctrlport_probe_c</key>
-  <category>Control Port</category>
-  <import>from gnuradio import gr</import>
-  <make>gr.ctrlport_probe_c($name, $desc)</make>
-
-  <param>
-    <name>Name</name>
-    <key>name</key>
-    <value>constellation</value>
-    <type>string</type>
-  </param>
-
-  <param>
-    <name>Description</name>
-    <key>desc</key>
-    <value>Constellation Points</value>
-    <type>string</type>
-  </param>
-
-
-  <sink>
-    <name>in</name>
-    <type>complex</type>
-  </sink>
-
-  <doc>
-    Place this in a graph to export complex values to a GRCP port probe.
-  </doc>
-
-</block>
-
diff --git a/grc/blocks/gr_ctrlport_viewer.xml b/grc/blocks/gr_ctrlport_viewer.xml
deleted file mode 100644
index e7d8d4c2d4..0000000000
--- a/grc/blocks/gr_ctrlport_viewer.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.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.
--->
-
-<block>
-  <name>CtrlPort Monitor</name>
-  <key>ctrlport_monitor</key>
-  <category>Control Port</category>
-  <import>from gnuradio.ctrlport.monitor import *</import>
-  <make>not $en or monitor()</make>
-  <param>
-    <name>Enabled</name>
-    <key>en</key>
-    <value></value>
-    <type>enum</type>
-        <option>
-            <name>True</name>
-            <key>True</key>
-        </option>
-        <option>
-            <name>False</name>
-            <key>False</key>
-      </option>
-  </param>
-
-  <doc>
-    Place this in a graph to launch a QtPy GR CtrlPort Monitor app.
-  </doc>
-
-</block>
-
diff --git a/grc/blocks/gr_feedforward_agc_cc.xml b/grc/blocks/gr_feedforward_agc_cc.xml
deleted file mode 100644
index 24e80953f4..0000000000
--- a/grc/blocks/gr_feedforward_agc_cc.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Feed Forward AGC
-###################################################
- -->
-<block>
-	<name>Feed Forward AGC</name>
-	<key>gr_feedforward_agc_cc</key>
-	<import>from gnuradio import gr</import>
-	<make>gr.feedforward_agc_cc($num_samples, $reference)</make>
-	<param>
-		<name>Num Samples</name>
-		<key>num_samples</key>
-		<value>1024</value>
-		<type>int</type>
-	</param>
-	<param>
-		<name>Reference</name>
-		<key>reference</key>
-		<value>1.0</value>
-		<type>real</type>
-	</param>
-	<sink>
-		<name>in</name>
-		<type>complex</type>
-	</sink>
-	<source>
-		<name>out</name>
-		<type>complex</type>
-	</source>
-</block>
-- 
cgit v1.2.3