summaryrefslogtreecommitdiff
path: root/gr-noaa/lib
diff options
context:
space:
mode:
Diffstat (limited to 'gr-noaa/lib')
-rw-r--r--gr-noaa/lib/Makefile.am2
-rw-r--r--gr-noaa/lib/noaa_hrpt_bit_sync.cc72
-rw-r--r--gr-noaa/lib/noaa_hrpt_bit_sync.h49
-rw-r--r--gr-noaa/lib/noaa_hrpt_deframer.cc70
-rw-r--r--gr-noaa/lib/noaa_hrpt_deframer.h2
5 files changed, 43 insertions, 152 deletions
diff --git a/gr-noaa/lib/Makefile.am b/gr-noaa/lib/Makefile.am
index a4423167e..4ef4eb87b 100644
--- a/gr-noaa/lib/Makefile.am
+++ b/gr-noaa/lib/Makefile.am
@@ -29,7 +29,6 @@ lib_LTLIBRARIES = \
libgnuradio-noaa.la
libgnuradio_noaa_la_SOURCES = \
- noaa_hrpt_bit_sync.cc \
noaa_hrpt_decoder.cc \
noaa_hrpt_deframer.cc \
noaa_hrpt_pll_cf.cc
@@ -40,7 +39,6 @@ libgnuradio_noaa_la_LIBADD = \
libgnuradio_noaa_la_LDFLAGS = $(NO_UNDEFINED) -version-info 0:0:0
grinclude_HEADERS = \
- noaa_hrpt_bit_sync.h \
noaa_hrpt_decoder.h \
noaa_hrpt_deframer.h \
noaa_hrpt_pll_cf.h \ No newline at end of file
diff --git a/gr-noaa/lib/noaa_hrpt_bit_sync.cc b/gr-noaa/lib/noaa_hrpt_bit_sync.cc
deleted file mode 100644
index 53e47d91e..000000000
--- a/gr-noaa/lib/noaa_hrpt_bit_sync.cc
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- 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_bit_sync.h>
-#include <gr_io_signature.h>
-#include <iostream>
-
-noaa_hrpt_bit_sync_sptr
-noaa_make_hrpt_bit_sync()
-{
- return gnuradio::get_initial_sptr(new noaa_hrpt_bit_sync());
-}
-
-noaa_hrpt_bit_sync::noaa_hrpt_bit_sync()
- : gr_block("noaa_hrpt_bit_sync",
- gr_make_io_signature(1, 1, sizeof(char)),
- gr_make_io_signature(1, 1, sizeof(char))),
- d_mid_bit(true),
- d_last_bit(0)
-{
-}
-
-int
-noaa_hrpt_bit_sync::general_work(int noutput_items,
- gr_vector_int &ninput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
-{
- int ninputs = ninput_items[0];
- const char *in = (const char *)input_items[0];
- char *out = (char *)output_items[0];
-
- int i = 0, j = 0;
- while (i < ninputs && j < noutput_items) {
- char bit = in[i++];
- char diff = bit^d_last_bit;
- d_last_bit = bit;
-
- if (d_mid_bit && diff) {
- out[j++] = bit;
- d_mid_bit = false;
- }
- else
- d_mid_bit = true;
- }
-
- consume_each(i);
- return j;
-}
diff --git a/gr-noaa/lib/noaa_hrpt_bit_sync.h b/gr-noaa/lib/noaa_hrpt_bit_sync.h
deleted file mode 100644
index 8b8633cdc..000000000
--- a/gr-noaa/lib/noaa_hrpt_bit_sync.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* -*- 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_BIT_SYNC_H
-#define INCLUDED_NOAA_HRPT_BIT_SYNC_H
-
-#include <gr_block.h>
-
-class noaa_hrpt_bit_sync;
-typedef boost::shared_ptr<noaa_hrpt_bit_sync> noaa_hrpt_bit_sync_sptr;
-
-noaa_hrpt_bit_sync_sptr
-noaa_make_hrpt_bit_sync();
-
-class noaa_hrpt_bit_sync : public gr_block
-{
- friend noaa_hrpt_bit_sync_sptr noaa_make_hrpt_bit_sync();
- noaa_hrpt_bit_sync();
-
- bool d_mid_bit;
- unsigned char d_last_bit;
-
- public:
- int general_work(int noutput_items,
- gr_vector_int &ninput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
-};
-
-#endif /* INCLUDED_NOAA_HRPT_BIT_SYNC_H */
diff --git a/gr-noaa/lib/noaa_hrpt_deframer.cc b/gr-noaa/lib/noaa_hrpt_deframer.cc
index 91c94d2a6..e79894869 100644
--- a/gr-noaa/lib/noaa_hrpt_deframer.cc
+++ b/gr-noaa/lib/noaa_hrpt_deframer.cc
@@ -55,6 +55,8 @@ noaa_hrpt_deframer::noaa_hrpt_deframer()
gr_make_io_signature(1, 1, sizeof(short)))
{
set_output_multiple(6); // room for writing full sync when received
+ d_mid_bit = true;
+ d_last_bit = 0;
enter_idle();
}
@@ -86,38 +88,48 @@ noaa_hrpt_deframer::general_work(int noutput_items,
int i = 0, j = 0;
while (i < ninputs && j < noutput_items) {
char bit = in[i++];
-
- switch (d_state) {
- case ST_IDLE:
- d_shifter = (d_shifter << 1) | bit; // MSB transmitted first
-
- if ((d_shifter & 0x0FFFFFFFFFFFFFFFLL) == HRPT_MINOR_FRAME_SYNC) {
- fprintf(stderr, "SYNC #%i", frames_seen++);
- out[j++] = SYNC1;
- out[j++] = SYNC2;
- out[j++] = SYNC3;
- out[j++] = SYNC4;
- out[j++] = SYNC5;
- out[j++] = SYNC6;
- enter_synced();
- }
- break;
-
- case ST_SYNCED:
- d_word = (d_word << 1) | bit; // MSB transmitted first
- if (--d_bit_count == 0) {
- out[j++] = d_word;
- d_word = 0;
- d_bit_count = HRPT_BITS_PER_WORD;
- if (--d_word_count == 0) {
- fprintf(stderr, "...done\n");
- enter_idle();
+ char diff = bit^d_last_bit;
+ d_last_bit = bit;
+
+ // Wait for transition if not synced, otherwise, alternate bits
+ if (d_mid_bit && (diff | (d_state == ST_SYNCED))) {
+ switch (d_state) {
+ case ST_IDLE:
+ d_shifter = (d_shifter << 1) | bit; // MSB transmitted first
+
+ if ((d_shifter & 0x0FFFFFFFFFFFFFFFLL) == HRPT_MINOR_FRAME_SYNC) {
+ fprintf(stderr, "SYNC #%i", frames_seen++);
+ out[j++] = SYNC1;
+ out[j++] = SYNC2;
+ out[j++] = SYNC3;
+ out[j++] = SYNC4;
+ out[j++] = SYNC5;
+ out[j++] = SYNC6;
+ enter_synced();
}
+ break;
+
+ case ST_SYNCED:
+ d_word = (d_word << 1) | bit; // MSB transmitted first
+ if (--d_bit_count == 0) {
+ out[j++] = d_word;
+ d_word = 0;
+ d_bit_count = HRPT_BITS_PER_WORD;
+ if (--d_word_count == 0) {
+ fprintf(stderr, "...done\n");
+ enter_idle();
+ }
+ }
+ break;
+
+ default:
+ throw std::runtime_error("noaa_hrpt_deframer: bad state\n");
}
- break;
- default:
- throw std::runtime_error("noaa_hrpt_deframer: bad state\n");
+ d_mid_bit = false;
+ }
+ else {
+ d_mid_bit = true;
}
}
diff --git a/gr-noaa/lib/noaa_hrpt_deframer.h b/gr-noaa/lib/noaa_hrpt_deframer.h
index 0aeb16a2d..43abba0e9 100644
--- a/gr-noaa/lib/noaa_hrpt_deframer.h
+++ b/gr-noaa/lib/noaa_hrpt_deframer.h
@@ -41,6 +41,8 @@ class noaa_hrpt_deframer : public gr_block
noaa_hrpt_deframer();
unsigned int d_state;
+ bool d_mid_bit;
+ unsigned char d_last_bit;
unsigned int d_bit_count;
unsigned int d_word_count;
unsigned long long d_shifter; // 60 bit sync word