diff options
Diffstat (limited to 'gr-pager')
-rw-r--r-- | gr-pager/Makefile.am | 6 | ||||
-rw-r--r-- | gr-pager/apps/.gitignore | 2 | ||||
-rw-r--r-- | gr-pager/apps/Makefile.am | 36 | ||||
-rwxr-xr-x | gr-pager/apps/usrp_flex.py (renamed from gr-pager/src/usrp_flex.py) | 0 | ||||
-rwxr-xr-x | gr-pager/apps/usrp_flex_all.py (renamed from gr-pager/src/usrp_flex_all.py) | 0 | ||||
-rwxr-xr-x | gr-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.grc | 1804 | ||||
-rwxr-xr-x | gr-pager/apps/usrp_rx_flex.py | 434 | ||||
-rw-r--r-- | gr-pager/grc/.gitignore | 1 | ||||
-rw-r--r-- | gr-pager/grc/Makefile.am | 29 | ||||
-rw-r--r-- | gr-pager/grc/pager_flex_deinterleave.xml | 23 | ||||
-rw-r--r-- | gr-pager/grc/pager_flex_sync.xml | 36 | ||||
-rw-r--r-- | gr-pager/grc/pager_slicer_fb.xml | 31 | ||||
-rw-r--r-- | gr-pager/lib/.gitignore | 4 | ||||
-rw-r--r-- | gr-pager/lib/Makefile.am | 53 | ||||
-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/.gitignore | 2 | ||||
-rw-r--r-- | gr-pager/python/Makefile.am | 39 | ||||
-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-x | gr-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.i | 89 | ||||
-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.gen | 259 | ||||
-rw-r--r-- | gr-pager/swig/pager_flex_deinterleave.i | 11 | ||||
-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.i | 11 | ||||
-rw-r--r-- | gr-pager/swig/pager_flex_sync.i | 11 | ||||
-rw-r--r-- | gr-pager/swig/pager_slicer_fb.i | 12 | ||||
-rw-r--r-- | gr-pager/swig/pager_swig.i | 36 |
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" |