From a4660d322dc3349af06c55c5ce36882c04773625 Mon Sep 17 00:00:00 2001 From: Younes <younes.khadraoui@eurecom.fr> Date: Mon, 5 Mar 2018 08:16:55 +0100 Subject: [PATCH] minor changes in RRU portion for frame resynch --- targets/RT/USER/lte-ru.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index 9a8b8d1902a..ce2a43c5147 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -784,7 +784,8 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) { unsigned int rxs; int i; openair0_timestamp ts,old_ts; - + int resynch=0; + for (i=0; i<ru->nb_rx; i++) rxp[i] = (void*)&ru->common.rxdata[i][*subframe*fp->samples_per_tti]; @@ -801,9 +802,12 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) { VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 ); if (ru->cmd==RU_FRAME_RESYNCH) { - ru->ts_offset += (proc->frame_rx - ru->cmdval)*fp->samples_per_tti*10; + LOG_I(PHY,"Applying frame resynch %d => %d\n",*frame,ru->cmdval); + if (proc->frame_rx>ru->cmdval) ru->ts_offset += (proc->frame_rx - ru->cmdval)*fp->samples_per_tti*10; + else ru->ts_offset -= (-proc->frame_rx + ru->cmdval)*fp->samples_per_tti*10; *frame = ru->cmdval; ru->cmd=EMPTY; + resynch=1; } proc->timestamp_rx = ts-ru->ts_offset; @@ -815,15 +819,13 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) { if (proc->first_rx == 1) { ru->ts_offset = proc->timestamp_rx; proc->timestamp_rx = 0; + } + else if (resynch==0 && (proc->timestamp_rx - old_ts != fp->samples_per_tti)) { + LOG_I(PHY,"rx_rf: rfdevice timing drift of %"PRId64" samples (ts_off %"PRId64")\n",proc->timestamp_rx - old_ts - fp->samples_per_tti,ru->ts_offset); + ru->ts_offset += (proc->timestamp_rx - old_ts - fp->samples_per_tti); + proc->timestamp_rx = ts-ru->ts_offset; } - else { - if (proc->timestamp_rx - old_ts != fp->samples_per_tti) { - LOG_I(PHY,"rx_rf: rfdevice timing drift of %"PRId64" samples (ts_off %"PRId64")\n",proc->timestamp_rx - old_ts - fp->samples_per_tti,ru->ts_offset); - ru->ts_offset += (proc->timestamp_rx - old_ts - fp->samples_per_tti); - proc->timestamp_rx = ts-ru->ts_offset; - } - } proc->frame_rx = (proc->timestamp_rx / (fp->samples_per_tti*10))&1023; proc->subframe_rx = (proc->timestamp_rx / fp->samples_per_tti)%10; // synchronize first reception to frame 0 subframe 0 @@ -1747,6 +1749,7 @@ static void* ru_thread_control( void* param ) { case RRU_frame_resynch: //RRU if (ru->if_south != LOCAL_RF) LOG_E(PHY,"Received RRU frame resynch message, should not happen in RAU\n"); else { + LOG_I(PHY,"Received RRU_frame_resynch command\n"); ru->cmd = RU_FRAME_RESYNCH; ru->cmdval = ((uint16_t*)&rru_config_msg.msg[0])[0]; } @@ -1878,7 +1881,7 @@ static void* ru_thread( void* param ) { //if ((time_rf.tv_nsec > old_time + 1200000) || (time_rf.tv_nsec < old_time + 500000)) // LOG_I(PHY,"RU thread %d, frame %d (%p), subframe %d : RF time difference : %lu\n", // ru->idx, frame,&frame,subframe,time_rf.tv_nsec - old_time); - + if (ru->fh_south_in && ru->state == RU_RUN ) ru->fh_south_in(ru,&frame,&subframe); else AssertFatal(1==0, "No fronthaul interface at south port"); if (ru->wait_cnt > 0) { -- GitLab