Added HRPT deframer block
authorJohnathan Corgan <jcorgan@corganenterprises.com>
Wed, 9 Sep 2009 04:08:29 +0000 (21:08 -0700)
committerJohnathan Corgan <jcorgan@corganenterprises.com>
Sun, 20 Sep 2009 16:39:27 +0000 (09:39 -0700)
gr-noaa/grc/Makefile.am
gr-noaa/grc/noaa_hrpt_deframer.xml [new file with mode: 0644]
gr-noaa/grc/usrp_rx_hrpt.grc
gr-noaa/grc/usrp_rx_hrpt.py
gr-noaa/lib/Makefile.am
gr-noaa/lib/noaa_hrpt_deframer.cc [new file with mode: 0644]
gr-noaa/lib/noaa_hrpt_deframer.h [new file with mode: 0644]
gr-noaa/swig/Makefile.am
gr-noaa/swig/noaa_hrpt_deframer.i [new file with mode: 0644]
gr-noaa/swig/noaa_swig.i

index e56bd354d0bb80cb5ff23386c688a3be413b3caa..4e4c0bae0a9deed49982aa884e68656350a40213 100644 (file)
@@ -28,6 +28,7 @@ dist_bin_SCRIPTS = \
        usrp_rx_lrit.py
 
 dist_grcblocks_DATA = \
+       noaa_hrpt_deframer.xml \
        noaa_hrpt_pll_cf.xml \
        noaa_hrpt_sync_fb.xml
 
diff --git a/gr-noaa/grc/noaa_hrpt_deframer.xml b/gr-noaa/grc/noaa_hrpt_deframer.xml
new file mode 100644 (file)
index 0000000..bc68f71
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<block>
+  <name>HRPT Deframer</name>
+  <key>noaa_hrpt_deframer</key>
+  <category>NOAA</category>
+  <import>from gnuradio import noaa</import>
+  <make>noaa.hrpt_deframer()</make>
+  <sink>
+    <name>in</name>
+    <type>byte</type>
+  </sink>
+</block>
index 25b1335322f2add6e14bcca69971117a6370de06..715846743e42f413cfe72cd4cd3937ab696cd82b 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='ASCII'?>
 <flow_graph>
-  <timestamp>Tue Sep  8 14:57:48 2009</timestamp>
+  <timestamp>Tue Sep  8 21:03:12 2009</timestamp>
   <block>
     <key>options</key>
     <param>
       <value>0</value>
     </param>
   </block>
-  <block>
-    <key>gr_file_source</key>
-    <param>
-      <key>id</key>
-      <value>src</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>file</key>
-      <value>poes-d16.dat</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>complex</value>
-    </param>
-    <param>
-      <key>repeat</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(34, 423)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
   <block>
     <key>gr_agc_xx</key>
     <param>
       <value>0</value>
     </param>
   </block>
-  <block>
-    <key>noaa_hrpt_sync_fb</key>
-    <param>
-      <key>id</key>
-      <value>noaa_hrpt_sync_fb_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>alpha</key>
-      <value>0.001</value>
-    </param>
-    <param>
-      <key>beta</key>
-      <value>0.001**2/4.0</value>
-    </param>
-    <param>
-      <key>sps</key>
-      <value>sps</value>
-    </param>
-    <param>
-      <key>max_offset</key>
-      <value>max_sync_offset</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(856, 494)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
   <block>
     <key>virtual_sink</key>
     <param>
     </param>
   </block>
   <block>
-    <key>gr_add_const_vxx</key>
+    <key>wxgui_scopesink2</key>
     <param>
       <key>id</key>
-      <value>gr_add_const_vxx_0</value>
+      <value>wxgui_scopesink2_0_0_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>float</value>
     </param>
     <param>
-      <key>const</key>
-      <value>48.0</value>
+      <key>title</key>
+      <value>Post-SYNC</value>
     </param>
     <param>
