[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r3508 - gnuradio/branches/developers/jcorgan/pager/gr-
From: |
jcorgan |
Subject: |
[Commit-gnuradio] r3508 - gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib |
Date: |
Fri, 8 Sep 2006 18:51:00 -0600 (MDT) |
Author: jcorgan
Date: 2006-09-08 18:51:00 -0600 (Fri, 08 Sep 2006)
New Revision: 3508
Modified:
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pgr_flex_sync.cc
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pgr_flex_sync.h
Log:
Completed FLEX synchornization/deframing block. The data stream is
now ready for de-interleaving.
Modified:
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pgr_flex_sync.cc
===================================================================
---
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pgr_flex_sync.cc
2006-09-08 22:37:03 UTC (rev 3507)
+++
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pgr_flex_sync.cc
2006-09-09 00:51:00 UTC (rev 3508)
@@ -147,6 +147,7 @@
d_center = d_center/2;
d_index = d_index/2-d_spb/2; // We're here at the center of a 1600
baud bit
d_count = -1; // So this hack gets us in the right
place for 3200
+ d_hibit = false;
}
}
@@ -154,15 +155,38 @@
{
d_state = ST_DATA;
d_count = 0;
- // more stuff here
}
void pgr_flex_sync::do_multiphase_shift(unsigned char sym)
{
- d_phase_a = (d_phase_a << 1) | (sym < 2);
+ // Bits are encoded with 2-bit gray code
+ //
+ // SYM Bit1 Bit2
+ // --- ---- ----
+ // 0 1 1
+ // 1 1 0
+ // 2 0 0
+ // 3 0 1
- // Here is where to add logic to manipulate
- // d_phase_b, _c, and _d based on current FLEX mode
+ if (d_baudrate == 1600) {
+ d_phase_a = (d_phase_a << 1) | (sym < 2);
+ if (d_levels == 4)
+ d_phase_b = (d_phase_b << 1) | (sym == 0 || sym == 3);
+ }
+ else { // baudrate == 3200, multiplex alternating bits
+ if (!d_hibit) {
+ d_phase_a = (d_phase_a << 1) | (sym < 2);
+ if (d_levels == 4)
+ d_phase_b = (d_phase_b << 1) | (sym == 0 || sym == 3);
+ d_hibit = true;
+ }
+ else {
+ d_phase_c = (d_phase_a << 1) | (sym < 2);
+ if (d_levels == 4)
+ d_phase_d = (d_phase_b << 1) | (sym == 0 || sym == 3);
+ d_hibit = false;
+ }
+ }
}
int pgr_flex_sync::general_work(int noutput_items,
@@ -217,10 +241,26 @@
case ST_DATA:
if (d_index == d_center) {
do_multiphase_shift(sym);
+ d_count++;
- // Here is where to start emitting phased codewords
+ // Send 32-bit code words for each defined phase
+ if (d_count % (d_baudrate/50) == 0) {
+ if (flex_modes[d_mode].phase_a) {
+ *out++ = d_phase_a; j++;
+ }
+ if (flex_modes[d_mode].phase_b) {
+ *out++ = d_phase_b; j++;
+ }
+ if (flex_modes[d_mode].phase_c) {
+ *out++ = d_phase_c; j++;
+ }
+ if (flex_modes[d_mode].phase_d) {
+ *out++ = d_phase_d; j++;
+ }
+ }
- if (++d_count == d_baudrate*1760/1000)
+ // Data portion of frame is 1.76 sec. at either baud rate
+ if (d_count == d_baudrate*1760/1000)
enter_idle();
}
break;
Modified:
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pgr_flex_sync.h
===================================================================
--- gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pgr_flex_sync.h
2006-09-08 22:37:03 UTC (rev 3507)
+++ gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pgr_flex_sync.h
2006-09-09 00:51:00 UTC (rev 3508)
@@ -68,6 +68,7 @@
int d_baudrate; // Current decoding baud rate
int d_levels; // Current decoding levels
int d_spb; // Current samples per baud
+ bool d_hibit; // Current bit is high bit when 3200 baud
gr_int64_vector d_sync; // Trial synchronizers
gr_int32 d_phase_a; // PHASEA accumulator
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r3508 - gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib,
jcorgan <=