commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r5650 - gnuradio/branches/features/ofdm/receiver/gnura


From: trondeau
Subject: [Commit-gnuradio] r5650 - gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general
Date: Sun, 3 Jun 2007 19:39:08 -0600 (MDT)

Author: trondeau
Date: 2007-06-03 19:39:07 -0600 (Sun, 03 Jun 2007)
New Revision: 5650

Modified:
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
Log:
fixed problem with using non multiple of 8 for the occupied number of carriers.

Modified: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
        2007-06-04 01:23:13 UTC (rev 5649)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
        2007-06-04 01:39:07 UTC (rev 5650)
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2004,2006 Free Software Foundation, Inc.
+ * Copyright 2007 Free Software Foundation, Inc.
  * 
  * This file is part of GNU Radio
  * 
@@ -39,9 +39,6 @@
 
   d_state = STATE_SYNC_SEARCH;
 
-  // clear state of demapper
-  d_byte_offset = 0;
-  d_partial_byte = 0;
 }
     
 inline void
@@ -51,6 +48,11 @@
     fprintf(stderr, "@ enter_have_sync\n");
 
   d_state = STATE_HAVE_SYNC;
+
+  // clear state of demapper
+  d_byte_offset = 0;
+  d_partial_byte = 0;
+
   d_header = 0;
   d_headerbytelen_cnt = 0;
 }
@@ -58,10 +60,6 @@
 inline void
 gr_ofdm_frame_sink::enter_have_header()
 {
-  if (VERBOSE)
-    fprintf(stderr, "@ enter_have_header (payload_len = %d) (offset = %d)\n", 
-           d_packetlen, d_packet_whitener_offset);
-
   d_state = STATE_HAVE_HEADER;
 
   // header consists of two 16-bit shorts in network byte order
@@ -70,6 +68,10 @@
   d_packetlen = (d_header >> 16) & 0x0fff;
   d_packet_whitener_offset = (d_header >> 28) & 0x000f;
   d_packetlen_cnt = 0;
+
+  if (VERBOSE)
+    fprintf(stderr, "@ enter_have_header (payload_len = %d) (offset = %d)\n", 
+           d_packetlen, d_packet_whitener_offset);
 }
 
 unsigned char gr_ofdm_frame_sink::bpsk_slicer(gr_complex x)
@@ -115,11 +117,14 @@
     d_target_queue(target_queue), d_occupied_carriers(occupied_carriers), 
     d_byte_offset(0), d_partial_byte(0)
 {
+  d_bytes_out = new unsigned char[(int)ceil(d_occupied_carriers/8.0)];
+
   enter_search();
 }
 
 gr_ofdm_frame_sink::~gr_ofdm_frame_sink ()
 {
+  delete [] d_bytes_out;
 }
 
 int
@@ -132,12 +137,11 @@
   int count_tones=0, count_items=0;
   unsigned int j = 0;
   unsigned int bytes=0;
-  unsigned char *bytes_out = new unsigned 
char[(int)floor(d_occupied_carriers/8.0)];
   
   if (VERBOSE)
     fprintf(stderr,">>> Entering state machine\n");
   
-  bytes = bpsk_demapper(&in[0], bytes_out);
+  bytes = bpsk_demapper(&in[0], d_bytes_out);
   
   switch(d_state) {
       
@@ -156,14 +160,14 @@
     if (VERBOSE)
       fprintf(stderr,"Header Search bitcnt=%d, header=0x%08x\n",
              d_headerbytelen_cnt, d_header);
-
+    
     j = 0;
     while(j < bytes) {
-      d_header = (d_header << 8) | (bytes_out[j] & 0xFF);
+      d_header = (d_header << 8) | (d_bytes_out[j] & 0xFF);
       j++;
+      
+      if (++d_headerbytelen_cnt == HEADERBYTELEN) {
        
-      if (++d_headerbytelen_cnt == HEADERBYTELEN) {
-        
        if (VERBOSE)
          fprintf(stderr, "got header: 0x%08x\n", d_header);
        
@@ -176,7 +180,7 @@
          //printf("\n");
          
          while((j < bytes) && (d_packetlen_cnt < d_packetlen)) {
-           d_packet[d_packetlen_cnt++] = bytes_out[j++];
+           d_packet[d_packetlen_cnt++] = d_bytes_out[j++];
          }
          
          if(d_packetlen_cnt == d_packetlen) {
@@ -196,36 +200,36 @@
     }
     break;
       
-    case STATE_HAVE_HEADER:
-      if(sig[0])
-       printf("ERROR -- Found SYNC in HAVE_HEADER at %d, length of %d\n", 
d_packetlen_cnt, d_packetlen);
-      if (VERBOSE)
+  case STATE_HAVE_HEADER:
+    if(sig[0])
+      printf("ERROR -- Found SYNC in HAVE_HEADER at %d, length of %d\n", 
d_packetlen_cnt, d_packetlen);
+    if (VERBOSE)
        fprintf(stderr,"Packet Build\n");
-
-      j = 0;
-      while(j < bytes) {
-       d_packet[d_packetlen_cnt++] = bytes_out[j++];
+    
+    j = 0;
+    while(j < bytes) {
+      d_packet[d_packetlen_cnt++] = d_bytes_out[j++];
+      
+      if (d_packetlen_cnt == d_packetlen){             // packet is filled
+       // build a message
+       // NOTE: passing header field as arg1 is not scalable
+       gr_message_sptr msg =
+         gr_make_message(0, d_packet_whitener_offset, 0, d_packetlen_cnt);
+       memcpy(msg->msg(), d_packet, d_packetlen_cnt);
        
-       if (d_packetlen_cnt == d_packetlen){            // packet is filled
-         // build a message
-         // NOTE: passing header field as arg1 is not scalable
-         gr_message_sptr msg =
-           gr_make_message(0, d_packet_whitener_offset, 0, d_packetlen_cnt);
-         memcpy(msg->msg(), d_packet, d_packetlen_cnt);
-         
-         d_target_queue->insert_tail(msg);             // send it
-         msg.reset();                                  // free it up
-         
-         enter_search();
-         break;
-       }
+       d_target_queue->insert_tail(msg);               // send it
+       msg.reset();                            // free it up
+       
+       enter_search();
+       break;
       }
-      break;
-
+    }
+    break;
+    
   default:
     assert(0);
-
+    
   } // switch
-
+  
   return 1;
 }

Modified: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
 2007-06-04 01:23:13 UTC (rev 5649)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
 2007-06-04 01:39:07 UTC (rev 5650)
@@ -66,6 +66,8 @@
   unsigned int       d_header;                 // header bits
   int               d_headerbytelen_cnt;       // how many so far
 
+  unsigned char      *d_bytes_out;              // hold the current bytes 
produced by the demapper    
+
   unsigned int       d_occupied_carriers;
   unsigned int       d_byte_offset;
   unsigned int       d_partial_byte;





reply via email to

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