From 9fcca73f538bf710d25f93ea9e03758d821a4b8e Mon Sep 17 00:00:00 2001
From: Xiwen JIANG <xiwen.jiang@eureocm.fr>
Date: Mon, 21 Mar 2016 16:55:26 +0100
Subject: [PATCH] lte softmodem adaption for massive antennas (not complete)

---
 openair1/PHY/INIT/lte_init.c            |  2 +-
 openair1/PHY/impl_defs_lte.h            |  5 +++++
 openair1/SCHED/phy_procedures_lte_eNb.c | 23 +++++++++++++++--------
 targets/RT/USER/lte-softmodem.c         |  4 ++--
 4 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c
index e604d599a1..672a3a51ef 100644
--- a/openair1/PHY/INIT/lte_init.c
+++ b/openair1/PHY/INIT/lte_init.c
@@ -1305,7 +1305,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB,
       for (i=0; i<2; i++) { // 2 is the total number of cell specific antenna ports
         eNB_common_vars->cell_spec_bf_weights[eNB_id][i] = (int32_t **)malloc16_clear(frame_parms->nb_antennas_tx*sizeof(int32_t*));
         for (j=0; j<frame_parms->nb_antennas_tx; j++) {
-          eNB_common_vars->cell_spec_bf_weights[eNB_id][i][j] = (int32_t*)malloc16_clear(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t));
+          eNB_common_vars->cell_spec_bf_weights[eNB_id][i][j] = (int32_t *)malloc16_clear(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t));
 #ifdef DEBUG_PUY
           msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->cell_spec_bf_weights[%d][%d][%d] = %p (%d bytes)\n",
               eNB_id,i,j,eNB_common_vars->cell_spec_bf_weights[eNB_id][i][j],
diff --git a/openair1/PHY/impl_defs_lte.h b/openair1/PHY/impl_defs_lte.h
index 134a92e15d..864d2d5d19 100644
--- a/openair1/PHY/impl_defs_lte.h
+++ b/openair1/PHY/impl_defs_lte.h
@@ -645,6 +645,11 @@ typedef struct {
   /// - third index: tx antenna [0..nb_antennas_tx[
   /// - fourth index: sample [0..]
   int32_t **ue_spec_bf_weights[3][8];
+  /// \brief Holds the tdd reciprocity calibration coefficients 
+  /// - first index: eNB id [0..2] (hard coded) 
+  /// - second index: tx antenna [0..nb_antennas_tx[
+  /// - third index: frenquency [0..]
+  int32_t **tdd_calib_coeffs[3];
 } LTE_eNB_COMMON;
 
 typedef struct {
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index 082f0c0568..dece28f78e 100755
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -2520,14 +2520,21 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
   if (abstraction_flag==0)
   {
     start_meas(&phy_vars_eNB->ofdm_mod_stats);
-    do_OFDM_mod(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
-                phy_vars_eNB->lte_eNB_common_vars.txdata[0],
-                phy_vars_eNB->proc[sched_subframe].frame_tx,subframe<<1,
-                &phy_vars_eNB->lte_frame_parms);
-    do_OFDM_mod(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
-                phy_vars_eNB->lte_eNB_common_vars.txdata[0],
-                phy_vars_eNB->proc[sched_subframe].frame_tx,1+(subframe<<1),
-                &phy_vars_eNB->lte_frame_parms);
+    
+    do_OFDM_mod_l(phy_vars_eNB->lte_eNB_common_vars,
+                  0,
+                  subframe<<1,
+                  &phy_vars_eNB->lte_frame_parms,
+                  num_pdcch_symbols,
+                  eNB->transmission_mode[(uint8_t)UE_id]); 
+                  
+    do_OFDM_mod_l(phy_vars_eNB->lte_eNB_common_vars,
+                  0,
+                  1+(subframe<<1),
+                  &phy_vars_eNB->lte_frame_parms,
+                  num_pdcch_symbols,
+                  eNB->transmission_mode[(uint8_t)UE_id]); 
+
     stop_meas(&phy_vars_eNB->ofdm_mod_stats);
   }
 
diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index 72d32fbdef..0fe4e2342c 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -2755,7 +2755,7 @@ int main( int argc, char **argv )
       frame_parms[CC_id]->nb_antenna_ports_eNB = (transmission_mode == 1 || transmission_mode ==7) ? 1 : 2; //initial value overwritten by initial sync later
     }
 
-    frame_parms[CC_id]->mode1_flag         = (transmission_mode == 1) ? 1 : 0;
+    frame_parms[CC_id]->mode1_flag         = (transmission_mode == 1 || transmission_mode ==7) ? 1 : 0;
     frame_parms[CC_id]->phich_config_common.phich_resource = oneSixth;
     frame_parms[CC_id]->phich_config_common.phich_duration = normal;
     // UL RS Config
@@ -3188,7 +3188,7 @@ int main( int argc, char **argv )
     openair_daq_vars.timing_advance = 160;
 #endif
     if (setup_ue_buffers(UE,&openair0_cfg[0],rf_map)!=0) {
-      printf("Error setting up eNB buffer\n");
+      printf("Error setting up UE buffer\n");
       exit(-1);
     }
 
-- 
2.26.2