summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnuradio-runtime/lib/pmt/pmt_serialize.cc2
-rw-r--r--gr-digital/include/gnuradio/digital/packet_header_ofdm.h1
-rw-r--r--gr-digital/lib/packet_header_default.cc8
-rw-r--r--gr-digital/lib/packet_header_ofdm.cc55
-rw-r--r--gr-digital/lib/packet_headergenerator_bb_impl.cc3
-rwxr-xr-xgr-digital/python/digital/qa_packet_headerparser_b.py7
-rw-r--r--gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc5
-rw-r--r--gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc2
-rw-r--r--gr-filter/lib/fir_filter.cc12
-rw-r--r--gr-filter/lib/fir_filter_with_buffer.cc12
10 files changed, 53 insertions, 54 deletions
diff --git a/gnuradio-runtime/lib/pmt/pmt_serialize.cc b/gnuradio-runtime/lib/pmt/pmt_serialize.cc
index 6147082a21..12a97b974c 100644
--- a/gnuradio-runtime/lib/pmt/pmt_serialize.cc
+++ b/gnuradio-runtime/lib/pmt/pmt_serialize.cc
@@ -297,7 +297,7 @@ serialize(pmt_t obj, std::streambuf &sb)
}
if(is_real(obj)) {
- float i = to_double(obj);
+ double i = to_double(obj);
ok = serialize_untagged_u8(PST_DOUBLE, sb);
ok &= serialize_untagged_f64(i, sb);
return ok;
diff --git a/gr-digital/include/gnuradio/digital/packet_header_ofdm.h b/gr-digital/include/gnuradio/digital/packet_header_ofdm.h
index 40255daf6d..9703f2e352 100644
--- a/gr-digital/include/gnuradio/digital/packet_header_ofdm.h
+++ b/gr-digital/include/gnuradio/digital/packet_header_ofdm.h
@@ -109,7 +109,6 @@ namespace gr {
protected:
pmt::pmt_t d_frame_len_tag_key; //!< Tag key of the additional frame length tag
const std::vector<std::vector<int> > d_occupied_carriers; //!< Which carriers/symbols carry data
- int d_syms_per_set; //!< Helper variable: Total number of elements in d_occupied_carriers
int d_bits_per_payload_sym;
std::vector<unsigned char> d_scramble_mask; //!< Bits are xor'd with this before tx'ing
};
diff --git a/gr-digital/lib/packet_header_default.cc b/gr-digital/lib/packet_header_default.cc
index 12b8613b6d..4d0c8df8b1 100644
--- a/gr-digital/lib/packet_header_default.cc
+++ b/gr-digital/lib/packet_header_default.cc
@@ -62,12 +62,10 @@ namespace gr {
}
bool packet_header_default::header_formatter(
- long packet_len,
+ long packet_len,
unsigned char *out,
-
- const std::vector<tag_t> &tags
- )
- {
+ const std::vector<tag_t> &tags
+ ) {
packet_len &= 0x0FFF;
d_crc_impl.reset();
d_crc_impl.process_bytes((void const *) &packet_len, 2);
diff --git a/gr-digital/lib/packet_header_ofdm.cc b/gr-digital/lib/packet_header_ofdm.cc
index 4893b866e2..7a9558640e 100644
--- a/gr-digital/lib/packet_header_ofdm.cc
+++ b/gr-digital/lib/packet_header_ofdm.cc
@@ -74,14 +74,9 @@ namespace gr {
bits_per_header_sym),
d_frame_len_tag_key(pmt::string_to_symbol(frame_len_tag_key)),
d_occupied_carriers(occupied_carriers),
- d_syms_per_set(0),
d_bits_per_payload_sym(bits_per_payload_sym),
d_scramble_mask(d_header_len, 0)
{
- for (unsigned i = 0; i < d_occupied_carriers.size(); i++) {
- d_syms_per_set += d_occupied_carriers[i].size();
- }
-
// Init scrambler mask
if (scramble_header) {
// These are just random values which already have OK PAPR:
@@ -108,36 +103,40 @@ namespace gr {
}
bool packet_header_ofdm::header_parser(
- const unsigned char *in,
- std::vector<tag_t> &tags)
- {
+ const unsigned char *in,
+ std::vector<tag_t> &tags
+ ) {
std::vector<unsigned char> in_descrambled(d_header_len, 0);
for (int i = 0; i < d_header_len; i++) {
- in_descrambled[i] = in[i] ^ d_scramble_mask[i];
+ in_descrambled[i] = in[i] ^ d_scramble_mask[i];
}
if (!packet_header_default::header_parser(&in_descrambled[0], tags)) {
- return false;
+ return false;
}
- int packet_len = 0; // # of bytes in this frame
- for (unsigned i = 0; i < tags.size(); i++) {
- if (pmt::equal(tags[i].key, d_len_tag_key)) {
- // Convert bytes to complex symbols:
- packet_len = pmt::to_long(tags[i].value) * 8 / d_bits_per_payload_sym;
- if (pmt::to_long(tags[i].value) * 8 % d_bits_per_payload_sym) {
- packet_len++;
- }
- tags[i].value = pmt::from_long(packet_len);
- break;
- }
+ int packet_len = 0; // # of complex symbols in this frame
+ for (size_t i = 0; i < tags.size(); i++) {
+ if (pmt::equal(tags[i].key, d_len_tag_key)) {
+ // Convert bytes to complex symbols:
+ packet_len = pmt::to_long(tags[i].value) * 8 / d_bits_per_payload_sym;
+ if (pmt::to_long(tags[i].value) * 8 % d_bits_per_payload_sym) {
+ packet_len++;
+ }
+ tags[i].value = pmt::from_long(packet_len);
+ break;
+ }
}
- // frame_len == # of OFDM symbols in this frame
- int frame_len = packet_len / d_syms_per_set;
- int k = 0;
- int i = frame_len * d_syms_per_set;
- while (i < packet_len) {
- frame_len++;
- i += d_occupied_carriers[k].size();
+ // To figure out how many payload OFDM symbols there are in this frame,
+ // we need to go through the carrier allocation and count the number of
+ // allocated carriers per OFDM symbol.
+ // frame_len == # of payload OFDM symbols in this frame
+ int frame_len = 0;
+ size_t k = 0; // position in the carrier allocation map
+ int symbols_accounted_for = 0;
+ while (symbols_accounted_for < packet_len) {
+ frame_len++;
+ symbols_accounted_for += d_occupied_carriers[k].size();
+ k = (k + 1) % d_occupied_carriers.size();
}
tag_t tag;
tag.key = d_frame_len_tag_key;
diff --git a/gr-digital/lib/packet_headergenerator_bb_impl.cc b/gr-digital/lib/packet_headergenerator_bb_impl.cc
index 27f3b004de..3dd2e0469b 100644
--- a/gr-digital/lib/packet_headergenerator_bb_impl.cc
+++ b/gr-digital/lib/packet_headergenerator_bb_impl.cc
@@ -68,7 +68,8 @@ namespace gr {
set_relative_rate(d_formatter->header_len());
set_tag_propagation_policy(TPP_DONT);
}
-void
+
+ void
packet_headergenerator_bb_impl::set_header_formatter(packet_header_default::sptr header_formatter)
{
gr::thread::scoped_lock guard(d_setlock);
diff --git a/gr-digital/python/digital/qa_packet_headerparser_b.py b/gr-digital/python/digital/qa_packet_headerparser_b.py
index 1844991bc0..fb4226d6fd 100755
--- a/gr-digital/python/digital/qa_packet_headerparser_b.py
+++ b/gr-digital/python/digital/qa_packet_headerparser_b.py
@@ -97,6 +97,9 @@ class qa_packet_headerparser_b (gr_unittest.TestCase):
""" Header 1: 193 bytes
Header 2: 8 bytes
2 bits per complex symbol, 32 carriers => 64 bits = 8 bytes per OFDM symbol
+ 4 carriers => 8 bits = 1 byte per OFDM symbol
+ 8 carriers => 16 bits = 2 bytes per OFDM symbol
+ Means we need 52 carriers to store the 193 bytes.
"""
encoded_headers = (
# | Number of bytes | Packet number | CRC
@@ -107,7 +110,7 @@ class qa_packet_headerparser_b (gr_unittest.TestCase):
frame_len_tagname = "frame_len"
src = blocks.vector_source_b(encoded_headers)
header_formatter = digital.packet_header_ofdm(
- (range(32),), # 32 carriers are occupied (which doesn't matter here)
+ (range(32),range(4),range(8)), # 32/4/8 carriers are occupied (which doesn't matter here)
1, # 1 OFDM symbol per header (= 32 bits)
packet_len_tagname,
frame_len_tagname,
@@ -127,7 +130,7 @@ class qa_packet_headerparser_b (gr_unittest.TestCase):
msg1 = pmt.to_python(sink.get_message(0))
msg2 = pmt.to_python(sink.get_message(1))
# Multiply with 4 because unpacked bytes have only two bits
- self.assertEqual(msg1, {'packet_len': 193*4, 'frame_len': 25, 'packet_num': 0})
+ self.assertEqual(msg1, {'packet_len': 193*4, 'frame_len': 52, 'packet_num': 0})
self.assertEqual(msg2, {'packet_len': 8*4, 'frame_len': 1, 'packet_num': 1})
def test_004_ofdm_scramble(self):
diff --git a/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc b/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc
index 4f24f0258f..54d25e49ea 100644
--- a/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc
+++ b/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc
@@ -161,14 +161,13 @@ namespace gr {
// We output one byte for a symbol of m bits
// The out/in rate in bytes is: 8n/km (Bytes)
- assert(d_ninput % 1);
- assert(d_noutput % 1512);
+ assert(d_noutput % 1512 == 0);
// Set output items multiple of 4
set_output_multiple(4);
// Set relative rate out/in
- assert((d_noutput * d_k * d_m) % (d_ninput * 8 * d_n));
+ assert((d_noutput * d_k * d_m) % (d_ninput * 8 * d_n) == 0);
set_relative_rate((float)(d_ninput * 8 * d_n) / (float)d_noutput * d_k * d_m);
// calculate in and out block sizes
diff --git a/gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc b/gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc
index 3b0f9fddfb..8e22d8df5a 100644
--- a/gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc
+++ b/gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc
@@ -578,7 +578,7 @@ namespace gr {
*
* out/in rate is therefore km/8n in bytes
*/
- assert((d_k * d_m) % (8 * d_n));
+ assert((d_k * d_m) % (8 * d_n) == 0);
set_relative_rate((d_k * d_m) / (8 * d_n));
assert ((d_bsize * d_n) % d_m == 0);
diff --git a/gr-filter/lib/fir_filter.cc b/gr-filter/lib/fir_filter.cc
index 3ea3c8b8f6..895c778076 100644
--- a/gr-filter/lib/fir_filter.cc
+++ b/gr-filter/lib/fir_filter.cc
@@ -110,7 +110,7 @@ namespace gr {
float
fir_filter_fff::filter(const float input[])
{
- const float *ar = (float *)((unsigned long) input & ~(d_align-1));
+ const float *ar = (float *)((size_t) input & ~(d_align-1));
unsigned al = input - ar;
volk_32f_x2_dot_prod_32f_a(d_output, ar,
@@ -224,7 +224,7 @@ namespace gr {
gr_complex
fir_filter_ccf::filter(const gr_complex input[])
{
- const gr_complex *ar = (gr_complex *)((unsigned long) input & ~(d_align-1));
+ const gr_complex *ar = (gr_complex *)((size_t) input & ~(d_align-1));
unsigned al = input - ar;
volk_32fc_32f_dot_prod_32fc_a(d_output, ar,
@@ -341,7 +341,7 @@ namespace gr {
gr_complex
fir_filter_fcc::filter(const float input[])
{
- const float *ar = (float *)((unsigned long) input & ~(d_align-1));
+ const float *ar = (float *)((size_t) input & ~(d_align-1));
unsigned al = input - ar;
volk_32fc_32f_dot_prod_32fc_a(d_output,
@@ -456,7 +456,7 @@ namespace gr {
gr_complex
fir_filter_ccc::filter(const gr_complex input[])
{
- const gr_complex *ar = (gr_complex *)((unsigned long) input & ~(d_align-1));
+ const gr_complex *ar = (gr_complex *)((size_t) input & ~(d_align-1));
unsigned al = input - ar;
volk_32fc_x2_dot_prod_32fc_a(d_output, ar,
@@ -570,7 +570,7 @@ namespace gr {
gr_complex
fir_filter_scc::filter(const short input[])
{
- const short *ar = (short *)((unsigned long) input & ~(d_align-1));
+ const short *ar = (short *)((size_t) input & ~(d_align-1));
unsigned al = input - ar;
volk_16i_32fc_dot_prod_32fc_a(d_output, ar,
@@ -685,7 +685,7 @@ namespace gr {
short
fir_filter_fsf::filter(const float input[])
{
- const float *ar = (float *)((unsigned long) input & ~(d_align-1));
+ const float *ar = (float *)((size_t) input & ~(d_align-1));
unsigned al = input - ar;
volk_32f_x2_dot_prod_16i_a(d_output, ar,
diff --git a/gr-filter/lib/fir_filter_with_buffer.cc b/gr-filter/lib/fir_filter_with_buffer.cc
index 9d4dd3a023..91984407e2 100644
--- a/gr-filter/lib/fir_filter_with_buffer.cc
+++ b/gr-filter/lib/fir_filter_with_buffer.cc
@@ -130,7 +130,7 @@ namespace gr {
if(d_idx >= ntaps())
d_idx = 0;
- const float *ar = (float*)((unsigned long)(&d_buffer[d_idx]) & ~(d_align-1));
+ const float *ar = (float*)((size_t)(&d_buffer[d_idx]) & ~(d_align-1));
unsigned al = (&d_buffer[d_idx]) - ar;
volk_32f_x2_dot_prod_32f_a(d_output, ar,
@@ -153,7 +153,7 @@ namespace gr {
d_idx = 0;
}
- const float *ar = (float*)((unsigned long)(&d_buffer[d_idx]) & ~(d_align-1));
+ const float *ar = (float*)((size_t)(&d_buffer[d_idx]) & ~(d_align-1));
unsigned al = (&d_buffer[d_idx]) - ar;
volk_32f_x2_dot_prod_32f_a(d_output, ar,
@@ -283,7 +283,7 @@ namespace gr {
if(d_idx >= ntaps())
d_idx = 0;
- const gr_complex *ar = (gr_complex *)((unsigned long)(&d_buffer[d_idx]) & ~(d_align-1));
+ const gr_complex *ar = (gr_complex *)((size_t)(&d_buffer[d_idx]) & ~(d_align-1));
unsigned al = (&d_buffer[d_idx]) - ar;
volk_32fc_x2_dot_prod_32fc_a(d_output, ar,
@@ -306,7 +306,7 @@ namespace gr {
d_idx = 0;
}
- const gr_complex *ar = (gr_complex *)((unsigned long)(&d_buffer[d_idx]) & ~(d_align-1));
+ const gr_complex *ar = (gr_complex *)((size_t)(&d_buffer[d_idx]) & ~(d_align-1));
unsigned al = (&d_buffer[d_idx]) - ar;
volk_32fc_x2_dot_prod_32fc_a(d_output, ar,
@@ -436,7 +436,7 @@ namespace gr {
if(d_idx >= ntaps())
d_idx = 0;
- const gr_complex *ar = (gr_complex *)((unsigned long)(&d_buffer[d_idx]) & ~(d_align-1));
+ const gr_complex *ar = (gr_complex *)((size_t)(&d_buffer[d_idx]) & ~(d_align-1));
unsigned al = (&d_buffer[d_idx]) - ar;
volk_32fc_32f_dot_prod_32fc_a(d_output, ar,
@@ -459,7 +459,7 @@ namespace gr {
d_idx = 0;
}
- const gr_complex *ar = (gr_complex *)((unsigned long)(&d_buffer[d_idx]) & ~(d_align-1));
+ const gr_complex *ar = (gr_complex *)((size_t)(&d_buffer[d_idx]) & ~(d_align-1));
unsigned al = (&d_buffer[d_idx]) - ar;
volk_32fc_32f_dot_prod_32fc_a(d_output, ar,