From 4dc5032bb7ff306a5b8359bb1e5bcb7dc989cfbf Mon Sep 17 00:00:00 2001
From: Sandeep Kumar <ee13b1025@iith.ac.in>
Date: Mon, 25 Jul 2016 12:04:25 +0200
Subject: [PATCH] if4 tx works again with FH thread changes

---
 targets/RT/USER/lte-enb.c | 37 ++++++++++++++++++++++---------------
 1 file changed, 22 insertions(+), 15 deletions(-)

diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c
index ff302ec80db..427f69180f7 100644
--- a/targets/RT/USER/lte-enb.c
+++ b/targets/RT/USER/lte-enb.c
@@ -301,6 +301,7 @@ static void* eNB_thread_rxtx( void* param ) {
   
   uint16_t packet_type;
   uint32_t symbol_number=0;
+  uint32_t symbol_mask, symbol_mask_full;
   
   uint8_t seqno=0;
   
@@ -502,10 +503,16 @@ static void* eNB_thread_rxtx( void* param ) {
         }
       } else if (PHY_vars_eNB_g[0][proc->CC_id]->node_function == NGFI_RRU_IF4) {
         /// **** recv_IF4 of txdataF from RCC **** ///             
+        symbol_number = 0;
+        symbol_mask = 0;
+        symbol_mask_full = (1<<PHY_vars_eNB_g[0][proc->CC_id]->frame_parms.symbols_per_tti)-1;
+        
         VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4, 1 );  
         do { 
           recv_IF4(PHY_vars_eNB_g[0][proc->CC_id], &proc->frame_tx, &proc->subframe_tx, &packet_type, &symbol_number);
-        } while (symbol_number < PHY_vars_eNB_g[0][proc->CC_id]->frame_parms.symbols_per_tti-1); 
+          symbol_mask = symbol_mask | (1<<symbol_number);
+          
+        } while (symbol_mask != symbol_mask_full); 
         
         VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4, 0 );   
         
@@ -805,13 +812,12 @@ static void* eNB_thread_asynch_rx( void* param ) {
         VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4, 0 );   
 
         if (packet_type == IF4_PULFFT) {
-          symbol_mask = symbol_mask | (1<<symbol_number);     
-                       
+          symbol_mask = symbol_mask | (1<<symbol_number);
+          prach_rx = (is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx)>0) ? 1 : 0;                            
         } else if (packet_type == IF4_PRACH) {
-          // wake up thread for PRACH RX
-          prach_rx = 1;
+          prach_rx = 0;
         }
-      } while( (symbol_mask != symbol_mask_full) && (prach_rx == 0));    
+      } while( (symbol_mask != symbol_mask_full) || (prach_rx == 1));    
 
       if (proc->first_rx == 0) {
         if (subframe_rx < proc->subframe_rx+2){
@@ -1122,32 +1128,33 @@ static void* eNB_thread_FH( void* param ) {
       symbol_mask = 0;
       symbol_mask_full = (1<<fp->symbols_per_tti)-1;
       prach_rx = 0;
-         
+
       do {   // Blocking, we need a timeout on this !!!!!!!!!!!!!!!!!!!!!!!
         VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4, 1 );   
         recv_IF4(eNB, &proc->frame_rx, &proc->subframe_rx, &packet_type, &symbol_number);
         VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4, 0 );   
 
         if (packet_type == IF4_PULFFT) {
-          symbol_mask = symbol_mask | (1<<symbol_number);     
-                       
+          symbol_mask = symbol_mask | (1<<symbol_number);
+          prach_rx = (is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx)>0) ? 1 : 0;                            
         } else if (packet_type == IF4_PRACH) {
-          // wake up thread for PRACH RX
-          prach_rx = 1;
-	    }
-      } while( (symbol_mask != symbol_mask_full) && (prach_rx == 0));    
+          prach_rx = 0;
+        }
+      } while( (symbol_mask != symbol_mask_full) || (prach_rx == 1));    
 
       if (proc->first_rx == 0) {
         if (proc->subframe_rx != subframe){
           LOG_E(PHY,"Received Timestamp doesn't correspond to the time we think it is (proc->subframe_rx %d, subframe %d)\n",proc->subframe_rx,subframe);
-          //exit_fun("Exiting");
+          exit_fun("Exiting");
         }
         if (proc->frame_rx != frame) {
           LOG_E(PHY,"Received Timestamp doesn't correspond to the time we think it is (proc->frame_rx %d frame %d)\n",proc->frame_rx,frame);
-          //exit_fun("Exiting");
+          exit_fun("Exiting");
         }
       } else {
         proc->first_rx = 0;
+        frame = proc->frame_rx;
+        subframe = proc->subframe_rx;        
       }
 
       VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TS, proc->timestamp_rx&0xffffffff );
-- 
GitLab