From cce0b45f97cc73f7e06bdd21bf8ad2be54699fd2 Mon Sep 17 00:00:00 2001
From: Florian Kaltenberger <florian.kaltenberger@eurecom.fr>
Date: Wed, 2 Dec 2015 13:02:45 +0100
Subject: [PATCH] a few small bugfixes, but not yet finished

---
 openair1/PHY/LTE_TRANSPORT/dci_tools.c        | 21 +++++++++----------
 .../PHY/LTE_TRANSPORT/dlsch_demodulation.c    | 16 ++++----------
 openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c |  8 +++----
 openair1/SIMULATION/LTE_PHY/dlsim.c           | 16 +++++++-------
 4 files changed, 26 insertions(+), 35 deletions(-)

diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
index a7ce2b2e005..cfb250b7ca7 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
@@ -5841,22 +5841,21 @@ uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,int nb_rb)
         pmi_re += meas->subband_pmi_re[eNB_id][i][aarx];
         pmi_im += meas->subband_pmi_im[eNB_id][i][aarx];
       }
-         if (pmi_re > pmi_im) 
-	  pmiq = PMI_2A_R1_11;
-	else if (pmi_re < pmi_im) 
-	  pmiq = PMI_2A_R1_1j;
-     printf("subband %d, pmi%d \n",i,pmiq);
-     //According to Section 7.2.4 of 36.213
-	 pmivect |= ((pmiq-1)<<(i)); //shift 1 since only one bit  
-    printf("subband %d pmivect %d \n",i, pmivect);
+      if (pmi_re > pmi_im) 
+	pmiq = PMI_2A_R1_11;
+      else //if (pmi_re < pmi_im) 
+	pmiq = PMI_2A_R1_1j;
+      printf("subband %d, pmi_re %d, pmi_in %d, pmiq %d \n",i,pmi_re,pmi_im,pmiq);
+      //According to Section 7.2.4 of 36.213
+      pmivect |= ((pmiq-1)<<(i)); //shift 1 since only one bit  
     }
-	else {
-      // This needs to be done properly!!!
-      msg("PMI feedback for rank>1 not supported!\n");
+    else {
+      LOG_E(PHY,"PMI feedback for rank>1 not supported!\n");
       pmivect = 0;
     }
   }
 
