From a026c87bbe6cf5cb530316b481701a361fee1580 Mon Sep 17 00:00:00 2001
From: Florian Kaltenberger <florian.kaltenberger@eurecom.fr>
Date: Fri, 11 Apr 2014 09:56:55 +0000
Subject: [PATCH] updating EXMIMO2 firmware (corresponding to r5585 of
 openair0) and driver updating emos-raw (seperate thread for logfile, GPS
 supported again) small cosmetic changes in openair1

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5241 818b1a75-f10b-46b9-bf7c-635c3b92a50f
---
 .../LTE/IMPORT_FILTER/struct_template_new.m   |   2 +
 openair1/PHY/LTE_TRANSPORT/dci_tools.c        |   2 +-
 openair1/PHY/LTE_TRANSPORT/initial_sync.c     |  10 +-
 openair1/PHY/LTE_TRANSPORT/print_stats.c      |   9 +-
 openair1/PHY/TOOLS/defs.h                     |   7 +-
 openair1/PHY/impl_defs_top.h                  |   6 +-
 openair1/SCHED/phy_procedures_lte_eNb.c       |  12 +-
 openair1/SCHED/phy_procedures_lte_ue.c        |  17 +-
 openair1/SIMULATION/RF/dac.c                  |   1 +
 openair1/SIMULATION/TOOLS/defs.h              |   2 +-
 targets/ARCH/EXMIMO/DEFS/openair_device.h     |   4 +-
 .../ARCH/EXMIMO/DRIVER/eurecom/module_main.c  |  24 +-
 .../ARCH/EXMIMO/USERSPACE/LIB/gain_control.c  |   2 -
 .../ARCH/EXMIMO/USERSPACE/LIB/gain_control.h  |   8 +-
 .../OAI_FW_INIT/sdr_expressmimo2_v10          | Bin 203231 -> 226928 bytes
 targets/RTAI/USER/Makefile                    |   7 +-
 targets/RTAI/USER/emos-raw.c                  | 214 +++++++++++++-----
 17 files changed, 223 insertions(+), 104 deletions(-)

