commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r3587 - gnuradio/branches/developers/jcorgan/pager/gr-


From: jcorgan
Subject: [Commit-gnuradio] r3587 - gnuradio/branches/developers/jcorgan/pager/gr-pager/src
Date: Tue, 19 Sep 2006 13:34:40 -0600 (MDT)

Author: jcorgan
Date: 2006-09-19 13:34:40 -0600 (Tue, 19 Sep 2006)
New Revision: 3587

Modified:
   
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_deframer.cc
   gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_message.cc
   gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_message.h
   gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pageri_flex_modes.cc
Log:
Work-in-progress

Modified: 
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_deframer.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_deframer.cc  
    2006-09-19 17:08:50 UTC (rev 3586)
+++ 
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_deframer.cc  
    2006-09-19 19:34:40 UTC (rev 3587)
@@ -40,8 +40,8 @@
 
 pager_flex_deframer::pager_flex_deframer(int rate) :
     gr_block ("flex_deframer",
-              gr_make_io_signature (1, 1, sizeof(unsigned char)),
-              gr_make_io_signature (1, 1, sizeof(gr_int32))),
+    gr_make_io_signature (1, 1, sizeof(unsigned char)),
+    gr_make_io_signature (1, 1, sizeof(gr_int32))),
     d_sync(rate/1600) // Maximum samples per baud
 {
     d_rate = rate;
@@ -137,7 +137,7 @@
     d_end = d_index;
     d_center = index_avg(d_start, d_end);
     d_count = 0;
-    fprintf(stderr, "SYNC1=%08X\n", flex_modes[d_mode].sync);
+//  fprintf(stderr, "SYNC1=%08X\n", flex_modes[d_mode].sync);
 }
 
 void pager_flex_deframer::enter_sync2()

Modified: 
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_message.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_message.cc   
    2006-09-19 17:08:50 UTC (rev 3586)
+++ 
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_message.cc   
    2006-09-19 19:34:40 UTC (rev 3587)
@@ -34,8 +34,8 @@
 
 pager_flex_message::pager_flex_message() :
     gr_block ("flex_message",
-              gr_make_io_signature (1, 1, sizeof(gr_int32)),
-              gr_make_io_signature (1, 1, sizeof(unsigned char)))
+    gr_make_io_signature (1, 1, sizeof(gr_int32)),
+    gr_make_io_signature (1, 1, sizeof(unsigned char)))
 {
     enter_start();
 }
@@ -47,39 +47,79 @@
 void pager_flex_message::enter_start()
 {
     d_state = ST_START;
-       d_mode = -1;
+    d_mode = -1;
+    d_frame = -1;
+    d_cycle = -1;
+    d_unknown1 = 0;
+    d_unknown2 = 0;
 }
 
 void pager_flex_message::enter_fiw()
 {
-       d_state = ST_FIW;
+    d_state = ST_FIW;
 }
 
 void pager_flex_message::enter_data()
 {
-       d_state = ST_DATA;
-       d_codewords = flex_modes[d_mode].phases*88;
+    d_state = ST_DATA;
+    d_codewords = flex_modes[d_mode].phases*88;
 }
 
 void pager_flex_message::enter_output()
 {
-       d_state = ST_OUTPUT;
+    d_state = ST_OUTPUT;
 }
 
