void base_free() { int i; for (i = 0; i < SRSLTE_MAX_CODEWORDS; i++) { srslte_softbuffer_tx_free(softbuffers[i]); if (softbuffers[i]) { free(softbuffers[i]); } } srslte_pdsch_free(&pdsch); srslte_pdcch_free(&pdcch); srslte_regs_free(®s); srslte_pbch_free(&pbch); if(mbsfn_area_id > -1){ srslte_pmch_free(&pmch); } srslte_ofdm_tx_free(&ifft_mbsfn); for (i = 0; i < cell.nof_ports; i++) { srslte_ofdm_tx_free(&ifft[i]); } for (i = 0; i < SRSLTE_MAX_CODEWORDS; i++) { if (data[i]) { free(data[i]); } } for (i = 0; i < SRSLTE_MAX_PORTS; i++) { if (sf_buffer[i]) { free(sf_buffer[i]); } if (output_buffer[i]) { free(output_buffer[i]); } } if (output_file_name) { if (!null_file_sink) { srslte_filesink_free(&fsink); } } else { #ifndef DISABLE_RF srslte_rf_close(&rf); #endif } if (net_port > 0) { srslte_netsource_free(&net_source); sem_close(&net_sem); } }
void base_free() { int i; srslte_filesource_free(&fsrc); free(input_buffer); free(fft_buffer); srslte_filesource_free(&fsrc); for (i=0;i<cell.nof_ports;i++) { free(ce[i]); } srslte_chest_dl_free(&chest); srslte_ofdm_rx_free(&fft); srslte_pbch_free(&pbch); }
void srslte_ue_mib_free(srslte_ue_mib_t * q) { if (q->sf_symbols) { free(q->sf_symbols); } for (int i=0;i<SRSLTE_MAX_PORTS;i++) { if (q->ce[i]) { free(q->ce[i]); } } srslte_sync_free(&q->sfind); srslte_chest_dl_free(&q->chest); srslte_pbch_free(&q->pbch); srslte_ofdm_rx_free(&q->fft); bzero(q, sizeof(srslte_ue_mib_t)); }
void srslte_enb_dl_free(srslte_enb_dl_t *q) { if (q) { for (int i = 0; i < SRSLTE_MAX_PORTS; i++) { srslte_ofdm_tx_free(&q->ifft[i]); } srslte_ofdm_tx_free(&q->ifft_mbsfn); srslte_regs_free(&q->regs); srslte_pbch_free(&q->pbch); srslte_pcfich_free(&q->pcfich); srslte_phich_free(&q->phich); srslte_pdcch_free(&q->pdcch); srslte_pdsch_free(&q->pdsch); srslte_pmch_free(&q->pmch); srslte_refsignal_free(&q->csr_signal); srslte_refsignal_free(&q->mbsfnr_signal); for (int i=0;i<SRSLTE_MAX_PORTS;i++) { if (q->sf_symbols[i]) { free(q->sf_symbols[i]); } } bzero(q, sizeof(srslte_enb_dl_t)); } }
int main(int argc, char **argv) { srslte_pbch_t pbch; uint8_t bch_payload_tx[SRSLTE_BCH_PAYLOAD_LEN], bch_payload_rx[SRSLTE_BCH_PAYLOAD_LEN]; int i, j; cf_t *ce[SRSLTE_MAX_PORTS]; int nof_re; cf_t *slot1_symbols[SRSLTE_MAX_PORTS]; uint32_t nof_rx_ports; parse_args(argc,argv); nof_re = SRSLTE_SLOT_LEN_RE(cell.nof_prb, SRSLTE_CP_NORM); /* init memory */ for (i=0;i<cell.nof_ports;i++) { ce[i] = malloc(sizeof(cf_t) * nof_re); if (!ce[i]) { perror("malloc"); exit(-1); } for (j=0;j<nof_re;j++) { ce[i][j] = 1; } slot1_symbols[i] = malloc(sizeof(cf_t) * nof_re); if (!slot1_symbols[i]) { perror("malloc"); exit(-1); } } if (srslte_pbch_init(&pbch, cell)) { fprintf(stderr, "Error creating PBCH object\n"); exit(-1); } srand(time(NULL)); for (i=0;i<SRSLTE_BCH_PAYLOAD_LEN;i++) { bch_payload_tx[i] = rand()%2; } srslte_pbch_encode(&pbch, bch_payload_tx, slot1_symbols, 0); /* combine outputs */ for (i=1;i<cell.nof_ports;i++) { for (j=0;j<nof_re;j++) { slot1_symbols[0][j] += slot1_symbols[i][j]; } } srslte_pbch_decode_reset(&pbch); if (1 != srslte_pbch_decode(&pbch, slot1_symbols[0], ce, 0, bch_payload_rx, &nof_rx_ports, NULL)) { printf("Error decoding\n"); exit(-1); } srslte_pbch_free(&pbch); for (i=0;i<cell.nof_ports;i++) { free(ce[i]); free(slot1_symbols[i]); } printf("Tx ports: %d - Rx ports: %d\n", cell.nof_ports, nof_rx_ports); printf("Tx payload: "); srslte_vec_fprint_hex(stdout, bch_payload_tx, SRSLTE_BCH_PAYLOAD_LEN); printf("Rx payload: "); srslte_vec_fprint_hex(stdout, bch_payload_rx, SRSLTE_BCH_PAYLOAD_LEN); if (nof_rx_ports == cell.nof_ports && !memcmp(bch_payload_rx, bch_payload_tx, sizeof(uint8_t) * SRSLTE_BCH_PAYLOAD_LEN)) { printf("OK\n"); exit(0); } else { printf("Error\n"); exit(-1); } }