summaryrefslogtreecommitdiff
path: root/gr-pager
diff options
context:
space:
mode:
authorJohnathan Corgan2009-12-12 09:34:35 -0800
committerJohnathan Corgan2009-12-12 09:34:35 -0800
commitbdf985aa55ed90394f9015ac7577892dba7e5cae (patch)
tree2786e704053f248cace6b61608fece4db21f6541 /gr-pager
parent861d2d1b16e708b65087b86e864980415abd123f (diff)
parent34c64290e3146b50053494839847e9f894d98493 (diff)
downloadgnuradio-bdf985aa55ed90394f9015ac7577892dba7e5cae.tar.gz
gnuradio-bdf985aa55ed90394f9015ac7577892dba7e5cae.tar.bz2
gnuradio-bdf985aa55ed90394f9015ac7577892dba7e5cae.zip
Merge branch 'wip/pager' of git@gnuradio.org:jcorgan
Merge-fix: Fix erroneous EXTRA_DIST in lib/ Merge-fix: Don't install usrp_rx_flex.py (unfinished)
Diffstat (limited to 'gr-pager')
-rw-r--r--gr-pager/Makefile.am6
-rw-r--r--gr-pager/apps/.gitignore2
-rw-r--r--gr-pager/apps/Makefile.am36
-rwxr-xr-xgr-pager/apps/usrp_flex.py (renamed from gr-pager/src/usrp_flex.py)0
-rwxr-xr-xgr-pager/apps/usrp_flex_all.py (renamed from gr-pager/src/usrp_flex_all.py)0
-rwxr-xr-xgr-pager/apps/usrp_flex_band.py (renamed from gr-pager/src/usrp_flex_band.py)0
-rw-r--r--gr-pager/apps/usrp_rx_flex.grc1804
-rwxr-xr-xgr-pager/apps/usrp_rx_flex.py434
-rw-r--r--gr-pager/grc/.gitignore1
-rw-r--r--gr-pager/grc/Makefile.am29
-rw-r--r--gr-pager/grc/pager_flex_deinterleave.xml23
-rw-r--r--gr-pager/grc/pager_flex_sync.xml36
-rw-r--r--gr-pager/grc/pager_slicer_fb.xml31
-rw-r--r--gr-pager/lib/.gitignore4
-rw-r--r--gr-pager/lib/Makefile.am53
-rw-r--r--gr-pager/lib/Makefile.swig.gen (renamed from gr-pager/src/Makefile.swig.gen)0
-rw-r--r--gr-pager/lib/pager_flex_deinterleave.cc (renamed from gr-pager/src/pager_flex_deinterleave.cc)0
-rw-r--r--gr-pager/lib/pager_flex_deinterleave.h (renamed from gr-pager/src/pager_flex_deinterleave.h)0
-rw-r--r--gr-pager/lib/pager_flex_frame.cc (renamed from gr-pager/src/pager_flex_frame.cc)0
-rw-r--r--gr-pager/lib/pager_flex_frame.h (renamed from gr-pager/src/pager_flex_frame.h)0
-rw-r--r--gr-pager/lib/pager_flex_parse.cc (renamed from gr-pager/src/pager_flex_parse.cc)0
-rw-r--r--gr-pager/lib/pager_flex_parse.h (renamed from gr-pager/src/pager_flex_parse.h)0
-rw-r--r--gr-pager/lib/pager_flex_sync.cc (renamed from gr-pager/src/pager_flex_sync.cc)0
-rw-r--r--gr-pager/lib/pager_flex_sync.h (renamed from gr-pager/src/pager_flex_sync.h)0
-rw-r--r--gr-pager/lib/pager_slicer_fb.cc (renamed from gr-pager/src/pager_slicer_fb.cc)0
-rw-r--r--gr-pager/lib/pager_slicer_fb.h (renamed from gr-pager/src/pager_slicer_fb.h)0
-rw-r--r--gr-pager/lib/pageri_bch3221.cc (renamed from gr-pager/src/pageri_bch3221.cc)0
-rw-r--r--gr-pager/lib/pageri_bch3221.h (renamed from gr-pager/src/pageri_bch3221.h)0
-rw-r--r--gr-pager/lib/pageri_flex_modes.cc (renamed from gr-pager/src/pageri_flex_modes.cc)0
-rw-r--r--gr-pager/lib/pageri_flex_modes.h (renamed from gr-pager/src/pageri_flex_modes.h)0
-rw-r--r--gr-pager/lib/pageri_util.cc (renamed from gr-pager/src/pageri_util.cc)0
-rw-r--r--gr-pager/lib/pageri_util.h (renamed from gr-pager/src/pageri_util.h)0
-rw-r--r--gr-pager/python/.gitignore2
-rw-r--r--gr-pager/python/Makefile.am39
-rw-r--r--gr-pager/python/__init__.py (renamed from gr-pager/src/__init__.py)0
-rw-r--r--gr-pager/python/flex_demod.py (renamed from gr-pager/src/flex_demod.py)0
-rw-r--r--gr-pager/python/pager_utils.py (renamed from gr-pager/src/pager_utils.py)0
-rwxr-xr-xgr-pager/python/qa_pager.py (renamed from gr-pager/src/qa_pager.py)0
-rw-r--r--gr-pager/python/run_tests.in (renamed from gr-pager/src/run_tests.in)0
-rw-r--r--gr-pager/src/pager_swig.i89
-rw-r--r--gr-pager/swig/.gitignore (renamed from gr-pager/src/.gitignore)2
-rw-r--r--gr-pager/swig/Makefile.am (renamed from gr-pager/src/Makefile.am)65
-rw-r--r--gr-pager/swig/Makefile.swig.gen259
-rw-r--r--gr-pager/swig/pager_flex_deinterleave.i11
-rw-r--r--gr-pager/swig/pager_flex_frame.i (renamed from gr-pager/src/pager_flex_frame.i)0
-rw-r--r--gr-pager/swig/pager_flex_parse.i11
-rw-r--r--gr-pager/swig/pager_flex_sync.i11
-rw-r--r--gr-pager/swig/pager_slicer_fb.i12
-rw-r--r--gr-pager/swig/pager_swig.i36
49 files changed, 2850 insertions, 146 deletions
diff --git a/gr-pager/Makefile.am b/gr-pager/Makefile.am
index d73e4050f..002387c0c 100644
--- a/gr-pager/Makefile.am
+++ b/gr-pager/Makefile.am
@@ -21,7 +21,11 @@
include $(top_srcdir)/Makefile.common
-SUBDIRS = src
+SUBDIRS = lib
+
+if PYTHON
+SUBDIRS += swig python apps grc
+endif
pkgconfigdir = $(libdir)/pkgconfig
dist_pkgconfig_DATA = gnuradio-pager.pc
diff --git a/gr-pager/apps/.gitignore b/gr-pager/apps/.gitignore
new file mode 100644
index 000000000..282522db0
--- /dev/null
+++ b/gr-pager/apps/.gitignore
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
diff --git a/gr-pager/apps/Makefile.am b/gr-pager/apps/Makefile.am
new file mode 100644
index 000000000..7b495fd2b
--- /dev/null
+++ b/gr-pager/apps/Makefile.am
@@ -0,0 +1,36 @@
+#
+# Copyright 2009 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 $(top_srcdir)/Makefile.common
+
+if PYTHON
+
+dist_bin_SCRIPTS = \
+ usrp_flex.py \
+ usrp_flex_all.py \
+ usrp_flex_band.py
+
+noinst_PYTHON = \
+ usrp_rx_flex.py
+endif
+
+EXTRA_DIST = \
+ usrp_rx_flex.grc
diff --git a/gr-pager/src/usrp_flex.py b/gr-pager/apps/usrp_flex.py
index f8d9d25b1..f8d9d25b1 100755
--- a/gr-pager/src/usrp_flex.py
+++ b/gr-pager/apps/usrp_flex.py
diff --git a/gr-pager/src/usrp_flex_all.py b/gr-pager/apps/usrp_flex_all.py
index 14f9151de..14f9151de 100755
--- a/gr-pager/src/usrp_flex_all.py
+++ b/gr-pager/apps/usrp_flex_all.py
diff --git a/gr-pager/src/usrp_flex_band.py b/gr-pager/apps/usrp_flex_band.py
index 06c2488c0..06c2488c0 100755
--- a/gr-pager/src/usrp_flex_band.py
+++ b/gr-pager/apps/usrp_flex_band.py
diff --git a/gr-pager/apps/usrp_rx_flex.grc b/gr-pager/apps/usrp_rx_flex.grc
new file mode 100644
index 000000000..b9461a57f
--- /dev/null
+++ b/gr-pager/apps/usrp_rx_flex.grc
@@ -0,0 +1,1804 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+ <timestamp>Thu Oct 29 11:01:22 2009</timestamp>
+ <block>
+ <key>options</key>
+ <param>
+ <key>id</key>
+ <value>usrp_rx_flex</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>USRP FLEX Pager Receiver (Single Channel)</value>
+ </param>
+ <param>
+ <key>author</key>
+ <value></value>
+ </param>
+ <param>
+ <key>description</key>
+ <value></value>
+ </param>
+ <param>
+ <key>window_size</key>
+ <value>4095,4095</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>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>adc_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>64e6</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(225, 12)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>sample_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>adc_rate/decim</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(382, 12)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>freq</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>band_freq+(channel-61)*25e3</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(480, 11)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>wxgui_fftsink2</key>
+ <param>
+ <key>id</key>
+ <value>wxgui_fftsink2_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>FLEX Spectrum</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>sample_rate</value>
+ </param>
+ <param>
+ <key>baseband_freq</key>
+ <value>band_freq</value>
+ </param>
+ <param>
+ <key>y_per_div</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>y_divs</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ref_level</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ref_scale</key>
+ <value>65536</value>
+ </param>
+ <param>
+ <key>fft_size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>fft_rate</key>
+ <value>30</value>
+ </param>
+ <param>
+ <key>peak_hold</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>avg_alpha</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>win</key>
+ <value>None</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>0,0,1,1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value>displays,0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(34, 508)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ </block>
+ <block>
+ <key>notebook</key>
+ <param>
+ <key>id</key>
+ <value>displays</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>style</key>
+ <value>wx.NB_TOP</value>
+ </param>
+ <param>
+ <key>labels</key>
+ <value>['RX Spectrum','Baseband']</value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>1, 0, 1, 5</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(9, 209)</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 os, math</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(10, 76)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>usrp_simple_source_x</key>
+ <param>
+ <key>id</key>
+ <value>usrp_source</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>format</key>
+ <value></value>
+ </param>
+ <param>
+ <key>which</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>decimation</key>
+ <value>decim</value>
+ </param>
+ <param>
+ <key>frequency</key>
+ <value>band_freq</value>
+ </param>
+ <param>
+ <key>lo_offset</key>
+ <value>float('inf')</value>
+ </param>
+ <param>
+ <key>gain</key>
+ <value>rx_gain</value>
+ </param>
+ <param>
+ <key>side</key>
+ <value>A</value>
+ </param>
+ <param>
+ <key>rx_ant</key>
+ <value>RXA</value>
+ </param>
+ <param>
+ <key>hb_filters</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(32, 734)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_freq_xlating_fir_filter_xxx</key>
+ <param>
+ <key>id</key>
+ <value>gr_freq_xlating_fir_filter_xxx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>ccc</value>
+ </param>
+ <param>
+ <key>decim</key>
+ <value>channel_decim</value>
+ </param>
+ <param>
+ <key>taps</key>
+ <value>channel_taps</value>
+ </param>
+ <param>
+ <key>center_freq</key>
+ <value>band_freq-freq+offset</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>sample_rate</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(321, 750)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>wxgui_fftsink2</key>
+ <param>
+ <key>id</key>
+ <value>wxgui_fftsink2_1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Channel Spectrum</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>channel_rate</value>
+ </param>
+ <param>
+ <key>baseband_freq</key>
+ <value>freq</value>
+ </param>
+ <param>
+ <key>y_per_div</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>y_divs</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ref_level</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ref_scale</key>
+ <value>65536</value>
+ </param>
+ <param>
+ <key>fft_size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>fft_rate</key>
+ <value>30</value>
+ </param>
+ <param>
+ <key>peak_hold</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>avg_alpha</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>win</key>
+ <value>None</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>1, 0, 1, 1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value>displays, 0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(344, 511)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>decim</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(310, 11)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>symbol_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>3200</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(590, 12)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>channel_decim</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>int(sample_rate/channel_rate)</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(906, 12)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>deviation</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>4800</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(688, 14)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>demod_k</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>3*channel_rate/(2*math.pi*deviation)</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(598, 857)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>channel_taps</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>firdes.low_pass(10, sample_rate, passband/2.0, (channel_rate-passband)/2.0)</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(325, 857)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>config_filename</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>os.environ["HOME"]+"/.gnuradio/config.conf"</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(9, 133)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_config</key>
+ <param>
+ <key>id</key>
+ <value>saved_band_freq</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>930.5125e6</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>real</value>
+ </param>
+ <param>
+ <key>config_file</key>
+ <value>config_filename</value>
+ </param>
+ <param>
+ <key>section</key>
+ <value>gr-pager</value>
+ </param>
+ <param>
+ <key>option</key>
+ <value>band_center</value>
+ </param>
+ <param>
+ <key>writeback</key>
+ <value>band_freq</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(228, 311)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_config</key>
+ <param>
+ <key>id</key>
+ <value>saved_channel</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>25</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>int</value>
+ </param>
+ <param>
+ <key>config_file</key>
+ <value>config_filename</value>
+ </param>
+ <param>
+ <key>section</key>
+ <value>gr-pager</value>
+ </param>
+ <param>
+ <key>option</key>
+ <value>channel</value>
+ </param>
+ <param>
+ <key>writeback</key>
+ <value>channel</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(387, 312)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_config</key>
+ <param>
+ <key>id</key>
+ <value>saved_offset</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>real</value>
+ </param>
+ <param>
+ <key>config_file</key>
+ <value>config_filename</value>
+ </param>
+ <param>
+ <key>section</key>
+ <value>gr-pager</value>
+ </param>
+ <param>
+ <key>option</key>
+ <value>freq_offset</value>
+ </param>
+ <param>
+ <key>writeback</key>
+ <value>offset</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(547, 312)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_config</key>
+ <param>
+ <key>id</key>
+ <value>saved_rx_gain</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>40</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>int</value>
+ </param>
+ <param>
+ <key>config_file</key>
+ <value>config_filename</value>
+ </param>
+ <param>
+ <key>section</key>
+ <value>gr-pager</value>
+ </param>
+ <param>
+ <key>option</key>
+ <value>rx_gain</value>
+ </param>
+ <param>
+ <key>writeback</key>
+ <value>rx_gain</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(706, 312)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_text_box</key>
+ <param>
+ <key>id</key>
+ <value>band_freq</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Band Freq.</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>saved_band_freq</value>
+ </param>
+ <param>
+ <key>converver</key>
+ <value>float_converter</value>
+ </param>
+ <param>
+ <key>formatter</key>
+ <value>None</value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>0, 0, 1, 1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(225, 121)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_static_text</key>
+ <param>
+ <key>id</key>
+ <value>freq_text</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Ch. Freq</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>freq</value>
+ </param>
+ <param>
+ <key>converver</key>
+ <value>float_converter</value>
+ </param>
+ <param>
+ <key>formatter</key>
+ <value>None</value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>0, 2, 1, 1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(801, 124)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>passband</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>2*(deviation+symbol_rate)</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(327, 930)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>channel_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>8*3200</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(792, 13)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_slider</key>
+ <param>
+ <key>id</key>
+ <value>channel</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Channel</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>saved_channel</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>120</value>
+ </param>
+ <param>
+ <key>num_steps</key>
+ <value>119</value>
+ </param>
+ <param>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
+ </param>
+ <param>
+ <key>converver</key>
+ <value>int_converter</value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>0, 1, 1, 1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(376, 120)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_slider</key>
+ <param>
+ <key>id</key>
+ <value>rx_gain</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Analog Gain</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>saved_rx_gain</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>100</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>int_converter</value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>0, 4, 1, 1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(658, 122)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_slider</key>
+ <param>
+ <key>id</key>
+ <value>offset</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Freq. Offset</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>saved_offset</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>-12.5e3</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>12.5e3</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>0, 3, 1, 1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(518, 118)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_quadrature_demod_cf</key>
+ <param>
+ <key>id</key>
+ <value>fm_demod</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gain</key>
+ <value>demod_k</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(599, 774)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>baseband_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>16000</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1019, 17)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>nchan_taps</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>len(channel_taps)</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(412, 931)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>ma_ntaps</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>int(channel_rate/symbol_rate)</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(850, 863)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>bb_interp</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>5</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(938, 862)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>virtual_sink</key>
+ <param>
+ <key>id</key>
+ <value>virtual_sink_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>baseband</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1100, 774)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blks2_rational_resampler_xxx</key>
+ <param>
+ <key>id</key>
+ <value>resampler</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>fff</value>
+ </param>
+ <param>
+ <key>decim</key>
+ <value>bb_decim</value>
+ </param>
+ <param>
+ <key>interp</key>
+ <value>bb_interp</value>
+ </param>
+ <param>
+ <key>taps</key>
+ <value>[1.0/ma_ntaps,]*ma_ntaps*bb_interp</value>
+ </param>
+ <param>
+ <key>fractional_bw</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(851, 750)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>bb_decim</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>8</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1027, 864)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>wxgui_scopesink2</key>
+ <param>
+ <key>id</key>
+ <value>wxgui_scopesink2_0_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Baseband</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>16e3</value>
+ </param>
+ <param>
+ <key>v_scale</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>v_offset</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>t_scale</key>
+ <value>40.0/16e3</value>
+ </param>
+ <param>
+ <key>ac_couple</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>xy_mode</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>0, 0, 1, 1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value>displays, 1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(851, 586)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ </block>
+ <block>
+ <key>virtual_source</key>
+ <param>
+ <key>id</key>
+ <value>virtual_source_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>baseband</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(79, 1186)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>pager_slicer_fb</key>
+ <param>
+ <key>id</key>
+ <value>pager_slicer_fb_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alpha</key>
+ <value>1e-6</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(304, 1186)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>wxgui_scopesink2</key>
+ <param>
+ <key>id</key>
+ <value>wxgui_scopesink2_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Slicer Output</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>baseband_rate</value>
+ </param>
+ <param>
+ <key>v_scale</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>v_offset</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>t_scale</key>
+ <value>40.0/baseband_rate</value>
+ </param>
+ <param>
+ <key>ac_couple</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>xy_mode</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>1,0,1,1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value>displays, 1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(75, 1044)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_char_to_float</key>
+ <param>
+ <key>id</key>
+ <value>gr_char_to_float_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(325, 1088)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ </block>
+ <block>
+ <key>pager_flex_sync</key>
+ <param>
+ <key>id</key>
+ <value>pager_flex_sync_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(529, 1139)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>pager_flex_deinterleave</key>
+ <param>
+ <key>id</key>
+ <value>pager_flex_deinterleave_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(777, 1116)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_null_sink</key>
+ <param>
+ <key>id</key>
+ <value>gr_null_sink_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>int</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1042, 1116)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>pager_flex_deinterleave</key>
+ <param>
+ <key>id</key>
+ <value>pager_flex_deinterleave_0_1_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(778, 1168)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>pager_flex_deinterleave</key>
+ <param>
+ <key>id</key>
+ <value>pager_flex_deinterleave_0_1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(776, 1225)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>pager_flex_deinterleave</key>
+ <param>
+ <key>id</key>
+ <value>pager_flex_deinterleave_0_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(776, 1273)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_null_sink</key>
+ <param>
+ <key>id</key>
+ <value>gr_null_sink_0_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>int</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1042, 1168)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_null_sink</key>
+ <param>
+ <key>id</key>
+ <value>gr_null_sink_0_1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>int</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1041, 1225)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_null_sink</key>
+ <param>
+ <key>id</key>
+ <value>gr_null_sink_0_2</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>int</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1040, 1273)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <connection>
+ <source_block_id>gr_freq_xlating_fir_filter_xxx_0</source_block_id>
+ <sink_block_id>wxgui_fftsink2_1</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>usrp_source</source_block_id>
+ <sink_block_id>gr_freq_xlating_fir_filter_xxx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>usrp_source</source_block_id>
+ <sink_block_id>wxgui_fftsink2_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_freq_xlating_fir_filter_xxx_0</source_block_id>
+ <sink_block_id>fm_demod</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>resampler</source_block_id>
+ <sink_block_id>wxgui_scopesink2_0_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>fm_demod</source_block_id>
+ <sink_block_id>resampler</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>resampler</source_block_id>
+ <sink_block_id>virtual_sink_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>pager_slicer_fb_0</source_block_id>
+ <sink_block_id>pager_flex_sync_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>virtual_source_0</source_block_id>
+ <sink_block_id>pager_slicer_fb_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>pager_slicer_fb_0</source_block_id>
+ <sink_block_id>gr_char_to_float_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_char_to_float_0</source_block_id>
+ <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>pager_flex_sync_0</source_block_id>
+ <sink_block_id>pager_flex_deinterleave_0_1_0</sink_block_id>
+ <source_key>1</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>pager_flex_sync_0</source_block_id>
+ <sink_block_id>pager_flex_deinterleave_0_1</sink_block_id>
+ <source_key>2</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>pager_flex_sync_0</source_block_id>
+ <sink_block_id>pager_flex_deinterleave_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>pager_flex_sync_0</source_block_id>
+ <sink_block_id>pager_flex_deinterleave_0_0</sink_block_id>
+ <source_key>3</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>pager_flex_deinterleave_0</source_block_id>
+ <sink_block_id>gr_null_sink_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>pager_flex_deinterleave_0_1_0</source_block_id>
+ <sink_block_id>gr_null_sink_0_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>pager_flex_deinterleave_0_1</source_block_id>
+ <sink_block_id>gr_null_sink_0_1</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>pager_flex_deinterleave_0_0</source_block_id>
+ <sink_block_id>gr_null_sink_0_2</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+</flow_graph>
diff --git a/gr-pager/apps/usrp_rx_flex.py b/gr-pager/apps/usrp_rx_flex.py
new file mode 100755
index 000000000..47bf5a3df
--- /dev/null
+++ b/gr-pager/apps/usrp_rx_flex.py
@@ -0,0 +1,434 @@
+#!/usr/bin/env python
+##################################################
+# Gnuradio Python Flow Graph
+# Title: USRP FLEX Pager Receiver (Single Channel)
+# Generated: Thu Oct 29 11:03:16 2009
+##################################################
+
+from gnuradio import blks2
+from gnuradio import eng_notation
+from gnuradio import gr
+from gnuradio import pager
+from gnuradio import window
+from gnuradio.eng_option import eng_option
+from gnuradio.gr import firdes
+from gnuradio.wxgui import fftsink2
+from gnuradio.wxgui import forms
+from gnuradio.wxgui import scopesink2
+from grc_gnuradio import usrp as grc_usrp
+from grc_gnuradio import wxgui as grc_wxgui
+from optparse import OptionParser
+import ConfigParser
+import os, math
+import wx
+
+class usrp_rx_flex(grc_wxgui.top_block_gui):
+
+ def __init__(self):
+ grc_wxgui.top_block_gui.__init__(self, title="USRP FLEX Pager Receiver (Single Channel)")
+
+ ##################################################
+ # Variables
+ ##################################################
+ self.config_filename = config_filename = os.environ["HOME"]+"/.gnuradio/config.conf"
+ self.symbol_rate = symbol_rate = 3200
+ self._saved_channel_config = ConfigParser.ConfigParser()
+ self._saved_channel_config.read(config_filename)
+ try: saved_channel = self._saved_channel_config.getint("gr-pager", "channel")
+ except: saved_channel = 25
+ self.saved_channel = saved_channel
+ self._saved_band_freq_config = ConfigParser.ConfigParser()
+ self._saved_band_freq_config.read(config_filename)
+ try: saved_band_freq = self._saved_band_freq_config.getfloat("gr-pager", "band_center")
+ except: saved_band_freq = 930.5125e6
+ self.saved_band_freq = saved_band_freq
+ self.deviation = deviation = 4800
+ self.decim = decim = 20
+ self.adc_rate = adc_rate = 64e6
+ self.sample_rate = sample_rate = adc_rate/decim
+ self.passband = passband = 2*(deviation+symbol_rate)
+ self.channel_rate = channel_rate = 8*3200
+ self.channel = channel = saved_channel
+ self.band_freq = band_freq = saved_band_freq
+ self._saved_rx_gain_config = ConfigParser.ConfigParser()
+ self._saved_rx_gain_config.read(config_filename)
+ try: saved_rx_gain = self._saved_rx_gain_config.getint("gr-pager", "rx_gain")
+ except: saved_rx_gain = 40
+ self.saved_rx_gain = saved_rx_gain
+ self._saved_offset_config = ConfigParser.ConfigParser()
+ self._saved_offset_config.read(config_filename)
+ try: saved_offset = self._saved_offset_config.getfloat("gr-pager", "freq_offset")
+ except: saved_offset = 0
+ self.saved_offset = saved_offset
+ self.freq = freq = band_freq+(channel-61)*25e3
+ self.channel_taps = channel_taps = firdes.low_pass(10, sample_rate, passband/2.0, (channel_rate-passband)/2.0)
+ self.rx_gain = rx_gain = saved_rx_gain
+ self.offset = offset = saved_offset
+ self.nchan_taps = nchan_taps = len(channel_taps)
+ self.ma_ntaps = ma_ntaps = int(channel_rate/symbol_rate)
+ self.freq_text = freq_text = freq
+ self.demod_k = demod_k = 3*channel_rate/(2*math.pi*deviation)
+ self.channel_decim = channel_decim = int(sample_rate/channel_rate)
+ self.bb_interp = bb_interp = 5
+ self.bb_decim = bb_decim = 8
+ self.baseband_rate = baseband_rate = 16000
+
+ ##################################################
+ # Notebooks
+ ##################################################
+ self.displays = wx.Notebook(self.GetWin(), style=wx.NB_TOP)
+ self.displays.AddPage(grc_wxgui.Panel(self.displays), "RX Spectrum")
+ self.displays.AddPage(grc_wxgui.Panel(self.displays), "Baseband")
+ self.GridAdd(self.displays, 1, 0, 1, 5)
+
+ ##################################################
+ # Controls
+ ##################################################
+ _channel_sizer = wx.BoxSizer(wx.VERTICAL)
+ self._channel_text_box = forms.text_box(
+ parent=self.GetWin(),
+ sizer=_channel_sizer,
+ value=self.channel,
+ callback=self.set_channel,
+ label="Channel",
+ converter=forms.int_converter(),
+ proportion=0,
+ )
+ self._channel_slider = forms.slider(
+ parent=self.GetWin(),
+ sizer=_channel_sizer,
+ value=self.channel,
+ callback=self.set_channel,
+ minimum=1,
+ maximum=120,
+ num_steps=119,
+ style=wx.SL_HORIZONTAL,
+ cast=int,
+ proportion=1,
+ )
+ self.GridAdd(_channel_sizer, 0, 1, 1, 1)
+ self._band_freq_text_box = forms.text_box(
+ parent=self.GetWin(),
+ value=self.band_freq,
+ callback=self.set_band_freq,
+ label="Band Freq.",
+ converter=forms.float_converter(),
+ )
+ self.GridAdd(self._band_freq_text_box, 0, 0, 1, 1)
+ _rx_gain_sizer = wx.BoxSizer(wx.VERTICAL)
+ self._rx_gain_text_box = forms.text_box(
+ parent=self.GetWin(),
+ sizer=_rx_gain_sizer,
+ value=self.rx_gain,
+ callback=self.set_rx_gain,
+ label="Analog Gain",
+ converter=forms.int_converter(),
+ proportion=0,
+ )
+ self._rx_gain_slider = forms.slider(
+ parent=self.GetWin(),
+ sizer=_rx_gain_sizer,
+ value=self.rx_gain,
+ callback=self.set_rx_gain,
+ minimum=0,
+ maximum=100,
+ num_steps=100,
+ style=wx.SL_HORIZONTAL,
+ cast=int,
+ proportion=1,
+ )
+ self.GridAdd(_rx_gain_sizer, 0, 4, 1, 1)
+ _offset_sizer = wx.BoxSizer(wx.VERTICAL)
+ self._offset_text_box = forms.text_box(
+ parent=self.GetWin(),
+ sizer=_offset_sizer,
+ value=self.offset,
+ callback=self.set_offset,
+ label="Freq. Offset",
+ converter=forms.float_converter(),
+ proportion=0,
+ )
+ self._offset_slider = forms.slider(
+ parent=self.GetWin(),
+ sizer=_offset_sizer,
+ value=self.offset,
+ callback=self.set_offset,
+ minimum=-12.5e3,
+ maximum=12.5e3,
+ num_steps=100,
+ style=wx.SL_HORIZONTAL,
+ cast=float,
+ proportion=1,
+ )
+ self.GridAdd(_offset_sizer, 0, 3, 1, 1)
+ self._freq_text_static_text = forms.static_text(
+ parent=self.GetWin(),
+ value=self.freq_text,
+ callback=self.set_freq_text,
+ label="Ch. Freq",
+ converter=forms.float_converter(),
+ )
+ self.GridAdd(self._freq_text_static_text, 0, 2, 1, 1)
+
+ ##################################################
+ # Blocks
+ ##################################################
+ self.fm_demod = gr.quadrature_demod_cf(demod_k)
+ self.gr_freq_xlating_fir_filter_xxx_0 = gr.freq_xlating_fir_filter_ccc(channel_decim, (channel_taps), band_freq-freq+offset, sample_rate)
+ self.gr_null_sink_0 = gr.null_sink(gr.sizeof_int*1)
+ self.gr_null_sink_0_0 = gr.null_sink(gr.sizeof_int*1)
+ self.gr_null_sink_0_1 = gr.null_sink(gr.sizeof_int*1)
+ self.gr_null_sink_0_2 = gr.null_sink(gr.sizeof_int*1)
+ self.pager_flex_deinterleave_0 = pager.flex_deinterleave()
+ self.pager_flex_deinterleave_0_0 = pager.flex_deinterleave()
+ self.pager_flex_deinterleave_0_1 = pager.flex_deinterleave()
+ self.pager_flex_deinterleave_0_1_0 = pager.flex_deinterleave()
+ self.pager_flex_sync_0 = pager.flex_sync()
+ self.pager_slicer_fb_0 = pager.slicer_fb(1e-6)
+ self.resampler = blks2.rational_resampler_fff(
+ interpolation=bb_interp,
+ decimation=bb_decim,
+ taps=([1.0/ma_ntaps,]*ma_ntaps*bb_interp),
+ fractional_bw=None,
+ )
+ self.usrp_source = grc_usrp.simple_source_c(which=0, side="A", rx_ant="RXA")
+ self.usrp_source.set_decim_rate(decim)
+ self.usrp_source.set_frequency(band_freq, verbose=True)
+ self.usrp_source.set_gain(rx_gain)
+ self.wxgui_fftsink2_0 = fftsink2.fft_sink_c(
+ self.displays.GetPage(0).GetWin(),
+ baseband_freq=band_freq,
+ y_per_div=10,
+ y_divs=10,
+ ref_level=0,
+ ref_scale=65536,
+ sample_rate=sample_rate,
+ fft_size=1024,
+ fft_rate=30,
+ average=False,
+ avg_alpha=None,
+ title="FLEX Spectrum",
+ peak_hold=False,
+ )
+ self.displays.GetPage(0).GridAdd(self.wxgui_fftsink2_0.win, 0, 0, 1, 1)
+ self.wxgui_fftsink2_1 = fftsink2.fft_sink_c(
+ self.displays.GetPage(0).GetWin(),
+ baseband_freq=freq,
+ y_per_div=10,
+ y_divs=10,
+ ref_level=0,
+ ref_scale=65536,
+ sample_rate=channel_rate,
+ fft_size=1024,
+ fft_rate=30,
+ average=False,
+ avg_alpha=None,
+ title="Channel Spectrum",
+ peak_hold=False,
+ )
+ self.displays.GetPage(0).GridAdd(self.wxgui_fftsink2_1.win, 1, 0, 1, 1)
+ self.wxgui_scopesink2_0_0 = scopesink2.scope_sink_f(
+ self.displays.GetPage(1).GetWin(),
+ title="Baseband",
+ sample_rate=16e3,
+ v_scale=1,
+ v_offset=0,
+ t_scale=40.0/16e3,
+ ac_couple=False,
+ xy_mode=False,
+ num_inputs=1,
+ )
+ self.displays.GetPage(1).GridAdd(self.wxgui_scopesink2_0_0.win, 0, 0, 1, 1)
+
+ ##################################################
+ # Connections
+ ##################################################
+ self.connect((self.gr_freq_xlating_fir_filter_xxx_0, 0), (self.wxgui_fftsink2_1, 0))
+ self.connect((self.usrp_source, 0), (self.gr_freq_xlating_fir_filter_xxx_0, 0))
+ self.connect((self.usrp_source, 0), (self.wxgui_fftsink2_0, 0))
+ self.connect((self.gr_freq_xlating_fir_filter_xxx_0, 0), (self.fm_demod, 0))
+ self.connect((self.resampler, 0), (self.wxgui_scopesink2_0_0, 0))
+ self.connect((self.fm_demod, 0), (self.resampler, 0))
+ self.connect((self.pager_slicer_fb_0, 0), (self.pager_flex_sync_0, 0))
+ self.connect((self.resampler, 0), (self.pager_slicer_fb_0, 0))
+ self.connect((self.pager_flex_sync_0, 1), (self.pager_flex_deinterleave_0_1_0, 0))
+ self.connect((self.pager_flex_sync_0, 2), (self.pager_flex_deinterleave_0_1, 0))
+ self.connect((self.pager_flex_sync_0, 0), (self.pager_flex_deinterleave_0, 0))
+ self.connect((self.pager_flex_sync_0, 3), (self.pager_flex_deinterleave_0_0, 0))
+ self.connect((self.pager_flex_deinterleave_0, 0), (self.gr_null_sink_0, 0))
+ self.connect((self.pager_flex_deinterleave_0_1_0, 0), (self.gr_null_sink_0_0, 0))
+ self.connect((self.pager_flex_deinterleave_0_1, 0), (self.gr_null_sink_0_1, 0))
+ self.connect((self.pager_flex_deinterleave_0_0, 0), (self.gr_null_sink_0_2, 0))
+
+ def set_config_filename(self, config_filename):
+ self.config_filename = config_filename
+ self._saved_band_freq_config = ConfigParser.ConfigParser()
+ self._saved_band_freq_config.read(self.config_filename)
+ if not self._saved_band_freq_config.has_section("gr-pager"):
+ self._saved_band_freq_config.add_section("gr-pager")
+ self._saved_band_freq_config.set("gr-pager", "band_center", str(self.band_freq))
+ self._saved_band_freq_config.write(open(self.config_filename, 'w'))
+ self._saved_channel_config = ConfigParser.ConfigParser()
+ self._saved_channel_config.read(self.config_filename)
+ if not self._saved_channel_config.has_section("gr-pager"):
+ self._saved_channel_config.add_section("gr-pager")
+ self._saved_channel_config.set("gr-pager", "channel", str(self.channel))
+ self._saved_channel_config.write(open(self.config_filename, 'w'))
+ self._saved_offset_config = ConfigParser.ConfigParser()
+ self._saved_offset_config.read(self.config_filename)
+ if not self._saved_offset_config.has_section("gr-pager"):
+ self._saved_offset_config.add_section("gr-pager")
+ self._saved_offset_config.set("gr-pager", "freq_offset", str(self.offset))
+ self._saved_offset_config.write(open(self.config_filename, 'w'))
+ self._saved_rx_gain_config = ConfigParser.ConfigParser()
+ self._saved_rx_gain_config.read(self.config_filename)
+ if not self._saved_rx_gain_config.has_section("gr-pager"):
+ self._saved_rx_gain_config.add_section("gr-pager")
+ self._saved_rx_gain_config.set("gr-pager", "rx_gain", str(self.rx_gain))
+ self._saved_rx_gain_config.write(open(self.config_filename, 'w'))
+
+ def set_symbol_rate(self, symbol_rate):
+ self.symbol_rate = symbol_rate
+ self.set_passband(2*(self.deviation+self.symbol_rate))
+ self.set_ma_ntaps(int(self.channel_rate/self.symbol_rate))
+
+ def set_saved_channel(self, saved_channel):
+ self.saved_channel = saved_channel
+ self.set_channel(self.saved_channel)
+
+ def set_saved_band_freq(self, saved_band_freq):
+ self.saved_band_freq = saved_band_freq
+ self.set_band_freq(self.saved_band_freq)
+
+ def set_deviation(self, deviation):
+ self.deviation = deviation
+ self.set_demod_k(3*self.channel_rate/(2*math.pi*self.deviation))
+ self.set_passband(2*(self.deviation+self.symbol_rate))
+
+ def set_decim(self, decim):
+ self.decim = decim
+ self.set_sample_rate(self.adc_rate/self.decim)
+ self.usrp_source.set_decim_rate(self.decim)
+
+ def set_adc_rate(self, adc_rate):
+ self.adc_rate = adc_rate
+ self.set_sample_rate(self.adc_rate/self.decim)
+
+ def set_sample_rate(self, sample_rate):
+ self.sample_rate = sample_rate
+ self.wxgui_fftsink2_0.set_sample_rate(self.sample_rate)
+ self.set_channel_decim(int(self.sample_rate/self.channel_rate))
+ self.set_channel_taps(firdes.low_pass(10, self.sample_rate, self.passband/2.0, (self.channel_rate-self.passband)/2.0))
+
+ def set_passband(self, passband):
+ self.passband = passband
+ self.set_channel_taps(firdes.low_pass(10, self.sample_rate, self.passband/2.0, (self.channel_rate-self.passband)/2.0))
+
+ def set_channel_rate(self, channel_rate):
+ self.channel_rate = channel_rate
+ self.wxgui_fftsink2_1.set_sample_rate(self.channel_rate)
+ self.set_channel_decim(int(self.sample_rate/self.channel_rate))
+ self.set_demod_k(3*self.channel_rate/(2*math.pi*self.deviation))
+ self.set_channel_taps(firdes.low_pass(10, self.sample_rate, self.passband/2.0, (self.channel_rate-self.passband)/2.0))
+ self.set_ma_ntaps(int(self.channel_rate/self.symbol_rate))
+
+ def set_channel(self, channel):
+ self.channel = channel
+ self.set_freq(self.band_freq+(self.channel-61)*25e3)
+ self._saved_channel_config = ConfigParser.ConfigParser()
+ self._saved_channel_config.read(self.config_filename)
+ if not self._saved_channel_config.has_section("gr-pager"):
+ self._saved_channel_config.add_section("gr-pager")
+ self._saved_channel_config.set("gr-pager", "channel", str(self.channel))
+ self._saved_channel_config.write(open(self.config_filename, 'w'))
+ self._channel_slider.set_value(self.channel)
+ self._channel_text_box.set_value(self.channel)
+
+ def set_band_freq(self, band_freq):
+ self.band_freq = band_freq
+ self.set_freq(self.band_freq+(self.channel-61)*25e3)
+ self.wxgui_fftsink2_0.set_baseband_freq(self.band_freq)
+ self.usrp_source.set_frequency(self.band_freq)
+ self.gr_freq_xlating_fir_filter_xxx_0.set_center_freq(self.band_freq-self.freq+self.offset)
+ self._saved_band_freq_config = ConfigParser.ConfigParser()
+ self._saved_band_freq_config.read(self.config_filename)
+ if not self._saved_band_freq_config.has_section("gr-pager"):
+ self._saved_band_freq_config.add_section("gr-pager")
+ self._saved_band_freq_config.set("gr-pager", "band_center", str(self.band_freq))
+ self._saved_band_freq_config.write(open(self.config_filename, 'w'))
+ self._band_freq_text_box.set_value(self.band_freq)
+
+ def set_saved_rx_gain(self, saved_rx_gain):
+ self.saved_rx_gain = saved_rx_gain
+ self.set_rx_gain(self.saved_rx_gain)
+
+ def set_saved_offset(self, saved_offset):
+ self.saved_offset = saved_offset
+ self.set_offset(self.saved_offset)
+
+ def set_freq(self, freq):
+ self.freq = freq
+ self.gr_freq_xlating_fir_filter_xxx_0.set_center_freq(self.band_freq-self.freq+self.offset)
+ self.wxgui_fftsink2_1.set_baseband_freq(self.freq)
+ self.set_freq_text(self.freq)
+
+ def set_channel_taps(self, channel_taps):
+ self.channel_taps = channel_taps
+ self.gr_freq_xlating_fir_filter_xxx_0.set_taps((self.channel_taps))
+ self.set_nchan_taps(len(self.channel_taps))
+
+ def set_rx_gain(self, rx_gain):
+ self.rx_gain = rx_gain
+ self.usrp_source.set_gain(self.rx_gain)
+ self._saved_rx_gain_config = ConfigParser.ConfigParser()
+ self._saved_rx_gain_config.read(self.config_filename)
+ if not self._saved_rx_gain_config.has_section("gr-pager"):
+ self._saved_rx_gain_config.add_section("gr-pager")
+ self._saved_rx_gain_config.set("gr-pager", "rx_gain", str(self.rx_gain))
+ self._saved_rx_gain_config.write(open(self.config_filename, 'w'))
+ self._rx_gain_slider.set_value(self.rx_gain)
+ self._rx_gain_text_box.set_value(self.rx_gain)
+
+ def set_offset(self, offset):
+ self.offset = offset
+ self.gr_freq_xlating_fir_filter_xxx_0.set_center_freq(self.band_freq-self.freq+self.offset)
+ self._saved_offset_config = ConfigParser.ConfigParser()
+ self._saved_offset_config.read(self.config_filename)
+ if not self._saved_offset_config.has_section("gr-pager"):
+ self._saved_offset_config.add_section("gr-pager")
+ self._saved_offset_config.set("gr-pager", "freq_offset", str(self.offset))
+ self._saved_offset_config.write(open(self.config_filename, 'w'))
+ self._offset_slider.set_value(self.offset)
+ self._offset_text_box.set_value(self.offset)
+
+ def set_nchan_taps(self, nchan_taps):
+ self.nchan_taps = nchan_taps
+
+ def set_ma_ntaps(self, ma_ntaps):
+ self.ma_ntaps = ma_ntaps
+
+ def set_freq_text(self, freq_text):
+ self.freq_text = freq_text
+ self._freq_text_static_text.set_value(self.freq_text)
+
+ def set_demod_k(self, demod_k):
+ self.demod_k = demod_k
+
+ def set_channel_decim(self, channel_decim):
+ self.channel_decim = channel_decim
+
+ def set_bb_interp(self, bb_interp):
+ self.bb_interp = bb_interp
+
+ def set_bb_decim(self, bb_decim):
+ self.bb_decim = bb_decim
+
+ def set_baseband_rate(self, baseband_rate):
+ self.baseband_rate = baseband_rate
+
+if __name__ == '__main__':
+ parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
+ (options, args) = parser.parse_args()
+ tb = usrp_rx_flex()
+ tb.Run(True)
+
diff --git a/gr-pager/grc/.gitignore b/gr-pager/grc/.gitignore
new file mode 100644
index 000000000..70845e08e
--- /dev/null
+++ b/gr-pager/grc/.gitignore
@@ -0,0 +1 @@
+Makefile.in
diff --git a/gr-pager/grc/Makefile.am b/gr-pager/grc/Makefile.am
new file mode 100644
index 000000000..8c84f89ac
--- /dev/null
+++ b/gr-pager/grc/Makefile.am
@@ -0,0 +1,29 @@
+#
+# Copyright 2009 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 $(top_srcdir)/Makefile.common
+
+grcblocksdir = $(grc_blocksdir)
+
+dist_grcblocks_DATA = \
+ pager_slicer_fb.xml \
+ pager_flex_sync.xml \
+ pager_flex_deinterleave.xml
diff --git a/gr-pager/grc/pager_flex_deinterleave.xml b/gr-pager/grc/pager_flex_deinterleave.xml
new file mode 100644
index 000000000..14e5782da
--- /dev/null
+++ b/gr-pager/grc/pager_flex_deinterleave.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## FLEX Pager Deinterleaver
+###################################################
+ -->
+<block>
+ <name>FLEX Deinterleave</name>
+ <key>pager_flex_deinterleave</key>
+ <category>Pager</category>
+ <import>from gnuradio import pager</import>
+ <make>pager.flex_deinterleave()</make>
+
+ <sink>
+ <name>bits</name>
+ <type>byte</type>
+ </sink>
+
+ <source>
+ <name>codes</name>
+ <type>int</type>
+ </source>
+</block>
diff --git a/gr-pager/grc/pager_flex_sync.xml b/gr-pager/grc/pager_flex_sync.xml
new file mode 100644
index 000000000..ec22321aa
--- /dev/null
+++ b/gr-pager/grc/pager_flex_sync.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## FLEX Pager Synchronizer
+###################################################
+ -->
+<block>
+ <name>FLEX Synchronizer</name>
+ <key>pager_flex_sync</key>
+ <category>Pager</category>
+ <import>from gnuradio import pager</import>
+ <make>pager.flex_sync()</make>
+
+ <sink>
+ <name>dibits</name>
+ <type>byte</type>
+ </sink>
+
+ <source>
+ <name>A</name>
+ <type>byte</type>
+ </source>
+ <source>
+ <name>B</name>
+ <type>byte</type>
+ </source>
+ <source>
+ <name>C</name>
+ <type>byte</type>
+ </source>
+ <source>
+ <name>D</name>
+ <type>byte</type>
+ </source>
+
+</block>
diff --git a/gr-pager/grc/pager_slicer_fb.xml b/gr-pager/grc/pager_slicer_fb.xml
new file mode 100644
index 000000000..25642cb48
--- /dev/null
+++ b/gr-pager/grc/pager_slicer_fb.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## FLEX Pager Slicer w/DC offset removal
+###################################################
+ -->
+<block>
+ <name>4-Level Slicer/DCR</name>
+ <key>pager_slicer_fb</key>
+ <category>Pager</category>
+ <import>from gnuradio import pager</import>
+ <make>pager.slicer_fb($alpha)</make>
+
+ <param>
+ <name>Alpha</name>
+ <key>alpha</key>
+ <value>1e-6</value>
+ <type>real</type>
+ </param>
+
+ <sink>
+ <name>bb</name>
+ <type>float</type>
+ </sink>
+
+ <source>
+ <name>dibits</name>
+ <type>byte</type>
+ </source>
+
+</block>
diff --git a/gr-pager/lib/.gitignore b/gr-pager/lib/.gitignore
new file mode 100644
index 000000000..1b6114c39
--- /dev/null
+++ b/gr-pager/lib/.gitignore
@@ -0,0 +1,4 @@
+/.libs
+/.deps
+/Makefile
+/Makefile.in
diff --git a/gr-pager/lib/Makefile.am b/gr-pager/lib/Makefile.am
new file mode 100644
index 000000000..1d8a43b3c
--- /dev/null
+++ b/gr-pager/lib/Makefile.am
@@ -0,0 +1,53 @@
+#
+# Copyright 2004,2005,2006,2008,2009 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 $(top_srcdir)/Makefile.common
+
+AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES)
+
+# These headers get installed in ${prefix}/include/gnuradio
+grinclude_HEADERS = \
+ pager_slicer_fb.h \
+ pager_flex_sync.h \
+ pager_flex_deinterleave.h \
+ pager_flex_parse.h \
+ pager_flex_frame.h \
+ pageri_bch3221.h \
+ pageri_flex_modes.h \
+ pageri_util.h
+
+lib_LTLIBRARIES = libgnuradio-pager.la
+
+libgnuradio_pager_la_SOURCES = \
+ pager_flex_frame.cc \
+ pager_slicer_fb.cc \
+ pager_flex_sync.cc \
+ pager_flex_deinterleave.cc \
+ pager_flex_parse.cc \
+ pageri_bch3221.cc \
+ pageri_flex_modes.cc \
+ pageri_util.cc
+
+libgnuradio_pager_la_LIBADD = \
+ $(GNURADIO_CORE_LA)
+
+libgnuradio_pager_la_LDFLAGS = \
+ $(NO_UNDEFINED)
diff --git a/gr-pager/src/Makefile.swig.gen b/gr-pager/lib/Makefile.swig.gen
index 5cfbc66be..5cfbc66be 100644
--- a/gr-pager/src/Makefile.swig.gen
+++ b/gr-pager/lib/Makefile.swig.gen
diff --git a/gr-pager/src/pager_flex_deinterleave.cc b/gr-pager/lib/pager_flex_deinterleave.cc
index 25ea22e39..25ea22e39 100644
--- a/gr-pager/src/pager_flex_deinterleave.cc
+++ b/gr-pager/lib/pager_flex_deinterleave.cc
diff --git a/gr-pager/src/pager_flex_deinterleave.h b/gr-pager/lib/pager_flex_deinterleave.h
index 7211a71ad..7211a71ad 100644
--- a/gr-pager/src/pager_flex_deinterleave.h
+++ b/gr-pager/lib/pager_flex_deinterleave.h
diff --git a/gr-pager/src/pager_flex_frame.cc b/gr-pager/lib/pager_flex_frame.cc
index b707dbbc4..b707dbbc4 100644
--- a/gr-pager/src/pager_flex_frame.cc
+++ b/gr-pager/lib/pager_flex_frame.cc
diff --git a/gr-pager/src/pager_flex_frame.h b/gr-pager/lib/pager_flex_frame.h
index 1f4999e2b..1f4999e2b 100644
--- a/gr-pager/src/pager_flex_frame.h
+++ b/gr-pager/lib/pager_flex_frame.h
diff --git a/gr-pager/src/pager_flex_parse.cc b/gr-pager/lib/pager_flex_parse.cc
index 0819294da..0819294da 100644
--- a/gr-pager/src/pager_flex_parse.cc
+++ b/gr-pager/lib/pager_flex_parse.cc
diff --git a/gr-pager/src/pager_flex_parse.h b/gr-pager/lib/pager_flex_parse.h
index 0f7cfb370..0f7cfb370 100644
--- a/gr-pager/src/pager_flex_parse.h
+++ b/gr-pager/lib/pager_flex_parse.h
diff --git a/gr-pager/src/pager_flex_sync.cc b/gr-pager/lib/pager_flex_sync.cc
index 6bcee8ede..6bcee8ede 100644
--- a/gr-pager/src/pager_flex_sync.cc
+++ b/gr-pager/lib/pager_flex_sync.cc
diff --git a/gr-pager/src/pager_flex_sync.h b/gr-pager/lib/pager_flex_sync.h
index b401bf532..b401bf532 100644
--- a/gr-pager/src/pager_flex_sync.h
+++ b/gr-pager/lib/pager_flex_sync.h
diff --git a/gr-pager/src/pager_slicer_fb.cc b/gr-pager/lib/pager_slicer_fb.cc
index d419db78a..d419db78a 100644
--- a/gr-pager/src/pager_slicer_fb.cc
+++ b/gr-pager/lib/pager_slicer_fb.cc
diff --git a/gr-pager/src/pager_slicer_fb.h b/gr-pager/lib/pager_slicer_fb.h
index 75eea3cd3..75eea3cd3 100644
--- a/gr-pager/src/pager_slicer_fb.h
+++ b/gr-pager/lib/pager_slicer_fb.h
diff --git a/gr-pager/src/pageri_bch3221.cc b/gr-pager/lib/pageri_bch3221.cc
index 984ed4d44..984ed4d44 100644
--- a/gr-pager/src/pageri_bch3221.cc
+++ b/gr-pager/lib/pageri_bch3221.cc
diff --git a/gr-pager/src/pageri_bch3221.h b/gr-pager/lib/pageri_bch3221.h
index 9dd2be86a..9dd2be86a 100644
--- a/gr-pager/src/pageri_bch3221.h
+++ b/gr-pager/lib/pageri_bch3221.h
diff --git a/gr-pager/src/pageri_flex_modes.cc b/gr-pager/lib/pageri_flex_modes.cc
index 4553e0bf3..4553e0bf3 100644
--- a/gr-pager/src/pageri_flex_modes.cc
+++ b/gr-pager/lib/pageri_flex_modes.cc
diff --git a/gr-pager/src/pageri_flex_modes.h b/gr-pager/lib/pageri_flex_modes.h
index bc53c12bf..bc53c12bf 100644
--- a/gr-pager/src/pageri_flex_modes.h
+++ b/gr-pager/lib/pageri_flex_modes.h
diff --git a/gr-pager/src/pageri_util.cc b/gr-pager/lib/pageri_util.cc
index bdd095706..bdd095706 100644
--- a/gr-pager/src/pageri_util.cc
+++ b/gr-pager/lib/pageri_util.cc
diff --git a/gr-pager/src/pageri_util.h b/gr-pager/lib/pageri_util.h
index 78ae7aab3..78ae7aab3 100644
--- a/gr-pager/src/pageri_util.h
+++ b/gr-pager/lib/pageri_util.h
diff --git a/gr-pager/python/.gitignore b/gr-pager/python/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-pager/python/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-pager/python/Makefile.am b/gr-pager/python/Makefile.am
new file mode 100644
index 000000000..f80375c7c
--- /dev/null
+++ b/gr-pager/python/Makefile.am
@@ -0,0 +1,39 @@
+#
+# Copyright 2004,2005,2006,2008,2009 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 $(top_srcdir)/Makefile.common
+
+if PYTHON
+pagerdir = $(grpythondir)/pager
+
+noinst_PYTHON = \
+ qa_pager.py
+
+pager_PYTHON = \
+ __init__.py \
+ pager_utils.py \
+ flex_demod.py
+
+TESTS = run_tests
+
+EXTRA_DIST = run_tests.in
+
+endif
diff --git a/gr-pager/src/__init__.py b/gr-pager/python/__init__.py
index 664b79942..664b79942 100644
--- a/gr-pager/src/__init__.py
+++ b/gr-pager/python/__init__.py
diff --git a/gr-pager/src/flex_demod.py b/gr-pager/python/flex_demod.py
index b79c1adaa..b79c1adaa 100644
--- a/gr-pager/src/flex_demod.py
+++ b/gr-pager/python/flex_demod.py
diff --git a/gr-pager/src/pager_utils.py b/gr-pager/python/pager_utils.py
index 72aac6826..72aac6826 100644
--- a/gr-pager/src/pager_utils.py
+++ b/gr-pager/python/pager_utils.py
diff --git a/gr-pager/src/qa_pager.py b/gr-pager/python/qa_pager.py
index 5bf72b561..5bf72b561 100755
--- a/gr-pager/src/qa_pager.py
+++ b/gr-pager/python/qa_pager.py
diff --git a/gr-pager/src/run_tests.in b/gr-pager/python/run_tests.in
index 6bb0c3980..6bb0c3980 100644
--- a/gr-pager/src/run_tests.in
+++ b/gr-pager/python/run_tests.in
diff --git a/gr-pager/src/pager_swig.i b/gr-pager/src/pager_swig.i
deleted file mode 100644
index aeb576db7..000000000
--- a/gr-pager/src/pager_swig.i
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2005,2006,2009 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 "gnuradio.i"
-
-%{
-#include "pager_flex_frame.h"
-#include "pager_slicer_fb.h"
-#include "pager_flex_sync.h"
-#include "pager_flex_deinterleave.h"
-#include "pager_flex_parse.h"
-%}
-
-%include "pager_flex_frame.i"
-
-// ----------------------------------------------------------------
-
-GR_SWIG_BLOCK_MAGIC(pager,slicer_fb);
-
-pager_slicer_fb_sptr pager_make_slicer_fb(float alpha);
-
-class pager_slicer_fb : public gr_sync_block
-{
-private:
- pager_slicer_fb(float alpha);
-
-public:
- float dc_offset() const { return d_avg; }
-};
-
-// ----------------------------------------------------------------
-
-GR_SWIG_BLOCK_MAGIC(pager,flex_sync);
-
-pager_flex_sync_sptr pager_make_flex_sync();
-
-class pager_flex_sync : public gr_block
-{
-private:
- pager_flex_sync();
-
-public:
-};
-
-// ----------------------------------------------------------------
-
-GR_SWIG_BLOCK_MAGIC(pager,flex_deinterleave);
-
-pager_flex_deinterleave_sptr pager_make_flex_deinterleave();
-
-class pager_flex_deinterleave : public gr_sync_decimator
-{
-private:
- pager_flex_deinterleave();
-
-public:
-};
-
-// ----------------------------------------------------------------
-
-GR_SWIG_BLOCK_MAGIC(pager,flex_parse);
-
-pager_flex_parse_sptr pager_make_flex_parse(gr_msg_queue_sptr queue, float freq);
-
-class pager_flex_parse : public gr_block
-{
-private:
- pager_flex_parse(gr_msg_queue_sptr queue, float freq);
-
-public:
-};
diff --git a/gr-pager/src/.gitignore b/gr-pager/swig/.gitignore
index 3e806d690..6df28c365 100644
--- a/gr-pager/src/.gitignore
+++ b/gr-pager/swig/.gitignore
@@ -1,5 +1,3 @@
-/.libs
-/.deps
/Makefile
/Makefile.in
/pager_swig.py
diff --git a/gr-pager/src/Makefile.am b/gr-pager/swig/Makefile.am
index d084d05f8..890459cb6 100644
--- a/gr-pager/src/Makefile.am
+++ b/gr-pager/swig/Makefile.am
@@ -21,54 +21,14 @@
include $(top_srcdir)/Makefile.common
-EXTRA_DIST = run_tests.in
-
-AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES)
-
-noinst_PYTHON = \
- qa_pager.py
-
-# These headers get installed in ${prefix}/include/gnuradio
-grinclude_HEADERS = \
- pager_slicer_fb.h \
- pager_flex_sync.h \
- pager_flex_deinterleave.h \
- pager_flex_parse.h \
- pager_flex_frame.h \
- pageri_bch3221.h \
- pageri_flex_modes.h \
- pageri_util.h
-
-lib_LTLIBRARIES = libgnuradio-pager.la
-
-libgnuradio_pager_la_SOURCES = \
- pager_flex_frame.cc \
- pager_slicer_fb.cc \
- pager_flex_sync.cc \
- pager_flex_deinterleave.cc \
- pager_flex_parse.cc \
- pageri_bch3221.cc \
- pageri_flex_modes.cc \
- pageri_util.cc
-
-libgnuradio_pager_la_LIBADD = \
- $(GNURADIO_CORE_LA)
-
-libgnuradio_pager_la_LDFLAGS = \
- $(NO_UNDEFINED)
-
-if PYTHON
-
-dist_bin_SCRIPTS = \
- usrp_flex.py \
- usrp_flex_all.py \
- usrp_flex_band.py
+AM_CPPFLAGS = \
+ $(STD_DEFINES_AND_INCLUDES) \
+ $(PYTHON_CPPFLAGS) \
+ $(WITH_INCLUDES) \
+ -I$(top_srcdir)/gr-pager/lib
##############################
# SWIG interface and library
-TESTS = run_tests
-DISTCLEANFILES = run_tests
-
TOP_SWIG_IFILES = \
pager_swig.i
@@ -81,17 +41,15 @@ pager_swig_pythondir_category = \
# additional libraries for linking with the SWIG-generated library
pager_swig_la_swig_libadd = \
- libgnuradio-pager.la
-
-# additional Python files to be installed along with the SWIG-generated one
-pager_swig_python = \
- __init__.py \
- pager_utils.py \
- flex_demod.py
+ $(builddir)/../lib/libgnuradio-pager.la
# additional SWIG files to be installed
pager_swig_swiginclude_headers = \
- pager_flex_frame.i
+ pager_flex_deinterleave.i \
+ pager_flex_frame.i \
+ pager_flex_parse.i \
+ pager_flex_sync.i \
+ pager_slicer_fb.i
include $(top_srcdir)/Makefile.swig
@@ -100,4 +58,3 @@ BUILT_SOURCES = $(swig_built_sources)
# Do not distribute the output of SWIG
no_dist_files = $(swig_built_sources)
-endif
diff --git a/gr-pager/swig/Makefile.swig.gen b/gr-pager/swig/Makefile.swig.gen
new file mode 100644
index 000000000..5cfbc66be
--- /dev/null
+++ b/gr-pager/swig/Makefile.swig.gen
@@ -0,0 +1,259 @@
+# -*- Makefile -*-
+#
+# Copyright 2009 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.
+#
+
+# Makefile.swig.gen for pager_swig.i
+
+## Default install locations for these files:
+##
+## Default location for the Python directory is:
+## ${prefix}/lib/python${python_version}/site-packages/[category]/pager_swig
+## Default location for the Python exec directory is:
+## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/pager_swig
+##
+## The following can be overloaded to change the install location, but
+## this has to be done in the including Makefile.am -before-
+## Makefile.swig is included.
+
+pager_swig_pythondir_category ?= gnuradio/pager_swig
+pager_swig_pylibdir_category ?= $(pager_swig_pythondir_category)
+pager_swig_pythondir = $(pythondir)/$(pager_swig_pythondir_category)
+pager_swig_pylibdir = $(pyexecdir)/$(pager_swig_pylibdir_category)
+
+## SWIG headers are always installed into the same directory.
+
+pager_swig_swigincludedir = $(swigincludedir)
+
+## This is a template file for a "generated" Makefile addition (in
+## this case, "Makefile.swig.gen"). By including the top-level
+## Makefile.swig, this file will be used to generate the SWIG
+## dependencies. Assign the variable TOP_SWIG_FILES to be the list of
+## SWIG .i files to generated wrappings for; there can be more than 1
+## so long as the names are unique (no sorting is done on the
+## TOP_SWIG_FILES list). This file explicitly assumes that a SWIG .i
+## file will generate .cc, .py, and possibly .h files -- meaning that
+## all of these files will have the same base name (that provided for
+## the SWIG .i file).
+##
+## This code is setup to ensure parallel MAKE ("-j" or "-jN") does the
+## right thing. For more info, see <
+## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
+
+## Stamps used to ensure parallel make does the right thing. These
+## are removed by "make clean", but otherwise unused except during the
+## parallel built. These will not be included in a tarball, because
+## the SWIG-generated files will be removed from the distribution.
+
+STAMPS += $(DEPDIR)/pager_swig-generate-*
+
+## Other cleaned files: dependency files generated by SWIG or this Makefile
+
+MOSTLYCLEANFILES += $(DEPDIR)/*.S*
+
+## Add the .py and .cc files to the list of SWIG built sources. The
+## .h file is sometimes built, but not always ... so that one has to
+## be added manually by the including Makefile.am .
+
+swig_built_sources += pager_swig.py pager_swig.cc
+
+## Various SWIG variables. These can be overloaded in the including
+## Makefile.am by setting the variable value there, then including
+## Makefile.swig .
+
+pager_swig_swiginclude_HEADERS = \
+ pager_swig.i \
+ $(pager_swig_swiginclude_headers)
+
+pager_swig_pylib_LTLIBRARIES = \
+ _pager_swig.la
+
+_pager_swig_la_SOURCES = \
+ pager_swig.cc \
+ $(pager_swig_la_swig_sources)
+
+_pager_swig_la_LIBADD = \
+ $(STD_SWIG_LA_LIB_ADD) \
+ $(pager_swig_la_swig_libadd)
+
+_pager_swig_la_LDFLAGS = \
+ $(STD_SWIG_LA_LD_FLAGS) \
+ $(pager_swig_la_swig_ldflags)
+
+_pager_swig_la_CXXFLAGS = \
+ $(STD_SWIG_CXX_FLAGS) \
+ $(pager_swig_la_swig_cxxflags)
+
+pager_swig_python_PYTHON = \
+ pager_swig.py \
+ $(pager_swig_python)
+
+## Entry rule for running SWIG
+
+pager_swig.h pager_swig.py pager_swig.cc: pager_swig.i
+## This rule will get called only when MAKE decides that one of the
+## targets needs to be created or re-created, because:
+##
+## * The .i file is newer than any or all of the generated files;
+##
+## * Any or all of the .cc, .h, or .py files does not exist and is
+## needed (in the case this file is not needed, the rule for it is
+## ignored); or
+##
+## * Some SWIG-based dependecy of the .cc file isn't met and hence the
+## .cc file needs be be regenerated. Explanation: Because MAKE
+## knows how to handle dependencies for .cc files (regardless of
+## their name or extension), then the .cc file is used as a target
+## instead of the .i file -- but with the dependencies of the .i
+## file. It is this last reason why the line:
+##
+## if test -f $@; then :; else
+##
+## cannot be used in this case: If a .i file dependecy is not met,
+## then the .cc file needs to be rebuilt. But if the stamp is newer
+## than the .cc file, and the .cc file exists, then in the original
+## version (with the 'test' above) the internal MAKE call will not
+## be issued and hence the .cc file will not be rebuilt.
+##
+## Once execution gets to here, it should always proceed no matter the
+## state of a stamp (as discussed in link above). The
+## $(DEPDIR)/pager_swig-generate stuff is used to allow for parallel
+## builds to "do the right thing". The stamp has no relationship with
+## either the target files or dependency file; it is used solely for
+## the protection of multiple builds during a given call to MAKE.
+##
+## Catch signals SIGHUP (1), SIGINT (2), SIGPIPE (13), and SIGTERM
+## (15). At a caught signal, the quoted command will be issued before
+## exiting. In this case, remove any stamp, whether temporary of not.
+## The trap is valid until the process exits; the process includes all
+## commands appended via "\"s.
+##
+ trap 'rm -rf $(DEPDIR)/pager_swig-generate-*' 1 2 13 15; \
+##
+## Create a temporary directory, which acts as a lock. The first
+## process to create the directory will succeed and issue the MAKE
+## command to do the actual work, while all subsequent processes will
+## fail -- leading them to wait for the first process to finish.
+##
+ if mkdir $(DEPDIR)/pager_swig-generate-lock 2>/dev/null; then \
+##
+## This code is being executed by the first process to succeed in
+## creating the directory lock.
+##
+## Remove the stamp associated with this filename.
+##
+ rm -f $(DEPDIR)/pager_swig-generate-stamp; \
+##
+## Tell MAKE to run the rule for creating this stamp.
+##
+ $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/pager_swig-generate-stamp WHAT=$<; \
+##
+## Now that the .cc, .h, and .py files have been (re)created from the
+## .i file, future checking of this rule during the same MAKE
+## execution will come back that the rule doesn't need to be executed
+## because none of the conditions mentioned at the start of this rule
+## will be positive. Remove the the directory lock, which frees up
+## any waiting process(es) to continue.
+##
+ rmdir $(DEPDIR)/pager_swig-generate-lock; \
+ else \
+##
+## This code is being executed by any follower processes while the
+## directory lock is in place.
+##
+## Wait until the first process is done, testing once per second.
+##
+ while test -d $(DEPDIR)/pager_swig-generate-lock; do \
+ sleep 1; \
+ done; \
+##
+## Succeed if and only if the first process succeeded; exit this
+## process returning the status of the generated stamp.
+##
+ test -f $(DEPDIR)/pager_swig-generate-stamp; \
+ exit $$?; \
+ fi;
+
+$(DEPDIR)/pager_swig-generate-stamp:
+## This rule will be called only by the first process issuing the
+## above rule to succeed in creating the lock directory, after
+## removing the actual stamp file in order to guarantee that MAKE will
+## execute this rule.
+##
+## Call SWIG to generate the various output files; special
+## post-processing on 'mingw32' host OS for the dependency file.
+##
+ if $(SWIG) $(STD_SWIG_PYTHON_ARGS) $(pager_swig_swig_args) \
+ -MD -MF $(DEPDIR)/pager_swig.Std \
+ -module pager_swig -o pager_swig.cc $(WHAT); then \
+ if test $(host_os) = mingw32; then \
+ $(RM) $(DEPDIR)/pager_swig.Sd; \
+ $(SED) 's,\\\\,/,g' < $(DEPDIR)/pager_swig.Std \
+ > $(DEPDIR)/pager_swig.Sd; \
+ $(RM) $(DEPDIR)/pager_swig.Std; \
+ $(MV) $(DEPDIR)/pager_swig.Sd $(DEPDIR)/pager_swig.Std; \
+ fi; \
+ else \
+ $(RM) $(DEPDIR)/pager_swig.S*; exit 1; \
+ fi;
+##
+## Mess with the SWIG output .Std dependency file, to create a
+## dependecy file valid for the input .i file: Basically, simulate the
+## dependency file created for libraries by GNU's libtool for C++,
+## where all of the dependencies for the target are first listed, then
+## each individual dependency is listed as a target with no further
+## dependencies.
+##
+## (1) remove the current dependency file
+##
+ $(RM) $(DEPDIR)/pager_swig.d
+##
+## (2) Copy the whole SWIG file:
+##
+ cp $(DEPDIR)/pager_swig.Std $(DEPDIR)/pager_swig.d
+##
+## (3) all a carriage return to the end of the dependency file.
+##
+ echo "" >> $(DEPDIR)/pager_swig.d
+##
+## (4) from the SWIG file, remove the first line (the target); remove
+## trailing " \" and " " from each line. Append ":" to each line,
+## followed by 2 carriage returns, then append this to the end of
+## the dependency file.
+##
+ $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/pager_swig.Std | \
+ awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/pager_swig.d
+##
+## (5) remove the SWIG-generated file
+##
+ $(RM) $(DEPDIR)/pager_swig.Std
+##
+## Create the stamp for this filename generation, to signal success in
+## executing this rule; allows other threads waiting on this process
+## to continue.
+##
+ touch $(DEPDIR)/pager_swig-generate-stamp
+
+# KLUDGE: Force runtime include of a SWIG dependency file. This is
+# not guaranteed to be portable, but will probably work. If it works,
+# we have accurate dependencies for our swig stuff, which is good.
+
+@am__include@ @am__quote@./$(DEPDIR)/pager_swig.d@am__quote@
+
diff --git a/gr-pager/swig/pager_flex_deinterleave.i b/gr-pager/swig/pager_flex_deinterleave.i
new file mode 100644
index 000000000..f34951a8a
--- /dev/null
+++ b/gr-pager/swig/pager_flex_deinterleave.i
@@ -0,0 +1,11 @@
+GR_SWIG_BLOCK_MAGIC(pager,flex_deinterleave);
+
+pager_flex_deinterleave_sptr pager_make_flex_deinterleave();
+
+class pager_flex_deinterleave : public gr_sync_decimator
+{
+private:
+ pager_flex_deinterleave();
+
+public:
+};
diff --git a/gr-pager/src/pager_flex_frame.i b/gr-pager/swig/pager_flex_frame.i
index d754f5f79..d754f5f79 100644
--- a/gr-pager/src/pager_flex_frame.i
+++ b/gr-pager/swig/pager_flex_frame.i
diff --git a/gr-pager/swig/pager_flex_parse.i b/gr-pager/swig/pager_flex_parse.i
new file mode 100644
index 000000000..21e0245cb
--- /dev/null
+++ b/gr-pager/swig/pager_flex_parse.i
@@ -0,0 +1,11 @@
+GR_SWIG_BLOCK_MAGIC(pager,flex_parse);
+
+pager_flex_parse_sptr pager_make_flex_parse(gr_msg_queue_sptr queue, float freq);
+
+class pager_flex_parse : public gr_block
+{
+private:
+ pager_flex_parse(gr_msg_queue_sptr queue, float freq);
+
+public:
+};
diff --git a/gr-pager/swig/pager_flex_sync.i b/gr-pager/swig/pager_flex_sync.i
new file mode 100644
index 000000000..49823db06
--- /dev/null
+++ b/gr-pager/swig/pager_flex_sync.i
@@ -0,0 +1,11 @@
+GR_SWIG_BLOCK_MAGIC(pager,flex_sync);
+
+pager_flex_sync_sptr pager_make_flex_sync();
+
+class pager_flex_sync : public gr_block
+{
+private:
+ pager_flex_sync();
+
+public:
+};
diff --git a/gr-pager/swig/pager_slicer_fb.i b/gr-pager/swig/pager_slicer_fb.i
new file mode 100644
index 000000000..4ffb5b73b
--- /dev/null
+++ b/gr-pager/swig/pager_slicer_fb.i
@@ -0,0 +1,12 @@
+GR_SWIG_BLOCK_MAGIC(pager,slicer_fb);
+
+pager_slicer_fb_sptr pager_make_slicer_fb(float alpha);
+
+class pager_slicer_fb : public gr_sync_block
+{
+private:
+ pager_slicer_fb(float alpha);
+
+public:
+ float dc_offset() const { return d_avg; }
+};
diff --git a/gr-pager/swig/pager_swig.i b/gr-pager/swig/pager_swig.i
new file mode 100644
index 000000000..66d6de7d8
--- /dev/null
+++ b/gr-pager/swig/pager_swig.i
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2005,2006,2009 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 "gnuradio.i"
+
+%{
+#include "pager_flex_frame.h"
+#include "pager_slicer_fb.h"
+#include "pager_flex_sync.h"
+#include "pager_flex_deinterleave.h"
+#include "pager_flex_parse.h"
+%}
+
+%include "pager_flex_frame.i"
+%include "pager_slicer_fb.i"
+%include "pager_flex_sync.i"
+%include "pager_flex_deinterleave.i"
+%include "pager_flex_parse.i"