-      <key>vlen</key>
+      <key>samp_rate</key>
+      <value>sym_rate</value>
+    </param>
+    <param>
+      <key>v_scale</key>
+      <value>0.5</value>
+    </param>
+    <param>
+      <key>t_scale</key>
+      <value>20.0/sym_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>grid_pos</key>
+      <value>1, 0, 1, 1</value>
+    </param>
+    <param>
+      <key>notebook</key>
+      <value>displays, 1</value>
+    </param>
     <param>
       <key>_coordinate</key>
-      <value>(692, 919)</value>
+      <value>(452, 990)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>0</value>
+      <value>180</value>
     </param>
   </block>
   <block>
-    <key>gr_float_to_char</key>
+    <key>wxgui_scopesink2</key>
     <param>
       <key>id</key>
-      <value>gr_float_to_char_0</value>
+      <value>wxgui_scopesink2_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(848, 923)</value>
+      <key>type</key>
+      <value>complex</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>title</key>
+      <value>RX Waveform</value>
     </param>
-  </block>
-  <block>
-    <key>gr_file_sink</key>
     <param>
-      <key>id</key>
-      <value>gr_file_sink_0</value>
+      <key>samp_rate</key>
+      <value>sample_rate</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>v_scale</key>
+      <value>0</value>
     </param>
     <param>
-      <key>file</key>
-      <value>bits.dat</value>
+      <key>t_scale</key>
+      <value>20.0/sample_rate</value>
     </param>
     <param>
-      <key>type</key>
-      <value>byte</value>
+      <key>ac_couple</key>
+      <value>False</value>
     </param>
     <param>
-      <key>vlen</key>
+      <key>xy_mode</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>num_inputs</key>
       <value>1</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>(1020, 919)</value>
+      <value>(433, 570)</value>
     </param>
     <param>
       <key>_rotation</key>
     <key>wxgui_scopesink2</key>
     <param>
       <key>id</key>
-      <value>wxgui_scopesink2_0_0_0_0</value>
+      <value>wxgui_scopesink2_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
     </param>
     <param>
       <key>title</key>
-      <value>Post-SYNC</value>
+      <value>Post-PLL</value>
     </param>
     <param>
       <key>samp_rate</key>
-      <value>sym_rate</value>
+      <value>sample_rate</value>
     </param>
     <param>
       <key>v_scale</key>
     </param>
     <param>
       <key>t_scale</key>
-      <value>20.0/sym_rate</value>
+      <value>20.0/sample_rate</value>
     </param>
     <param>
       <key>ac_couple</key>
     </param>
     <param>
       <key>grid_pos</key>
-      <value>1, 0, 1, 1</value>
+      <value>0, 0, 1, 1</value>
     </param>
     <param>
       <key>notebook</key>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(452, 990)</value>
+      <value>(618, 335)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>wxgui_fftsink2</key>
+    <key>noaa_hrpt_sync_fb</key>
     <param>
       <key>id</key>
-      <value>rx_fftsink</value>
+      <value>noaa_hrpt_sync_fb_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>alpha</key>
+      <value>0.001</value>
     </param>
     <param>
-      <key>title</key>
-      <value>RX Spectrum</value>
+      <key>beta</key>
+      <value>0.001**2/4.0</value>
     </param>
     <param>
-      <key>samp_rate</key>
-      <value>sample_rate</value>
+      <key>sps</key>
+      <value>sps</value>
     </param>
     <param>
-      <key>baseband_freq</key>
-      <value>1698e6</value>
+      <key>max_offset</key>
+      <value>max_sync_offset</value>
     </param>
     <param>
-      <key>y_per_div</key>
-      <value>5</value>
+      <key>_coordinate</key>
+      <value>(856, 494)</value>
     </param>
     <param>
-      <key>y_divs</key>
-      <value>8</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>noaa_hrpt_deframer</key>
     <param>
