[Top][All Lists]
[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;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r5650 - gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general,
trondeau <=