mirror of https://github.com/PentHertz/srsLTE.git
added interface to pdcch_set_cfi
This commit is contained in:
parent
3a8c813809
commit
dd694be141
|
@ -90,6 +90,9 @@ SRSLTE_API int srslte_pdcch_init(srslte_pdcch_t *q,
|
|||
SRSLTE_API void srslte_pdcch_free(srslte_pdcch_t *q);
|
||||
|
||||
|
||||
SRSLTE_API void srslte_pdcch_set_cfi(srslte_pdcch_t *q,
|
||||
uint32_t cfi);
|
||||
|
||||
/* Encoding function */
|
||||
SRSLTE_API int srslte_pdcch_encode(srslte_pdcch_t *q,
|
||||
srslte_dci_msg_t *msg,
|
||||
|
|
|
@ -65,7 +65,7 @@ int srslte_dci_msg_to_dl_grant(srslte_dci_msg_t *msg, uint16_t msg_rnti,
|
|||
srslte_dci_format_t tmp = msg->format;
|
||||
ret = srslte_dci_msg_unpack_pdsch(msg, dl_dci, nof_prb, nof_ports, crc_is_crnti);
|
||||
if (ret) {
|
||||
//fprintf(stderr, "Can't unpack DCI message %s (%d)\n", srslte_dci_format_string(tmp), tmp);
|
||||
fprintf(stderr, "Can't unpack DCI message %s (%d)\n", srslte_dci_format_string(tmp), tmp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -52,6 +52,9 @@ static void set_cfi(srslte_pdcch_t *q, uint32_t cfi) {
|
|||
}
|
||||
}
|
||||
|
||||
void srslte_pdcch_set_cfi(srslte_pdcch_t *q, uint32_t cfi) {
|
||||
set_cfi(q, cfi);
|
||||
}
|
||||
|
||||
/** Initializes the PDCCH transmitter and receiver */
|
||||
int srslte_pdcch_init(srslte_pdcch_t *q, srslte_regs_t *regs, srslte_cell_t cell) {
|
||||
|
@ -217,7 +220,8 @@ uint32_t srslte_pdcch_ue_locations_ncce(uint32_t nof_cce, srslte_dci_location_t
|
|||
}
|
||||
}
|
||||
|
||||
DEBUG("Initiated %d candidate(s) in the UE-specific search space for C-RNTI: 0x%x\n", k, rnti);
|
||||
DEBUG("Initiated %d candidate(s) in the UE-specific search space for C-RNTI: 0x%x, nsubframe=%d, nof_cce=%d\n",
|
||||
k, rnti, nsubframe, nof_cce);
|
||||
|
||||
return k;
|
||||
}
|
||||
|
|
|
@ -162,9 +162,9 @@ void srslte_ue_dl_set_rnti(srslte_ue_dl_t *q, uint16_t rnti) {
|
|||
// Compute UE-specific and Common search space for this RNTI
|
||||
for (int cfi=0;cfi<3;cfi++) {
|
||||
for (int sf_idx=0;sf_idx<10;sf_idx++) {
|
||||
q->current_ss_ue[cfi][sf_idx].nof_locations = srslte_pdcch_ue_locations(&q->pdcch, q->current_ss_ue[cfi][sf_idx].loc, MAX_CANDIDATES_UE, sf_idx, cfi, rnti);
|
||||
q->current_ss_ue[cfi][sf_idx].nof_locations = srslte_pdcch_ue_locations(&q->pdcch, q->current_ss_ue[cfi][sf_idx].loc, MAX_CANDIDATES_UE, sf_idx, cfi+1, rnti);
|
||||
}
|
||||
q->current_ss_common[cfi].nof_locations = srslte_pdcch_common_locations(&q->pdcch, q->current_ss_common[cfi].loc, MAX_CANDIDATES_COM, cfi);
|
||||
q->current_ss_common[cfi].nof_locations = srslte_pdcch_common_locations(&q->pdcch, q->current_ss_common[cfi].loc, MAX_CANDIDATES_COM, cfi+1);
|
||||
}
|
||||
|
||||
q->current_rnti = rnti;
|
||||
|
@ -341,8 +341,10 @@ static int dci_blind_search(srslte_ue_dl_t *q, dci_blind_search_t *search_space,
|
|||
ret = 0;
|
||||
int i=0;
|
||||
while (!ret && i < search_space->nof_locations) {
|
||||
INFO("Searching format %s in %d,%d\n",
|
||||
srslte_dci_format_string(search_space->format), search_space->loc[i].ncce, search_space->loc[i].L);
|
||||
DEBUG("Searching format %s in %d,%d (%d/%d)\n",
|
||||
srslte_dci_format_string(search_space->format), search_space->loc[i].ncce, search_space->loc[i].L,
|
||||
i, search_space->nof_locations);
|
||||
|
||||
if (srslte_pdcch_decode_msg(&q->pdcch, dci_msg, &search_space->loc[i], search_space->format, &crc_rem)) {
|
||||
fprintf(stderr, "Error decoding DCI msg\n");
|
||||
return SRSLTE_ERROR;
|
||||
|
@ -357,7 +359,7 @@ static int dci_blind_search(srslte_ue_dl_t *q, dci_blind_search_t *search_space,
|
|||
// Else if we found it, save location and leave
|
||||
} else if (dci_msg->format == search_space->format) {
|
||||
ret = 1;
|
||||
if (search_space->format == SRSLTE_DCI_FORMAT0) {
|
||||
if (dci_msg->format == SRSLTE_DCI_FORMAT0) {
|
||||
memcpy(&q->last_location_ul, &search_space->loc[i], sizeof(srslte_dci_location_t));
|
||||
} else {
|
||||
memcpy(&q->last_location, &search_space->loc[i], sizeof(srslte_dci_location_t));
|
||||
|
@ -385,12 +387,15 @@ int srslte_ue_dl_find_ul_dci(srslte_ue_dl_t *q, uint32_t cfi, uint32_t sf_idx, u
|
|||
// Configure and run DCI blind search
|
||||
dci_blind_search_t search_space;
|
||||
dci_blind_search_t *current_ss = &search_space;
|
||||
if (q->current_rnti == rnti) {
|
||||
if (q->current_rnti == rnti) {
|
||||
current_ss = &q->current_ss_ue[cfi-1][sf_idx];
|
||||
} else {
|
||||
// If locations are not pre-generated, generate them now
|
||||
current_ss->nof_locations = srslte_pdcch_ue_locations(&q->pdcch, current_ss->loc, MAX_CANDIDATES_UE, sf_idx, cfi, rnti);
|
||||
}
|
||||
}
|
||||
|
||||
srslte_pdcch_set_cfi(&q->pdcch, cfi);
|
||||
|
||||
current_ss->format = SRSLTE_DCI_FORMAT0;
|
||||
INFO("Searching UL C-RNTI in %d ue locations\n", search_space.nof_locations);
|
||||
return dci_blind_search(q, current_ss, rnti, dci_msg);
|
||||
|
@ -448,6 +453,9 @@ static int find_dl_dci_type_crnti(srslte_ue_dl_t *q, uint32_t cfi, uint32_t sf_i
|
|||
// If locations are not pre-generated, generate them now
|
||||
current_ss->nof_locations = srslte_pdcch_ue_locations(&q->pdcch, current_ss->loc, MAX_CANDIDATES_UE, sf_idx, cfi, rnti);
|
||||
}
|
||||
|
||||
srslte_pdcch_set_cfi(&q->pdcch, cfi);
|
||||
|
||||
INFO("Searching DL C-RNTI in %d ue locations, %d formats\n", current_ss->nof_locations, nof_ue_formats);
|
||||
for (int f=0;f<nof_ue_formats;f++) {
|
||||
current_ss->format = ue_formats[f];
|
||||
|
@ -463,6 +471,9 @@ static int find_dl_dci_type_crnti(srslte_ue_dl_t *q, uint32_t cfi, uint32_t sf_i
|
|||
// If locations are not pre-generated, generate them now
|
||||
current_ss->nof_locations = srslte_pdcch_common_locations(&q->pdcch, current_ss->loc, MAX_CANDIDATES_COM, cfi);
|
||||
}
|
||||
|
||||
srslte_pdcch_set_cfi(&q->pdcch, cfi);
|
||||
|
||||
// Search for RNTI only if there is room for the common search space
|
||||
if (current_ss->nof_locations > 0) {
|
||||
current_ss->format = SRSLTE_DCI_FORMAT1A;
|
||||
|
|
Loading…
Reference in New Issue