+unsigned char reverse_bits8(unsigned char val)
+{
+    // This method was attributed to Rich Schroeppel in the Programming 
+    // Hacks section of Beeler, M., Gosper, R. W., and Schroeppel, R. 
+    // HAKMEM. MIT AI Memo 239, Feb. 29, 1972.
+    //
+    // Reverses 8 bits in 5 machine operations with 64 bit arch
+    return (val * 0x0202020202ULL & 0x010884422010ULL) % 1023;
+}
+
+void print_binary(int bits, gr_int32 val)
+{
+    val = val << (32-bits);
+    for (int i = 0; i < bits; i++) {
+       if ((val & 0x80000000) >> 31)
+           putchar('1');
+       else
+           putchar('0');
+       val = val << 1;
+    }
+}
+
 void pager_flex_message::parse_fiw(gr_int32 fiw)
 {
-       printf("FIW (raw) = %08X\n", fiw);
+    // Cycle is bits 27-24, reversed and flipped
+    d_cycle = reverse_bits8((fiw >> 20) & 0xF0)^0x0F;
+
+    // Frame is bits 23-17, reversed and flipped
+    d_frame = reverse_bits8((fiw >> 16) & 0xFE)^0x7F;
+
+    // Bits 16-11 are some sort of marker
+    d_unknown1 = (fiw >> 11) & 0x3F;
+       
+    // Bits 31-28 are frame number related, but unknown function
+    d_unknown2 = reverse_bits8((fiw >> 24) & 0xF0);
+       
+    printf("FIW=0x%08X Cycle=%i Frame=%i Unknown1=0x%02X Unknown2=0x%02X\n", 
+           fiw, d_cycle, d_frame, d_unknown1, d_unknown2);
+    fflush(stdout);
 }
 
 void pager_flex_message::parse_codeword(gr_int32 code)
 {
-       printf("CODE = %08X\n", code);
+//    printf("CODE = %08X\n", code);
 }
 
 int pager_flex_message::general_work(int noutput_items,
     gr_vector_int &ninput_items,
     gr_vector_const_void_star &input_items,
-       gr_vector_void_star &output_items)
+    gr_vector_void_star &output_items)
 {
     const gr_int32 *in = (gr_int32 *)input_items[0];
     unsigned char *out = (unsigned char *)output_items[0];
@@ -90,27 +130,27 @@
     while (i < ninputs && j < noutput_items) {
         switch (d_state) {
             case ST_START:
-                               d_mode = find_flex_mode(*in++); i++;
-                               if (d_mode >= 0) {
-                                       printf("Flex mode = %i, sync code = 
%08X\n", d_mode, flex_modes[d_mode].sync);
-                                       enter_fiw();
-                               }
+                d_mode = find_flex_mode(*in++); i++;
+                if (d_mode >= 0) {
+                    printf("SYNC=%08X ", flex_modes[d_mode].sync);
+                    enter_fiw();
+                }
                 break;
 
-                       case ST_FIW:
-                               parse_fiw(*in++); i++;
-                               enter_data();
-                               break;
+            case ST_FIW:
+                parse_fiw(*in++); i++;
+                enter_data();
+                break;
 
-                       case ST_DATA:
-                               parse_codeword(*in++); i++;
-                               if (--d_codewords == 0)
-                                       enter_output();
-                               break;
+            case ST_DATA:
+                parse_codeword(*in++); i++;
+                if (--d_codewords == 0)
+                    enter_output();
+                break;
 
-                       case ST_OUTPUT:
-                               enter_start();
-                               break;
+            case ST_OUTPUT:
+                enter_start();
+                break;
 
             default:
                 assert(0); // memory corruption of d_state if ever gets here

Modified: 
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_message.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_message.h    
    2006-09-19 17:08:50 UTC (rev 3586)
+++ 
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_message.h    
    2006-09-19 19:34:40 UTC (rev 3587)
@@ -44,20 +44,25 @@
 
     // State machine transitions
     void enter_start();
-       void enter_fiw();
-       void enter_data();
-       void enter_output();
+    void enter_fiw();
+    void enter_data();
+    void enter_output();
 
-       void parse_fiw(gr_int32 fiw);
-       void parse_codeword(gr_int32 code);
+    void parse_fiw(gr_int32 fiw);
+    void parse_codeword(gr_int32 code);
 
     // Simple state machine
     enum state_t { ST_START, ST_FIW, ST_DATA, ST_OUTPUT };
     state_t d_state;     
 
-       int d_mode;              // Current FLEX mode of operation
-       int d_codewords; // Codewords remaining in frame
+    int d_mode;                // Current FLEX mode of operation
+    int d_codewords;   // Codewords remaining in frame
 
+    int d_cycle;       // Current FLEX transmission cycle number
+    int d_frame;       // Current FLEX transmission frame number
+    unsigned int d_unknown1; // Unknown field #1
+    unsigned int d_unknown2; // Unknown field #2
+
 public:
    ~pager_flex_message();   
 

Modified: 
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pageri_flex_modes.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pageri_flex_modes.cc    
    2006-09-19 17:08:50 UTC (rev 3586)
+++ 
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pageri_flex_modes.cc    
    2006-09-19 19:34:40 UTC (rev 3587)
@@ -34,10 +34,10 @@
 
 int find_flex_mode(gr_int32 sync_code)
 {
-       for (int i = 0; i < num_flex_modes; i++)
-               if (flex_modes[i].sync == sync_code)
-                       return i;
+    for (int i = 0; i < num_flex_modes; i++)
+       if (flex_modes[i].sync == sync_code)
+           return i;
        
-       // Not found
-       return -1;
+    // Not found
+    return -1;
 }





reply via email to

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