diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c index 6baa08cf2c..5b641b102a 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c @@ -223,7 +223,14 @@ int nr_initial_sync(PHY_VARS_NR_UE *ue, runmode_t mode) nr_gold_pbch(ue); ret = nr_pbch_detection(ue,mode); - ret = -1; //to be deleted + +LOG_I(PHY,"[UE %d] AUTOTEST Cell Sync : frame = %d, rx_offset %d, freq_offset %d \n", + ue->Mod_id, + ue->proc.proc_rxtx[0].frame_rx, + ue->rx_offset, + ue->common_vars.freq_offset ); + + //ret = -1; //to be deleted // write_output("rxdata2.m","rxd2",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); #ifdef DEBUG_INITIAL_SYNCH diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c index 4df4e25c4a..ad9e0262e4 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c @@ -616,13 +616,13 @@ uint16_t nr_rx_pbch( PHY_VARS_NR_UE *ue, pbch_a = nr_ue_pbch_vars->pbch_a; pbch_a_prime = nr_ue_pbch_vars->pbch_a_prime; -#ifdef DEBUG_PBCH +//#ifdef DEBUG_PBCH //pbch_e_rx = &nr_ue_pbch_vars->llr[0]; short *p = (short *)&(nr_ue_pbch_vars->rxdataF_comp[0][1*20*12]); for (int cnt = 0; cnt < 8 ; cnt++) printf("pbch rx llr %d rxdata_comp %d addr %p\n",*(pbch_e_rx+cnt), p[cnt], &p[0]); -#endif +//#endif for (i=0; ipbch_polar_params, decoderListSize, aPrioriArray, pathMetricAppr); + if(decoderState == -1) + return(decoderState); memset(&pbch_a_prime[0], 0, sizeof(uint8_t) * NR_POLAR_PBCH_PAYLOAD_BITS>>3); for (i=0; i>i)&1)<<(pbch_deinterleaving_pattern[i]); -//#ifdef DEBUG_PBCH +#ifdef DEBUG_PBCH printf("i %d in 0x%08x out 0x%08x ilv %d (in>>i)&1) 0x%08x\n", i, in, out, pbch_deinterleaving_pattern[i], (in>>i)&1); -//#endif +#endif } for (int i=0; i>3; i++) @@ -693,12 +695,9 @@ uint16_t nr_rx_pbch( PHY_VARS_NR_UE *ue, printf("[PBCH] decoder_output[%d] = %x\n",i,decoded_output[i]); } //#endif - - + ue->dl_indication.rx_ind.rx_request_body.pdu_index = FAPI_NR_RX_PDU_BCCH_BCH_TYPE; ue->dl_indication.rx_ind.rx_request_body.pdu_length = 3; -// ue->dl_indication.rx_ind.rx_request_body.pdu = &pbch_a[0]; - ue->dl_indication.rx_ind.rx_request_body.pdu = &decoded_output[0]; ue->if_inst->dl_indication(&ue->dl_indication); diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index f0e6a9b6bc..38c16f2228 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -34,6 +34,10 @@ #include "fapi_nr_ue_interface.h" #include "fapi_nr_ue_l1.h" +//#include "PHY/phy_vars_nr_ue.h" + +#include "PHY/defs_nr_UE.h" +extern PHY_VARS_NR_UE ***PHY_vars_UE_g; int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){ @@ -70,6 +74,8 @@ int8_t nr_ue_phy_config_request(nr_phy_config_t *phy_config){ printf("ssb index: %d\n", phy_config->config_req.pbch_config.ssb_index); printf("half frame bit: %d\n", phy_config->config_req.pbch_config.half_frame_bit); printf("-------------------------------\n"); + + PHY_vars_UE_g[0][0]->proc.proc_rxtx[0].frame_rx = phy_config->config_req.pbch_config.system_frame_number; } if(phy_config->config_req.config_mask & FAPI_NR_CONFIG_REQUEST_MASK_DL_BWP_COMMON){ @@ -92,4 +98,4 @@ int8_t nr_ue_phy_config_request(nr_phy_config_t *phy_config){ return 0; -} \ No newline at end of file +} diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 779a96afa6..0d86399b8a 100755 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -53,52 +53,55 @@ int8_t nr_ue_decode_mib( nr_mac_rrc_data_ind_ue( module_id, CC_id, gNB_index, NR_BCCH_BCH, (uint8_t *) pduP, pdu_len ); - uint32_t frame = mac->mib->systemFrameNumber.buf[0]; - uint32_t frame_number_4lsb = (uint32_t)(extra_bits & 0xf); // extra bits[0:3] - uint32_t half_frame_bit = (uint32_t)(( extra_bits >> 4 ) & 0x1 ); // extra bits[4] - uint32_t ssb_subcarrier_offset_msb = (uint32_t)(( extra_bits >> 5 ) & 0x1 ); // extra bits[5] - - uint32_t ssb_subcarrier_offset = mac->mib->ssb_SubcarrierOffset; - uint32_t ssb_index = 0; + if(mac->mib != NULL){ + uint32_t frame = (mac->mib->systemFrameNumber.buf[0] >> mac->mib->systemFrameNumber.bits_unused); + uint32_t frame_number_4lsb = (uint32_t)(extra_bits & 0xf); // extra bits[0:3] + uint32_t half_frame_bit = (uint32_t)(( extra_bits >> 4 ) & 0x1 ); // extra bits[4] + uint32_t ssb_subcarrier_offset_msb = (uint32_t)(( extra_bits >> 5 ) & 0x1 ); // extra bits[5] + + uint32_t ssb_subcarrier_offset = mac->mib->ssb_SubcarrierOffset; - frame = frame << 4; - frame = frame | frame_number_4lsb; + uint32_t ssb_index = 0; - if(l_ssb_equal_64){ - ssb_index = (( extra_bits >> 5 ) & 0x7 ); // extra bits[5:7] - }else{ - if(ssb_subcarrier_offset_msb){ - ssb_subcarrier_offset = ssb_subcarrier_offset | 0x10; - } + frame = frame << 4; + frame = frame | frame_number_4lsb; + + if(l_ssb_equal_64){ + ssb_index = (( extra_bits >> 5 ) & 0x7 ); // extra bits[5:7] + }else{ + if(ssb_subcarrier_offset_msb){ + ssb_subcarrier_offset = ssb_subcarrier_offset | 0x10; + } + } + + printf("system frame number(6 MSB bits): %d\n", mac->mib->systemFrameNumber.buf[0]); + printf("system frame number(with LSB): %d\n", (int)frame); + printf("subcarrier spacing: %d\n", (int)mac->mib->subCarrierSpacingCommon); + printf("ssb carrier offset(with MSB): %d\n", (int)ssb_subcarrier_offset); + printf("dmrs type A position: %d\n", (int)mac->mib->dmrs_TypeA_Position); + printf("pdcch config sib1: %d\n", (int)mac->mib->pdcch_ConfigSIB1); + printf("cell barred: %d\n", (int)mac->mib->cellBarred); + printf("intra frequcney reselection: %d\n", (int)mac->mib->intraFreqReselection); + printf("half frame bit(extra bits): %d\n", (int)half_frame_bit); + printf("ssb index(extra bits): %d\n", (int)ssb_index); + + // fill in the elements in config request inside P5 message + mac->phy_config.config_req.pbch_config.system_frame_number = frame; // after calculation + mac->phy_config.config_req.pbch_config.subcarrier_spacing_common = mac->mib->subCarrierSpacingCommon; + mac->phy_config.config_req.pbch_config.ssb_subcarrier_offset = ssb_subcarrier_offset; // after calculation + mac->phy_config.config_req.pbch_config.dmrs_type_a_position = mac->mib->dmrs_TypeA_Position; + mac->phy_config.config_req.pbch_config.pdcch_config_sib1 = mac->mib->pdcch_ConfigSIB1; + mac->phy_config.config_req.pbch_config.cell_barred = mac->mib->cellBarred; + mac->phy_config.config_req.pbch_config.intra_frequency_reselection = mac->mib->intraFreqReselection; + mac->phy_config.config_req.pbch_config.half_frame_bit = half_frame_bit; + mac->phy_config.config_req.pbch_config.ssb_index = ssb_index; + mac->phy_config.config_req.config_mask |= FAPI_NR_CONFIG_REQUEST_MASK_PBCH; + + if(mac->if_module != NULL && mac->if_module->phy_config_request != NULL){ + mac->if_module->phy_config_request(&mac->phy_config); + } } - -printf("system frame number(with LSB): %d\n", (int)frame); -printf("subcarrier spacing: %d\n", (int)mac->mib->subCarrierSpacingCommon); -printf("ssb carrier offset(with MSB): %d\n", (int)ssb_subcarrier_offset); -printf("dmrs type A position: %d\n", (int)mac->mib->dmrs_TypeA_Position); -printf("pdcch config sib1: %d\n", (int)mac->mib->pdcch_ConfigSIB1); -printf("cell barred: %d\n", (int)mac->mib->cellBarred); -printf("intra frequcney reselection: %d\n", (int)mac->mib->intraFreqReselection); -printf("half frame bit(extra bits): %d\n", (int)half_frame_bit); -printf("ssb index(extra bits): %d\n", (int)ssb_index); - - // fill in the elements in config request inside P5 message - mac->phy_config.config_req.pbch_config.system_frame_number = frame; // after calculation - mac->phy_config.config_req.pbch_config.subcarrier_spacing_common = mac->mib->subCarrierSpacingCommon; - mac->phy_config.config_req.pbch_config.ssb_subcarrier_offset = ssb_subcarrier_offset; // after calculation - mac->phy_config.config_req.pbch_config.dmrs_type_a_position = mac->mib->dmrs_TypeA_Position; - mac->phy_config.config_req.pbch_config.pdcch_config_sib1 = mac->mib->pdcch_ConfigSIB1; - mac->phy_config.config_req.pbch_config.cell_barred = mac->mib->cellBarred; - mac->phy_config.config_req.pbch_config.intra_frequency_reselection = mac->mib->intraFreqReselection; - mac->phy_config.config_req.pbch_config.half_frame_bit = half_frame_bit; - mac->phy_config.config_req.pbch_config.ssb_index = ssb_index; - mac->phy_config.config_req.config_mask |= FAPI_NR_CONFIG_REQUEST_MASK_PBCH; - - if(mac->if_module != NULL && mac->if_module->phy_config_request != NULL){ - mac->if_module->phy_config_request(&mac->phy_config); - } - return 0; } diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 75341d3569..efc5e0631c 100755 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -43,13 +43,13 @@ static nr_ue_if_module_t *nr_ue_if_module_inst[MAX_IF_MODULES]; int8_t handle_bcch_bch(uint32_t pdu_len, uint8_t *pduP){ // pdu_len = 4, 32bits - uint8_t extra_bits = pduP[3]; + uint8_t extra_bits = pduP[0]; nr_ue_decode_mib( (module_id_t)0, 0, 0, extra_bits, 0, // Lssb = 64 is not support - pduP, + &pduP[1], pdu_len ); diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c index 926f9d8529..6d7aa59136 100755 --- a/openair2/RRC/NR_UE/rrc_UE.c +++ b/openair2/RRC/NR_UE/rrc_UE.c @@ -311,25 +311,26 @@ int8_t nr_rrc_ue_decode_NR_BCCH_BCH_Message( buffer_len ); - if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) { - - for (i=0; imessage.choice.mib->systemFrameNumber.buf != 0){ + if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) { + + for (i=0; imessage.choice.mib; + //memcpy( (void *)mib, + // (void *)&bcch_message->message.choice.mib, + // sizeof(NR_MIB_t) ); + + nr_rrc_mac_config_req_ue( 0, 0, 0, mib, NULL, NULL, NULL); } - - // link to rrc instance - mib = bcch_message->message.choice.mib; - //memcpy( (void *)mib, - // (void *)&bcch_message->message.choice.mib, - // sizeof(NR_MIB_t) ); - - nr_rrc_mac_config_req_ue( 0, 0, 0, mib, NULL, NULL, NULL); - return 0; } diff --git a/targets/RT/USER/nr-ue.c b/targets/RT/USER/nr-ue.c index 2f285ed437..e0e8b1ee94 100644 --- a/targets/RT/USER/nr-ue.c +++ b/targets/RT/USER/nr-ue.c @@ -224,6 +224,8 @@ void init_UE(int nb_inst) AssertFatal((UE->if_inst = nr_ue_if_module_init(inst)) != NULL,"Can't register interface module\n"); nr_l3_init_ue(); nr_l2_init_ue(); +NR_UE_MAC_INST_t *UE_MAC_INST = get_mac_inst(0); +UE_MAC_INST->if_module = UE->if_inst; UE->if_inst->scheduled_response = nr_ue_scheduled_response; UE->if_inst->phy_config_request = nr_ue_phy_config_request;