fix buffer size allocation
This commit is contained in:
+8
-7
@@ -75,7 +75,7 @@ int general_work (int noutput_items, gr_vector_int& ninput_items,
|
|||||||
frame_param frame = frame_param(ofdm, len_data);
|
frame_param frame = frame_param(ofdm, len_data);
|
||||||
|
|
||||||
// check for maximum frame size
|
// 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_ofdm = ofdm;
|
||||||
d_frame = frame;
|
d_frame = frame;
|
||||||
copied = 0;
|
copied = 0;
|
||||||
@@ -107,6 +107,7 @@ int general_work (int noutput_items, gr_vector_int& ninput_items,
|
|||||||
}
|
}
|
||||||
|
|
||||||
consume(0, i);
|
consume(0, i);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,7 +171,7 @@ void deinterleave() {
|
|||||||
void descramble (uint8_t *decoded_bits) {
|
void descramble (uint8_t *decoded_bits) {
|
||||||
|
|
||||||
int state = 0;
|
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++) {
|
for(int i = 0; i < 7; i++) {
|
||||||
if(decoded_bits[i]) {
|
if(decoded_bits[i]) {
|
||||||
@@ -182,7 +183,7 @@ void descramble (uint8_t *decoded_bits) {
|
|||||||
int feedback;
|
int feedback;
|
||||||
int bit;
|
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));
|
feedback = ((!!(state & 64))) ^ (!!(state & 8));
|
||||||
bit = feedback ^ (decoded_bits[i] & 0x1);
|
bit = feedback ^ (decoded_bits[i] & 0x1);
|
||||||
out_bytes[i/8] |= bit << (i%8);
|
out_bytes[i/8] |= bit << (i%8);
|
||||||
@@ -193,15 +194,15 @@ void descramble (uint8_t *decoded_bits) {
|
|||||||
void print_output() {
|
void print_output() {
|
||||||
|
|
||||||
dout << std::endl;
|
dout << std::endl;
|
||||||
dout << "psdu size" << d_frame.n_data_bits / 8 << std::endl;
|
dout << "psdu size" << d_frame.psdu_size << std::endl;
|
||||||
for(int i = 0; i < d_frame.psdu_size+2; i++) {
|
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 << " ";
|
dout << std::setfill('0') << std::setw(2) << std::hex << ((unsigned int)out_bytes[i] & 0xFF) << std::dec << " ";
|
||||||
if(i % 16 == 15) {
|
if(i % 16 == 15) {
|
||||||
dout << std::endl;
|
dout << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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)) {
|
if((out_bytes[i] > 31) && (out_bytes[i] < 127)) {
|
||||||
dout << ((char) out_bytes[i]);
|
dout << ((char) out_bytes[i]);
|
||||||
} else {
|
} else {
|
||||||
@@ -223,7 +224,7 @@ private:
|
|||||||
uint8_t d_rx_symbols[48 * MAX_SYM];
|
uint8_t d_rx_symbols[48 * MAX_SYM];
|
||||||
uint8_t d_rx_bits[MAX_ENCODED_BITS];
|
uint8_t d_rx_bits[MAX_ENCODED_BITS];
|
||||||
uint8_t d_deinterleaved_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;
|
int copied;
|
||||||
bool d_frame_complete;
|
bool d_frame_complete;
|
||||||
|
|||||||
+1
-1
@@ -102,7 +102,7 @@ void app_in (pmt::pmt_t msg) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(msg_len >= MAX_FRAME_SIZE - 32) {
|
if(msg_len > MAX_PAYLOAD_SIZE) {
|
||||||
throw std::invalid_argument("Frame too large (> 1500)");
|
throw std::invalid_argument("Frame too large (> 1500)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-3
@@ -23,9 +23,10 @@
|
|||||||
#include <cinttypes>
|
#include <cinttypes>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#define MAX_FRAME_SIZE (1500 + 28 + 4)
|
#define MAX_PAYLOAD_SIZE 1500
|
||||||
#define MAX_SYM (((16 + 8 * MAX_FRAME_SIZE + 6) / 24) + 1)
|
#define MAX_PSDU_SIZE (MAX_PAYLOAD_SIZE + 28) // MAC, CRC
|
||||||
#define MAX_ENCODED_BITS ((16 + 8 * MAX_FRAME_SIZE + 6) * 2 + 288)
|
#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
|
#define dout d_debug && std::cout
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user