*
* GNU Radio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
+ * the Free Software Foundation; either version 3, or (at your option)
* any later version.
*
* GNU Radio is distributed in the hope that it will be useful,
#include <gr_io_signature.h>
#include <cstdio>
#include <stdexcept>
+#include <string.h>
#define VERBOSE 0
}
inline void
-gr_framer_sink_1::enter_have_header(int payload_len)
+gr_framer_sink_1::enter_have_header(int payload_len, int whitener_offset)
{
if (VERBOSE)
- fprintf(stderr, "@ enter_have_header (payload_len = %d)\n", payload_len);
+ fprintf(stderr, "@ enter_have_header (payload_len = %d) (offset = %d)\n", payload_len, whitener_offset);
d_state = STATE_HAVE_HEADER;
d_packetlen = payload_len;
+ d_packet_whitener_offset = whitener_offset;
d_packetlen_cnt = 0;
d_packet_byte = 0;
d_packet_byte_index = 0;
// we have a full header, check to see if it has been received properly
if (header_ok()){
- int payload_len = header_payload_len();
- if (payload_len <= MAX_PKT_LEN) // reasonable?
- enter_have_header(payload_len); // yes.
- else
- enter_search(); // no.
+ int payload_len;
+ int whitener_offset;
+ header_payload(&payload_len, &whitener_offset);
+ enter_have_header(payload_len, whitener_offset);
+
+ if (d_packetlen == 0){ // check for zero-length payload
+ // build a zero-length message
+ // NOTE: passing header field as arg1 is not scalable
+ gr_message_sptr msg =
+ gr_make_message(0, d_packet_whitener_offset, 0, 0);
+
+ d_target_queue->insert_tail(msg); // send it
+ msg.reset(); // free it up
+
+ enter_search();
+ }
}
else
- enter_search(); // no.
- break; // we're in a new state
+ enter_search(); // bad header
+ break; // we're in a new state
}
}
break;
if (d_packetlen_cnt == d_packetlen){ // packet is filled
// build a message
- gr_message_sptr msg = gr_make_message(0, 0, 0, d_packetlen_cnt);
+ // 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