diff --git a/openair1/PHY/LTE_TRANSPORT/nprach_NB_IoT.c b/openair1/PHY/LTE_TRANSPORT/nprach_NB_IoT.c index 1bfbd64152681e829ac5351fd3b123da5d5f68d0..c4c7f7fcf6be53aa66ebeb52a45ca2c9d66fabb7 100644 --- a/openair1/PHY/LTE_TRANSPORT/nprach_NB_IoT.c +++ b/openair1/PHY/LTE_TRANSPORT/nprach_NB_IoT.c @@ -405,7 +405,7 @@ void filtering_signal(int16_t *input_buffer, int16_t *filtered_buffer, uint32_t } -uint32_t RX_NPRACH_NB_IoT(PHY_VARS_eNB *eNB, int frame){ +uint32_t process_nprach_NB_IoT(PHY_VARS_eNB *eNB, int frame){ //uint32_t estimated_TA_coarse=0; @@ -443,12 +443,12 @@ uint32_t RX_NPRACH_NB_IoT(PHY_VARS_eNB *eNB, int frame){ if (NPRACH_detection_NB_IoT(Rx_sub_sampled_buffer_128,*length_ouput)){ - /*estimated_TA_coarse = TA_estimation_NB_IoT(eNB, - Rx_sub_sampled_buffer_128, - sub_sampling_rate, - FRAME_LENGTH_COMPLEX_SUB_SAMPLES, - estimated_TA_coarse, - coarse); + /* estimated_TA_coarse = TA_estimation_NB_IoT(eNB, + Rx_sub_sampled_buffer_128, + sub_sampling_rate, + FRAME_LENGTH_COMPLEX_SUB_SAMPLES, + estimated_TA_coarse, + coarse); // 2. Fine TA estimation using sub sampling rate = 16, i.e. fs = 1.92 MHz diff --git a/openair1/PHY/LTE_TRANSPORT/proto_NB_IoT.h b/openair1/PHY/LTE_TRANSPORT/proto_NB_IoT.h index d15eff078adb5e9e430fe6e756fc35dc46d8a113..582ecff56ff0fd476a96b8a575602b130ec9e492 100644 --- a/openair1/PHY/LTE_TRANSPORT/proto_NB_IoT.h +++ b/openair1/PHY/LTE_TRANSPORT/proto_NB_IoT.h @@ -378,7 +378,7 @@ void lte_idft_NB_IoT(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *z, uint16_t Msc_P void extract_CQI_NB_IoT(void *o,UCI_format_NB_IoT_t uci_format,NB_IoT_eNB_UE_stats *stats,uint8_t N_RB_DL, uint16_t * crnti, uint8_t * access_mode); //*****************Vincent part for nprach ******************// -uint32_t RX_NPRACH_NB_IoT(PHY_VARS_eNB *eNB, int frame); +uint32_t process_nprach_NB_IoT(PHY_VARS_eNB *eNB, int frame); uint32_t TA_estimation_NB_IoT(PHY_VARS_eNB *eNB, int16_t *Rx_sub_sampled_buffer, diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index e61c4bbb3b394bbd26bd7f6ea308404c6875db9b..4472e433a1ce8ec0725487b0116c745e86f5ea04 100644 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -507,7 +507,6 @@ typedef struct PHY_VARS_eNB_s { /// Pointer for ifdevice buffer struct if_buffer_t ifbuffer; - /////////////// NB-IoT testing //////////////////////////// volatile uint16_t preamble_index_NB_IoT; NB_IoT_eNB_NPBCH_t npbch; @@ -519,12 +518,15 @@ NB_IoT_eNB_NPDCCH_temp_t npdcch_tmp; NB_IoT_eNB_NULSCH_t *ulsch_NB_IoT[NUMBER_OF_UE_MAX+1]; ////////////// For IF Module ///////////////////////////// -IF_Module_NB_IoT_t *if_inst; -UL_IND_NB_IoT_t UL_INFO; +IF_Module_NB_IoT_t *if_inst; // should be replaced by if_inst_NB_IoT; to avoid conflict during the merge with develop branch +UL_IND_NB_IoT_t UL_INFO; // should be replaced by UL_INFO_NB_IoT; +pthread_mutex_t UL_INFO_mutex; +/// NFAPI NPRACH information +//nfapi_preamble_pdu_t preamble_list_NB_IoT[MAX_NUM_RX_PRACH_PREAMBLES]; // MAX_NUM_RX_PRACH_PREAMBLES in PHY/defs_eNB.h +//nfapi_preamble_pdu_t preamble_list_NB_IoT[4]; + uint8_t msg3_pdu[6]; //////////////////// END ///////////////////////////////// - - } PHY_VARS_eNB; #define debug_msg if (((mac_xface->frame%100) == 0) || (mac_xface->frame < 50)) msg diff --git a/openair1/SCHED/defs.h b/openair1/SCHED/defs.h index af3c4bdd252fe429e01ab50f01d73cae41d2cbed..ea332670caacba78b3d30f21036f3b9a590cef05 100644 --- a/openair1/SCHED/defs.h +++ b/openair1/SCHED/defs.h @@ -203,6 +203,11 @@ void phy_procedures_eNB_S_RX(PHY_VARS_eNB *phy_vars_eNB,eNB_rxtx_proc_t *proc,re */ void prach_procedures(PHY_VARS_eNB *eNB); + +///////// NB_IoT testing /////////////////////////// +void prach_procedures_NB_IoT(PHY_VARS_eNB *eNB); +/////////////////////////////////////////////////// + /*! \brief Function to compute subframe type as a function of Frame type and TDD Configuration (implements Table 4.2.2 from 36.211, p.11 from version 8.6) and subframe index. @param frame_parms Pointer to DL frame parameter descriptor @param subframe Subframe index diff --git a/openair1/SCHED/defs_NB_IoT.h b/openair1/SCHED/defs_NB_IoT.h index 6d96a4a34a6b50095095522e6ad15084617041f8..3579ca50f12bdfad9523b13fe6ee75446519e349 100644 --- a/openair1/SCHED/defs_NB_IoT.h +++ b/openair1/SCHED/defs_NB_IoT.h @@ -48,7 +48,7 @@ uint32_t is_SIB1_NB_IoT(const frame_t frameP, NB_IoT_eNB_NDLSCH_t *ndlsch_SIB1 ); -uint32_t nprach_procedures_NB_IoT(PHY_VARS_eNB *eNB); +uint32_t rx_nprach_NB_IoT(PHY_VARS_eNB *eNB); #endif diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 9580352f7bfc757a713ff84071bc4060d9de19be..732f805a9b68d77489402fb6ed1ca174d22ef981 100644 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -2882,6 +2882,70 @@ void get_n1_pucch_eNB(PHY_VARS_eNB *eNB, } } +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////// NB-IoT //////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void prach_procedures_NB_IoT(PHY_VARS_eNB *eNB) { + + // LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms; + // uint16_t preamble_energy_list[64],preamble_delay_list[64]; + // uint16_t preamble_max,preamble_energy_max; + // uint16_t preamble_max=0; + // uint16_t i; + // int8_t UE_id; + int subframe = eNB->proc.subframe_prach; + int frame = eNB->proc.frame_prach; + // uint8_t CC_id = eNB->CC_id; + + uint32_t detection=0; + uint16_t estimated_TA=2; + + if (eNB->abstraction_flag == 0) { + /*LOG_D(PHY,"[eNB %d][RAPROC] Frame %d, Subframe %d : PRACH RX Signal Power : %d dBm\n",eNB->Mod_id, + frame,subframe,dB_fixed(signal_energy(&eNB->common_vars.rxdata[0][0][subframe*fp->samples_per_tti],512)) - eNB->rx_total_gain_dB); + + rx_prach(eNB, + preamble_energy_list, + preamble_delay_list, + frame, + 0);*/ + //usleep(100); + detection = rx_nprach_NB_IoT(eNB); + /* } else { + for (UE_id=0; UE_id<NB_UE_INST; UE_id++) { + + LOG_D(PHY,"[RAPROC] UE_id %d (%p), generate_prach %d, UE RSI %d, eNB RSI %d preamble index %d\n", + UE_id,PHY_vars_UE_g[UE_id][CC_id],PHY_vars_UE_g[UE_id][CC_id]->generate_prach, + PHY_vars_UE_g[UE_id][CC_id]->frame_parms.prach_config_common.rootSequenceIndex, + fp->prach_config_common.rootSequenceIndex, + PHY_vars_UE_g[UE_id][CC_id]->prach_PreambleIndex); + + if ((PHY_vars_UE_g[UE_id][CC_id]->generate_prach==1) && + (PHY_vars_UE_g[UE_id][CC_id]->frame_parms.prach_config_common.rootSequenceIndex == + fp->prach_config_common.rootSequenceIndex) ) { + preamble_energy_list[PHY_vars_UE_g[UE_id][CC_id]->prach_PreambleIndex] = 800; + preamble_delay_list[PHY_vars_UE_g[UE_id][CC_id]->prach_PreambleIndex] = 5; + + } + } */ + } + + if(detection == 1) + { + mac_xface->initiate_ra_proc(eNB->Mod_id, + eNB->CC_id, + frame, + eNB->preamble_index_NB_IoT, + estimated_TA, + 0,subframe,0); + + } + +} + +//////////////////////////////////////////////////////////// END /////////////////////////////////////////////////////////// + void prach_procedures(PHY_VARS_eNB *eNB) { // LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms; @@ -2912,7 +2976,7 @@ void prach_procedures(PHY_VARS_eNB *eNB) { frame, 0);*/ //usleep(100); - detection = nprach_procedures_NB_IoT(eNB); + detection = rx_nprach_NB_IoT(eNB); /* } else { for (UE_id=0; UE_id<NB_UE_INST; UE_id++) { diff --git a/openair1/SCHED/phy_procedures_lte_eNb_NB_IoT.c b/openair1/SCHED/phy_procedures_lte_eNb_NB_IoT.c index 3484137d057fa10ec2d3634c15974f7247e400bd..8d3677afe351f10795e58dfd3cf3d9e9a5a06ff0 100644 --- a/openair1/SCHED/phy_procedures_lte_eNb_NB_IoT.c +++ b/openair1/SCHED/phy_procedures_lte_eNb_NB_IoT.c @@ -1516,7 +1516,7 @@ void phy_procedures_eNB_TX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB, } -uint32_t nprach_procedures_NB_IoT(PHY_VARS_eNB *eNB) { +uint32_t rx_nprach_NB_IoT(PHY_VARS_eNB *eNB) { uint32_t estimated_TA; int frame,frame_mod; // subframe, @@ -1530,7 +1530,7 @@ uint32_t nprach_procedures_NB_IoT(PHY_VARS_eNB *eNB) { //if (subframe==1 && frame_mod==0 && frame!=0){ if (frame_mod==0 && frame!=0){ //printf("\n frame_in = %i\n",frame); - estimated_TA = RX_NPRACH_NB_IoT(eNB,frame); + estimated_TA = process_nprach_NB_IoT(eNB,frame); //printf("estim = %i\n",estimated_TA); } return estimated_TA; diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c index d17f6ae3141287607fe3b46f510d23cbbcb3a95b..433379082df0ddd449c5f41145a815ff8dc15829 100644 --- a/targets/RT/USER/lte-enb.c +++ b/targets/RT/USER/lte-enb.c @@ -1602,7 +1602,11 @@ static void* eNB_thread_prach( void* param ) { if (wait_on_condition(&proc->mutex_prach,&proc->cond_prach,&proc->instance_cnt_prach,"eNB_prach_thread") < 0) break; - prach_procedures(eNB); + //prach_procedures(eNB); + + ////// NB_IoT testing /////// + prach_procedures_NB_IoT(eNB); + ///////////////////////////// if (release_thread(&proc->mutex_prach,&proc->instance_cnt_prach,"eNB_prach_thread") < 0) break; }