From e958d7be870234a367655842f273c7012c884a0c Mon Sep 17 00:00:00 2001
From: Raymond Knopp <raymond.knopp@eurecom.fr>
Date: Fri, 7 Oct 2016 10:31:17 -0700
Subject: [PATCH] update for mbmssim for new data structures

---
 openair1/SIMULATION/LTE_PHY/mbmssim.c | 230 +++++++++++---------------
 1 file changed, 98 insertions(+), 132 deletions(-)

diff --git a/openair1/SIMULATION/LTE_PHY/mbmssim.c b/openair1/SIMULATION/LTE_PHY/mbmssim.c
index 539a292874..858886e256 100644
--- a/openair1/SIMULATION/LTE_PHY/mbmssim.c
+++ b/openair1/SIMULATION/LTE_PHY/mbmssim.c
@@ -51,15 +51,16 @@
 
 
 #include "OCG_vars.h"
+#include "unitary_defs.h"
 
 
-PHY_VARS_eNB *PHY_vars_eNB;
-PHY_VARS_UE *PHY_vars_UE;
+PHY_VARS_eNB *eNB;
+PHY_VARS_UE *UE;
 
 
 DCI1E_5MHz_2A_M10PRB_TDD_t  DLSCH_alloc_pdu2_1E[2];
 #define UL_RB_ALLOC 0x1ff;
