From 5a04f9696cd6a52aaec7109a41c9c8170608a508 Mon Sep 17 00:00:00 2001
From: navid <navid@mycompany.com>
Date: Thu, 23 Jul 2015 17:38:53 +0000
Subject: [PATCH] * update bladerf interface * update the runtime and deadline
 calcualtion * fix the isse with LIB_NAS_UE * add additional testcases and fix
 the issues with autotest

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7736 818b1a75-f10b-46b9-bf7c-635c3b92a50f
---
 cmake_targets/CMakeLists.txt                  |  18 +--
 .../autotests/run_compilation_autotests.bash  |  25 ++--
 .../autotests/test.0103/CMakeLists.txt        |   8 +-
 .../autotests/test.0103/CMakeLists.txt.Rel10  | 107 ++++++++++++++++++
 .../autotests/test.0103/CMakeLists.txt.Rel8   | 107 ++++++++++++++++++
 .../autotests/test.0103/CMakeLists.txt.USRP   | 107 ++++++++++++++++++
 .../ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c  |  83 ++++++++------
 .../ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h  |  11 +-
 targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp  |   9 +-
 .../CONF/enb.band7.usrpb210.conf              |   2 +-
 targets/RT/USER/lte-softmodem.c               |  84 ++++++++------
 11 files changed, 469 insertions(+), 92 deletions(-)
 create mode 100644 cmake_targets/autotests/test.0103/CMakeLists.txt.Rel10
 create mode 100644 cmake_targets/autotests/test.0103/CMakeLists.txt.Rel8
 create mode 100644 cmake_targets/autotests/test.0103/CMakeLists.txt.USRP

diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index 111bfc1df0..2c7aa12864 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -377,8 +377,10 @@ elseif (${RF_BOARD} STREQUAL "OAI_BLADERF")
   set(HW_SOURCE ${HW_SOURCE}
     ${OPENAIR_TARGETS}/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
     )
-  LINK_DIRECTORIES("/usr/lib/x86_64-linux-gnu/")
-  
+  LINK_DIRECTORIES("/usr/lib/x86_64-linux-gnu")
+  set(option_HW_lib "bladeRF")
+  #set(LOWLATENCY False)
+
 elseif (${RF_BOARD} STREQUAL "ETHERNET")
   include_directories ("${OPENAIR_TARGETS}/ARCH/ETHERNET/USERSPACE/LIB")
   set(HW_SOURCE ${HW_SOURCE}
@@ -1219,7 +1221,7 @@ set (libnas_utils_OBJS
   ${NAS_SRC}COMMON/UTIL/OctetString.c
 )
 
-if(NAS_UE)
+if(NAS_UE) 
   set(libnas_ue_api_OBJS
     ${NAS_SRC}UE/API/USER/at_command.c
     ${NAS_SRC}UE/API/USER/at_error.c
@@ -1307,6 +1309,8 @@ if(NAS_UE)
     ${libnas_ue_esm_OBJS}
     ${libnas_ue_esm_sap_OBJS}
   )
+  set(NAS_UE_LIB LIB_NAS_UE)
+
   include_directories(${NAS_SRC}UE)
   include_directories(${NAS_SRC}UE/API/USER)
   include_directories(${NAS_SRC}UE/API/USIM)
@@ -1554,17 +1558,19 @@ add_executable(lte-softmodem
   ${XFORMS_SOURCE}
   ${XFORMS_SOURCE_SOFTMODEM}
   )
+
 if (MESSAGE_CHART_GENERATOR)
 target_link_libraries (lte-softmodem
   -Wl,--start-group
-  RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS MSC L2 ${RAL_LIB} LIB_NAS_UE ${ITTI_LIB} ${MIH_LIB}
+  RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS MSC L2 ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${MIH_LIB}
   -Wl,--end-group )
 else (MESSAGE_CHART_GENERATOR)
 target_link_libraries (lte-softmodem
   -Wl,--start-group
-  RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS L2 ${RAL_LIB} LIB_NAS_UE ${ITTI_LIB} ${MIH_LIB}
+  RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS L2 ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${MIH_LIB}
   -Wl,--end-group )
 endif(MESSAGE_CHART_GENERATOR)
+
 target_link_libraries (lte-softmodem ${LIBXML2_LIBRARIES})
 target_link_libraries (lte-softmodem pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${option_HW_lib} ${XFORMS_LIBRARIES} )
 target_link_libraries (lte-softmodem ${LIBBOOST_LIBRARIES})
@@ -1757,8 +1763,6 @@ target_link_libraries (rrh_gw ${option_HW_lib} ${LIBBOOST_LIBRARIES} )
 Message("-- option_HW_lib=${option_HW_lib}")
 Message("-- HW_SOURCE=${HW_SOURCE}")
 
-
-
 # USIM process
 #################
 #add_executable(usim
diff --git a/cmake_targets/autotests/run_compilation_autotests.bash b/cmake_targets/autotests/run_compilation_autotests.bash
index 228331ea8b..9adc40637e 100755
--- a/cmake_targets/autotests/run_compilation_autotests.bash
+++ b/cmake_targets/autotests/run_compilation_autotests.bash
@@ -20,7 +20,7 @@ test_compile() {
         make -j4 $2
     } > $tdir/log/$1.txt 2>&1
     if [ -s $3 ] ; then
-        cp $3 $tdir/bin/`basename $3`.$1
+        cp $3 $tdir/bin/`basename $3`.$5.$1
         echo_success "$1 $3 $5 compiled"
         xUnit_success "compilation" $1
     else
@@ -47,25 +47,36 @@ test_compile \
     test.0102 oaisim_nos1 \
     oaisim_nos1  $tdir/bin/oaisim.r8.nas rel8.nos1.nas
 
+cp $tdir/test.0103/CMakeLists.txt.Rel8  $tdir/test.0103/CMakeLists.txt 
 test_compile \
     test.0103 lte-softmodem \
-    lte-softmodem  $tdir/bin/lte-softmodem.r8.rf rel8.rf
+    lte-softmodem  $tdir/bin/lte-softmodem.r8.rf Rel8.EXMIMO
+
+cp $tdir/test.0103/CMakeLists.txt.Rel10  $tdir/test.0103/CMakeLists.txt   
+test_compile \
+    test.0103 lte-softmodem \
+    lte-softmodem  $tdir/bin/lte-softmodem.r10.rf Rel10.EXMIMO
+
+cp $tdir/test.0103/CMakeLists.txt.USRP  $tdir/test.0103/CMakeLists.txt   
+test_compile \
+    test.0103 lte-softmodem \
+    lte-softmodem  $tdir/bin/lte-softmodem.r10.rf Rel10.USRP
 
 test_compile \
     test.0104 dlsim \
-    dlsim  $tdir/bin/dlsim
+    dlsim  $tdir/bin/dlsim dlsim.Rel8
 
 test_compile \
     test.0104 ulsim \
-    ulsim  $tdir/bin/ulsim
+    ulsim  $tdir/bin/ulsim ulsim.Rel8
 
 test_compile \
     test.0106 oaisim \
-    oaisim  $tdir/bin/oaisim.r8.itti rel8.itti
+    oaisim  $tdir/bin/oaisim.r8.itti Rel8.itti
 
 test_compile \
     test.0107 oaisim_nos1 \
-    oaisim_nos1  $tdir/bin/oaisim.r10 rel10.nos1
+    oaisim_nos1  $tdir/bin/oaisim.r10 Rel10.nos1
 
 test_compile \
     test.0108 oaisim \
@@ -77,7 +88,7 @@ test_compile \
 
 test_compile \
     test.0115 oaisim \
-    oaisim  $tdir/bin/oaisim.r10.itti.ral
+    oaisim  $tdir/bin/oaisim.r10.itti.ral rel10.itti.ral 
 
 test_compile \
     test.0120 nasmesh \
diff --git a/cmake_targets/autotests/test.0103/CMakeLists.txt b/cmake_targets/autotests/test.0103/CMakeLists.txt
index f669263a95..bd69420cbc 100644
--- a/cmake_targets/autotests/test.0103/CMakeLists.txt
+++ b/cmake_targets/autotests/test.0103/CMakeLists.txt
@@ -42,7 +42,7 @@ set ( NAS_BUILT_IN_EPC False )
 set ( NAS_BUILT_IN_UE False )
 set ( NAS_MME False )
 set ( NAS_NETLINK False )
-set ( NAS_UE False )
+set ( NAS_UE True )
 set ( NB_ANTENNAS_RX 2 )
 set ( NB_ANTENNAS_TX 2 )
 set ( NB_ANTENNAS_TXRX 2 )
@@ -69,9 +69,9 @@ set ( PHY_EMUL False )
 set ( PHYSIM True )
 set ( PUCCH True )
 set ( RANDOM_BF False )
-set ( RF_BOARD EXMIMO )
+set ( RF_BOARD OAI_USRP )
 set ( RLC_STOP_ON_LOST_PDU False )
-set ( RRC_ASN1_VERSION Rel8 )
+set ( RRC_ASN1_VERSION Rel10 )
 set ( RRC_DEFAULT_RAB_IS_AM False )
 set ( RRC_MSG_PRINT False )
 set ( RTAI False )
@@ -103,5 +103,5 @@ set ( USE_MME False )
 set ( USER_MODE True )
 set ( XER_PRINT False )
 set ( XFORMS False )
-
+set(PACKAGE_NAME "lte-softmodem")
 include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt)
