From 4280122cc683b8650b4b16ff6465c08ed6d7ecf1 Mon Sep 17 00:00:00 2001 From: Calvin HSU Date: Fri, 24 Aug 2018 18:06:15 +0200 Subject: [PATCH] UE: Add FAPI structure clean by every slot, update UL_CONFIG_REQ for PRACH, DL_CONFIG_REQ for DL-SCH and filling PHY parameter "dlsch", "dlsch_harq".: --- .../nfapi/public_inc/fapi_nr_ue_constants.h | 7 +++-- .../nfapi/public_inc/fapi_nr_ue_interface.h | 31 +++++++++++++++---- openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 19 +++++++++++- openair2/LAYER2/NR_MAC_UE/mac_defs.h | 2 -- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 30 +++--------------- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 6 ++++ targets/RT/USER/nr-ue.c | 6 ++++ 7 files changed, 64 insertions(+), 37 deletions(-) diff --git a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h index 7abeeb3df6..4ab81c1a0c 100644 --- a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h +++ b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h @@ -49,9 +49,10 @@ /// UL_CONFIG_REQ #define FAPI_NR_UL_CONFIG_LIST_NUM 10 -#define FAPI_NR_DL_CONFIG_TYPE_PRACH 0x01 -#define FAPI_NR_DL_CONFIG_TYPE_PUCCH 0x02 -#define FAPI_NR_DL_CONFIG_TYPE_PUSCH 0x03 +#define FAPI_NR_UL_CONFIG_TYPE_PRACH 0x01 +#define FAPI_NR_UL_CONFIG_TYPE_PUCCH 0x02 +#define FAPI_NR_UL_CONFIG_TYPE_PUSCH 0x03 +#define FAPI_NR_UL_CONFIG_TYPE_SRS 0x04 #endif \ No newline at end of file diff --git a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h index 7219477405..58ee8f57a6 100644 --- a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h +++ b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h @@ -219,8 +219,20 @@ typedef struct { } fapi_nr_tx_request_t; typedef struct { - - } fapi_nr_ul_config_rach_pdu; + uint8_t preamble_index; + uint8_t prach_configuration_index; + uint16_t preamble_length; + uint8_t power_ramping_step; + uint16_t preamble_received_target_power; + uint8_t msg1_fdm; + uint8_t msg1_frequency_start; + uint8_t zero_correlation_zone_config; + uint8_t subcarrier_spacing; + uint8_t restrictedset_config; + uint16_t root_sequence_index; + uint16_t rsrp_threshold_ssb; + uint16_t rsrp_threshold_sul; + } fapi_nr_ul_config_prach_pdu; typedef struct { @@ -232,6 +244,8 @@ typedef struct { uint16_t number_symbols; uint16_t start_symbol; uint8_t mcs; + uint8_t tpc_command; + uint8_t rv; } fapi_nr_ul_config_pusch_pdu_rel15_t; typedef struct { @@ -239,16 +253,20 @@ typedef struct { fapi_nr_ul_config_pusch_pdu_rel15_t ulsch_pdu_rel15; } fapi_nr_ul_config_pusch_pdu; + typedef struct { + + } fapi_nr_ul_config_srs_pdu; + typedef struct { uint8_t pdu_type; union { - fapi_nr_ul_config_rach_pdu prach_config_pdu; + fapi_nr_ul_config_prach_pdu prach_config_pdu; fapi_nr_ul_config_pucch_pdu pucch_config_pdu; fapi_nr_ul_config_pusch_pdu ulsch_config_pdu; + fapi_nr_ul_config_srs_pdu srs_config_pdu; }; } fapi_nr_ul_config_request_pdu_t; -/// typedef struct { uint32_t sfn_slot; uint8_t number_pdus; @@ -273,7 +291,6 @@ typedef struct { fapi_nr_dl_config_dci_dl_pdu_rel15_t dci_config_rel15; } fapi_nr_dl_config_dci_pdu; - //typedef fapi_nr_dci_pdu_rel15_t fapi_nr_dl_config_dlsch_pdu_rel15_t; typedef struct { uint16_t number_rbs; uint16_t start_rb; @@ -281,7 +298,9 @@ typedef struct { uint16_t start_symbol; uint8_t mcs; uint8_t rv; - // to be check the fields needed to L1 with NR_DL_UE_HARQ_t and NR_UE_DLSCH_t + uint8_t harq_pid; + uint8_t ndi; + // TODO: check the fields needed to L1 with NR_DL_UE_HARQ_t and NR_UE_DLSCH_t } fapi_nr_dl_config_dlsch_pdu_rel15_t; typedef struct { diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index 53d3ae339b..7991635720 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -48,7 +48,8 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){ uint32_t i; if(scheduled_response != NULL){ - NR_UE_PDCCH *pdcch_vars2 = PHY_vars_UE_g[module_id][cc_id]->pdcch_vars[0][0]; + PHY_VARS_NR_UE *ue = PHY_vars_UE_g[module_id][cc_id]; + NR_UE_PDCCH *pdcch_vars2 = ue->pdcch_vars[0][0]; if(scheduled_response->dl_config != NULL){ fapi_nr_dl_config_request_t *dl_config = scheduled_response->dl_config; @@ -88,6 +89,22 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){ pdcch_vars2->coreset[i].pdcchDMRSScramblingID = dci_config->coreset.pdcch_dmrs_scrambling_id; }else{ //FAPI_NR_DL_CONFIG_TYPE_DLSCH // dlsch config pdu + + fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_pdu = &dl_config->dl_config_list[i].dlsch_config_pdu.dlsch_config_rel15; + NR_UE_DLSCH_t **dlsch = ue->dlsch[ue->current_thread_id[0]][0]; //nr_tti_rx + NR_UE_DLSCH_t *dlsch0 = dlsch[0]; + NR_DL_UE_HARQ_t *dlsch0_harq = dlsch[0]->harq_processes[dlsch_pdu->harq_pid]; + + dlsch0->rnti = dl_config->dl_config_list[i].dlsch_config_pdu.rnti; + dlsch0_harq->start_rb = dlsch_pdu->start_rb; + dlsch0_harq->nb_rb = dlsch_pdu->number_rbs; + dlsch0_harq->nb_symbols = dlsch_pdu->number_symbols; + dlsch0_harq->nb_symbols = dlsch_pdu->number_symbols; + dlsch0_harq->start_symbol = dlsch_pdu->start_symbol; + dlsch0->current_harq_pid = dlsch_pdu->harq_pid; + dlsch0->active = 1; + dlsch0_harq->mcs = dlsch_pdu->mcs; + dlsch0_harq->DCINdi = dlsch_pdu->ndi; } } }else{ diff --git a/openair2/LAYER2/NR_MAC_UE/mac_defs.h b/openair2/LAYER2/NR_MAC_UE/mac_defs.h index dd665b3888..4f69c4db18 100755 --- a/openair2/LAYER2/NR_MAC_UE/mac_defs.h +++ b/openair2/LAYER2/NR_MAC_UE/mac_defs.h @@ -91,8 +91,6 @@ typedef struct { fapi_nr_tx_request_t tx_request; fapi_nr_ul_config_request_t ul_config_request; fapi_nr_dl_config_request_t dl_config_request; - fapi_nr_dci_indication_t dci_indication; - fapi_nr_rx_indication_t rx_indication; diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 69c8ca6845..8428e2df0e 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -475,9 +475,6 @@ NR_UE_L2_STATE_t nr_ue_scheduler( search_space_mask = search_space_mask | type0_pdcch; mac->type0_pdcch_consecutive_slots = mac->type0_pdcch_dci_config.duration; } - //if((mac->type0_pdcch_ss_sfn_c == SFN_C_EQ_SFN_SSB) && ( get_ssb_frame() )){ - // search_space_mask = search_space_mask | type0_pdcch; - //} } if(mac->type0_pdcch_ss_mux_pattern == 2){ // 38.213 Table 13-13, 13-14 @@ -495,20 +492,8 @@ NR_UE_L2_STATE_t nr_ue_scheduler( } } -#if 0 - uint16_t rnti; - - fapi_nr_coreset_t coreset; - uint32_t duration; - uint8_t aggregation_level; - uint8_t number_of_candidates; - uint16_t monitoring_symbols_within_slot; - // DCI foramt-specific - uint8_t format_2_0_number_of_candidates[5]; // aggregation level 1, 2, 4, 8, 16 - uint8_t format_2_3_monitorying_periodicity; - uint8_t format_2_3_number_of_candidates; -#endif fapi_nr_dl_config_request_t *dl_config = &mac->dl_config_request; + // Type0 PDCCH search space if((search_space_mask & type0_pdcch) || ( mac->type0_pdcch_consecutive_slots != 0 )){ mac->type0_pdcch_consecutive_slots = mac->type0_pdcch_consecutive_slots - 1; @@ -582,7 +567,7 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fa } // UL_CONFIG_REQ - ul_config->ul_config_list[ul_config->number_pdus].pdu_type = FAPI_NR_DL_CONFIG_TYPE_PUSCH; + ul_config->ul_config_list[ul_config->number_pdus].pdu_type = FAPI_NR_UL_CONFIG_TYPE_PUSCH; ul_config->ul_config_list[ul_config->number_pdus].ulsch_config_pdu.rnti = rnti; fapi_nr_ul_config_pusch_pdu_rel15_t *ulsch_config_pdu = &ul_config->ul_config_list[ul_config->number_pdus].ulsch_config_pdu.ulsch_pdu_rel15; ulsch_config_pdu->number_rbs = l_RB; @@ -590,6 +575,7 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fa ulsch_config_pdu->number_symbols = sliv_L; ulsch_config_pdu->start_symbol = sliv_S; ulsch_config_pdu->mcs = dci->mcs; + //ulsch0->harq_processes[dci->harq_process_number]->first_rb = start_RB; //ulsch0->harq_processes[dci->harq_process_number]->nb_rb = l_RB; //ulsch0->harq_processes[dci->harq_process_number]->mcs = dci->mcs; @@ -637,14 +623,8 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fa dlsch_config_pdu->number_symbols = sliv_L; dlsch_config_pdu->start_symbol = sliv_S; dlsch_config_pdu->mcs = dci->mcs; - - - //pdlsch0_harq->nb_rb = l_RB; - //pdlsch0->current_harq_pid = dci->harq_process_number; - //pdlsch0->active = 1; - //pdlsch0->rnti = rnti; - //pdlsch0_harq->mcs = nr_pdci_info_extracted->mcs; - //pdlsch0_harq->DCINdi = nr_pdci_info_extracted->ndi; + dlsch_config_pdu->ndi = dci->ndi; + dlsch_config_pdu->harq_pid = dci->harq_process_number; dl_config->number_pdus = dl_config->number_pdus + 1; break; diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 3e9bb6285b..7e855f1dca 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -72,6 +72,12 @@ int8_t nr_ue_ul_indication(nr_uplink_indication_t *ul_info){ module_id_t module_id = ul_info->module_id; NR_UE_MAC_INST_t *mac = get_mac_inst(module_id); + // clean previous FAPI messages + mac->tx_request.number_of_pdus = 0; + mac->ul_config_request.number_pdus = 0; + mac->dl_config_request.number_pdus = 0; + // clean previous FAPI messages + ret = nr_ue_scheduler( ul_info->module_id, ul_info->gNB_index, diff --git a/targets/RT/USER/nr-ue.c b/targets/RT/USER/nr-ue.c index 85c7df1923..513df875f4 100644 --- a/targets/RT/USER/nr-ue.c +++ b/targets/RT/USER/nr-ue.c @@ -674,6 +674,12 @@ static void *UE_thread_rxn_txnp4(void *arg) { (sf_type==SF_S ? "SF_S" : "UNKNOWN_SF_TYPE")))); } #endif + + //clean previous FAPI MESSAGE + UE->rx_ind.number_pdus = 0; + UE->dci_ind.number_of_dcis = 0; + //clean previous FAPI MESSAGE + #ifdef UE_SLOT_PARALLELISATION phy_procedures_slot_parallelization_UE_RX( UE, proc, 0, 0, 1, UE->mode, no_relay, NULL ); #else