From f5be2be550ad6383f904c67cd75c85279f2184cc Mon Sep 17 00:00:00 2001
From: gabrielC <couturier.gabriel@gmail.com>
Date: Fri, 28 Jul 2017 16:39:25 +0200
Subject: [PATCH] Correct DCIFormat and AgregationLevel to put them in pdcch
 structure

---
 openair1/PHY/LTE_TRANSPORT/dci.c       | 7 +++----
 openair1/PHY/defs.h                    | 2 --
 openair1/PHY/impl_defs_lte.h           | 3 +++
 openair1/PHY/vars.h                    | 2 --
 openair1/SCHED/phy_procedures_lte_ue.c | 6 +++---
 targets/RT/USER/lte-softmodem.c        | 9 +++++----
 targets/SIMU/USER/oaisim_functions.c   | 5 +++++
 7 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c
index 01786a174f7..d02d6eeecb2 100755
--- a/openair1/PHY/LTE_TRANSPORT/dci.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci.c
@@ -3056,12 +3056,14 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **pdcch_vars,
          return;
       } // rnti match
     }  // CCEmap_cand == 0
-    if ( agregationLevel != 0xFF &&
+/*    
+	if ( agregationLevel != 0xFF &&
         (format_c == format0 && m==0 && si_rnti != SI_RNTI))
     {
       //Only valid for OAI : Save some processing time when looking for DCI format0. From the log we see the DCI only on candidate 0.
       return;
     }
+*/
   } // candidate loop
 }
 
@@ -3651,9 +3653,6 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
       ((format0_found==1)&&(format_c_found==1)))
     return(dci_cnt);
 
-  if ((CCEmap0==0xffff)||
-      ((format0_found==1)&&(format_c_found==1)))
-    return(dci_cnt);
 
   //printf("[DCI search] Format 0 aggregation 2 dci_cnt %d\n",dci_cnt);
   }
diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h
index 81298341d62..6a8f624498a 100644
--- a/openair1/PHY/defs.h
+++ b/openair1/PHY/defs.h
@@ -75,8 +75,6 @@
 
 #define RX_NB_TH_MAX 2
 #define RX_NB_TH 2
-extern uint8_t dciFormat;
-extern uint8_t agregationLevel;
 
 
 //#ifdef SHRLIBDEV
diff --git a/openair1/PHY/impl_defs_lte.h b/openair1/PHY/impl_defs_lte.h
index edc97057ce3..d09fd8d9152 100644
--- a/openair1/PHY/impl_defs_lte.h
+++ b/openair1/PHY/impl_defs_lte.h
@@ -1034,6 +1034,9 @@ typedef struct {
   uint32_t dci_missed;
   /// nCCE for PUCCH per subframe
   uint8_t nCCE[10];
+  //Check for specific DCIFormat and AgregationLevel
+  uint8_t dciFormat;
+  uint8_t agregationLevel;
 } LTE_UE_PDCCH;
 
 #define PBCH_A 24
diff --git a/openair1/PHY/vars.h b/openair1/PHY/vars.h
index 0f9afe38bda..17cdabc2248 100644
--- a/openair1/PHY/vars.h
+++ b/openair1/PHY/vars.h
@@ -78,8 +78,6 @@ unsigned char NB_INST=0;
 unsigned int ULSCH_max_consecutive_errors = 20;
 
 int number_of_cards;
-uint8_t dciFormat;
-uint8_t agregationLevel;
 
 
 int flag_LA=0;
diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c
index 52c4ba5ddc6..8fbdaae4750 100644
--- a/openair1/SCHED/phy_procedures_lte_ue.c
+++ b/openair1/SCHED/phy_procedures_lte_ue.c
@@ -3097,7 +3097,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
     //printf("Decode SIB frame param agregation + DCI %d %d \n",agregationLevel,dciFormat);
 
     //agregation level == FF means no configuration on
-    if(agregationLevel == 0xFF || ue->decode_SIB)
+    if(ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->agregationLevel == 0xFF || ue->decode_SIB)
     {
         // search all possible dcis
         dci_cnt = dci_decoding_procedure(ue,
@@ -3112,8 +3112,8 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
         // search C RNTI dci
         dci_cnt = dci_CRNTI_decoding_procedure(ue,
                 dci_alloc_rx,
-                dciFormat,
-                agregationLevel,
+                ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->dciFormat,
+                ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->agregationLevel,
                 eNB_id,
                 subframe_rx);
     }
diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index 1dac7db44a2..a1f3bcb57b2 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -1590,10 +1590,6 @@ int main( int argc, char **argv ) {
         NB_UE_INST=1;
         NB_INST=1;
 
-        dciFormat     = dci_Format;
-        agregationLevel     = agregation_Level;
-
-        LOG_I(PHY,"Set dciFormat %d , agregationLevel %d \n",dciFormat, agregationLevel);
 
         PHY_vars_UE_g = malloc(sizeof(PHY_VARS_UE**));
         PHY_vars_UE_g[0] = malloc(sizeof(PHY_VARS_UE*)*MAX_NUM_CCs);
@@ -1626,6 +1622,11 @@ int main( int argc, char **argv ) {
             UE[CC_id]->mode    = mode;
             printf("UE[%d]->mode = %d\n",CC_id,mode);
 
+            for (uint8_t i=0; i<RX_NB_TH_MAX; i++) {
+                UE[CC_id]->pdcch_vars[i][0]->agregationLevel = agregation_Level;
+                UE[CC_id]->pdcch_vars[i][0]->dciFormat     = dci_Format;
+            }
+
             compute_prach_seq(&UE[CC_id]->frame_parms.prach_config_common,
                               UE[CC_id]->frame_parms.frame_type,
                               UE[CC_id]->X_u);
diff --git a/targets/SIMU/USER/oaisim_functions.c b/targets/SIMU/USER/oaisim_functions.c
index 71304aea8ec..2782620eabf 100644
--- a/targets/SIMU/USER/oaisim_functions.c
+++ b/targets/SIMU/USER/oaisim_functions.c
@@ -1431,6 +1431,11 @@ void init_openair1(void)
 	PHY_vars_UE_g[UE_id][CC_id]->mac_enabled=1;
 
       PHY_vars_UE_g[UE_id][CC_id]->pdcch_vars[0][0]->crnti = 0x1235 + UE_id;
+
+      for (uint8_t i=0; i<RX_NB_TH_MAX; i++) {
+          PHY_vars_UE_g[UE_id][CC_id]->pdcch_vars[i][0]->dciFormat      = 0;
+          PHY_vars_UE_g[UE_id][CC_id]->pdcch_vars[i][0]->agregationLevel      = 0xFF;
+      }
       PHY_vars_UE_g[UE_id][CC_id]->current_dlsch_cqi[0] = 10;
 
       LOG_I(EMU, "UE %d mode is initialized to %d\n", UE_id, PHY_vars_UE_g[UE_id][CC_id]->UE_mode[0] );
-- 
GitLab