From 97fd45d65be314ff47330415f06ef9bf621b44b9 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger <florian.kaltenberger@eurecom.fr> Date: Wed, 7 Nov 2018 12:00:52 +0100 Subject: [PATCH] nr-uesoftmodem: moving phy_procedures_nrUE into main thread when --loop-memory is used. --- openair1/SCHED_NR_UE/phy_procedures_nr_ue.c | 6 +-- targets/RT/USER/nr-ue.c | 57 ++++++++++++++++----- 2 files changed, 47 insertions(+), 16 deletions(-) diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index eee5cbae95..32beb92009 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -5913,8 +5913,8 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t eN #endif //nr_gold_pdcch(ue,0, 2); -/* - for (l=0; l<2; l++) { + + for (int l=0; l<2; l++) { if (abstraction_flag == 0) { #if UE_TIMING_TRACE start_meas(&ue->ofdm_demod_stats); @@ -5933,7 +5933,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t eN stop_meas(&ue->ofdm_demod_stats); #endif } - }*/ + } //ue_measurement_procedures(l-1,ue,proc,eNB_id,(nr_tti_rx<<1),abstraction_flag,mode); //if (do_pdcch_flag) { diff --git a/targets/RT/USER/nr-ue.c b/targets/RT/USER/nr-ue.c index adefa661b2..41b20710e9 100644 --- a/targets/RT/USER/nr-ue.c +++ b/targets/RT/USER/nr-ue.c @@ -956,7 +956,7 @@ void *UE_thread(void *arg) { #if BASIC_SIMULATOR { int t; - for (t = 0; t < 2; t++) { + for (t = 0; t < RX_NB_TH; t++) { UE_rxtx_proc_t *proc = &UE->proc.proc_rxtx[t]; pthread_mutex_lock(&proc->mutex_rxtx); while (proc->instance_cnt_rxtx >= 0) pthread_cond_wait( &proc->cond_rxtx, &proc->mutex_rxtx ); @@ -964,13 +964,13 @@ void *UE_thread(void *arg) { } } #endif + LOG_D(PHY,"Process subframe %d thread Idx %d \n", subframe_nr, UE->current_thread_id[subframe_nr]); thread_idx++; if(thread_idx>=RX_NB_TH) thread_idx = 0; - if (UE->mode != loop_through_memory) { for (i=0; i<UE->frame_parms.nb_antennas_rx; i++) rxp[i] = (void*)&UE->common_vars.rxdata[i][UE->frame_parms.ofdm_symbol_size+ @@ -1033,9 +1033,6 @@ void *UE_thread(void *arg) { if ( first_symbols <0 ) LOG_E(PHY,"can't compensate: diff =%d\n", first_symbols); } - } //UE->mode != loop_through_memory - else - rt_sleep_ns(1000*1000); pickTime(gotIQs); // operate on thread sf mod 2 @@ -1047,13 +1044,13 @@ void *UE_thread(void *arg) { UE->proc.proc_rxtx[th_id].frame_rx++; } #ifdef SAIF_ENABLED - if (!(proc->frame_rx%4000)) - { - printf("frame_rx=%d rx_thread_busy=%ld - rate %8.3f\n", - proc->frame_rx, g_ue_rx_thread_busy, - (float)g_ue_rx_thread_busy/(proc->frame_rx*10+1)*100.0); - fflush(stdout); - } + if (!(proc->frame_rx%4000)) + { + printf("frame_rx=%d rx_thread_busy=%ld - rate %8.3f\n", + proc->frame_rx, g_ue_rx_thread_busy, + (float)g_ue_rx_thread_busy/(proc->frame_rx*10+1)*100.0); + fflush(stdout); + } #endif } //UE->proc.proc_rxtx[0].gotIQs=readTime(gotIQs); @@ -1071,7 +1068,7 @@ void *UE_thread(void *arg) { proc->frame_tx = (proc->frame_tx + 1)%MAX_FRAME_NUMBER; proc->nr_tti_tx %= NR_NUMBER_OF_SUBFRAMES_PER_FRAME; } - proc->subframe_tx=subframe_nr + DURATION_RX_TO_TX; + proc->subframe_tx=proc->nr_tti_rx; proc->timestamp_tx = timestamp+ (DURATION_RX_TO_TX*UE->frame_parms.samples_per_subframe)- UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0; @@ -1107,7 +1104,41 @@ void *UE_thread(void *arg) { // initStaticTime(lastTime); // updateTimes(lastTime, &t1, 20000, "Delay between two IQ acquisitions (case 1)"); // pickStaticTime(lastTime); + } //UE->mode != loop_through_memory + else { + proc->nr_tti_rx=subframe_nr; + proc->subframe_rx=subframe_nr; + if(subframe_nr == 0) { + for (th_id=0; th_id < RX_NB_TH; th_id++) { + UE->proc.proc_rxtx[th_id].frame_rx++; + } + } + proc->frame_tx = proc->frame_rx; + proc->nr_tti_tx= subframe_nr + DURATION_RX_TO_TX; + if (proc->nr_tti_tx > NR_NUMBER_OF_SUBFRAMES_PER_FRAME) { + proc->frame_tx = (proc->frame_tx + 1)%MAX_FRAME_NUMBER; + proc->nr_tti_tx %= NR_NUMBER_OF_SUBFRAMES_PER_FRAME; + } + proc->subframe_tx=proc->nr_tti_tx; + + printf("Processing subframe %d\n",proc->subframe_rx); + + if(UE->if_inst != NULL && UE->if_inst->ul_indication != NULL){ + UE->ul_indication.module_id = 0; + UE->ul_indication.gNB_index = 0; + UE->ul_indication.cc_id = 0; + UE->ul_indication.slot = 0; // to be fill + UE->ul_indication.frame = 0; // to be fill + // [TODO] mapping right after NR initial sync + UE->ul_indication.frame = proc->frame_rx; + UE->ul_indication.slot = proc->nr_tti_rx; + + UE->if_inst->ul_indication(&UE->ul_indication); + } + phy_procedures_nrUE_RX( UE, proc, 0, 0, 1, UE->mode, no_relay); + getchar(); + } // else loop_through_memory } // start_rx_stream==1 } // UE->is_synchronized==1 -- 2.26.2