diff --git a/openair1/EMOS/LTE/IMPORT_FILTER/struct_template_new.m b/openair1/EMOS/LTE/IMPORT_FILTER/struct_template_new.m
index 8e4946e57b..dd0a84560a 100644
--- a/openair1/EMOS/LTE/IMPORT_FILTER/struct_template_new.m
+++ b/openair1/EMOS/LTE/IMPORT_FILTER/struct_template_new.m
@@ -44,6 +44,8 @@ phy_measurements_struct = struct(...
     'n_adj_cells_id',       uint32(zeros(1,6)),...
     'rsrq',                 int32(zeros(1,7)),...
     'rsrp',                 int32(zeros(1,7)),...
+    'rsrp_filtered',        single(zeros(1,7)),...
+    'rsrq_filtered',        single(zeros(1,7)),...
     'n0_power',             uint32(zeros(1,NB_ANTENNAS_RX)),...
     'n0_power_dB',          uint16(zeros(1,NB_ANTENNAS_RX)),...
     'n0_power_tot',         uint32(0),...
diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
index 920ce8c479..cb28ae488f 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
@@ -1582,7 +1582,7 @@ int dump_dci(LTE_DL_FRAME_PARMS *frame_parms, DCI_ALLOC_t *dci) {
     break;
   case format1E_2A_M10PRB:
 
-    msg("DCI format1E_2A_M10PRB, rnti %x (%8x): harq_pid %d, rah %d, rb_alloc %x, mcs %d, rv %d, tpmi %d, ndi %d, dl_power_offset %d\n",
+    LOG_D(PHY,"DCI format1E_2A_M10PRB, rnti %x (%8x): harq_pid %d, rah %d, rb_alloc %x, mcs %d, rv %d, tpmi %d, ndi %d, dl_power_offset %d\n",
 	dci->rnti,
 	((uint32_t *)&dci->dci_pdu)[0],
 	((DCI1E_5MHz_2A_M10PRB_TDD_t *)&dci->dci_pdu[0])->harq_pid,
diff --git a/openair1/PHY/LTE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_TRANSPORT/initial_sync.c
index 8b412d9e04..c427cf27de 100644
--- a/openair1/PHY/LTE_TRANSPORT/initial_sync.c
+++ b/openair1/PHY/LTE_TRANSPORT/initial_sync.c
@@ -44,8 +44,9 @@
 #include "SCHED/extern.h"
 #include "defs.h"
 #include "extern.h"
-
-
+#ifdef EXMIMO
+#include "gain_control.h"
+#endif
 
 //#define DEBUG_INITIAL_SYNCH
 
@@ -270,9 +271,12 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode) {
   LOG_I(PHY,"[UE%d] Initial sync : Estimated power: %d dB\n",phy_vars_ue->Mod_id,phy_vars_ue->PHY_measurements.rx_power_avg_dB[0] );
 #endif
   
+#ifdef EXMIMO
   if ((openair_daq_vars.rx_gain_mode == DAQ_AGC_ON) &&
       (mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) )
-    phy_adjust_gain(phy_vars_ue,0);
+    //phy_adjust_gain(phy_vars_ue,0);
+    gain_control_all(phy_vars_ue->PHY_measurements.rx_power_avg_dB[0],0);
+#endif
 
   // SSS detection
  
diff --git a/openair1/PHY/LTE_TRANSPORT/print_stats.c b/openair1/PHY/LTE_TRANSPORT/print_stats.c
index 05d82bee5d..3db7055ab9 100644
--- a/openair1/PHY/LTE_TRANSPORT/print_stats.c
+++ b/openair1/PHY/LTE_TRANSPORT/print_stats.c
@@ -95,9 +95,9 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t
 #else
 #ifdef EXMIMO
 #ifdef DRIVER2013
-    len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB (rf_mode %d, vga %d dB)\n",phy_vars_ue->rx_total_gain_dB, phy_vars_ue->rx_gain_mode[0],p_exmimo_config->rf.rx_gain[0][0]);
+    len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB (LNA %d, vga %d dB)\n",phy_vars_ue->rx_total_gain_dB, (p_exmimo_config->rf.rf_mode[0]& LNAGAINMASK) >> 14,p_exmimo_config->rf.rx_gain[0][0]);
 #else
-    len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB (rf_mode %d, vga %d dB)\n",phy_vars_ue->rx_total_gain_dB, phy_vars_ue->rx_gain_mode[0],exmimo_pci_interface->rf.rx_gain00);
+    len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB (LNA %d, vga %d dB)\n",phy_vars_ue->rx_total_gain_dB, (p_exmimo_config->rf.rf_mode[0]& LNAGAINMASK) >> 14,exmimo_pci_interface->rf.rx_gain00);
 #endif
 #else
     len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB\n",phy_vars_ue->rx_total_gain_dB);
@@ -199,6 +199,11 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t
       len += sprintf(&buffer[len],"[UE PROC] RSRP[0] %d, RSSI %d, RSRQ[0] %d\n",phy_vars_ue->PHY_measurements.rsrp[0], phy_vars_ue->PHY_measurements.rssi, phy_vars_ue->PHY_measurements.rsrq[0]);
     
     len += sprintf(&buffer[len], "[UE PROC] Transmission Mode %d (mode1_flag %d)\n",phy_vars_ue->transmission_mode[eNB],phy_vars_ue->lte_frame_parms.mode1_flag);
+    len += sprintf(&buffer[len], "[UE PROC] PBCH err conseq %d, PBCH error total %d, PBCH FER %d\n",
+		   phy_vars_ue->lte_ue_pbch_vars[eNB]->pdu_errors_conseq,
+		   phy_vars_ue->lte_ue_pbch_vars[eNB]->pdu_errors,
+		   phy_vars_ue->lte_ue_pbch_vars[eNB]->pdu_fer);
+
     if (phy_vars_ue->transmission_mode[eNB] == 6)
       len += sprintf(&buffer[len], "[UE PROC] Mode 6 Wideband CQI eNB %d : %d dB\n",eNB,phy_vars_ue->PHY_measurements.precoded_cqi_dB[eNB][0]);
     if (phy_vars_ue->dlsch_ue[0] && phy_vars_ue->dlsch_ue[0][0] && phy_vars_ue->dlsch_ue[0][1]) {
diff --git a/openair1/PHY/TOOLS/defs.h b/openair1/PHY/TOOLS/defs.h
index 91547fcd04..641c623aea 100644
--- a/openair1/PHY/TOOLS/defs.h
+++ b/openair1/PHY/TOOLS/defs.h
@@ -7,13 +7,8 @@
 * @{
 
 */
- 
-#ifndef NO_OPENAIR1
-#include "PHY/defs.h"
-#else
+
 #include <stdint.h>
-#define msg printf
-#endif
 
 #ifdef __SSE2__
 #include <emmintrin.h>
diff --git a/openair1/PHY/impl_defs_top.h b/openair1/PHY/impl_defs_top.h
index 17d46e6b15..cf86eb5aa6 100755
--- a/openair1/PHY/impl_defs_top.h
+++ b/openair1/PHY/impl_defs_top.h
@@ -171,9 +171,9 @@
 
 
 #ifdef EXMIMO
-#define TARGET_RX_POWER 40		// Target digital power for the AGC
-#define TARGET_RX_POWER_MAX 65		// Maximum digital power, such that signal does not saturate (value found by simulation)
-#define TARGET_RX_POWER_MIN 30		// Minimum digital power, anything below will be discarded (value found by simulation)
+#define TARGET_RX_POWER 55		// Target digital power for the AGC
+#define TARGET_RX_POWER_MAX 55		// Maximum digital power, such that signal does not saturate (value found by simulation)
+#define TARGET_RX_POWER_MIN 50		// Minimum digital power, anything below will be discarded (value found by simulation)
 #else
 #define TARGET_RX_POWER 50		// Target digital power for the AGC
 #define TARGET_RX_POWER_MAX 65		// Maximum digital power, such that signal does not saturate (value found by simulation)
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index 40e7557892..d2c6209ac5 100755
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -541,7 +541,7 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *phy_vars_eNB) {
       BCCH_alloc_pdu.type              = 1;
       BCCH_alloc_pdu.vrb_type          = 0;
       BCCH_alloc_pdu.rballoc           = computeRIV(25,10,3);
-      BCCH_alloc_pdu.ndi               = 1;
+      BCCH_alloc_pdu.ndi               = phy_vars_eNB->frame&1;
       BCCH_alloc_pdu.rv                = 1;
       BCCH_alloc_pdu.mcs               = 1;
       BCCH_alloc_pdu.harq_pid          = 0;
@@ -586,7 +586,7 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *phy_vars_eNB) {
       DLSCH_alloc_pdu.harq_pid         = 0;
       DLSCH_alloc_pdu.mcs              = openair_daq_vars.target_ue_dl_mcs;
       //DLSCH_alloc_pdu.mcs              = (unsigned char) ((phy_vars_eNB->frame%1024)%28);      
-      DLSCH_alloc_pdu.ndi              = 1;
+      DLSCH_alloc_pdu.ndi              = phy_vars_eNB->frame&1;
       DLSCH_alloc_pdu.rv               = 0;
       memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&DLSCH_alloc_pdu,sizeof(DCI1_5MHz_TDD_t));
 
@@ -620,7 +620,7 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *phy_vars_eNB) {
       
       DLSCH_alloc_pdu1E.tpmi             = 5; //5=use feedback
       DLSCH_alloc_pdu1E.rv               = 0;
-      DLSCH_alloc_pdu1E.ndi              = 1;
+      DLSCH_alloc_pdu1E.ndi              = phy_vars_eNB->frame&1;
       //DLSCH_alloc_pdu1E.mcs            = cqi_to_mcs[phy_vars_eNB->eNB_UE_stats->DL_cqi[0]];
       //DLSCH_alloc_pdu1E.mcs            = (unsigned char) (taus()%28);
       DLSCH_alloc_pdu1E.mcs              = openair_daq_vars.target_ue_dl_mcs;
@@ -687,7 +687,7 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *phy_vars_eNB) {
     UL_alloc_pdu.hopping = 0;
     UL_alloc_pdu.rballoc = computeRIV(25,2,openair_daq_vars.ue_ul_nb_rb);
     UL_alloc_pdu.mcs     = openair_daq_vars.target_ue_ul_mcs;
-    UL_alloc_pdu.ndi     = 1;
+    UL_alloc_pdu.ndi     = phy_vars_eNB->frame&1;
     UL_alloc_pdu.TPC     = 0;
     UL_alloc_pdu.cshift  = 0;
     UL_alloc_pdu.dai     = 0;
@@ -707,7 +707,7 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *phy_vars_eNB) {
     else 
       UL_alloc_pdu.rballoc = computeRIV(25,0,openair_daq_vars.ue_ul_nb_rb);
     UL_alloc_pdu.mcs     = openair_daq_vars.target_ue_ul_mcs;
-    UL_alloc_pdu.ndi     = 1;
+    UL_alloc_pdu.ndi     = phy_vars_eNB->frame&1;
     UL_alloc_pdu.TPC     = 0;
     if ((cooperation_flag==0) || (cooperation_flag==1))
       UL_alloc_pdu.cshift  = 0;
@@ -1377,11 +1377,13 @@ void phy_procedures_eNB_TX(unsigned char next_slot,PHY_VARS_eNB *phy_vars_eNB,ui
 #else
     DCI_pdu = &DCI_pdu_tmp;
 #ifdef EMOS
+    /*
     if (((phy_vars_eNB->frame%1024)%3 == 0) && (next_slot == 0)) {
       //openair_daq_vars.target_ue_dl_mcs = (openair_daq_vars.target_ue_dl_mcs+1)%28;
       openair_daq_vars.target_ue_dl_mcs = taus()%28;
       LOG_D(PHY,"[MYEMOS] frame %d, increasing MCS to %d\n",phy_vars_eNB->frame,openair_daq_vars.target_ue_dl_mcs);
     }
+    */
     /*
     if (phy_vars_eNB->frame > 28000) {
       LOG_E(PHY,"More that 28000 frames reached! Exiting!\n");
diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c
index 39d5c6ebf7..9ba21bf93f 100755
--- a/openair1/SCHED/phy_procedures_lte_ue.c
+++ b/openair1/SCHED/phy_procedures_lte_ue.c
@@ -54,6 +54,7 @@
 #ifdef EXMIMO
 #ifdef DRIVER2013
 #include "openair0_lib.h"
+#include "gain_control.h"
 extern int card;
 #else
 #include "ARCH/CBMIMO1/DEVICE_DRIVER/extern.h"
@@ -1480,11 +1481,13 @@ void lte_ue_measurement_procedures(uint8_t last_slot, uint16_t l, PHY_VARS_UE *p
   if ((last_slot==1) && (l==(4-frame_parms->Ncp))) {
     
     // AGC
-    
+#ifdef EXMIMO    
     if ((openair_daq_vars.rx_gain_mode == DAQ_AGC_ON) &&
 	(mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) )
-        phy_adjust_gain (phy_vars_ue,0);
-    
+      //phy_adjust_gain (phy_vars_ue,0);
+      gain_control_all(phy_vars_ue->PHY_measurements.rx_power_avg_dB[eNB_id],0);
+#endif
+
     eNB_id = 0;
     
     if (abstraction_flag == 0) 
@@ -2284,7 +2287,11 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v
       openair_daq_vars.use_ia_receiver = 0;
     else
       openair_daq_vars.use_ia_receiver = (openair_daq_vars.use_ia_receiver+1)%3;
-    LOG_I(PHY,"[MYEMOS] frame %d, IA receiver %d, MCS %d, bitrate %d\n",phy_vars_ue->frame,openair_daq_vars.use_ia_receiver, phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs,phy_vars_ue->bitrate[eNB_id]);
+    LOG_I(PHY,"[MYEMOS] frame %d, IA receiver %d, MCS %d, bitrate %d\n",
+	  phy_vars_ue->frame,
+	  openair_daq_vars.use_ia_receiver, 
+	  phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->mcs,
+	  phy_vars_ue->bitrate[eNB_id]);
   } 
 #endif
 
@@ -2405,7 +2412,7 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v
       if (phy_vars_ue->dlsch_ue[eNB_id][0]->active == 1) {
 #ifndef DLSCH_THREAD //USER_MODE
 	harq_pid = phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid;
-	//	printf("PDSCH active in subframe %d, harq_pid %d\n",(last_slot>>1)-1,harq_pid); 
+	//printf("PDSCH active in subframe %d, harq_pid %d\n",(last_slot>>1)-1,harq_pid); 
 	if ((phy_vars_ue->transmission_mode[eNB_id] == 5) && 
 	    (phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->dl_power_off==0) &&
 	    (openair_daq_vars.use_ia_receiver ==1)) {
diff --git a/openair1/SIMULATION/RF/dac.c b/openair1/SIMULATION/RF/dac.c
index a959a1d6a3..ef82c1f2df 100755
--- a/openair1/SIMULATION/RF/dac.c
+++ b/openair1/SIMULATION/RF/dac.c
@@ -1,5 +1,6 @@
 #define DEBUG_DAC 1
 #include <math.h>
+#include <stdio.h>
 #include "PHY/TOOLS/defs.h"
 
 void dac(double **s_re,
diff --git a/openair1/SIMULATION/TOOLS/defs.h b/openair1/SIMULATION/TOOLS/defs.h
index 6a28ad512c..d7a39c03eb 100644
--- a/openair1/SIMULATION/TOOLS/defs.h
+++ b/openair1/SIMULATION/TOOLS/defs.h
@@ -1,6 +1,6 @@
 #ifndef __SIMULATION_TOOLS_DEFS_H__
 #define __SIMULATION_TOOLS_DEFS_H__
-#include "PHY/TOOLS/defs.h"
+#include "PHY/defs.h"
 
 /** @defgroup _numerical_ Useful Numerical Functions
  *@{
diff --git a/targets/ARCH/EXMIMO/DEFS/openair_device.h b/targets/ARCH/EXMIMO/DEFS/openair_device.h
index 5ba4587ac9..8be9a27137 100755
--- a/targets/ARCH/EXMIMO/DEFS/openair_device.h
+++ b/targets/ARCH/EXMIMO/DEFS/openair_device.h
@@ -4,8 +4,8 @@
 
 // Maximum number of concurrently supported cards
 //
-#define MAX_CARDS   20
-#define INIT_ZEROS {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
+#define MAX_CARDS   8
+#define INIT_ZEROS {0, 0, 0, 0, 0, 0, 0, 0};
 
 
 /** PCIe subsystem configuration Space
diff --git a/targets/ARCH/EXMIMO/DRIVER/eurecom/module_main.c b/targets/ARCH/EXMIMO/DRIVER/eurecom/module_main.c
index af776cceb8..9f5e32d992 100755
--- a/targets/ARCH/EXMIMO/DRIVER/eurecom/module_main.c
+++ b/targets/ARCH/EXMIMO/DRIVER/eurecom/module_main.c
@@ -49,6 +49,7 @@ static int __init openair_init_module( void )
     unsigned int readback;
     unsigned int card, j;
     unsigned int vid,did;
+    unsigned int val;
     unsigned short vendor, subid;
     exmimo_id_t exmimo_id_tmp[MAX_CARDS];
 
@@ -94,15 +95,16 @@ static int __init openair_init_module( void )
 
     // Now look for more cards on the same bus
     while (card<MAX_CARDS)
-    {
+      {
         pdev[card] = pci_get_device(vid,did, pdev[card-1]);
         if(pdev[card])
-        {
-          // This print does not work for 64 bit kernels
-          //  printk("[openair][INIT_MODULE][INFO]: openair card %d found, bus 0x%x, primary 0x%x, secondary 0x%x\n",card,
-          //          pdev[card]->bus->number,pdev[card]->bus->primary,pdev[card]->bus->secondary);
-
-            pci_read_config_word(pdev[card], PCI_SUBSYSTEM_ID, &subid);
+	  {
+	    // This print does not work for 64 bit kernels
+	    //  printk("[openair][INIT_MODULE][INFO]: openair card %d found, bus 0x%x, primary 0x%x, secondary 0x%x\n",card,
+	    //          pdev[card]->bus->number,pdev[card]->bus->primary,pdev[card]->bus->secondary);
+	    
+ 
+	    pci_read_config_word(pdev[card], PCI_SUBSYSTEM_ID, &subid);
             pci_read_config_word(pdev[card], PCI_SUBSYSTEM_VENDOR_ID, &vendor);
             exmimo_id_tmp[card].board_vendor = vendor;
             
@@ -194,7 +196,13 @@ static int __init openair_init_module( void )
         udelay(1000);
         readback = ioread32( bar[card] +PCIE_CONTROL0);
         printk("CONTROL0 readback %x\n",readback);
-    
+   
+            // This is for displaying the card number in the leds of the exmimo card
+            val = ioread32(bar[card]+PCIE_CONTROL0);
+            iowrite32(val| ((card & 0x1F) << 9),bar[card]+PCIE_CONTROL0);
+            //val = ioread32(bar[card]+PCIE_CONTROL0);
+            //printk("[openair][INIT_MODULE][INFO]: writing leds for card %d control0 %x\n",card,val);
+ 
         // allocating buffers
         if ( exmimo_memory_alloc( card ) ) {
             printk("[openair][MODULE][ERROR] exmimo_memory_alloc() failed!\n");
diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c b/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c
index f3c3c734d4..c54fce5072 100644
--- a/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c
+++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c
@@ -1,8 +1,6 @@
 #include "openair0_lib.h"
 #include "gain_control.h"
 //#define DEBUG_PHY
-#define min(a,b) (((a)<(b))?(a):(b))
-#define max(a,b) (((a)>(b))?(a):(b))
 
 void gain_control_all (unsigned int rx_power_fil_dB, unsigned int card) {
   unsigned int ant;
diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.h b/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.h
index 4667d5b0d6..9bdb5790ae 100644
--- a/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.h
+++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.h
@@ -1,6 +1,8 @@
-#define TARGET_RX_POWER 55		// Target digital power for the AGC
-#define TARGET_RX_POWER_MAX 55		// Maximum digital power for AGC
-#define TARGET_RX_POWER_MIN 50		// Minimum digital power for AGC
+#define TARGET_RX_POWER 50		// Target digital power for the AGC
+#define TARGET_RX_POWER_MAX 53		// Maximum digital power for AGC
+#define TARGET_RX_POWER_MIN 48		// Minimum digital power for AGC
+#define min(a,b) (((a)<(b))?(a):(b))
+#define max(a,b) (((a)>(b))?(a):(b))
 
 void gain_control_all (unsigned int rx_power_fil_dB, unsigned int card);
 void gain_control (unsigned int rx_power_fil_dB, unsigned int ant, unsigned int card);
diff --git a/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v10 b/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v10
index 98a9be8081870a9ce371bdede0158f53cdafb764..b0399db879bfd2240e0e9300bbaab71081c022a2 100755
GIT binary patch
delta 64087
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%0D^0kT*b3nUQVk
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
A@c;k-

delta 43401
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

diff --git a/targets/RTAI/USER/Makefile b/targets/RTAI/USER/Makefile
index 2717b5cce5..f3b01ed781 100644
--- a/targets/RTAI/USER/Makefile
+++ b/targets/RTAI/USER/Makefile
@@ -156,15 +156,10 @@ CFLAGS += -DNAS_NETLINK -DLINUX
 OBJ += $(NAS_OBJS)
 endif
 
-LDFLAGS += -lpthread -lm -lforms -lconfig 
+LDFLAGS += -lpthread -lm -lforms -lconfig -lrt
 ifeq ($(RTAI),1)
 RTAI_CFLAGS += $(shell rtai-config --lxrt-cflags) -DRTAI
 LDFLAGS += $(shell rtai-config --lxrt-ldflags)
-ifdef ENABLE_ITTI
-LDFLAGS += -lrt
-endif
-else
-LDFLAGS += -lrt
 endif
 
 ifeq ($(USRP),1)
diff --git a/targets/RTAI/USER/emos-raw.c b/targets/RTAI/USER/emos-raw.c
index b28398b54c..77266c3480 100644
--- a/targets/RTAI/USER/emos-raw.c
+++ b/targets/RTAI/USER/emos-raw.c
@@ -93,14 +93,16 @@ char title[255];
 
 #ifdef EMOS
 #include <gps.h>
+struct gps_fix_t dummy_gps_data;
 #ifdef RTAI
 #include <rtai_fifos.h>
 #endif
 
 //#define CHANSOUNDER_FIFO_SIZE 10485760  //  10 Mbytes FIFO
-#define CHANSOUNDER_FIFO_SIZE 20971520  //  20 Mbytes FIFO
-//#define CHANSOUNDER_FIFO_SIZE 52428800  //  50 Mbytes FIFO
+//#define CHANSOUNDER_FIFO_SIZE 20971520  //  20 Mbytes FIFO
+#define CHANSOUNDER_FIFO_SIZE 52428800  //  50 Mbytes FIFO
 //#define CHANSOUNDER_FIFO_SIZE 104857600 // 100 Mbytes FIFO
+//#define CHANSOUNDER_FIFO_SIZE 1073741824 // 1Gbyte FIFO
 #define CHANSOUNDER_FIFO_MINOR 4               // minor of the FIFO device - this is /dev/rtf3
 #define CHANSOUNDER_FIFO_DEV "/dev/rtf4"
 #endif
@@ -118,7 +120,7 @@ static SEM *mutex;
 //static CND *cond;
 
 static long int thread0;
-static long int thread1;
+//static long int thread1;
 //static long int sync_thread;
 #else
 pthread_t thread0;
@@ -130,6 +132,7 @@ struct sched_param sched_param_dlsch;
 pthread_t  thread2; //xforms
 pthread_t  thread3; //emos
 pthread_t  thread4; //GPS
+pthread_t  thread5; //log
 
 /*
 static int instance_cnt=-1; //0 means worker is busy, -1 means its free
@@ -155,11 +158,30 @@ char UE_flag=0;
 uint8_t  eNB_id=0,UE_id=0;
 
 // this array sets the bandwidth used for each card (and applies to all chains on one card). 
-exmimo_bw_t bandwidth[MAX_CARDS]    = {BW20,BW10,BW5,BW5};
+exmimo_bw_t bandwidth[MAX_CARDS]    = {BW5,BW5,BW5,BW5};
 // the array  carrier_freq sets the frequency for each chain of each card. A 0 means that the chain is disabled. 
 // Please make sure that the total number of channels enabled per card is in accordance with the following rules:
 // BW20: one channel, BW10: 2 channels, BW5: 4 channels
-uint32_t      carrier_freq[MAX_CARDS][4] = {{2590000000,0,0,0},{2605000000,2605000000,0,0},{0,0,0,0},{0,0,0,0}}; 
+//uint32_t      carrier_freq[MAX_CARDS][4] = {{2590000000,0,0,0},{2590000000,0,0,0},{2605000000,2605000000,0,0},{0,0,0,0}};
+//uint32_t      carrier_freq[MAX_CARDS][4] = {{2590000000,0,0,0},{2605000000,2605000000,0,0},{0,0,0,0},{0,0,0,0}}; 
+uint32_t      carrier_freq[MAX_CARDS][4] = {{771500000,771500000,771500000,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
+
+// the following paramters set the aquisition time and period. These parameters have to be set in accordance with the write speed of your harddisk and the required throughput according to the setting above (see also channel_buffer_size which is computed later). 
+#define AQU_LENGTH_FRAMES 100 //Aquisition time in frames
+#define AQU_PERIOD_FRAMES 100 //Repetition time of aquisition in frames
+#define AQU_LENGTH_SLOTS (AQU_LENGTH_FRAMES*LTE_SLOTS_PER_FRAME) //Aquisition time in slots
+#define AQU_PERIOD_SLOTS (AQU_PERIOD_FRAMES*LTE_SLOTS_PER_FRAME) //Repetition time of aquisition in slots
+
+int32_t rx_total_gain_dB[3] = {-112, -124, -136};
+
+/*
+// this array sets the bandwidth used for each card (and applies to all chains on one card). 
+exmimo_bw_t bandwidth[MAX_CARDS]    = {BW20,BW20,BW10,BW5};
+// the array  carrier_freq sets the frequency for each chain of each card. A 0 means that the chain is disabled. 
+// Please make sure that the total number of channels enabled per card is in accordance with the following rules:
+// BW20: one channel, BW10: 2 channels, BW5: 4 channels
+uint32_t      carrier_freq[MAX_CARDS][4] = {{2590000000,0,0,0},{2590000000,0,0,0},{2605000000,2605000000,0,0},{0,0,0,0}};
+//uint32_t      carrier_freq[MAX_CARDS][4] = {{2590000000,0,0,0},{2605000000,2605000000,0,0},{0,0,0,0},{0,0,0,0}}; 
 //uint32_t      carrier_freq[MAX_CARDS][4] = {{2590000000,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
 
 // the following paramters set the aquisition time and period. These parameters have to be set in accordance with the write speed of your harddisk and the required throughput according to the setting above (see also channel_buffer_size which is computed later). 
@@ -168,13 +190,17 @@ uint32_t      carrier_freq[MAX_CARDS][4] = {{2590000000,0,0,0},{2605000000,26050
 #define AQU_LENGTH_SLOTS (AQU_LENGTH_FRAMES*LTE_SLOTS_PER_FRAME) //Aquisition time in slots
 #define AQU_PERIOD_SLOTS (AQU_PERIOD_FRAMES*LTE_SLOTS_PER_FRAME) //Repetition time of aquisition in slots
 
+int32_t rx_total_gain_dB[3] = {-105, -110, -115};
+*/
+
 char dumpfile_dir[256] = "/mnt/emos";
 
 char *conf_config_file_name = NULL;
 
 unsigned int lost_bytes=0;
-int rssi_lin,rssi_lin_avg;
-int8_t rssi_avg_dB; 
+unsigned int rssi_lin[MAX_CARDS][4],rssi_lin_max[MAX_CARDS],rssi_lin_avg[MAX_CARDS];
+uint8_t rssi_avg_dB[MAX_CARDS]; 
+long long unsigned int total_bytes=0;
 
 struct timing_info_t {
   //unsigned int frame, hw_slot, last_slot, next_slot;
@@ -197,13 +223,6 @@ int otg_enabled;
 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[20] = {6,14,22,28,36,44,52,58,66,74,82,88,96,104,112,118,126,134,142, 148}; ///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);
-
 //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);
@@ -305,7 +324,7 @@ void *scope_thread(void *arg) {
       idx = 0;
       for (card=0;card<number_of_cards;card++) {
 	for (ant=0;ant<4;ant++) {
-	  if (carrier_freq[card][ant] != 0) {
+	  if ((carrier_freq[card][ant] != 0) && (idx<4)) {
 	    len = FRAME_LENGTH_COMPLEX_SAMPLES/(1<<openair0_exmimo_pci[card].exmimo_config_ptr->framing.resampling_factor[ant]);
 	    for (i=0; i<len; i++) {
 	      //rxsig_t_dB[0][i] = 10*log10(1.0+(float) ((((int16_t*) openair0_exmimo_pci[card].adc_head[0])[2*i])*(((int16_t*) openair0_exmimo_pci[card].adc_head[0])[2*i])+(((int16_t*) openair0_exmimo_pci[card].adc_head[0])[2*i+1])*(((int16_t*) openair0_exmimo_pci[card].adc_head[0])[2*i+1])));
@@ -333,13 +352,13 @@ void *scope_thread(void *arg) {
 
 int dummy_tx_buffer[3840*4] __attribute__((aligned(16)));
 
-#ifdef EMOS
 
+#ifdef EMOS
 void* gps_thread (void *arg)
 {
 
-  struct gps_data_t *gps_data = NULL;
-  struct gps_fix_t dummy_gps_data;
+  struct gps_data_t gps_data;
+  struct gps_data_t *gps_data_ptr = &gps_data;
   struct sched_param sched_param;
   int ret;
 
@@ -351,71 +370,121 @@ void* gps_thread (void *arg)
   memset(&dummy_gps_data,0,sizeof(struct gps_fix_t));
   
 #if GPSD_API_MAJOR_VERSION>=5
-  ret = gps_open("127.0.0.1","2947",gps_data);
+  ret = gps_open("127.0.0.1","2947",gps_data_ptr);
   if (ret!=0)
 #else
-  gps_data = gps_open("127.0.0.1","2947");
-  if (gps_data == NULL) 
+  gps_data_ptr = gps_open("127.0.0.1","2947");
+  if (gps_data_ptr == NULL) 
 #endif
     {
       printf("[EMOS] Could not open GPS\n");
       pthread_exit((void*)arg);
     }
 #if GPSD_API_MAJOR_VERSION>=4
-  else if (gps_stream(gps_data, WATCH_ENABLE,NULL) != 0)
+  else if (gps_stream(gps_data_ptr, WATCH_ENABLE,NULL) != 0)
 #else
-  else if (gps_query(gps_data, "w+x") != 0)
+  else if (gps_query(gps_data_ptr, "w+x") != 0)
 #endif
     {
       printf("[EMOS] Error sending command to GPS\n");
       pthread_exit((void*) arg);
     }
   else 
-    printf("[EMOS] Opened GPS, gps_data=%p\n", gps_data);
+    printf("[EMOS] Opened GPS, gps_data=%p\n", gps_data_ptr);
   
 
   while (!oai_exit)
     {
       printf("[EMOS] polling data from gps\n");
 #if GPSD_API_MAJOR_VERSION>=5
-      if (gps_waiting(gps_data,500)) {
-	if (gps_read(gps_data) != 0) {
+      if (gps_waiting(gps_data_ptr,500)) {
+	if (gps_read(gps_data_ptr) <= 0) {
 #else
-      if (gps_waiting(gps_data)) {
-	if (gps_poll(gps_data) != 0) {
+      if (gps_waiting(gps_data_ptr)) {
+	if (gps_poll(gps_data_ptr) != 0) {
 #endif
 	  printf("[EMOS] problem polling data from gps\n");
 	}
 	else {
-	  memcpy(&dummy_gps_data,gps_data,sizeof(struct gps_fix_t));
-	  printf("[EMOS] lat %g, lon %g\n",gps_data->fix.latitude,gps_data->fix.longitude);
+	  memcpy(&dummy_gps_data,&(gps_data_ptr->fix),sizeof(struct gps_fix_t));
+	  printf("[EMOS] lat %g, lon %g\n",gps_data_ptr->fix.latitude,gps_data_ptr->fix.longitude);
 	}
       } //gps_waiting
       else {
 	printf("[EMOS] WARNING: No GPS data available, storing dummy packet\n");
       }
-      rt_sleep_ns(1000000000LL);
+      //rt_sleep_ns(1000000000LL);
+      sleep(1);
     } //oai_exit
 
   pthread_exit((void*) arg);
 
 }
 
+void *log_thread (void *arg)
+{
+  //struct tm now_sec;
+  struct timeval now;
+  int card;
+  FILE *logfile_id;
+  char logfile_name[1024];
+  time_t starttime_tmp;
+  struct tm starttime;
+
+  //open file
+  time(&starttime_tmp);
+  localtime_r(&starttime_tmp,&starttime);
+  snprintf(logfile_name,1024,"%s/%s_data_%d%02d%02d_%02d%02d%02d.log",
+	   dumpfile_dir,
+	   (UE_flag==0) ? "eNB" : "UE",
+	   1900+starttime.tm_year, starttime.tm_mon+1, starttime.tm_mday, starttime.tm_hour, starttime.tm_min, starttime.tm_sec);
+  logfile_id = fopen(logfile_name,"w");
+  if ((logfile_id == NULL))
+    {
+      fprintf(stderr, "[EMOS] Error opening logfile %s\n",logfile_name);
+      exit(EXIT_FAILURE);
+    }
+
+  fprintf(logfile_id,"#time, frame, total bytes wrote, total bytes lost, GPS time, GPS mode, lat, lon, alt, speed, rssi_lin_max[0], rssi_lin_avg[0], rssi_avg_dBm[0], rssi_avg_dB[0], rx_gain[0], LNA[0], ...\n");
+
+  while (!oai_exit) {
+    gettimeofday(&now,NULL);
+    //localtime_r(&(now.tv_sec),&now_sec);
+    fprintf(logfile_id,"%d.%06d, %d, %llu, %u, %e, %d, %e, %e, %e, %e, ", 
+	    (int) now.tv_sec, (int)now.tv_usec, 
+	    frame, total_bytes,lost_bytes, 
+	    dummy_gps_data.time, dummy_gps_data.mode, dummy_gps_data.latitude, dummy_gps_data.longitude, dummy_gps_data.altitude, dummy_gps_data.speed);
+    for (card=0;card<number_of_cards;card++)
+      if (carrier_freq[card][0] != 0) 
+	fprintf(logfile_id,"%d, %d, %d, %d, %d, %d, ", rssi_lin_max[card], rssi_lin_avg[card], 
+		rssi_avg_dB[card] + rx_total_gain_dB[((openair0_exmimo_pci[card].exmimo_config_ptr->rf.rf_mode[0] & LNAGAINMASK) >> 14)-1] - openair0_exmimo_pci[card].exmimo_config_ptr->rf.rx_gain[0][0],
+		rssi_avg_dB[card], openair0_exmimo_pci[card].exmimo_config_ptr->rf.rx_gain[0][0], (openair0_exmimo_pci[card].exmimo_config_ptr->rf.rf_mode[0] & LNAGAINMASK) >> 14);
+    fprintf(logfile_id,"\n");
+    usleep(10000);
+  } 
+  
+  //close file
+  fclose(logfile_id);
+
+  pthread_exit((void*) arg);
+
+ }
+
 void *emos_thread (void *arg)
 {
   char c;
   char *fifo2file_buffer, *fifo2file_ptr;
 
   int fifo, counter=0, bytes;
-  long long unsigned int total_bytes=0;
 
   FILE  *dumpfile_id;
   char  dumpfile_name[1024];
   time_t starttime_tmp;
   struct tm starttime;
   
-  time_t timer;
-  struct tm *now;
+  //time_t timer;
+  struct tm now_sec;
+  struct timeval now;
 
   struct sched_param sched_param;
   int ret;
@@ -423,19 +492,20 @@ void *emos_thread (void *arg)
   int card, ant;
   int channel_buffer_size=0; //in bytes
 
+  pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL);
   
   sched_param.sched_priority = sched_get_priority_max(SCHED_FIFO)-1; 
   sched_setscheduler(0, SCHED_FIFO,&sched_param);
   
   printf("EMOS thread has priority %d\n",sched_param.sched_priority);
  
-  timer = time(NULL);
-  now = localtime(&timer);
+  //timer = time(NULL);
+  //now = localtime(&timer);
 
   for (card=0; card<number_of_cards; card++) 
     for (ant=0; ant<4; ant++) 
       if (carrier_freq[card][ant] != 0) {
-	printf("card %d, ant %d\n",card,ant);
+	printf("card %d, ant %d: freq %u, BW %d\n",card,ant,carrier_freq[card][ant],bandwidth[card]);
 	channel_buffer_size += SAMPLES_PER_SLOT/(1<<openair0_exmimo_pci[card].exmimo_config_ptr->framing.resampling_factor[ant]);
       }
   channel_buffer_size *= 4; //4 bytes per sample
@@ -460,12 +530,12 @@ void *emos_thread (void *arg)
   time(&starttime_tmp);
   localtime_r(&starttime_tmp,&starttime);
   snprintf(dumpfile_name,1024,"%s/%s_data_%d%02d%02d_%02d%02d%02d.EMOS",
-       dumpfile_dir,
+	   dumpfile_dir,
 	   (UE_flag==0) ? "eNB" : "UE",
 	   1900+starttime.tm_year, starttime.tm_mon+1, starttime.tm_mday, starttime.tm_hour, starttime.tm_min, starttime.tm_sec);
 
   dumpfile_id = fopen(dumpfile_name,"w");
-  if (dumpfile_id == NULL)
+  if ((dumpfile_id == NULL))
     {
       fprintf(stderr, "[EMOS] Error opening dumpfile %s\n",dumpfile_name);
       exit(EXIT_FAILURE);
@@ -475,9 +545,15 @@ void *emos_thread (void *arg)
 
   while (!oai_exit)
     {
-      bytes = rtf_read_timed(fifo, fifo2file_ptr, channel_buffer_size,100);
-      if (bytes<=0)
+      //bytes = rtf_read_timed(fifo, fifo2file_ptr, channel_buffer_size,100);
+      bytes = rtf_read_all_at_once(fifo, fifo2file_ptr, channel_buffer_size);
+      if (bytes<=0) {
+	usleep(100);
 	continue;
+      }
+      if (bytes != channel_buffer_size) {
+	printf("[EMOS] Frame %d: ERROR! Only got %d bytes instead of %d!\n",frame,bytes,channel_buffer_size);
+      }
       /*
       if (UE_flag==0)
 	printf("eNB: count %d, frame %d, read: %d bytes from the fifo\n",counter, ((fifo_dump_emos_eNB*)fifo2file_ptr)->frame_tx,bytes);
@@ -495,6 +571,8 @@ void *emos_thread (void *arg)
           fifo2file_ptr = fifo2file_buffer;
           //counter = 0;
 
+	  printf("[EMOS] Frame %d: start writing %d bytes to disk\n",frame,AQU_LENGTH_SLOTS*channel_buffer_size);
+
 	  //flush buffer to disk
 	  if (fwrite(fifo2file_buffer, sizeof(char), AQU_LENGTH_SLOTS*channel_buffer_size, dumpfile_id) != AQU_LENGTH_SLOTS*channel_buffer_size)
 	    {
@@ -507,10 +585,17 @@ void *emos_thread (void *arg)
 	}
 
       if ((counter%AQU_LENGTH_SLOTS)==0) {
-	time(&starttime_tmp);
-	localtime_r(&starttime_tmp,&starttime);
-	printf("[EMOS] %02d:%02d:%02d, frame %d, total bytes wrote %llu, bytes lost %d\n", starttime.tm_hour, starttime.tm_min, starttime.tm_sec, frame, total_bytes,lost_bytes);
-	printf("[EMOS] %02d:%02d:%02d, frame %d, rssi_lin %d, rssi_lin_avg %d, rssi_avg_dB %d, rx_gain %d, LNA %d\n", starttime.tm_hour, starttime.tm_min, starttime.tm_sec, frame, rssi_lin, rssi_lin_avg, rssi_avg_dB, p_exmimo_config->rf.rx_gain[0][0], (p_exmimo_config->rf.rf_mode[0] & LNAGAINMASK) >> 14);
+	//time(&starttime_tmp);
+	gettimeofday(&now,NULL);
+	localtime_r(&(now.tv_sec),&now_sec);
+	printf("[EMOS] %02d:%02d:%02d.%03d, frame %d, total bytes wrote %llu, bytes lost %u\n", 
+	       now_sec.tm_hour, now_sec.tm_min, now_sec.tm_sec, (int)(now.tv_usec/1000), frame, total_bytes,lost_bytes);
+	for (card=0;card<number_of_cards;card++)
+	  if (carrier_freq[card][0] != 0) 
+	    printf("[EMOS] %02d:%02d:%02d.%03d, card %d, rssi_lin_max %d, rssi_lin_avg %d, rssi_avg_dBm %d (rssi_avg_dB %d, rx_gain %d, LNA %d)\n", 
+		   now_sec.tm_hour, now_sec.tm_min, now_sec.tm_sec, (int)(now.tv_usec/1000), card, rssi_lin_max[card], rssi_lin_avg[card], 
+		   rssi_avg_dB[card] + rx_total_gain_dB[((openair0_exmimo_pci[card].exmimo_config_ptr->rf.rf_mode[0] & LNAGAINMASK) >> 14)-1] - openair0_exmimo_pci[card].exmimo_config_ptr->rf.rx_gain[0][0],
+		   rssi_avg_dB[card], openair0_exmimo_pci[card].exmimo_config_ptr->rf.rx_gain[0][0], (openair0_exmimo_pci[card].exmimo_config_ptr->rf.rf_mode[0] & LNAGAINMASK) >> 14);
 	//printf("[EMOS] %02d:%02d:%02d, frame %d, GPS time %e, GPS mode %d, lat %e, lon %e, alt %e, speed %e\n", starttime.tm_hour, starttime.tm_min, starttime.tm_sec, counter/20, dummy_gps_data.time, dummy_gps_data.mode, dummy_gps_data.latitude, dummy_gps_data.longitude, dummy_gps_data.altitude, dummy_gps_data.speed);
       }
     }
@@ -539,7 +624,7 @@ static void *eNB_thread(void *arg)
   int mbox_target=0,mbox_current=0;
   int i,ret;
   int tx_offset;
-  int bytes, bytes_tot, bytes_len;
+  int bytes, bytes_tot=0, bytes_len;
   long long int k1=1000;
   long long int k2=1024-k1;
   int ant,len,card = 0;
@@ -581,8 +666,8 @@ static void *eNB_thread(void *arg)
 	// at the eNB, even slots have double as much time since most of the processing is done here and almost nothing in odd slots
 	LOG_D(HW,"eNB Frame %d, time %llu: missed slot, proceeding with next one (slot %d, hw_slot %d, diff %d)\n",frame, rt_get_time_ns(), slot, hw_slot, diff);
 	slot++;
-	if (frame>0)	  
-	  oai_exit=1;
+	//if (frame>0)	  
+	//oai_exit=1;
 	if (slot==20){
 	  slot=0;
 	  frame++;
@@ -623,7 +708,7 @@ static void *eNB_thread(void *arg)
         last_slot+=20;
       next_slot = (slot+3)%LTE_SLOTS_PER_FRAME;
 
-      if (frame>AQU_LENGTH_FRAMES)
+      if (frame>=AQU_LENGTH_FRAMES)
         {
 	  timing_info.time_last = timing_info.time_now;
 	  timing_info.time_now = rt_get_time_ns();
@@ -643,11 +728,17 @@ static void *eNB_thread(void *arg)
 	  if (last_slot==0) {
 	    for (card=0;card<number_of_cards;card++) {
 	      len = SAMPLES_PER_SLOT/(1<<openair0_exmimo_pci[card].exmimo_config_ptr->framing.resampling_factor[0]);
-	      rssi_lin = signal_energy(&(((int32_t*) openair0_exmimo_pci[card].adc_head[0])[last_slot*len]), len);
-	      rssi_lin_avg = (int) ((k1*((long long int)(rssi_lin_avg)) + (k2*((long long int)(rssi_lin))))>>10);
-	      rssi_avg_dB = dB_fixed(rssi_lin_avg);
+	      rssi_lin_max[card] = 0;
+	      for (ant=0;ant<4;ant++) {
+		if (carrier_freq[card][ant] != 0) {
+		  rssi_lin[card][ant] = signal_energy(&(((int32_t*) openair0_exmimo_pci[card].adc_head[ant])[last_slot*len]), len);
+		  rssi_lin_max[card] = max(rssi_lin_max[card],rssi_lin[card][ant]);
+		}
+	      }
+	      rssi_lin_avg[card] = (int) ((k1*((long long int)(rssi_lin_avg[card])) + (k2*((long long int)(rssi_lin_max[card]))))>>10);
+	      rssi_avg_dB[card] = dB_fixed(rssi_lin_avg[card]);
 	      if (frame%100==0) {
-		gain_control_all(rssi_avg_dB,card);
+		gain_control_all(rssi_avg_dB[card],card);
 		//printf("AGC for card %d: rx_power_fil_dB=%d, rx_gain=%d, LNA=%d (1=Byp,2=Med,3=Max)\n",card,rssi_avg_dB,openair0_exmimo_pci[card].exmimo_config_ptr->rf.rx_gain[0][0],(openair0_exmimo_pci[card].exmimo_config_ptr->rf.rf_mode[0]&LNAGAINMASK)>>14);
 	      }
 	    }
@@ -724,7 +815,7 @@ int main(int argc, char **argv) {
   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};
-  uint32_t rxgain[4]      = {0,0,0,0};
+  uint32_t rxgain[4]      = {30,30,30,30};
   uint32_t txgain[4]      = {0,0,0,0};
 
   uint16_t Nid_cell = 0;
@@ -995,11 +1086,13 @@ int main(int argc, char **argv) {
     else 
       p_exmimo_config->framing.eNB_flag   = !UE_flag;
 
-    //p_exmimo_config->framing.multicard_syncmode = SYNCMODE_FREE;
     if (card==0) 
       p_exmimo_config->framing.multicard_syncmode = SYNCMODE_MASTER;
-    else
+    else 
       p_exmimo_config->framing.multicard_syncmode = SYNCMODE_SLAVE;
+    
+    //p_exmimo_config->framing.multicard_syncmode = SYNCMODE_FREE;
+
 
     p_exmimo_config->framing.tdd_config = DUPLEXMODE_FDD + TXRXSWITCH_TESTRX; //TXRXSWITCH_LSB;
  
@@ -1146,7 +1239,7 @@ int main(int argc, char **argv) {
     printf("mutex=%p\n",mutex);
 #endif
 
-  DAQ_MBOX = (volatile unsigned int *) openair0_exmimo_pci[card].rxcnt_ptr[0];
+  DAQ_MBOX = (volatile unsigned int *) openair0_exmimo_pci[0].rxcnt_ptr[0];
 
   // this starts the DMA transfers
   if (UE_flag!=1)
@@ -1207,6 +1300,8 @@ int main(int argc, char **argv) {
   printf("EMOS thread created, ret=%d\n",ret);
   ret = pthread_create(&thread4, NULL, gps_thread, NULL);
   printf("GPS thread created, ret=%d\n",ret);
+  ret = pthread_create(&thread5, NULL, log_thread, NULL);
+  printf("LOG thread created, ret=%d\n",ret);
 #endif
 
   rt_sleep_ns(10*FRAME_PERIOD);
@@ -1340,10 +1435,15 @@ int main(int argc, char **argv) {
   printf("waiting for GPS thread\n");
   pthread_cancel(thread4);
   pthread_join(thread4,&status);
+  printf("waiting for log thread\n");
+  pthread_cancel(thread5);
+  pthread_join(thread5,&status);
 #endif
 
 #ifdef EMOS
   error_code = rtf_destroy(CHANSOUNDER_FIFO_MINOR);
+  while (error_code>0)
+    error_code = rtf_destroy(CHANSOUNDER_FIFO_MINOR);
   printf("[OPENAIR][SCHED][CLEANUP] EMOS FIFO closed, error_code %d\n", error_code);
 #endif
 
-- 
GitLab