|
|
@ -56,25 +56,27 @@ int srslte_softbuffer_rx_init_guru(srslte_softbuffer_rx_t* q, uint32_t max_cb, u
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Initialise object
|
|
|
|
// Initialise object
|
|
|
|
bzero(q, sizeof(srslte_softbuffer_rx_t));
|
|
|
|
SRSLTE_MEM_ZERO(q, srslte_softbuffer_rx_t, 1);
|
|
|
|
|
|
|
|
|
|
|
|
// Set internal attributes
|
|
|
|
// Set internal attributes
|
|
|
|
q->max_cb = max_cb;
|
|
|
|
q->max_cb = max_cb;
|
|
|
|
q->max_cb_size = max_cb_size;
|
|
|
|
q->max_cb_size = max_cb_size;
|
|
|
|
|
|
|
|
|
|
|
|
q->buffer_f = calloc(sizeof(int16_t*), q->max_cb);
|
|
|
|
q->buffer_f = SRSLTE_MEM_ALLOC(int16_t*, q->max_cb);
|
|
|
|
if (!q->buffer_f) {
|
|
|
|
if (!q->buffer_f) {
|
|
|
|
perror("malloc");
|
|
|
|
perror("malloc");
|
|
|
|
goto clean_exit;
|
|
|
|
goto clean_exit;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
SRSLTE_MEM_ZERO(q->buffer_f, int16_t*, q->max_cb);
|
|
|
|
|
|
|
|
|
|
|
|
q->data = calloc(sizeof(uint8_t*), q->max_cb);
|
|
|
|
q->data = SRSLTE_MEM_ALLOC(uint8_t*, q->max_cb);
|
|
|
|
if (!q->data) {
|
|
|
|
if (!q->data) {
|
|
|
|
perror("malloc");
|
|
|
|
perror("malloc");
|
|
|
|
goto clean_exit;
|
|
|
|
goto clean_exit;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
SRSLTE_MEM_ZERO(q->data, uint8_t*, q->max_cb);
|
|
|
|
|
|
|
|
|
|
|
|
q->cb_crc = srslte_vec_malloc(sizeof(bool) * q->max_cb);
|
|
|
|
q->cb_crc = SRSLTE_MEM_ALLOC(bool, q->max_cb);
|
|
|
|
if (!q->cb_crc) {
|
|
|
|
if (!q->cb_crc) {
|
|
|
|
perror("malloc");
|
|
|
|
perror("malloc");
|
|
|
|
goto clean_exit;
|
|
|
|
goto clean_exit;
|
|
|
@ -129,7 +131,8 @@ void srslte_softbuffer_rx_free(srslte_softbuffer_rx_t* q)
|
|
|
|
if (q->cb_crc) {
|
|
|
|
if (q->cb_crc) {
|
|
|
|
free(q->cb_crc);
|
|
|
|
free(q->cb_crc);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
bzero(q, sizeof(srslte_softbuffer_rx_t));
|
|
|
|
|
|
|
|
|
|
|
|
SRSLTE_MEM_ZERO(q, srslte_softbuffer_rx_t, 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -152,15 +155,15 @@ void srslte_softbuffer_rx_reset_cb(srslte_softbuffer_rx_t* q, uint32_t nof_cb)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (uint32_t i = 0; i < nof_cb; i++) {
|
|
|
|
for (uint32_t i = 0; i < nof_cb; i++) {
|
|
|
|
if (q->buffer_f[i]) {
|
|
|
|
if (q->buffer_f[i]) {
|
|
|
|
bzero(q->buffer_f[i], q->max_cb_size * sizeof(int16_t));
|
|
|
|
srslte_vec_i16_zero(q->buffer_f[i], q->max_cb_size);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (q->data[i]) {
|
|
|
|
if (q->data[i]) {
|
|
|
|
bzero(q->data[i], sizeof(uint8_t) * q->max_cb_size / 8);
|
|
|
|
srslte_vec_u8_zero(q->data[i], q->max_cb_size / 8);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (q->cb_crc) {
|
|
|
|
if (q->cb_crc) {
|
|
|
|
bzero(q->cb_crc, sizeof(bool) * q->max_cb);
|
|
|
|
SRSLTE_MEM_ZERO(q->cb_crc, bool, q->max_cb);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
q->tb_crc = false;
|
|
|
|
q->tb_crc = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -185,17 +188,18 @@ int srslte_softbuffer_tx_init_guru(srslte_softbuffer_tx_t* q, uint32_t max_cb, u
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Initialise object
|
|
|
|
// Initialise object
|
|
|
|
bzero(q, sizeof(srslte_softbuffer_tx_t));
|
|
|
|
SRSLTE_MEM_ZERO(q, srslte_softbuffer_tx_t, 1);
|
|
|
|
|
|
|
|
|
|
|
|
// Set internal attributes
|
|
|
|
// Set internal attributes
|
|
|
|
q->max_cb = max_cb;
|
|
|
|
q->max_cb = max_cb;
|
|
|
|
q->max_cb_size = max_cb_size;
|
|
|
|
q->max_cb_size = max_cb_size;
|
|
|
|
|
|
|
|
|
|
|
|
q->buffer_b = calloc(sizeof(uint8_t*), q->max_cb);
|
|
|
|
q->buffer_b = SRSLTE_MEM_ALLOC(uint8_t*, q->max_cb);
|
|
|
|
if (!q->buffer_b) {
|
|
|
|
if (!q->buffer_b) {
|
|
|
|
perror("malloc");
|
|
|
|
perror("malloc");
|
|
|
|
return SRSLTE_ERROR;
|
|
|
|
return SRSLTE_ERROR;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
SRSLTE_MEM_ZERO(q->buffer_b, uint8_t*, q->max_cb);
|
|
|
|
|
|
|
|
|
|
|
|
// TODO: Use HARQ buffer limitation based on UE category
|
|
|
|
// TODO: Use HARQ buffer limitation based on UE category
|
|
|
|
for (uint32_t i = 0; i < q->max_cb; i++) {
|
|
|
|
for (uint32_t i = 0; i < q->max_cb; i++) {
|
|
|
@ -222,7 +226,7 @@ void srslte_softbuffer_tx_free(srslte_softbuffer_tx_t* q)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
free(q->buffer_b);
|
|
|
|
free(q->buffer_b);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
bzero(q, sizeof(srslte_softbuffer_tx_t));
|
|
|
|
SRSLTE_MEM_ZERO(q, srslte_softbuffer_tx_t, 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -239,14 +243,13 @@ void srslte_softbuffer_tx_reset(srslte_softbuffer_tx_t* q)
|
|
|
|
|
|
|
|
|
|
|
|
void srslte_softbuffer_tx_reset_cb(srslte_softbuffer_tx_t* q, uint32_t nof_cb)
|
|
|
|
void srslte_softbuffer_tx_reset_cb(srslte_softbuffer_tx_t* q, uint32_t nof_cb)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
|
|
|
|
if (q->buffer_b) {
|
|
|
|
if (q->buffer_b) {
|
|
|
|
if (nof_cb > q->max_cb) {
|
|
|
|
if (nof_cb > q->max_cb) {
|
|
|
|
nof_cb = q->max_cb;
|
|
|
|
nof_cb = q->max_cb;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (i = 0; i < nof_cb; i++) {
|
|
|
|
for (uint32_t i = 0; i < nof_cb; i++) {
|
|
|
|
if (q->buffer_b[i]) {
|
|
|
|
if (q->buffer_b[i]) {
|
|
|
|
bzero(q->buffer_b[i], sizeof(uint8_t) * q->max_cb_size);
|
|
|
|
srslte_vec_u8_zero(q->buffer_b[i], q->max_cb_size);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|