commit-gnuradio
[Top][All Lists]
Advanced

[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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]