-      <key>ref_level</key>
-      <value>20</value>
+      <key>id</key>
+      <value>noaa_hrpt_deframer_0</value>
     </param>
     <param>
-      <key>ref_scale</key>
-      <value>2.0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>fft_size</key>
-      <value>1024</value>
+      <key>_coordinate</key>
+      <value>(1110, 631)</value>
     </param>
     <param>
-      <key>fft_rate</key>
-      <value>30</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>gr_file_source</key>
     <param>
-      <key>peak_hold</key>
-      <value>False</value>
+      <key>id</key>
+      <value>src</value>
     </param>
     <param>
-      <key>average</key>
+      <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>avg_alpha</key>
-      <value>0.1</value>
+      <key>file</key>
+      <value>poes-d16.dat</value>
     </param>
     <param>
-      <key>grid_pos</key>
-      <value>0, 0, 1, 1</value>
+      <key>type</key>
+      <value>complex</value>
     </param>
     <param>
-      <key>notebook</key>
-      <value>displays, 0</value>
+      <key>repeat</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(434, 269)</value>
+      <value>(34, 423)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>wxgui_scopesink2</key>
+    <key>gr_add_const_vxx</key>
     <param>
       <key>id</key>
-      <value>wxgui_scopesink2_0</value>
+      <value>gr_add_const_vxx_0</value>
     </param>
     <param>
       <key>_enabled</key>
-      <value>True</value>
+      <value>False</value>
     </param>
     <param>
       <key>type</key>
-      <value>complex</value>
+      <value>float</value>
     </param>
     <param>
-      <key>title</key>
-      <value>RX Waveform</value>
+      <key>const</key>
+      <value>48.0</value>
     </param>
     <param>
-      <key>samp_rate</key>
-      <value>sample_rate</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
-      <key>v_scale</key>
+      <key>_coordinate</key>
+      <value>(692, 919)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>gr_float_to_char</key>
     <param>
-      <key>t_scale</key>
-      <value>20.0/sample_rate</value>
+      <key>id</key>
+      <value>gr_float_to_char_0</value>
     </param>
     <param>
-      <key>ac_couple</key>
+      <key>_enabled</key>
       <value>False</value>
     </param>
     <param>
-      <key>xy_mode</key>
+      <key>_coordinate</key>
+      <value>(848, 923)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>gr_file_sink</key>
+    <param>
+      <key>id</key>
+      <value>gr_file_sink_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
       <value>False</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>1</value>
+      <key>file</key>
+      <value>bits.dat</value>
     </param>
     <param>
-      <key>grid_pos</key>
-      <value>1, 0, 1, 1</value>
+      <key>type</key>
+      <value>byte</value>
     </param>
     <param>
-      <key>notebook</key>
-      <value>displays, 0</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(433, 570)</value>
+      <value>(1020, 919)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>wxgui_scopesink2</key>
+    <key>wxgui_fftsink2</key>
     <param>
       <key>id</key>
-      <value>wxgui_scopesink2_0_0</value>
+      <value>rx_fftsink</value>
     </param>
     <param>
       <key>_enabled</key>
     </param>
     <param>
       <key>type</key>
-      <value>float</value>
+      <value>complex</value>
     </param>
     <param>
       <key>title</key>
-      <value>Post-PLL</value>
+      <value>RX Spectrum</value>
     </param>
     <param>
       <key>samp_rate</key>
       <value>sample_rate</value>
     </param>
     <param>
-      <key>v_scale</key>
-      <value>0.5</value>
+      <key>baseband_freq</key>
+      <value>1698e6</value>
     </param>
     <param>
-      <key>t_scale</key>
-      <value>20.0/sample_rate</value>
+      <key>y_per_div</key>
+      <value>5</value>
     </param>
     <param>
-      <key>ac_couple</key>
-      <value>False</value>
+      <key>y_divs</key>
+      <value>8</value>
     </param>
     <param>