diff --git a/cmake_targets/autotests/test.0103/CMakeLists.txt.Rel10 b/cmake_targets/autotests/test.0103/CMakeLists.txt.Rel10
new file mode 100644
index 0000000000..5bd41d8241
--- /dev/null
+++ b/cmake_targets/autotests/test.0103/CMakeLists.txt.Rel10
@@ -0,0 +1,107 @@
+cmake_minimum_required(VERSION 2.8)
+
+set ( ADDR_CONF False )
+set ( DEBUG_OMG False )
+set ( DISABLE_USE_NAS False )
+set ( DISABLE_XER_PRINT False )
+set ( DRIVER2013 True )
+set ( EMOS False )
+set ( ENABLE_FXP True )
+set ( ENABLE_ITTI False )
+set ( ENABLE_NAS_UE_LOGGING False )
+set ( ENABLE_NEW_MULTICAST False )
+set ( ENABLE_PGM_TRANSPORT False )
+set ( ENABLE_RAL False )
+set ( ENABLE_SECURITY False )
+set ( ENABLE_STANDALONE_EPC False )
+set ( ENABLE_USE_CPU_EXECUTION_TIME True )
+set ( ENABLE_USE_MME False )
+set ( ENABLE_VCD_FIFO True )
+set ( ENB_MODE True )
+set ( EPC_BUILD False )
+set ( HARD_RT False )
+set ( JUMBO_FRAME True )
+set ( LARGE_SCALE False )
+set ( LINK_ENB_PDCP_TO_GTPV1U False )
+set ( LINK_ENB_PDCP_TO_IP_DRIVER False )
+set ( LINUX False )
+set ( LINUX_LIST False )
+set ( LOCALIZATION False )
+set ( LOG_NO_THREAD True )
+set ( LOWLATENCY False )
+set ( MAC_CONTEXT 1 )
+set ( MAX_NUM_CCs 1 )
+set ( MESSAGE_CHART_GENERATOR         False )
+set ( MESSAGE_CHART_GENERATOR_RLC_MAC False )
+set ( MESSAGE_CHART_GENERATOR_PHY     False )
+set ( MIH_C_MEDIEVAL_EXTENSIONS True )
+set ( MSG_PRINT False )
+set ( MU_RECEIVER False )
+set ( NAS_ADDRESS_FIX False )
+set ( NAS_BUILT_IN_EPC False )
+set ( NAS_BUILT_IN_UE False )
+set ( NAS_MME False )
+set ( NAS_NETLINK False )
+set ( NAS_UE False )
+set ( NB_ANTENNAS_RX 2 )
+set ( NB_ANTENNAS_TX 2 )
+set ( NB_ANTENNAS_TXRX 2 )
+set ( NEW_FFT True )
+set ( NO_RRM True )
+set ( OAI_EMU False )
+set ( OAI_NW_DRIVER_TYPE_ETHERNET False )
+set ( OAI_NW_DRIVER_USE_NETLINK False )
+set ( OAISIM False )
+set ( OPENAIR1 True )
+set ( OPENAIR2 True )
+set ( OPENAIR_EMU False )
+set ( OPENAIR_LTE True )
+set ( PBS_SIM False )
+set ( PC_DSP True )
+set ( PC_TARGET True )
+set ( PDCP_MSG_PRINT False )
+set ( PDCP_USE_NETLINK False )
+set ( PDCP_USE_NETLINK_QUEUES False )
+set ( PERFECT_CE False )
+set ( PHY_ABSTRACTION False )
+set ( PHY_CONTEXT 1 )
+set ( PHY_EMUL False )
+set ( PHYSIM True )
+set ( PUCCH True )
+set ( RANDOM_BF False )
+set ( RF_BOARD EXMIMO )
+set ( RLC_STOP_ON_LOST_PDU False )
+set ( RRC_ASN1_VERSION Rel10 )
+set ( RRC_DEFAULT_RAB_IS_AM False )
+set ( RRC_MSG_PRINT False )
+set ( RTAI False )
+set ( S1AP_LIMIT_STREAM_ID_TO_1 False )
+set ( S1AP_VERSION R10 )
+set ( SMBV False )
+set ( SPECTRA False )
+set ( STOP_ON_IP_TRAFFIC_OVERLOAD False )
+set ( TEST_OMG False )
+set ( TRACE_RLC_AM_BO False )
+set ( TRACE_RLC_AM_FREE_SDU False )
+set ( TRACE_RLC_AM_HOLE False )
+set ( TRACE_RLC_AM_PDU False )
+set ( TRACE_RLC_AM_RESEGMENT False )
+set ( TRACE_RLC_AM_RX_DECODE False )
+set ( TRACE_RLC_AM_RX False )
+set ( TRACE_RLC_AM_STATUS_CREATION False )
+set ( TRACE_RLC_AM_TX False )
+set ( TRACE_RLC_AM_TX_STATUS False )
+set ( TRACE_RLC_PAYLOAD False )
+set ( TRACE_RLC_UM_DAR False )
+set ( TRACE_RLC_UM_DISPLAY_ASCII_DATA False )
+set ( TRACE_RLC_UM_PDU False )
+set ( TRACE_RLC_UM_RX False )
+set ( TRACE_RLC_UM_SEGMENT False )
+set ( TRACE_RLC_UM_TX_STATUS False )
+set ( USE_3GPP_ADDR_AS_LINK_ADDR False )
+set ( USE_MME False )
+set ( USER_MODE True )
+set ( XER_PRINT False )
+set ( XFORMS False )
+set(PACKAGE_NAME "lte-softmodem")
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt)
diff --git a/cmake_targets/autotests/test.0103/CMakeLists.txt.Rel8 b/cmake_targets/autotests/test.0103/CMakeLists.txt.Rel8
new file mode 100644
index 0000000000..bc3c1af713
--- /dev/null
+++ b/cmake_targets/autotests/test.0103/CMakeLists.txt.Rel8
@@ -0,0 +1,107 @@
+cmake_minimum_required(VERSION 2.8)
+
+set ( ADDR_CONF False )
+set ( DEBUG_OMG False )
+set ( DISABLE_USE_NAS False )
+set ( DISABLE_XER_PRINT False )
+set ( DRIVER2013 True )
+set ( EMOS False )
+set ( ENABLE_FXP True )
+set ( ENABLE_ITTI False )
+set ( ENABLE_NAS_UE_LOGGING False )
+set ( ENABLE_NEW_MULTICAST False )
+set ( ENABLE_PGM_TRANSPORT False )
+set ( ENABLE_RAL False )
+set ( ENABLE_SECURITY False )
+set ( ENABLE_STANDALONE_EPC False )
+set ( ENABLE_USE_CPU_EXECUTION_TIME True )
+set ( ENABLE_USE_MME False )
+set ( ENABLE_VCD_FIFO True )
+set ( ENB_MODE True )
+set ( EPC_BUILD False )
+set ( HARD_RT False )
+set ( JUMBO_FRAME True )
+set ( LARGE_SCALE False )
+set ( LINK_ENB_PDCP_TO_GTPV1U False )
+set ( LINK_ENB_PDCP_TO_IP_DRIVER False )
+set ( LINUX False )
+set ( LINUX_LIST False )
+set ( LOCALIZATION False )
+set ( LOG_NO_THREAD True )
+set ( LOWLATENCY False )
+set ( MAC_CONTEXT 1 )
+set ( MAX_NUM_CCs 1 )
+set ( MESSAGE_CHART_GENERATOR         False )
+set ( MESSAGE_CHART_GENERATOR_RLC_MAC False )
+set ( MESSAGE_CHART_GENERATOR_PHY     False )
+set ( MIH_C_MEDIEVAL_EXTENSIONS True )
+set ( MSG_PRINT False )
+set ( MU_RECEIVER False )
+set ( NAS_ADDRESS_FIX False )
+set ( NAS_BUILT_IN_EPC False )
+set ( NAS_BUILT_IN_UE False )
+set ( NAS_MME False )
+set ( NAS_NETLINK False )
+set ( NAS_UE False )
+set ( NB_ANTENNAS_RX 2 )
+set ( NB_ANTENNAS_TX 2 )
+set ( NB_ANTENNAS_TXRX 2 )
+set ( NEW_FFT True )
+set ( NO_RRM True )
+set ( OAI_EMU False )
+set ( OAI_NW_DRIVER_TYPE_ETHERNET False )
+set ( OAI_NW_DRIVER_USE_NETLINK False )
+set ( OAISIM False )
+set ( OPENAIR1 True )
+set ( OPENAIR2 True )
+set ( OPENAIR_EMU False )
+set ( OPENAIR_LTE True )
+set ( PBS_SIM False )
+set ( PC_DSP True )
+set ( PC_TARGET True )
+set ( PDCP_MSG_PRINT False )
+set ( PDCP_USE_NETLINK False )
+set ( PDCP_USE_NETLINK_QUEUES False )
+set ( PERFECT_CE False )
+set ( PHY_ABSTRACTION False )
+set ( PHY_CONTEXT 1 )
+set ( PHY_EMUL False )
+set ( PHYSIM True )
+set ( PUCCH True )
+set ( RANDOM_BF False )
+set ( RF_BOARD EXMIMO )
+set ( RLC_STOP_ON_LOST_PDU False )
+set ( RRC_ASN1_VERSION Rel8 )
+set ( RRC_DEFAULT_RAB_IS_AM False )
+set ( RRC_MSG_PRINT False )
+set ( RTAI False )
+set ( S1AP_LIMIT_STREAM_ID_TO_1 False )
+set ( S1AP_VERSION R10 )
+set ( SMBV False )
+set ( SPECTRA False )
+set ( STOP_ON_IP_TRAFFIC_OVERLOAD False )
+set ( TEST_OMG False )
+set ( TRACE_RLC_AM_BO False )
+set ( TRACE_RLC_AM_FREE_SDU False )
+set ( TRACE_RLC_AM_HOLE False )
+set ( TRACE_RLC_AM_PDU False )
+set ( TRACE_RLC_AM_RESEGMENT False )
+set ( TRACE_RLC_AM_RX_DECODE False )
+set ( TRACE_RLC_AM_RX False )
+set ( TRACE_RLC_AM_STATUS_CREATION False )
+set ( TRACE_RLC_AM_TX False )
+set ( TRACE_RLC_AM_TX_STATUS False )
+set ( TRACE_RLC_PAYLOAD False )
+set ( TRACE_RLC_UM_DAR False )
+set ( TRACE_RLC_UM_DISPLAY_ASCII_DATA False )
+set ( TRACE_RLC_UM_PDU False )
+set ( TRACE_RLC_UM_RX False )
+set ( TRACE_RLC_UM_SEGMENT False )
+set ( TRACE_RLC_UM_TX_STATUS False )
+set ( USE_3GPP_ADDR_AS_LINK_ADDR False )
+set ( USE_MME False )
+set ( USER_MODE True )
+set ( XER_PRINT False )
+set ( XFORMS False )
+set(PACKAGE_NAME "lte-softmodem")
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt)
diff --git a/cmake_targets/autotests/test.0103/CMakeLists.txt.USRP b/cmake_targets/autotests/test.0103/CMakeLists.txt.USRP
new file mode 100644
index 0000000000..b47c34c9bb
--- /dev/null
+++ b/cmake_targets/autotests/test.0103/CMakeLists.txt.USRP
@@ -0,0 +1,107 @@
+cmake_minimum_required(VERSION 2.8)
+
+set ( ADDR_CONF False )
+set ( DEBUG_OMG False )
+set ( DISABLE_USE_NAS False )
+set ( DISABLE_XER_PRINT False )
+set ( DRIVER2013 True )
+set ( EMOS False )
+set ( ENABLE_FXP True )
+set ( ENABLE_ITTI False )
+set ( ENABLE_NAS_UE_LOGGING False )
+set ( ENABLE_NEW_MULTICAST False )
+set ( ENABLE_PGM_TRANSPORT False )
+set ( ENABLE_RAL False )
+set ( ENABLE_SECURITY False )
+set ( ENABLE_STANDALONE_EPC False )
+set ( ENABLE_USE_CPU_EXECUTION_TIME True )
+set ( ENABLE_USE_MME False )
+set ( ENABLE_VCD_FIFO True )
+set ( ENB_MODE True )
+set ( EPC_BUILD False )
+set ( HARD_RT False )
+set ( JUMBO_FRAME True )
+set ( LARGE_SCALE False )
+set ( LINK_ENB_PDCP_TO_GTPV1U False )
+set ( LINK_ENB_PDCP_TO_IP_DRIVER False )
+set ( LINUX False )
+set ( LINUX_LIST False )
+set ( LOCALIZATION False )
+set ( LOG_NO_THREAD True )
+set ( LOWLATENCY False )
+set ( MAC_CONTEXT 1 )
+set ( MAX_NUM_CCs 1 )
+set ( MESSAGE_CHART_GENERATOR         False )
+set ( MESSAGE_CHART_GENERATOR_RLC_MAC False )
+set ( MESSAGE_CHART_GENERATOR_PHY     False )
+set ( MIH_C_MEDIEVAL_EXTENSIONS True )
+set ( MSG_PRINT False )
+set ( MU_RECEIVER False )
+set ( NAS_ADDRESS_FIX False )
+set ( NAS_BUILT_IN_EPC False )
+set ( NAS_BUILT_IN_UE False )
+set ( NAS_MME False )
+set ( NAS_NETLINK False )
+set ( NAS_UE False )
+set ( NB_ANTENNAS_RX 2 )
+set ( NB_ANTENNAS_TX 2 )
+set ( NB_ANTENNAS_TXRX 2 )
+set ( NEW_FFT True )
+set ( NO_RRM True )
+set ( OAI_EMU False )
+set ( OAI_NW_DRIVER_TYPE_ETHERNET False )
+set ( OAI_NW_DRIVER_USE_NETLINK False )
+set ( OAISIM False )
+set ( OPENAIR1 True )
+set ( OPENAIR2 True )
+set ( OPENAIR_EMU False )
+set ( OPENAIR_LTE True )
+set ( PBS_SIM False )
+set ( PC_DSP True )
+set ( PC_TARGET True )
+set ( PDCP_MSG_PRINT False )
+set ( PDCP_USE_NETLINK False )
+set ( PDCP_USE_NETLINK_QUEUES False )
+set ( PERFECT_CE False )
+set ( PHY_ABSTRACTION False )
+set ( PHY_CONTEXT 1 )
+set ( PHY_EMUL False )
+set ( PHYSIM True )
+set ( PUCCH True )
+set ( RANDOM_BF False )
+set ( RF_BOARD OAI_USRP )
+set ( RLC_STOP_ON_LOST_PDU False )
+set ( RRC_ASN1_VERSION Rel10 )
+set ( RRC_DEFAULT_RAB_IS_AM False )
+set ( RRC_MSG_PRINT False )
+set ( RTAI False )
+set ( S1AP_LIMIT_STREAM_ID_TO_1 False )
+set ( S1AP_VERSION R10 )
+set ( SMBV False )
+set ( SPECTRA False )
+set ( STOP_ON_IP_TRAFFIC_OVERLOAD False )
+set ( TEST_OMG False )
+set ( TRACE_RLC_AM_BO False )
+set ( TRACE_RLC_AM_FREE_SDU False )
+set ( TRACE_RLC_AM_HOLE False )
+set ( TRACE_RLC_AM_PDU False )
+set ( TRACE_RLC_AM_RESEGMENT False )
+set ( TRACE_RLC_AM_RX_DECODE False )
+set ( TRACE_RLC_AM_RX False )
+set ( TRACE_RLC_AM_STATUS_CREATION False )
+set ( TRACE_RLC_AM_TX False )
+set ( TRACE_RLC_AM_TX_STATUS False )
+set ( TRACE_RLC_PAYLOAD False )
+set ( TRACE_RLC_UM_DAR False )
+set ( TRACE_RLC_UM_DISPLAY_ASCII_DATA False )
+set ( TRACE_RLC_UM_PDU False )
+set ( TRACE_RLC_UM_RX False )
+set ( TRACE_RLC_UM_SEGMENT False )
+set ( TRACE_RLC_UM_TX_STATUS False )
+set ( USE_3GPP_ADDR_AS_LINK_ADDR False )
+set ( USE_MME False )
+set ( USER_MODE True )
+set ( XER_PRINT False )
+set ( XFORMS False )
+set(PACKAGE_NAME "lte-softmodem")
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt)
diff --git a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
index ebc724aa5d..97817e6eac 100644
--- a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
+++ b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
@@ -46,8 +46,6 @@ int trx_brf_init(openair0_device *openair0) {
   
 }
 
