fix buffer size allocation

This commit is contained in:
Bastian Bloessl
2016-08-22 15:31:47 +02:00
parent 43abd875d9
commit 23a195311a
3 changed files with 13 additions and 11 deletions
+8 -7
View File
@@ -75,7 +75,7 @@ int general_work (int noutput_items, gr_vector_int& ninput_items,
frame_param frame = frame_param(ofdm, len_data);
// check for maximum frame size
if(frame.n_sym <= MAX_SYM && frame.psdu_size <= MAX_FRAME_SIZE) {
if(frame.n_sym <= MAX_SYM && frame.psdu_size <= MAX_PSDU_SIZE) {
d_ofdm = ofdm;
d_frame = frame;
copied = 0;
@@ -107,6 +107,7 @@ int general_work (int noutput_items, gr_vector_int& ninput_items,
}
consume(0, i);
return 0;
}
@@ -170,7 +171,7 @@ void deinterleave() {
void descramble (uint8_t *decoded_bits) {
int state = 0;
std::memset(out_bytes, 0, d_frame.n_data_bits/8 + 1);
std::memset(out_bytes, 0, d_frame.psdu_size+2);
for(int i = 0; i < 7; i++) {
if(decoded_bits[i]) {
@@ -182,7 +183,7 @@ void descramble (uint8_t *decoded_bits) {
int feedback;
int bit;
for(int i = 7; i < d_frame.n_data_bits; i++) {
for(int i = 7; i < d_frame.psdu_size*8+16; i++) {
feedback = ((!!(state & 64))) ^ (!!(state & 8));
bit = feedback ^ (decoded_bits[i] & 0x1);
out_bytes[i/8] |= bit << (i%8);
@@ -193,15 +194,15 @@ void descramble (uint8_t *decoded_bits) {
void print_output() {
dout << std::endl;
dout << "psdu size" << d_frame.n_data_bits / 8 << std::endl;
for(int i = 0; i < d_frame.psdu_size+2; i++) {
dout << "psdu size" << d_frame.psdu_size << std::endl;
for(int i = 2; i < d_frame.psdu_size+2; i++) {
dout << std::setfill('0') << std::setw(2) << std::hex << ((unsigned int)out_bytes[i] & 0xFF) << std::dec << " ";
if(i % 16 == 15) {
dout << std::endl;
}
}
dout << std::endl;
for(int i = 0; i < d_frame.n_data_bits / 8; i++) {
for(int i = 2; i < d_frame.psdu_size+2; i++) {
if((out_bytes[i] > 31) && (out_bytes[i] < 127)) {
dout << ((char) out_bytes[i]);
} else {
@@ -223,7 +224,7 @@ private:
uint8_t d_rx_symbols[48 * MAX_SYM];
uint8_t d_rx_bits[MAX_ENCODED_BITS];
uint8_t d_deinterleaved_bits[MAX_ENCODED_BITS];
uint8_t out_bytes[MAX_FRAME_SIZE];
uint8_t out_bytes[MAX_PSDU_SIZE + 2]; // 2 for signal field
int copied;
bool d_frame_complete;
+1 -1
View File
@@ -102,7 +102,7 @@ void app_in (pmt::pmt_t msg) {
return;
}
if(msg_len >= MAX_FRAME_SIZE - 32) {
if(msg_len > MAX_PAYLOAD_SIZE) {
throw std::invalid_argument("Frame too large (> 1500)");
}
+4 -3
View File
@@ -23,9 +23,10 @@
#include <cinttypes>
#include <iostream>
#define MAX_FRAME_SIZE (1500 + 28 + 4)
#define MAX_SYM (((16 + 8 * MAX_FRAME_SIZE + 6) / 24) + 1)
#define MAX_ENCODED_BITS ((16 + 8 * MAX_FRAME_SIZE + 6) * 2 + 288)
#define MAX_PAYLOAD_SIZE 1500
#define MAX_PSDU_SIZE (MAX_PAYLOAD_SIZE + 28) // MAC, CRC
#define MAX_SYM (((16 + 8 * MAX_PSDU_SIZE + 6) / 24) + 1)
#define MAX_ENCODED_BITS ((16 + 8 * MAX_PSDU_SIZE + 6) * 2 + 288)
#define dout d_debug && std::cout