diff --git a/executables/nr-ue.c b/executables/nr-ue.c index c73a8fba8e..1260481c6e 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -179,6 +179,8 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) { NR_PRACH_RESOURCES_t prach_resources; memset(&prach_resources, 0, sizeof(prach_resources)); + NR_UL_TIME_ALIGNMENT_t ul_time_alignment; + memset(&ul_time_alignment, 0, sizeof(ul_time_alignment)); int last_sfn_slot = -1; while (!oai_exit) { @@ -199,7 +201,8 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) module_id_t mod_id = 0; NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id); - if (mac->scc == NULL) { + if (mac->scc == NULL) + { continue; } @@ -218,11 +221,28 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) ul_info.slot_rx = slot; ul_info.slot_tx = (slot + slot_ahead) % slots_per_frame; ul_info.frame_tx = (ul_info.slot_rx + slot_ahead >= slots_per_frame) ? ul_info.frame_rx + 1 : ul_info.frame_rx; - if (is_nr_UL_slot(mac->scc, ul_info.slot_tx)) { - LOG_I(NR_MAC, "Slot %d. calling nr_ue_ul_ind() from %s\n", ul_info.slot_tx, __FUNCTION__); + + memset(&mac->dl_info, 0, sizeof(mac->dl_info)); + mac->dl_info.cc_id = CC_id; + mac->dl_info.gNB_index = gNB_id; + mac->dl_info.module_id = mod_id; + mac->dl_info.frame = frame; + mac->dl_info.slot = slot; + mac->dl_info.thread_id = 0; + mac->dl_info.dci_ind = NULL; + mac->dl_info.rx_ind = NULL; + + if (is_nr_UL_slot(mac->scc, ul_info.slot_rx)) + { + nr_ue_dl_indication(&mac->dl_info, &ul_time_alignment); + } + if (is_nr_UL_slot(mac->scc, ul_info.slot_tx)) + { + LOG_D(NR_MAC, "Slot %d. calling nr_ue_ul_ind() from %s\n", ul_info.slot_tx, __FUNCTION__); nr_ue_ul_indication(&ul_info); fapi_nr_ul_config_request_t *ul_config = get_ul_config_request(mac, ul_info.slot_tx); - if (!ul_config) { + if (!ul_config) + { LOG_E(NR_MAC, "mac->ul_config is null! \n"); continue; } @@ -243,12 +263,10 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) else if (nr_prach == 2) { LOG_I(NR_PHY, "In %s: [UE %d] RA completed, setting UE mode to PUSCH\n", __FUNCTION__, mod_id); - //UE->UE_mode[0] = PUSCH; } else if(nr_prach == 3) { LOG_I(NR_PHY, "In %s: [UE %d] RA failed, setting UE mode to PRACH\n", __FUNCTION__, mod_id); - //UE->UE_mode[0] = PRACH; } } } diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index 6610b8d311..dfca193293 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -47,10 +47,10 @@ const char *ul_pdu_type[]={"PRACH", "PUCCH", "PUSCH", "SRS"}; int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response) { - if(scheduled_response != NULL){ - - if (scheduled_response->ul_config != NULL){ - + if(scheduled_response != NULL) + { + if (scheduled_response->ul_config != NULL) + { fapi_nr_ul_config_request_t *ul_config = scheduled_response->ul_config; AssertFatal(ul_config->number_pdus < sizeof(ul_config->ul_config_list) / sizeof(ul_config->ul_config_list[0]), "Too many ul_config pdus %d", ul_config->number_pdus); @@ -99,6 +99,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response { crc_ind->crc_list[j].handle = pusch_config_pdu->handle; crc_ind->crc_list[j].harq_id = pusch_config_pdu->pusch_data.harq_process_id; + LOG_I(NR_MAC, "This is the harq pid %d for crc_list[%d]\n", crc_ind->crc_list[j].harq_id, j); crc_ind->crc_list[j].num_cb = pusch_config_pdu->pusch_data.num_cb; crc_ind->crc_list[j].rnti = pusch_config_pdu->rnti; crc_ind->crc_list[j].tb_crc_status = 0; @@ -123,6 +124,36 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response } scheduled_response->ul_config->number_pdus = 0; } + if (scheduled_response->dl_config != NULL) + { + //scheduled_response->dl_config->number_pdus = 0; + /* After calling nr_ue_dl_indiction then the dl_config is here. + We will have dl_config and a tx_req. Then we need to + if(retmax_ldpc_iterations+1){ + + switch (pdsch) { + case RA_PDSCH: + nr_fill_dl_indication(&dl_indication, NULL, &rx_ind, proc, ue, eNB_id); + nr_fill_rx_indication(&rx_ind, FAPI_NR_RX_PDU_TYPE_RAR, eNB_id, ue, dlsch0, number_pdus); + + ue->UE_mode[eNB_id] = RA_RESPONSE; + break; + case PDSCH: + nr_fill_dl_indication(&dl_indication, NULL, &rx_ind, proc, ue, eNB_id); + nr_fill_rx_indication(&rx_ind, FAPI_NR_RX_PDU_TYPE_DLSCH, eNB_id, ue, dlsch0, number_pdus); + break; + case SI_PDSCH: + rx_ind.rx_indication_body[0].pdu_type = FAPI_NR_RX_PDU_TYPE_SIB; + break; + default: + break; + } + // send to mac + if (ue->if_inst && ue->if_inst->dl_indication) { + ue->if_inst->dl_indication(&dl_indication, ul_time_alignment); + } + */ + } } return 0; } diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.h b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.h index 6288d2ff35..83c6548915 100755 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.h +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.h @@ -35,6 +35,7 @@ #include "NR_IF_Module.h" #include "openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h" +#include "openair2/LAYER2/NR_MAC_UE/mac_proto.h" /**\brief NR UE FAPI-like P7 messages, scheduled response from L2 indicating L1 \param scheduled_response including transmission config(dl_config, ul_config) and data transmission (tx_req)*/ diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c index 5022199e5b..e126a88699 100644 --- a/openair2/LAYER2/MAC/ue_procedures.c +++ b/openair2/LAYER2/MAC/ue_procedures.c @@ -2614,6 +2614,7 @@ ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP, scheduling_info.BSR_bytes[UE_mac_inst[module_idP]. scheduling_info.LCGID [lcid]]); + AssertFatal(num_sdus < sizeof(sdu_lengths) / sizeof(sdu_lengths[0]), "num_sdus %d > num sdu_length elements\n", num_sdus); sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, UE_mac_inst [module_idP]. diff --git a/openair2/LAYER2/NR_MAC_UE/mac_defs.h b/openair2/LAYER2/NR_MAC_UE/mac_defs.h index dd0aa15c52..7d293aa146 100755 --- a/openair2/LAYER2/NR_MAC_UE/mac_defs.h +++ b/openair2/LAYER2/NR_MAC_UE/mac_defs.h @@ -372,6 +372,8 @@ typedef struct { NR_SearchSpace_t *search_space_zero; NR_ControlResourceSet_t *coreset0; + nr_downlink_indication_t dl_info; + } NR_UE_MAC_INST_t; typedef enum seach_space_mask_e { diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c index bfede16e23..50bcad6ff0 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c @@ -136,12 +136,6 @@ void config_dci_pdu(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_dci_dl_pdu_rel15_t rel15->SubcarrierSpacing = bwp_Common->genericParameters.subcarrierSpacing; for (int i = 0; i < rel15->num_dci_options; i++) { rel15->dci_length_options[i] = nr_dci_size(scc, mac->scg, def_dci_pdu_rel15+i, rel15->dci_format_options[i], NR_RNTI_C, rel15->BWPSize, bwp_id); - AssertFatal(mac->dl_config_request.number_pdus < - sizeof(mac->dl_config_request.dl_config_list) / sizeof(mac->dl_config_request.dl_config_list[0]), - "mac->dl_config_request.number_pdus (%d) exceeds dl_config_list size\n", mac->dl_config_request.number_pdus); - for (int j = 0; j < mac->dl_config_request.number_pdus; j++) { - mac->dl_config_request.dl_config_list[j].dci_config_pdu.dci_config_rel15.dci_length_options[i] = rel15->dci_length_options[i]; - } } break; case NR_RNTI_RA: @@ -153,12 +147,6 @@ void config_dci_pdu(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_dci_dl_pdu_rel15_t rel15->BWPStart = NRRIV2PRBOFFSET(bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE); //NRRIV2PRBOFFSET(initialDownlinkBWP->genericParameters.locationAndBandwidth, 275); rel15->SubcarrierSpacing = initialDownlinkBWP->genericParameters.subcarrierSpacing; rel15->dci_length_options[0] = nr_dci_size(scc, mac->scg, def_dci_pdu_rel15, rel15->dci_format_options[0], NR_RNTI_RA, rel15->BWPSize, bwp_id); - AssertFatal(mac->dl_config_request.number_pdus < - sizeof(mac->dl_config_request.dl_config_list) / sizeof(mac->dl_config_request.dl_config_list[0]), - "mac->dl_config_request.number_pdus (%d) exceeds dl_config_list size\n", mac->dl_config_request.number_pdus); - for (int i = 0; i < mac->dl_config_request.number_pdus; i++) { - mac->dl_config_request.dl_config_list[i].dci_config_pdu.dci_config_rel15.dci_length_options[0] = rel15->dci_length_options[0]; - } break; case NR_RNTI_P: break; @@ -261,14 +249,6 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl rel15->num_dci_options = 1; rel15->dci_format_options[0] = NR_DL_DCI_FORMAT_1_0; config_dci_pdu(mac, rel15, dl_config, NR_RNTI_RA, ss_id); - AssertFatal(mac->dl_config_request.number_pdus < - sizeof(mac->dl_config_request.dl_config_list) / sizeof(mac->dl_config_request.dl_config_list[0]), - "mac->dl_config_request.number_pdus (%d) exceeds dl_config_list size\n", mac->dl_config_request.number_pdus); - for (int i = 0; i < mac->dl_config_request.number_pdus; i++) { - mac->dl_config_request.dl_config_list[i].dci_config_pdu.dci_config_rel15.num_dci_options = 1; - mac->dl_config_request.dl_config_list[i].dci_config_pdu.dci_config_rel15.dci_length_options[0] = rel15->dci_length_options[0]; - mac->dl_config_request.dl_config_list[i].dci_config_pdu.dci_config_rel15.dci_format_options[0] = NR_DL_DCI_FORMAT_1_0; - } fill_dci_search_candidates(ss, rel15); break; case WAIT_CONTENTION_RESOLUTION: @@ -342,14 +322,6 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl rel15->num_dci_options = 2; rel15->dci_format_options[0] = NR_DL_DCI_FORMAT_1_1; rel15->dci_format_options[1] = NR_UL_DCI_FORMAT_0_1; - AssertFatal(mac->dl_config_request.number_pdus < - sizeof(mac->dl_config_request.dl_config_list) / sizeof(mac->dl_config_request.dl_config_list[0]), - "mac->dl_config_request.number_pdus (%d) exceeds dl_config_list size\n", mac->dl_config_request.number_pdus); - for (int i = 0; i < mac->dl_config_request.number_pdus; i++) { - mac->dl_config_request.dl_config_list[i].dci_config_pdu.dci_config_rel15.num_dci_options = 2; - mac->dl_config_request.dl_config_list[i].dci_config_pdu.dci_config_rel15.dci_format_options[0] = NR_DL_DCI_FORMAT_1_1; - mac->dl_config_request.dl_config_list[i].dci_config_pdu.dci_config_rel15.dci_format_options[1] = NR_UL_DCI_FORMAT_0_1; - } config_dci_pdu(mac, rel15, dl_config, NR_RNTI_C, ss_id); fill_dci_search_candidates(ss, rel15); diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index d834742def..8cfc51cdd4 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -471,7 +471,7 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr const uint16_t n_RB_DLBWP = (ra->ra_state == WAIT_RAR) ? NRRIV2BW(mac->scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE) : NRRIV2BW(mac->DLbwp[0]->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE); - LOG_D(MAC, "In %s: Processing received DCI format %s (DL BWP %d)\n", __FUNCTION__, dci_formats[dci_format], n_RB_DLBWP); + LOG_I(MAC, "In %s: Processing received DCI format %s (DL BWP %d)\n", __FUNCTION__, dci_formats[dci_format], n_RB_DLBWP); switch(dci_format){ case NR_UL_DCI_FORMAT_0_0: { diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index 5db6dd169b..c0e3fc61a7 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -838,6 +838,7 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in dcireq.slot = rx_slot; dcireq.dl_config_req.number_pdus = 0; nr_ue_dcireq(&dcireq); //to be replaced with function pointer later + mac->dl_config_request = dcireq.dl_config_req; fill_scheduled_response(&scheduled_response, &dcireq.dl_config_req, NULL, NULL, mod_id, cc_id, rx_frame, rx_slot, dl_info->thread_id); if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL){ @@ -885,6 +886,7 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in uint8_t data_existing = 0; nr_scheduled_response_t scheduled_response; fapi_nr_tx_request_t tx_req; + memset(&tx_req, 0, sizeof(tx_req)); for (int j = 0; j < ul_config->number_pdus; j++) { diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 15ebdbcd4c..941300b57b 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -200,47 +200,6 @@ void send_nsa_standalone_msg(NR_UL_IND_t *UL_INFO, uint16_t msg_id) } } -static void set_dci_format(fapi_nr_dci_indication_pdu_t *dci_list, NR_UE_MAC_INST_t *UE_mac) -{ - /* Melissa: If the dci_list comes in slot 7, and has a PDCCH payload then it must be the RAR. - If it is the RAR, we have not handled the RX_IND from the tx_data request yet, so the - mac->dl_config_request in the mac instance hasnt been updated with the num_pdus > 0, meaning - that when we try to fill this dci_format in the function call below, the num_pdus = 0 and we never - fill it. Since the dci_format field is initialized to zero this is not incorrectly setting the format, - but it is also not explicityly setting it, which I think is bad. - Maybe we just set dci_format = NR_DL_DCI_FORMAT_1_0 since we know this is the RAR? */ - int num_pdus = UE_mac->dl_config_request.number_pdus; - if (num_pdus <= 0) - { - LOG_E(NR_PHY, "%s: dl_config_request number of PDUS (%d) <= 0\n", __FUNCTION__, num_pdus); - return; - } - AssertFatal(num_pdus < sizeof(UE_mac->dl_config_request.dl_config_list) / sizeof(UE_mac->dl_config_request.dl_config_list[0]), - "Number of PDUs (%d) exceeds dl_config_pdu list size.", num_pdus); - for (int i = 0; i < num_pdus; i++) - { - fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15_dci = &UE_mac->dl_config_request.dl_config_list[i].dci_config_pdu.dci_config_rel15; - int num_dci_options = rel15_dci->num_dci_options; - LOG_I(NR_MAC, "Melissa this is the num_dci_opts %d\n", rel15_dci->num_dci_options); - int len = sizeof(rel15_dci->dci_length_options) / sizeof(rel15_dci->dci_length_options[0]); - AssertFatal(len <= sizeof(rel15_dci->dci_length_options) / sizeof(rel15_dci->dci_length_options[0]), - "num_dci_options %d > dci_options array\n", num_dci_options); - AssertFatal(len <= sizeof(rel15_dci->dci_format_options) / sizeof(rel15_dci->dci_format_options[0]), - "num_dci_options %d > dci_options array\n", num_dci_options); - for (int j = 0; j < len; j++) - { - LOG_I(NR_PHY, "Received len %d, length options[%d] %d, format assigned %d, format options[%d] %d\n", - dci_list->payloadSize, j, rel15_dci->dci_length_options[j], - dci_list->dci_format, j, rel15_dci->dci_format_options[j]); - if (rel15_dci->dci_length_options[j] == dci_list->payloadSize) - { - dci_list->dci_format = rel15_dci->dci_format_options[j]; - } - } - - } -} - static void copy_dl_tti_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_nr_dl_tti_request_t *dl_tti_request) { int num_pdus = dl_tti_request->dl_tti_request_body.nPDUs; @@ -250,7 +209,6 @@ static void copy_dl_tti_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_ abort(); } - NR_UE_MAC_INST_t *UE_mac = get_mac_inst(0); for (int i = 0; i < num_pdus; i++) { nfapi_nr_dl_tti_request_pdu_t *pdu_list = &dl_tti_request->dl_tti_request_body.dl_tti_pdu_list[i]; @@ -284,13 +242,6 @@ static void copy_dl_tti_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_ } dl_info->dci_ind->dci_list[j].payloadSize = dci_pdu_list->PayloadSizeBits; dl_info->dci_ind->dci_list[j].rnti = dci_pdu_list->RNTI; - if (dci_pdu_list->PayloadSizeBits == 37) //Melissa: hack. This size is for RAR - dl_info->dci_ind->dci_list[j].dci_format = 0; - if (dci_pdu_list->PayloadSizeBits == 40) //Melissa: hack. This size is for UL_DCI - dl_info->dci_ind->dci_list[j].dci_format = 7; - if (dci_pdu_list->PayloadSizeBits == 46) //Melissa: hack. This size is for DLSCH - dl_info->dci_ind->dci_list[j].dci_format = 1; - //set_dci_format(&dl_info->dci_ind->dci_list[j], UE_mac); } } } @@ -345,7 +296,6 @@ static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n abort(); } - NR_UE_MAC_INST_t *UE_mac = get_mac_inst(0); for (int i = 0; i < num_pdus; i++) { nfapi_nr_ul_dci_request_pdus_t *pdu_list = &ul_dci_req->ul_dci_pdu_list[i]; @@ -371,13 +321,6 @@ static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n } dl_info->dci_ind->dci_list[j].payloadSize = dci_pdu_list->PayloadSizeBits; dl_info->dci_ind->dci_list[j].rnti = dci_pdu_list->RNTI; - if (dci_pdu_list->PayloadSizeBits == 37) //Melissa: hack. This size is for RAR - dl_info->dci_ind->dci_list[j].dci_format = 0; - if (dci_pdu_list->PayloadSizeBits == 40) //Melissa: hack. This size is for UL_DCI - dl_info->dci_ind->dci_list[j].dci_format = 7; - if (dci_pdu_list->PayloadSizeBits == 46) //Melissa: hack. This size is for DLSCH - dl_info->dci_ind->dci_list[j].dci_format = 1; - //set_dci_format(&dl_info->dci_ind->dci_list[j], UE_mac); } } } @@ -385,6 +328,53 @@ static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n dl_info->slot = ul_dci_req->Slot; } +static void fill_dci_from_dl_config(nr_downlink_indication_t*dl_ind, fapi_nr_dl_config_request_t *dl_config) +{ + if (!dl_ind->dci_ind) + { + return; + } + + AssertFatal(dl_config->number_pdus < sizeof(dl_config->dl_config_list) / sizeof(dl_config->dl_config_list[0]), + "Too many dl_config pdus %d", dl_config->number_pdus); + for (int i = 0; i < dl_config->number_pdus; i++) + { + LOG_I(PHY, "In %s: filling DCI with a total of %d total DL PDUs (dl_config %p) \n", + __FUNCTION__, dl_config->number_pdus, dl_config); + fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15_dci = &dl_config->dl_config_list[i].dci_config_pdu.dci_config_rel15; + int num_dci_options = rel15_dci->num_dci_options; + if (num_dci_options <= 0) + { + LOG_I(NR_MAC, "num_dci_opts = %d for %dth pdu in dl_config_list\n", rel15_dci->num_dci_options, i); + } + AssertFatal(num_dci_options <= sizeof(rel15_dci->dci_length_options) / sizeof(rel15_dci->dci_length_options[0]), + "num_dci_options %d > dci_length_options array\n", num_dci_options); + AssertFatal(num_dci_options <= sizeof(rel15_dci->dci_format_options) / sizeof(rel15_dci->dci_format_options[0]), + "num_dci_options %d > dci_format_options array\n", num_dci_options); + + for (int j = 0; j < num_dci_options; j++) + { + int num_dcis = dl_ind->dci_ind->number_of_dcis; + AssertFatal(num_dcis <= sizeof(dl_ind->dci_ind->dci_list) / sizeof(dl_ind->dci_ind->dci_list[0]), + "dl_config->number_pdus %d > dci_ind->dci_list array\n", num_dcis); + for (int k = 0; k < num_dcis; k++) + { + LOG_I(NR_PHY, "Received len %d, length options[%d] %d, format assigned %d, format options[%d] %d\n", + dl_ind->dci_ind->dci_list[k].payloadSize, j, rel15_dci->dci_length_options[j], + dl_ind->dci_ind->dci_list[k].dci_format, j, rel15_dci->dci_format_options[j]); + if (rel15_dci->dci_length_options[j] == dl_ind->dci_ind->dci_list[k].payloadSize) + { + dl_ind->dci_ind->dci_list[k].dci_format = rel15_dci->dci_format_options[j]; + } + int CCEind = rel15_dci->CCE[j]; + int L = rel15_dci->L[j]; + dl_ind->dci_ind->dci_list[k].n_CCE = CCEind; + dl_ind->dci_ind->dci_list[k].N_CCE = L; + } + } + } +} + static void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, nfapi_nr_tx_data_request_t *tx_data_request, nfapi_nr_ul_dci_request_t *ul_dci_request) @@ -395,27 +385,29 @@ static void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, return; } - nr_downlink_indication_t dl_info; - memset(&dl_info, 0, sizeof(dl_info)); if (dl_tti_request) { LOG_I(NR_PHY, "[%d, %d] dl_tti_request\n", dl_tti_request->SFN, dl_tti_request->Slot); - copy_dl_tti_req_to_dl_info(&dl_info, dl_tti_request); + copy_dl_tti_req_to_dl_info(&mac->dl_info, dl_tti_request); } if (tx_data_request) { LOG_I(NR_PHY, "[%d, %d] PDSCH in tx_request\n", tx_data_request->SFN, tx_data_request->Slot); - copy_tx_data_req_to_dl_info(&dl_info, tx_data_request); + copy_tx_data_req_to_dl_info(&mac->dl_info, tx_data_request); } if (ul_dci_request) { LOG_I(NR_PHY, "[%d, %d] ul_dci_request\n", ul_dci_request->SFN, ul_dci_request->Slot); - copy_ul_dci_data_req_to_dl_info(&dl_info, ul_dci_request); + copy_ul_dci_data_req_to_dl_info(&mac->dl_info, ul_dci_request); } + NR_UL_TIME_ALIGNMENT_t ul_time_alignment; memset(&ul_time_alignment, 0, sizeof(ul_time_alignment)); - nr_ue_dl_indication(&dl_info, &ul_time_alignment); + fill_dci_from_dl_config(&mac->dl_info, &mac->dl_config_request); + nr_ue_dl_indication(&mac->dl_info, &ul_time_alignment); + + #if 0 //Melissa may want to free this free(dl_info.dci_ind); dl_info.dci_ind = NULL;