-#define CCCH_RB_ALLOC computeRIV(PHY_vars_eNB->frame_parms.N_RB_UL,0,2)
+#define CCCH_RB_ALLOC computeRIV(eNB->frame_parms.N_RB_UL,0,2)
 int main(int argc, char **argv)
 {
 
@@ -70,10 +71,11 @@ int main(int argc, char **argv)
   uint8_t snr1set=0;
   double snr_step=1,input_snr_step=1;
   int **txdata;
-  double **s_re,**s_im,**r_re,**r_im;
+  double s_re0[2*30720],s_im0[2*30720],s_re1[2*30720],s_im1[2*30720];
+  double r_re0[2*30720],r_im0[2*30720],r_re1[2*30720],r_im1[2*30720];
+  double *s_re[2]={s_re0,s_re1},*s_im[2]={s_im0,s_im1},*r_re[2]={r_re0,r_re1},*r_im[2]={r_im0,r_im1};
   double iqim = 0.0;
   int subframe=1;
-  int sched_subframe;
   char fname[40];//, vname[40];
   uint8_t transmission_mode = 1,n_tx=1,n_rx=2;
   uint16_t Nid_cell=0;
@@ -125,17 +127,7 @@ int main(int argc, char **argv)
 
   logInit();
   number_of_cards = 1;
-  //openair_daq_vars.rx_rf_mode = 1;
 
-  /*
-    rxdataF    = (int **)malloc16(2*sizeof(int*));
-    rxdataF[0] = (int *)malloc16(FRAME_LENGTH_BYTES);
-    rxdataF[1] = (int *)malloc16(FRAME_LENGTH_BYTES);
-
-    rxdata    = (int **)malloc16(2*sizeof(int*));
-    rxdata[0] = (int *)malloc16(FRAME_LENGTH_BYTES);
-    rxdata[1] = (int *)malloc16(FRAME_LENGTH_BYTES);
-  */
   while ((c = getopt (argc, argv, "ahA:Cp:n:s:S:t:x:y:z:N:F:R:O:dm:i:Y")) != -1) {
     switch (c) {
     case 'a':
@@ -235,7 +227,6 @@ int main(int argc, char **argv)
   }
 
 
-  sched_subframe = (subframe+9)%10;
 
   if (awgn_flag == 1)
     channel_model = AWGN;
@@ -253,9 +244,17 @@ int main(int argc, char **argv)
   if (transmission_mode==2)
     n_tx=2;
 
-  lte_param_init(n_tx,n_rx,transmission_mode,extended_prefix_flag,frame_type,Nid_cell,tdd_config,N_RB_DL,0,osf,perfect_ce);
-
-
+  lte_param_init(n_tx,
+		 n_rx,
+		 transmission_mode,
+		 extended_prefix_flag,
+		 frame_type,
+		 Nid_cell,
+		 tdd_config,
+		 N_RB_DL,
+		 0,
+		 osf,
+		 perfect_ce);
 
   if (snr1set==0) {
     if (n_frames==1)
@@ -266,7 +265,7 @@ int main(int argc, char **argv)
 
   printf("SNR0 %f, SNR1 %f\n",snr0,snr1);
 
-  frame_parms = &PHY_vars_eNB->frame_parms;
+  frame_parms = &eNB->frame_parms;
 
   if (awgn_flag == 0)
     sprintf(fname,"embms_%d_%d.m",mcs,N_RB_DL);
@@ -292,72 +291,56 @@ int main(int argc, char **argv)
 
   fflush(fd);
 
-  txdata = PHY_vars_eNB->common_vars.txdata[0];
+  txdata = eNB->common_vars.txdata[0];
 
-  s_re = malloc(2*sizeof(double*));
-  s_im = malloc(2*sizeof(double*));
-  r_re = malloc(2*sizeof(double*));
-  r_im = malloc(2*sizeof(double*));
   nsymb = 12;
 
   printf("FFT Size %d, Extended Prefix %d, Samples per subframe %d, Symbols per subframe %d, AWGN %d\n",NUMBER_OF_OFDM_CARRIERS,
          frame_parms->Ncp,frame_parms->samples_per_tti,nsymb,awgn_flag);
 
-  for (i=0; i<2; i++) {
-
-    s_re[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double));
-    bzero(s_re[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double));
-    s_im[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double));
-    bzero(s_im[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double));
-    r_re[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double));
-    bzero(r_re[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double));
-    r_im[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double));
-    bzero(r_im[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double));
-  }
-
-  eNB2UE = new_channel_desc_scm(PHY_vars_eNB->frame_parms.nb_antennas_tx,
-                                PHY_vars_UE->frame_parms.nb_antennas_rx,
+  eNB2UE = new_channel_desc_scm(eNB->frame_parms.nb_antennas_tx,
+                                UE->frame_parms.nb_antennas_rx,
                                 channel_model,
-				N_RB2sampling_rate(PHY_vars_eNB->frame_parms.N_RB_DL),
-				N_RB2channel_bandwidth(PHY_vars_eNB->frame_parms.N_RB_DL),
+				N_RB2sampling_rate(eNB->frame_parms.N_RB_DL),
+				N_RB2channel_bandwidth(eNB->frame_parms.N_RB_DL),
                                 0,
                                 0,
                                 0);
 
   // Create transport channel structures for 2 transport blocks (MIMO)
-  PHY_vars_eNB->dlsch_MCH = new_eNB_dlsch(1,8,Nsoft,N_RB_DL,0);
+  eNB->dlsch_MCH = new_eNB_dlsch(1,8,Nsoft,N_RB_DL,0);
 
-  if (!PHY_vars_eNB->dlsch_MCH) {
+  if (!eNB->dlsch_MCH) {
     printf("Can't get eNB dlsch structures\n");
     exit(-1);
   }
 
-  PHY_vars_UE->dlsch_MCH[0]  = new_ue_dlsch(1,8,Nsoft,MAX_TURBO_ITERATIONS_MBSFN,N_RB_DL,0);
+  UE->dlsch_MCH[0]  = new_ue_dlsch(1,8,Nsoft,MAX_TURBO_ITERATIONS_MBSFN,N_RB_DL,0);
 
-  PHY_vars_eNB->frame_parms.num_MBSFN_config = 1;
-  PHY_vars_eNB->frame_parms.MBSFN_config[0].radioframeAllocationPeriod = 0;
-  PHY_vars_eNB->frame_parms.MBSFN_config[0].radioframeAllocationOffset = 0;
-  PHY_vars_eNB->frame_parms.MBSFN_config[0].fourFrames_flag = 0;
-  PHY_vars_eNB->frame_parms.MBSFN_config[0].mbsfn_SubframeConfig=0xff; // activate all possible subframes
-  PHY_vars_UE->frame_parms.num_MBSFN_config = 1;
-  PHY_vars_UE->frame_parms.MBSFN_config[0].radioframeAllocationPeriod = 0;
-  PHY_vars_UE->frame_parms.MBSFN_config[0].radioframeAllocationOffset = 0;
-  PHY_vars_UE->frame_parms.MBSFN_config[0].fourFrames_flag = 0;
-  PHY_vars_UE->frame_parms.MBSFN_config[0].mbsfn_SubframeConfig=0xff; // activate all possible subframes
+  eNB->frame_parms.num_MBSFN_config = 1;
+  eNB->frame_parms.MBSFN_config[0].radioframeAllocationPeriod = 0;
+  eNB->frame_parms.MBSFN_config[0].radioframeAllocationOffset = 0;
+  eNB->frame_parms.MBSFN_config[0].fourFrames_flag = 0;
+  eNB->frame_parms.MBSFN_config[0].mbsfn_SubframeConfig=0xff; // activate all possible subframes
+  UE->frame_parms.num_MBSFN_config = 1;
+  UE->frame_parms.MBSFN_config[0].radioframeAllocationPeriod = 0;
+  UE->frame_parms.MBSFN_config[0].radioframeAllocationOffset = 0;
+  UE->frame_parms.MBSFN_config[0].fourFrames_flag = 0;
+  UE->frame_parms.MBSFN_config[0].mbsfn_SubframeConfig=0xff; // activate all possible subframes
 
-  fill_eNB_dlsch_MCH(PHY_vars_eNB,mcs,1,0,0);
-  fill_UE_dlsch_MCH(PHY_vars_UE,mcs,1,0,0);
+  fill_eNB_dlsch_MCH(eNB,mcs,1,0);
+  fill_UE_dlsch_MCH(UE,mcs,1,0,0);
 
-  if (is_pmch_subframe(0,subframe,&PHY_vars_eNB->frame_parms)==0) {
+  if (is_pmch_subframe(0,subframe,&eNB->frame_parms)==0) {
     printf("eNB is not configured for MBSFN in subframe %d\n",subframe);
     exit(-1);
-  } else if (is_pmch_subframe(0,subframe,&PHY_vars_UE->frame_parms)==0) {
+  } else if (is_pmch_subframe(0,subframe,&UE->frame_parms)==0) {
     printf("UE is not configured for MBSFN in subframe %d\n",subframe);
     exit(-1);
   }
 
 
-  input_buffer_length = PHY_vars_eNB->dlsch_MCH->harq_processes[0]->TBS/8;
+  input_buffer_length = eNB->dlsch_MCH->harq_processes[0]->TBS/8;
   input_buffer = (unsigned char *)malloc(input_buffer_length+4);
   memset(input_buffer,0,input_buffer_length+4);
 
@@ -369,9 +352,9 @@ int main(int argc, char **argv)
   snr_step = input_snr_step;
 
   for (SNR=snr0; SNR<snr1; SNR+=snr_step) {
-    PHY_vars_UE->frame_tx=0;
-    PHY_vars_eNB->proc[sched_subframe].frame_tx=0;
-    PHY_vars_eNB->proc[sched_subframe].subframe_tx=subframe;
+    UE->proc.proc_rxtx[0].frame_tx=0;
+    eNB->proc.proc_rxtx[0].frame_tx=0;
+    eNB->proc.proc_rxtx[0].subframe_tx=subframe;
 
     errs[0]=0;
     errs[1]=0;
@@ -392,12 +375,11 @@ int main(int argc, char **argv)
       //if (trials%100==0)
       //eNB2UE[0]->first_run = 1;
       eNB2UE->first_run = 1;
-      memset(&PHY_vars_eNB->common_vars.txdataF[0][0][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t));
+      memset(&eNB->common_vars.txdataF[0][0][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t));
+      generate_mch(eNB,&eNB->proc.proc_rxtx[0],input_buffer);
 
-      generate_mch(PHY_vars_eNB,sched_subframe,input_buffer,0);
 
-
-      PHY_ofdm_mod(PHY_vars_eNB->common_vars.txdataF[0][0],        // input,
+      PHY_ofdm_mod(eNB->common_vars.txdataF[0][0],        // input,
                    txdata[0],         // output
                    frame_parms->ofdm_symbol_size,
                    LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb,                 // number of symbols
@@ -405,33 +387,34 @@ int main(int argc, char **argv)
                    CYCLIC_PREFIX);
 
       if (n_frames==1) {
-        write_output("txsigF0.m","txsF0", &PHY_vars_eNB->common_vars.txdataF[0][0][subframe*nsymb*PHY_vars_eNB->frame_parms.ofdm_symbol_size],
-                     nsymb*PHY_vars_eNB->frame_parms.ofdm_symbol_size,1,1);
-        //if (PHY_vars_eNB->frame_parms.nb_antennas_tx>1)
-        //write_output("txsigF1.m","txsF1", &PHY_vars_eNB->common_vars.txdataF[eNB_id][1][subframe*nsymb*PHY_vars_eNB->frame_parms.ofdm_symbol_size],nsymb*PHY_vars_eNB->frame_parms.ofdm_symbol_size,1,1);
+        write_output("txsigF0.m","txsF0", &eNB->common_vars.txdataF[0][0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],
+                     nsymb*eNB->frame_parms.ofdm_symbol_size,1,1);
+        //if (eNB->frame_parms.nb_antennas_tx>1)
+        //write_output("txsigF1.m","txsF1", &eNB->lte_eNB_common_vars.txdataF[eNB_id][1][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1);
       }
 
       tx_lev = 0;
 
-      for (aa=0; aa<PHY_vars_eNB->frame_parms.nb_antennas_tx; aa++) {
-        tx_lev += signal_energy(&PHY_vars_eNB->common_vars.txdata[eNB_id][aa]
-                                [subframe*PHY_vars_eNB->frame_parms.samples_per_tti],
-                                PHY_vars_eNB->frame_parms.samples_per_tti);
+      for (aa=0; aa<eNB->frame_parms.nb_antennas_tx; aa++) {
+        tx_lev += signal_energy(&eNB->common_vars.txdata[eNB_id][aa]
+                                [subframe*eNB->frame_parms.samples_per_tti],
+                                eNB->frame_parms.samples_per_tti);
       }
 
       tx_lev_dB = (unsigned int) dB_fixed(tx_lev);
 
       if (n_frames==1) {
         printf("tx_lev = %d (%d dB)\n",tx_lev,tx_lev_dB);
-        //    write_output("txsig0.m","txs0", &PHY_vars_eNB->common_vars.txdata[0][0][subframe* PHY_vars_eNB->frame_parms.samples_per_tti],
+        //    write_output("txsig0.m","txs0", &eNB->common_vars.txdata[0][0][subframe* eNB->frame_parms.samples_per_tti],
 
-        //     PHY_vars_eNB->frame_parms.samples_per_tti,1,1);
+        //     eNB->frame_parms.samples_per_tti,1,1);
       }
 
+
       for (i=0; i<2*frame_parms->samples_per_tti; i++) {
-        for (aa=0; aa<PHY_vars_eNB->frame_parms.nb_antennas_tx; aa++) {
-          s_re[aa][i] = ((double)(((short *)PHY_vars_eNB->common_vars.txdata[0][aa]))[(2*subframe*PHY_vars_UE->frame_parms.samples_per_tti) + (i<<1)]);
-          s_im[aa][i] = ((double)(((short *)PHY_vars_eNB->common_vars.txdata[0][aa]))[(2*subframe*PHY_vars_UE->frame_parms.samples_per_tti) +(i<<1)+1]);
+        for (aa=0; aa<eNB->frame_parms.nb_antennas_tx; aa++) {
+          s_re[aa][i] = ((double)(((short *)eNB->common_vars.txdata[0][aa]))[(2*subframe*UE->frame_parms.samples_per_tti) + (i<<1)]);
+          s_im[aa][i] = ((double)(((short *)eNB->common_vars.txdata[0][aa]))[(2*subframe*UE->frame_parms.samples_per_tti) +(i<<1)+1]);
         }
       }
 
@@ -440,39 +423,38 @@ int main(int argc, char **argv)
                         2*frame_parms->samples_per_tti,hold_channel);
 
       //AWGN
-      sigma2_dB = 10*log10((double)tx_lev) +10*log10((double)PHY_vars_eNB->frame_parms.ofdm_symbol_size/(NB_RB*12)) - SNR;
+      sigma2_dB = 10*log10((double)tx_lev) +10*log10((double)eNB->frame_parms.ofdm_symbol_size/(NB_RB*12)) - SNR;
       sigma2 = pow(10,sigma2_dB/10);
 
       if (n_frames==1)
         printf("Sigma2 %f (sigma2_dB %f)\n",sigma2,sigma2_dB);
 
       for (i=0; i<2*frame_parms->samples_per_tti; i++) {
-        for (aa=0; aa<PHY_vars_eNB->frame_parms.nb_antennas_rx; aa++) {
+        for (aa=0; aa<eNB->frame_parms.nb_antennas_rx; aa++) {
           //printf("s_re[0][%d]=> %f , r_re[0][%d]=> %f\n",i,s_re[aa][i],i,r_re[aa][i]);
-          ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->frame_parms.samples_per_tti)+2*i] =
+          ((short*) UE->common_vars.rxdata[aa])[(2*subframe*UE->frame_parms.samples_per_tti)+2*i] =
             (short) (r_re[aa][i] + sqrt(sigma2/2)*gaussdouble(0.0,1.0));
-          ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->frame_parms.samples_per_tti)+2*i+1] =
+          ((short*) UE->common_vars.rxdata[aa])[(2*subframe*UE->frame_parms.samples_per_tti)+2*i+1] =
             (short) (r_im[aa][i] + (iqim*r_re[aa][i]) + sqrt(sigma2/2)*gaussdouble(0.0,1.0));
         }
       }
 
       for (l=2; l<12; l++) {
 
-        slot_fep_mbsfn(PHY_vars_UE,
+        slot_fep_mbsfn(UE,
                        l,
                        subframe%10,
                        0,
                        0);
-  
-	if (PHY_vars_UE->perfect_ce==1) {
+	if (UE->perfect_ce==1) {
 	  // fill in perfect channel estimates
-	  freq_channel(eNB2UE,PHY_vars_UE->frame_parms.N_RB_DL,12*PHY_vars_UE->frame_parms.N_RB_DL + 1);
+	  freq_channel(eNB2UE,UE->frame_parms.N_RB_DL,12*UE->frame_parms.N_RB_DL + 1);
 	  for(k=0; k<NUMBER_OF_eNB_MAX; k++) {
 	    for(aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
 	      for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
 		for (i=0; i<frame_parms->N_RB_DL*12; i++) {
-		  ((int16_t *) PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[k][(aa<<1)+aarx])[2*i+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(eNB2UE->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
-		  ((int16_t *) PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[k][(aa<<1)+aarx])[2*i+1+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(eNB2UE->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
+		  ((int16_t *) UE->common_vars.dl_ch_estimates[k][(aa<<1)+aarx])[2*i+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(eNB2UE->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
+		  ((int16_t *) UE->common_vars.dl_ch_estimates[k][(aa<<1)+aarx])[2*i+1+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(eNB2UE->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
 		}
 	      }
 	    }
@@ -481,52 +463,52 @@ int main(int argc, char **argv)
 
 	if (l==6)
           for (l2=2;l2<7;l2++)
-	    rx_pmch(PHY_vars_UE,
+	    rx_pmch(UE,
 		    0,
 		    subframe%10,
 		    l2);
 	if (l==6)
           for (l2=2;l2<7;l2++)
-	    rx_pmch(PHY_vars_UE,
+	    rx_pmch(UE,
 		    0,
 		    subframe%10,
 		    l2);
 	if (l==11)
           for (l2=7;l2<12;l2++)
-	    rx_pmch(PHY_vars_UE,
+	    rx_pmch(UE,
 		    0,
 		    subframe%10,
 		    l2);
       }
 
-      PHY_vars_UE->dlsch_MCH[0]->harq_processes[0]->G = get_G(&PHY_vars_UE->frame_parms,
-          PHY_vars_UE->dlsch_MCH[0]->harq_processes[0]->nb_rb,
-          PHY_vars_UE->dlsch_MCH[0]->harq_processes[0]->rb_alloc_even,
-          get_Qm(PHY_vars_UE->dlsch_MCH[0]->harq_processes[0]->mcs),
+      UE->dlsch_MCH[0]->harq_processes[0]->G = get_G(&UE->frame_parms,
+          UE->dlsch_MCH[0]->harq_processes[0]->nb_rb,
+          UE->dlsch_MCH[0]->harq_processes[0]->rb_alloc_even,
+          get_Qm(UE->dlsch_MCH[0]->harq_processes[0]->mcs),
           1,2,
-          PHY_vars_UE->frame_tx,subframe);
-      PHY_vars_UE->dlsch_MCH[0]->harq_processes[0]->Qm = get_Qm(PHY_vars_UE->dlsch_MCH[0]->harq_processes[0]->mcs);
-
-      dlsch_unscrambling(&PHY_vars_UE->frame_parms,1,PHY_vars_UE->dlsch_MCH[0],
-                         PHY_vars_UE->dlsch_MCH[0]->harq_processes[0]->G,
-                         PHY_vars_UE->lte_ue_pdsch_vars_MCH[0]->llr[0],0,subframe<<1);
-
-      ret = dlsch_decoding(PHY_vars_UE,
-                           PHY_vars_UE->lte_ue_pdsch_vars_MCH[0]->llr[0],
-                           &PHY_vars_UE->frame_parms,
-                           PHY_vars_UE->dlsch_MCH[0],
-                           PHY_vars_UE->dlsch_MCH[0]->harq_processes[0],
+          UE->proc.proc_rxtx[0].frame_tx,subframe);
+      UE->dlsch_MCH[0]->harq_processes[0]->Qm = get_Qm(UE->dlsch_MCH[0]->harq_processes[0]->mcs);
+
+      dlsch_unscrambling(&UE->frame_parms,1,UE->dlsch_MCH[0],
+                         UE->dlsch_MCH[0]->harq_processes[0]->G,
+                         UE->pdsch_vars_MCH[0]->llr[0],0,subframe<<1);
+
+      ret = dlsch_decoding(UE,
+                           UE->pdsch_vars_MCH[0]->llr[0],
+                           &UE->frame_parms,
+                           UE->dlsch_MCH[0],
+                           UE->dlsch_MCH[0]->harq_processes[0],
                            subframe,
                            0,0,0);
 
       if (n_frames==1)
         printf("MCH decoding returns %d\n",ret);
 
-      if (ret == (1+PHY_vars_UE->dlsch_MCH[0]->max_turbo_iterations))
+      if (ret == (1+UE->dlsch_MCH[0]->max_turbo_iterations))
         errs[0]++;
 
-      PHY_vars_UE->frame_tx++;
-      PHY_vars_eNB->proc[sched_subframe].frame_tx++;
+      UE->proc.proc_rxtx[0].frame_tx++;
+      eNB->proc.proc_rxtx[0].frame_tx++;
     }
 
     printf("errors %d/%d (Pe %e)\n",errs[round],trials,(double)errs[round]/trials);
@@ -550,34 +532,18 @@ int main(int argc, char **argv)
 
 
   if (n_frames==1) {
-    printf("Dumping PMCH files ( G %d)\n",PHY_vars_UE->dlsch_MCH[0]->harq_processes[0]->G);
-    dump_mch(PHY_vars_UE,0,
-             PHY_vars_UE->dlsch_MCH[0]->harq_processes[0]->G,
+    printf("Dumping PMCH files ( G %d)\n",UE->dlsch_MCH[0]->harq_processes[0]->G);
+    dump_mch(UE,0,
+             UE->dlsch_MCH[0]->harq_processes[0]->G,
              subframe);
   }
 
   printf("Freeing dlsch structures\n");
-  free_eNB_dlsch(PHY_vars_eNB->dlsch_MCH);
-  free_ue_dlsch(PHY_vars_UE->dlsch_MCH[0]);
+  free_eNB_dlsch(eNB->dlsch_MCH);
+  free_ue_dlsch(UE->dlsch_MCH[0]);
 
   fclose(fd);
 
-  printf("Freeing channel I/O\n");
-
-  for (i=0; i<2; i++) {
-    free(s_re[i]);
-    free(s_im[i]);
-    free(r_re[i]);
-    free(r_im[i]);
-  }
-
-  free(s_re);
-  free(s_im);
-  free(r_re);
-  free(r_im);
-
-  //  lte_sync_time_free();
-
   return(0);
 }
 
-- 
GitLab