-      <key>xy_mode</key>
+      <key>ref_level</key>
+      <value>-5</value>
+    </param>
+    <param>
+      <key>ref_scale</key>
+      <value>2.0</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>num_inputs</key>
-      <value>1</value>
+      <key>average</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>avg_alpha</key>
+      <value>0.1</value>
     </param>
     <param>
       <key>grid_pos</key>
     </param>
     <param>
       <key>notebook</key>
-      <value>displays, 1</value>
+      <value>displays, 0</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(618, 335)</value>
+      <value>(434, 269)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>180</value>
+      <value>0</value>
     </param>
   </block>
   <connection>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
+  <connection>
+    <source_block_id>noaa_hrpt_sync_fb_0</source_block_id>
+    <sink_block_id>noaa_hrpt_deframer_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
 </flow_graph>
index 10e2f31c04821086bd34e9491b20ae6533e346a8..40cc517fc1199c714bae72c8a6d69b57a244478d 100755 (executable)
@@ -2,7 +2,7 @@
 ##################################################
 # Gnuradio Python Flow Graph
 # Title: USRP HRPT Receiver
-# Generated: Tue Sep  8 14:58:57 2009
+# Generated: Tue Sep  8 21:03:12 2009
 ##################################################
 
 from gnuradio import eng_notation
@@ -98,10 +98,8 @@ class usrp_rx_hrpt(grc_wxgui.top_block_gui):
                # Blocks
                ##################################################
                self.agr = gr.agc_cc(1e-6, 1.0, 1.0, 1.0)
-               self.gr_add_const_vxx_0 = gr.add_const_vff((48.0, ))
                self.gr_char_to_float_0 = gr.char_to_float()
-               self.gr_file_sink_0 = gr.file_sink(gr.sizeof_char*1, "bits.dat")
-               self.gr_float_to_char_0 = gr.float_to_char()
+               self.noaa_hrpt_deframer_0 = noaa.hrpt_deframer()
                self.noaa_hrpt_pll_cf_0 = noaa.hrpt_pll_cf(pll_alpha, pll_alpha**2/4.0, max_carrier_offset)
                self.noaa_hrpt_sync_fb_0 = noaa.hrpt_sync_fb(0.001, 0.001**2/4.0, sps, max_sync_offset)
                self.rx_fftsink = fftsink2.fft_sink_c(
@@ -109,7 +107,7 @@ class usrp_rx_hrpt(grc_wxgui.top_block_gui):
                        baseband_freq=1698e6,
                        y_per_div=5,
                        y_divs=8,
-                       ref_level=20,
+                       ref_level=-5,
                        ref_scale=2.0,
                        sample_rate=sample_rate,
                        fft_size=1024,
@@ -120,7 +118,7 @@ class usrp_rx_hrpt(grc_wxgui.top_block_gui):
                        peak_hold=False,
                )
                self.displays.GetPage(0).GridAdd(self.rx_fftsink.win, 0, 0, 1, 1)