-
- 
  
 openair0_timestamp trx_get_timestamp(openair0_device *device) {
   int status;
@@ -68,23 +66,44 @@ int trx_brf_start(openair0_device *openair0) {
   return 0;
 }
 
-static void trx_brf_write(openair0_device *device,openair0_timestamp ptimestamp, void **buff, int nsamps, int cc) {
+static void trx_brf_stats(openair0_device *device){
+
+
+}
+
+static int trx_brf_write(openair0_device *device,openair0_timestamp ptimestamp, void **buff, int nsamps, int cc) {
   
-  int status;
+  int status, i;
   brf_state_t *brf = (brf_state_t*)device->priv;
   /* BRF has only 1 rx/tx chaine : is it correct? */
   void *samples = (void*)buff[0];
-  brf->meta_tx.timestamp= ptimestamp;
-  //brf->meta_tx.flags |= BLADERF_META_FLAG_TX_NOW;
   
-  status = bladerf_sync_tx(brf->dev, samples, (unsigned int) nsamps, &brf->meta_tx, brf->timeout_ms);
+  //brf->meta_tx.flags &= ~BLADERF_META_FLAG_TX_NOW;
+  brf->meta_tx.flags = BLADERF_META_FLAG_TX_BURST_START | 
+    BLADERF_META_FLAG_TX_NOW | 
+                       BLADERF_META_FLAG_TX_BURST_END;
+
+  brf->meta_tx.timestamp= (uint64_t) ptimestamp;
+
+  status = bladerf_sync_tx(brf->dev, samples, (unsigned int) nsamps, &brf->meta_tx, 2*brf->tx_timeout_ms);
   
   if (status != 0) {
-    fprintf(stderr, "Failed to TX sample: %s\n", bladerf_strerror(status));
+    fprintf(stderr,"Failed to TX sample: %s\n", bladerf_strerror(status));
     brf->num_tx_errors++;
     brf_error(status);
-  }
+  } else if (brf->meta_tx.status & BLADERF_META_STATUS_UNDERRUN){
+    /* libbladeRF does not report this status. It is here for future use. */ 
+    fprintf(stderr, "TX Underrun detected. %u valid samples were read.\n",  brf->meta_tx.actual_count);
+    brf->num_underflows++;
+  } 
+  //    printf("tx status %d \n",brf->meta_tx.status);
+  brf->tx_current_ts=brf->meta_tx.timestamp;
+  brf->tx_actual_nsamps+=brf->meta_tx.actual_count;
+  brf->tx_nsamps+=nsamps;
+  brf->tx_count++;
+  
 
+  return(0);
 }
 
 static int trx_brf_read(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps, int cc) {
@@ -95,22 +114,26 @@ static int trx_brf_read(openair0_device *device, openair0_timestamp *ptimestamp,
   
   // BRF has only one rx/tx chain
   void *samples = (void*)buff[0];
-  
+ 
   brf->meta_rx.flags |= BLADERF_META_FLAG_RX_NOW;
-  status = bladerf_sync_rx(brf->dev, samples, (unsigned int) nsamps, &brf->meta_rx, brf->timeout_ms);
+  status = bladerf_sync_rx(brf->dev, samples, (unsigned int) nsamps, &brf->meta_rx, 2*brf->rx_timeout_ms);
   
   if (status != 0) {
     fprintf(stderr, "RX failed: %s\n", bladerf_strerror(status)); 
     brf->num_rx_errors++;
   } else if ( brf->meta_rx.status & BLADERF_META_STATUS_OVERRUN) {
     brf->num_overflows++;
-    fprintf(stderr, "RX overrun (%d) in read @ t=0x%"PRIu64". Got %u samples. nsymps %d\n", 
+    fprintf(stderr, "RX overrun (%d) is detected. t=0x%"PRIu64". Got %u samples. nsymps %d\n", 
 	    brf->num_overflows,brf->meta_rx.timestamp,  brf->meta_rx.actual_count, nsamps);
     //brf->meta_rx.timestamp=(unsigned int)(nsamps-brf->meta_rx.actual_count);
-  } //else printf("[BRF] (buff %p) ts=0x%"PRIu64" %s\n",samples, brf->meta_rx.timestamp,bladerf_strerror(status));
+  }
+  //printf("[BRF] (buff %p) ts=0x%"PRIu64" %s\n",samples, brf->meta_rx.timestamp,bladerf_strerror(status));
+  brf->rx_current_ts=brf->meta_rx.timestamp;
+  brf->rx_actual_nsamps+=brf->meta_rx.actual_count;
+  brf->rx_nsamps+=nsamps;
+  brf->rx_count++;
+  
   
-  brf->rx_actual_count+=brf->meta_rx.actual_count;
-  brf->rx_count+=nsamps;
   *ptimestamp = brf->meta_rx.timestamp;
   
   return brf->meta_rx.actual_count;
@@ -162,7 +185,6 @@ int trx_brf_set_gains(openair0_device* device) {
 
 }
 
-
 int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cfg) {
 
   int status;
@@ -171,16 +193,16 @@ int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cf
   brf_state_t *brf = (brf_state_t*)malloc(sizeof(brf_state_t));
   memset(brf, 0, sizeof(brf_state_t));
   // init required params for BRF
-  //brf->dev_model = ;
-   
-  brf->num_buffers = 128;
-  brf->buffer_size = (unsigned int)openair0_cfg[card].samples_per_packet*sizeof(int32_t); // buffer size = 4096 for sample_len of 1024
-  brf->num_transfers = 16;
-  brf->timeout_ms = 0; 
+   brf->num_buffers   = 128;
+   brf->buffer_size   = (unsigned int) openair0_cfg[card].samples_per_packet*sizeof(int32_t); // buffer size = 4096 for sample_len of 1024
+   brf->num_transfers = 16;
+   brf->rx_timeout_ms = 0;  
+   brf->tx_timeout_ms = 0;
    brf->sample_rate=(unsigned int)openair0_cfg[card].sample_rate;
+
    
-   printf("\n[BRF] sampling_rate %d, num_buffers %d,  buffer_size %d, num transfer %d, timeout_ms %d\n", 
-	  brf->sample_rate, brf->num_buffers, brf->buffer_size,brf->num_transfers, brf->timeout_ms);
+   printf("\n[BRF] sampling_rate %d, num_buffers %d,  buffer_size %d, num transfer %d, timeout_ms (rx %d, tx %d)\n", 
+	  brf->sample_rate, brf->num_buffers, brf->buffer_size,brf->num_transfers, brf->rx_timeout_ms, brf->tx_timeout_ms);
 
   if ((status=bladerf_open(&brf->dev, "")) != 0 ) {
     fprintf(stderr,"Failed to open brf device: %s\n",bladerf_strerror(status));
@@ -225,7 +247,7 @@ int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cf
 
   /* Configure the device's RX module for use with the sync interface.
    * SC16 Q11 samples *with* metadata are used. */
-  if ((status=bladerf_sync_config(brf->dev, BLADERF_MODULE_RX, BLADERF_FORMAT_SC16_Q11_META,brf->num_buffers,brf->buffer_size,brf->num_transfers,brf->timeout_ms)) != 0 ) {
+  if ((status=bladerf_sync_config(brf->dev, BLADERF_MODULE_RX, BLADERF_FORMAT_SC16_Q11_META,brf->num_buffers,brf->buffer_size,brf->num_transfers,brf->rx_timeout_ms)) != 0 ) {
     fprintf(stderr,"Failed to configure RX sync interface: %s\n", bladerf_strerror(status));
      brf_error(status);
   }else 
@@ -267,7 +289,7 @@ int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cf
 
   /* Configure the device's TX module for use with the sync interface.
    * SC16 Q11 samples *with* metadata are used. */
-  if ((status=bladerf_sync_config(brf->dev, BLADERF_MODULE_TX,BLADERF_FORMAT_SC16_Q11_META,brf->num_buffers,brf->buffer_size,brf->num_transfers,brf->timeout_ms)) != 0 ) {
+  if ((status=bladerf_sync_config(brf->dev, BLADERF_MODULE_TX,BLADERF_FORMAT_SC16_Q11_META,brf->num_buffers,brf->buffer_size,brf->num_transfers,brf->tx_timeout_ms)) != 0 ) {
     fprintf(stderr,"Failed to configure TX sync interface: %s\n", bladerf_strerror(status));
      brf_error(status);
   }else 
@@ -279,7 +301,7 @@ int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cf
     fprintf(stderr,"Failed to enable TX module: %s\n", bladerf_strerror(status));
     brf_error(status);
   } else 
-    printf("[BRF] RX module enabled \n");
+    printf("[BRF] TX module enabled \n");
  
   bladerf_log_set_verbosity(get_brf_log_level(openair0_cfg[card].log_level));
   
@@ -302,14 +324,11 @@ int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cf
 
 int brf_error(int status) {
   
-  exit(-1);
+  //exit(-1);
   //return 1; // or status error code
 }
 
 
-int openair0_set_rx_frequencies(openair0_device* device, openair0_config_t *openair0_cfg) {
- return 0;
-}
 
 struct bladerf * open_bladerf_from_serial(const char *serial) {
 
@@ -340,7 +359,7 @@ struct bladerf * open_bladerf_from_serial(const char *serial) {
 int get_brf_log_level(int log_level){
 
   int level=BLADERF_LOG_LEVEL_INFO;
-  return  BLADERF_LOG_LEVEL_DEBUG;
+  //return  BLADERF_LOG_LEVEL_DEBUG;
   switch(log_level) {
   case LOG_DEBUG:
     level=BLADERF_LOG_LEVEL_DEBUG;
diff --git a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h
index 52b5ca8453..39518173db 100644
--- a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h
+++ b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h
@@ -46,7 +46,8 @@ typedef struct {
   unsigned int num_buffers;
   unsigned int buffer_size;
   unsigned int num_transfers;
-  unsigned int timeout_ms;
+  unsigned int rx_timeout_ms;
+  unsigned int tx_timeout_ms;
 
   struct bladerf_metadata meta_rx;
   struct bladerf_metadata meta_tx;
@@ -67,8 +68,12 @@ typedef struct {
   int num_rx_errors;
   int num_tx_errors;
 
-  uint64_t tx_actual_count;
-  uint64_t rx_actual_count;
+  uint64_t tx_current_ts;
+  uint64_t rx_current_ts;
+  uint64_t tx_actual_nsamps;
+  uint64_t rx_actual_nsamps;
+  uint64_t tx_nsamps;
+  uint64_t rx_nsamps;
   uint64_t tx_count;
   uint64_t rx_count;
   openair0_timestamp rx_timestamp;
diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
index 3a1782b8a0..f99fa629bf 100644
--- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
@@ -118,10 +118,11 @@ static void trx_usrp_end(openair0_device *device)
 
   s->rx_stream->issue_stream_cmd(uhd::stream_cmd_t::STREAM_MODE_STOP_CONTINUOUS);
 
-	//send a mini EOB packet
-	s->tx_md.end_of_burst = true;
-	s->tx_stream->send("", 0, s->tx_md);
-	s->tx_md.end_of_burst = false;
+  //send a mini EOB packet
+  s->tx_md.end_of_burst = true;
+  s->tx_stream->send("", 0, s->tx_md);
+  s->tx_md.end_of_burst = false;
+  
 }
 
 static int trx_usrp_write(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps, int cc, int flags)
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf
index ef8cb1c2fc..57a43fb414 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf
@@ -28,7 +28,7 @@ eNBs =
                            tdd_config_s            			      = 0;
  			   prefix_type             			      = "NORMAL";
   			   eutra_band              			      = 7;
-                           downlink_frequency      			      = 2660000000L;
+                           downlink_frequency      			      = 2680000000L;
                            uplink_frequency_offset 			      = -120000000;
   			   Nid_cell					      = 0;
                            N_RB_DL                 			      = 25;
diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index bf7eb77ea4..9cd4c13b7f 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -1026,24 +1026,30 @@ static void* eNB_thread_tx( void* param )
 #ifdef LOWLATENCY
   struct sched_attr attr;
   unsigned int flags = 0;
+  uint64_t runtime  = (uint64_t) (get_runtime_tx(proc->subframe, runtime_phy_tx, target_dl_mcs,frame_parms[0]->N_RB_DL,cpuf,PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_tx) *  1000000); 
+  uint64_t deadline = 1   *  1000000; // each tx thread will finish within 1ms
+  uint64_t period   = 1   * 10000000; // each tx thread has a period of 10ms from the starting point
+  if (runtime > 1000000 ){
+    LOG_W(HW,"estimated runtime %d is larger than 1ms, adjusting\n",runtime);
+    runtime = (0.97 * 100) * 10000; 
+  }
 
   attr.size = sizeof(attr);
   attr.sched_flags = 0;
   attr.sched_nice = 0;
   attr.sched_priority = 0;
 
-    attr.sched_policy   = SCHED_DEADLINE;
-   //attr.sched_runtime  = 0.9 *  1000000; // each tx thread requires 1ms to finish its job
-  attr.sched_runtime  = (uint64_t) (get_runtime_tx(proc->subframe, runtime_phy_tx, target_dl_mcs,frame_parms[0]->N_RB_DL,cpuf,PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_tx) *  1000000); // each tx thread requires 1ms to finish its job
-  attr.sched_deadline = 1   *  1000000; // each tx thread will finish within 1ms
-  attr.sched_period   = 1   * 10000000; // each tx thread has a period of 10ms from the starting point
+  attr.sched_policy   = SCHED_DEADLINE;
+  attr.sched_runtime  = runtime;
+  attr.sched_deadline = deadline;
+  attr.sched_period   = period; 
 
   if (sched_setattr(0, &attr, flags) < 0 ) {
     perror("[SCHED] eNB tx thread: sched_setattr failed\n");
     return &eNB_thread_tx_status[proc->subframe];
   }
 
-  LOG_I( HW, "[SCHED] eNB TX deadline thread %d(Tid %ld) started on CPU %d\n", proc->subframe, gettid(), sched_getcpu() );
+  LOG_I( HW, "[SCHED] eNB TX deadline thread %d(TID %ld) started on CPU %d\n", proc->subframe, gettid(), sched_getcpu() );
 #else
   LOG_I( HW, "[SCHED][eNB] TX thread %d started on CPU %d TID %d\n", proc->subframe, sched_getcpu(),gettid() );
 #endif
@@ -1227,17 +1233,24 @@ static void* eNB_thread_rx( void* param )
 #ifdef LOWLATENCY
   struct sched_attr attr;
   unsigned int flags = 0;
+  uint64_t runtime  = get_runtime_rx(proc->subframe, runtime_phy_rx, target_ul_mcs,frame_parms[0]->N_RB_DL,cpuf,PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_rx)  *  1000000; 
+  uint64_t deadline = 1   *  1000000;
+  uint64_t period   = 1   * 10000000; // each rx thread has a period of 10ms from the starting point
+  if (runtime  > 2300000 ) {
+    LOG_W(HW,"estimated rx runtime %d is larger than expected, adjusting\n",runtime);
+    runtime   = 2300000;
+    deadline  = runtime + 100000;
+  }
 
   attr.size = sizeof(attr);
   attr.sched_flags = 0;
   attr.sched_nice = 0;
   attr.sched_priority = 0;
 
-  /* This creates a 2ms reservation every 10ms period*/
   attr.sched_policy = SCHED_DEADLINE;
-  attr.sched_runtime  = (uint64_t)(get_runtime_rx(proc->subframe, runtime_phy_rx, target_ul_mcs,frame_parms[0]->N_RB_DL,cpuf,PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_rx) *  1000000); // each tx thread requires 1ms to finish its job
-  attr.sched_deadline = 1   *  1000000; // each rx thread will finish within 2ms
-  attr.sched_period   = 1   * 10000000; // each rx thread has a period of 10ms from the starting point
+  attr.sched_runtime  = runtime;
+  attr.sched_deadline = deadline;
+  attr.sched_period   = period; 
 
   if (sched_setattr(0, &attr, flags) < 0 ) {
     perror("[SCHED] eNB RX sched_setattr failed\n");
@@ -1354,17 +1367,18 @@ void init_eNB_proc(void)
   for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
     for (i=0; i<NUM_ENB_THREADS; i++) {
       // set the stack size
-      pthread_attr_init( &attr_eNB_proc_tx[CC_id][i] );
-      /*
-      if (pthread_attr_setstacksize( &attr_eNB_proc_tx[CC_id][i], PTHREAD_STACK_MIN ) != 0)
-        perror("[ENB_PROC_TX] setting thread stack size failed\n");
+     
 
+#ifndef LOWLATENCY 
+      /*  
+       pthread_attr_init( &attr_eNB_proc_tx[CC_id][i] );
+       if (pthread_attr_setstacksize( &attr_eNB_proc_tx[CC_id][i], 64 *PTHREAD_STACK_MIN ) != 0)
+        perror("[ENB_PROC_TX] setting thread stack size failed\n");
+      
       pthread_attr_init( &attr_eNB_proc_rx[CC_id][i] );
-
-      if (pthread_attr_setstacksize( &attr_eNB_proc_rx[CC_id][i], PTHREAD_STACK_MIN ) != 0)
+      if (pthread_attr_setstacksize( &attr_eNB_proc_rx[CC_id][i], 64 * PTHREAD_STACK_MIN ) != 0)
         perror("[ENB_PROC_RX] setting thread stack size failed\n");
       */
-#ifndef LOWLATENCY
       // set the kernel scheduling policy and priority
       sched_param_eNB_proc_tx[CC_id][i].sched_priority = sched_get_priority_max(SCHED_FIFO)-1; //OPENAIR_THREAD_PRIORITY;
       pthread_attr_setschedparam  (&attr_eNB_proc_tx[CC_id][i], &sched_param_eNB_proc_tx[CC_id][i]);
@@ -1562,7 +1576,7 @@ static void* eNB_thread( void* arg )
 
   /* This creates a .2 ms  reservation */
   attr.sched_policy = SCHED_DEADLINE;
-  attr.sched_runtime  = (0.2 * 100) * 10000;
+  attr.sched_runtime  = (0.3 * 100) * 10000;
   attr.sched_deadline = (0.9 * 100) * 10000;
   attr.sched_period   = 1 * 1000000;
 
@@ -1761,7 +1775,7 @@ static void* eNB_thread( void* arg )
       stop_meas( &softmodem_stats_hw );
       clock_gettime( CLOCK_MONOTONIC, &trx_time1 );
 
-      if (frame > 10){ 
+      if (frame > 20){ 
 	if (rxs != spp)
 	  exit_fun( "problem receiving samples" );
       }
@@ -1770,22 +1784,22 @@ static void* eNB_thread( void* arg )
       // Transmit TX buffer based on timestamp from RX
 
 
-if (frame > 50) {
-      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 );
-      // prepare tx buffer pointers
-      for (i=0; i<PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_tx; i++){
-        txp[i] = (void*)&rxdata[i][tx_pos];
-		//printf("tx_pos %d ts %d, ts_offset %d txp[i] %p, ap %d\n", tx_pos,  timestamp, (timestamp+(tx_delay*spp)-tx_forward_nsamps),txp[i], i);
+      if (frame > 50) {
+	VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 );
+	// prepare tx buffer pointers
+	for (i=0; i<PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_tx; i++){
+	  txp[i] = (void*)&rxdata[i][tx_pos];
+	  //printf("tx_pos %d ts %d, ts_offset %d txp[i] %p, ap %d\n", tx_pos,  timestamp, (timestamp+(tx_delay*spp)-tx_forward_nsamps),txp[i], i);
 	  // if symb_written < spp ==> error 
 	  openair0.trx_write_func(&openair0,
-                                (timestamp+(openair0_cfg[card].tx_delay*spp)-openair0_cfg[card].tx_forward_nsamps),
-                                txp,
-                                spp,
-                                i,
-                                1);
+				  (timestamp+(openair0_cfg[card].tx_delay*spp)-openair0_cfg[card].tx_forward_nsamps),
+				  txp,
+				  spp,
+				  i,
+				  1);
         }
-	}
-
+      }
+      
       VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TS, timestamp&0xffffffff );
       VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, (timestamp+(openair0_cfg[card].tx_delay*spp)-openair0_cfg[card].tx_forward_nsamps)&0xffffffff );
 
@@ -2857,8 +2871,8 @@ int main( int argc, char **argv )
     openair0_cfg[card].tx_forward_nsamps = 70;
     openair0_cfg[card].tx_delay = 6;
 #elif OAI_BLADERF
-    openair0_cfg[card].tx_forward_nsamps = 70;
-    openair0_cfg[card].tx_delay = 6;
+    openair0_cfg[card].tx_forward_nsamps = 0;
+    openair0_cfg[card].tx_delay = 8;
 #endif 
 #endif
   } else if (frame_parms[0]->N_RB_DL == 6) {
@@ -3426,6 +3440,8 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
   openair0_stop(0);
   printf("closing openair0_lib\n");
   openair0_close();
+#else
+  openair0.trx_end_func(&openair0);
 #endif
 
 #ifdef EMOS
-- 
GitLab