From f563135b25d06b669b48ed879c9f30d79fc34f79 Mon Sep 17 00:00:00 2001
From: Florian Kaltenberger <florian.kaltenberger@eurecom.fr>
Date: Thu, 29 Jan 2015 12:52:35 +0000
Subject: [PATCH] removing unused lte-enb.c and lte-softmodem-usrp.c

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@6447 818b1a75-f10b-46b9-bf7c-635c3b92a50f
---
 targets/RT/USER/lte-enb.c            | 1216 -----------------------
 targets/RT/USER/lte-softmodem-usrp.c | 1354 --------------------------
 2 files changed, 2570 deletions(-)
 delete mode 100644 targets/RT/USER/lte-enb.c
 delete mode 100644 targets/RT/USER/lte-softmodem-usrp.c

diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c
deleted file mode 100644
index cab0d54be35..00000000000
--- a/targets/RT/USER/lte-enb.c
+++ /dev/null
@@ -1,1216 +0,0 @@
-/*******************************************************************************
-    OpenAirInterface 
-    Copyright(c) 1999 - 2014 Eurecom
-
-    OpenAirInterface is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-
-    OpenAirInterface is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenAirInterface.The full GNU General Public License is 
-    included in this distribution in the file called "COPYING". If not, 
-    see <http://www.gnu.org/licenses/>.
-
-   Contact Information
-   OpenAirInterface Admin: openair_admin@eurecom.fr
-   OpenAirInterface Tech : openair_tech@eurecom.fr
-   OpenAirInterface Dev  : openair4g-devel@eurecom.fr
-  
-   Address      : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
-
- *******************************************************************************/
-
-/*! \file lte-softmodem.c
- * \brief main program to control HW and scheduling
- * \author R. Knopp, F. Kaltenberger
- * \date 2012
- * \version 0.1
- * \company Eurecom
- * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr
- * \note
- * \warning
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sched.h>
-#include <signal.h>
-#include <execinfo.h>
-#include <getopt.h>
-
-#include "rt_wrapper.h"
-#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
-
-#include "assertions.h"
-
-#ifdef EMOS
-#include <gps.h>
-#endif
-
-#include "PHY/types.h"
-#include "PHY/defs.h"
-#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
-#undef FRAME_LENGTH_COMPLEX_SAMPLES //there are two conflicting definitions, so we better make sure we don't use it at all
-
-#include "openair0_lib.h"
-#undef FRAME_LENGTH_COMPLEX_SAMPLES //there are two conflicting definitions, so we better make sure we don't use it at all
-
-#include "PHY/vars.h"
-#include "MAC_INTERFACE/vars.h"
-#include "SCHED/vars.h"
-#include "LAYER2/MAC/vars.h"
-
-#include "../../SIMU/USER/init_lte.h"
-
-#ifdef EMOS
-#include "SCHED/phy_procedures_emos.h"
-#endif
-
-#ifdef OPENAIR2
-#include "LAYER2/MAC/defs.h"
-#include "LAYER2/MAC/vars.h"
-#ifndef CELLULAR
-#include "RRC/LITE/vars.h"
-#endif
-#include "PHY_INTERFACE/vars.h"
-#endif
-
-#include "UTIL/LOG/log_extern.h"
-#include "UTIL/OTG/otg.h"
-#include "UTIL/OTG/otg_vars.h"
-#include "UTIL/MATH/oml.h"
-#include "UTIL/LOG/vcd_signal_dumper.h"
-#include "enb_config.h"
-
-#if defined(ENABLE_ITTI)
-# include "intertask_interface_init.h"
-# include "create_tasks.h"
-# if defined(ENABLE_USE_MME)
-#   include "s1ap_eNB.h"
-# endif
-#endif
-
-#ifdef XFORMS
-#include "PHY/TOOLS/lte_phy_scope.h"
-#include "stats.h"
-// current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0)
-// at eNB 0, an UL scope for every UE
-FD_lte_phy_scope_ue  *form_ue[NUMBER_OF_UE_MAX];
-FD_lte_phy_scope_enb *form_enb[NUMBER_OF_UE_MAX];
-FD_stats_form *form_stats=NULL;
-char title[255];
-int UE_id;
-unsigned char scope_enb_num_ue = 1;
-#endif //XFORMS
-unsigned char UE_flag=0;
-
-char *mme_ip;
-#define FRAME_PERIOD 100000000ULL
-#define DAQ_PERIOD 66667ULL
-
-#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
-
-#ifdef RTAI
-static SEM *mutex;
-//static CND *cond;
-
-static int thread0;
-static int thread1;
-//static int sync_thread;
-#else
-pthread_t thread0;
-pthread_t thread1;
-pthread_attr_t attr_dlsch_threads;
-struct sched_param sched_param_dlsch;
-#endif
-
-pthread_t  thread2;
-pthread_t  thread3;
-/*
-  static int instance_cnt=-1; //0 means worker is busy, -1 means its free
-  int instance_cnt_ptr_kern,*instance_cnt_ptr_user;
-  int pci_interface_ptr_kern;
-*/
-//extern unsigned int bigphys_top;
-//extern unsigned int mem_base;
-
-int card = 0;
-exmimo_config_t *p_exmimo_config;
-exmimo_id_t     *p_exmimo_id;
-volatile unsigned int *DAQ_MBOX;
-
-#if defined(ENABLE_ITTI)
-volatile int start_eNB = 0;
-#endif
-volatile int oai_exit = 0;
-int oai_flag = 0;
-
-//int time_offset[4] = {-138,-138,-138,-138};
-//int time_offset[4] = {-145,-145,-145,-145};
-int time_offset[4] = {0,0,0,0};
-
-uint8_t eNB_id=0;
-
-uint32_t carrier_freq_fdd[4]= {2680e6,0,0,0};
-uint32_t carrier_freq_tdd[4]= {2590e6-4000,0,0,0};
-uint32_t carrier_freq[4];
-static char *conf_config_file_name = NULL;
-
-struct timing_info_t {
-  //unsigned int frame, hw_slot, last_slot, next_slot;
-  RTIME time_min, time_max, time_avg, time_last, time_now;
-  //unsigned int mbox0, mbox1, mbox2, mbox_target;
-  unsigned int n_samples;
-} timing_info;
-
-runmode_t mode;
-int rx_input_level_dBm;
-#ifdef XFORMS
-extern int otg_enabled;
-#else
-int otg_enabled;
-#endif
-int number_of_cards = 1;
-
-//int mbox_bounds[20] = {8,16,24,30,38,46,54,60,68,76,84,90,98,106,114,120,128,136,144, 0}; ///boundaries of slots in terms ob mbox counter rounded up to even numbers
-//int mbox_bounds[10] = {15, 30, 45, 60, 75, 90, 105, 120, 135, 0}; // mbox boundaries of subframes
-int mbox_bounds[10] = {14, 28, 44, 58, 74, 88, 104, 118, 134, 148}; // mbox boundaries of subframes
-//int mbox_bounds[10] = {16, 30, 46, 60, 76, 90, 106, 120, 136, 0}; ///boundaries of slots in terms ob mbox counter rounded up to even numbers
-
-int init_dlsch_threads(void);
-void cleanup_dlsch_threads(void);
-int32_t init_rx_pdsch_thread(void);
-void cleanup_rx_pdsch_thread(void);
-int init_ulsch_threads(void);
-void cleanup_ulsch_threads(void);
-
-LTE_DL_FRAME_PARMS *frame_parms;
-
-void setup_eNB_buffers(PHY_VARS_eNB *phy_vars_eNB,
-                       LTE_DL_FRAME_PARMS *frame_parms, int carrier);
-
-void signal_handler(int sig)
-{
-  void *array[10];
-  size_t size;
-
-  if (sig==SIGSEGV) {
-    // get void*'s for all entries on the stack
-    size = backtrace(array, 10);
-
-    // print out all the frames to stderr
-    fprintf(stderr, "Error: signal %d:\n", sig);
-    backtrace_symbols_fd(array, size, 2);
-    exit(-1);
-  } else {
-    oai_exit=1;
-  }
-}
-
-void exit_fun(const char *s)
-{
-  if (s != NULL) {
-    printf("Exiting: %s\n",s);
-  }
-
-  oai_exit=1;
-
-#if defined(ENABLE_ITTI)
-  itti_terminate_tasks (TASK_UNKNOWN);
-#endif
-
-  //rt_sleep_ns(FRAME_PERIOD);
-
-  //exit (-1);
-}
-
-#ifdef XFORMS
-void *scope_thread(void *arg)
-{
-  s16 prach_corr[1024], i;
-  char stats_buffer[16384];
-  //FILE *UE_stats, *eNB_stats;
-  int len=0;
-
-  /*
-    if (UE_flag==1)
-    UE_stats  = fopen("UE_stats.txt", "w");
-    else
-    eNB_stats = fopen("eNB_stats.txt", "w");
-  */
-
-  while (!oai_exit) {
-    len = dump_eNB_stats (PHY_vars_eNB_g[0], stats_buffer, 0);
-    fl_set_object_label(form_stats->stats_text, stats_buffer);
-    //rewind (eNB_stats);
-    //fwrite (stats_buffer, 1, len, eNB_stats);
-    for(UE_id=0; UE_id<scope_enb_num_ue; UE_id++) {
-      phy_scope_eNB(form_enb[UE_id],
-                    PHY_vars_eNB_g[eNB_id],
-                    UE_id);
-
-    }
-    //printf("doing forms\n");
-    usleep(100000); // 100 ms
-  }
-
-  //fclose (UE_stats);
-  //fclose (eNB_stats);
-
-  pthread_exit((void *)arg);
-}
-#endif
-
-void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint16_t next_slot,
-                 LTE_DL_FRAME_PARMS *frame_parms)
-{
-  int aa, slot_offset, slot_offset_F;
-
-  slot_offset_F = (next_slot)*(frame_parms->ofdm_symbol_size)*((
-                    frame_parms->Ncp == EXTENDED) ? 6 : 7);
-  slot_offset   = (next_slot)*(frame_parms->samples_per_tti>>1);
-
-  for (aa = 0; aa < frame_parms->nb_antennas_tx; aa++) {
-    if (frame_parms->Ncp == EXTENDED) {
-      PHY_ofdm_mod(&txdataF[aa][slot_offset_F],
-                   &txdata[aa][slot_offset],
-                   frame_parms->log2_symbol_size,
-                   6,
-                   frame_parms->nb_prefix_samples,
-                   frame_parms->twiddle_fft,
-                   frame_parms->rev,
-                   CYCLIC_PREFIX);
-    } else {
-      normal_prefix_mod(&txdataF[aa][slot_offset_F],
-                        &txdata[aa][slot_offset],
-                        7,
-                        frame_parms);
-    }
-  }
-}
-
-int dummy_tx_buffer[3840*4] __attribute__((aligned(16)));
-
-#if defined(ENABLE_ITTI)
-void *l2l1_task(void *arg)
-{
-  MessageDef   *message_p = NULL;
-  int           result;
-
-  itti_set_task_real_time(TASK_L2L1);
-  itti_mark_task_ready(TASK_L2L1);
-
-  if (UE_flag == 0) {
-    /* Wait for the initialize message */
-    do {
-      if (message_p != NULL) {
-        result = itti_free (ITTI_MSG_ORIGIN_ID(message_p), message_p);
-        AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
-      }
-      itti_receive_msg (TASK_L2L1, &message_p);
-
-      switch (ITTI_MSG_ID(message_p)) {
-        case INITIALIZE_MESSAGE:
-          /* Start eNB thread */
-          start_eNB = 1;
-          break;
-
-        case TERMINATE_MESSAGE:
-          oai_exit=1;
-          itti_exit_task ();
-          break;
-
-        default:
-          LOG_E(EMU, "Received unexpected message %s\n", ITTI_MSG_NAME(message_p));
-          break;
-      }
-    } while (ITTI_MSG_ID(message_p) != INITIALIZE_MESSAGE);
-    result = itti_free (ITTI_MSG_ORIGIN_ID(message_p), message_p);
-    AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
-  }
-
-  do {
-    // Wait for a message
-    itti_receive_msg (TASK_L2L1, &message_p);
-
-    switch (ITTI_MSG_ID(message_p)) {
-      case TERMINATE_MESSAGE:
-        oai_exit=1;
-        itti_exit_task ();
-        break;
-
-      case MESSAGE_TEST:
-        LOG_I(EMU, "Received %s\n", ITTI_MSG_NAME(message_p));
-        break;
-
-      default:
-        LOG_E(EMU, "Received unexpected message %s\n", ITTI_MSG_NAME(message_p));
-        break;
-    }
-
-    result = itti_free (ITTI_MSG_ORIGIN_ID(message_p), message_p);
-    AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
-  } while(1);
-
-  return NULL;
-}
-#endif
-
-/* This is the main eNB thread. It gets woken up by the kernel driver using the RTAI message mechanism (rt_send and rt_receive). */
-static void *eNB_thread(void *arg)
-{
-#ifdef RTAI
-  RT_TASK *task;
-  SEM *sem;
-#endif
-  unsigned char last_slot, next_slot;
-  int subframe = 0, hw_subframe;
-  int frame=0;
-  int skip_first=1;
-  unsigned int msg1;
-  unsigned int aa,slot_offset, slot_offset_F;
-  int diff;
-  int delay_cnt;
-  RTIME time_in, time_diff;
-  RTIME period;
-  int mbox_target=0,mbox_current=0;
-  int i,ret;
-  int tx_offset;
-
-
-#if defined(ENABLE_ITTI)
-  /* Wait for eNB application initialization to be complete (eNB registration to MME) */
-  {
-    char *indicator[] = {".  ", ".. ", "...", " ..", "  .", "   "};
-    int i = 0;
-
-    while ((!oai_exit) && (start_eNB == 0)) {
-      LOG_D(HW,"Waiting for eNB application to be ready %s\r", indicator[i]);
-      i = (i + 1) % (sizeof(indicator) / sizeof(indicator[0]));
-      usleep(200000);
-    }
-    LOG_D(HW,"\n");
-  }
-#endif
-
-#ifdef RTAI
-  task = rt_task_init_schmod(nam2num("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF);
-  rt_receive(0, (unsigned long *)((void *)&sem));
-  LOG_D(HW,"Started eNB thread (id %p)\n",task);
-#endif
-
-#ifdef HARD_RT
-  rt_make_hard_real_time();
-#endif
-
-  mlockall(MCL_CURRENT | MCL_FUTURE);
-
-  timing_info.time_min = 100000000ULL;
-  timing_info.time_max = 0;
-  timing_info.time_avg = 0;
-  timing_info.n_samples = 0;
-
-
-  // sync to HW subframe == 0
-  mbox_current = ((volatile unsigned int *)DAQ_MBOX)[0];
-  rt_sleep_ns((165-mbox_current)*DAQ_PERIOD);
-
-  time_in = rt_get_time_ns();
-
-  while (!oai_exit) {
-    //this is the mbox counter where we should be
-    mbox_target = mbox_bounds[subframe];
-    //this is the mbox counter where we are
-    mbox_current = ((volatile unsigned int *)DAQ_MBOX)[0];
-    //this is the time we need to sleep in order to synchronize with the hw (in multiples of DAQ_PERIOD)
-    if ((mbox_current>=135) && (mbox_target<15)) { //handle the frame wrap-arround
-      diff = 150-mbox_current+mbox_target;
-    } else if ((mbox_current<15) && (mbox_target>=135)) {
-      diff = -150+mbox_target-mbox_current;
-    } else {
-      diff = mbox_target - mbox_current;
-    }
-
-    if (diff < -15) {
-      LOG_D(HW,
-            "Time %.3f: Frame %d, missed subframe, proceeding with next one (subframe %d, hw_subframe %d, mbox_currend %d, mbox_target %d,diff %d) processing time %.3f\n",
-            (float)(rt_get_time_ns()-time_in)/1e6,
-            frame, subframe, hw_subframe, mbox_current, mbox_target, diff,
-            (float)(timing_info.time_now-timing_info.time_last)/1e6);
-
-      subframe++;
-      if (frame>0) {
-        oai_exit=1;
-      }
-      if (subframe==10) {
-        subframe=0;
-        frame++;
-      }
-      continue;
-    }
-    if (diff > 15) {
-      LOG_D(HW,
-            "Time %.3f: Frame %d, skipped subframe, waiting for hw to catch up (subframe %d, hw_subframe %d, mbox_current %d, mbox_target %d, diff %d), processing time %.3f\n",
-            (float)(rt_get_time_ns()-time_in)/1e6,
-            frame, subframe, hw_subframe, mbox_current, mbox_target, diff,
-            (float)(timing_info.time_now-timing_info.time_last)/1e6);
-      //exit(-1);
-    }
-
-    delay_cnt = 0;
-    vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLES_DAQ_MBOX,
-                                            *((volatile unsigned int *) openair0_exmimo_pci[card].rxcnt_ptr[0]));
-    vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLES_DIFF, diff);
-
-    while ((diff>0) && (!oai_exit)) {
-      time_diff = rt_get_time_ns() - time_in;
-      ret = rt_sleep_ns(diff*DAQ_PERIOD);
-      if (ret) {
-        LOG_D(HW,"eNB Frame %d, time %llu: rt_sleep_ns returned %d\n",frame, time_in);
-      }
-
-      delay_cnt++;
-      if (delay_cnt == 10) {
-        oai_exit = 1;
-        LOG_D(HW,"eNB Frame %d: HW stopped ... \n",frame);
-      }
-      mbox_current = ((volatile unsigned int *)DAQ_MBOX)[0];
-      if ((mbox_current>=135) && (mbox_target<15)) { //handle the frame wrap-arround
-        diff = 150-mbox_current+mbox_target;
-      } else if ((mbox_current<15) && (mbox_target>=135)) {
-        diff = -150+mbox_target-mbox_current;
-      } else {
-        diff = mbox_target - mbox_current;
-      }
-    }
-
-    hw_subframe = ((((volatile unsigned int *)DAQ_MBOX)[0]+135)%150)/15;
-    LOG_D(HW,
-          "Time: %.3f: Frame %d, subframe %d, hw_subframe %d (mbox %d) processing time %0.3f\n",
-          (float)(rt_get_time_ns()-time_in)/1e6,
-          frame,subframe,hw_subframe,((volatile unsigned int *)DAQ_MBOX)[0],
-          (float)(timing_info.time_now-timing_info.time_last)/1e6);
-
-    last_slot = (subframe<<1)+1;
-    if (last_slot <0) {
-      last_slot+=20;
-    }
-    next_slot = ((subframe<<1)+4)%LTE_SLOTS_PER_FRAME;
-
-    if ((skip_first == 0) || (frame>5))
-    {
-      skip_first = 0;
-      timing_info.time_last = rt_get_time_ns();
-
-      //msg("subframe %d, last_slot %d,next_slot %d\n", subframe,last_slot,next_slot);
-      vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLES_DAQ_MBOX,
-                                              *((volatile unsigned int *) openair0_exmimo_pci[card].rxcnt_ptr[0]));
-      vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLES_DIFF, diff);
-
-      phy_procedures_eNB_lte (last_slot, next_slot, PHY_vars_eNB_g[0], 0,0,NULL);
-      vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLES_DAQ_MBOX,
-                                              *((volatile unsigned int *) openair0_exmimo_pci[card].rxcnt_ptr[0]));
-#ifndef IFFT_FPGA
-
-      if ((subframe_select(&PHY_vars_eNB_g[0]->lte_frame_parms,next_slot>>1)==SF_DL)||
-          ((subframe_select(&PHY_vars_eNB_g[0]->lte_frame_parms,next_slot>>1)==SF_S)
-           &&((next_slot&1)==0))) {
-        //LOG_D(HW,"Frame %d: Generating slot %d\n",frame,next_slot);
-        /*
-        do_OFDM_mod(PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdataF[0],
-        PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0],
-        next_slot,
-        &PHY_vars_eNB_g[0]->lte_frame_parms);
-
-        do_OFDM_mod(PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdataF[0],
-        PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0],
-        next_slot+1,
-        &PHY_vars_eNB_g[0]->lte_frame_parms);
-        */
-
-        vcd_signal_dumper_dump_function_by_name(
-          VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_SFGEN,1);
-        slot_offset_F = (next_slot)*
-                        (PHY_vars_eNB_g[0]->lte_frame_parms.ofdm_symbol_size)*7;
-        slot_offset = (next_slot)*
-                      (PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti>>1);
-
-        normal_prefix_mod(
-          &PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdataF[0][0][slot_offset_F],
-          dummy_tx_buffer,
-          7,
-          &(PHY_vars_eNB_g[0]->lte_frame_parms));
-        for (i = 0; i < PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti/2; i++) {
-          tx_offset = slot_offset + time_offset[0] + i;
-          ((short *)&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][0][tx_offset])[0]
-            = ((short *)dummy_tx_buffer)[2*i]<<4;
-          ((short *)&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][0][tx_offset])[1]
-            = ((short *)dummy_tx_buffer)[2*i+1]<<4;
-        }
-
-        slot_offset_F = (next_slot+1)*
-                        (PHY_vars_eNB_g[0]->lte_frame_parms.ofdm_symbol_size)*7;
-        slot_offset = (next_slot+1)*
-                      (PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti>>1);
-
-        normal_prefix_mod(
-          &PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdataF[0][0][slot_offset_F],
-          dummy_tx_buffer,
-          7,
-          &(PHY_vars_eNB_g[0]->lte_frame_parms));
-        for (i = 0; i < PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti/2; i++) {
-          tx_offset = slot_offset + i;
-          ((short *)&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][0][tx_offset])[0]
-            = ((short *)dummy_tx_buffer)[2*i]<<4;
-          ((short *)&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][0][tx_offset])[1]
-            = ((short *)dummy_tx_buffer)[2*i+1]<<4;
-        }
-      }
-      vcd_signal_dumper_dump_function_by_name(
-        VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_SFGEN,0);
-      timing_info.time_now = rt_get_time_ns();
-#endif //IFFT_FPGA
-      /*
-        if (frame%100==0)
-        LOG_D(HW,"hw_slot %d (after): DAQ_MBOX %d\n",hw_slot,DAQ_MBOX[0]);
-      */
-    }
-
-    /*
-    if ((slot%2000)<10)
-    LOG_D(HW,"fun0: doing very hard work\n");
-    */
-
-
-    if (oai_flag == 2) {
-      //dump_ulsch(PHY_vars_eNB_g[0], subframe, 0);
-      //exit(-1);
-      oai_exit=1;
-      exit_fun("[HW][eNB] HW stopped");
-    }
-
-    if (oai_flag == 1) {
-      oai_flag = 2;
-    }
-
-    subframe++;
-    if (subframe==10) {
-      subframe=0;
-      frame++;
-    }
-    if(frame == 1024) {
-      frame = 0;
-      time_in = rt_get_time_ns();
-    }
-#if defined(ENABLE_ITTI)
-    itti_update_lte_time(frame, subframe * 2);
-#endif
-  }
-
-  LOG_D(HW,"eNB_thread: finished, ran %d times.\n",frame);
-
-#ifdef HARD_RT
-  rt_make_soft_real_time();
-#endif
-
-  // clean task
-#ifdef RTAI
-  rt_sem_signal(mutex);
-  rt_task_delete(task);
-#endif
-  LOG_D(HW,"Task deleted. returning\n");
-  return 0;
-}
-
-int main(int argc, char **argv)
-{
-  const Enb_properties_array_t *enb_properties;
-#ifdef RTAI
-  RT_TASK *task;
-#endif
-  int i,j,aa;
-  void *status;
-
-  /*
-    uint32_t rf_mode_max[4]     = {55759,55759,55759,55759};
-    uint32_t rf_mode_med[4]     = {39375,39375,39375,39375};
-    uint32_t rf_mode_byp[4]     = {22991,22991,22991,22991};
-  */
-  uint32_t my_rf_mode = RXEN + TXEN + TXLPFNORM + TXLPFEN + TXLPF25 + RXLPFNORM +
-                   RXLPFEN + RXLPF25 + LNA1ON +LNAMax + RFBBNORM + DMAMODE_RX + DMAMODE_TX;
-  uint32_t rf_mode_base = TXLPFNORM + TXLPFEN + TXLPF25 + RXLPFNORM + RXLPFEN +
-                     RXLPF25 + LNA1ON + /*LNAMax Antennas*/ LNAByp + RFBBNORM;
-  uint32_t rf_mode[4]     = {my_rf_mode,0,0,0};
-  uint32_t rf_local[4]    = {8255000,8255000,8255000,8255000}; // UE zepto
-  //{8254617, 8254617, 8254617, 8254617}; //eNB khalifa
-  //{8255067,8254810,8257340,8257340}; // eNB PETRONAS
-
-  uint32_t rf_vcocal[4]   = {910,910,910,910};
-  uint32_t rf_vcocal_850[4] = {2015, 2015, 2015, 2015};
-  uint32_t rf_rxdc[4]     = {32896,32896,32896,32896};
-  // Gain for antennas connection
-  //uint32_t rxgain[4]      = {25,20,20,20};
-  //uint32_t txgain[4]      = {30,25,25,25};
-
-  // Gain for Cable connection
-  uint32_t rxgain[4]      = {20,20,20,20};
-  uint32_t txgain[4]      = {25,25,25,25};
-
-
-  uint8_t frame_type = FDD;
-  uint8_t tdd_config = 3;
-  uint8_t tdd_config_S = 0;
-  uint8_t extended_prefix_flag = 0;
-  uint16_t Nid_cell = 0;
-  uint8_t N_RB_DL = 25;
-  uint8_t  cooperation_flag = 0;
-  uint8_t transmission_mode = 1;
-  uint8_t abstraction_flag = 0;
-  uint8_t nb_antennas_rx = 1;
-
-  uint8_t beta_ACK=0,beta_RI=0,beta_CQI=2;
-
-  int c;
-  char do_forms=0;
-  unsigned int fd;
-
-  int amp;
-  unsigned int rxg_max[4]= {133,133,133,133}, rxg_med[4]= {127,127,127,127}, rxg_byp[4]= {120,120,120,120};
-  int tx_max_power=0;
-
-  int ret, ant;
-
-  int error_code;
-  char *itti_dump_file = NULL;
-
-  mode = normal_txrx;
-
-  mme_ip = "146.208.175.6";
-
-  while ((c = getopt(argc, argv, "dC:K:O:T:N:R:Vi;")) != -1) {
-    switch (c) {
-      case 'd':
-        do_forms=1;
-        printf("Starting XFORMS ...\n");
-        break;
-      case 'C':
-        carrier_freq[0] = atoi(optarg);
-        carrier_freq[1] = atoi(optarg);
-        carrier_freq[2] = atoi(optarg);
-        carrier_freq[3] = atoi(optarg);
-        break;
-      case 'T':
-        frame_type = TDD; // default FDD
-        tdd_config = atoi(optarg);
-        break;
-      case 'K':
-#if defined(ENABLE_ITTI)
-        itti_dump_file = strdup(optarg);
-#else
-        printf("-K option is disabled when ENABLE_ITTI is not defined\n");
-#endif
-        break;
-      case 'O':
-        conf_config_file_name = optarg;
-        break;
-      case 'R':
-        N_RB_DL = atoi(optarg);
-        if ((N_RB_DL != 6) && (N_RB_DL != 15) && (N_RB_DL != 25) &&
-            (N_RB_DL != 50) && (N_RB_DL != 75) && (N_RB_DL != 100)) {
-          printf("Illegal N_RB_DL %d (should be one of 6,15,25,50,75,100)\n", N_RB_DL);
-          exit(-1);
-        }
-        break;
-      case 'i':
-        mme_ip = optarg;
-        break;
-      case 'V':
-        ouput_vcd = 1;
-        break;
-      default:
-        break;
-    }
-  }
-
-  NB_eNB_INST=1;
-  NB_INST=1;
-
-  if ((UE_flag == 0) && (conf_config_file_name != NULL)) {
-    int i;
-
-    /* Read eNB configuration file */
-    enb_properties = enb_config_init(conf_config_file_name);
-
-    AssertFatal (NB_eNB_INST <= enb_properties->number,
-                 "Number of eNB is greater than eNB defined in configuration file %s (%d/%d)!",
-                 conf_config_file_name, NB_eNB_INST, enb_properties->number);
-
-    /* Update some simulation parameters */
-    frame_type =        enb_properties->properties[0]->frame_type;
-    for (i = 0 ; i < (sizeof(carrier_freq) / sizeof (carrier_freq[0])); i++) {
-      carrier_freq[i] = enb_properties->properties[0]->downlink_frequency;
-    }
-  }
-
-  set_taus_seed (0);
-
-  // initialize the log (see log.h for details)
-  logInit();
-
-  if (ouput_vcd) {
-    vcd_signal_dumper_init("/tmp/openair_dump_eNB.vcd");
-  }
-
-#if defined(ENABLE_ITTI)
-  log_set_instance_type (LOG_INSTANCE_ENB);
-
-  itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info,
-            messages_definition_xml, itti_dump_file);
-#endif
-
-#ifdef NAS_NETLINK
-  netlink_init();
-#endif
-
-#if !defined(ENABLE_ITTI)
-  // to make a graceful exit when ctrl-c is pressed
-  signal(SIGSEGV, signal_handler);
-  signal(SIGINT, signal_handler);
-#endif
-
-#ifndef RTAI
-  check_clock();
-#endif
-
-  init_lte_vars(&frame_parms, frame_type, tdd_config, tdd_config_S,
-                extended_prefix_flag, N_RB_DL,
-                Nid_cell, cooperation_flag, transmission_mode, abstraction_flag,
-                nb_antennas_rx,0);
-
-  g_log->level = LOG_WARNING;
-  g_log->log_component[HW].level = LOG_WARNING;
-  g_log->log_component[HW].flag  = LOG_LOW;
-  g_log->log_component[PHY].level = LOG_WARNING;
-  g_log->log_component[PHY].flag  = LOG_LOW;
-  g_log->log_component[MAC].level = LOG_INFO;
-  g_log->log_component[MAC].flag  = LOG_LOW;
-  g_log->log_component[RLC].level = LOG_WARNING;
-  g_log->log_component[RLC].flag  = LOG_LOW;
-  g_log->log_component[PDCP].level = LOG_WARNING;
-  g_log->log_component[PDCP].flag  = LOG_LOW;
-  g_log->log_component[RRC].level = LOG_INFO;
-  g_log->log_component[RRC].flag  = LOG_LOW;
-  g_log->log_component[OIP].level = LOG_INFO;
-  g_log->log_component[OIP].flag = LOG_HIGH;
-#if defined(ENABLE_ITTI)
-  g_log->log_component[EMU].level = LOG_INFO;
-  g_log->log_component[EMU].flag  = LOG_HIGH;
-# if defined(ENABLE_USE_MME)
-  g_log->log_component[S1AP].level  = LOG_INFO;
-  g_log->log_component[S1AP].flag   = LOG_HIGH;
-  g_log->log_component[SCTP].level  = LOG_INFO;
-  g_log->log_component[SCTP].flag   = LOG_HIGH;
-# endif
-  g_log->log_component[S1AP].level = LOG_INFO;
-  g_log->log_component[S1AP].flag  = LOG_LOW;
-#else
-#endif
-  g_log->log_component[ENB_APP].level = LOG_INFO;
-  g_log->log_component[ENB_APP].flag  = LOG_HIGH;
-
-  PHY_vars_eNB_g = malloc(sizeof(PHY_VARS_eNB *));
-  PHY_vars_eNB_g[0] = init_lte_eNB(frame_parms,eNB_id,Nid_cell,cooperation_flag,
-                                   transmission_mode,abstraction_flag);
-
-#ifndef OPENAIR2
-  for (i=0; i<NUMBER_OF_UE_MAX; i++) {
-    PHY_vars_eNB_g[0]->pusch_config_dedicated[i].betaOffset_ACK_Index = beta_ACK;
-    PHY_vars_eNB_g[0]->pusch_config_dedicated[i].betaOffset_RI_Index  = beta_RI;
-    PHY_vars_eNB_g[0]->pusch_config_dedicated[i].betaOffset_CQI_Index = beta_CQI;
-
-    PHY_vars_eNB_g[0]->scheduling_request_config[i].sr_PUCCH_ResourceIndex = i;
-    PHY_vars_eNB_g[0]->scheduling_request_config[i].sr_ConfigIndex = 7+(i%3);
-    PHY_vars_eNB_g[0]->scheduling_request_config[i].dsr_TransMax = sr_n4;
-  }
-#endif
-
-  openair_daq_vars.ue_dl_rb_alloc=0x1fff;
-  openair_daq_vars.target_ue_dl_mcs=16;
-  openair_daq_vars.ue_ul_nb_rb=6;
-  openair_daq_vars.target_ue_ul_mcs=9;
-
-  // set eNB to max gain
-  PHY_vars_eNB_g[0]->rx_total_gain_eNB_dB =  rxg_max[0] + rxgain[0] -
-      30; //was measured at rxgain=30;
-  for (i=0; i<4; i++) {
-    //        frame_parms->rfmode[i] = rf_mode_max[i];
-    rf_mode[i] = (rf_mode[i] & (~LNAGAINMASK)) | LNAMax;
-  }
-
-  // Initialize card
-  ret = openair0_open();
-  if ( ret != 0 ) {
-    if (ret == -1) {
-      printf("Error opening /dev/openair0\n");
-    }
-    if (ret == -2) {
-      printf("Error mapping bigshm\n");
-    }
-    if (ret == -3) {
-      printf("Error mapping RX or TX buffer\n");
-    }
-    return(ret);
-  }
-
-  printf ("Detected %d number of cards, %d number of antennas.\n",
-          openair0_num_detected_cards, openair0_num_antennas[card]);
-
-  p_exmimo_config = openair0_exmimo_pci[card].exmimo_config_ptr;
-  p_exmimo_id     = openair0_exmimo_pci[card].exmimo_id_ptr;
-
-  printf("Card %d: ExpressMIMO %d, HW Rev %d, SW Rev 0x%d\n", card,
-         p_exmimo_id->board_exmimoversion, p_exmimo_id->board_hwrev,
-         p_exmimo_id->board_swrev);
-
-  if (p_exmimo_id->board_swrev>=BOARD_SWREV_CNTL2) {
-    p_exmimo_config->framing.eNB_flag   = 0;
-  } else {
-    p_exmimo_config->framing.eNB_flag   = 0;  //!UE_flag;
-  }
-  p_exmimo_config->framing.tdd_config = DUPLEXMODE_FDD + TXRXSWITCH_LSB;
-  for (ant = 0; ant < 4; ant++) {
-    p_exmimo_config->framing.resampling_factor[ant] = 2;
-  }
-
-  for (ant=0; ant<max(frame_parms->nb_antennas_tx,frame_parms->nb_antennas_rx);
-       ant++) {
-    p_exmimo_config->rf.rf_mode[ant] = rf_mode_base;
-  }
-  for (ant=0; ant<frame_parms->nb_antennas_tx; ant++) {
-    p_exmimo_config->rf.rf_mode[ant] += (TXEN + DMAMODE_TX);
-  }
-  for (ant=0; ant<frame_parms->nb_antennas_rx; ant++) {
-    p_exmimo_config->rf.rf_mode[ant] += (RXEN + DMAMODE_RX);
-  }
-  for (ant=max(frame_parms->nb_antennas_tx,frame_parms->nb_antennas_rx); ant<4;
-       ant++) {
-    p_exmimo_config->rf.rf_mode[ant] = 0;
-    carrier_freq[ant] = 0; //this turns off all other LIMEs
-  }
-
-  for (ant = 0; ant < 4; ant++) {
-    if (frame_type == FDD) {
-      carrier_freq[ant] = carrier_freq_fdd[ant];
-    } else {
-      carrier_freq[ant] = carrier_freq_tdd[ant];
-    }
-  }
-  for (ant = 0; ant<1; ant++) {
-    p_exmimo_config->rf.do_autocal[ant] = 1;
-    if (frame_type == FDD) {
-      p_exmimo_config->rf.rf_freq_rx[ant] =
-        carrier_freq[ant]-120e6;  // LTE FDD band 1 duplex space
-    } else {
-      p_exmimo_config->rf.rf_freq_rx[ant] = carrier_freq[ant];
-    }
-
-    p_exmimo_config->rf.rf_freq_tx[ant] = carrier_freq[ant];
-    p_exmimo_config->rf.rx_gain[ant][0] = rxgain[ant];
-    p_exmimo_config->rf.tx_gain[ant][0] = txgain[ant];
-
-    p_exmimo_config->rf.rf_local[ant]   = rf_local[ant];
-    p_exmimo_config->rf.rf_rxdc[ant]    = rf_rxdc[ant];
-
-    if ((carrier_freq[ant] >= 850000000) && (carrier_freq[ant] <= 865000000)) {
-      p_exmimo_config->rf.rf_vcocal[ant]  = rf_vcocal_850[ant];
-      p_exmimo_config->rf.rffe_band_mode[ant] = DD_TDD;
-    } else {
-      p_exmimo_config->rf.rf_vcocal[ant]  = rf_vcocal[ant];
-      p_exmimo_config->rf.rffe_band_mode[ant] = B19G_TDD;
-    }
-
-    p_exmimo_config->rf.rffe_gain_txlow[ant] = 63;
-    p_exmimo_config->rf.rffe_gain_txhigh[ant] = 63;
-    p_exmimo_config->rf.rffe_gain_rxfinal[ant] = 63;
-    p_exmimo_config->rf.rffe_gain_rxlow[ant] = 63;
-  }
-
-
-  dump_frame_parms(frame_parms);
-
-  mac_xface = malloc(sizeof(MAC_xface));
-
-#ifdef OPENAIR2
-  int eMBMS_active=0;
-  l2_init(frame_parms,eMBMS_active,
-          0,// cba_group_active
-          0); //HO active
-  mac_xface->mrbch_phy_sync_failure (0, 0, 0);
-#endif
-
-  mac_xface->macphy_exit = &exit_fun;
-
-#if defined(ENABLE_ITTI)
-  if (create_tasks(UE_flag ? 0 : 1, UE_flag ? 1 : 0) < 0) {
-    exit(-1); // need a softer mode
-  }
-  printf("ITTI tasks created\n");
-#endif
-
-  number_of_cards = openair0_num_detected_cards;
-  if (p_exmimo_id->board_exmimoversion==1) { //ExpressMIMO1
-    openair_daq_vars.timing_advance = 138;
-  } else { //ExpressMIMO2
-    openair_daq_vars.timing_advance = 15;
-  }
-
-  setup_eNB_buffers(PHY_vars_eNB_g[0],frame_parms,0);
-
-  openair0_dump_config(card);
-
-  printf("EXMIMO_CONFIG: rf_mode 0x %x %x %x %x, [0]: TXRXEn %d, TXLPFEn %d, TXLPF %d, RXLPFEn %d, RXLPF %d, RFBB %d, LNA %d, LNAGain %d, RXLPFMode %d, SWITCH %d, rf_rxdc %d, rf_local %d, rf_vcocal %d\n",
-
-         p_exmimo_config->rf.rf_mode[0],
-         p_exmimo_config->rf.rf_mode[1],
-         p_exmimo_config->rf.rf_mode[2],
-         p_exmimo_config->rf.rf_mode[3],
-         (p_exmimo_config->rf.rf_mode[0]&3),  // RXen+TXen
-         (p_exmimo_config->rf.rf_mode[0]&4)>>2,         //TXLPFen
-         (p_exmimo_config->rf.rf_mode[0]&TXLPFMASK)>>3, //TXLPF
-         (p_exmimo_config->rf.rf_mode[0]&128)>>7,      //RXLPFen
-         (p_exmimo_config->rf.rf_mode[0]&RXLPFMASK)>>8, //TXLPF
-         (p_exmimo_config->rf.rf_mode[0]&RFBBMASK)>>16, // RFBB mode
-         (p_exmimo_config->rf.rf_mode[0]&LNAMASK)>>12, // RFBB mode
-         (p_exmimo_config->rf.rf_mode[0]&LNAGAINMASK)>>14, // RFBB mode
-         (p_exmimo_config->rf.rf_mode[0]&RXLPFMODEMASK)>>19, // RXLPF mode
-         (p_exmimo_config->framing.tdd_config&TXRXSWITCH_MASK)>>1, // Switch mode
-         p_exmimo_config->rf.rf_rxdc[0],
-         p_exmimo_config->rf.rf_local[0],
-         p_exmimo_config->rf.rf_vcocal[0]);
-
-  for (ant=0; ant<4; ant++) {
-    p_exmimo_config->rf.do_autocal[ant] = 0;
-  }
-
-
-  mlockall(MCL_CURRENT | MCL_FUTURE);
-
-#ifdef RTAI
-  // make main thread LXRT soft realtime
-  task = rt_task_init_schmod(nam2num("MYTASK"), 9, 0, 0, SCHED_FIFO, 0xF);
-
-  // start realtime timer and scheduler
-  //rt_set_oneshot_mode();
-  rt_set_periodic_mode();
-  start_rt_timer(0);
-
-  //now = rt_get_time() + 10*PERIOD;
-  //rt_task_make_periodic(task, now, PERIOD);
-
-  printf("Init mutex\n");
-  //mutex = rt_get_adr(nam2num("MUTEX"));
-  mutex = rt_sem_init(nam2num("MUTEX"), 0);
-  if (mutex==0) {
-    printf("Error init mutex\n");
-    exit(-1);
-  } else {
-    printf("mutex=%p\n",mutex);
-  }
-#endif
-
-  DAQ_MBOX = (volatile unsigned int *) openair0_exmimo_pci[card].rxcnt_ptr[0];
-
-  // this starts the DMA transfers
-  openair0_start_rt_acquisition(card);
-
-
-#ifdef XFORMS
-  if (do_forms==1) {
-    printf("Running XFORMS\n");
-    fl_initialize (&argc, argv, NULL, 0, 0);
-    form_stats = create_form_stats_form();
-    for(UE_id=0; UE_id<scope_enb_num_ue; UE_id++) {
-      form_enb[UE_id] = create_lte_phy_scope_enb();
-      sprintf (title, "UE%d LTE UL SCOPE eNB",UE_id+1);
-      fl_show_form (form_enb[UE_id]->lte_phy_scope_enb, FL_PLACE_HOTSPOT,
-                    FL_FULLBORDER, title);
-    }
-    fl_show_form (form_stats->stats_form, FL_PLACE_HOTSPOT, FL_FULLBORDER, "stats");
-    for (UE_id=0; UE_id<scope_enb_num_ue; UE_id++) {
-      if (otg_enabled) {
-        fl_set_button(form_enb[UE_id]->button_0,1);
-        fl_set_object_label(form_enb[UE_id]->button_0,"DL Traffic ON");
-      } else {
-        fl_set_button(form_enb[UE_id]->button_0,0);
-        fl_set_object_label(form_enb[UE_id]->button_0,"DL Traffic OFF");
-      }
-    }
-
-    ret = pthread_create(&thread2, NULL, scope_thread, NULL);
-    printf("Scope thread created, ret=%d\n",ret);
-  }
-#endif
-
-  rt_sleep_ns(10*FRAME_PERIOD);
-
-#ifndef RTAI
-  pthread_attr_init (&attr_dlsch_threads);
-  pthread_attr_setstacksize(&attr_dlsch_threads,OPENAIR_THREAD_STACK_SIZE);
-  //attr_dlsch_threads.priority = 1;
-  sched_param_dlsch.sched_priority = sched_get_priority_max(
-                                       SCHED_FIFO); //OPENAIR_THREAD_PRIORITY;
-  pthread_attr_setschedparam  (&attr_dlsch_threads, &sched_param_dlsch);
-  pthread_attr_setschedpolicy (&attr_dlsch_threads, SCHED_FIFO);
-#endif
-
-  // start the main thread
-#ifdef RTAI
-  thread0 = rt_thread_create(eNB_thread, NULL, 10000000);
-  rt_sleep_ns(FRAME_PERIOD*10);
-  rt_send(rt_get_adr(nam2num("TASK0")), (unsigned long)mutex);
-#else
-  error_code = pthread_create(&thread0, &attr_dlsch_threads, eNB_thread, NULL);
-  if (error_code!= 0) {
-    LOG_D(HW,"[lte-softmodem.c] Could not allocate eNB_thread, error %d\n",
-          error_code);
-    return(error_code);
-  } else {
-    LOG_D(HW,"[lte-softmodem.c] Allocate eNB_thread successful\n");
-  }
-#endif
-
-// #ifdef OPENAIR2
-//   init_pdcp_thread(1);
-// #endif
-
-#ifdef ULSCH_THREAD
-  init_ulsch_threads();
-#endif
-  printf("eNB threads created\n");
-
-
-  // wait for end of program
-  printf("TYPE <CTRL-C> TO TERMINATE\n");
-  //getchar();
-  //while (oai_exit==0)
-  //  rt_sleep_ns(FRAME_PERIOD);
-
-#if defined(ENABLE_ITTI)
-  printf("Entering ITTI signals handler\n");
-  itti_wait_tasks_end();
-#else
-  rt_sem_wait(mutex);
-#endif
-
-  // stop threads
-#ifdef XFORMS
-  printf("waiting for XFORMS thread\n");
-  if (do_forms==1) {
-    pthread_join(thread2,&status);
-    fl_hide_form(form_stats->stats_form);
-    fl_free_form(form_stats->stats_form);
-    for(UE_id=0; UE_id<scope_enb_num_ue; UE_id++) {
-      fl_hide_form(form_enb[UE_id]->lte_phy_scope_enb);
-      fl_free_form(form_enb[UE_id]->lte_phy_scope_enb);
-    }
-  }
-#endif
-
-  printf("stopping MODEM threads\n");
-  // cleanup
-#ifdef RTAI
-  rt_thread_join(thread0);
-#else
-  pthread_join(thread0,&status);
-#endif
-#ifdef ULSCH_THREAD
-  cleanup_ulsch_threads();
-#endif
-
-#ifdef RTAI
-  rt_sem_delete(mutex);
-  stop_rt_timer();
-  rt_task_delete(task);
-#endif
-
-  printf("stopping card\n");
-  openair0_stop(card);
-  printf("closing openair0_lib\n");
-  openair0_close();
-
-
-
-  if (ouput_vcd) {
-    vcd_signal_dumper_close();
-  }
-
-  logClean();
-
-  return 0;
-}
-
-void setup_eNB_buffers(PHY_VARS_eNB *phy_vars_eNB,
-                       LTE_DL_FRAME_PARMS *frame_parms, int carrier)
-{
-
-  int i,j;
-  uint16_t N_TA_offset = 0;
-
-  if (frame_parms->frame_type == TDD) {
-    N_TA_offset = 624/4;
-  }
-
-  if (phy_vars_eNB) {
-    if ((frame_parms->nb_antennas_rx>1) && (carrier>0)) {
-      printf("RX antennas > 1 and carrier > 0 not possible\n");
-      exit(-1);
-    }
-
-    if ((frame_parms->nb_antennas_tx>1) && (carrier>0)) {
-      printf("TX antennas > 1 and carrier > 0 not possible\n");
-      exit(-1);
-    }
-
-    // replace RX signal buffers with mmaped HW versions
-    for (i=0; i<frame_parms->nb_antennas_rx; i++) {
-      free(phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i]);
-      phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i] = ((int32_t *)
-          openair0_exmimo_pci[card].adc_head[i+carrier]) -
-          N_TA_offset; // N_TA offset for TDD
-
-      /*
-        printf("rxdata[%d] @ %p\n",i,phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i]);
-        for (j=0;j<16;j++) {
-      printf("rxbuffer %d: %x\n",j,phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i][j]);
-      phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i][j] = 16-j;
-        }
-      */
-    }
-    for (i=0; i<frame_parms->nb_antennas_tx; i++) {
-      free(phy_vars_eNB->lte_eNB_common_vars.txdata[0][i]);
-      phy_vars_eNB->lte_eNB_common_vars.txdata[0][i] = (int32_t *)
-          openair0_exmimo_pci[card].dac_head[i+carrier];
-
-      /*
-        printf("txdata[%d] @ %p\n",i,phy_vars_eNB->lte_eNB_common_vars.txdata[0][i]);
-        for (j=0;j<16;j++) {
-      printf("txbuffer %d: %x\n",j,phy_vars_eNB->lte_eNB_common_vars.txdata[0][i][j]);
-      phy_vars_eNB->lte_eNB_common_vars.txdata[0][i][j] = 16-j;
-      }
-      */
-    }
-  }
-}
diff --git a/targets/RT/USER/lte-softmodem-usrp.c b/targets/RT/USER/lte-softmodem-usrp.c
deleted file mode 100644
index 7c44a33b66e..00000000000
--- a/targets/RT/USER/lte-softmodem-usrp.c
+++ /dev/null
@@ -1,1354 +0,0 @@
-/*******************************************************************************
-    OpenAirInterface 
-    Copyright(c) 1999 - 2014 Eurecom
-
-    OpenAirInterface is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-
-    OpenAirInterface is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenAirInterface.The full GNU General Public License is 
-    included in this distribution in the file called "COPYING". If not, 
-    see <http://www.gnu.org/licenses/>.
-
-   Contact Information
-   OpenAirInterface Admin: openair_admin@eurecom.fr
-   OpenAirInterface Tech : openair_tech@eurecom.fr
-   OpenAirInterface Dev  : openair4g-devel@eurecom.fr
-  
-   Address      : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
-
- *******************************************************************************/
-
-/*! \file lte-softmodem.c
- * \brief main program to control HW and scheduling
- * \author R. Knopp, F. Kaltenberger
- * \date 2012
- * \version 0.1
- * \company Eurecom
- * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr
- * \note
- * \warning
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <time.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#define __USE_GNU
-//#define _GNU_SOURCE
-#include <sched.h>
-#include <signal.h>
-#include <execinfo.h>
-#include <getopt.h>
-//#include <windows.h>
-#include <errno.h>
-
-#include "rt_wrapper.h"
-
-#ifdef EMOS
-#include <gps.h>
-#endif
-
-#include "PHY/types.h"
-#include "PHY/defs.h"
-#include "openair0_lib.h"
-
-#include "PHY/vars.h"
-#include "MAC_INTERFACE/vars.h"
-#include "SCHED/vars.h"
-#include "LAYER2/MAC/vars.h"
-
-#include "../../SIMU/USER/init_lte.h"
-
-#ifdef EMOS
-#include "SCHED/phy_procedures_emos.h"
-#endif
-
-#ifdef OPENAIR2
-#include "LAYER2/MAC/defs.h"
-#include "LAYER2/MAC/vars.h"
-#ifndef CELLULAR
-#include "RRC/LITE/vars.h"
-#endif
-#include "PHY_INTERFACE/vars.h"
-#endif
-
-#ifdef SMBV
-#include "PHY/TOOLS/smbv.h"
-unsigned short config_frames[4] = {2,9,11,13};
-#endif
-#include "UTIL/LOG/log_extern.h"
-#include "UTIL/OTG/otg.h"
-#include "UTIL/OTG/otg_vars.h"
-#include "UTIL/MATH/oml.h"
-#include "UTIL/LOG/vcd_signal_dumper.h"
-
-
-#include "stats.h"
-#include "../../ARCH/USRP/USERSPACE/LIB/def.h"
-#include "TOOLS/thread_ipc.c"
-
-
-#ifdef XFORMS
-#include "PHY/TOOLS/lte_phy_scope.h"
-
-// current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0)
-// at eNB 0, an UL scope for every UE
-FD_lte_phy_scope_ue  *form_ue[NUMBER_OF_UE_MAX];
-FD_lte_phy_scope_enb *form_enb[NUMBER_OF_UE_MAX];
-FD_stats_form *form_stats=NULL;
-char title[255];
-unsigned char scope_enb_num_ue = 1;
-#endif //XFORMS
-
-#define FRAME_PERIOD 100000000ULL
-#define DAQ_PERIOD 66667ULL
-
-//#define rt_printk printf
-
-#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
-
-#ifdef RTAI //by super
-static SEM *mutex;
-//static CND *cond;
-
-static int thread0;
-static int thread1;
-static int thread_recv;
-//static int sync_thread;
-#else
-pthread_t thread0;
-pthread_t thread1;
-pthread_t thread_recv;
-pthread_attr_t attr_dlsch_threads;
-struct sched_param sched_param_dlsch;
-#endif
-
-pthread_t  thread2;
-pthread_t  thread3;
-pthread_t  tid_eNB;
-pthread_t  tid_recv;
-pthread_t  thread_tx_error;
-pthread_attr_t attr;
-
-pthread_mutex_t mutex_eNB;
-pthread_cond_t cond_eNB;
-
-int ret;
-
-// ------------------------------------
-// functions and variables for USRP
-// ------------------------------------
-extern int oai_tx_buff[SAMPLES_PER_FRM];
-extern int oai_rx_buff[SAMPLES_PER_FRM];
-extern void UHD_init(void);
-extern void UHD_init_display(void);
-extern void Init_send(void);
-extern void Init_recv(void);
-extern void set_freq(int freq_offset);
-extern void send_data(int hw_frm_head_pos);
-extern void recv_data(int hw_frm_head_pos);
-extern void send_end();
-extern void tx_errorcode_handler(void);
-
-int tx_offset = 0;
-int hw_frm_head_pos = 0;
-
-extern volatile unsigned long long tx_timestamp,rx_timestamp,clock_usrp;
-
-extern volatile int flag_recv,flag_clock;
-extern volatile int recv_ready;
-extern volatile int w_pos_usrp_rcv; // value range [0:76800-1]
-extern volatile int w_slot_usrp_rcv, r_slot_usrp_send; // slot index for USRP thread. value range [0:19]
-extern volatile int r_slot_idx, t_slot_idx; // slot index for eNB thread. value range [0;19]
-extern volatile int send_slot_missed;
-
-double time_diff1,time_diff2,time_diff3,time_diff4;
-struct timespec time_1, time_2,time_3,time_4,time_5;
-
-// USRP debug output control
-extern int g_usrp_debug;
-
-//add for program run limit times
-int N_slot_cycle;
-
-// -----------------------------------
-// Ctrl+c control
-// -----------------------------------
-int oai_exit = 0;
-void sig_int_handler(void);
-
-int card = 0;
-exmimo_config_t *p_exmimo_config;
-exmimo_id_t     *p_exmimo_id;
-volatile unsigned int *DAQ_MBOX;
-
-//int time_offset[4] = {-138,-138,-138,-138};
-//int time_offset[4] = {-145,-145,-145,-145};
-int time_offset[4] = {0,0,0,0};
-
-int fs4_test=0;
-char UE_flag;
-u8  eNB_id=0,UE_id=0;
-
-u32 carrier_freq[4]= {1907600000,1907600000,1907600000,1907600000};
-
-struct timing_info_t {
-	//unsigned int frame, hw_slot, last_slot, next_slot;
-	RTIME time_min, time_max, time_avg, time_last, time_now;
-	//unsigned int mbox0, mbox1, mbox2, mbox_target;
-	unsigned int n_samples;
-} timing_info;
-
-extern s16* sync_corr_ue0;
-extern s16 prach_ifft[4][1024*2];
-
-
-runmode_t mode;
-int rx_input_level_dBm;
-#ifdef XFORMS
-extern int otg_enabled;
-#else
-int otg_enabled;
-#endif
-int number_of_cards = 1;
-
-int mbox_bounds[20] = {8,16,24,30,38,46,54,60,68,76,84,90,98,106,114,120,128,136,144, 0}; ///boundaries of slots in terms ob mbox counter rounded up to even numbers
-
-int init_dlsch_threads(void);
-void cleanup_dlsch_threads(void);
-s32 init_rx_pdsch_thread(void);
-void cleanup_rx_pdsch_thread(void);
-int init_ulsch_threads(void);
-void cleanup_ulsch_threads(void);
-
-LTE_DL_FRAME_PARMS *frame_parms;
-
-void setup_ue_buffers(PHY_VARS_UE *phy_vars_ue, LTE_DL_FRAME_PARMS *frame_parms, int carrier);
-void setup_eNB_buffers(PHY_VARS_eNB *phy_vars_eNB, LTE_DL_FRAME_PARMS *frame_parms, int carrier);
-void test_config(int card, int ant, unsigned int rf_mode, int UE_flag);
-
-unsigned int build_rflocal(txi, txq, rxi, rxq)
-{
-	return (txi + (txq<<6) + (rxi<<12) + (rxq<<18));
-}
-unsigned int build_rfdc(int dcoff_i_rxfe, int dcoff_q_rxfe)
-{
-	return (dcoff_i_rxfe + (dcoff_q_rxfe<<8));
-}
-
-void signal_handler(int sig)
-{
-	void *array[10];
-	size_t size;
-
-	if (sig==SIGSEGV) {
-		// get void*'s for all entries on the stack
-		size = backtrace(array, 10);
-
-		// print out all the frames to stderr
-		fprintf(stderr, "Error: signal %d:\n", sig);
-		backtrace_symbols_fd(array, size, 2);
-		exit(-1);
-	}
-	else {
-		oai_exit=1;
-	}
-}
-
-void exit_fun(const char* s)
-{
-	void *array[10];
-	size_t size;
-
-	printf("Exiting: %s\n",s);
-
-	oai_exit=1;
-	//rt_sleep_ns(FRAME_PERIOD);
-
-	//exit (-1);
-}
-
-int dummy_tx_buffer[3840*4] __attribute__((aligned(16)));
-
-void sig_int_handler(void)
-{
-	oai_exit = 1;
-}
-
-// -----------------------------------
-// USRP tx underflow test
-// -----------------------------------
-// FIXME HL_CHECK is this thread necessary?
-void *tx_error_handler(void *ptr)
-{
-	(void)ptr;
-	while (!oai_exit)
-	{
-		tx_errorcode_handler();
-	}
-	printf("[USRP monitoring thread] Received oai_exit signal. Ends.\n");
-	pthread_exit(NULL);
-}
-
-// -----------------------------------
-// USRP send and receive thread
-// -----------------------------------
-void *usrp_thread(void *ptr)
-{
-	(void)ptr;
-	bind_thread2kernel(1);
-	int i=0;
-
-	// continuous receiving
-	while (!oai_exit)
-	{
-		// receive one slot-len
-		recv_data(hw_frm_head_pos);
-		// send one slot
-		send_data(hw_frm_head_pos);
-		i++; if(i==N_slot_cycle) oai_exit=1;//control run N_slot_cycle slot and exit
-	}
-
-	send_end();
-	printf("[USRP thread] Received oai_exit signal. Ends. send slot missed: %d\n",send_slot_missed);
-	pthread_exit(NULL);
-}
-
-/* This is the main eNB thread. It gets woken up by the kernel driver using the RTAI message mechanism (rt_send and rt_receive). */
-static void *eNB_thread(void *arg)
-	//void eNB_thread(void)
-{
-	printf("Start eNB Server...\n\n");
-
-	bind_thread2kernel(2);
-#ifdef RTAI
-	RT_TASK *task;
-#endif
-	int slot=0,last_slot, next_slot,frame=0;
-	unsigned int aa,slot_offset, slot_offset_F;
-	int diff = 0;
-	int i;
-	int num_slot_missed = 0;
-
-#ifdef RTAI
-	task = rt_task_init_schmod(nam2num("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF);
-	LOG_D(HW,"Started eNB thread (id %p)\n",task);
-	//if(task==NULL) printf("RT Task creation failed\n"); else printf("Task success!\n");
-#endif
-	mlockall(MCL_CURRENT | MCL_FUTURE);
-
-#ifdef HARD_RT
-	rt_make_hard_real_time();
-#endif
-
-	// initialize reading postition
-	r_slot_idx = 0;
-	t_slot_idx = 0;
-	frame = 0;
-
-	while (!oai_exit)
-	{
-		format_printf(g_usrp_debug,"[eNB ] r_eNB: %d w_usrp: %d num_slot_missed: %d diff: %d\n",r_slot_idx,w_slot_usrp_rcv, num_slot_missed,diff);
-
-		// Update 'diff'. Handle the frame wrap-arround
-		if ((w_slot_usrp_rcv<4)&&(r_slot_idx>=16)){
-			diff = r_slot_idx - (w_slot_usrp_rcv + 20) ;
-		}
-		else if((w_slot_usrp_rcv>=16)&&(r_slot_idx<4)){
-			diff = (r_slot_idx + 20) - w_slot_usrp_rcv;
-		}
-		else{
-			diff = r_slot_idx - w_slot_usrp_rcv;
-		}
-
-		// Reading is too slow. It's already late.
-		if(diff < -4)
-		{
-			r_slot_idx++;
-			num_slot_missed += abs(diff + 4);
-			if(r_slot_idx==20){
-				r_slot_idx = 0;
-				frame++;
-			}
-			continue;
-		}
-
-		// Wait for writing
-		while((diff > 0)&& (!oai_exit))
-		{
-			usleep(500);
-			// Update 'diff'. Handle the frame wrap-arround
-			if ((w_slot_usrp_rcv<4)&&(r_slot_idx>=16)){
-				diff = r_slot_idx - (w_slot_usrp_rcv + 20) ;
-			}
-			else if((w_slot_usrp_rcv>=16)&&(r_slot_idx<4)){
-				diff = (r_slot_idx + 20) - w_slot_usrp_rcv;
-			}
-			else{
-				diff = r_slot_idx - w_slot_usrp_rcv;
-			}
-		}
-
-		// The slot is ready
-		last_slot = r_slot_idx;
-		next_slot = (r_slot_idx + N_slot_offset)%LTE_SLOTS_PER_FRAME;
-		format_printf(g_usrp_debug, "[eNB ] r_eNB: %d w_usrp: %d last_slot: %d next_slot: %d diff: %d\n\n",r_slot_idx,w_slot_usrp_rcv,last_slot, next_slot,diff);
-
-		//---------------------------
-		// eNB procedure
-		//---------------------------
-		PHY_vars_eNB_g[0]->frame = frame;
-		//if (frame>5)
-		{
-			if (fs4_test==0)
-				// -- PHY procedure --
-			{
-				//phy_procedures_eNB_lte(last_slot, next_slot, PHY_vars_eNB_g[0], 0);//for OAI version berfore 4160
-				phy_procedures_eNB_lte(last_slot, next_slot, PHY_vars_eNB_g[0], 0,0,NULL);
-#ifndef IFFT_FPGA
-				slot_offset_F = (next_slot)*
-					(PHY_vars_eNB_g[0]->lte_frame_parms.ofdm_symbol_size)*
-					((PHY_vars_eNB_g[0]->lte_frame_parms.Ncp==1) ? 6 : 7);//0for normal 7,1 for extened 6
-				slot_offset = (next_slot)*
-					(PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti>>1);
-
-				if ((subframe_select(&PHY_vars_eNB_g[0]->lte_frame_parms,next_slot>>1)==SF_DL)||
-						((subframe_select(&PHY_vars_eNB_g[0]->lte_frame_parms,next_slot>>1)==SF_S)&&((next_slot&1)==0)))
-				{
-
-					for (aa=0; aa<PHY_vars_eNB_g[0]->lte_frame_parms.nb_antennas_tx; aa++)
-					{
-						if (PHY_vars_eNB_g[0]->lte_frame_parms.Ncp == 1)
-						{
-							PHY_ofdm_mod(&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F],
-#ifdef BIT8_TX
-									&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][slot_offset>>1],
-#else
-									dummy_tx_buffer,//&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][slot_offset],
-#endif
-									PHY_vars_eNB_g[0]->lte_frame_parms.log2_symbol_size,
-									6,
-									PHY_vars_eNB_g[0]->lte_frame_parms.nb_prefix_samples,
-									PHY_vars_eNB_g[0]->lte_frame_parms.twiddle_ifft,
-									PHY_vars_eNB_g[0]->lte_frame_parms.rev,
-									CYCLIC_PREFIX);
-						}
-						else
-						{
-							normal_prefix_mod(&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F],
-#ifdef BIT8_TX
-									&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][slot_offset>>1],
-#else
-									dummy_tx_buffer,//&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][slot_offset],
-#endif
-									7,
-									&(PHY_vars_eNB_g[0]->lte_frame_parms));
-						}
-
-#ifdef EXMIMO
-						for (i=0; i<PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti/2; i++)
-						{
-							tx_offset = (int)slot_offset+time_offset[aa]+i;
-							if (tx_offset<0)
-								tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti;
-							if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti))
-								tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti;
-							((short*)&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][tx_offset])[0]=
-								((short*)dummy_tx_buffer)[2*i]<<4;
-							((short*)&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][tx_offset])[1]=
-								((short*)dummy_tx_buffer)[2*i+1]<<4;
-						}
-#endif //EXMIMO
-					}
-				}
-			}// end of PHY procedure
-
-#endif //IFFT_FPGA
-
-		}// end of frame>5
-
-		// update slot index
-		t_slot_idx = next_slot; // this slot is ready to send
-		r_slot_idx++;
-		if(r_slot_idx==20)
-		{
-			r_slot_idx = 0;
-			frame++;
-		}
-	}// end of while
-
-	format_printf(1,"\n[eNB thread] Received oai_exit signal. Ends. Ran %d frames. num_slot_missed: %d\n",frame, num_slot_missed);
-
-
-#ifdef HARD_RT
-	rt_make_soft_real_time();
-#endif
-
-	// clean task
-#ifdef RTAI
-	rt_task_delete(task);
-#endif
-	return 0;
-}
-
-
-/* This is the main UE thread. Initially it is doing a periodic get_frame. One synchronized it gets woken up by the kernel driver using the RTAI message mechanism (rt_send and rt_receive). */
-static void *UE_thread(void *arg)
-{
-	printf("Start UE Client...\n\n");
-
-	bind_thread2kernel(2);
-#ifdef RTAI
-	RT_TASK *task;
-#endif
-	int slot=0,last_slot, next_slot,frame=0;
-	unsigned int aa,slot_offset, slot_offset_F;
-	int diff = 0;
-	int i;
-	int num_slot_missed = 0;
-
-	static int is_synchronized = 0;
-	static int received_slots = 0;
-	static int slot0 = 0;
-	static int first_run=1;
-
-#ifdef RTAI
-	task = rt_task_init_schmod(nam2num("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF);
-	LOG_D(HW,"Started UE thread (id %p)\n",task);
-	//if(task==NULL) printf("RT Task creation failed\n"); else printf("Task success!\n");
-#endif
-	mlockall(MCL_CURRENT | MCL_FUTURE);
-
-#ifdef HARD_RT
-	rt_make_hard_real_time();
-#endif
-
-	// initialize reading postition
-	r_slot_idx = 0;
-	t_slot_idx = 0;
-	frame = 0;
-
-	openair_daq_vars.freq_offset = 0; //-7500;
-	set_freq(openair_daq_vars.freq_offset);
-
-	if (mode == rx_calib_ue) {
-		openair_daq_vars.freq_offset = -7500;
-		set_freq(openair_daq_vars.freq_offset);
-	}
-
-	usleep(10000*(7.68/6.25));//wait frame data fill in buff
-	//test synchronized or not
-	char test_synchronize = 1;
-
-	while (!oai_exit)
-	{
-
-		if (is_synchronized)
-		{
-			//test is synchronized or not
-			if(test_synchronize) {printf("Found cell ,UE synchronized!  hw_frm_head_pos = %d\n",hw_frm_head_pos); test_synchronize = 0;}
-
-			format_printf(g_usrp_debug,"[UE ] r_ue: %d w_usrp: %d num_slot_missed: %d diff: %d\n",r_slot_idx,w_slot_usrp_rcv, num_slot_missed,diff);
-
-			// Update 'diff'. Handle the frame wrap-arround
-			if ((w_slot_usrp_rcv<4)&&(r_slot_idx>=16)){
-				diff = r_slot_idx - (w_slot_usrp_rcv + 20) ;
-			}
-			else if((w_slot_usrp_rcv>=16)&&(r_slot_idx<4)){
-				diff = (r_slot_idx + 20) - w_slot_usrp_rcv;
-			}
-			else{
-				diff = r_slot_idx - w_slot_usrp_rcv;
-			}
-
-			// Reading is too slow. It's already late.
-			if(diff < -4)
-			{
-				r_slot_idx++;
-				num_slot_missed += abs(diff + 4);
-				if(r_slot_idx==20){
-					r_slot_idx = 0;
-					frame++;
-				}
-				continue;
-			}
-
-			// Wait for writing
-			while((diff > 0)&& (!oai_exit))
-			{
-				usleep(500);
-				// Update 'diff'. Handle the frame wrap-arround
-				if ((w_slot_usrp_rcv<4)&&(r_slot_idx>=16)){
-					diff = r_slot_idx - (w_slot_usrp_rcv + 20) ;
-				}
-				else if((w_slot_usrp_rcv>=16)&&(r_slot_idx<4)){
-					diff = (r_slot_idx + 20) - w_slot_usrp_rcv;
-				}
-				else{
-					diff = r_slot_idx - w_slot_usrp_rcv;
-				}
-			}
-
-			// The slot is ready
-			last_slot = r_slot_idx;
-			next_slot = (r_slot_idx + N_slot_offset)%LTE_SLOTS_PER_FRAME;
-			format_printf(g_usrp_debug, "[UE ] r_ue: %d w_usrp: %d last_slot: %d next_slot: %d diff: %d\n\n",r_slot_idx,w_slot_usrp_rcv,last_slot, next_slot,diff);
-
-
-			PHY_vars_UE_g[0]->frame = frame;
-
-			//phy_procedures_UE_lte (last_slot, next_slot, PHY_vars_UE_g[0], 0, 0,mode);//for OAI version after 4160
-			phy_procedures_UE_lte (last_slot, next_slot, PHY_vars_UE_g[0], 0, 0,mode,0,NULL);
-
-			// update slot index
-			t_slot_idx = next_slot; // this slot is ready to send
-			r_slot_idx++;
-			if(r_slot_idx==20)
-			{
-				r_slot_idx = 0;
-				frame++;
-			}
-		}
-		else   // we are not yet synchronized
-		{
-
-			hw_frm_head_pos = 0;
-
-			slot = 0;
-
-			if (initial_sync(PHY_vars_UE_g[0],mode)==0) { // acquired synchronization
-
-				if (mode == rx_calib_ue) {
-					oai_exit=1;
-				}
-				else {
-					is_synchronized = 1;
-					hw_frm_head_pos = PHY_vars_UE_g[0]->rx_offset;
-					LOG_D(HW,"Got synch: hw_frm_head_pos %d\n",hw_frm_head_pos);
-				}
-			}
-			else { // Not acquired synchronization. Adjust carrier frequency.
-				if (openair_daq_vars.freq_offset >= 0) {
-					openair_daq_vars.freq_offset += 100; // FIXME HL_CHECK why add 100Hz here
-					openair_daq_vars.freq_offset *= -1;
-				}
-				else {
-					openair_daq_vars.freq_offset *= -1;
-				}
-				if (abs(openair_daq_vars.freq_offset) > 7500) { // cannot handle the frequency offset larger than 7.5KHz
-					LOG_I(PHY,"[initial_sync] No cell synchronization found, abondoning\n");
-					mac_xface->macphy_exit("");
-					oai_exit = 1;
-				}
-				else {
-					LOG_I(PHY,"[initial_sync] trying carrier off %d Hz\n",openair_daq_vars.freq_offset);
-					set_freq(openair_daq_vars.freq_offset);
-				}
-			}
-		}
-	}
-
-	LOG_D(HW,"UE_thread: finished, ran %d times.\n",frame);
-
-	format_printf(1,"\n[UE thread] Received oai_exit signal. Ends. Ran %d frames. num_slot_missed: %d\n",frame, num_slot_missed);
-#ifdef HARD_RT
-	rt_make_soft_real_time();
-#endif
-
-	// clean task
-#ifdef RTAI
-	rt_task_delete(task);
-#endif
-	LOG_D(HW,"Task deleted. returning\n");
-	return 0;
-}
-
-
-
-
-
-int main(int argc, char **argv)
-{
-#ifdef RTAI
-	RT_TASK *task;
-#endif
-	int i,j,aa;
-	void *status;
-
-	/*
-	   u32 rf_mode_max[4]     = {55759,55759,55759,55759};
-	   u32 rf_mode_med[4]     = {39375,39375,39375,39375};
-	   u32 rf_mode_byp[4]     = {22991,22991,22991,22991};
-	 */
-	u32 my_rf_mode = RXEN + TXEN + TXLPFNORM + TXLPFEN + TXLPF25 + RXLPFNORM + RXLPFEN + RXLPF25 + LNA1ON +LNAMax + RFBBNORM + DMAMODE_RX + DMAMODE_TX;
-	u32 my_rf_mode2 = RXEN + TXLPFNORM + TXLPFEN + TXLPF25 + RXLPFNORM + RXLPFEN + RXLPF25 + LNA1ON +LNAMax + RFBBNORM + DMAMODE_RX;
-	u32 rf_mode[4]     = {my_rf_mode,my_rf_mode2,0,0};
-	u32 rf_local[4]    = {8255000,8255000,8255000,8255000}; // UE zepto
-	//{8254617, 8254617, 8254617, 8254617}; //eNB khalifa
-	//{8255067,8254810,8257340,8257340}; // eNB PETRONAS
-
-	u32 rf_vcocal[4]   = {910,910,910,910};
-	u32 rf_vcocal_850[4] = {2015, 2015, 2015, 2015};
-	u32 rf_rxdc[4]     = {32896,32896,32896,32896};
-	u32 rxgain[4]      = {20,20,20,20};
-	u32 txgain[4]      = {25,25,25,25};
-
-	u16 Nid_cell = 0;
-	u8  cooperation_flag=0, transmission_mode=1, abstraction_flag=0;
-	u8 beta_ACK=0,beta_RI=0,beta_CQI=2;
-
-	int c;
-	char do_forms=0;
-	unsigned int fd;
-	unsigned int tcxo = 114;
-
-	int amp;
-	u8 prach_fmt;
-	int N_ZC;
-
-	char rxg_fname[100];
-	char txg_fname[100];
-	char rflo_fname[100];
-	char rfdc_fname[100];
-	FILE *rxg_fd=NULL;
-	FILE *txg_fd=NULL;
-	FILE *rflo_fd=NULL;
-	FILE *rfdc_fd=NULL;
-	unsigned int rxg_max[4]={133,133,133,133}, rxg_med[4]={127,127,127,127}, rxg_byp[4]={120,120,120,120};
-	int tx_max_power=0;
-
-	char line[1000];
-	int l;
-	int ret, ant;
-
-	int error_code;
-
-	const struct option long_options[] = {
-		{"calib-ue-rx", required_argument, NULL, 256},
-		{"calib-ue-rx-med", required_argument, NULL, 257},
-		{"calib-ue-rx-byp", required_argument, NULL, 258},
-		{"debug-ue-prach", no_argument, NULL, 259},
-		{"no-L2-connect", no_argument, NULL, 260},
-		{NULL, 0, NULL, 0}};
-
-	mode = normal_txrx;
-
-
-	while ((c = getopt_long (argc, argv, "C:ST:UdF:V:Dn:",long_options,NULL)) != -1)
-	{
-		switch (c)
-		{
-			case 'D':
-				printf("Enable debug output. \n\n");
-				g_usrp_debug = 1;
-				break;
-			case 'V':
-				ouput_vcd = 1;
-				break;
-			case 'd':
-				do_forms=1;
-				break;
-			case 'U':
-				UE_flag = 1;
-				break;
-			case 'C':
-				carrier_freq[0] = atoi(optarg);
-				carrier_freq[1] = atoi(optarg);
-				carrier_freq[2] = atoi(optarg);
-				carrier_freq[3] = atoi(optarg);
-				break;
-			case 'S':
-				fs4_test=1;
-				break;
-			case 'T':
-				tcxo=atoi(optarg);
-				break;
-			case 'n':
-				N_slot_cycle=atoi(optarg);
-				break;
-			case 'F':
-				sprintf(rxg_fname,"%srxg.lime",optarg);
-				rxg_fd = fopen(rxg_fname,"r");
-				if (rxg_fd) {
-					printf("Loading RX Gain parameters from %s\n",rxg_fname);
-					l=0;
-					while (fgets(line, sizeof(line), rxg_fd)) {
-						if ((strlen(line)==0) || (*line == '#')) continue; //ignore empty or comment lines
-						else {
-							if (l==0) sscanf(line,"%d %d %d %d",&rxg_max[0],&rxg_max[1],&rxg_max[2],&rxg_max[3]);
-							if (l==1) sscanf(line,"%d %d %d %d",&rxg_med[0],&rxg_med[1],&rxg_med[2],&rxg_med[3]);
-							if (l==2) sscanf(line,"%d %d %d %d",&rxg_byp[0],&rxg_byp[1],&rxg_byp[2],&rxg_byp[3]);
-							l++;
-						}
-					}
-				}
-				else
-					printf("%s not found, running with defaults\n",rxg_fname);
-
-				sprintf(txg_fname,"%stxg.lime",optarg);
-				txg_fd = fopen(txg_fname,"r");
-				if (txg_fd) {
-					printf("Loading TX Gain parameters from %s\n",txg_fname);
-					l=0;
-					while (fgets(line, sizeof(line), txg_fd)) {
-						if ((strlen(line)==0) || (*line == '#')) {
-							continue; //ignore empty or comment lines
-						}
-						else {
-							if (l==0) sscanf(line,"%d %d %d %d",&txgain[0],&txgain[1],&txgain[2],&txgain[3]);
-							if (l==1) sscanf(line,"%d",&tx_max_power);
-							l++;
-						}
-					}
-				}
-				else
-					printf("%s not found, running with defaults\n",txg_fname);
-
-				sprintf(rflo_fname,"%srflo.lime",optarg);
-				rflo_fd = fopen(rflo_fname,"r");
-				if (rflo_fd) {
-					printf("Loading RF LO parameters from %s\n",rflo_fname);
-					fscanf(rflo_fd,"%d %d %d %d",&rf_local[0],&rf_local[1],&rf_local[2],&rf_local[3]);
-				}
-				else
-					printf("%s not found, running with defaults\n",rflo_fname);
-
-				sprintf(rfdc_fname,"%srfdc.lime",optarg);
-				rfdc_fd = fopen(rfdc_fname,"r");
-				if (rfdc_fd) {
-					printf("Loading RF DC parameters from %s\n",rfdc_fname);
-					fscanf(rfdc_fd,"%d %d %d %d",&rf_rxdc[0],&rf_rxdc[1],&rf_rxdc[2],&rf_rxdc[3]);
-				}
-				else
-					printf("%s not found, running with defaults\n",rfdc_fname);
-
-				break;
-			case 256:
-				mode = rx_calib_ue;
-				rx_input_level_dBm = atoi(optarg);
-				printf("Running with UE calibration on (LNA max), input level %d dBm\n",rx_input_level_dBm);
-				break;
-			case 257:
-				mode = rx_calib_ue_med;
-				rx_input_level_dBm = atoi(optarg);
-				printf("Running with UE calibration on (LNA med), input level %d dBm\n",rx_input_level_dBm);
-				break;
-			case 258:
-				mode = rx_calib_ue_byp;
-				rx_input_level_dBm = atoi(optarg);
-				printf("Running with UE calibration on (LNA byp), input level %d dBm\n",rx_input_level_dBm);
-				break;
-			case 259:
-				mode = debug_prach;
-				break;
-			case 260:
-				mode = no_L2_connect;
-				break;
-			default:
-				break;
-		}
-	}
-
-	if (UE_flag==1)
-		printf("configuring for UE\n");
-	else
-		printf("configuring for eNB\n");
-
-	//randominit (0);
-	set_taus_seed (0);
-
-	// initialize the log (see log.h for details)
-	logInit();
-
-	if (ouput_vcd) {
-		if (UE_flag==1)
-			vcd_signal_dumper_init("/tmp/openair_dump_UE.vcd");
-		else
-			vcd_signal_dumper_init("/tmp/openair_dump_eNB.vcd");
-	}
-
-#ifdef NAS_NETLINK
-	netlink_init();
-#endif
-
-	// to make a graceful exit when ctrl-c is pressed
-	//signal(SIGSEGV, signal_handler);
-	//signal(SIGINT, signal_handler);
-
-#ifndef RTAI
-	check_clock();
-#endif
-
-	// init the parameters
-	frame_parms = (LTE_DL_FRAME_PARMS*) malloc(sizeof(LTE_DL_FRAME_PARMS));
-	frame_parms->N_RB_DL            = 25;
-	frame_parms->N_RB_UL            = 25;
-	frame_parms->Ncp                = 0;
-	frame_parms->Ncp_UL             = 0;
-	frame_parms->Nid_cell           = Nid_cell;
-	frame_parms->nushift            = 0;
-	frame_parms->nb_antennas_tx_eNB = 1; //initial value overwritten by initial sync later
-	// frame_parms->nb_antennas_tx     = (UE_flag==0) ? 1 : 1;
-	// frame_parms->nb_antennas_rx     = (UE_flag==0) ? 1 : 1;
-	frame_parms->nb_antennas_tx     = 1;
-	frame_parms->nb_antennas_rx     = 1;
-	frame_parms->mode1_flag         = (transmission_mode == 1) ? 1 : 0;
-	frame_parms->frame_type         = 1;
-	frame_parms->tdd_config         = 3;
-	frame_parms->tdd_config_S       = 0;
-	frame_parms->phich_config_common.phich_resource = oneSixth;
-	frame_parms->phich_config_common.phich_duration = normal;
-	// UL RS Config
-	frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = 0;//n_DMRS1 set to 0
-	frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = 0;
-	frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = 0;
-	frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH = 0;
-
-	//print [PHY] ... message
-	init_ul_hopping(frame_parms);
-
-	//print [PHY][I][INIT]... message
-	init_frame_parms(frame_parms,1);
-
-	phy_init_top(frame_parms);
-	phy_init_lte_top(frame_parms);
-
-	//init prach for openair1 test
-	frame_parms->prach_config_common.rootSequenceIndex=22;
-	frame_parms->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig=1;
-	frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex=0;
-	frame_parms->prach_config_common.prach_ConfigInfo.highSpeedFlag=0;
-	frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset=0;
-	prach_fmt = get_prach_fmt(frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex,
-			frame_parms->frame_type);
-	N_ZC = (prach_fmt <4)?839:139;
-
-	if (UE_flag==1) {
-#ifdef OPENAIR2
-		g_log->log_component[PHY].level = LOG_INFO;
-#else
-		g_log->log_component[PHY].level = LOG_INFO;
-#endif
-		g_log->log_component[PHY].flag  = LOG_HIGH;
-		g_log->log_component[MAC].level = LOG_INFO;
-		g_log->log_component[MAC].flag  = LOG_HIGH;
-		g_log->log_component[RLC].level = LOG_INFO;
-		g_log->log_component[RLC].flag  = LOG_HIGH;
-		g_log->log_component[PDCP].level = LOG_INFO;
-		g_log->log_component[PDCP].flag  = LOG_HIGH;
-		g_log->log_component[OTG].level = LOG_INFO;
-		g_log->log_component[OTG].flag  = LOG_HIGH;
-		g_log->log_component[RRC].level = LOG_INFO;
-		g_log->log_component[RRC].flag  = LOG_HIGH;
-
-		PHY_vars_UE_g = malloc(sizeof(PHY_VARS_UE*));
-		//print [PHY][I][init_lte_eNB]... messages
-		PHY_vars_UE_g[0] = init_lte_UE(frame_parms, UE_id,abstraction_flag,transmission_mode);
-
-#ifndef OPENAIR2
-		for (i=0;i<NUMBER_OF_eNB_MAX;i++) {
-			PHY_vars_UE_g[0]->pusch_config_dedicated[i].betaOffset_ACK_Index = beta_ACK;
-			PHY_vars_UE_g[0]->pusch_config_dedicated[i].betaOffset_RI_Index  = beta_RI;
-			PHY_vars_UE_g[0]->pusch_config_dedicated[i].betaOffset_CQI_Index = beta_CQI;
-
-			PHY_vars_UE_g[0]->scheduling_request_config[i].sr_PUCCH_ResourceIndex = UE_id;
-			PHY_vars_UE_g[0]->scheduling_request_config[i].sr_ConfigIndex = 7+(UE_id%3);
-			PHY_vars_UE_g[0]->scheduling_request_config[i].dsr_TransMax = sr_n4;
-		}
-#endif
-
-		compute_prach_seq(&PHY_vars_UE_g[0]->lte_frame_parms.prach_config_common,
-				PHY_vars_UE_g[0]->lte_frame_parms.frame_type,
-				PHY_vars_UE_g[0]->X_u);
-
-		PHY_vars_UE_g[0]->lte_ue_pdcch_vars[0]->crnti = 0x1234;
-#ifndef OPENAIR2
-		PHY_vars_UE_g[0]->lte_ue_pdcch_vars[0]->crnti = 0x1235;
-#endif
-		NB_UE_INST=1;
-		NB_INST=1;
-
-		openair_daq_vars.manual_timing_advance = 0;
-		//openair_daq_vars.timing_advance = TIMING_ADVANCE_HW;
-		openair_daq_vars.rx_gain_mode = DAQ_AGC_OFF;
-		openair_daq_vars.auto_freq_correction = 0;
-		openair_daq_vars.use_ia_receiver = 1;
-
-		// if AGC is off, the following values will be used
-		//    for (i=0;i<4;i++)
-		//    rxgain[i] = 20;
-		rxgain[0] = 20;
-		rxgain[1] = 20;
-		rxgain[2] = 20;
-		rxgain[3] = 20;
-
-		for (i=0;i<4;i++) {
-			PHY_vars_UE_g[0]->rx_gain_max[i] = rxg_max[i];
-			PHY_vars_UE_g[0]->rx_gain_med[i] = rxg_med[i];
-			PHY_vars_UE_g[0]->rx_gain_byp[i] = rxg_byp[i];
-		}
-
-		if ((mode == normal_txrx) || (mode == rx_calib_ue) || (mode == no_L2_connect) || (mode == debug_prach)) {
-			for (i=0; i<4; i++) {
-				PHY_vars_UE_g[0]->rx_gain_mode[i]  = max_gain;
-				//            frame_parms->rfmode[i] = rf_mode_max[i];
-				rf_mode[i] = (rf_mode[i] & (~LNAGAINMASK)) | LNAMax;
-			}
-			PHY_vars_UE_g[0]->rx_total_gain_dB =  PHY_vars_UE_g[0]->rx_gain_max[0] + rxgain[0] - 30; //-30 because it was calibrated with a 30dB gain
-		}
-		else if ((mode == rx_calib_ue_med)) {
-			for (i=0; i<4; i++) {
-				PHY_vars_UE_g[0]->rx_gain_mode[i] = med_gain;
-				//            frame_parms->rfmode[i] = rf_mode_med[i];
-				rf_mode[i] = (rf_mode[i] & (~LNAGAINMASK)) | LNAMed;
-			}
-			PHY_vars_UE_g[0]->rx_total_gain_dB =  PHY_vars_UE_g[0]->rx_gain_med[0]  + rxgain[0] - 30; //-30 because it was calibrated with a 30dB gain;
-		}
-		else if ((mode == rx_calib_ue_byp)) {
-			for (i=0; i<4; i++) {
-				PHY_vars_UE_g[0]->rx_gain_mode[i] = byp_gain;
-				//            frame_parms->rfmode[i] = rf_mode_byp[i];
-				rf_mode[i] = (rf_mode[i] & (~LNAGAINMASK)) | LNAByp;
-			}
-			PHY_vars_UE_g[0]->rx_total_gain_dB =  PHY_vars_UE_g[0]->rx_gain_byp[0]  + rxgain[0] - 30; //-30 because it was calibrated with a 30dB gain;
-		}
-
-		PHY_vars_UE_g[0]->tx_power_max_dBm = tx_max_power;
-
-		printf("tx_max_power = %d -> amp %d\n",tx_max_power,get_tx_amp(tx_max_power,tx_max_power));
-	}
-	else { //this is eNB
-#ifdef OPENAIR2
-		g_log->log_component[PHY].level = LOG_INFO;
-#else
-		g_log->log_component[PHY].level = LOG_INFO;
-#endif
-		g_log->log_component[PHY].flag  = LOG_HIGH;
-
-		g_log->log_component[MAC].level = LOG_INFO;
-		g_log->log_component[MAC].flag  = LOG_HIGH;
-		g_log->log_component[RLC].level = LOG_INFO;
-		g_log->log_component[RLC].flag  = LOG_HIGH;
-		g_log->log_component[PDCP].level = LOG_INFO;
-		g_log->log_component[PDCP].flag  = LOG_HIGH;
-		g_log->log_component[OTG].level = LOG_INFO;
-		g_log->log_component[OTG].flag  = LOG_HIGH;
-		g_log->log_component[RRC].level = LOG_INFO;
-		g_log->log_component[RRC].flag  = LOG_HIGH;
-
-
-		PHY_vars_eNB_g = malloc(sizeof(PHY_VARS_eNB*));
-		PHY_vars_eNB_g[0] = init_lte_eNB(frame_parms,eNB_id,Nid_cell,cooperation_flag,transmission_mode,abstraction_flag);
-
-#ifndef OPENAIR2
-		for (i=0;i<NUMBER_OF_UE_MAX;i++) {
-			PHY_vars_eNB_g[0]->pusch_config_dedicated[i].betaOffset_ACK_Index = beta_ACK;
-			PHY_vars_eNB_g[0]->pusch_config_dedicated[i].betaOffset_RI_Index  = beta_RI;
-			PHY_vars_eNB_g[0]->pusch_config_dedicated[i].betaOffset_CQI_Index = beta_CQI;
-
-			PHY_vars_eNB_g[0]->scheduling_request_config[i].sr_PUCCH_ResourceIndex = i;
-			PHY_vars_eNB_g[0]->scheduling_request_config[i].sr_ConfigIndex = 7+(i%3);
-			PHY_vars_eNB_g[0]->scheduling_request_config[i].dsr_TransMax = sr_n4;
-		}
-#endif
-
-		compute_prach_seq(&PHY_vars_eNB_g[0]->lte_frame_parms.prach_config_common,
-				PHY_vars_eNB_g[0]->lte_frame_parms.frame_type,
-				PHY_vars_eNB_g[0]->X_u);
-
-		NB_eNB_INST=1;
-		NB_INST=1;
-
-		openair_daq_vars.ue_dl_rb_alloc=0x1fff;
-		openair_daq_vars.target_ue_dl_mcs=20;
-		openair_daq_vars.ue_ul_nb_rb=6;
-		openair_daq_vars.target_ue_ul_mcs=9;
-
-		// if AGC is off, the following values will be used
-		//    for (i=0;i<4;i++)
-		//      rxgain[i]=30;
-		rxgain[0] = 20;
-		rxgain[1] = 20;
-		rxgain[2] = 20;
-		rxgain[3] = 20;
-
-
-		// set eNB to max gain
-		PHY_vars_eNB_g[0]->rx_total_gain_eNB_dB =  rxg_max[0] + rxgain[0] - 30; //was measured at rxgain=30;
-		for (i=0; i<4; i++) {
-			//        frame_parms->rfmode[i] = rf_mode_max[i];
-			rf_mode[i] = (rf_mode[i] & (~LNAGAINMASK)) | LNAMax;
-		}
-
-
-	}
-
-	dump_frame_parms(frame_parms);
-
-	mac_xface = malloc(sizeof(MAC_xface));
-
-#ifdef OPENAIR2
-	int eMBMS_active=0;
-
-	//print [MAC][I]... messages
-	//l2_init(frame_parms,eMBMS_active);
-	l2_init(frame_parms,eMBMS_active,
-		0,// cba_group_active
-		0); // HO flag
-	if (UE_flag == 1)
-		mac_xface->dl_phy_sync_success (0, 0, 0, 1);
-	else
-		mac_xface->mrbch_phy_sync_failure (0, 0, 0);
-#endif
-
-	mac_xface->macphy_exit = &exit_fun;
-
-#ifdef OPENAIR2
-	//if (otg_enabled) {
-	init_all_otg(0);
-	g_otg->seed = 0;
-	init_seeds(g_otg->seed);
-	g_otg->num_nodes = 2;
-	for (i=0; i<g_otg->num_nodes; i++){
-		for (j=0; j<g_otg->num_nodes; j++){
-			g_otg->application_idx[i][j] = 1;
-			//g_otg->packet_gen_type=SUBSTRACT_STRING;
-			g_otg->aggregation_level[i][j][0]=1;
-			g_otg->application_type[i][j][0] = BCBR; //MCBR, BCBR
-		}
-	}
-	init_predef_traffic();
-
-	//USRP INIT
-	UHD_init();
-	UHD_init_display();
-	Init_send();
-	Init_recv();
-	printf("USRP init DONE...\n");
-	//  }
-#endif
-	// connect the TX/RX buffers
-	if (UE_flag==1) {
-		setup_ue_buffers(PHY_vars_UE_g[0],frame_parms,0);
-		printf("Setting UE buffer to all-RX\n");
-	}
-	else {
-		setup_eNB_buffers(PHY_vars_eNB_g[0],frame_parms,0);
-		if (fs4_test==0)
-		{
-			printf("Setting eNB buffer to all-RX\n");
-		}
-		else {
-			printf("Setting eNB buffer to fs/4 test signal\n");
-			for (j=0; j<PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti*10; j+=4)
-				for (aa=0; aa<frame_parms->nb_antennas_tx; aa++)
-				{
-					amp = 0x8000;
-					((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+1] = 0;
-					((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+3] = amp-1;
-					((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+5] = 0;
-					((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+7] = amp;
-					((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j] = amp-1;
-					((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+2] = 0;
-					((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+4] = amp;
-					((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+6] = 0;
-				}
-		}
-	}
-
-	//rt_sleep_ns(10*FRAME_PERIOD);//delay one second
-
-#ifndef RTAI
-	pthread_attr_init (&attr_dlsch_threads);
-	pthread_attr_setstacksize(&attr_dlsch_threads,OPENAIR_THREAD_STACK_SIZE);
-	//attr_dlsch_threads.priority = 1;
-	sched_param_dlsch.sched_priority = sched_get_priority_max(SCHED_FIFO); //OPENAIR_THREAD_PRIORITY;
-	pthread_attr_setschedparam  (&attr_dlsch_threads, &sched_param_dlsch);
-	pthread_attr_setschedpolicy (&attr_dlsch_threads, SCHED_FIFO);
-#endif
-
-	// start the main thread
-	if (UE_flag == 1) {
-#ifdef RTAI
-		thread1 = rt_thread_create(UE_thread, NULL, 100000000);
-		thread_recv = rt_thread_create(usrp_thread, NULL, 100000000);
-#else
-		error_code = pthread_create(&thread1, &attr_dlsch_threads, UE_thread, NULL);
-		if (error_code!= 0) {
-			LOG_D(HW,"[lte-softmodem.c] Could not allocate UE_thread, error %d\n",error_code);
-			return(error_code);
-		}
-		else {
-			LOG_D(HW,"[lte-softmodem.c] Allocate UE_thread successful\n");
-		}
-		pthread_create(&thread_recv, NULL, usrp_thread, NULL);
-#endif
-#ifdef DLSCH_THREAD//defined
-		init_rx_pdsch_thread();
-		//rt_sleep_ns(FRAME_PERIOD/10);
-		init_dlsch_threads();
-#endif
-	}
-	else {
-#ifdef RTAI
-		thread0 = rt_thread_create(eNB_thread, NULL, 100000000);
-		thread_recv = rt_thread_create(usrp_thread, NULL, 100000000);
-#else
-		error_code = pthread_create(&thread0, &attr_dlsch_threads, eNB_thread, NULL);
-		if (error_code!= 0) {
-			LOG_D(HW,"[lte-softmodem.c] Could not allocate eNB_thread, error %d\n",error_code);
-			return(error_code);
-		}
-		else {
-			LOG_D(HW,"[lte-softmodem.c] Allocate eNB_thread successful\n");
-		}
-		pthread_create(&thread_recv, NULL, usrp_thread, NULL);
-#endif
-#ifdef ULSCH_THREAD//not defined
-		init_ulsch_threads();
-#endif
-	}
-	pthread_create(&thread_tx_error, NULL, tx_error_handler, NULL);
-
-	// wait for end of program
-	usleep(500);
-	printf("TYPE <CTRL-C> TO TERMINATE\n");
-	signal(SIGINT, &sig_int_handler);
-
-	while (oai_exit==0)
-	    sleep(1);
-
-	// cleanup
-	pthread_join(thread_tx_error,&status);
-
-	if (UE_flag == 1) {
-#ifdef RTAI
-		rt_thread_join(thread1);
-		rt_thread_join(thread_recv);
-#else
-		pthread_join(thread1,&status);
-		pthread_join(thread_recv,&status);
-#endif
-#ifdef DLSCH_THREAD
-		printf("waiting for DLSCH_THREAD thread\n");
-		cleanup_dlsch_threads();
-		cleanup_rx_pdsch_thread();
-#endif
-	}
-	else {
-#ifdef RTAI
-		printf("Cleanup eNB thread and usrp thread\n");
-		rt_thread_join(thread0);
-		rt_thread_join(thread_recv);
-#else
-		pthread_join(thread0,&status);
-		pthread_join(thread_recv,&status);
-#endif
-#ifdef ULSCH_THREAD
-		printf("waiting for ULSCH_THREAD thread\n");
-		cleanup_ulsch_threads();
-#endif
-	}
-
-
-	logClean();
-
-	printf("Program Done!\n");
-	return 0;
-}
-
-void test_config(int card, int ant, unsigned int rf_mode, int UE_flag)
-{
-	p_exmimo_config->framing.eNB_flag   = !UE_flag;
-	p_exmimo_config->framing.tdd_config = 0;
-	p_exmimo_config->framing.resampling_factor = 2;
-
-	p_exmimo_config->rf.rf_freq_rx[ant] = 1907600000;
-	p_exmimo_config->rf.rf_freq_tx[ant] = 1907600000;;
-	p_exmimo_config->rf.rx_gain[ant][0] = 20;
-	p_exmimo_config->rf.tx_gain[ant][0] = 10;
-	p_exmimo_config->rf.rf_mode[ant] = rf_mode;
-
-	p_exmimo_config->rf.rf_local[ant] = build_rflocal(20,25,26,04);
-	p_exmimo_config->rf.rf_rxdc[ant] = build_rfdc(128, 128);
-	p_exmimo_config->rf.rf_vcocal[ant] = (0xE<<6) + 0xE;
-}
-
-void setup_ue_buffers(PHY_VARS_UE *phy_vars_ue, LTE_DL_FRAME_PARMS *frame_parms, int carrier) {
-
-	int i;
-	if (phy_vars_ue) {
-
-		if ((frame_parms->nb_antennas_rx>1) && (carrier>0)) {
-			printf("RX antennas > 1 and carrier > 0 not possible\n");
-			exit(-1);
-		}
-
-		if ((frame_parms->nb_antennas_tx>1) && (carrier>0)) {
-			printf("TX antennas > 1 and carrier > 0 not possible\n");
-			exit(-1);
-		}
-
-		// replace RX signal buffers with mmaped HW versions
-		for (i=0;i<frame_parms->nb_antennas_rx;i++) {
-			free(phy_vars_ue->lte_ue_common_vars.rxdata[i]);
-			phy_vars_ue->lte_ue_common_vars.rxdata[i] = (s32*) oai_rx_buff;
-			printf("rxdata[%d] @ %p\n",i,phy_vars_ue->lte_ue_common_vars.rxdata[i]);
-		}
-		for (i=0;i<frame_parms->nb_antennas_tx;i++) {
-			free(phy_vars_ue->lte_ue_common_vars.txdata[i]);
-			phy_vars_ue->lte_ue_common_vars.txdata[i] = (s32*) oai_tx_buff;
-			printf("txdata[%d] @ %p\n",i,phy_vars_ue->lte_ue_common_vars.txdata[i]);
-		}
-	}
-}
-void setup_eNB_buffers(PHY_VARS_eNB *phy_vars_eNB, LTE_DL_FRAME_PARMS *frame_parms, int carrier) {
-
-	int i;
-	if (phy_vars_eNB) {
-		if ((frame_parms->nb_antennas_rx>1) && (carrier>0)) {
-			printf("RX antennas > 1 and carrier > 0 not possible\n");
-			exit(-1);
-		}
-
-		if ((frame_parms->nb_antennas_tx>1) && (carrier>0)) {
-			printf("TX antennas > 1 and carrier > 0 not possible\n");
-			exit(-1);
-		}
-
-		// replace RX signal buffers with mmaped HW versions
-		for (i=0;i<frame_parms->nb_antennas_rx;i++) {
-			free(phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i]);
-			phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i] = (s32 *) oai_rx_buff;
-			printf("rxdata[%d] @ %p\n",i,phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i]);
-			/* for (j=0;j<16;j++) {
-			   printf("rxbuffer %d: %x\n",j,phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i][j]);
-			   phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i][j] = 16-j;
-			   }*/
-		}
-		for (i=0;i<frame_parms->nb_antennas_tx;i++) {
-			free(phy_vars_eNB->lte_eNB_common_vars.txdata[0][i]);
-			phy_vars_eNB->lte_eNB_common_vars.txdata[0][i] = (s32 *) oai_tx_buff;
-			printf("txdata[%d] @ %p\n",i,phy_vars_eNB->lte_eNB_common_vars.txdata[0][i]);
-			/*  for (j=0;j<16;j++) {
-			    printf("txbuffer %d: %x\n",j,phy_vars_eNB->lte_eNB_common_vars.txdata[0][i][j]);
-			    phy_vars_eNB->lte_eNB_common_vars.txdata[0][i][j] = 16-j;
-			    }*/
-		}
-	}
-}
-- 
GitLab