+  printf("subband %d pmivect %d \n",i, pmivect);
   return(pmivect);
 }
 
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
index 303fdd0a4fd..12958f07bdd 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
@@ -190,9 +190,6 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
   //printf("rx_pdsch: harq_pid=%d, round=%d\n",harq_pid,round);
 
   if (frame_parms->nb_antennas_tx_eNB>1) {
-//#ifdef DEBUG_DLSCH_MOD
- //printf("dlsch: using pmi %x (%p), rb_alloc %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc),dlsch_ue[0],dlsch0_harq->rb_alloc_even[0]);
-//#endif
     nb_rb = dlsch_extract_rbs_dual(lte_ue_common_vars->rxdataF,
                                    lte_ue_common_vars->dl_ch_estimates[eNB_id],
                                    lte_ue_pdsch_vars[eNB_id]->rxdataF_ext,
@@ -205,6 +202,9 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
                                    phy_vars_ue->high_speed_flag,
                                    frame_parms,
 				   dlsch0_harq->mimo_mode);
+//#ifdef DEBUG_DLSCH_MOD
+    printf("dlsch: using pmi %lx, rb_alloc %x, pmi_ext %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc),*rballoc,*lte_ue_pdsch_vars[eNB_id]->pmi_ext);
+//#endif
 
    if (rx_type==rx_IC_single_stream) {
       if (eNB_id_i<phy_vars_ue->n_connected_eNB) // we are in TM5
@@ -1830,7 +1830,7 @@ void dlsch_channel_compensation_TM34(LTE_DL_FRAME_PARMS *frame_parms,
   int **dl_ch_magb1           = lte_ue_pdsch_vars->dl_ch_magb1;
   int **rxdataF_comp0         = lte_ue_pdsch_vars->rxdataF_comp0;
   int **rxdataF_comp1         = lte_ue_pdsch_vars->rxdataF_comp1[harq_pid][round];
-  unsigned char **pmi_ext     = lte_ue_pdsch_vars->pmi_ext;
+  unsigned char *pmi_ext     = lte_ue_pdsch_vars->pmi_ext;
   __m128i mmtmpD0,mmtmpD1,mmtmpD2,mmtmpD3,QAM_amp0_128,QAM_amp0_128b,QAM_amp1_128,QAM_amp1_128b;   
     
   symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
@@ -4016,14 +4016,6 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
                                       LTE_DL_FRAME_PARMS *frame_parms,
 				      MIMO_mode_t mimo_mode) {
     
-/*uint8_t get_pmi(uint8_t N_RB_DL,LTE_DL_eNB_HARQ_t *dlsch_harq,uint16_t rb)
-{
-
-
-  MIMO_mode_t mode   = dlsch_harq->mimo_mode;*/
-
-//PHY_VARS_UE *phy_vars_ue,
-
   int prb,nb_rb=0;
   int prb_off,prb_off2;
   int rb_alloc_ind,skip_half=0,sss_symb,pss_symb=0,nsymb,l;
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
index 5323dbbcdd7..0c40569f3b5 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
@@ -1254,7 +1254,6 @@ uint8_t get_pmi(uint8_t N_RB_DL,LTE_DL_eNB_HARQ_t *dlsch_harq,uint16_t rb)
   MIMO_mode_t mode   = dlsch_harq->mimo_mode;
   uint32_t pmi_alloc = dlsch_harq->pmi_alloc;
 
- printf("Getting pmi for RB %d => %d\n",rb,((pmi_alloc>>rb)&1));
   switch (N_RB_DL) {
   case 6:   // 1 PRB per subband
     if (mode <= PUSCH_PRECODING1) //single layer
@@ -1268,9 +1267,10 @@ uint8_t get_pmi(uint8_t N_RB_DL,LTE_DL_eNB_HARQ_t *dlsch_harq,uint16_t rb)
   case 25:  // 4 PRBs per subband
     if (mode <= PUSCH_PRECODING1)
       return((pmi_alloc>>((rb>>2)<<1))&3);
-    else
+    else {
+      printf("Getting pmi for RB %d => %d\n",rb,((pmi_alloc>>(rb>>2))&1));
       return((pmi_alloc>>(rb>>2))&1);
-
+    }
     break;
 
   case 50: // 6 PRBs per subband
@@ -1369,7 +1369,7 @@ int dlsch_modulation(mod_sym_t **txdataF,
   for (l=num_pdcch_symbols; l<nsymb; l++) {
 
 #ifdef DEBUG_DLSCH_MODULATION
-    printf("Generating DLSCH (harq_pid %d,mimo %d, pmi_alloc0 %llx, mod0 %d, mod1 %d, rb_alloc[0] %d) in %d\n",
+    printf("Generating DLSCH (harq_pid %d,mimo %d, pmi_alloc0 %lx, mod0 %d, mod1 %d, rb_alloc[0] %d) in %d\n",
         harq_pid,
         dlsch0_harq->mimo_mode,
         pmi2hex_2Ar2(dlsch0_harq->pmi_alloc),
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c
index a72ab6a01e8..efbc7ba99ea 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim.c
@@ -1712,8 +1712,8 @@ n(tikz_fname,"w");
 		((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2             = mcs2;  
 		((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2             = 1;
 		((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv2              = 0;
-		((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap          = 0;
-		((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi          	 = 2;
+		((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap          = 0;
+		((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi          	 = 2;
 		dci_length = sizeof_DCI2_20MHz_2A_TDD_t;
 		dci_length_bytes = sizeof(DCI2_20MHz_2A_TDD_t);
 		break;
@@ -1735,7 +1735,7 @@ n(tikz_fname,"w");
 		((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2             = 1;
 		((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv2              = 0;
 		((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap          = 0;
-		((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi          	  = 0;
+		((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi          	  = 0;
 		break;
 	      case 25:
 		dci_length = sizeof_DCI2_5MHz_2A_FDD_t;
@@ -1751,7 +1751,7 @@ n(tikz_fname,"w");
 		((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2             = 1;
 		((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv2              = 0;
 		((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap          = 0;
-		((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi          	= 0;
+		((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi          	= 0;
 		break;
 	      case 50:
 		dci_length = sizeof_DCI2_10MHz_2A_FDD_t;
@@ -1767,7 +1767,7 @@ n(tikz_fname,"w");
 		((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2             = 1;
 		((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv2              = 0;
 		((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap          = 0;
-		((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi          	 = 0;
+		((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi          	 = 0;
 		break;
 	      case 100:
 		dci_length = sizeof_DCI2_20MHz_2A_FDD_t;
@@ -1783,7 +1783,7 @@ n(tikz_fname,"w");
 		((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2             = 1;
 		((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv2              = 0;
 		((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap          = 0;
-		((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi          	 = 0;
+		((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi          	 = 0;
 		break;
 	      }	  
 	    }
@@ -2149,7 +2149,7 @@ n(tikz_fname,"w");
 	  //	  printf("Trial %d, round %d\n",trials,round);
 	  round_trials[round]++;
 
-	  if(transmission_mode>=5)
+	  if (transmission_mode == 4 || transmission_mode == 5 || transmission_mode == 6) 
 	    pmi_feedback=1;
 	  else 
 	    pmi_feedback=0;
@@ -2773,7 +2773,7 @@ n(tikz_fname,"w");
 	      }
 	      
 	      
-	       if (transmission_mode==4 && (((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 2)){
+	      if (transmission_mode==4 && (((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 2)){
 		PHY_vars_eNB->dlsch_eNB[0][0]->harq_processes[0]->pmi_alloc = quantize_subband_pmi(&PHY_vars_UE->PHY_measurements,0,PHY_vars_eNB->lte_frame_parms.N_RB_DL);
 		PHY_vars_UE->dlsch_ue[0][0]->pmi_alloc = quantize_subband_pmi(&PHY_vars_UE->PHY_measurements,0,PHY_vars_UE->lte_frame_parms.N_RB_DL);
 	      }
-- 
GitLab