From 1547de9ad8c80817191f4b29314a549790bb3b8f Mon Sep 17 00:00:00 2001
From: Raymond Knopp <raymond.knopp@eurecom.fr>
Date: Sat, 24 Feb 2018 01:04:01 +0100
Subject: [PATCH] debugging for simulator target

---
 openair1/PHY/LTE_TRANSPORT/if4_tools.c | 10 +++++++---
 openair1/PHY/defs.h                    |  3 ++-
 targets/RT/USER/lte-ru.c               | 23 ++++++++++++++++-------
 targets/SIMU/USER/oaisim.c             |  2 +-
 4 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/openair1/PHY/LTE_TRANSPORT/if4_tools.c b/openair1/PHY/LTE_TRANSPORT/if4_tools.c
index c3cc6026f9e..17e2aa08a7e 100644
--- a/openair1/PHY/LTE_TRANSPORT/if4_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/if4_tools.c
@@ -287,14 +287,18 @@ void recv_IF4p5(RU_t *ru, int *frame, int *subframe, uint16_t *packet_type, uint
 
   LOG_D(PHY,"recv IF4p5: RU %d waiting (%d samples)\n",ru->idx,db_fulllength);    
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_IF, 1 );   
-  if (ru->ifdevice.trx_read_func(&ru->ifdevice,
+  int read_cnt=0;
+  while (ru->ifdevice.trx_read_func(&ru->ifdevice,
 				 (int64_t*) packet_type,
 				 &rx_buffer,
 				 db_fulllength,
 				 0) < 0) {
     perror("ETHERNET read");
-    ru->cmd = STOP_RU;
-    return;
+    read_cnt++;
+    if (read_cnt == 2) {
+      ru->cmd = STOP_RU;
+      return;
+    }
   }
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_IF, 0 );
   if (eth->flags == ETH_RAW_IF4p5_MODE) {
diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h
index 683338c03e9..8b868222895 100644
--- a/openair1/PHY/defs.h
+++ b/openair1/PHY/defs.h
@@ -686,7 +686,8 @@ typedef enum {
 
 /// Some commamds to RRU. Not sure we should do it like this !
 typedef enum {
-  STOP_RU   = 0
+  EMPTY     = 0,
+  STOP_RU   = 1
 } rru_cmd_t;
 
 typedef struct RU_t_s{
diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c
index 09a144768b4..077bacfc1c4 100644
--- a/targets/RT/USER/lte-ru.c
+++ b/targets/RT/USER/lte-ru.c
@@ -681,16 +681,17 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *subframe) {
   uint32_t symbol_number,symbol_mask,symbol_mask_full;
   int subframe_tx,frame_tx;
 
-  LOG_D(PHY, "%s(ru:%p frame, subframe)\n", __FUNCTION__, ru);
   symbol_number = 0;
   symbol_mask = 0;
   symbol_mask_full = ((subframe_select(fp,*subframe) == SF_S) ? (1<<fp->dl_symbols_in_S_subframe) : (1<<fp->symbols_per_tti))-1;
   do {   
     recv_IF4p5(ru, &frame_tx, &subframe_tx, &packet_type, &symbol_number);
-    if (ru->cmd != STOP_RU){
+    if (ru->cmd == STOP_RU){
+	LOG_E(PHY,"Got STOP_RU\n");
 	pthread_mutex_lock(&proc->mutex_ru);
         proc->instance_cnt_ru = -1;
         pthread_mutex_unlock(&proc->mutex_ru);
+	ru->cmd=EMPTY;
 	return;
     } 
     if ((subframe_select(fp,subframe_tx) == SF_DL) && (symbol_number == 0)) start_meas(&ru->rx_fhaul);
@@ -711,7 +712,7 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *subframe) {
     if (packet_type == IF4p5_PDLFFT) {
       symbol_mask = symbol_mask | (1<<symbol_number);
     }
-    else AssertFatal(1==0,"Illegal IF4p5 packet type (should only be IF4p5_PDLFFT%d\n",packet_type);
+    else AssertFatal(1==0,"Illegal IF4p5 packet type (should only be IF4p5_PDLFFT got %d\n",packet_type);
   } while (symbol_mask != symbol_mask_full);    
 
   if (subframe_select(fp,subframe_tx) == SF_DL) stop_meas(&ru->rx_fhaul);
@@ -754,6 +755,7 @@ void fh_if4p5_north_out(RU_t *ru) {
   const int subframe     = proc->subframe_rx;
   if (ru->idx==0) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_RU, proc->subframe_rx );
 
+  LOG_D(PHY,"Sending IF4p5_PULFFT SFN.SF %d.%d\n",proc->frame_rx,proc->subframe_rx);
   if ((fp->frame_type == TDD) && (subframe_select(fp,subframe)!=SF_UL)) {
     /// **** in TDD during DL send_IF4 of ULTICK to RCC **** ///
     send_IF4p5(ru, proc->frame_rx, proc->subframe_rx, IF4p5_PULTICK);
@@ -1305,7 +1307,7 @@ static inline int wakeup_prach_ru(RU_t *ru) {
       ru->eNB_list[0]->proc.frame_prach = ru->proc.frame_rx;
       ru->eNB_list[0]->proc.subframe_prach = ru->proc.subframe_rx;
     }
-    LOG_I(PHY,"RU %d: waking up PRACH thread\n",ru->idx);
+    LOG_D(PHY,"RU %d: waking up PRACH thread\n",ru->idx);
     // the thread can now be woken up
     AssertFatal(pthread_cond_signal(&ru->proc.cond_prach) == 0, "ERROR pthread_cond_signal for RU prach thread\n");
   }
@@ -1826,16 +1828,23 @@ static void* ru_thread( void* param ) {
  	    if (ru->stop_rf && ru->cmd == STOP_RU) {
             	ru->stop_rf(ru);
 		ru->state = RU_IDLE;
+		ru->cmd   = EMPTY;
             	LOG_I(PHY,"RU %d rf device stopped\n",ru->idx);
 		break;
             }
+	    else if (ru->cmd == STOP_RU) {
+                ru->state = RU_IDLE;
+ 		ru->cmd   = EMPTY;
+                LOG_I(PHY,"RU %d rf device stopped\n",ru->idx);
+                break;
+            }
             
 	    
 	    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");
 
 /*
-    LOG_D(PHY,"AFTER fh_south_in - SFN/SF:%d%d RU->proc[RX:%d%d TX:%d%d] RC.eNB[0][0]:[RX:%d%d TX(SFN):%d]\n",
+    LOG_I(PHY,"AFTER fh_south_in - SFN/SF:%d%d RU->proc[RX:%d%d TX:%d%d] RC.eNB[0][0]:[RX:%d%d TX(SFN):%d]\n",
         frame,subframe,
         proc->frame_rx,proc->subframe_rx,
         proc->frame_tx,proc->subframe_tx,
@@ -1846,7 +1855,7 @@ static void* ru_thread( void* param ) {
           ru->do_prach,
           is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx),
           proc->frame_rx,proc->subframe_rx);
-*/ 
+ */
     if ((ru->do_prach>0) && (is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx)==1)) {
       wakeup_prach_ru(ru);
     }
@@ -2590,7 +2599,7 @@ void init_RU(char *rf_config_file, clock_source_t clock_source,clock_source_t ti
     ru->idx          = ru_id;              
     ru->ts_offset    = 0;
     ru->in_synch     = (ru->is_slave == 1) ? 0 : 1;
-    ru->cmd	     = -1;
+    ru->cmd	     = EMPTY;
     // use eNB_list[0] as a reference for RU frame parameters
     // NOTE: multiple CC_id are not handled here yet!
     ru->openair0_cfg.clock_source  = clock_source;
diff --git a/targets/SIMU/USER/oaisim.c b/targets/SIMU/USER/oaisim.c
index 4cc4a275b43..ab694a11ad1 100644
--- a/targets/SIMU/USER/oaisim.c
+++ b/targets/SIMU/USER/oaisim.c
@@ -741,7 +741,7 @@ l2l1_task (void *args_p)
         while (all_done==0) {
 
           pthread_mutex_lock(&subframe_mutex);
-          int subframe_ru_mask_local = subframe_ru_mask;
+          int subframe_ru_mask_local = ((1<<NB_RU)-1);//subframe_ru_mask;
           int subframe_UE_mask_local  = subframe_UE_mask;
           pthread_mutex_unlock(&subframe_mutex);
           LOG_D(EMU,"Frame %d, Subframe %d, NB_RU %d, NB_UE %d: Checking masks %x,%x\n",frame,sf,NB_RU,NB_UE_INST,subframe_ru_mask_local,subframe_UE_mask_local);
-- 
GitLab