-               self.src = gr.file_source(gr.sizeof_gr_complex*1, "poes-d16.dat", False)
+               self.src = gr.file_source(gr.sizeof_gr_complex*1, "poes-d16.dat", True)
                self.throttle = gr.throttle(gr.sizeof_gr_complex*1, sample_rate)
                self.wxgui_scopesink2_0 = scopesink2.scope_sink_c(
                        self.displays.GetPage(0).GetWin(),
@@ -168,9 +166,7 @@ class usrp_rx_hrpt(grc_wxgui.top_block_gui):
                self.connect((self.noaa_hrpt_sync_fb_0, 0), (self.gr_char_to_float_0, 0))
                self.connect((self.noaa_hrpt_pll_cf_0, 0), (self.noaa_hrpt_sync_fb_0, 0))
                self.connect((self.gr_char_to_float_0, 0), (self.wxgui_scopesink2_0_0_0_0, 0))
-               self.connect((self.gr_char_to_float_0, 0), (self.gr_add_const_vxx_0, 0))
-               self.connect((self.gr_add_const_vxx_0, 0), (self.gr_float_to_char_0, 0))
-               self.connect((self.gr_float_to_char_0, 0), (self.gr_file_sink_0, 0))
+               self.connect((self.noaa_hrpt_sync_fb_0, 0), (self.noaa_hrpt_deframer_0, 0))
 
        def set_decim(self, decim):
                self.decim = decim
@@ -185,9 +181,9 @@ class usrp_rx_hrpt(grc_wxgui.top_block_gui):
                self.sample_rate = sample_rate
                self.set_sps(self.sample_rate/self.sym_rate)
                self.set_max_carrier_offset(2*math.pi*100e3/self.sample_rate)
-               self.rx_fftsink.set_sample_rate(self.sample_rate)
                self.wxgui_scopesink2_0.set_sample_rate(self.sample_rate)
                self.wxgui_scopesink2_0_0.set_sample_rate(self.sample_rate)
+               self.rx_fftsink.set_sample_rate(self.sample_rate)
 
        def set_sps(self, sps):
                self.sps = sps
index 1b758871a479f702701c73f15bda5557cb509f0a..578c98adaffc0a8a37025a3b011dbf55f9d8d219 100644 (file)
@@ -29,6 +29,7 @@ lib_LTLIBRARIES = \
        libgnuradio-noaa.la
 
 libgnuradio_noaa_la_SOURCES = \
+       noaa_hrpt_deframer.cc \
        noaa_hrpt_pll_cf.cc \
        noaa_hrpt_sync_fb.cc
 
@@ -38,5 +39,6 @@ libgnuradio_noaa_la_LIBADD = \
 libgnuradio_noaa_la_LDFLAGS = $(NO_UNDEFINED) -version-info 0:0:0
 
 grinclude_HEADERS = \
+       noaa_hrpt_deframer.h \
        noaa_hrpt_pll_cf.h \
        noaa_hrpt_sync_fb.h
diff --git a/gr-noaa/lib/noaa_hrpt_deframer.cc b/gr-noaa/lib/noaa_hrpt_deframer.cc
new file mode 100644 (file)
index 0000000..7171227
--- /dev/null
@@ -0,0 +1,102 @@
+/* -*- c++ -*- */
+/*
+ * 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <noaa_hrpt_deframer.h>
+#include <gr_io_signature.h>
+
+#define ST_IDLE   0
+#define ST_SYNCED 1
+
+#define HRPT_MINOR_FRAME_SYNC 0x0A116FD719D83C95LL
+#define HRPT_BITS_PER_MINOR_FRAME 11090*10
+#define HRPT_SYNC_LENGTH 6*10
+
+static int frames_seen = 0;
+
+noaa_hrpt_deframer_sptr
+noaa_make_hrpt_deframer()
+{
+  return gnuradio::get_initial_sptr(new noaa_hrpt_deframer());
+}
+
+noaa_hrpt_deframer::noaa_hrpt_deframer()
+  : gr_sync_block("noaa_hrpt_deframer",
+                 gr_make_io_signature(1, 1, sizeof(char)),
+                 gr_make_io_signature(0, 0, 0))
+{
+  enter_idle();
+}
+
+void
+noaa_hrpt_deframer::enter_idle()
+{
+  d_state = ST_IDLE;
+}
+
+void
+noaa_hrpt_deframer::enter_synced()
+{
+  d_state = ST_SYNCED;
+  d_count = HRPT_BITS_PER_MINOR_FRAME-HRPT_SYNC_LENGTH;
+}
+
+int
+noaa_hrpt_deframer::work(int noutput_items,
+                        gr_vector_const_void_star &input_items,
+                        gr_vector_void_star &output_items)
+{
+  const char *in = (const char *)input_items[0];
+
+  int i = 0;
+  while (i < noutput_items) {
+    char bit = in[i++];
+    if (d_state != ST_SYNCED)
+      fprintf(stderr, ".");
+
+    switch (d_state) {
+    case ST_IDLE:
+      d_shifter = (d_shifter << 1) | bit; // MSB transmitted first
+      
+      if ((d_shifter & 0x0FFFFFFFFFFFFFFF) == HRPT_MINOR_FRAME_SYNC) {
+       fprintf(stderr, "\nSYNC #%i...", frames_seen++);
+       enter_synced();
+      }
+      break;
+
+    case ST_SYNCED:
+      if (--d_count == 0) {
+       fprintf(stderr, "done.");
+       enter_idle();
+      }
+      break;
+
+    default:
+      throw std::runtime_error("noaa_hrpt_deframer: bad state\n");
+    }
+  }
+
+  return i;
+}
diff --git a/gr-noaa/lib/noaa_hrpt_deframer.h b/gr-noaa/lib/noaa_hrpt_deframer.h
new file mode 100644 (file)
index 0000000..bc91bc8
--- /dev/null
@@ -0,0 +1,52 @@
+/* -*- c++ -*- */
+/*
+ * 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.
+ */
+
+#ifndef INCLUDED_NOAA_HRPT_DEFRAMER_H
+#define INCLUDED_NOAA_HRPT_DEFRAMER_H
+
+#include <gr_sync_block.h>
+
+class noaa_hrpt_deframer;
+typedef boost::shared_ptr<noaa_hrpt_deframer> noaa_hrpt_deframer_sptr;
+
+noaa_hrpt_deframer_sptr
+noaa_make_hrpt_deframer();
+
+class noaa_hrpt_deframer : public gr_sync_block
+{
+  friend noaa_hrpt_deframer_sptr noaa_make_hrpt_deframer();
+  noaa_hrpt_deframer();
+
+  unsigned int       d_state;
+  unsigned int       d_count;
+  unsigned long long d_shifter; // 60 bit sync word
+
+  void enter_idle();
+  void enter_synced();
+public:
+  int work(int noutput_items,
+          gr_vector_const_void_star &input_items,
+          gr_vector_void_star &output_items);
+};
+
+#endif /* INCLUDED_NOAA_HRPT_DEFRAMER_H */
index e1584227f2ab2c5ad0f5e55b87019729fb8d44a0..98311eb7bf1b7d766227912e0d06eeaff2560138 100644 (file)
@@ -53,6 +53,7 @@ noaa_swig_python = \
 # additional SWIG files to be installed
 noaa_swig_swiginclude_headers =        \
        noaa_swig.i \
+       noaa_hrpt_deframer.i \
        noaa_hrpt_pll_cf.i \
        noaa_hrpt_sync_fb.i
 
diff --git a/gr-noaa/swig/noaa_hrpt_deframer.i b/gr-noaa/swig/noaa_hrpt_deframer.i
new file mode 100644 (file)
index 0000000..73106d7
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*- c++ -*- */
+/*
+ * 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.
+ */
+
+GR_SWIG_BLOCK_MAGIC(noaa,hrpt_deframer)
+
+noaa_hrpt_deframer_sptr
+noaa_make_hrpt_deframer();
+
+class noaa_hrpt_deframer : public gr_sync_block
+{
+private:
+  noaa_hrpt_deframer();
+};
index 8223eedb997445a633c2f7befa3070a263ef0f7a..44f2e47235f034407d24c3fbf5387771d07bbb4b 100644 (file)
 %include "gnuradio.i"
 
 %{
+#include <noaa_hrpt_deframer.h>
 #include <noaa_hrpt_pll_cf.h>
 #include <noaa_hrpt_sync_fb.h>
 %}
 
+%include "noaa_hrpt_deframer.i"
 %include "noaa_hrpt_pll_cf.i"
 %include "noaa_hrpt_sync_fb.i"