diff --git a/targets/RTAI/LAUNCH_SCRIPTS/load_module.sh b/targets/RTAI/LAUNCH_SCRIPTS/load_module.sh
deleted file mode 100644
index 0ddce88e5d1c2bfc4e84b4a697c7c2220ae35d50..0000000000000000000000000000000000000000
--- a/targets/RTAI/LAUNCH_SCRIPTS/load_module.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-sh /opt/XIO2000/xio_script.sh
-cd ../USERSPACE_TOOLS/OPENAIR_RF
-./openair_rf_cbmimo1_lte 0 4 1
-rmmod -f openair_rf
-cd ../..
-make install_cbmimo1_softmodem_lte_emos_l2
-cd LAUNCH_SCRIPTS
diff --git a/targets/RTAI/LAUNCH_SCRIPTS/nas_enb.sh b/targets/RTAI/LAUNCH_SCRIPTS/nas_enb.sh
deleted file mode 100644
index ecc3164d5bbbfaeb6d10092ed7ead5a6d5945074..0000000000000000000000000000000000000000
--- a/targets/RTAI/LAUNCH_SCRIPTS/nas_enb.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-echo "start setting up eNB interface"
-
-cd $OPENAIR2_DIR
-sudo rmmod nasmesh
-#make nasmesh_netlink_address_fix.ko
-#make nasmesh_netlink.ko
-#make nasmesh.ko
-#make rb_tool
-#route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
-cd -
-
-sudo insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko 
-
-sudo  ifconfig oai0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255
-
-$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s 10.0.1.1 -t 10.0.1.2 -r 3
-
-$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c1 -i0 -z0 -s 10.0.1.1 -t 10.0.1.3 -r 11
-
-echo "end setting up NAS interface"
diff --git a/targets/RTAI/LAUNCH_SCRIPTS/nas_ue.sh b/targets/RTAI/LAUNCH_SCRIPTS/nas_ue.sh
deleted file mode 100644
index 6272dfb4665a4021edad2addfe8b84b245a0a4e4..0000000000000000000000000000000000000000
--- a/targets/RTAI/LAUNCH_SCRIPTS/nas_ue.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh
-echo "setting up UE NAS interface"
-
-cd $OPENAIR2_DIR
-sudo rmmod nasmesh
-#make nasmesh_netlink_address_fix.ko 
-#make nasmesh_netlink.ko
-#make nasmesh.ko
-#make rb_tool
-#route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
-cd -
-sudo insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko 
-
-sudo ifconfig oai0 10.0.1.2 netmask 255.255.255.0 broadcast 10.0.1.255
-
-$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s 10.0.1.2 -t 10.0.1.1 -r 3 
-
-echo "end setting up NAS interface"
diff --git a/targets/RTAI/LAUNCH_SCRIPTS/nas_ue2.sh b/targets/RTAI/LAUNCH_SCRIPTS/nas_ue2.sh
deleted file mode 100644
index f8b871fcc7d1d55fdc9d495086385a803c943800..0000000000000000000000000000000000000000
--- a/targets/RTAI/LAUNCH_SCRIPTS/nas_ue2.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh
-echo "setting up UE NAS interface"
-
-cd $OPENAIR2_DIR
-sudo rmmod nasmesh
-#make nasmesh_netlink_address_fix.ko 
-#make nasmesh_netlink.ko
-#make nasmesh.ko
-#make rb_tool
-#route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
-cd -
-sudo insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko 
-
-sudo ifconfig oai0 10.0.1.3 netmask 255.255.255.0 broadcast 10.0.1.255
-
-$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s 10.0.1.3 -t 10.0.1.1 -r 3 
-
-echo "end setting up NAS interface"
diff --git a/targets/RTAI/LAUNCH_SCRIPTS/start_eNb_mode1.sh b/targets/RTAI/LAUNCH_SCRIPTS/start_eNb_mode1.sh
deleted file mode 100644
index 7da89f36d904625da5e13fe4dbd64c44938c44d7..0000000000000000000000000000000000000000
--- a/targets/RTAI/LAUNCH_SCRIPTS/start_eNb_mode1.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-sudo sh $OPENAIR1_DIR/xio_script.sh
-sh stop_rf.sh
-sh start_rf.sh
-
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 0 0 1 # dump Config
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 6 110 110 100 100 #Set TX gains
-#$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 2 26 100   #Card v2_10 synched to v2_19
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 14 0  #SET RX RF Mode
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 32 1  #Set DLSCH Transmission Mod
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 1 0 0 #Start Primary Clusterhead
-
-#$OPENAIR1_DIR/USERSPACE_TOOLS/SCOPE/lte_scope_ul 0 0 &
-#$OPENAIR1_DIR/USERSPACE_TOOLS/SCOPE/lte_scope_ul 0 1 &
\ No newline at end of file
diff --git a/targets/RTAI/LAUNCH_SCRIPTS/start_eNb_mode2.sh b/targets/RTAI/LAUNCH_SCRIPTS/start_eNb_mode2.sh
deleted file mode 100644
index 30b77a5069e4b9225670cc6963d664fb68db4c5c..0000000000000000000000000000000000000000
--- a/targets/RTAI/LAUNCH_SCRIPTS/start_eNb_mode2.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-sudo sh $OPENAIR1_DIR/xio_script.sh
-sh stop_rf.sh
-sh start_rf.sh
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 0 1 1
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 6 110 110 100 100
-#$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 2 26 100   #Card v2_10 synched to v2_19
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 14 0
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 32 2
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 1 1 0
-
diff --git a/targets/RTAI/LAUNCH_SCRIPTS/start_eNb_mode6.sh b/targets/RTAI/LAUNCH_SCRIPTS/start_eNb_mode6.sh
deleted file mode 100644
index c8a93adf4fe3e14906a23554293c568ac2692984..0000000000000000000000000000000000000000
--- a/targets/RTAI/LAUNCH_SCRIPTS/start_eNb_mode6.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-cd USERSPACE_TOOLS/OPENAIR_RF
-./openair_rf_cbmimo1_lte 0 4 1
-rmmod -f openair_rf
-cd ../..
-make install_cbmimo1_softmodem_lte_emos_l2
-cd USERSPACE_TOOLS/OPENAIR_RF
-./openair_rf_cbmimo1_lte 0 0 1 1
-./openair_rf_cbmimo1_lte 0 6 137 137 140 140
-./openair_rf_cbmimo1_lte 0 14 2
-./openair_rf_cbmimo1_lte 0 32 6
-source /opt/XIO2000/xio_script.sh
-./openair_rf_cbmimo1_lte 0 1 1 0
-cd ../..
diff --git a/targets/RTAI/LAUNCH_SCRIPTS/start_emos.sh b/targets/RTAI/LAUNCH_SCRIPTS/start_emos.sh
deleted file mode 100644
index f9d9e8edf0d99449f307031e9fb06b6a667ca0ca..0000000000000000000000000000000000000000
--- a/targets/RTAI/LAUNCH_SCRIPTS/start_emos.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-gpsd /dev/ttyUSB0
-cd USERSPACE_TOOLS/OPENAIR_RF
-
-./openair_rf_cbmimo1_lte 0 4 1
-rmmod -f openair_rf
-cd ../..
-make install_cbmimo1_softmodem_lte_emos_l2
-cd EMOS/LTE/GUI
-./emos_gui &
-
diff --git a/targets/RTAI/LAUNCH_SCRIPTS/start_rf.sh b/targets/RTAI/LAUNCH_SCRIPTS/start_rf.sh
deleted file mode 100644
index a2177b1a6aa9993c6ff80b96a5100a13c3406f92..0000000000000000000000000000000000000000
--- a/targets/RTAI/LAUNCH_SCRIPTS/start_rf.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-sudo insmod $OPENAIR2_DIR/RRC/LITE/MESSAGES/asn1_msg_kern.ko
-sudo insmod $OPENAIR1_DIR/ARCH/CBMIMO1/DEVICE_DRIVER/openair_rf_softmodem.ko
\ No newline at end of file
diff --git a/targets/RTAI/LAUNCH_SCRIPTS/start_test_fs4.sh b/targets/RTAI/LAUNCH_SCRIPTS/start_test_fs4.sh
deleted file mode 100644
index 72f24bbd0a605902201f44b8c23cb0b3cbead26d..0000000000000000000000000000000000000000
--- a/targets/RTAI/LAUNCH_SCRIPTS/start_test_fs4.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-sh $OPENAIR1_DIR/xio_script.sh
-cd ../USERSPACE_TOOLS/OPENAIR_RF
-./openair_rf_cbmimo1_lte 0 4 1
-rmmod -f openair_rf
-cd ../..
-make install_cbmimo1_softmodem
-cd USERSPACE_TOOLS/OPENAIR_RF
-./openair_rf_cbmimo1_lte 0 0 1 1
-./openair_rf_cbmimo1_lte 0 26 100
-./openair_rf_cbmimo1_lte 0 6 150 150 140 140
-./openair_rf_cbmimo1_lte 0 14 0
-./openair_rf_cbmimo1_lte 0 8 1
-cd ../../LAUNCH_SCRIPTS
diff --git a/targets/RTAI/LAUNCH_SCRIPTS/start_ue.sh b/targets/RTAI/LAUNCH_SCRIPTS/start_ue.sh
deleted file mode 100644
index d504d2c0b0971c71a0167de35d4ad2e0236ef59d..0000000000000000000000000000000000000000
--- a/targets/RTAI/LAUNCH_SCRIPTS/start_ue.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-sudo sh $OPENAIR1_DIR/xio_script.sh
-sh stop_rf.sh
-sh start_rf.sh
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 0 0 1 # dump config
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 6 100 100 100 100 #Set TX gains
-#./openair_rf_cbmimo1_lte 0 25 0 
-#./openair_rf_cbmimo1_lte 0 15 101 # Card v15 synched to card v38
-#./openair_rf_cbmimo1_lte 0 15 117 # Card v15 synched to card v5
-#./openair_rf_cbmimo1_lte 0 15 135 # Card v37 synched to card v5
-#$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 15 89 # Card v42 synched to card v43
-#$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 15 85 # Card v47 synched to card v43
-#./openair_rf_cbmimo1_lte 0 26 400
-#$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 15 103 # Card v47 synched to card v42
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 15 110 # Card v42 synched to card v47
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 14 0 #RF mode 0 = mixer low gain, lna off
-#./openair_rf_cbmimo1_lte 0 14 1 #RF mode 1 = mixer low gain, lna on
-#./openair_rf_cbmimo1_lte 0 14 2 #RF mode 2 = mixer high gain, lna on
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 3 1 0 #Start Node - param 0/1
diff --git a/targets/RTAI/LAUNCH_SCRIPTS/start_ue2.sh b/targets/RTAI/LAUNCH_SCRIPTS/start_ue2.sh
deleted file mode 100644
index f16a3aa984e5f7ab3688fba41920ff344dd39c12..0000000000000000000000000000000000000000
--- a/targets/RTAI/LAUNCH_SCRIPTS/start_ue2.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-sudo sh $OPENAIR1_DIR/xio_script.sh
-sh stop_rf.sh
-sh start_rf.sh
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 0 0 1
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 6 100 100 100 100
-#./openair_rf_cbmimo1_lte 0 25 0 
-#./openair_rf_cbmimo1_lte 0 15 101 # Card v15 synched to card v38
-#./openair_rf_cbmimo1_lte 0 15 117 # Card v15 synched to card v5
-#./openair_rf_cbmimo1_lte 0 15 135 # Card v37 synched to card v5
-#./openair_rf_cbmimo1_lte 0 26 400
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 14 0 #RF mode 0 = mixer low gain, lna off
-#./openair_rf_cbmimo1_lte 0 14 1 #RF mode 1 = mixer low gain, lna on
-#./openair_rf_cbmimo1_lte 0 14 2 #RF mode 2 = mixer high gain, lna on
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 3 1 1
diff --git a/targets/RTAI/LAUNCH_SCRIPTS/stop_rf.sh b/targets/RTAI/LAUNCH_SCRIPTS/stop_rf.sh
deleted file mode 100644
index 178ac6a16b551d98fe3234cedc9d8b8307587d05..0000000000000000000000000000000000000000
--- a/targets/RTAI/LAUNCH_SCRIPTS/stop_rf.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-killall lte_scope
-killall lte_scope_ul
-$OPENAIR1_DIR/USERSPACE_TOOLS/OPENAIR_RF/openair_rf_cbmimo1_lte 0 4 1
-sudo rmmod -f nasmesh
-sudo rmmod -f openair_rf
-sudo rmmod -f asn1_msg_kern
-
diff --git a/targets/RTAI/Makefile b/targets/RTAI/Makefile
deleted file mode 100644
index 17f3def87f91672534ababd6bca8880221d9e447..0000000000000000000000000000000000000000
--- a/targets/RTAI/Makefile
+++ /dev/null
@@ -1,123 +0,0 @@
-# command line flags are automatically exported and thus passed down to any sub-make. 
-# here we set the default flags in case on command line flags are provided
-# these flags have to be explicitely exported so that the sub-make is aware of them
-
-
-ifndef OPENAIR_LTE
-export OPENAIR_LTE=1
-export OPENAIR_EMU=0
-endif
-
-ifndef OPENAIR1
-export OPENAIR1=0
-endif
-
-ifndef OPENAIR2
-export OPENAIR2=0
-endif
-
-ifndef OPENAIR3
-export OPENAIR3=0
-endif
-
-ifndef EMOS
-export EMOS=0
-endif
-
-ifndef rrc_cellular
-export rrc_cellular = 0
-export rrc_cellular_eNB = 0
-export rrc_cellular_UE = 0
-else
- export rrc_cellular = 1	
-  ifeq ($(eNB_flag),1)
-    export rrc_cellular_eNB=1
-  endif
-  ifeq ($(UE_flag),1)
-    export rrc_cellular_UE=1
-  endif
-endif
-
-all: openair_rf_cbmimo1_softmodem.ko asn1_msg_kern.ko nasmesh.ko rb_tool openair_rf scope
-
-openair_rf_cbmimo1_softmodem.ko:  
-	(cd $(OPENAIR1_DIR)/ARCH/CBMIMO1/DEVICE_DRIVER && $(MAKE) -C /usr/src/linux V=1 M=`pwd` RTAI=1 CBMIMO1=1 && mv openair_rf.ko $(CURDIR)/openair_rf_softmodem.ko)
-
-oai_user_cbmimo1.ko:
-	(cd $(OPENAIR1_DIR)/ARCH/CBMIMO1/DEVICE_DRIVER && $(MAKE) -C /usr/src/linux V=1 M=`pwd` RTAI=1 CBMIMO1=1 BIT8_TX=1 OPENAIR1=0 OPENAIR2=0 && mv openair_rf.ko $(CURDIR)/openair_rf_softmodem.ko)
-
-oai_user_exmimo.ko:
-	(cd $(OPENAIR1_DIR)/ARCH/CBMIMO1/DEVICE_DRIVER && $(MAKE) -C /usr/src/linux V=1 M=`pwd` RTAI=1 CBMIMO1=1 OPENAIR1=0 OPENAIR2=0 && mv openair_rf.ko $(CURDIR)/openair_rf_softmodem.ko)
-
-asn1_msg_kern.ko:
-	(cd $(OPENAIR2_DIR)/RRC/LITE/MESSAGES && $(MAKE) -C /usr/src/linux V=0 M=`pwd` RTAI=1 -j2 && mv asn1_msg_kern.ko $(CURDIR)/asn1_msg_kern.ko)
-
-nasmesh.ko:
-	(cd $(OPENAIR2_DIR)/NAS/DRIVER/MESH && $(MAKE) V=1 -C /usr/src/linux M=`pwd` && mv nasmesh.ko $(CURDIR)/nasmesh.ko)
-
-rb_tool:
-	(cd $(OPENAIR2_DIR)/NAS/DRIVER/MESH/RB_TOOL && $(MAKE))
-
-openair_rf:
-	(cd $(OPENAIR1_DIR)/USERSPACE_TOOLS/OPENAIR_RF && $(MAKE) clean CBMIMO1=1 && $(MAKE) all CBMIMO1=1 && $(MAKE) clean CBMIMO1=1)
-
-scope:
-	(cd $(OPENAIR1_DIR)/USERSPACE_TOOLS/SCOPE && $(MAKE) clean && $(MAKE) all && $(MAKE) clean )	
-
-#Remove all but source files
-cleanall: 
-	(cd $(OPENAIR1_DIR) && $(MAKE) cleanall)
-	(cd $(OPENAIR2_DIR) && $(MAKE) cleanall)
-
-fifos:
-	@for i in `seq 0 64`;\
-	do \
-	have_rtfX=`ls /dev/ |grep -c rtf$$i`;\
-	if [ "$$have_rtfX" -eq 0 ] ;then \
-	mknod -m 666 /dev/rtf$$i c 150 $$i; \
-	fi;\
-	done
-
-openair0:
-	mknod /dev/openair0 c 127 0
-	chmod a+rw /dev/openair0
-
-install_oai_user:
-	make fifos
-	insmod openair_rf_softmodem.ko
-
-updatefw:
-	$(OPENAIR1_DIR)/USERSPACE_TOOLS/OAI_FW_INIT/updatefw -f $$OPENAIR0_DIR/express-mimo/software/sdr/main -s 0x43fffff0 
-
-boot_exmimo:
-	sudo make install_oai_user
-	$(OPENAIR1_DIR)/USERSPACE_TOOLS/OAI_FW_INIT/updatefw -f $$OPENAIR0_DIR/express-mimo/software/sdr/main -s 0x43fffff0 
-	sleep 1
-	sudo rmmod openair_rf
-	sudo make install_oai_user
-
-reboot_exmimo:
-	$(OPENAIR1_DIR)/USERSPACE_TOOLS/OAI_FW_INIT/updatefw -f $$OPENAIR0_DIR/express-mimo/software/sdr/main -s 0x43fffff0 -b
-	sudo rmmod openair_rf
-	sudo make install_oai_user
-
-install_softmodem:
-	make fifos
-ifeq ($(OPENAIR2),1)
-	insmod asn1_msg_kern.ko
-endif
-	insmod openair_rf_softmodem.ko
-
-remove:
-	rmmod openair_rf
-ifeq ($(OPENAIR2),1)
-	rmmod asn1_msg_kern
-endif
-
-test:
-	(cd $(OPENAIR1_DIR)/ARCH/CBMIMO1/DEVICE_DRIVER && $(MAKE) test RTAI=1 CBMIMO1=1)	
-	(cd $(OPENAIR2_DIR)/RRC/LITE/MESSAGES && $(MAKE) test)
-
-clean:
-	(cd $(OPENAIR1_DIR)/ARCH/CBMIMO1/DEVICE_DRIVER && $(MAKE) clean RTAI=1 CBMIMO1=1)
-	(cd $(OPENAIR2_DIR)/RRC/LITE/MESSAGES && $(MAKE) clean)
diff --git a/targets/RTAI/USER/.runinfo b/targets/RTAI/USER/.runinfo
deleted file mode 100644
index f61c16eabfad9150e8a80d53cbbd6f7dc6cf2c6f..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/.runinfo
+++ /dev/null
@@ -1,41 +0,0 @@
-sleeptest:lxrt+sem+mbx+msg+fifos:!./sleeptest;sleep 1;popall:control_c
-synctest:lxrt+sem+mbx+msg+fifos:!./synctest -V;sleep 1;popall:control_c
-condtest:lxrt+sem+mbx+msg+fifos:!sudo ./condtest;sleep 1;popall:control_c
-msg_test:lxrt+sem+mbx+msg+fifos:!sudo ./msg_test;sleep 1;popall:control_c
-msg_many:lxrt+sem+mbx+msg+fifos:!sudo ./msg_test;sleep 1;popall:control_c
-eNB:lxrt+sem+mbx+msg+fifos:!sudo ./synctest;sleep 1;popall:control_c
-eNB_test:lxrt+sem+mbx+msg+smi:!sudo ./lte-softmodem -S -F enb2tx;sleep 1;popall:control_c
-UE:lxrt+sem+mbx+msg+fifos:!sudo ./synctest -U -d -T 108;sleep 1;popall:control_c
-#UE0:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -U -d -C 1907602944 -V;sleep 1;popall:control_c
-#EXMIMO2 card 1
-#UE0:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -U -d -C 1907600480 -V;sleep 1;popall:control_c
-UE0:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -U -d -C 1907600480 -V -K /tmp/itti_UE0.log;sleep 1;popall:control_c
-#EXMIMO2 card 5 
-#UE0:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -U -d -C 1907597240 -V;sleep 1;popall:control_c
-#EXMIMO2 card 24
-#UE0_smbv:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -U -d -C 1907595776 -V;sleep 1;popall:control_c
-#EXMIMO2 card 5?
-UE0_smbv:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -U -d -C 1907598252 -V;sleep 1;popall:control_c
-UE850:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -U -d -C 859498000 -F ex2_850;sleep 1;popall:control_c
-eNB850:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -d -C 859500000 -F ex2_850;sleep 1;popall:control_c
-UE0noL2:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -U -d -C 1907600480 --no-L2-connect;sleep 1;popall:control_c
-UE0calib:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -U -d -C 1912600000 --calib-ue-rx -70 ;sleep 1;popall:control_c
-UE0calibmed:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -U -d -C 1912600000 --calib-ue-rx-med -70 ;sleep 1;popall:control_c
-UE0calibbyp:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -U -d -C 1912600000 --calib-ue-rx-byp -70 ;sleep 1;popall:control_c
-UE0prach:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -U -d -C 1912606900 -F ue1 --debug-ue-prach;sleep 1;popall:control_c
-UE1:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -U -d -C 1907600000 -F ue1 ;sleep 1;popall:control_c
-UE1prach:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -U -d -C 1907600000 -F ue1 --debug-ue-prach;sleep 1;popall:control_c
-UE1noL2:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -U -d -C 1907600000 -F ue1 --no-L2-connect;sleep 1;popall:control_c
-UE2:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -U -d -C 1907600000 -F ue2;sleep 1;popall:control_c
-UE2prach:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -U -d -C 1907600000 -F ue2 --debug-ue-prach;sleep 1;popall:control_c
-UE2noL2:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -U -d -C 1907600000 -F ue2 --no-L2-connect;sleep 1;popall:control_c
-#eNB0:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -C 1907600000 -d -V;sleep 1;popall:control_c
-#eNB0:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -C 1907598252 -d -V;sleep 1;popall:control_c
-eNB0:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -d -O../../PROJECTS/GENERIC-LTE-EPC/CONF/enb.sfr.sud.conf -V -K /tmp/itti_eNB0.log;sleep 1;popall:control_c
-eNB1:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -C 1907600000 -F ex2_2 -d;sleep 1;popall:control_c
-eNB2:lxrt+sem+mbx+msg+fifos:!sudo ./lte-softmodem -C 1907600000 -F ue2 -d;sleep 1;popall:control_c
-dot11:lxrt+sem+mbx+msg+fifos:!sudo ./dot11 -C 1907600000 -d;sleep 1;popall:control_c
-dot11_tx_test: lxrt+sem+mbx+msg+fifos:!sudo ./dot11 -C 1907600000 -d -t;sleep 1;popall:control_c
-eNB2_750:lxrt+sem+mbx+msg+fifos:!sudo ./synctest_eNB -C 746000000 -F enb1tx_750 -d;sleep 1;popall:control_c
-eNB2_1900:lxrt+sem+mbx+msg+fifos:!sudo ./synctest_eNB -C 19076000000 -F enb1tx_1900 -d;sleep 1;popall:control_c
-emos-raw:lxrt+sem+mbx+msg+fifos:!sudo ./emos-raw -d -V;sleep 1;popall:control_c
diff --git a/targets/RTAI/USER/.ue.nvram b/targets/RTAI/USER/.ue.nvram
deleted file mode 100644
index 17469c87add15bffcfe07e54a19cd93743f18818..0000000000000000000000000000000000000000
Binary files a/targets/RTAI/USER/.ue.nvram and /dev/null differ
diff --git a/targets/RTAI/USER/.ue_emm.nvram b/targets/RTAI/USER/.ue_emm.nvram
deleted file mode 100644
index e858ba8cce57931e7fdf05ce434c22cd6bb6daa5..0000000000000000000000000000000000000000
Binary files a/targets/RTAI/USER/.ue_emm.nvram and /dev/null differ
diff --git a/targets/RTAI/USER/.usim.nvram b/targets/RTAI/USER/.usim.nvram
deleted file mode 100644
index 4e9adcd0d341f8826310a2c6a95a7f518dc14d97..0000000000000000000000000000000000000000
Binary files a/targets/RTAI/USER/.usim.nvram and /dev/null differ
diff --git a/targets/RTAI/USER/Makefile b/targets/RTAI/USER/Makefile
deleted file mode 100644
index 4151d1a8d535fe5b73c28ff8b753a0188aeca733..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/Makefile
+++ /dev/null
@@ -1,395 +0,0 @@
-# Include some shared directives
-include $(OPENAIR_TARGETS)/Makerules
-
-default: lte-softmodem
-all: lte-softmodem lte-enb
-
-include $(OPENAIR_TARGETS)/Makefile.common
-
-GCCVERSION = $(shell gcc --version | grep ^gcc | sed 's/^.* //g')
-ifeq "$(GCCVERSION)"  "4.4.3"
-    CFLAGS += -Wno-packed-bitfield-compat
-endif
-ifeq "$(GCCVERSION)" "4.5.2"
-    CFLAGS += -Wno-packed-bitfield-compat
-endif
-ifeq "$(GCCVERSION)" "4.6.1"
-    CFLAGS += -Wno-packed-bitfield-compat
-endif
-
-CFLAGS += -O2 
-CFLAGS += -DDRIVER2013 -I$(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/LIB/ -I$(OPENAIR_TARGETS)/ARCH/EXMIMO/DEFS -DENABLE_VCD_FIFO
-ifdef DEBUG
-CFLAGS += -g -ggdb
-endif
-SRC = synctest.c condtest.c #lte-softmodem.c
-
-ifndef RTAI
-RTAI=1
-endif
-
-ifndef USRP
-USRP=0
-endif
-
-ifeq ($(ENABLE_RAL), 1)
-CFLAGS += -DENABLE_RAL
-endif
-
-ifdef SECU
-ifeq ($(NETTLE_FOUND), 0)
-@echo "Nettle library >= 2.5 is not installed on your system, nettle-dev lib needed, continuing with security disabled"
-SECU=0
-else
-ifeq ($(OPENSSL_FOUND), 0)
-@echo "openssl library is not installed on your system, openssl lib needed, continuing with security disabled"
-SECU=0
-else
-CFLAGS += -DENABLE_SECURITY
-LIBS += $(OPENSSL_LIBS) $(NETTLE_LIBS)
-endif
-endif
-endif
-
-
-ifeq ($(RTAI),1)
-CFLAGS += -DENABLE_RTAI_CLOCK
-CFLAGS += -DCONFIG_RTAI_LXRT_INLINE  #remend the RTAI warning
-RTAI_OBJ = sched_dlsch.o sched_ulsch.o sched_rx_pdsch.o rt_wrapper.o 
-ifeq ($(USRP),1)
-RTAI_OBJ += lte-softmodem-usrp.o
-endif
-else #RTAI
-CFLAGS += -DENABLE_USE_CPU_EXECUTION_TIME
-OBJ += sched_dlsch.o sched_ulsch.o sched_rx_pdsch.o rt_wrapper.o
-ifeq ($(USRP),1)
-OBJ += lte-softmodem-usrp.o
-endif
-endif
-
-OBJ += $(OPENAIR1_DIR)/SIMULATION/TOOLS/taus.o $(OPENAIR_TARGETS)/SIMU/USER/init_lte.o #$(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.o 
-
-ifeq ($(USRP),1)
-include $(OPENAIR_TARGETS)/ARCH/USRP/USERSPACE/LIB/Makefile.inc
-endif
-
-OBJ += $(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.o $(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/LIB/gain_control.o
-CFLAGS += -DDRIVER2013 -I$(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/LIB/ -I$(OPENAIR_TARGETS)/ARCH/EXMIMO/DEFS -DENABLE_VCD_FIFO
-
-TOP_DIR = $(OPENAIR1_DIR)
-include $(OPENAIR1_DIR)/PHY/Makefile.inc
-include $(OPENAIR1_DIR)/SCHED/Makefile.inc
-
-OBJ += $(PHY_OBJS)
-ifeq ($(RTAI),1)
-RTAI_OBJ += $(SCHED_OBJS)
-else
-OBJ += $(SCHED_OBJS)
-endif
-
-OPENAIR2_TOP = $(OPENAIR2_DIR)
-include $(OPENAIR2_DIR)/LAYER2/Makefile.inc
-include $(OPENAIR2_DIR)/UTIL/Makefile.inc
-include $(OPENAIR2_DIR)/RRC/NAS/Makefile.inc
-include $(OPENAIR2_DIR)/ENB_APP/Makefile.inc
-include $(OPENAIR3_DIR)/RAL-LTE/Makefile.inc
-
-OBJ +=  $(ENB_APP_OBJS)
-
-ifeq ($(RTAI),1)
-LOG_OBJS=
-RTAI_OBJ+=$(LOG_DIR)/vcd_signal_dumper.o
-RTAI_OBJ+=$(LOG_DIR)/log.o
-endif
-
-include $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/Makefile.inc
-
-OBJ += $(LOG_OBJS) 
-
-ifndef OPENAIR2
-OPENAIR2=1
-endif
-ifeq ($(OPENAIR2),1)
-ASN1_MSG_OBJS1=$(addprefix $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/, $(ASN1_MSG_OBJS))
-OBJ += $(L2_OBJS) $(LIST_OBJ) $(TIMER_OBJ) $(MEM_OBJ) $(OTG_OBJS) $(MATH_OBJS)  $(OSA_OBJS)  
-OBJ += $(OPENAIR1_DIR)/SIMULATION/ETH_TRANSPORT/netlink_init.o
-#OBJ += $(PDCP_DIR)/pdcp_thread.o
-CFLAGS += -DOPENAIR2 -DNO_RRM -DPUCCH -DMAC_CONTEXT=1
-endif
-
-RTAI_OBJ += $(UTILS_OBJS)
-
-ifdef ENABLE_ITTI
-CFLAGS += -DEXMIMO_IOT
-endif
-
-ifdef MSG_PRINT
-CFLAGS += -DRRC_MSG_PRINT
-CFLAGS += -DPDCP_MSG_PRINT
-endif
-
-CFLAGS += $(L2_incl) $(ENB_APP_incl) $(UTIL_incl) $(UTILS_incl)
-
-CFLAGS += -I$(OPENAIR1_DIR) -I$(OPENAIR2_DIR)/RRC/LITE/MESSAGES	#-I$(OPENAIR3_DIR)/MESH -I$(OPENAIR3_DIR)/MESH/RRM
-
-CFLAGS += -DNEW_FFT -DLOG_NO_THREAD
-
-ifeq ($(XFORMS),1)
-CFLAGS += -DXFORMS -I/usr/include/X11
-LDFLAGS += -lforms
-OBJ += $(OPENAIR1_DIR)/PHY/TOOLS/lte_phy_scope.o
-OBJ += stats.o
-endif
-
-OBJ_SYNC = $(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.o rt_wrapper.o $(OPENAIR2_DIR)/UTIL/LOG/log.o $(OPENAIR2_DIR)/UTIL/LOG/vcd_signal_dumper.o 
-
-ifdef SMBV
-CFLAGS += -DSMBV
-endif
-
-#CPUFLAGS = -mmmx -msse -msse2 -m32 -mssse3 -msse4.1
-CPUFLAGS = -mmmx -msse -msse2 -mssse3 -msse4.1
-#CFLAGS += -fno-common -mpreferred-stack-boundary=4  
-CFLAGS += -Wall -fno-strict-aliasing -DPHYSIM -DUSER_MODE -DPC_TARGET -DPC_DSP -DNB_ANTENNAS_RX=2 -DNB_ANTENNAS_TXRX=2 -DNB_ANTENNAS_TX=2 -DPHY_CONTEXT=1 -rdynamic $(CPUFLAGS) # -Wno-packed-bitfield-compat
-CFLAGS += -DOPENAIR_LTE -DENABLE_FXP -DOPENAIR1 -DDLSCH_THREAD #-DULSCH_THREAD
-
-#only for CBMIMO1
-ifdef CBMIMO1
-CFLAGS += -DFW2011 -DBIT8_TX -DCBMIMO1
-else
-#only for EXPRESS MIMO
-CFLAGS += -DEXMIMO
-#CFLAGS += -DEXMIMO -DTIMING_ADVANCE_HW=138 #this is for ExpressMIMO 1
-#CFLAGS += -DEXMIMO -DTIMING_ADVANCE_HW=45 #this is for ExpressMIMO 2
-endif
-
-ifeq ($(HARD_RT),1)
-CFLAGS += -DHARD_RT
-endif
-
-ifeq ($(EMOS),1)
-CFLAGS += -D_FILE_OFFSET_BITS=64 -DEMOS #-DEMOS_CHANNEL
-LDFLAGS += -lgps
-endif
-
-ifeq ($(NAS),1)
-CFLAGS += -DNAS_NETLINK -DLINUX
-OBJ += $(NAS_OBJS)
-endif
-
-LDFLAGS += -lpthread -lm -lforms -lconfig -lrt
-ifeq ($(RTAI),1)
-RTAI_CFLAGS += $(shell rtai-config --lxrt-cflags) -DRTAI
-LDFLAGS += $(shell rtai-config --lxrt-ldflags)
-endif
-
-ifeq ($(USRP),1)
-CFLAGS += -I/opt/uhd/include -L/opt/uhd/lib -luhd -lpthread -lstdc++
-CFLAGS += -DUSRP
-endif
-#CFLAGS += -I/usr/include/c++/4.6 -I/usr/include/c++/4.6/x86_64-linux-gnu -I/usr/include/rtai/
-
-LFDS_OBJ_DIR		 = $(subst $(OPENAIR_HOME),$(OBJS_DIR),$(LFDS_DIR))
-LFDS_LIB		 = $(LFDS_OBJ_DIR)/bin/liblfds611.a
-LIBS 			+= $(LFDS_LIB)
-SHARED_DEPENDENCIES 	+= $(LFDS_LIB)
-
--include $(OBJ:.o=.d)
--include $(ASN1_MSG_OBJS1:.o=.d)
--include $(RTAI_OBJ:.o=.d)
--include lte-softmodem.d
--include lte-enb.d
-
-$(LFDS_LIB):
-	@if [ ! -d $(LFDS_OBJ_DIR)/bin ]; then mkdir -p $(LFDS_OBJ_DIR)/bin; fi;
-	@if [ ! -d $(LFDS_OBJ_DIR)/obj ]; then mkdir -p $(LFDS_OBJ_DIR)/obj; fi;
-	$(MAKE) -C $(LFDS_DIR) -f makefile.linux OUTDIR=$(LFDS_OBJ_DIR)
-
-ifeq ($(RTAI),1)
-$(RTAI_OBJ) lte-enb.o lte-softmodem.o: %.o : %.c
-else
-$(RTAI_OBJ): %.o : %.c
-endif
-	@echo Compiling $< ...
-	@$(CC) -c $(CFLAGS) $(EXTRA_CFLAGS) $(RTAI_CFLAGS) -o $@ $<
-	@$(CC) -MM $(CFLAGS) $(EXTRA_CFLAGS) $(RTAI_CFLAGS) $< > $*.d
-	@mv -f $*.d $*.d.tmp
-	@sed -e 's|.*:|$*.o:|' < $*.d.tmp > $*.d
-	@sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | \
-	sed -e 's/^ *//' -e 's/$$/:/' >> $*.d
-	@rm -f $*.d.tmp
-
-ifdef ENABLE_ITTI
-$(OBJ) $(RTAI_OBJ): $(ITTI_MESSAGES_H)
-endif
-
-ifeq ($(RTAI),1)
-$(OBJ) $(ASN1_MSG_OBJS1): %.o : %.c
-else
-$(OBJ) $(ASN1_MSG_OBJS1) lte-enb.o lte-softmodem.o: %.o : %.c
-endif
-
-	@echo Compiling $< ...
-	@$(CC) -c $(CFLAGS) $(EXTRA_CFLAGS) -o $@ $<
-	@$(CC) -MM $(CFLAGS) $(EXTRA_CFLAGS) $< > $*.d
-	@mv -f $*.d $*.d.tmp
-	@sed -e 's|.*:|$*.o:|' < $*.d.tmp > $*.d
-	@sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | \
-	sed -e 's/^ *//' -e 's/$$/:/' >> $*.d
-	@rm -f $*.d.tmp
-
-OBJ_EMOS = $(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.o $(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/LIB/gain_control.o rt_wrapper.o $(OPENAIR2_DIR)/UTIL/LOG/log.o $(OPENAIR2_DIR)/UTIL/LOG/vcd_signal_dumper.o $(OPENAIR1_DIR)/PHY/TOOLS/signal_energy.o $(OPENAIR1_DIR)/PHY/TOOLS/dB_routines.o
-ifeq ($(XFORMS),1)
-OBJ_EMOS+=lte_scope.o
-endif
-
-$(USRP_OBJ):$(USRP_FILE_OBJ)
-	@echo Compiling openair_usrp.cpp
-	@$(CXX) -c $(USRP_CFLAGS) $(USRP_FILE_OBJ) -o $(USRP_OBJ)
-
-condtest: condtest.c 
-	$(CC) $(CFLAGS) $(LDFLAGS) condtest.c -o condtest
-
-synctest: $(OBJ_SYNC) $(SHARED_DEPENDENCIES) synctest.c
-	$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(RTAI_CFLAGS) $(OBJ_SYNC) -o synctest synctest.c $(LDFLAGS) $(LIBS)
-
-sleeptest: rt_wrapper.o sleeptest.c
-	$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(RTAI_CFLAGS) rt_wrapper.o -o sleeptest sleeptest.c $(LDFLAGS) 
-
-lte-softmodem: $(OBJ) $(ASN1_MSG_OBJS1) $(RTAI_OBJ) lte-softmodem.o $(SHARED_DEPENDENCIES)
-	@echo Linking $@
-	@$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(OBJ) $(RTAI_OBJ) $(ASN1_MSG_OBJS1) lte-softmodem.o -o lte-softmodem $(LDFLAGS) $(LIBS)
-
-lte-enb: $(OBJ) $(ASN1_MSG_OBJS1) $(RTAI_OBJ) lte-enb.o $(SHARED_DEPENDENCIES)
-	@echo Linking $@
-	@$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(OBJ) $(RTAI_OBJ) $(ASN1_MSG_OBJS1) lte-enb.o -o lte-enb $(LDFLAGS) $(LIBS)
-
-lte-softmodem-usrp: $(OBJ) $(ASN1_MSG_OBJS1) $(RTAI_OBJ) $(USRP_OBJ) $(SHARED_DEPENDENCIES)
-	@echo Linking $@
-	@$(CC) $(USRP_OBJ) $(CFLAGS) $(OBJ) $(RTAI_OBJ) $(ASN1_MSG_OBJS1) -o lte-softmodem-usrp $(LDFLAGS) $(LIBS)
-
-emos-raw: $(SHARED_DEPENDENCIES) $(OBJ_EMOS) emos-raw.c
-	@$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(RTAI_CFLAGS) $(OBJ_EMOS) -o emos-raw emos-raw.c $(LDFLAGS) $(LIBS)
-
-
-synctest_eNB: synctest
-	cp synctest synctest_eNB
-
-synctest_UE: synctest
-	cp synctest synctest_UE
-
-drivers:
-	cd $(OPENAIR2_DIR) && make clean && make nasmesh_netlink.ko
-	cd $(OPENAIR2_DIR)/NAS/DRIVER/MESH/RB_TOOL && make clean && make
-	cd $(OPENAIR_TARGETS)/ARCH/EXMIMO/DRIVER/eurecom && make clean && make 
-	cd $(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT && make clean && make 
-
-run: condtest
-	rtai-load condtest --verbose
-
-run_eNB_test: 
-	rtai-load eNB_test --verbose
-
-run_eNB: 
-	rtai-load eNB --verbose
-
-run_UE: 
-	rtai-load UE --verbose
-
-run_UE0:
-	rtai-load UE0 --verbose
-
-run_UE0_smbv:
-	rtai-load UE0_smbv --verbose
-
-run_UE850:
-	rtai-load UE850 --verbose
-
-run_eNB850:
-	rtai-load eNB850 --verbose
-
-run_UE0prach:
-	rtai-load UE0prach --verbose
-
-run_UE1prach:
-	rtai-load UE1prach --verbose
-
-run_UE2prach:
-	rtai-load UE2prach --verbose
-
-run_UE0noL2:
-	rtai-load UE0noL2 -- verbose
-
-run_UE1noL2: 
-	rtai-load UE1noL2 --verbose
-
-run_UE2noL2: 
-	rtai-load UE2noL2 --verbose
-
-run_UE0calib:
-	rtai-load UE0calib --verbose
-
-run_UE0calibmed:
-	rtai-load UE0calibmed --verbose
-
-run_UE0calibbyp:
-	rtai-load UE0calibbyp --verbose
-
-run_UE1: 
-	rtai-load UE1 --verbose
-
-run_UE2: 
-	rtai-load UE2 --verbose
-
-run_eNB0:
-	rtai-load eNB0 --verbose
-
-run_eNB1:
-	rtai-load eNB1 --verbose
-
-run_eNB2:
-	rtai-load eNB2 --verbose
-
-clean: common-clean
-	@$(RM_F_V) $(OBJ) $(RTAI_OBJ) $(OBJ_EMOS) $(OBJ_SYNC)
-	@$(RM_F_V) $(OBJ:.o=.d) $(RTAI_OBJ:.o=.d) $(OBJ_EMOS:.o=.d) $(OBJ_SYNC:.o=.d)
-	@$(RM_F_V) $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/asn1_msg.o $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/asn1_msg.d
-	@$(RM_F_V) lte-enb.o lte-enb.d lte-softmodem.o lte-softmodem.d
-	@$(RM_F_V) lte-enb.o lte-softmodem.o
-
-cleanasn1:
-	rm -f $(ASN1_MSG_OBJS1)
-	$(shell cd $(OPENAIR2_DIR)/RRC/LITE/MESSAGES ; rm -f $(ASN_MODULE_SOURCES) $(ASN_MODULE_HEADERS) *.o *.d )
-	rm -f $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/Makefile.am.sample
-	rm -f $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/Makefile.inc.generated
-	rm -f $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/asn1c/ASN1_files/.lock-rel8
-	rm -f $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/asn1c/ASN1_files/.lock-rel10
-
-cleancell:
-	rm -f $(OPENAIR2_DIR)/RRC/CELLULAR/*.o
-	rm -f $(OPENAIR2_DIR)/RRC/CELLULAR/*.d
-	rm -f $(OPENAIR2_DIR)/RRC/L2_INTERFACE/*.o
-	rm -f $(OPENAIR2_DIR)/RRC/L2_INTERFACE/*.d
-	rm -f $(OPENAIR2_DIR)/NAS/SIMU_CELLULAR/*.o
-	rm -f $(OPENAIR2_DIR)/NAS/SIMU_CELLULAR/*.d
-
-cleanalmostall: clean 
-	rm -f $(ASN1_MSG_OBJS1)
-	rm -rf condtest synctest lte-softmodem
-	rm -rf synctest_eNB synctest_UE
-
-cleanall: common-cleanall clean cleanasn1
-	rm -rf condtest synctest lte-softmodem lte-softmodem-usrp
-	rm -rf synctest_eNB synctest_UE
-
-show:
-	@echo $(CFLAGS)
-	@echo $(EXTRA_CFLAGS)
-	@echo $(OBJ) $(RTAI_OBJ) 
-	@echo $(USRP_OBJ)
-	@echo IS_REL8 is $(IS_REL8)
-	@echo IS_REL10 is $(IS_REL10)
-	@echo openssl $(OPENSSL_FOUND) 
-	@echo nettle $(NETTLE_FOUND)
-beautiful:
-	astyle --style=gnu -s2 $(SRC)
diff --git a/targets/RTAI/USER/Makefile.agilent b/targets/RTAI/USER/Makefile.agilent
deleted file mode 100644
index 6a1a4bec53c3f1a378d786b0d3b1b19310b34b36..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/Makefile.agilent
+++ /dev/null
@@ -1,260 +0,0 @@
-include $(OPENAIR_TARGETS)/Makerules
-
-include $(OPENAIR_TARGETS)/Makefile.common
-
-GCCVERSION = $(shell gcc --version | grep ^gcc | sed 's/^.* //g')
-ifeq "$(GCCVERSION)"  "4.4.3"
-    CFLAGS += -Wno-packed-bitfield-compat
-endif
-ifeq "$(GCCVERSION)" "4.5.2"
-    CFLAGS += -Wno-packed-bitfield-compat
-endif
-ifeq "$(GCCVERSION)" "4.6.1"
-    CFLAGS += -Wno-packed-bitfield-compat
-endif
-
-CFLAGS += -O2
-# Debug
-CFLAGS += -g -ggdb
-CFLAGS += -DDRIVER2013 -I$(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/LIB/ -I$(OPENAIR_TARGETS)/ARCH/EXMIMO/DEFS -DENABLE_VCD_FIFO -DEXMIMO_IOT
-
-SRC = lte-enb.c
-
-ifndef RTAI
-RTAI=1
-endif
-
-ifeq ($(RTAI),1)
-CFLAGS += -DENABLE_RTAI_CLOCK -DRTAI
-RTAI_OBJ = sched_dlsch.o sched_ulsch.o sched_rx_pdsch.o lte-enb.o rt_wrapper.o 
-else
-OBJ = sched_dlsch.o sched_ulsch.o sched_rx_pdsch.o lte-enb.o rt_wrapper.o
-CFLAGS += -DENABLE_USE_CPU_EXECUTION_TIME
-endif
-
-OBJ += $(OPENAIR1_DIR)/SIMULATION/TOOLS/taus.o $(OPENAIR_TARGETS)/SIMU/USER/init_lte.o $(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.o
-
-TOP_DIR = $(OPENAIR1_DIR)
-include $(OPENAIR1_DIR)/PHY/Makefile.inc
-include $(OPENAIR1_DIR)/SCHED/Makefile.inc
-
-OBJ += $(PHY_OBJS)
-ifeq ($(RTAI),1)
-RTAI_OBJ += $(SCHED_OBJS)
-else
-OBJ += $(SCHED_OBJS)
-endif
-
-#ifndef rrc_cellular
-ifeq ($(rrc_cellular),0)
-rrc_cellular = 0
-rrc_cellular_eNB = 0
-rrc_cellular_UE = 0
-else
-  ifeq ($(eNB_flag),1)
-    rrc_cellular_eNB=1
-  endif
-  ifeq ($(UE_flag),1)
-    rrc_cellular_UE=1
-  endif
-endif
-
-export rrc_cellular
-
-OPENAIR2_TOP = $(OPENAIR2_DIR)
-include $(OPENAIR2_DIR)/LAYER2/Makefile.inc
-include $(OPENAIR2_DIR)/UTIL/Makefile.inc
-include $(OPENAIR2_DIR)/RRC/NAS/Makefile.inc
-
-ifeq ($(RTAI),1)
-LOG_OBJS=
-RTAI_OBJ+=$(LOG_DIR)/vcd_signal_dumper.o
-RTAI_OBJ+=$(LOG_DIR)/log.o
-endif
-
-include $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/Makefile.inc
-
-OBJ += $(LOG_OBJS) 
-
-ifndef OPENAIR2
-OPENAIR2=1
-endif
-ifeq ($(OPENAIR2),1)
-ASN1_MSG_OBJS1=$(addprefix $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/, $(ASN1_MSG_OBJS))
-OBJ += $(L2_OBJS) $(LIST_OBJ) $(TIMER_OBJ) $(MEM_OBJ) $(OTG_OBJS) $(MATH_OBJS) 
-OBJ += $(OPENAIR1_DIR)/SIMULATION/ETH_TRANSPORT/netlink_init.o
-OBJ += $(PDCP_DIR)/pdcp_thread.o
-CFLAGS += -DOPENAIR2 -DNO_RRM -DPUCCH -DMAC_CONTEXT=1
-endif
-
-CFLAGS += $(L2_incl) $(UTIL_incl) $(UTILS_incl)
-
-CFLAGS += -I$(OPENAIR1_DIR) -I$(OPENAIR2_DIR)/RRC/LITE/MESSAGES	#-I$(OPENAIR3_DIR)/MESH -I$(OPENAIR3_DIR)/MESH/RRM
-
-CFLAGS += -DNEW_FFT -DLOG_NO_THREAD
-
-ifeq ($(XFORMS),1)
-CFLAGS += -DXFORMS -I/usr/include/X11
-LDFLAGS += -lforms
-OBJ += $(OPENAIR1_DIR)/PHY/TOOLS/lte_phy_scope.o
-OBJ += stats.o
-endif
-
-ifdef SMBV
-CFLAGS += -DSMBV
-endif
-
-#CPUFLAGS = -mmmx -msse -msse2 -m32 -mssse3 -msse4.1
-CPUFLAGS = -mmmx -msse -msse2 -mssse3 -msse4.1
-#CFLAGS += -fno-common -mpreferred-stack-boundary=4  
-CFLAGS += -Wall -fno-strict-aliasing -DPHYSIM -DUSER_MODE -DPC_TARGET -DPC_DSP -DNB_ANTENNAS_RX=2 -DNB_ANTENNAS_TXRX=2 -DNB_ANTENNAS_TX=2 -DPHY_CONTEXT=1 -rdynamic $(CPUFLAGS) # -Wno-packed-bitfield-compat
-CFLAGS += -DOPENAIR_LTE -DENABLE_FXP -DOPENAIR1 -DDLSCH_THREAD #-DULSCH_THREAD
-
-#only for CBMIMO1
-ifdef CBMIMO1
-CFLAGS += -DFW2011 -DBIT8_TX -DCBMIMO1
-else
-#only for EXPRESS MIMO
-CFLAGS += -DEXMIMO
-#CFLAGS += -DEXMIMO -DTIMING_ADVANCE_HW=138 #this is for ExpressMIMO 1
-#CFLAGS += -DEXMIMO -DTIMING_ADVANCE_HW=45 #this is for ExpressMIMO 2
-endif
-
-ifndef HARD_RT
-HARD_RT=1
-endif
-
-ifeq ($(HARD_RT),1)
-CFLAGS += -DHARD_RT
-endif
-
-ifeq ($(EMOS),1)
-CFLAGS += -DEMOS -DEMOS_CHANNEL
-LDFLAGS += -lgps
-endif
-
-ifndef NAS
-NAS=1
-endif
-
-ifeq ($(NAS),1)
-CFLAGS += -DNAS_NETLINK -DLINUX
-OBJ += $(NAS_OBJS)
-endif
-
-RTAI_CFLAGS += $(shell rtai-config --lxrt-cflags)
-CFLAGS += -I/usr/realtime/include -DRTAI
-LDFLAGS += -lpthread -lm -lforms
-ifeq ($(RTAI),1)
-LDFLAGS += $(shell rtai-config --lxrt-ldflags) 
-else
-LDFLAGS += -lrt
-endif
-
-#ifndef USE_MME
-#  USE_MME=R8
-#endif
-
-ifdef USE_MME
-  include $(OPENAIR2_DIR)/S1AP/Makefile.inc
-  include $(OPENAIR2_DIR)/S1AP/MESSAGES/Makefile.inc
-  CFLAGS += -DENABLE_USE_MME -DENB_MODE
-  LDFLAGS += -lsctp
-  CFLAGS_S1AP += -DENB_MODE -DENABLE_USE_MME -DEMIT_ASN_DEBUG=1 -DUSER_MODE
-  S1AP_BUILT_OBJS += $(S1AP_OBJS) $(addprefix $(OPENAIR2_DIR)/S1AP/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES))
-  S1AP_BUILT_OBJS += $(OPENAIR3_DIR)/OPENAIRMME/SCTP/sctp_primitives_client.o
-endif
-
-
-ASN1RELDIR=R9.8
-ifeq ($(USE_MME), R8)
-  ASN1RELDIR=R8.10
-else
-  CFLAGS_S1AP += -DUPDATE_RELEASE_9
-endif
-S1AP_DIR=$(OPENAIR2_DIR)/S1AP
-ASN1MESSAGESDIR=$(S1AP_DIR)/MESSAGES
-ASN1DIR=$(ASN1MESSAGESDIR)/ASN1
-
-all: lte-enb
-
-$(LFDS_DIR)/bin/liblfds611.a:
-	$(MAKE) -C $(LFDS_DIR) -f makefile.linux
-
-
-$(RTAI_OBJ): %.o : %.c
-	@echo Compiling $< ...
-	@$(CC) -c $(CFLAGS) $(EXTRA_CFLAGS) $(RTAI_CFLAGS) -o $@ $<
-
-$(OBJ) $(ASN1_MSG_OBJS1): %.o : %.c
-	@echo Compiling $< ...
-	@$(CC) -c $(CFLAGS) $(EXTRA_CFLAGS) -o $@ $<
-
-$(S1AP_BUILT_OBJS): %.o : %.c
-	@echo Compiling $<
-	@$(CC) -Wall -c $(CFLAGS_S1AP) $(S1AP_Incl) $(UTIL_incl) -o $@ $<
-
-$(ASN1MESSAGESDIR)/s1ap_ieregen.stamp: $(ASN1DIR)/$(ASN1RELDIR)/S1AP-PDU-Contents.asn $(ASN1DIR)/asn1tostruct.py
-	echo Timestamp > $@
-	(cd $(ASN1DIR) && python $(ASN1DIR)/asn1tostruct.py -f$<)
-
-$(ASN1MESSAGESDIR)/s1ap_asn1regen.stamp: $(ASN1DIR)/$(ASN1RELDIR)/S1AP-CommonDataTypes.asn $(ASN1DIR)/$(ASN1RELDIR)/S1AP-Constants.asn $(ASN1DIR)/$(ASN1RELDIR)/S1AP-IEs.asn $(ASN1DIR)/$(ASN1RELDIR)/S1AP-PDU.asn
-	echo Timestamp > $@
-	(cd $(ASN1MESSAGESDIR) && asn1c -gen-PER -fnative-types -fskeletons-copy $^)
-
-$(S1AP_DIR)/libs1ap.a: $(ASN1MESSAGESDIR)/s1ap_ieregen.stamp $(ASN1MESSAGESDIR)/s1ap_asn1regen.stamp $(S1AP_BUILT_OBJS)
-	@echo Creating $@
-	$(AR) rcs $@ $^
-
-$(LFDS_DIR)/bin/liblfds611.a:
-	$(MAKE) -C $(LFDS_DIR) -f makefile.linux
-
-ifdef USE_MME
-  lte-enb: $(OBJ) $(S1AP_DIR)/libs1ap.a $(ASN1_MSG_OBJS1) $(RTAI_OBJ) $(LFDS_DIR)/bin/liblfds611.a
-else
-  lte-enb: $(OBJ) $(ASN1_MSG_OBJS1) $(RTAI_OBJ) $(LFDS_DIR)/bin/liblfds611.a
-endif
-	$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(OBJ) $(RTAI_OBJ) $(ASN1_MSG_OBJS1) -o lte-enb $(LDFLAGS) $(LFDS_DIR)/bin/liblfds611.a
-
-
-
-nasmesh:
-	(cd $(OPENAIR2_DIR)/NAS/DRIVER/MESH/RB_TOOL && $(MAKE))
-	(cd $(OPENAIR2_DIR) && $(MAKE) nasmesh_netlink.ko)
-	(sudo insmod $(OPENAIR2_DIR)/NAS/DRIVER/MESH/nasmesh.ko)
-rb_tool:
-	(cd $(OPENAIR2_DIR)/NAS/DRIVER/MESH/RB_TOOL && $(MAKE))
-
-nasmesh_install:
-	(sudo rmmod nasmesh)
-	(sudo insmod $(OPENAIR2_DIR)/NAS/DRIVER/MESH/nasmesh.ko)
-
-clean:
-	rm -rf $(OBJ) $(RTAI_OBJ)
-	rm -f $(S1AP_BUILT_OBJS)
-	rm -f $(ASN1MESSAGESDIR)/libs1ap.a
-
-cleanasn1:
-	rm -f $(ASN1_MSG_OBJS1)
-	$(shell cd $(OPENAIR2_DIR)/RRC/LITE/MESSAGES ; rm -f $(ASN_MODULE_SOURCES) $(ASN_MODULE_HEADERS) *.o *.d )
-	rm -f $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/Makefile.am.sample
-	rm -f $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/Makefile.inc.generated
-	rm -f $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/asn1c/ASN1_files/.lock-rel8
-	rm -f $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/asn1c/ASN1_files/.lock-rel10
-
-cleanall: clean cleanasn1
-	rm -rf condtest synctest lte-softmodem
-	rm -rf synctest_eNB synctest_UE
-
-show:
-	@echo $(CFLAGS)
-	@echo $(EXTRA_CFLAGS)
-	@echo $(OBJ) $(RTAI_OBJ)
-	@echo rrc_cellular variable is $(rrc_cellular)
-	@echo eNB_flag is $(eNB_flag)
-	@echo UE_flag is $(UE_flag)
-	@echo IS_REL8 is $(IS_REL8)
-	@echo IS_REL10 is $(IS_REL10)
-
-beautiful:
-	astyle --style=gnu -s2 $(SRC)
diff --git a/targets/RTAI/USER/Makefile.msg_many b/targets/RTAI/USER/Makefile.msg_many
deleted file mode 100644
index bc7840c1e574c63a7fb8344e9dea882db9883a4c..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/Makefile.msg_many
+++ /dev/null
@@ -1,21 +0,0 @@
-CFLAGS = $(shell rtai-config --lxrt-cflags)
-LDFLAGS = $(shell rtai-config --lxrt-ldflags) -lpthread -llxrt -lm
-
-CFLAGS += -D__IN_RTAI__ -Wall -O2 -I.
-
-OBJS = msg_many.o msg_helper.o
-
-all: msg_many
-
-msg_many: $(OBJS)
-	$(CC) $(LDFLAGS) -o $@ $(OBJS)
-
-$(OBJS): msg_many.h
-
-run: msg_many
-	rtai-load msg_many --verbose
-
-.PHONY: clean
-clean:
-	rm -f msg_many $(OBJS)
-
diff --git a/targets/RTAI/USER/TOOLS/thread_ipc.c b/targets/RTAI/USER/TOOLS/thread_ipc.c
deleted file mode 100644
index 01cb86799cbf6290f560fbcd50355357079056f0..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/TOOLS/thread_ipc.c
+++ /dev/null
@@ -1,204 +0,0 @@
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <pthread.h>
-#include <sched.h>
-
-#include "thread_ipc.h"
-
-g_thread_ipc_t thread_ipc = {0};
-
-void loop_buffer_reset(buffer_t *loop_buf)
-{
-	int i;
-
-	for (i = 0; i < BUFFERMAX; i++) {
-		loop_buf[i].subframe_num = -1;
-	}
-
-	return;
-}
-
-static void loop_buffer_init(loop_buffer_op_t *loop_buffer)
-{
-	loop_buffer->packet_num = 0;
-	loop_buffer->isfull = 0;
-	loop_buffer->isempty = 1;
-
-	pthread_mutex_init(&loop_buffer->buffer_mutex, NULL);
-
-	pthread_cond_init(&loop_buffer->full_cond, NULL);
-	pthread_cond_init(&loop_buffer->empty_cond, NULL);
-
-	loop_buffer_reset(loop_buffer->loop_buf);
-
-	return;
-}
-
-static void sync_buffer_init(sync_buffer_t *sync_buffer)
-{
-	sync_buffer->decoding_subframe_num = 0;
-	pthread_mutex_init(&sync_buffer->buffer_mutex, NULL);
-
-	return;
-}
-
-int thread_ipc_init(void)
-{
-	//printf("recv %d\n", thread_ipc.sync_buffer.decoding_subframe_num);
-	thread_ipc.ue_sync_state = 0;
-	thread_ipc.rx_timestamp = 0;
-	thread_ipc.tx_timestamp = 0;
-	thread_ipc.current_subframe = 0;
-
-	pthread_mutex_init(&thread_ipc.dl_decode_mutex, NULL);
-	pthread_mutex_lock(&thread_ipc.dl_decode_mutex);
-
-	pthread_mutex_init(&thread_ipc.ul_send_mutex, NULL);
-	pthread_mutex_lock(&thread_ipc.ul_send_mutex);
-
-	pthread_mutex_init(&thread_ipc.sync_mutex, NULL);
-	pthread_mutex_lock(&thread_ipc.sync_mutex);
-
-	loop_buffer_init(&thread_ipc.loop_buffer);
-	sync_buffer_init(&thread_ipc.sync_buffer);
-
-	return 0;
-}
-
-int thread_ipc_deinit(void)
-{
-	pthread_mutex_destroy(&thread_ipc.ul_send_mutex);
-	pthread_mutex_destroy(&thread_ipc.sync_mutex);
-	pthread_mutex_destroy(&thread_ipc.dl_decode_mutex);
-
-	pthread_mutex_destroy(&thread_ipc.loop_buffer.buffer_mutex);
-	pthread_cond_destroy(&thread_ipc.loop_buffer.full_cond);
-	pthread_cond_destroy(&thread_ipc.loop_buffer.empty_cond);
-
-	pthread_mutex_destroy(&thread_ipc.sync_buffer.buffer_mutex);
-
-	return 0;
-}
-
-int set_thread_attr(pthread_attr_t *attr, int policy, int priority, int cpuid)
-{
-	struct sched_param param;
-	cpu_set_t cpu_info;
-
-	pthread_attr_init(attr);
-
-	if (pthread_attr_setschedpolicy(attr, policy) != 0) {
-		perror("pthread_attr_setschedpolicy");
-		return -1;
-	}
-
-	param.sched_priority = priority;
-	if (pthread_attr_setschedparam(attr, &param) != 0) {
-		perror("pthread_attr_setschedparam");
-		return -1;
-	}
-
-	CPU_ZERO(&cpu_info);
-	CPU_SET(cpuid, &cpu_info);
-	if (pthread_attr_setaffinity_np(attr,sizeof(cpu_set_t),&cpu_info)) {
-		perror("pthread_attr_setaffinity_np");
-		return -1;
-	}
-
-	if (pthread_attr_setinheritsched(attr, PTHREAD_EXPLICIT_SCHED) != 0) {
-		perror("pthread_attr_setinheritsched");
-		return -1;
-	}
-
-	return 0;
-}
-
-
-int find_subframe_num(unsigned long long current_subframe_num, buffer_t *buf, int *flag)
-{
-	long long tmp;
-	int i;
-	
-	tmp = current_subframe_num;
-	for ( i = 0; i < HIGHBUFFER + 1; i++)
-	{
-		if(tmp == buf[i].subframe_num)
-		{ 
-			return i;
-		} else if (tmp < buf[i].subframe_num) {
-			*flag = 1;	
-		}
-	}
-
-	return -1;
-}
-
-int ue_unsync_thread_ipc_reset(void)
-{
-	thread_ipc.ue_sync_state = 0;                 
-	
-	pthread_mutex_lock(&thread_ipc.loop_buffer.buffer_mutex);
-	if (thread_ipc.loop_buffer.isempty) {
-		pthread_cond_signal(&thread_ipc.loop_buffer.empty_cond);
-	}
-
-	if (thread_ipc.loop_buffer.isfull) {
-		pthread_cond_signal(&thread_ipc.loop_buffer.full_cond);
-	}
-
-	thread_ipc.loop_buffer.packet_num = 0;
-	thread_ipc.loop_buffer.isfull = 0;
-	thread_ipc.loop_buffer.isempty = 1;
-
-	loop_buffer_reset(thread_ipc.loop_buffer.loop_buf);
-	pthread_mutex_unlock(&thread_ipc.loop_buffer.buffer_mutex);
-
-	thread_ipc.current_subframe = 0;
-
-	return 0;
-}
-void bind_thread2kernel(int cpu_id)
-{
-        cpu_set_t mask;
-        cpu_set_t get;
-        int i;
-        int num = sysconf(_SC_NPROCESSORS_CONF);
-        //printf("system has %d processor(s) by super\n", num);
-        CPU_ZERO(&mask);
-        CPU_SET(cpu_id, &mask);
-        if (pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) < 0) {
-                fprintf(stderr, "set thread affinity failed\n");
-        }
-        /*CPU_ZERO(&get);
-        if (pthread_getaffinity_np(pthread_self(), sizeof(get), &get) < 0) {
-                fprintf(stderr, "get thread affinity failed\n");
-        }
-        for (i = 0; i < num; i++) {
-                if (CPU_ISSET(i, &get)) {
-                        printf("thread %d is running in processor %d\n", (int)pthread_self(), i);
-                }
-        }
-        if (CPU_ISSET(cpu_id, &get)) {
-          printf("thread %d is running in processor %d by super\n", (int)pthread_self(), cpu_id);
-          }*/
-}
-void get_thread2kernel(void)
-{
-        cpu_set_t get;
-        int i;
-        int num = sysconf(_SC_NPROCESSORS_CONF);
-        printf("system has %d processor(s) by super\n", num);
-        CPU_ZERO(&get);
-        if (pthread_getaffinity_np(pthread_self(), sizeof(get), &get) < 0) {
-                fprintf(stderr, "get thread affinity failed\n");
-        }
-        for (i = 0; i < num; i++) {
-                if (CPU_ISSET(i, &get)) {
-                        printf("The thread %d is running in processor %d by super\n", (int)pthread_self(), i);
-                }
-        }
-}
-
diff --git a/targets/RTAI/USER/TOOLS/thread_ipc.h b/targets/RTAI/USER/TOOLS/thread_ipc.h
deleted file mode 100644
index 3377d9f043f6183c0b88aa3cfcf05ae74e6ad2b9..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/TOOLS/thread_ipc.h
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifndef __THREAD_IPC_H__
-#define __THREAD_IPC_H__
-
-
-#define SUB_FRAME_LENGTH 7680
-#define FRAME_LENGTH 76800
-
-#define UE_UL_DELAY	6				/*璁剧疆涓婅缁勫抚鍦ㄥ悓姝ユ椂閽熷熀纭€涓婄殑寤舵椂锛堝瓙甯т釜鏁帮級*/
-#define UE_UL_SEND_DELAY 6			/*涓婅鍙戦€佸瓙甯у彿鍦ㄦ帴鏀跺瓙甯ф椂闂存埑涓婄殑寤舵椂锛堝瓙甯т釜鏁帮級*/		
-
-#define BUFFERMAX 5					/*鐜舰缂撳啿鍖轰釜鏁�*/
-#define LOWBUFFER 3                 /*鐜舰缂撳啿鍖轰笅闄�, 涓嶈兘涓�0*/
-#define HIGHBUFFER 4                /*鐜舰缂撳啿鍖轰笂闄�*/
-
-typedef struct {
-	long long subframe_num;			/*瀛愬抚缂栧彿*/
-	int buffer[SUB_FRAME_LENGTH * 2];	/*涓€瀛愬抚鏁版嵁*/
-}buffer_t;
-
-typedef struct {
-	int packet_num;					/*鐜舰缂撳啿鍖烘暟鎹寘璁℃暟鍣紝琛ㄧず鐜舰缂撳啿鍖烘湁鏁堟暟鎹寘涓暟*/
-	int isfull;						/*鏍囪鐜舰缂撳啿鍖烘湁鏁堟暟鎹寘鏄惁杈惧埌涓婇檺鏍囧織*/
-	int isempty;					/*鏍囪鐜舰缂撳啿鍖烘湁鏁堟暟鎹寘鏄惁杈惧埌涓嬮檺鏍囧織*/
-
-	pthread_mutex_t buffer_mutex;	/*鐜舰缂撳啿鍖烘搷浣滀繚鎶ら攣*/ 
-	pthread_cond_t full_cond;		/*鐜舰缂撳啿鍖轰笂闄愭潯浠跺彉閲�,閰嶅悎isfull浣跨敤 */
-	pthread_cond_t empty_cond;		/*鐜舰缂撳啿鍖轰笅闄愭潯浠跺彉閲�,閰嶅悎isempty浣跨敤*/
-
-	buffer_t loop_buf[BUFFERMAX];	/*鐜舰缂撳啿鍖�*/
-}loop_buffer_op_t;
-
-typedef struct {
-	int decoding_subframe_num;		/*寰呰В鐮佸瓙甯х殑缂栧彿*/
-	pthread_mutex_t buffer_mutex;	/*瀵箂ync_buffer涓寸晫鍖虹殑淇濇姢閿�*/
-	int sync_buffer[SUB_FRAME_LENGTH * 10];  /*鍚屾绾跨▼涓庝笅琛岃В鐮佺嚎绋嬫暟鎹叡浜紦鍐插尯*/
-}sync_buffer_t;
-
-typedef struct {
-	unsigned int rx_timestamp;		/*鎺ユ敹鏁版嵁鍖呯涓€涓猻ample鏃堕棿鎴�*/
-	unsigned int tx_timestamp;		/*寰呭彂閫佹暟鎹寘鐨勬椂闂存埑*/
-	unsigned long long current_subframe;	/*褰撳墠瀛愬抚缂栧彿*/
-
-	int ue_sync_state;				/*琛ㄧずUE鏄惁鍦ㄥ悓姝ョ姸鎬侊紝0琛ㄧず澶卞悓姝ワ紝1琛ㄧず鍚屾*/
-	pthread_mutex_t sync_mutex;		/*鏍规嵁ue_sync_state鏍囧織锛屽敜閱掔粍甯х嚎绋�*/
-
-	pthread_mutex_t ul_send_mutex;	/*鐢ㄤ簬sync绾跨▼鍞ら啋鍙戦€佺嚎绋嬪彂閫佹暟鎹�*/
-	pthread_mutex_t dl_decode_mutex;/*涓嬭瑙g爜淇濇姢閿侊紝鐢ㄤ簬sync绾跨▼鍞ら啋瑙g爜绾跨▼瑙g爜*/
-
-	loop_buffer_op_t loop_buffer;
-	sync_buffer_t	sync_buffer;
-}g_thread_ipc_t;
-
-void loop_buffer_reset(buffer_t *loop_buf);
-int thread_ipc_init(void);
-int thread_ipc_deinit(void);
-int set_thread_attr(pthread_attr_t *attr, int policy, int priority, int cpuid);
-int find_subframe_num(unsigned long long current_subframe_num, buffer_t *buf, int *flag);
-int ue_unsync_thread_ipc_reset(void);
-
-extern g_thread_ipc_t thread_ipc;
-
-#endif
diff --git a/targets/RTAI/USER/condtest.c b/targets/RTAI/USER/condtest.c
deleted file mode 100644
index 6b42ac3af8d72e87c0671043490acfb7e469e5f3..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/condtest.c
+++ /dev/null
@@ -1,147 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sched.h>
-
-
-#include <rtai_lxrt.h>
-#include <rtai_sem.h>
-#include <rtai_msg.h>
-
-#define PERIOD 100000000
-#define THRESHOLD 1
-
-static SEM *mutex;
-static CND *cond;
-
-static int thread0;
-static int thread1;
-
-static int instance_cnt=-1; //0 means worker is busy, -1 means its free
-
-static void *fun0(void *arg)
-{
-  RT_TASK *task;
-  int done1=0, cnt1=0;
-  RTIME right_now;
-  int ret;
-
-  task = rt_task_init_schmod(nam2num("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF);
-  mlockall(MCL_CURRENT | MCL_FUTURE);
-
-  rt_make_hard_real_time();
-
-  while (cnt1 < THRESHOLD)
-    {
-      rt_sem_wait(mutex);
-      rt_printk("fun0: Hello World %d, instance_cnt %d!\n",cnt1,instance_cnt);
-      while (instance_cnt<0)
-        {
-          ret = rt_cond_wait(cond, mutex);
-          if (ret != 0)
-            {
-              rt_printk("error in rt_cond_wait, code %d\n",ret);
-              switch (ret)
-                {
-                case RTE_PERM:
-                  rt_printk("error RTE_PERM %d\n",ret);
-                  break;
-                case RTE_UNBLKD:
-                  rt_printk("error RTE_UNBLKD %d\n",ret);
-                  break;
-                case RTE_OBJREM:
-                  rt_printk("error RTE_OBJREM %d\n",ret);
-                  break;
-                default:
-                  rt_printk("unknown error code %d\n",ret);
-                  break;
-                }
-              break;
-            }
-        }
-      rt_sem_signal(mutex);
-
-      // do some work here
-      cnt1++;
-
-      rt_sem_wait(mutex);
-      instance_cnt--;
-      rt_sem_signal(mutex);
-
-    }
-  // makes task soft real time
-  rt_make_soft_real_time();
-
-  printf("Back to soft RT\n");
-  // clean task
-  rt_task_delete(task);
-  printf("Task deleted. returning\n");
-  return 0;
-}
-
-
-int main(void)
-{
-  RT_TASK *task;
-  RTIME now;
-  int cnt=0;
-
-  // make main thread LXRT soft realtime
-  task = rt_task_init_schmod(nam2num("MYTASK"), 9, 0, 0, SCHED_FIFO, 0xF);
-  mlockall(MCL_CURRENT | MCL_FUTURE);
-
-  // 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 and cond.\n");
-  mutex = rt_sem_init(nam2num("MUTEX"), 1);
-  if (mutex==0)
-    printf("Error init mutex\n");
-
-  cond = rt_cond_init(nam2num("CONDITION"));
-  if (cond==0)
-    printf("Error init cond\n");
-
-  thread0 = rt_thread_create(fun0, NULL, 10000);
-  //thread1 = rt_thread_create(fun1, NULL, 20000);
-
-  //rt_sleep(PERIOD);
-
-  while (cnt < THRESHOLD)
-    {
-      rt_task_wait_period();
-      rt_printk("main: Hello World %d!\n",cnt);
-      rt_sem_wait(mutex); //now the mutex should have value 0
-      if (instance_cnt==0)
-        {
-          rt_sem_signal(mutex); //now the mutex should have vaule 1
-          rt_printk("worker thread busy!\n");
-        }
-      else
-        {
-          instance_cnt++;
-          rt_cond_signal(cond);
-          rt_sem_signal(mutex); //now the mutex should have vaule 1
-          rt_printk("signaling worker thread to start!\n");
-        }
-      cnt++;
-    }
-
-  // wait for end of program
-  printf("TYPE <ENTER> TO TERMINATE\n");
-  getchar();
-
-  // cleanup
-  stop_rt_timer();
-  return 0;
-}
diff --git a/targets/RTAI/USER/dot11.c b/targets/RTAI/USER/dot11.c
deleted file mode 100644
index 2070672c854e3979a38234784bebc73f516e7783..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/dot11.c
+++ /dev/null
@@ -1,1232 +0,0 @@
-/*******************************************************************************
-
-  Eurecom OpenAirInterface
-  Copyright(c) 1999 - 2011 Eurecom
-
-  This program is free software; you can redistribute it and/or modify it
-  under the terms and conditions of the GNU General Public License,
-  version 2, as published by the Free Software Foundation.
-
-  This program is distributed in the hope 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
-  this program; if not, write to the Free Software Foundation, Inc.,
-  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
-
-  The full GNU General Public License is included in this distribution in
-  the file called "COPYING".
-
-  Contact Information
-  Openair Admin: openair_admin@eurecom.fr
-  Openair Tech : openair_tech@eurecom.fr
-  Forums       : http://forums.eurecom.fsr/openairinterface
-  Address      : Eurecom, 2229, route des cr锚tes, 06560 Valbonne Sophia Antipolis, France
-
-*******************************************************************************/
-
-<<<<<<< .mine
-/*! \file dot11.c
-* \brief main program to control HW and scheduling for openairITS dot11 MODEM
-* \author R. Knopp, F. Kaltenberger
-* \date 2012
-* \version 0.1
-* \company Eurecom
-* \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr
-* \note
-* \warning
-*/
-=======
-/*! \file dot11.c
- * \brief main program to control HW and scheduling for openairITS dot11 MODEM
- * \author R. Knopp, F. Kaltenberger
- * \date 2012
- * \version 0.1
- * \company Eurecom
- * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr
- * \note
- * \warning
- */
->>>>>>> .r3153
-#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 <rtai_lxrt.h>
-#include <rtai_sem.h>
-#include <rtai_msg.h>
-
-#include "PHY/types.h"
-#include "PHY/defs.h"
-
-#include "ARCH/COMMON/defs.h"
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h"
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_pci.h"
-#include "SIMULATION/LTE_PHY/openair_hw.h"
-
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/vars.h"
-#include "SCHED/defs.h"
-#include "SCHED/vars.h"
-
-
-<<<<<<< .mine
-#include "phy/DOT11/defs.h"
-#include "phy/DOT11/commonvars.h"
-#include <malloc.h>
-=======
-#include "phy/DOT11/defs.h"
-#include "phy/DOT11/commonvars.h"
-#include "PHY/TOOLS/defs.h"
->>>>>>> .r3153
-
-<<<<<<< .mine
-=======
-#include <malloc.h>
->>>>>>> .r3153
-
-<<<<<<< .mine
-#include "UTIL/LOG/log.h"
-=======
->>>>>>> .r3153
-
-<<<<<<< .mine
-#define FRAME_LENGTH_SAMPLES_MAX 100000
-
-uint16_t rev64[64];
-
-int generate_test_tx=0;
-
-
-
-
-=======
-#include "UTIL/LOG/log.h"
-#include "ieee80211p-netlinkapi.h"
-
-#define FRAME_LENGTH_SAMPLES_MAX 100000
-
-uint16_t rev64[64];
-
-int generate_test_tx=0;
-
-
-
-
->>>>>>> .r3153
-#define FRAME_PERIOD 100000000ULL
-#define DAQ_PERIOD 66666ULL
-
-
-#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
-enum nl80211_band {
-  NL80211_BAND_2GHZ,
-  NL80211_BAND_5GHZ,
-  NL80211_BAND_5_9GHZ,
-  NL80211_BAND_0_8GHZ,
-};
-
-<<<<<<< .mine
-
-=======
-enum ieee80211_band {
-  IEEE80211_BAND_2GHZ = NL80211_BAND_2GHZ,
-  IEEE80211_BAND_5GHZ = NL80211_BAND_5GHZ,
-  IEEE80211_BAND_5_9GHZ = NL80211_BAND_5_9GHZ,
-  IEEE80211_BAND_0_8GHZ = NL80211_BAND_0_8GHZ,
-};
-
-struct ieee80211p_rx_status {
-  short	data_len;	//frame data length in bytes
-  char	rssi; 		//received power in dBm
-  char	rate; 		//reveived data rate in units of 100 kbps
-  enum ieee80211_band band;
-  char	flags; 		//RX flags
-}; /* struct ieee80211p_rx_status */
-
-
->>>>>>> .r3153
-//static CND *cond;
-
-static int thread1;
-static int thread2;
-
-static int sync_thread;
-
-
-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 openair_fd = 0;
-
-int oai_exit = 0;
-
-//PCI_interface_t *pci_interface[3];
-
-unsigned int *DAQ_MBOX;
-
-unsigned int time_offset[4] = {0,0,0,0};
-
-int fs4_test=0;
-char UE_flag=0;
-
-struct timing_info_t {
-  unsigned int frame, hw_slot, last_slot, next_slot;
-  RTIME time0, time1, time2;
-  unsigned int mbox0, mbox1, mbox2, mbox_target;
-} timing_info[20];
-
-extern s16* sync_corr_ue0;
-extern s16 prach_ifft[4][1024*2];
-
-typedef enum {normal_txrx=0,rx_calib_ue=1,rx_calib_ue_med=2,rx_calib_ue_byp=3} runmode_t;
-
-runmode_t mode;
-int rx_input_level_dBm;
-
-
-int otg_enabled = 0;
-
-TX_RX_VARS dummy_tx_rx_vars;
-unsigned int bigphys_top;
-unsigned int mem_base;
-
-<<<<<<< .mine
-uint32_t *txdata[2],*rxdata[2];
-
-uint8_t *data_ind = NULL;
-
-extern int dot11_netlink_init();
-extern void *rx_thread(void *);
-extern void *tx_thread(void *);
-
-
-void dot11_init() {
-
-
-
-  set_taus_seed(0);
-
-  // Basic initializations
-  init_fft(64,6,rev64);
-  init_interleavers();
-  ccodedot11_init();
-  ccodedot11_init_inv();
-  phy_generate_viterbi_tables();
-
-  init_crc32();
-
-}
-=======
-uint32_t *txdata[2],*rxdata[2];
->>>>>>> .r3153
-
-<<<<<<< .mine
-void generate_test_tx_signal() {
-=======
-uint8_t *data_ind = NULL;
->>>>>>> .r3153
-
-<<<<<<< .mine
-  TX_VECTOR_t tx_vector;
-  int i;
-
-  if (data_ind == NULL) {
-    data_ind = (uint8_t*)malloc(4095+2+1);
-    data_ind[0] = 0;
-    data_ind[1] = 0;
-  }
-
-
-  tx_vector.rate=1;
-  tx_vector.sdu_length=512;
-  tx_vector.service=0;
-
-  for (i=0;i<tx_vector.sdu_length;i++)
-    data_ind[i+2] = taus();  // randomize packet
-  data_ind[tx_vector.sdu_length+2+4]=0;  // Tail byte
-
-
-  printf("Generating signal at %p\n",txdata[0]);
-  phy_tx_start(&tx_vector,txdata[0],0,data_ind);
-
-}
-
-void signal_handler(int sig)
-{
-  void *array[10];
-  size_t size;
-=======
-CHANNEL_STATUS_t dot11_state = IDLE;
-extern int Ndbps[8];
->>>>>>> .r3153
-
-extern int32_t rxDATA_F_comp_aggreg3[48*1024];
-extern int32_t rxDATA_F_comp_aggreg2[48*1024];
-
-#define FRAME_LENGTH_SAMPLES 76800
-#define RX_THRES 60
-
-#define SLOT_DURATION_5MHz 105
-#define RX_THRES_dB 300
-
-u32 rxgain[4]={30,30,30,30};
-unsigned int rxg_max[4]={133,133,133,133}, rxg_med[4]={127,127,127,127}, rxg_byp[4]={120,120,120,120};
-
-extern int tx_sdu_active;
-extern int tx_sdu_length;
-extern char rxsdu[2000];
-int n;
- 
-static void *rx_thread(void *arg) {
-
-  int fd = *((int*)arg);
-  int rx_offset;
-  RX_VECTOR_t *rxv;
-  uint8_t *data_ind_rx;
-  int i;
-  struct ieee80211p_rx_status *rs;
-  int ret,frame;
-  RT_TASK *task;
-  int16_t rx_energy;
-  int initial_sample_offset = 0,off=0;
-  int dlen,dlen_symb;
-  int mbox_off = 0,old_mbox,mbox_diff;
-  int rt_skip_cond;
-  int pos_crc=0,neg_crc=0;
-  int sdu_received;
-  int sample_threshold;
-  int log2_maxh;
-  struct sched_param mysched;
-  int skip=0;
-  int txlen;
-
-  /*  mysched.sched_priority = 99;
-
-      sched_setscheduler( 0, SCHED_FIFO, &mysched);
-  */
-  char dummy_data[16];
-
-  
-  if (fd>0) {
-    printf("rx_thread starting, fd %d\n",fd);
-    
-    data_ind_rx = (uint8_t*)malloc(4095+2+1+12);
-    
-    task = rt_task_init_schmod(nam2num("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF);
-    mlockall(MCL_CURRENT | MCL_FUTURE);
-  
-    //  rt_make_hard_real_time();
-    
-    
-    //  printf("Started rx_thread ... MBOX %d\n",((unsigned int *)DAQ_MBOX)[0]);
-    // wait until MBOX gets around to zero
-    i=0;
-    while (((volatile unsigned int *)DAQ_MBOX)[0] != 0) {
-      rt_sleep(nano2count(10000));
-      
-      if (i>1000) {
-	printf("HW not counting,exiting rx_thread\n");
-	return(0);
-      }
-    }
-    
-    //  printf("Got first MBOX = 0\n");
-    // wait for first 120us
-    while (((unsigned int *)DAQ_MBOX)[0] < 2)
-      rt_sleep(nano2count(2*66666));
-    
-    old_mbox = ((unsigned int *)DAQ_MBOX)[0];
-    
-    //  printf("MBOX = %d\n",((unsigned int *)DAQ_MBOX)[0]);
-    i = 0;
-    frame = 0;
-    //  oai_exit=1;
-    rt_skip_cond=0;
-    while (!oai_exit) {
-      
-      //    printf("While in ... mbox %d\n",((unsigned int *)DAQ_MBOX)[0]);
-      
-      rx_energy = dB_fixed_times10(signal_energy((int32_t*)(rxdata[0]+(initial_sample_offset&(~0x1))),
-						 SLOT_DURATION_5MHz - (SLOT_DURATION_5MHz&1)));
-      
-      sdu_received = 0;
-      
-      if (rx_energy>RX_THRES_dB) { 
-	if (initial_sample_offset < SLOT_DURATION_5MHz)
-	  off = initial_sample_offset + FRAME_LENGTH_SAMPLES - SLOT_DURATION_5MHz;
-	else
-	  off = initial_sample_offset - SLOT_DURATION_5MHz;
-	
-	if (((dot11_state = initial_sync(&rxv,
-					 &rx_offset,
-					 &log2_maxh,
-					 rxdata[0],
-					 FRAME_LENGTH_SAMPLES,
-					 off,
-					 1)) == BUSY)) {
-	  
-	  
-	  //if ((frame % 100) == 0)
-	  //  printf("Channel is busy, rxv %p, offset %d\n",(void*)rxv,rx_offset);
-	  
-	  if (rxv) {
-	    rx_energy = dB_fixed_times10(signal_energy((int32_t*)(rxdata[0]+rx_offset),
-						       80));
-	    //	  if ((frame%100) == 0)
-	    printf("Frame %d: Rate %d, SDU_LENGTH %d,rx_offset %d,log2_maxh %d, rxp %f dBm (dig %f,rxgain %d)\n",
-	  	   frame,rxv->rate,rxv->sdu_length,rx_offset,log2_maxh,(rx_energy/10.0)-rxg_max[0]+30-rxgain[0],
-	  	   rx_energy/10.0,rxg_max[0]-30+rxgain[0]);
-	    
-	    if ((rxv->sdu_length > 1500) || (rxv->rate > 3) )
-	      printf("ERROR: Frame %d: Rate %d, SDU_LENGTH %d,rx_offset %d,log2_maxh %d, rxp %f dBm (dig %f,rxgain %d)\n",
-		     frame,rxv->rate,rxv->sdu_length,rx_offset,log2_maxh,(rx_energy/10.0)-rxg_max[0]+30-rxgain[0],
-		     rx_energy/10.0,rxg_max[0]-30+rxgain[0]);
-	    else {
-	      memset((void*)&data_ind_rx[10],0,rxv->sdu_length+4+2+1+16);
-
-<<<<<<< .mine
-=======
-	      if (data_detection(rxv,&data_ind_rx[10],
-				 (uint32_t*)rxdata[0],
-				 76800,rx_offset,log2_maxh,NULL)) {
-		pos_crc++;
-		printf("Received SDU with positive CRC\n");
-	      
-		if (fd) {
-		  rs = (struct ieee80211p_rx_status *)&data_ind_rx[0];
-		  rs->data_len = rxv->sdu_length;
-		  rs->rssi = (char)((rx_energy/10.0)-rxg_max[0]+30-rxgain[0]);
-		  rs->rate = 60;
-		  rs->band = IEEE80211_BAND_0_8GHZ;
-		  rs->flags = 0;	
-		  ret = netlink_send(fd,NLCMD_DATA,128,&data_ind_rx[0]);
-		}
-	      
-	      }
-	      else {
-		neg_crc++;
-		printf("Received SDU with negative CRC\n");
-		oai_exit=1;
-		write_output("rxDATA_F_comp_aggreg3.m","rxDAT_F_comp_aggreg3", rxDATA_F_comp_aggreg3,48*200,1,1);
-		write_output("rxsig_sdu.m","rxsig_sdu",&rxdata[0][rx_offset],80*40,1,1);
-
-		//		write_output("rxDATA_F_comp_aggreg2.m","rxDAT_F_comp_aggreg2", rxDATA_F_comp_aggreg2,48*200,1,1);
-	      }
-	      sdu_received = 1;
-	
-	      //	oai_exit = 1;
-	      dlen      = 32+16+6+(rxv->sdu_length<<3); // data length is 32-bits CRC + sdu + 16 service + 6 tail
-	      dlen_symb = dlen/Ndbps[rxv->rate];
-	      if ((dlen%Ndbps[rxv->rate])>0)
-		dlen_symb++;
-	      // 	  	printf("after dd: initial_sample_offset %d =>",initial_sample_offset); 
-	      initial_sample_offset = rx_offset + (80*dlen_symb);
-	      //  	printf("%d\n",initial_sample_offset); 
-	    }
-	  }
-	  else {
-	    printf("BUSY, no synch (off %d) Frame %d (%llu us): rxp %f dBm (dig %f,rxgain %d)\n",
-		   off,frame,rt_get_time_ns()/1000,(rx_energy/10.0)-rxg_max[0]+30-rxgain[0],
-		   rx_energy/10.0,rxg_max[0]-30+rxgain[0]);
-	  }
-	}
-	else {
-	  /*	printf("Frame %d (%llu us): rxp %d dBm (dig %d,rxgain %d)\n",
-		frame,rt_get_time_ns()/1000,rx_energy-rxg_max[0]+30-rxgain[0],
-		rx_energy,rxg_max[0]-30+rxgain[0]);
-	  */
-	}
-
-      }
-      else {
-            
-	if (((frame%100) == 0) && (initial_sample_offset < 2*SLOT_DURATION_5MHz)) {
-	  printf("Frame %d (%llu us): rxp %f dBm (dig %f,rxgain %d)\n",
-		 frame,rt_get_time_ns()/1000,(rx_energy/10.0)-rxg_max[0]+30-rxgain[0],
-		 rx_energy/10.0,rxg_max[0]-30+rxgain[0]);
-
-	}
-      
-	if ((frame > 100) && 
-	    (tx_sdu_active == 1) && 
-	    (initial_sample_offset < 60000)) {
-
-	  printf("Frame %d: Generating SDU of length %d (%p), initial_sample_offset %d, MBOX <<9 %d\n",frame,tx_sdu_length,rxsdu,initial_sample_offset,DAQ_MBOX[0]<<9);	/*
-																					  for (n=0;n<tx_sdu_length;n++)
-																					  printf("%2hhx.",rxsdu[n]);
-																					  printf("\n");
-																					*/	
-	  initial_sample_offset += (8*512);
-	  if (initial_sample_offset > FRAME_LENGTH_SAMPLES)
-	    initial_sample_offset -= FRAME_LENGTH_SAMPLES;
-	
-	
-	
-	  txlen= generate_tx_signal(initial_sample_offset);
-	  // wait until TX is finished
-	
-	  printf("TX: txlen %d, initial_sample_offset %d\n",txlen,initial_sample_offset);
-	  //oai_exit=1;
-
-	  rt_sleep(nano2count((66666*8)+((txlen*66666)>>9)));
-	  skip = initial_sample_offset+txlen-FRAME_LENGTH_SAMPLES;
-	  if (skip < 0)
-	    skip = 0;
-
-	  printf("TX: erasing signal, MBOX %d (%d)\n",DAQ_MBOX[0],DAQ_MBOX[0]<<9);
-	  
-	  // erase TX signal
-	  for (i=0;i<(txlen-skip);i++)
-	    txdata[0][initial_sample_offset+i] = 0x00010001;
-	  for (i=0;i<skip;i++)
-	    txdata[0][i] = 0x00010001;
-	  
-
-	  initial_sample_offset += txlen;  
-	  if (initial_sample_offset > FRAME_LENGTH_SAMPLES) {
-	    initial_sample_offset -= FRAME_LENGTH_SAMPLES;
-	    frame++;
-	    mbox_off = 0;
-	  }
-
-	  tx_sdu_active = 0;
-	  old_mbox = DAQ_MBOX[0];
-
-	}
-
-      
-	//rt_sleep(nano2count(10000));
-	//      printf("back from sleep 10000 ... mbox %d\n",((unsigned int *)DAQ_MBOX)[0]);
-
-      }
-    
-
-      initial_sample_offset+=SLOT_DURATION_5MHz;
-      if (initial_sample_offset>FRAME_LENGTH_SAMPLES) {
-	initial_sample_offset-=FRAME_LENGTH_SAMPLES;
-	mbox_off = 0;
-	frame++;
-	//  if ((frame%100) == 0)
-	//printf("**** New frame %d\n",frame);
-
-	if (frame == 100000)
-	  oai_exit = 1;
-      }    
-      // sleep until HW has filled enough samples
-
-
-      mbox_diff = ((unsigned int*)DAQ_MBOX)[0]-old_mbox;
-      //   if ((frame%100) == 0)
-      //     printf("frame %d, old_mbox %d, mbox %d (initial_sample_offset %d : mbox<<9 %d)\n",frame,old_mbox,((unsigned int*)DAQ_MBOX)[0],initial_sample_offset,((unsigned int*)DAQ_MBOX)[0]<<9);
-
- 
-      if ((mbox_diff>10) && (sdu_received == 0)) {
-	mbox_off = 0;
-	initial_sample_offset = ((unsigned int*)DAQ_MBOX)[0]<<9;
-	//      printf("initial_sample_offset adjusted %d\n",initial_sample_offset);
-	rt_skip_cond++;
-	//      printf("old_mbox %d, mbox %d (initial_sample_offset %d : mbox<<9 %d)\n",
-	//	     old_mbox,((unsigned int*)DAQ_MBOX)[0],initial_sample_offset,((unsigned int*)DAQ_MBOX)[0]<<9);
-	old_mbox = ((unsigned int *)DAQ_MBOX)[0];
-
-      }
-      else {
-	if (old_mbox > ((unsigned int *)DAQ_MBOX)[0])
-	  mbox_off = 150;
-	old_mbox = ((unsigned int *)DAQ_MBOX)[0];
-      }
-
-      /*    
-	    printf("off: %d (%d,%d), mbox_off %d => rx_energy %d\n",initial_sample_offset,
-	    ((unsigned int *)DAQ_MBOX)[0],
-	    (initial_sample_offset>>9),mbox_off,
-	    rx_energy);
-      */
-
-      sample_threshold = initial_sample_offset+1024;
-      if (sample_threshold > FRAME_LENGTH_SAMPLES)
-	sample_threshold -= FRAME_LENGTH_SAMPLES;
-
-      while (old_mbox+mbox_off <= (sample_threshold>>9)) {
-	//     if ((frame % 100) == 0)
-	//	printf("sleeping (mbox %d, mbox_off %d, initial_sample_offset>>9 %d\n",
-	//	       old_mbox,mbox_off,(initial_sample_offset>>9));
-	rt_sleep(nano2count(66666));
-	if (old_mbox > ((unsigned int *)DAQ_MBOX)[0])
-	  mbox_off = 150;
-	old_mbox = ((unsigned int *)DAQ_MBOX)[0];
-      }
-
-      //    printf("While out ... mbox %d\n",((unsigned int *)DAQ_MBOX)[0]);
-       
-    }
-    printf("rt_skip_cond %d, frames %d, pos_crc %d, neg_crc %d\n",
-	   rt_skip_cond,frame,pos_crc,neg_crc);
-
-    printf("Dumping IS stats\n");
-    print_is_stats();
-    print_dd_stats();
-
-    write_output("rxsig0.m","rxs", rxdata[0],76800,1,1);
-    write_output("txsig0.m","txs", txdata[0],76800,1,1);
-    write_output("rxDATA_F_comp_aggreg3.m","rxDAT_F_comp_aggreg3", rxDATA_F_comp_aggreg3,48*200,1,1);
-    write_output("rxDATA_F_comp_aggreg2.m","rxDAT_F_comp_aggreg2", rxDATA_F_comp_aggreg2,48*200,1,1);
-
-    printf("[DOT11][PHY] Leaving rx_thread\n");
-    free(data_ind_rx);
-  }
-  else {
-    printf("[DOT11][PHY] No netlink, exiting\n");
-  }
-  return(0);
-  
-  
-}
-
-//extern int dot11_netlink_init();
-//extern int dot11_rx_thread_init();
-
-//extern void *rx_thread(void *);
-extern void *tx_thread(void *);
-
-
-void dot11_init() {
-
-
-
-  set_taus_seed(0);
-
-  // Basic initializations
-  init_fft(64,6,rev64);
-  init_interleavers();
-  ccodedot11_init();
-  ccodedot11_init_inv();
-  phy_generate_viterbi_tables();
-
-  init_crc32();
-
-}
-
-int generate_tx_signal(int tx_offset) {
-
-  TX_VECTOR_t tx_vector;
-  int i;
-
-  printf("Generating Signal @ %d (MBOX << 9 = %d)\n",
-	 tx_offset,DAQ_MBOX[0]<<9);
-
-  if (data_ind == NULL) {
-    data_ind = (uint8_t*)malloc(4095+2+1);
-    data_ind[0] = 0;
-    data_ind[1] = 0;
-  }
-
-
-  tx_vector.rate=1;
-  tx_vector.sdu_length=tx_sdu_length;
-  tx_vector.service=0;
-
-  for (i=0;i<tx_vector.sdu_length;i++)
-    data_ind[i+2] = rxsdu[i];  
-  data_ind[tx_vector.sdu_length+2+4]=0;  // Tail byte
-
->>>>>>> .r3153
-
-  //  printf("Generating signal at %p\n",txdata[0]);
-  return(phy_tx_start(&tx_vector,txdata[0],tx_offset,FRAME_LENGTH_SAMPLES,data_ind));
-
-}
-
-void signal_handler(int sig)
-{
-  void *array[10];
-  size_t size;
-
-  oai_exit=1;
-
-  // 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);
-}
-
-void exit_fun(const char* s)
-{
-  void *array[10];
-  size_t size;
-  int fd;
-
-  printf("Exiting: %s\n",s);
-
-  oai_exit=1;
-  rt_sleep(nano2count(FRAME_PERIOD));
-
-  // cleanup
-  stop_rt_timer();
-
-  fd = 0;
-  ioctl(openair_fd,openair_STOP,&fd);
-  munmap((void*)mem_base, BIGPHYS_NUMPAGES*4096);
-
-  exit (-1);
-}
-
-int dummy_tx_buffer[3840*4] __attribute__((aligned(16)));
-
-/* This is the main dot11 thread. */
-static void *dot11_thread(void *arg)
-{
-  RT_TASK *task;
-  int slot=0,hw_slot,last_slot, next_slot,frame=0;
-  unsigned int msg1;
-  unsigned int aa,slot_offset, slot_offset_F;
-  int diff;
-  int delay_cnt;
-  RTIME time_in;
-  int mbox_target=0,mbox_current=0;
-  int i;
-
-  task = rt_task_init_schmod(nam2num("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF);
-  mlockall(MCL_CURRENT | MCL_FUTURE);
-
-#ifdef HARD_RT
-<<<<<<< .mine
-  rt_printk("Started dot11 thread (id %p)\n",task);
-
-
-  rt_make_hard_real_time();
-#else
-
-  printf("Started dot11 thread (id %p)\n",task);
-#endif
-=======
-  rt_printk("Started dot11 thread (id %p)\n",task);
->>>>>>> .r3153
-
-<<<<<<< .mine
-  while (!oai_exit) {
-      //      rt_printk("eNB: slot %d\n",slot);
-=======
->>>>>>> .r3153
-
-<<<<<<< .mine
-=======
-  rt_make_hard_real_time();
-#else
->>>>>>> .r3153
-
-  printf("Started dot11 thread (id %p)\n",task);
-
-
-<<<<<<< .mine
-      if (frame>5)
-        {
-          if ((frame%100)==0)
-#ifdef HARD_RT
-            rt_printk("slot %d, hw_slot %d, next_slot %d (before): DAQ_MBOX %d\n", slot, hw_slot,next_slot,DAQ_MBOX[0]);
-#else
-	  printf("frame %d slot %d, hw_slot %d, next_slot %d (before): DAQ_MBOX %d\n", frame,slot, hw_slot,next_slot,DAQ_MBOX[0]);
-#endif
-          if (fs4_test==0) {
-	    if ((next_slot == 0) && (generate_test_tx==1) && ((frame%100)==0)) {
-	      printf("Generating tx_signal in frame %d ...",frame);
-	      generate_test_tx_signal();
-	      printf("done\n");
-
-	    }
-	    else {  // Check for normal TX packet
-	      /*for (i=0;i<3840;i++) {
-		((uint32_t *)txdata[0] + (3840*next_slot))[i] = 0x00010001;
-		}*/
-	    }
-	  }
-
-
-        }
-
-
-
-=======
-  while (!oai_exit) {
-    //      rt_printk("eNB: slot %d\n",slot);
-
-    hw_slot = (((((unsigned int *)DAQ_MBOX)[0]+1)%150)<<1)/15;
-    //this is the mbox counter where we should be 
-    mbox_target = ((((slot+1)%20)*15+1)>>1)%150;
-    //this is the mbox counter where we are
-    mbox_current = ((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 < (-5)) {
-      printf("[dot11_thread] Frame %d: missed slot, proceeding with next one (slot %d, hw_slot %d, diff %d)\n",frame, slot, hw_slot, diff);
->>>>>>> .r3153
-      slot++;
-      if (slot==20)
-<<<<<<< .mine
-        slot=0;
-      //slot++;
-      if ((slot%20)==0)
-        frame++;
-=======
-	slot=0;
-      continue;
->>>>>>> .r3153
-    }
-    if (diff>8) 
-      printf("[dot11_thread] eNB Frame %d: skipped slot, waiting for hw to catch up (slot %d, hw_slot %d, mbox_current %d, mbox_target %d, diff %d)\n",frame, slot, hw_slot, mbox_current, mbox_target, diff);
-
-    delay_cnt = 0;
-    while ((diff>0) && (!oai_exit))
-      {
-	time_in = rt_get_time_ns();
-	//rt_printk("eNB Frame %d delaycnt %d : hw_slot %d (%d), slot %d, (slot+1)*15=%d, diff %d, time %llu\n",frame,delay_cnt,hw_slot,((unsigned int *)DAQ_MBOX)[0],slot,(((slot+1)*15)>>1),diff,time_in);
-	//rt_printk("Frame %d: slot %d, sleeping for %llu\n", frame, slot, diff*DAQ_PERIOD);
-	rt_sleep(nano2count(diff*DAQ_PERIOD));
-	hw_slot = (((((unsigned int *)DAQ_MBOX)[0]+1)%150)<<1)/15;
-	//rt_printk("eNB Frame %d : hw_slot %d, time %llu\n",frame,hw_slot,rt_get_time_ns());
-	delay_cnt++;
-	if (delay_cnt == 10)
-	  {
-	    oai_exit = 1;
-	    printf("[dot11_thread]eNB Frame %d: HW stopped ... \n",frame);
-	  }
-	mbox_current = ((unsigned int *)DAQ_MBOX)[0];
-	if ((mbox_current>=135) && (mbox_target<15)) //handle the frame wrap-arround
-	  diff = 150-mbox_current+mbox_target;
-	else
-	  diff = mbox_target - mbox_current;
-      }
-
-
-    last_slot = (slot)%LTE_SLOTS_PER_FRAME;
-    if (last_slot <0)
-      last_slot+=20;
-    next_slot = (slot+3)%LTE_SLOTS_PER_FRAME;
-
-<<<<<<< .mine
-
-
-=======
-    if (frame>5)
-      {
-	if ((frame%100)==0)
-#ifdef HARD_RT
-	  rt_printk("slot %d, hw_slot %d, next_slot %d (before): DAQ_MBOX %d\n", slot, hw_slot,next_slot,DAQ_MBOX[0]);
-#else
-	printf("frame %d slot %d, hw_slot %d, next_slot %d (before): DAQ_MBOX %d\n", frame,slot, hw_slot,next_slot,DAQ_MBOX[0]);
-#endif
-	if (fs4_test==0) {
-	  if ((next_slot == 0) && (generate_test_tx==1) && ((frame%100)==0)) {
-	    printf("Generating tx_signal in frame %d ...",frame);
-	    //generate_test_tx_signal();
-	    printf("done\n");
-
-	  }
-	  else {  // Check for normal TX packet
-	    /*for (i=0;i<3840;i++) {
-	      ((uint32_t *)txdata[0] + (3840*next_slot))[i] = 0x00010001;
-	      }*/
-	  }
-	}
-
-
-      }
-
-
-
-    slot++;
-    if (slot==20)
-      slot=0;
-    //slot++;
-    if ((slot%20)==0)
-      frame++;
-  }
-
-  rt_printk("fun0: finished, ran %d times.\n",slot);
-
-#ifdef HARD_RT
-  rt_make_soft_real_time();
-#endif
-
-  // clean task
-  rt_task_delete(task);
-  rt_printk("Task deleted. returning\n");
-  return 0;
-}
-
-
-
->>>>>>> .r3153
-int main(int argc, char **argv) {
-
-  RT_TASK *task;
-  int i,j,aa;
-
-  LTE_DL_FRAME_PARMS *frame_parms;
-
-  u32 carrier_freq[4]= {1907600000,1907600000,1907600000,1907600000};
-  u32 rf_mode_max[4]     = {55231,55231,55231,55231};
-  u32 rf_mode_med[4]     = {39375,39375,39375,39375};
-  u32 rf_mode_byp[4]     = {22991,22991,22991,22991};
-
-  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]   = {2340,2340,2340,2340};
-  u32 rf_rxdc[4]     = {32896,32896,32896,32896};
-<<<<<<< .mine
-  u32 rxgain[4]={20,20,20,20};
-=======
->>>>>>> .r3153
-
-<<<<<<< .mine
-
-=======
-
-
->>>>>>> .r3153
-  u8  eNB_id=0,UE_id=0;
-  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,dot11_netlink_fd;
-  unsigned int tcxo = 114;
-
-  int amp;
-
-  char rxg_fname[100];
-  char rflo_fname[100];
-  FILE *rxg_fd=NULL;
-  FILE *rflo_fd=NULL;
-
-<<<<<<< .mine
-=======
-
->>>>>>> .r3153
-  const struct option long_options[] = {
-    {"calib-rx", required_argument, NULL, 256},
-    {"calib-rx-med", required_argument, NULL, 257},
-    {"calib-rx-byp", required_argument, NULL, 258},
-    {NULL, 0, NULL, 0}};
-
-  mode = normal_txrx;
-
-
-  while ((c = getopt_long (argc, argv, "C:ST:dF:t",long_options,NULL)) != -1)
-    {
-      switch (c)
-        {
-        case 'd':
-          do_forms=1;
-          break;
-        case 't':
-          generate_test_tx = 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 '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);
-	    fscanf(rxg_fd,"%d %d %d %d",&rxg_max[0],&rxg_max[1],&rxg_max[2],&rxg_max[3]);
-	    fscanf(rxg_fd,"%d %d %d %d",&rxg_med[0],&rxg_med[1],&rxg_med[2],&rxg_med[3]);
-	    fscanf(rxg_fd,"%d %d %d %d",&rxg_byp[0],&rxg_byp[1],&rxg_byp[2],&rxg_byp[3]);
-	  }
-	  else 
-	    printf("%s not found, running with defaults\n",rxg_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);
-
-	  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;
-        default:
-          break;
-        }
-    }
-
-
-  // to make a graceful exit when ctrl-c is pressed
-  signal(SIGSEGV, signal_handler);
-
-  // 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     = 1;
-  frame_parms->nb_antennas_rx     = 1;
-  frame_parms->mode1_flag         = 1; //default == SISO
-  frame_parms->frame_type         = 1;
-  if (fs4_test==1)
-    frame_parms->tdd_config         = 255;
-  else
-    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;
-  frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = 0;//n_DMRS1 set to 0
-
-  frame_parms->node_id = NODE;
-
-  // for Express MIMO
-  for (i=0;i<4;i++)
-    {
-      frame_parms->carrier_freq[i] = carrier_freq[i];
-      frame_parms->carrier_freqtx[i] = carrier_freq[i];
-
-<<<<<<< .mine
-      frame_parms->rxgain[i]       = rxgain[i];
-=======
-      frame_parms->rxgain[i]       = rxgain[i];
-
-      frame_parms->rflocal[i]      = rf_local[i];
-      frame_parms->rfvcolocal[i]   = rf_vcocal[i];
-      frame_parms->rxdc[i]         = rf_rxdc[i];
-      frame_parms->rfmode[i] = rf_mode_max[i];
-
->>>>>>> .r3153
-    }
-
-  printf("Freq %d,%d,%d,%d, Gain %d,%d,%d,%d, RFmode %d, RXDC %d, RF_local %d, rf_vcocal %d\n",
-	 frame_parms->carrier_freq[0],frame_parms->carrier_freq[1],frame_parms->carrier_freq[2],frame_parms->carrier_freq[3],
-	 frame_parms->rxgain[0],frame_parms->rxgain[1],frame_parms->rxgain[2],frame_parms->rxgain[3],
-	 frame_parms->rfmode[0],frame_parms->rflocal[0],
-	 frame_parms->rxdc[0],frame_parms->rfvcolocal[0]);
-  
-
-  frame_parms->nb_prefix_samples0 = 40;
-  frame_parms->nb_prefix_samples = 36;
-  frame_parms->symbols_per_tti = 14;
-  frame_parms->ofdm_symbol_size = 512;
-  
-  frame_parms->log2_symbol_size = 9;
-  frame_parms->samples_per_tti = 7680;
-  frame_parms->first_carrier_offset = frame_parms->ofdm_symbol_size - 150; 
-  
-  openair_fd = setup_oai_hw(frame_parms);
-  printf("Setting up buffers for Antenna port 0\n");
-  setup_dot11_buffers(&(rxdata[0]),&(txdata[0]),0);
-  printf("Setting up buffers for Antenna port 1\n");
-  setup_dot11_buffers(&(rxdata[1]),&(txdata[1]),1);
-
-<<<<<<< .mine
-  printf("Initializing dot11 DSP functions\n");
-  dot11_init();
-  dot11_netlink_fd = dot11_netlink_init();
-=======
->>>>>>> .r3153
-
-<<<<<<< .mine
-  for (j=0; j<76800; 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;
-      }
-  sleep(1);
-  printf("Calling openair_GET_PCI_INTERFACE %x\n",openair_GET_PCI_INTERFACE);
-  ioctl(openair_fd,openair_GET_PCI_INTERFACE,&pci_interface_ptr_kern);
-  if (pci_interface_ptr_kern == 0) {
-    printf("null pci_interface_ptr, exiting\n");
-    exit(-1);
-  }
-=======
-  for (j=0; j<76800; 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;
-      }
-  sleep(1);
-  printf("Calling openair_GET_PCI_INTERFACE %x\n",openair_GET_PCI_INTERFACE);
-  ioctl(openair_fd,openair_GET_PCI_INTERFACE,&pci_interface_ptr_kern);
-  if (pci_interface_ptr_kern == 0) {
-    printf("null pci_interface_ptr, exiting\n");
-    exit(-1);
-  } 
-  exmimo_pci_interface = (exmimo_pci_interface_t*) (pci_interface_ptr_kern-bigphys_top+mem_base);
-  printf("pci_interface_ptr_kern = %p, exmimo_pci_interface = %p\n", (void*) pci_interface_ptr_kern, exmimo_pci_interface);
-  DAQ_MBOX = (unsigned int *)(0xc0000000+exmimo_pci_interface->rf.mbox-bigphys_top+mem_base);
-
-  printf("Initializing dot11 DSP functions\n");
-  dot11_init();
-  dot11_netlink_fd = netlink_init();
->>>>>>> .r3153
-  exmimo_pci_interface = (exmimo_pci_interface_t*) (pci_interface_ptr_kern-bigphys_top+mem_base);
-  printf("pci_interface_ptr_kern = %p, exmimo_pci_interface = %p\n", (void*) pci_interface_ptr_kern, exmimo_pci_interface);
-  DAQ_MBOX = (unsigned int *)(0xc0000000+exmimo_pci_interface->rf.mbox-bigphys_top+mem_base);
-
-<<<<<<< .mine
-=======
-  printf("dot11_netlink_fd %d\n",dot11_netlink_fd);
-
-
-
->>>>>>> .r3153
-  // make main thread LXRT soft realtime
-  printf("Starting LXRT ...");
-  task = rt_task_init_schmod(nam2num("MYTASK"), 9, 0, 0, SCHED_FIFO, 0xF);
-  mlockall(MCL_CURRENT | MCL_FUTURE);
-
-  // start realtime timer and scheduler
-  //rt_set_oneshot_mode();
-  rt_set_periodic_mode();
-  start_rt_timer(0);
-<<<<<<< .mine
-  printf(" done\n");
-=======
-  printf(" done\n");
-
->>>>>>> .r3153
-<<<<<<< .mine
-  //now = rt_get_time() + 10*PERIOD;
-  //rt_task_make_periodic(task, now, PERIOD);
-
-  // initialize the instance cnt before starting the thread
-  //  instance_cnt_ptr_user = &instance_cnt;
-
-
-
-  // signal the driver to set up for user-space operation
-  // this will initialize the semaphore and the task pointers in the kernel
-  // further we receive back the pointer to the shared instance counter which is used to signal if the thread is busy or not. This pointer needs to be mapped to user space.
-  /*
-  ioctl(openair_fd,openair_START_LXRT,&instance_cnt_ptr_kern);
-  instance_cnt_ptr_user = (int*) (instance_cnt_ptr_kern -bigphys_top+mem_base);
-  *instance_cnt_ptr_user = -1;
-  printf("instance_cnt_ptr_kern %p, instance_cnt_ptr_user %p, *instance_cnt_ptr_user %d\n", (void*) instance_cnt_ptr_kern, (void*) instance_cnt_ptr_user,*instance_cnt_ptr_user);
-  */
-
-=======
->>>>>>> .r3153
-
-<<<<<<< .mine
-
-
-  rt_sleep(nano2count(FRAME_PERIOD));
-=======
->>>>>>> .r3153
-  // this starts the DMA transfers
-<<<<<<< .mine
-=======
-  ioctl(openair_fd,openair_START_TX_SIG,NULL);
-  //ioctl(openair_fd,openair_GET_BUFFER,NULL);
->>>>>>> .r3153
-
-<<<<<<< .mine
-  ioctl(openair_fd,openair_START_TX_SIG,NULL);
-
-
-=======
->>>>>>> .r3153
-  rt_sleep(nano2count(10*FRAME_PERIOD));
-
-
-<<<<<<< .mine
-  thread1 = rt_thread_create(dot11_thread, NULL, 100000000);
-=======
-  //thread1 = rt_thread_create(dot11_thread, NULL, 100000000);
->>>>>>> .r3153
-
-
-<<<<<<< .mine
-  printf("thread created\n");
-=======
-  thread1 = rt_thread_create(rx_thread, &dot11_netlink_fd, 10000000);
->>>>>>> .r3153
-
-  thread2 = rt_thread_create(tx_thread, &dot11_netlink_fd, 10000000);
-
-  // wait for end of program
-  printf("TYPE <ENTER> TO TERMINATE main thread\n");
-  getchar();
-
-  // stop threads
-  rt_sleep(nano2count(FRAME_PERIOD));
-
-  stop_rt_timer();
-
-  fd = 0;
-  ioctl(openair_fd,openair_STOP,&fd);
-  munmap((void*)mem_base, BIGPHYS_NUMPAGES*4096);
-
-  return 0;
-}
diff --git a/targets/RTAI/USER/emos-raw.c b/targets/RTAI/USER/emos-raw.c
deleted file mode 100644
index 77266c3480742be93c23b8abb240ffcd82af3549..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/emos-raw.c
+++ /dev/null
@@ -1,1545 +0,0 @@
-/*******************************************************************************
-
-  Eurecom OpenAirInterface
-  Copyright(c) 1999 - 2011 Eurecom
-
-  This program is free software; you can redistribute it and/or modify it
-  under the terms and conditions of the GNU General Public License,
-  version 2, as published by the Free Software Foundation.
-
-  This program is distributed in the hope 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
-  this program; if not, write to the Free Software Foundation, Inc.,
-  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
-
-  The full GNU General Public License is included in this distribution in
-  the file called "COPYING".
-
-  Contact Information
-  Openair Admin: openair_admin@eurecom.fr
-  Openair Tech : openair_tech@eurecom.fr
-  Forums       : http://forums.eurecom.fsr/openairinterface
-  Address      : Eurecom, 2229, route des cr锚tes, 06560 Valbonne Sophia Antipolis, 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"
-
-#include "PHY/types.h"
-#include "PHY/TOOLS/defs.h"
-#include "openair0_lib.h"
-
-#include "UTIL/LOG/log.h"
-#include "UTIL/LOG/vcd_signal_dumper.h"
-
-#include "gain_control.h"
-
-#if defined(ENABLE_ITTI)
-# include "intertask_interface_init.h"
-# include "timer.h"
-# if defined(ENABLE_USE_MME)
-#   include "s1ap_eNB.h"
-#   include "sctp_eNB_task.h"
-# endif
-#endif
-
-#define OPENAIR_THREAD_PRIORITY       255
-#define OPENAIR_THREAD_STACK_SIZE    8192 
-
-#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];
-unsigned char scope_enb_num_ue = 1;
-*/
-#include "lte_scope.h"
-FD_lte_scope *form_lte;
-char title[255];
-#endif //XFORMS
-
-#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 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
-
-#define FRAME_PERIOD 100000000ULL
-#define DAQ_PERIOD 66667ULL
-#define LTE_SLOTS_PER_FRAME  20
-//#define RESAMPLING_FACTOR 0
-#define SAMPLES_PER_SLOT 15360
-#define FRAME_LENGTH_COMPLEX_SAMPLES (SAMPLES_PER_SLOT*LTE_SLOTS_PER_FRAME)
-#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 long int thread0;
-//static long int thread1;
-//static long 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; //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
-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 number_of_cards = 1;
-exmimo_config_t *p_exmimo_config;
-exmimo_id_t     *p_exmimo_id;
-volatile unsigned int *DAQ_MBOX;
-
-int oai_exit = 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};
-
-int fs4_test=0;
-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]    = {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},{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). 
-#define AQU_LENGTH_FRAMES 100 //Aquisition time in frames
-#define AQU_PERIOD_FRAMES 200 //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] = {-105, -110, -115};
-*/
-
-char dumpfile_dir[256] = "/mnt/emos";
-
-char *conf_config_file_name = NULL;
-
-unsigned int lost_bytes=0;
-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;
-  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 int16_t* sync_corr_ue0;
-extern int16_t prach_ifft[4][1024*2];
-
-unsigned int frame;
-int rx_input_level_dBm;
-#ifdef XFORMS
-extern int otg_enabled;
-#else
-int otg_enabled;
-#endif
-
-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
-
-//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(int txi, int txq, int rxi, int 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);
-}
-
-#ifdef XFORMS
-extern void ia_receiver_on_off( FL_OBJECT * form, long arg) {}
-
-
-void *scope_thread(void *arg) {
-    int16_t prach_corr[1024];
-    char stats_buffer[16384];
-    //FILE *UE_stats, *eNB_stats;
-    int i,len=0;
-    float rxsig_t_dB[4][FRAME_LENGTH_COMPLEX_SAMPLES];
-    float time[FRAME_LENGTH_COMPLEX_SAMPLES];
-    struct sched_param sched_param;
-    int card,ant,idx;
-
-    sched_param.sched_priority = sched_get_priority_min(SCHED_FIFO)+1; 
-    sched_setscheduler(0, SCHED_FIFO,&sched_param);
-
-    printf("Scope thread has priority %d\n",sched_param.sched_priority);
-    
-    /*
-      if (UE_flag==1) 
-      UE_stats  = fopen("UE_stats.txt", "w");
-      else 
-      eNB_stats = fopen("eNB_stats.txt", "w");
-    */
-    
-    while (!oai_exit) {
-      /*
-        if (UE_flag==1) {
-            len = dump_ue_stats (PHY_vars_UE_g[0], stats_buffer, 0, mode,rx_input_level_dBm);
-            fl_set_object_label(form_stats->stats_text, stats_buffer);
-            //rewind (UE_stats);
-            //fwrite (stats_buffer, 1, len, UE_stats);
-            
-            phy_scope_UE(form_ue[UE_id], 
-                         PHY_vars_UE_g[UE_id],
-                         eNB_id,
-                         UE_id,7);
-            
-        } else {
-            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);
-            }
-              
-        }
-      */
-
-      idx = 0;
-      for (card=0;card<number_of_cards;card++) {
-	for (ant=0;ant<4;ant++) {
-	  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])));
-	      rxsig_t_dB[0][i] = (float) ((((int16_t*) openair0_exmimo_pci[card].adc_head[ant])[2*i]));
-	      rxsig_t_dB[1][i] = (float) ((((int16_t*) openair0_exmimo_pci[card].adc_head[ant])[2*i+1]));
-	      time[i] = (float) i;
-	    }
-	    fl_set_xyplot_data(form_lte->channel_t_re[idx],time,rxsig_t_dB[0],len,"","","");
-	    fl_set_xyplot_data(form_lte->channel_t_im[idx],time,rxsig_t_dB[1],len,"","","");
-	    idx++;
-	  }
-	}
-      }
-      
-      //printf("doing forms\n");
-      usleep(100000);
-    }
-    
-    //fclose (UE_stats);
-    //fclose (eNB_stats);
-    
-    pthread_exit((void*)arg);
-}
-#endif
-
-int dummy_tx_buffer[3840*4] __attribute__((aligned(16)));
-
-
-#ifdef EMOS
-void* gps_thread (void *arg)
-{
-
-  struct gps_data_t gps_data;
-  struct gps_data_t *gps_data_ptr = &gps_data;
-  struct sched_param sched_param;
-  int ret;
-
-  sched_param.sched_priority = sched_get_priority_min(SCHED_FIFO)+1; 
-  sched_setscheduler(0, SCHED_FIFO,&sched_param);
-  
-  printf("GPS thread has priority %d\n",sched_param.sched_priority);
-
-  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_ptr);
-  if (ret!=0)
-#else
-  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_ptr, WATCH_ENABLE,NULL) != 0)
-#else
-  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_ptr);
-  
-
-  while (!oai_exit)
-    {
-      printf("[EMOS] polling data from gps\n");
-#if GPSD_API_MAJOR_VERSION>=5
-      if (gps_waiting(gps_data_ptr,500)) {
-	if (gps_read(gps_data_ptr) <= 0) {
-#else
-      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_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);
-      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;
-
-  FILE  *dumpfile_id;
-  char  dumpfile_name[1024];
-  time_t starttime_tmp;
-  struct tm starttime;
-  
-  //time_t timer;
-  struct tm now_sec;
-  struct timeval now;
-
-  struct sched_param sched_param;
-  int ret;
-
-  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);
-
-  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: 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
-
-  // allocate memory for NO_FRAMES_DISK channes estimations
-  fifo2file_buffer = malloc(AQU_LENGTH_SLOTS*channel_buffer_size);
-  fifo2file_ptr = fifo2file_buffer;
-
-  if (fifo2file_buffer == NULL)
-    {
-      printf("[EMOS] Cound not allocate memory for fifo2file_buffer\n");
-      exit(EXIT_FAILURE);
-    }
-
-  if ((fifo = open(CHANSOUNDER_FIFO_DEV, O_RDONLY)) < 0)
-    {
-      fprintf(stderr, "[EMOS] Error opening the fifo\n");
-      exit(EXIT_FAILURE);
-    }
-
-
-  time(&starttime_tmp);
-  localtime_r(&starttime_tmp,&starttime);
-  snprintf(dumpfile_name,1024,"%s/%s_data_%d%02d%02d_%02d%02d%02d.EMOS",
-	   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))
-    {
-      fprintf(stderr, "[EMOS] Error opening dumpfile %s\n",dumpfile_name);
-      exit(EXIT_FAILURE);
-    }
-
-  printf("[EMOS] starting dump, channel_buffer_size=%d ...\n",channel_buffer_size);
-
-  while (!oai_exit)
-    {
-      //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);
-      else
-	printf("UE: count %d, frame %d, read: %d bytes from the fifo\n",counter, ((fifo_dump_emos_UE*)fifo2file_ptr)->frame_rx,bytes);
-      */
-
-      fifo2file_ptr += channel_buffer_size;
-      counter ++;
-      total_bytes += bytes;
-
-      if ((counter%AQU_LENGTH_SLOTS)==0)
-        {
-          //reset stuff
-          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)
-	    {
-	      fprintf(stderr, "[EMOS] Error writing to dumpfile\n");
-	      exit(EXIT_FAILURE);
-	    }
-	  else 
-	    printf("[EMOS] Frame %d: wrote %d bytes to disk\n",frame,AQU_LENGTH_SLOTS*channel_buffer_size);
-	    
-	}
-
-      if ((counter%AQU_LENGTH_SLOTS)==0) {
-	//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);
-      }
-    }
-  
-  free(fifo2file_buffer);
-  fclose(dumpfile_id);
-  close(fifo);
-  
-  pthread_exit((void*) arg);
-
-}
-#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;
-#endif
-  unsigned char slot=0,last_slot, next_slot, hw_slot;
-  unsigned int msg1;
-  unsigned int aa,slot_offset, slot_offset_F;
-  int diff;
-  int delay_cnt;
-  RTIME time_in, time_diff;
-  int mbox_target=0,mbox_current=0;
-  int i,ret;
-  int tx_offset;
-  int bytes, bytes_tot=0, bytes_len;
-  long long int k1=1000;
-  long long int k2=1024-k1;
-  int ant,len,card = 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);
-#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;
-
-  while (!oai_exit)
-    {
-      hw_slot = (((((volatile unsigned int *)DAQ_MBOX)[0]+1)%150)<<1)/15;
-      //LOG_D(HW,"eNB frame %d, time %llu: slot %d, hw_slot %d (mbox %d)\n",frame,rt_get_time_ns(),slot,hw_slot,((unsigned int *)DAQ_MBOX)[0]);
-      //this is the mbox counter where we should be 
-      //mbox_target = ((((slot+1)%20)*15+1)>>1)%150;
-      mbox_target = mbox_bounds[slot];
-      //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 < (-7)) {
-	// 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 (slot==20){
-	  slot=0;
-	  frame++;
-	}
-	continue;
-      }
-      if (diff>8) 
-          LOG_D(HW,"eNB Frame %d, time %llu: skipped slot, waiting for hw to catch up (slot %d, hw_slot %d, mbox_current %d, mbox_target %d, diff %d)\n",frame, rt_get_time_ns(), slot, hw_slot, mbox_current, mbox_target, diff);
-
-      delay_cnt = 0;
-      while ((diff>0) && (!oai_exit))
-        {
-	  time_in = rt_get_time_ns();
-	  //LOG_D(HW,"eNB Frame %d delaycnt %d : hw_slot %d (%d), slot %d, (slot+1)*15=%d, diff %d, time %llu\n",frame,delay_cnt,hw_slot,((unsigned int *)DAQ_MBOX)[0],slot,(((slot+1)*15)>>1),diff,time_in);
-	  //LOG_D(HW,"eNB Frame %d, time %llu: sleeping for %llu (slot %d, hw_slot %d, diff %d, mbox %d, delay_cnt %d)\n", frame, time_in, diff*DAQ_PERIOD,slot,hw_slot,diff,((volatile unsigned int *)DAQ_MBOX)[0],delay_cnt);
-          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);
-	  hw_slot = (((((volatile unsigned int *)DAQ_MBOX)[0]+1)%150)<<1)/15;
-          //LOG_D(HW,"eNB Frame %d : hw_slot %d, time %llu\n",frame,hw_slot,rt_get_time_ns());
-          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;
-        }
-
-      last_slot = (slot)%LTE_SLOTS_PER_FRAME;
-      if (last_slot <0)
-        last_slot+=20;
-      next_slot = (slot+3)%LTE_SLOTS_PER_FRAME;
-
-      if (frame>=AQU_LENGTH_FRAMES)
-        {
-	  timing_info.time_last = timing_info.time_now;
-	  timing_info.time_now = rt_get_time_ns();
-	  
-	  if (timing_info.n_samples>0) {
-	    time_diff = timing_info.time_now - timing_info.time_last;
-	    if (time_diff < timing_info.time_min) 
-	      timing_info.time_min = time_diff;
-	    if (time_diff > timing_info.time_max) 
-	      timing_info.time_max = time_diff;
-	    timing_info.time_avg += time_diff;
-	  }
-	  
-	  timing_info.n_samples++;
-
-	  // do measurements for rssi
-	  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_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],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);
-	      }
-	    }
-	  }
-
-#ifdef EMOS	  
-	  // save raw samples here
-	  if ((last_slot==0) && ((frame%AQU_PERIOD_FRAMES)==0)) {
-	    printf("[EMOS] Frame %d: start writing to FIFO\n",frame);
-	    bytes_tot=0;
-	  }
-
-	  if ((frame%AQU_PERIOD_FRAMES)<AQU_LENGTH_FRAMES) {
-	  for (card=0; card<number_of_cards; card++) {
-	    for (ant=0; ant<4; ant++) {
-	      if (carrier_freq[card][ant] != 0) {
-		len = SAMPLES_PER_SLOT/(1<<openair0_exmimo_pci[card].exmimo_config_ptr->framing.resampling_factor[ant]);
-		bytes_len = len*4;
-		bytes = rtf_put(CHANSOUNDER_FIFO_MINOR, &(((int32_t*) openair0_exmimo_pci[card].adc_head[ant])[last_slot*len]), bytes_len);
-		bytes_tot += bytes;
-		if (bytes!=bytes_len) {
-		  lost_bytes += bytes_len - bytes;
-		  LOG_W(PHY,"Frame %d, slot %d: Problem writing EMOS data to FIFO (bytes=%d, size=%d)\n",
-			frame, last_slot, bytes, bytes_len);
-		}
-	      }
-	    }
-	  }
-	  if ((last_slot==19) && ((frame%AQU_PERIOD_FRAMES)==99))
-	    printf("[EMOS] Frame %d: sent %d bytes to FIFO\n",frame,bytes_tot);
-
-	  }
-#endif
-	}
-
-      slot++;
-      if (slot==20) {
-        slot=0;
-        frame++;
-      }
-#if defined(ENABLE_ITTI)
-      itti_update_lte_time(frame, slot);
-#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_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;
-  int card = 0;
-
-  uint32_t rf_mode_base   = TXLPFNORM + TXLPFEN  + RXLPFNORM + RXLPFEN + LNA1ON +LNAMax + RFBBNORM;
-  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};
-  uint32_t rxgain[4]      = {30,30,30,30};
-  uint32_t txgain[4]      = {0,0,0,0};
-
-  uint16_t Nid_cell = 0;
-  uint8_t  cooperation_flag=0, transmission_mode=1, abstraction_flag=0;
-  uint8_t beta_ACK=0,beta_RI=0,beta_CQI=2;
-
-  int c;
-  char do_forms=0;
-  unsigned int fd;
-  unsigned int tcxo = 114;
-
-  int amp;
-  uint8_t 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 ant_offset=0;
-
-  int error_code;
-  char *itti_dump_file = NULL;
-
-  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:K:O:ST:UdF:V",long_options,NULL)) != -1)
-    {
-      switch (c)
-        {
-          case 'V':
-          ouput_vcd = 1;
-          break;
-        case 'd':
-          do_forms=1;
-          break;
-        case 'U':
-          UE_flag = 1;
-          break;
-        case 'C':
-	  for (card=0;card<MAX_CARDS;card++) {
-	    carrier_freq[card][0] = atof(optarg);
-	    carrier_freq[card][1] = atof(optarg);
-	    carrier_freq[card][2] = atof(optarg);
-	    carrier_freq[card][3] = atof(optarg);
-	  }
-          break;
-        case 'S':
-          fs4_test=1;
-          break;
-        case 'T':
-          tcxo=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 '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 defined(ENABLE_ITTI)
-  itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, itti_dump_file);
-
-# if defined(ENABLE_USE_MME)
-  if (itti_create_task(TASK_SCTP, sctp_eNB_task, NULL) < 0) {
-    LOG_E(EMU, "Create task failed");
-    LOG_D(EMU, "Initializing SCTP task interface: FAILED\n");
-    return -1;
-  }
-  if (itti_create_task(TASK_S1AP, s1ap_eNB_task, NULL) < 0) {
-    LOG_E(EMU, "Create task failed");
-    LOG_D(EMU, "Initializing S1AP task interface: FAILED\n");
-    return -1;
-  }
-# endif
-
-  if (itti_create_task(TASK_L2L1, l2l1_task, NULL) < 0) {
-      LOG_E(EMU, "Create task failed");
-      LOG_D(EMU, "Initializing L2L1 task interface: FAILED\n");
-      return -1;
-  }
-
-  // Handle signals until all tasks are terminated
-//   itti_wait_tasks_end();
-#endif
-
-  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
-
-    g_log->log_component[HW].level = LOG_DEBUG;
-    g_log->log_component[HW].flag  = LOG_HIGH;
-#ifdef OPENAIR2
-    g_log->log_component[PHY].level = LOG_INFO;
-#else
-    g_log->log_component[PHY].level = LOG_DEBUG;
-#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;
-
-
-  // Initialize card
-  ret = openair0_open();
-  if ( ret != 0 ) {
-          if (ret == -1)
-              printf("Error opening /dev/openair0");
-          if (ret == -2)
-              printf("Error mapping bigshm");
-          if (ret == -3)
-              printf("Error mapping RX or TX buffer");
-          return(ret);
-     }
-
-  number_of_cards = openair0_num_detected_cards;
-
-  for (card=0; card<number_of_cards; card++) {
-    printf ("Configuring card %d of %d (number of antennas %d).\n", card, 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   = !UE_flag;
-
-    if (card==0) 
-      p_exmimo_config->framing.multicard_syncmode = SYNCMODE_MASTER;
-    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;
- 
-    /*
-      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 (carrier_freq[card][ant] != 0) {
-	p_exmimo_config->rf.rf_mode[ant] = rf_mode_base;
-	switch (bandwidth[card]) {
-	case BW20:
-	  p_exmimo_config->framing.resampling_factor[ant] = 0;
-	  p_exmimo_config->rf.rf_mode[ant] += RXLPF10 + TXLPF10;
-	  break;
-	case BW10:
-	  p_exmimo_config->framing.resampling_factor[ant] = 1;
-	  p_exmimo_config->rf.rf_mode[ant] += RXLPF5 + TXLPF5;
-	  break;
-	case BW5: 
-	  p_exmimo_config->framing.resampling_factor[ant] = 2;
-	  p_exmimo_config->rf.rf_mode[ant] += RXLPF25 + TXLPF25;
-	  break;
-	}
-	//p_exmimo_config->rf.rf_mode[ant] += (TXEN + DMAMODE_TX);
-	p_exmimo_config->rf.rf_mode[ant] += (RXEN + DMAMODE_RX);
-      }
-      else {
-	p_exmimo_config->rf.rf_mode[ant] = 0;
-      }
-    }
-
-    for (ant = 0; ant<4; ant++) { 
-      p_exmimo_config->rf.do_autocal[ant] = 1;
-      p_exmimo_config->rf.rf_freq_rx[ant] = carrier_freq[card][ant];
-      p_exmimo_config->rf.rf_freq_tx[ant] = carrier_freq[card][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[card][ant] >= 850000000) && (carrier_freq[card][ant] <= 865000000)) {
-	p_exmimo_config->rf.rf_vcocal[ant]  = rf_vcocal_850[ant];
-	p_exmimo_config->rf.rffe_band_mode[ant] = DD_TDD;	    
-      }
-      else if ((carrier_freq[card][ant] >= 1900000000) && (carrier_freq[card][ant] <= 2000000000)) {
-	p_exmimo_config->rf.rf_vcocal[ant]  = rf_vcocal[ant];
-	p_exmimo_config->rf.rffe_band_mode[ant] = B19G_TDD;	    
-      }
-      else {
-	p_exmimo_config->rf.rf_vcocal[ant]  = rf_vcocal[ant];
-	p_exmimo_config->rf.rffe_band_mode[ant] = 0;	    
-      }
-      
-      p_exmimo_config->rf.rffe_gain_txlow[ant] = 31;
-      p_exmimo_config->rf.rffe_gain_txhigh[ant] = 31;
-      p_exmimo_config->rf.rffe_gain_rxfinal[ant] = 52;
-      p_exmimo_config->rf.rffe_gain_rxlow[ant] = 31;
-    }
-    
-    
-    openair0_dump_config(card);
-
-    printf("EXMIMO_CONFIG card %d: freq0..3 %u %u %u %u Hz, freqtx0..1 %u %u Hz, RX gain0..1 %d %d dB\n",  
-	   card,
-	   p_exmimo_config->rf.rf_freq_rx[0],
-	   p_exmimo_config->rf.rf_freq_rx[1],
-	   p_exmimo_config->rf.rf_freq_rx[2],
-	   p_exmimo_config->rf.rf_freq_rx[3],
-	   p_exmimo_config->rf.rf_freq_tx[0],
-	   p_exmimo_config->rf.rf_freq_tx[1],
-	   p_exmimo_config->rf.rx_gain[0][0],
-	   p_exmimo_config->rf.rx_gain[1][0]);
-    printf("EXMIMO_CONFIG card %d: 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", 
-	   card,
-	   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;
-  } //card
-  card=0;
- 
-#ifdef EMOS
-  error_code = rtf_create(CHANSOUNDER_FIFO_MINOR,CHANSOUNDER_FIFO_SIZE);
-  if (error_code==0)
-    printf("[OPENAIR][SCHED][INIT] Created EMOS FIFO %d\n",CHANSOUNDER_FIFO_MINOR);
-  else if (error_code==ENODEV)
-    printf("[OPENAIR][SCHED][INIT] Problem: EMOS FIFO %d is greater than or equal to RTF_NO\n",CHANSOUNDER_FIFO_MINOR);
-  else if (error_code==ENOMEM)
-    printf("[OPENAIR][SCHED][INIT] Problem: cannot allocate memory for EMOS FIFO %d\n",CHANSOUNDER_FIFO_MINOR);
-  else 
-    printf("[OPENAIR][SCHED][INIT] Problem creating EMOS FIFO %d, error_code %d\n",CHANSOUNDER_FIFO_MINOR,error_code);
-#endif
-
-  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"), 1);
-  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[0].rxcnt_ptr[0];
-
-  // this starts the DMA transfers
-  if (UE_flag!=1)
-    for (card=0;card<number_of_cards;card++)
-      openair0_start_rt_acquisition(card);
-
-
-#ifdef XFORMS
-  if (do_forms==1) {
-      fl_initialize (&argc, argv, NULL, 0, 0);
-      /*
-      form_stats = create_form_stats_form();
-      if (UE_flag==1) {
-          form_ue[UE_id] = create_lte_phy_scope_ue();
-          sprintf (title, "LTE DL SCOPE UE");
-          fl_show_form (form_ue[UE_id]->lte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
-      } else {
-            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");
-      if (UE_flag==0) {
-          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");
-              }
-          }
-      }
-      else {
-          if (openair_daq_vars.use_ia_receiver) {
-              fl_set_button(form_ue[UE_id]->button_0,1);
-              fl_set_object_label(form_ue[UE_id]->button_0, "IA Receiver ON");
-          }
-          else {
-              fl_set_button(form_ue[UE_id]->button_0,0);
-              fl_set_object_label(form_ue[UE_id]->button_0, "IA Receiver OFF");
-          }
-      }
-      */
-      form_lte = create_form_lte_scope();
-      fl_show_form (form_lte->lte_scope, FL_PLACE_HOTSPOT, FL_FULLBORDER, "Scope");
-
-      ret = pthread_create(&thread2, NULL, scope_thread, NULL);
-      printf("Scope thread created, ret=%d\n",ret);
-    }
-#endif
-
-#ifdef EMOS
-  ret = pthread_create(&thread3, NULL, emos_thread, NULL);
-  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);
-
-#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);
-#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");
-    }
-#endif
-#ifdef DLSCH_THREAD
-    init_rx_pdsch_thread();
-    rt_sleep_ns(FRAME_PERIOD/10);
-    init_dlsch_threads();
-#endif
-    printf("UE threads created\n");
-    */
-  }
-  else {
-#ifdef RTAI
-    thread0 = rt_thread_create(eNB_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");
-    }
-#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);
-
-  // 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);
-        if (UE_flag==1) {
-            fl_hide_form(form_ue[UE_id]->lte_phy_scope_ue);
-            fl_free_form(form_ue[UE_id]->lte_phy_scope_ue);
-        } else {
-            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);
-            }
-        }
-      */
-      fl_hide_form(form_lte->lte_scope);
-      fl_free_form(form_lte->lte_scope);
-    }
-#endif
-
-  printf("stopping MODEM threads\n");
-  // cleanup
-  if (UE_flag == 1) {
-    /*
-#ifdef RTAI
-    rt_thread_join(thread1); 
-#else
-    pthread_join(thread1,&status); 
-#endif
-#ifdef DLSCH_THREAD
-    cleanup_dlsch_threads();
-    cleanup_rx_pdsch_thread();
-#endif
-    */
-  }
-  else {
-#ifdef RTAI
-    rt_thread_join(thread0); 
-#else
-    pthread_join(thread0,&status); 
-#endif
-#ifdef ULSCH_THREAD
-    cleanup_ulsch_threads();
-#endif
-  }
-
-#ifdef OPENAIR2
-  //cleanup_pdcp_thread();
-#endif
-
-#ifdef RTAI
-  stop_rt_timer();
-#endif
-
-  printf("stopping card\n");
-  for (card=0;card<number_of_cards;card++)
-    openair0_stop(card);
-  printf("closing openair0_lib\n");
-  openair0_close();
-
-#ifdef EMOS
-  printf("waiting for EMOS thread\n");
-  pthread_cancel(thread3);
-  pthread_join(thread3,&status);
-  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
-
-  if (ouput_vcd)
-    vcd_signal_dumper_close();
-
-  logClean();
-
-  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[ant] = 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] = (int32_t*) openair0_exmimo_pci[card].adc_head[i+carrier];
-
-
-      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] = (int32_t*) openair0_exmimo_pci[card].dac_head[i+carrier];
-
-      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,j;
-
-  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];
-        
-        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/RTAI/USER/enb2tx_850rflo.lime b/targets/RTAI/USER/enb2tx_850rflo.lime
deleted file mode 100644
index 778d07a9b5e20aad3ff3532c3ed9d8a7822644de..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/enb2tx_850rflo.lime
+++ /dev/null
@@ -1 +0,0 @@
-8254992   8254992   8257340   8257340
\ No newline at end of file
diff --git a/targets/RTAI/USER/enb2txrflo.lime b/targets/RTAI/USER/enb2txrflo.lime
deleted file mode 100644
index 6907a298c79f9b6b59f19b1c280b55c7fa9f6ab2..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/enb2txrflo.lime
+++ /dev/null
@@ -1 +0,0 @@
-8254744   8255063   8257340   8257340
diff --git a/targets/RTAI/USER/enb2txrxg.lime b/targets/RTAI/USER/enb2txrxg.lime
deleted file mode 100644
index 7b7a2962d810ef2bc196adb15273dfbdd20f48fc..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/enb2txrxg.lime
+++ /dev/null
@@ -1,9 +0,0 @@
-# this file contains the calibration values to compute the RSSI
-# we can use three different gain stages (high, low, med) as well as a gain factor for fine tuning
-# the three lines in this file gives the total rx gain in dB for the three gain stages if the rx gain is set to 30dB
-# high gain
-138 138 138 138
-# med gain
-129 129 129 129
-# low gain
-120 120 120 120
diff --git a/targets/RTAI/USER/enb2txtxg.lime b/targets/RTAI/USER/enb2txtxg.lime
deleted file mode 100644
index acc8d23c620e4d89394daec88aec3912440ba078..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/enb2txtxg.lime
+++ /dev/null
@@ -1,5 +0,0 @@
-# For the TX, we need to set the tx gain values such that the transmitted power on all antennas is the same
-# tx gain (dB)
-25 19 25 25 
-# total tx power (dBm)
-17
diff --git a/targets/RTAI/USER/enb4txrflo.lime b/targets/RTAI/USER/enb4txrflo.lime
deleted file mode 100644
index 6e794ce437efb241c4bb73f5278d5abcf23563f3..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/enb4txrflo.lime
+++ /dev/null
@@ -1 +0,0 @@
-8255067 8254810 8257340 8257340
diff --git a/targets/RTAI/USER/enb4txrxg.lime b/targets/RTAI/USER/enb4txrxg.lime
deleted file mode 100644
index b296e67b71c16fd7059f0f2a1f84d44f7dc3b2b4..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/enb4txrxg.lime
+++ /dev/null
@@ -1,3 +0,0 @@
-133 133 133 133
-127 127 127 127
-120 120 120 120
diff --git a/targets/RTAI/USER/ex2_2rfdc.lime b/targets/RTAI/USER/ex2_2rfdc.lime
deleted file mode 100644
index ced3d41e444267977a1cd9aff7c373413f14619a..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/ex2_2rfdc.lime
+++ /dev/null
@@ -1 +0,0 @@
-34689   34756   36300   36999
diff --git a/targets/RTAI/USER/ex2_2rflo.lime b/targets/RTAI/USER/ex2_2rflo.lime
deleted file mode 100644
index 487b30edf62064668d1bcd7a8abc43a7f5091caf..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/ex2_2rflo.lime
+++ /dev/null
@@ -1 +0,0 @@
-8256036   8256804   8257340   8257340
diff --git a/targets/RTAI/USER/ex2_2rxg.lime b/targets/RTAI/USER/ex2_2rxg.lime
deleted file mode 100644
index 282cf4efc1cbb20a191aac3de539dd4eed13e06f..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/ex2_2rxg.lime
+++ /dev/null
@@ -1,10 +0,0 @@
-# this file contains the calibration values to compute the RSSI
-# we can use three different gain stages (high, low, med) as well as a gain factor for fine tuning
-# the three lines in this file gives the total rx gain in dB for the three gain stages if the rx gain is set to 30dB
-# this is for Express MIMO2 without any additional RF frontend
-# high gain
-124 124 124 124
-# med gain
-118 118 118 118 
-# low gain (byp)
-109 109 109 109
diff --git a/targets/RTAI/USER/ex2_2txg.lime b/targets/RTAI/USER/ex2_2txg.lime
deleted file mode 100644
index f92a3e8e4583301a7ece5b81baae276992395cfc..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/ex2_2txg.lime
+++ /dev/null
@@ -1,6 +0,0 @@
-# For the TX, we need to set the tx gain values such that the transmitted power on all antennas is the same
-# tx gain (dB)
-# 25 19 25 25 
-10 10 10 10
-# total tx power (dBm)
-17
diff --git a/targets/RTAI/USER/ex2_850rfdc.lime b/targets/RTAI/USER/ex2_850rfdc.lime
deleted file mode 100644
index fbcd8e8f49452f96b4f8a1182185bd0d26607a24..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/ex2_850rfdc.lime
+++ /dev/null
@@ -1,2 +0,0 @@
-33421   36226   34957   37000
-
diff --git a/targets/RTAI/USER/ex2_850rflo.lime b/targets/RTAI/USER/ex2_850rflo.lime
deleted file mode 100644
index 9739db22bb3fe02c58977f6aadfb5169f17e7549..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/ex2_850rflo.lime
+++ /dev/null
@@ -1 +0,0 @@
-8254212   8256991   8257340   8257340
diff --git a/targets/RTAI/USER/ex2_850rxg.lime b/targets/RTAI/USER/ex2_850rxg.lime
deleted file mode 100644
index 282cf4efc1cbb20a191aac3de539dd4eed13e06f..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/ex2_850rxg.lime
+++ /dev/null
@@ -1,10 +0,0 @@
-# this file contains the calibration values to compute the RSSI
-# we can use three different gain stages (high, low, med) as well as a gain factor for fine tuning
-# the three lines in this file gives the total rx gain in dB for the three gain stages if the rx gain is set to 30dB
-# this is for Express MIMO2 without any additional RF frontend
-# high gain
-124 124 124 124
-# med gain
-118 118 118 118 
-# low gain (byp)
-109 109 109 109
diff --git a/targets/RTAI/USER/ex2_850txg.lime b/targets/RTAI/USER/ex2_850txg.lime
deleted file mode 100644
index f77d7654630af02edde2f0cb096c331ab0422447..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/ex2_850txg.lime
+++ /dev/null
@@ -1,6 +0,0 @@
-# For the TX, we need to set the tx gain values such that the transmitted power on all antennas is the same
-# tx gain (dB)
-# 25 19 25 25 
-0 0 0 0
-# total tx power (dBm)
-17
diff --git a/targets/RTAI/USER/ieee80211p-softmodem.c b/targets/RTAI/USER/ieee80211p-softmodem.c
deleted file mode 100644
index cd995910498de323c859139de3ebb7d29caa0415..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/ieee80211p-softmodem.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) EURECOM / Thales Communications & Security
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program 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
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- * The full GNU General Public License is included in this distribution in the
- * file called LICENSE.
- *
- * Contact Information:
- * Thales Communications & Security <philippe.agostini@thalesgroup.com>
- *
- *****************************************************************************/
-
-/******************************************************************************
- *
- * Includes
- *
- *****************************************************************************/
-
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include "ieee80211p-netlinkapi.h"
-#include "phy/DOT11/defs.h"
-#include "PHY/TOOLS/defs.h"
-#include <stdint.h>
-#include <string.h>
-#include <pthread.h>
-
-#include <rtai_lxrt.h> 
-#include <rtai_sem.h>
-#include <rtai_msg.h>
-
-
-/******************************************************************************
- *
- * Definitions
- *
- *****************************************************************************/
-
-enum nl80211_band {
-  NL80211_BAND_2GHZ,
-  NL80211_BAND_5GHZ,
-  NL80211_BAND_5_9GHZ,
-  NL80211_BAND_0_8GHZ,
-};
-
-enum ieee80211_band {
-  IEEE80211_BAND_2GHZ = NL80211_BAND_2GHZ,
-  IEEE80211_BAND_5GHZ = NL80211_BAND_5GHZ,
-  IEEE80211_BAND_5_9GHZ = NL80211_BAND_5_9GHZ,
-  IEEE80211_BAND_0_8GHZ = NL80211_BAND_0_8GHZ,
-};
-
-struct ieee80211p_rx_status {
-  short	data_len;	//frame data length in bytes
-  char	rssi; 		//received power in dBm
-  char	rate; 		//reveived data rate in units of 100 kbps
-  enum ieee80211_band band;
-  char	flags; 		//RX flags
-}; /* struct ieee80211p_rx_status */
-
-extern uint32_t *txdata[2],*rxdata[2];
-//CHANNEL_STATUS_t dot11_state = IDLE;
-extern int oai_exit;
-
-extern unsigned int *DAQ_MBOX;
-
-extern int Ndbps[8];
-
-extern int32_t rxDATA_F_comp_aggreg2[48*1024];
-extern int32_t rxDATA_F_comp_aggreg3[48*1024];
-
-extern uint32_t rxgain[4];
-extern uint32_t rxg_max[4], rxg_med[4], rxg_byp[4];
-
-#define FRAME_LENGTH_SAMPLES 76800
-#define RX_THRES 60
-
-#define SLOT_DURATION_5MHz 105
-#define RX_THRES_dB 40
-
-int tx_sdu_active = 0;
-int tx_sdu_length = 0;
-char rxsdu[2000];
-
-void *tx_thread(void *arg) {
-
-  int fd=*((int*)arg);
-  RT_TASK *task;
-  int ret;
-  int i;
-  char dummy_data[10];
-
-  
-  if (fd > 0) {
-  
-    ret = netlink_send(fd,NLCMD_INIT,10,&dummy_data[0]);		
-
-    printf("tx_thread starting, fd %d\n",fd);
-
-    task = rt_task_init_schmod(nam2num("TASK1"), 0, 0, 0, SCHED_FIFO, 0xF);
-    mlockall(MCL_CURRENT | MCL_FUTURE);
-  //  rt_make_hard_real_time();
-  
-    while (!oai_exit) {
-      
-      if (tx_sdu_active == 1)
-	printf("tx_thread: waiting (MBOX %d)\n",((unsigned int*)DAQ_MBOX)[0]);
-      
-      while(((volatile int)tx_sdu_active) != 0) {
-	rt_sleep(nano2count(66666));
-      }
-      printf("tx_thread: calling netlink\n");
-      ret = netlink_recv(fd,rxsdu);
-      tx_sdu_active = 1;
-      tx_sdu_length = ret;
-
-      /*
-      if (ret > 0) {
-	
-	printf("received TX SDU: ");
-	for (i=0;i<ret;i++) {	
-	  printf("%02hhx ",rxsdu[i]);	
-	}
-	
-	printf("\n");
-	
-      }
-      */
-      
-    }
-  }
-  else {
-    printf("tx_thread: no netlink\n");
-  }
-
-  printf("tx_thread exiting\n");
-  
-  return(0);
-}
-
-
-/******************************************************************************
- *
- * Main
- *
- *****************************************************************************/
-
-/*
-int dot11_netlink_init() {
-
-  int fd;
-  int ret;
-  int i;
-  char txdata[10];
-  
-  fd = netlink_init();
-  
-  if (fd < 0) {
-    return -1;
-  }
-  
-  ret = netlink_send(fd,NLCMD_INIT,10,&txdata[0]);		
-
-
-
-  return(fd);
-}
-
-*/
-
diff --git a/targets/RTAI/USER/init_exmimo.sh b/targets/RTAI/USER/init_exmimo.sh
deleted file mode 100644
index 6dc4121f1adc7489e72d255ea4c09afa844d1e65..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/init_exmimo.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-sudo rmmod openair_rf
-sudo insmod $OPENAIR1_DIR/ARCH/CBMIMO1/DEVICE_DRIVER/openair_rf_softmodem.ko
-sudo mknod /dev/openair0 c 127 0
-sudo chmod a+rw /dev/openair0
-
-$OPENAIR1_DIR/USERSPACE_TOOLS/OAI_FW_INIT/updatefw -f $OPENAIR1_DIR/USERSPACE_TOOLS/OAI_FW_INIT/main -s 0x43fffff0
-sudo rmmod openair_rf
-sudo insmod $OPENAIR1_DIR/ARCH/CBMIMO1/DEVICE_DRIVER/openair_rf_softmodem.ko
-
-sudo rmmod nasmesh
-sudo insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko
-
diff --git a/targets/RTAI/USER/init_exmimo2.sh b/targets/RTAI/USER/init_exmimo2.sh
deleted file mode 100644
index e3f6528e5bcd27974a26ce17b55df3f710059cec..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/init_exmimo2.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/bin/bash
-
-PCI=`lspci -m | grep Xilinx`
-if [ -z "$PCI" ]; then
- echo "No card found. Stopping!"
- return
-fi
-
-## This part corrects the wrong configuration of the endpoint done by the bios in some machines
-echo "$PCI" | while read config_reg; do
-SLOT_NUMBER=`echo $config_reg | awk -F\" '{print $1}'`
-sudo setpci -s $SLOT_NUMBER 60.b=10
-done
-
-sudo rmmod openair_rf
-sudo insmod $OPENAIR_TARGETS/ARCH/EXMIMO/DRIVER/eurecom/openair_rf.ko
-sleep 1
-
-if [ ! -e /dev/openair0 ]; then 
- sudo mknod /dev/openair0 c 127 0
- sudo chmod a+rw /dev/openair0
-fi
-
-DEVICE=`echo $PCI | awk -F\" '{print $(NF-1)}' | awk '{print $2}'`
-if [ $DEVICE == '2208' ]; then
- echo "Using firmware version 8"
- $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw -s 0x43fffff0 -b -f $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2
-else 
- if [ $DEVICE == '2209' ]; then
-  echo "Using firmware version 9"
-  #$OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw -s 0x43fffff0 -b -f $OPENAIR0_DIR/express-mimo/software/sdr/exmimo2/sdr_expressmimo2
-  $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw -s 0x43fffff0 -b -f $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v9
- else
-  if [ $DEVICE == '220a' ]; then
-   echo "Using firware version 10"
-   $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw -s 0x43fffff0 -b -f $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v10
-  else
-   echo 'No corresponding firmware found'
-   return
-  fi
- fi
-fi
-
-sudo rmmod nasmesh
-sudo insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko
-
-if [ "$1" = "eNB" ]; then 
-     echo "bring up oai0 interface for enb"
-     sudo ifconfig oai0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255
-     $OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s 10.0.1.1 -t 10.0.1.9 -r 1
-else
-    if [ "$1" = "UE" ]; then 
-	echo "bring up oai0 interface for UE"
-	sudo ifconfig oai0 10.0.1.9 netmask 255.255.255.0 broadcast 10.0.1.255
-	$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s 10.0.1.9 -t 10.0.1.1 -r 1
-    fi
-fi  
diff --git a/targets/RTAI/USER/lte-enb.c b/targets/RTAI/USER/lte-enb.c
deleted file mode 100644
index 91421e8ce93bae020194e204cfe0322a292e11f8..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/lte-enb.c
+++ /dev/null
@@ -1,1216 +0,0 @@
-/*******************************************************************************
-
-  Eurecom OpenAirInterface
-  Copyright(c) 1999 - 2011 Eurecom
-
-  This program is free software; you can redistribute it and/or modify it
-  under the terms and conditions of the GNU General Public License,
-  version 2, as published by the Free Software Foundation.
-
-  This program is distributed in the hope 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
-  this program; if not, write to the Free Software Foundation, Inc.,
-  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
-
-  The full GNU General Public License is included in this distribution in
-  the file called "COPYING".
-
-  Contact Information
-  Openair Admin: openair_admin@eurecom.fr
-  Openair Tech : openair_tech@eurecom.fr
-  Forums       : http://forums.eurecom.fsr/openairinterface
-  Address      : Eurecom, 2229, route des cr锚tes, 06560 Valbonne Sophia Antipolis, 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/RTAI/USER/lte-softmodem-usrp.c b/targets/RTAI/USER/lte-softmodem-usrp.c
deleted file mode 100644
index f1159c421e70d191aadc75922f6c4ce44ac5a41d..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/lte-softmodem-usrp.c
+++ /dev/null
@@ -1,1354 +0,0 @@
-/*******************************************************************************
-
-  Eurecom OpenAirInterface
-  Copyright(c) 1999 - 2011 Eurecom
-
-  This program is free software; you can redistribute it and/or modify it
-  under the terms and conditions of the GNU General Public License,
-  version 2, as published by the Free Software Foundation.
-
-  This program is distributed in the hope 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
-  this program; if not, write to the Free Software Foundation, Inc.,
-  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
-
-  The full GNU General Public License is included in this distribution in
-  the file called "COPYING".
-
-  Contact Information
-  Openair Admin: openair_admin@eurecom.fr
-  Openair Tech : openair_tech@eurecom.fr
-Forums       : http://forums.eurecom.fsr/openairinterface
-Address      : Eurecom, 2229, route des cr锚tes, 06560 Valbonne Sophia Antipolis, 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;
-			    }*/
-		}
-	}
-}
diff --git a/targets/RTAI/USER/lte-softmodem.c b/targets/RTAI/USER/lte-softmodem.c
deleted file mode 100644
index f5f2ab0e658fa3e3191b72d7e49555a3bf5bc98a..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/lte-softmodem.c
+++ /dev/null
@@ -1,2166 +0,0 @@
-/*******************************************************************************
-
-  Eurecom OpenAirInterface
-  Copyright(c) 1999 - 2011 Eurecom
-
-  This program is free software; you can redistribute it and/or modify it
-  under the terms and conditions of the GNU General Public License,
-  version 2, as published by the Free Software Foundation.
-
-  This program is distributed in the hope 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
-  this program; if not, write to the Free Software Foundation, Inc.,
-  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
-
-  The full GNU General Public License is included in this distribution in
-  the file called "COPYING".
-
-  Contact Information
-  Openair Admin: openair_admin@eurecom.fr
-  Openair Tech : openair_tech@eurecom.fr
-  Forums       : http://forums.eurecom.fsr/openairinterface
-  Address      : Eurecom, 2229, route des cr锚tes, 06560 Valbonne Sophia Antipolis, 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/defs.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 "otg_tx.h"
-#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 "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"
-#endif
-
-#define FRAME_PERIOD    100000000ULL
-#define DAQ_PERIOD      66667ULL
-
-#define MY_RF_MODE      (RXEN + TXEN + TXLPFNORM + TXLPFEN + TXLPF25 + RXLPFNORM + RXLPFEN + RXLPF25 + LNA1ON +LNAMax + RFBBNORM + DMAMODE_RX + DMAMODE_TX)
-#define RF_MODE_BASE    (TXLPFNORM + TXLPFEN + TXLPF25 + RXLPFNORM + RXLPFEN + RXLPF25 + LNA1ON +LNAMax + RFBBNORM)
-
-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 int16_t* sync_corr_ue0;
-extern int16_t prach_ifft[4][1024*2];
-
-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);
-
-#ifdef XFORMS
-// 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
-
-#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
-
-#ifdef XFORMS
-static pthread_t                thread2; //xforms
-#endif
-#ifdef EMOS
-static pthread_t                thread3; //emos
-#endif
-
-/*
-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;
-static exmimo_config_t         *p_exmimo_config;
-static exmimo_id_t             *p_exmimo_id;
-static volatile unsigned int   *DAQ_MBOX;
-
-#if defined(ENABLE_ITTI)
-static volatile int             start_eNB = 0;
-static volatile int             start_UE = 0;
-#endif
-volatile int                    oai_exit = 0;
-
-//static int                      time_offset[4] = {-138,-138,-138,-138};
-//static int                      time_offset[4] = {-145,-145,-145,-145};
-static int                      time_offset[4] = {0,0,0,0};
-
-static int                      fs4_test=0;
-static char                     UE_flag=0;
-static uint8_t                       eNB_id=0,UE_id=0;
-
-uint32_t                             carrier_freq[4] =           {1907600000,1907600000,1907600000,1907600000}; /* For UE! */
-static uint32_t          downlink_frequency[4] =     {1907600000,1907600000,1907600000,1907600000};
-static int32_t                      uplink_frequency_offset[4]= {-120000000,-120000000,-120000000,-120000000};
-static char                    *conf_config_file_name = NULL;
-
-static char                    *itti_dump_file = NULL;
-
-static char                     rxg_fname[100];
-static char                     txg_fname[100];
-static char                     rflo_fname[100];
-static char                     rfdc_fname[100];
-static FILE                    *rxg_fd=NULL;
-static FILE                    *txg_fd=NULL;
-static FILE                    *rflo_fd=NULL;
-static FILE                    *rfdc_fd=NULL;
-static unsigned int             rxg_max[4] =    {133,133,133,133};
-static unsigned int             rxg_med[4] =    {127,127,127,127};
-static unsigned int             rxg_byp[4] =    {120,120,120,120};
-static int                      tx_max_power =  0;
-
-/*
-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};
-*/
-static uint32_t                      rf_mode[4] =        {MY_RF_MODE,0,0,0};
-static uint32_t                      rf_local[4] =       {8255000,8255000,8255000,8255000}; // UE zepto
-  //{8254617, 8254617, 8254617, 8254617}; //eNB khalifa
-  //{8255067,8254810,8257340,8257340}; // eNB PETRONAS
-
-static uint32_t                      rf_vcocal[4] =      {910,910,910,910};
-static uint32_t                      rf_vcocal_850[4] =  {2015, 2015, 2015, 2015};
-static uint32_t                      rf_rxdc[4] =        {32896,32896,32896,32896};
-static uint32_t                      rxgain[4] =         {20,20,20,20};
-static uint32_t                      txgain[4] =         {20,20,20,20};
-
-static runmode_t                mode;
-static int                      rx_input_level_dBm;
-static int                      online_log_messages=0;
-#ifdef XFORMS
-extern int                      otg_enabled;
-static char                     do_forms=0;
-#else
-int                             otg_enabled;
-#endif
-int                             number_of_cards =   1;
-
-static 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
-//static 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
-
-static LTE_DL_FRAME_PARMS      *frame_parms;
-
-unsigned int build_rflocal(int txi, int txq, int rxi, int 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));
-}
-
-#if !defined(ENABLE_ITTI)
-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;
-  }
-}
-#endif
-
-void exit_fun(const char* s)
-{
-  if (s != NULL) {
-    printf("%s %s() Exiting: %s\n",__FILE__, __FUNCTION__, s);
-  }
-
-  oai_exit = 1;
-
-#if defined(ENABLE_ITTI)
-  itti_terminate_tasks (TASK_UNKNOWN);
-#endif
-
-  //rt_sleep_ns(FRAME_PERIOD);
-
-  //exit (-1);
-}
-
-#ifdef XFORMS
-static void *scope_thread(void *arg) {
-    char stats_buffer[16384];
-# ifdef ENABLE_XFORMS_WRITE_STATS
-    FILE *UE_stats, *eNB_stats;
-    int len = 0;
-# endif
-    struct sched_param sched_param;
-
-    sched_param.sched_priority = sched_get_priority_min(SCHED_FIFO)+1; 
-    sched_setscheduler(0, SCHED_FIFO,&sched_param);
-
-    printf("Scope thread has priority %d\n",sched_param.sched_priority);
-    
-    /*
-      if (UE_flag==1) 
-      UE_stats  = fopen("UE_stats.txt", "w");
-      else 
-      eNB_stats = fopen("eNB_stats.txt", "w");
-    */
-    
-    while (!oai_exit) {
-        if (UE_flag==1) {
-# ifdef ENABLE_XFORMS_WRITE_STATS
-            len =
-# endif
-                    dump_ue_stats (PHY_vars_UE_g[0], stats_buffer, 0, mode,rx_input_level_dBm);
-            fl_set_object_label(form_stats->stats_text, stats_buffer);
-# ifdef ENABLE_XFORMS_WRITE_STATS
-            rewind (UE_stats);
-            fwrite (stats_buffer, 1, len, UE_stats);
-# endif
-            phy_scope_UE(form_ue[UE_id], 
-                         PHY_vars_UE_g[UE_id],
-                         eNB_id,
-                         UE_id,7);
-            
-        } else {
-# ifdef ENABLE_XFORMS_WRITE_STATS
-            len =
-# endif
-                    dump_eNB_stats (PHY_vars_eNB_g[0], stats_buffer, 0);
-            fl_set_object_label(form_stats->stats_text, stats_buffer);
-# ifdef ENABLE_XFORMS_WRITE_STATS
-            rewind (eNB_stats);
-            fwrite (stats_buffer, 1, len, eNB_stats);
-# endif
-            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
-    }
-    
-# ifdef ENABLE_XFORMS_WRITE_STATS
-    fclose (UE_stats);
-    fclose (eNB_stats);
-# endif
-    
-    pthread_exit((void*)arg);
-}
-#endif
-
-int dummy_tx_buffer[3840*4] __attribute__((aligned(16)));
-
-#ifdef EMOS
-#define NO_ESTIMATES_DISK 100 //No. of estimates that are aquired before dumped to disk
-
-void *emos_thread (void *arg)
-{
-  char c;
-  char *fifo2file_buffer, *fifo2file_ptr;
-
-  int fifo, counter=0, bytes;
-
-  FILE  *dumpfile_id;
-  char  dumpfile_name[1024];
-  time_t starttime_tmp;
-  struct tm starttime;
-  
-  int channel_buffer_size;
-  
-  time_t timer;
-  struct tm *now;
-
-  struct gps_data_t *gps_data = NULL;
-  struct gps_fix_t dummy_gps_data;
-
-  struct sched_param sched_param;
-  
-  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);
-
-  memset(&dummy_gps_data,1,sizeof(struct gps_fix_t));
-  
-  gps_data = gps_open("127.0.0.1","2947");
-  if (gps_data == NULL) 
-    {
-      printf("[EMOS] Could not open GPS\n");
-      //exit(-1);
-    }
-#if GPSD_API_MAJOR_VERSION>=4
-  else if (gps_stream(gps_data, WATCH_ENABLE,NULL) != 0)
-#else
-  else if (gps_query(gps_data, "w+x") != 0)
-#endif
-    {
-      //sprintf(tmptxt,"Error sending command to GPS, gps_data = %x", gps_data);
-      printf("[EMOS] Error sending command to GPS\n");
-      //exit(-1);
-    }
-  else 
-    printf("[EMOS] Opened GPS, gps_data=%p\n");
-  
-  if (UE_flag==0)
-    channel_buffer_size = sizeof(fifo_dump_emos_eNB);
-  else
-    channel_buffer_size = sizeof(fifo_dump_emos_UE);
-
-  // allocate memory for NO_FRAMES_DISK channes estimations
-  fifo2file_buffer = malloc(NO_ESTIMATES_DISK*channel_buffer_size);
-  fifo2file_ptr = fifo2file_buffer;
-
-  if (fifo2file_buffer == NULL)
-    {
-      printf("[EMOS] Cound not allocate memory for fifo2file_buffer\n");
-      exit(EXIT_FAILURE);
-    }
-
-  if ((fifo = open(CHANSOUNDER_FIFO_DEV, O_RDONLY)) < 0)
-    {
-      fprintf(stderr, "[EMOS] Error opening the fifo\n");
-      exit(EXIT_FAILURE);
-    }
-
-
-  time(&starttime_tmp);
-  localtime_r(&starttime_tmp,&starttime);
-  snprintf(dumpfile_name,1024,"/tmp/%s_data_%d%02d%02d_%02d%02d%02d.EMOS",
-	   (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)
-    {
-      fprintf(stderr, "[EMOS] Error opening dumpfile %s\n",dumpfile_name);
-      exit(EXIT_FAILURE);
-    }
-
-
-  printf("[EMOS] starting dump, channel_buffer_size=%d ...\n",channel_buffer_size);
-  while (!oai_exit)
-    {
-      bytes = rtf_read_timed(fifo, fifo2file_ptr, channel_buffer_size,100);
-      if (bytes==0)
-	continue;
-
-      /*
-      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);
-      else
-	printf("UE: count %d, frame %d, read: %d bytes from the fifo\n",counter, ((fifo_dump_emos_UE*)fifo2file_ptr)->frame_rx,bytes);
-      */
-
-      fifo2file_ptr += channel_buffer_size;
-      counter ++;
-
-      if (counter == NO_ESTIMATES_DISK)
-        {
-          //reset stuff
-          fifo2file_ptr = fifo2file_buffer;
-          counter = 0;
-
-          //flush buffer to disk
-	  if (UE_flag==0)
-	    printf("[EMOS] eNB: count %d, frame %d, flushing buffer to disk\n",
-		   counter, ((fifo_dump_emos_eNB*)fifo2file_ptr)->frame_tx);
-	  else
-	    printf("[EMOS] UE: count %d, frame %d, flushing buffer to disk\n",
-		   counter, ((fifo_dump_emos_UE*)fifo2file_ptr)->frame_rx);
-
-
-          if (fwrite(fifo2file_buffer, sizeof(char), NO_ESTIMATES_DISK*channel_buffer_size, dumpfile_id) != NO_ESTIMATES_DISK*channel_buffer_size)
-            {
-              fprintf(stderr, "[EMOS] Error writing to dumpfile\n");
-              exit(EXIT_FAILURE);
-            }
-	  if (gps_data)
-	    {
-	      if (gps_poll(gps_data) != 0) {
-		printf("[EMOS] problem polling data from gps\n");
-	      }
-	      else {
-		printf("[EMOS] lat %g, lon %g\n",gps_data->fix.latitude,gps_data->fix.longitude);
-	      }
-	      if (fwrite(&(gps_data->fix), sizeof(char), sizeof(struct gps_fix_t), dumpfile_id) != sizeof(struct gps_fix_t))
-		{
-		  printf("[EMOS] Error writing to dumpfile, stopping recording\n");
-		  exit(EXIT_FAILURE);
-		}
-	    }
-	  else
-	    {
-	      printf("[EMOS] WARNING: No GPS data available, storing dummy packet\n");
-	      if (fwrite(&(dummy_gps_data), sizeof(char), sizeof(struct gps_fix_t), dumpfile_id) != sizeof(struct gps_fix_t))
-		{
-		  printf("[EMOS] Error writing to dumpfile, stopping recording\n");
-		  exit(EXIT_FAILURE);
-		}
-	    } 
-        }
-    }
-  
-  free(fifo2file_buffer);
-  fclose(dumpfile_id);
-  close(fifo);
-  
-  pthread_exit((void*) arg);
-
-}
-#endif
-
-#if defined(ENABLE_ITTI)
-static void wait_system_ready (char *message, volatile int *start_flag)
-{
-  /* Wait for eNB application initialization to be complete (eNB registration to MME) */
-  {
-    static char *indicator[] = {".    ", "..   ", "...  ", ".... ", ".....",
-                                " ....", "  ...", "   ..", "    .", "     "};
-    int i = 0;
-
-    while ((!oai_exit) && (*start_flag == 0)) {
-      LOG_N(EMU, message, indicator[i]);
-      i = (i + 1) % (sizeof(indicator) / sizeof(indicator[0]));
-      usleep(200000);
-    }
-    LOG_D(EMU,"\n");
-  }
-}
-#endif
-
-  #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 */
-            LOG_D(EMU, "L2L1 TASK received %s\n", ITTI_MSG_NAME(message_p));
-            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 ACTIVATE_MESSAGE:
-          start_UE = 1;
-          break;
-
-        case DEACTIVATE_MESSAGE:
-          start_UE = 0;
-          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;
-#endif
-  unsigned char slot=0,last_slot, next_slot;
-  int hw_slot,frame=0;
-  unsigned int aa,slot_offset, slot_offset_F;
-  int diff;
-  int delay_cnt;
-  RTIME time_in, time_diff;
-  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) */
-  wait_system_ready ("Waiting for eNB application to be ready %s\r", &start_eNB);
-#endif
-
-#ifdef RTAI
-    task = rt_task_init_schmod(nam2num("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF);
-#endif
-
-  if (!oai_exit) {
-#ifdef RTAI
-    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;
-
-    while (!oai_exit)
-      {
-        hw_slot = (((((volatile unsigned int *)DAQ_MBOX)[0]+1)%150)<<1)/15;
-        //LOG_D(HW,"eNB frame %d, time %llu: slot %d, hw_slot %d (mbox %d)\n",frame,rt_get_time_ns(),slot,hw_slot,((unsigned int *)DAQ_MBOX)[0]);
-        //this is the mbox counter where we should be
-        //mbox_target = ((((slot+1)%20)*15+1)>>1)%150;
-        mbox_target = mbox_bounds[slot];
-        //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 (((slot%2==0) && (diff < (-14))) || ((slot%2==1) && (diff < (-7)))) {
-          // 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) {
-            exit_fun("[HW][eNB] missed slot");
-          }
-          if (slot==20){
-            slot=0;
-            frame++;
-          }
-          continue;
-        }
-        if (diff>8)
-            LOG_D(HW,"eNB Frame %d, time %llu: skipped slot, waiting for hw to catch up (slot %d, hw_slot %d, mbox_current %d, mbox_target %d, diff %d)\n",frame, rt_get_time_ns(), slot, hw_slot, mbox_current, mbox_target, diff);
-
-        delay_cnt = 0;
-        while ((diff>0) && (!oai_exit))
-          {
-            time_in = rt_get_time_ns();
-            //LOG_D(HW,"eNB Frame %d delaycnt %d : hw_slot %d (%d), slot %d, (slot+1)*15=%d, diff %d, time %llu\n",frame,delay_cnt,hw_slot,((unsigned int *)DAQ_MBOX)[0],slot,(((slot+1)*15)>>1),diff,time_in);
-            //LOG_D(HW,"eNB Frame %d, time %llu: sleeping for %llu (slot %d, hw_slot %d, diff %d, mbox %d, delay_cnt %d)\n", frame, time_in, diff*DAQ_PERIOD,slot,hw_slot,diff,((volatile unsigned int *)DAQ_MBOX)[0],delay_cnt);
-            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);
-            hw_slot = (((((volatile unsigned int *)DAQ_MBOX)[0]+1)%150)<<1)/15;
-            //LOG_D(HW,"eNB Frame %d : hw_slot %d, time %llu\n",frame,hw_slot,rt_get_time_ns());
-            delay_cnt++;
-            if (delay_cnt == 10)
-              {
-                LOG_D(HW,"eNB Frame %d: HW stopped ... \n",frame);
-                exit_fun("[HW][eNB] HW stopped");
-              }
-            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;
-          }
-
-        last_slot = (slot)%LTE_SLOTS_PER_FRAME;
-        if (last_slot <0)
-          last_slot+=20;
-        next_slot = (slot+3)%LTE_SLOTS_PER_FRAME;
-
-        //PHY_vars_eNB_g[0]->frame = frame;
-        if (frame>5)
-          {
-            /*
-            if (frame%100==0)
-              LOG_D(HW,"frame %d (%d), slot %d, hw_slot %d, next_slot %d (before): DAQ_MBOX %d\n",frame, PHY_vars_eNB_g[0]->frame, slot, hw_slot,next_slot,DAQ_MBOX[0]);
-            */
-
-            //if (PHY_vars_eNB_g[0]->frame>5) {
-              timing_info.time_last = timing_info.time_now;
-              timing_info.time_now = rt_get_time_ns();
-
-              if (timing_info.n_samples>0) {
-                time_diff = timing_info.time_now - timing_info.time_last;
-                if (time_diff < timing_info.time_min)
-                  timing_info.time_min = time_diff;
-                if (time_diff > timing_info.time_max)
-                  timing_info.time_max = time_diff;
-                timing_info.time_avg += time_diff;
-              }
-
-              timing_info.n_samples++;
-              /*
-              if ((timing_info.n_samples%2000)==0) {
-                LOG_D(HW,"frame %d (%d), slot %d, hw_slot %d: diff=%llu, min=%llu, max=%llu, avg=%llu (n_samples %d)\n",
-                      frame, PHY_vars_eNB_g[0]->frame, slot, hw_slot,time_diff,
-                      timing_info.time_min,timing_info.time_max,timing_info.time_avg/timing_info.n_samples,timing_info.n_samples);
-                timing_info.n_samples = 0;
-                timing_info.time_avg = 0;
-              }
-              */
-              //}
-
-            if (fs4_test==0)
-              {
-                phy_procedures_eNB_lte (last_slot, next_slot, PHY_vars_eNB_g[0], 0, no_relay,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);
-                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)))
-                  {
-                    //	  LOG_D(HW,"Frame %d: Generating slot %d\n",frame,next_slot);
-
-                    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
-                      }
-                  }
-              }
-
-#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");
-        */
-
-        slot++;
-        if (slot==20) {
-          slot=0;
-          frame++;
-        }
-#if defined(ENABLE_ITTI)
-        itti_update_lte_time(frame, slot);
-#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_task_delete(task);
-#endif
-  LOG_D(HW,"Task deleted. returning\n");
-  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)
-{
-#ifdef RTAI
-  RT_TASK *task;
-#endif
-  // RTIME in, out, diff;
-  int slot=0,frame=0,hw_slot,last_slot, next_slot;
-  // unsigned int aa;
-  static int is_synchronized = 0;
-  int delay_cnt;
-  RTIME time_in;
-  int hw_slot_offset=0,rx_offset_mbox=0,mbox_target=0,mbox_current=0;
-  int diff2;
-  int i, ret;
-
-#if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME)
-  /* Wait for NAS UE to start cell selection */
-  wait_system_ready ("Waiting for UE to be activated by UserProcess %s\r", &start_UE);
-#endif
-
-#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);
-#endif
-
-#ifdef HARD_RT
-  rt_make_hard_real_time();
-#endif
-
-  mlockall(MCL_CURRENT | MCL_FUTURE);
-
-  openair_daq_vars.freq_offset = 0; //-7500;
-  /*
-  if (mode == rx_calib_ue) {
-    openair_daq_vars.freq_offset = -7500;
-    for (i=0; i<4; i++) {
-        p_exmimo_config->rf.rf_freq_rx[i] = p_exmimo_config->rf.rf_freq_rx[i]+openair_daq_vars.freq_offset;
-        p_exmimo_config->rf.rf_freq_tx[i] = p_exmimo_config->rf.rf_freq_rx[i]+openair_daq_vars.freq_offset;
-    }
-    openair0_dump_config(card);
-  }
-  */
-  while (!oai_exit)
-    {
-      hw_slot = (((((volatile unsigned int *)DAQ_MBOX)[0]+1)%150)<<1)/15; //the slot the hw is about to store
-      
-      if (is_synchronized) {
-        //this is the mbox counter that indicates the start of the frame
-        rx_offset_mbox = (PHY_vars_UE_g[0]->rx_offset * 150) / (10*PHY_vars_UE_g[0]->lte_frame_parms.samples_per_tti);
-        //this is the mbox counter where we should be
-        mbox_target = (((((slot+1)%20)*15+1)>>1) + rx_offset_mbox + 1)%150;
-        // round up to the next multiple of two (mbox counter from express MIMO gives only even numbers)
-        mbox_target = ((mbox_target+1)-((mbox_target-1)%2))%150;
-        //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>=120) && (mbox_target<30)) //handle the frame wrap-arround
-          diff2 = 150-mbox_current+mbox_target;
-        else if ((mbox_current<30) && (mbox_target>=120))
-          diff2 = -150+mbox_target-mbox_current;
-        else
-          diff2 = mbox_target - mbox_current;
-
-        if (diff2 <(-7)) {
-          LOG_D(HW,"UE Frame %d: missed slot, proceeding with next one (slot %d, hw_slot %d, diff %d)\n",frame, slot, hw_slot, diff2);
-          if (frame>0)
-            exit_fun("[HW][UE] missed slot");
-          slot++;
-          if (slot==20) {
-            slot=0;
-            frame++;
-          }
-          continue;
-        }
-        if (diff2>8)
-          LOG_D(HW,"UE Frame %d: skipped slot, waiting for hw to catch up (slot %d, hw_slot %d, mbox_current %d, mbox_target %d, diff %d)\n",frame, slot, hw_slot, mbox_current, mbox_target, diff2);
-
-        /*
-          if (frame%100==0)
-          LOG_D(HW,"frame %d (%d), slot %d, hw_slot %d, rx_offset_mbox %d, mbox_target %d, mbox_current %d, diff %d\n",frame, PHY_vars_UE_g[0]->frame, slot,hw_slot,rx_offset_mbox,mbox_target,mbox_current,diff2);
-        */
-        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, diff2);
-
-        delay_cnt = 0;
-        while ((diff2>0) && (!oai_exit) && (is_synchronized) )
-          {
-            time_in = rt_get_time_ns();
-            //LOG_D(HW,"eNB Frame %d delaycnt %d : hw_slot %d (%d), slot %d (%d), diff %d, time %llu\n",frame,delay_cnt,hw_slot,((volatile unsigned int *)DAQ_MBOX)[0],slot,mbox_target,diff2,time_in);
-            vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_RT_SLEEP,1);
-            ret = rt_sleep_ns(diff2*DAQ_PERIOD);
-            vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_RT_SLEEP,0);
-            if (ret)
-              LOG_D(HW,"eNB Frame %d, time %llu: rt_sleep_ns returned %d\n",frame, time_in);
-
-            hw_slot = (((((volatile unsigned int *)DAQ_MBOX)[0]+1)%150)<<1)/15;
-            //LOG_D(HW,"eNB Frame %d : hw_slot %d, time %llu\n",frame,hw_slot,rt_get_time_ns());
-            delay_cnt++;
-            if (delay_cnt == 30)
-              {
-                LOG_D(HW,"UE frame %d: HW stopped ... \n",frame);
-                exit_fun("[HW][UE] HW stopped");
-              }
-            mbox_current = ((volatile unsigned int *)DAQ_MBOX)[0];
-            if ((mbox_current>=135) && (mbox_target<15)) //handle the frame wrap-arround
-              diff2 = 150-mbox_current+mbox_target;
-            else if ((mbox_current<15) && (mbox_target>=135))
-              diff2 = -150+mbox_target-mbox_current;
-            else
-              diff2 = mbox_target - mbox_current;
-
-            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, diff2);
-          }
-	
-      }
-
-      last_slot = (slot)%LTE_SLOTS_PER_FRAME;
-      if (last_slot <0)
-        last_slot+=LTE_SLOTS_PER_FRAME;
-      next_slot = (slot+3)%LTE_SLOTS_PER_FRAME;
-
-      if (is_synchronized)
-        {
-
-	  /*
-          if (frame%100==0)
-            LOG_D(HW,"frame %d (%d), slot %d, hw_slot %d, last_slot %d (before): DAQ_MBOX %d\n",frame, PHY_vars_UE_g[0]->frame, slot,hw_slot,last_slot,DAQ_MBOX[0]);
-	  */
-
-          // in = rt_get_time_ns();
-          phy_procedures_UE_lte (last_slot, next_slot, PHY_vars_UE_g[0], 0, 0,mode,0,NULL);
-          // out = rt_get_time_ns();
-          // diff = out-in;
-
-	  /*
-          if (frame % 100 == 0)
-            LOG_D(HW,"hw_slot %d (after): DAQ_MBOX %d\n",hw_slot,DAQ_MBOX[0]);
-	  
-            LOG_D(HW,"Frame %d: last_slot %d, phy_procedures_lte_ue time_in %llu, time_out %llu, diff %llu\n",
-                      frame, last_slot,in,out,diff);
-	  */
-
-        }
-      else   // we are not yet synchronized
-        {
-          hw_slot_offset = 0;
-
-          slot = 0;
-          openair0_get_frame(card);
-          //          LOG_D(HW,"after get_frame\n");
-          //          rt_sleep_ns(FRAME_PERIOD);
-          //          LOG_D(HW,"after sleep\n");
-
-          if (initial_sync(PHY_vars_UE_g[0],mode)==0) {
-              /*
-              lte_adjust_synch(&PHY_vars_UE_g[0]->lte_frame_parms,
-                   PHY_vars_UE_g[0],
-                   0,
-                   1,
-                   16384);
-              */
-              //for better visualization afterwards
-              /*
-              for (aa=0; aa<PHY_vars_UE_g[0]->lte_frame_parms.nb_antennas_rx; aa++)
-              memset(PHY_vars_UE_g[0]->lte_ue_common_vars.rxdata[aa],0,
-                 PHY_vars_UE_g[0]->lte_frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*sizeof(int));
-              */
-            if (mode == rx_calib_ue) {
-                exit_fun("[HW][UE] UE in RX calibration mode");
-              }
-              else {
-                is_synchronized = 1;
-                //start the DMA transfers
-                //LOG_D(HW,"Before openair0_start_rt_acquisition \n");
-                openair0_start_rt_acquisition(card);
-
-                hw_slot_offset = (PHY_vars_UE_g[0]->rx_offset<<1) / PHY_vars_UE_g[0]->lte_frame_parms.samples_per_tti;
-                LOG_D(HW,"Got synch: hw_slot_offset %d\n",hw_slot_offset);
-              }
-          }
-          else {
-            if (openair_daq_vars.freq_offset >= 0) {
-              openair_daq_vars.freq_offset += 100;
-              openair_daq_vars.freq_offset *= -1;
-            }
-            else {
-              openair_daq_vars.freq_offset *= -1;
-            }
-            if (abs(openair_daq_vars.freq_offset) > 7500) {
-              LOG_I(PHY,"[initial_sync] No cell synchronization found, abondoning\n");
-              mac_xface->macphy_exit("No cell synchronization found, abondoning");
-            }
-            else {
-              LOG_I(PHY,"[initial_sync] trying carrier off %d Hz\n",openair_daq_vars.freq_offset);
-              for (i=0; i<4; i++) {
-                if (p_exmimo_config->rf.rf_freq_rx[i])
-                  p_exmimo_config->rf.rf_freq_rx[i] = carrier_freq[i]+openair_daq_vars.freq_offset;
-                if (p_exmimo_config->rf.rf_freq_tx[i])
-                  p_exmimo_config->rf.rf_freq_tx[i] = carrier_freq[i]+openair_daq_vars.freq_offset;
-              }
-              openair0_dump_config(card);
-              rt_sleep_ns(FRAME_PERIOD);
-            }
-          }
-        }
-
-      /*
-      if ((slot%2000)<10)
-        LOG_D(HW,"fun0: doing very hard work\n");
-      */
-      slot++;
-      if (slot==20) {
-          slot=0;
-          frame++;
-      }
-#if defined(ENABLE_ITTI)
-      itti_update_lte_time(frame, slot);
-#endif
-    }
-  LOG_D(HW,"UE_thread: finished, ran %d times.\n",frame);
-
-#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;
-}
-
-static void get_options (int argc, char **argv)
-{
-  int                           c;
-  char                          line[1000];
-  int                           l;
-  const Enb_properties_array_t *enb_properties;
-
-  enum long_option_e {
-    LONG_OPTION_START = 0x100, /* Start after regular single char options */
-
-    LONG_OPTION_ULSCH_MAX_CONSECUTIVE_ERRORS,
-    LONG_OPTION_CALIB_UE_RX,
-    LONG_OPTION_CALIB_UE_RX_MED,
-    LONG_OPTION_CALIB_UE_RX_BYP,
-
-    LONG_OPTION_DEBUG_UE_PRACH,
-
-    LONG_OPTION_NO_L2_CONNECT,
-  };
-
-  static const struct option long_options[] = {
-      {"ulsch-max-errors",required_argument,  NULL, LONG_OPTION_ULSCH_MAX_CONSECUTIVE_ERRORS},
-      {"calib-ue-rx",     required_argument,  NULL, LONG_OPTION_CALIB_UE_RX},
-      {"calib-ue-rx-med", required_argument,  NULL, LONG_OPTION_CALIB_UE_RX_MED},
-      {"calib-ue-rx-byp", required_argument,  NULL, LONG_OPTION_CALIB_UE_RX_BYP},
-      {"debug-ue-prach",  no_argument,        NULL, LONG_OPTION_DEBUG_UE_PRACH},
-      {"no-L2-connect",   no_argument,        NULL, LONG_OPTION_NO_L2_CONNECT},
-          {NULL, 0, NULL, 0}};
-
-  while ((c = getopt_long (argc, argv, "C:dF:K:qO:ST:UVR",long_options,NULL)) != -1)
-    {
-      switch (c)
-        {
-        case LONG_OPTION_ULSCH_MAX_CONSECUTIVE_ERRORS:
-          ULSCH_max_consecutive_errors = atoi(optarg);
-          printf("Set ULSCH_max_consecutive_errors = %d\n",ULSCH_max_consecutive_errors);
-          break;
-
-        case LONG_OPTION_CALIB_UE_RX:
-          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 LONG_OPTION_CALIB_UE_RX_MED:
-          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 LONG_OPTION_CALIB_UE_RX_BYP:
-          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 LONG_OPTION_DEBUG_UE_PRACH:
-          mode = debug_prach;
-          break;
-
-        case LONG_OPTION_NO_L2_CONNECT:
-          mode = no_L2_connect;
-          break;
-
-        case 'C':
-          downlink_frequency[0] = atof(optarg); // Use float to avoid issue with frequency over 2^31.
-          downlink_frequency[1] = downlink_frequency[0];
-          downlink_frequency[2] = downlink_frequency[0];
-          downlink_frequency[3] = downlink_frequency[0];
-          carrier_freq[0] = downlink_frequency[0];
-          carrier_freq[1] = downlink_frequency[1];
-          carrier_freq[2] = downlink_frequency[2];
-          carrier_freq[3] = downlink_frequency[3];
-          printf("Downlink frequency set to %u\n", downlink_frequency[0]);
-          break;
-
-        case 'd':
-#ifdef XFORMS
-          do_forms=1;
-#endif
-          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);
-            if (fscanf(rflo_fd,"%d %d %d %d",&rf_local[0],&rf_local[1],&rf_local[2],&rf_local[3]) < 4)
-                  LOG_E(EMU, "Error parsing \"%s\"", rflo_fname);
-          }
-          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);
-            if (fscanf(rfdc_fd,"%d %d %d %d",&rf_rxdc[0],&rf_rxdc[1],&rf_rxdc[2],&rf_rxdc[3]) < 4)
-              LOG_E(EMU, "Error parsing \"%s\"", rfdc_fname);
-          }
-          else
-            printf("%s not found, running with defaults\n",rfdc_fname);
-          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 'S':
-          fs4_test=1;
-          break;
-
-        case 'T':
-#ifdef ENABLE_TCXO
-          tcxo=atoi(optarg);
-#endif
-          break;
-
-        case 'U':
-          UE_flag = 1;
-          break;
-
-        case 'V':
-          ouput_vcd = 1;
-          break;
-	case  'q': 
-	  opp_enabled = 1;
-	  break;
-	case  'R' :
-	  online_log_messages =1;
-	  break;
-        default:
-          break;
-        }
-    }
-
-  if ((UE_flag == 0) && (conf_config_file_name != NULL)) {
-    int i;
-
-    NB_eNB_INST = 1;
-
-    /* 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_parms->frame_type =       enb_properties->properties[0]->frame_type;
-    frame_parms->tdd_config =       enb_properties->properties[0]->tdd_config;
-    frame_parms->tdd_config_S =     enb_properties->properties[0]->tdd_config_s;
-    for (i = 0 ; i < (sizeof(downlink_frequency) / sizeof (downlink_frequency[0])); i++) {
-      downlink_frequency[i] =       enb_properties->properties[0]->downlink_frequency;
-      printf("Downlink frequency set to %u\n", downlink_frequency[i]);
-      uplink_frequency_offset[i] =  enb_properties->properties[0]->uplink_frequency_offset;
-    }
-  }
-}
-
-int main(int argc, char **argv) {
-#ifdef RTAI
-  // RT_TASK *task;
-#endif
-  int i,j,aa;
-#if defined (XFORMS) || defined (EMOS) || (! defined (RTAI))
-  void *status;
-#endif
-
-  uint16_t Nid_cell = 0;
-  uint8_t  cooperation_flag=0, transmission_mode=1, abstraction_flag=0;
-#ifndef OPENAIR2
-  uint8_t beta_ACK=0,beta_RI=0,beta_CQI=2;
-#endif
-
-#ifdef ENABLE_TCXO
-  unsigned int tcxo = 114;
-#endif
-
-  int amp;
-  // uint8_t prach_fmt;
-  // int N_ZC;
-
-  int ret, ant;
-  int ant_offset=0;
-
-#if defined (EMOS) || (! defined (RTAI))
-  int error_code;
-#endif
-
-  mode = normal_txrx;
-
-  frame_parms = (LTE_DL_FRAME_PARMS*) malloc(sizeof(LTE_DL_FRAME_PARMS));
-  /* Set some default values that may be overwritten while reading options */
-  frame_parms->frame_type         = 1; /* TDD */
-  frame_parms->tdd_config         = 3;
-  frame_parms->tdd_config_S       = 0;
-
-  get_options (argc, argv); //Command-line options
-
-  //randominit (0);
-  set_taus_seed (0);
-
-  // initialize the log (see log.h for details)
-  logInit();
-
-  set_glog(LOG_WARNING, LOG_MED);
-  if (UE_flag==1)
-  {
-    printf("configuring for UE\n");
-
-    set_comp_log(HW,      LOG_DEBUG,  LOG_HIGH, 1);
-#ifdef OPENAIR2
-    set_comp_log(PHY,     LOG_INFO,   LOG_HIGH, 1);
-#else
-    set_comp_log(PHY,     LOG_INFO,   LOG_HIGH, 1);
-#endif
-    set_comp_log(MAC,     LOG_INFO,   LOG_HIGH, 1);
-    set_comp_log(RLC,     LOG_INFO,   LOG_HIGH, 1);
-    set_comp_log(PDCP,    LOG_INFO,   LOG_HIGH, 1);
-    set_comp_log(OTG,     LOG_INFO,   LOG_HIGH, 1);
-    set_comp_log(RRC,     LOG_INFO,   LOG_HIGH, 1);
-#if defined(ENABLE_ITTI)
-    set_comp_log(EMU,     LOG_INFO,   LOG_MED, 1);
-# if defined(ENABLE_USE_MME)
-    set_comp_log(NAS,     LOG_INFO,   LOG_HIGH, 1);
-# endif
-#endif
-  }
-  else
-  {
-    printf("configuring for eNB\n");
-
-    set_comp_log(HW,      LOG_DEBUG,  LOG_HIGH, 1);
-#ifdef OPENAIR2
-    set_comp_log(PHY,     LOG_INFO,   LOG_HIGH, 1);
-#else
-    set_comp_log(PHY,     LOG_INFO,   LOG_HIGH, 1);
-#endif
-    set_comp_log(MAC,     LOG_INFO,   LOG_HIGH, 1);
-    set_comp_log(RLC,     LOG_TRACE,   LOG_HIGH, 1);
-    set_comp_log(PDCP,    LOG_DEBUG,   LOG_HIGH, 1);
-    set_comp_log(OTG,     LOG_INFO,   LOG_HIGH, 1);
-    set_comp_log(RRC,     LOG_DEBUG,   LOG_HIGH, 1);
-#if defined(ENABLE_ITTI)
-    set_comp_log(EMU,     LOG_INFO,   LOG_MED, 1);
-# if defined(ENABLE_USE_MME)
-    set_comp_log(UDP_,    LOG_DEBUG,   LOG_HIGH, 1);
-    set_comp_log(GTPU,    LOG_DEBUG,   LOG_HIGH, 1);
-    set_comp_log(S1AP,    LOG_DEBUG,   LOG_HIGH, 1);
-    set_comp_log(SCTP,    LOG_INFO,   LOG_HIGH, 1);
-# endif
-#if defined(ENABLE_SECURITY)
-    set_comp_log(OSA,    LOG_DEBUG,   LOG_HIGH, 1);
-#endif
-#endif
-    set_comp_log(ENB_APP, LOG_INFO, LOG_HIGH, 1);
-    if (online_log_messages == 1) { 
-      set_component_filelog(RRC);
-      set_component_filelog(PDCP);
-    }
-  }
-
-  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");
-  }
-
-#if defined(ENABLE_ITTI)
-  if (UE_flag == 1) {
-    log_set_instance_type (LOG_INSTANCE_UE);
-  }
-  else {
-    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 the parameters
-  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;
-  if (UE_flag==0)
-  {
-    switch (transmission_mode) {
-    case 1: 
-      frame_parms->nb_antennas_tx     = 1;
-      frame_parms->nb_antennas_rx     = 1;
-      break;
-    case 2:
-    case 5:
-    case 6:
-      frame_parms->nb_antennas_tx     = 2;
-      frame_parms->nb_antennas_rx     = 2;
-      break;
-    default:
-      printf("Unsupported transmission mode %d\n",transmission_mode);
-      exit(-1);
-    }
-  }
-  else
-  { //UE_flag==1
-    frame_parms->nb_antennas_tx     = 1;
-    frame_parms->nb_antennas_rx     = 1;
-  }
-  frame_parms->nb_antennas_tx_eNB = (transmission_mode == 1) ? 1 : 2; //initial value overwritten by initial sync later
-  frame_parms->mode1_flag         = (transmission_mode == 1) ? 1 : 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;
-  init_ul_hopping(frame_parms);
-
-  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)
-  {
-    PHY_vars_UE_g = malloc(sizeof(PHY_VARS_UE*));
-    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_ON;
-    openair_daq_vars.auto_freq_correction = 0;
-    openair_daq_vars.use_ia_receiver = 0;
-
-    // if AGC is off, the following values will be used
-    for (i=0;i<4;i++) 
-      rxgain[i] = 0;
-
-    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
-    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=16;
-    openair_daq_vars.ue_ul_nb_rb=6;
-    openair_daq_vars.target_ue_ul_mcs=6;
-
-    // if AGC is off, the following values will be used
-    for (i=0;i<4;i++) 
-      rxgain[i]=10;
-
-    // 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");
-    if (ret == -2)
-        printf("Error mapping bigshm");
-    if (ret == -3)
-        printf("Error mapping RX or TX buffer");
-    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);
-
-  // check if the software matches firmware
-  if (p_exmimo_id->board_swrev!=BOARD_SWREV_CNTL2) {
-    printf("Software revision %d and firmware revision %d do not match. Please update either the firmware or the software!\n",BOARD_SWREV_CNTL2,p_exmimo_id->board_swrev);
-    exit(-1);
-  }
-
-  if (p_exmimo_id->board_swrev>=9)
-    p_exmimo_config->framing.eNB_flag   = 0; 
-  else 
-    p_exmimo_config->framing.eNB_flag   = !UE_flag;
-
-  p_exmimo_config->framing.tdd_config = DUPLEXMODE_FDD + TXRXSWITCH_LSB;
-#if (BOARD_SWREV_CNTL2>=0x0A)
-  p_exmimo_config->framing.resampling_factor[ant] = 2;
-#else
-  for (ant=0; ant<4; ant++)
-    p_exmimo_config->framing.resampling_factor = 2;
-#endif
-
-  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
-    downlink_frequency[ant] = 0; //this turns off all other LIMEs
-    uplink_frequency_offset[ant] = 0;
-  }
-
-  /*
-  ant_offset = 0;
-  for (ant=0; ant<4; ant++) {
-    if (ant==ant_offset) {
-      //if (1) {
-      p_exmimo_config->rf.rf_mode[ant] = rf_mode_base;
-      p_exmimo_config->rf.rf_mode[ant] += (TXEN + DMAMODE_TX);
-      p_exmimo_config->rf.rf_mode[ant] += (RXEN + DMAMODE_RX);
-    }
-    else {
-      p_exmimo_config->rf.rf_mode[ant] = 0;
-      downlink_frequency[ant] = 0; //this turns off all other LIMEs
-    }
-  }
-  */
-
-  for (ant = 0; ant<4; ant++) { 
-    p_exmimo_config->rf.do_autocal[ant] = 1;
-    if (UE_flag==0) {
-      /* eNB */
-      if (frame_parms->frame_type == FDD) {
-        p_exmimo_config->rf.rf_freq_rx[ant] = downlink_frequency[ant] + uplink_frequency_offset[ant];
-      } else {
-        p_exmimo_config->rf.rf_freq_rx[ant] = downlink_frequency[ant];
-      }
-      p_exmimo_config->rf.rf_freq_tx[ant] = downlink_frequency[ant];
-    } else {
-      /* UE */
-      p_exmimo_config->rf.rf_freq_rx[ant] = carrier_freq[ant];
-      if (frame_parms->frame_type == FDD) {
-        p_exmimo_config->rf.rf_freq_tx[ant] = carrier_freq[ant] + uplink_frequency_offset[ant];
-      } else {
-        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 ((downlink_frequency[ant] >= 850000000) && (downlink_frequency[ant] <= 865000000)) {
-      p_exmimo_config->rf.rf_vcocal[ant]  = rf_vcocal_850[ant];
-      p_exmimo_config->rf.rffe_band_mode[ant] = DD_TDD;	    
-    }
-    else if ((downlink_frequency[ant] >= 1900000000) && (downlink_frequency[ant] <= 2000000000)) {
-      p_exmimo_config->rf.rf_vcocal[ant]  = rf_vcocal[ant];
-      p_exmimo_config->rf.rffe_band_mode[ant] = B19G_TDD;	    
-    }
-    else {
-      p_exmimo_config->rf.rf_vcocal[ant]  = rf_vcocal[ant];
-      p_exmimo_config->rf.rffe_band_mode[ant] = 0;	    
-    }
-
-    p_exmimo_config->rf.rffe_gain_txlow[ant] = 31;
-    p_exmimo_config->rf.rffe_gain_txhigh[ant] = 31;
-    p_exmimo_config->rf.rffe_gain_rxfinal[ant] = 52;
-    p_exmimo_config->rf.rffe_gain_rxlow[ant] = 31;
-  }
-
-  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 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;
-
-#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
-
-#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(UE_flag ? 1 : 0, UE_flag ? 0 : 1);
-//  }
-#endif
-
-#ifdef OPENAIR2
-  //init_pdcp_thread();
-#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 = 0;
-
-  // connect the TX/RX buffers
-  if (UE_flag==1)
-  {
-    setup_ue_buffers(PHY_vars_UE_g[0],frame_parms,ant_offset);
-    printf("Setting UE buffer to all-RX\n");
-    // Set LSBs for antenna switch (ExpressMIMO)
-    for (i=0; i<frame_parms->samples_per_tti*10; i++)
-      for (aa=0; aa<frame_parms->nb_antennas_tx; aa++)
-        PHY_vars_UE_g[0]->lte_ue_common_vars.txdata[aa][i] = 0x00010001;
-
-    //p_exmimo_config->framing.tdd_config = TXRXSWITCH_TESTRX;
-  }
-  else
-  {
-    setup_eNB_buffers(PHY_vars_eNB_g[0],frame_parms,ant_offset);
-    if (fs4_test==0)
-    {
-      printf("Setting eNB buffer to all-RX\n");
-      // Set LSBs for antenna switch (ExpressMIMO)
-      for (i=0; i<frame_parms->samples_per_tti*10; i++)
-        for (aa=0; aa<frame_parms->nb_antennas_tx; aa++)
-          PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][i] = 0x00010001;
-
-      // Set the last OFDM symbol of subframe 4 to TX to allow enough time for switch to settle
-      // (that's ok since the last symbol can be configured as SRS)
-      /*
-      for (i=frame_parms->samples_per_tti*5-0*(frame_parms->ofdm_symbol_size+frame_parms->nb_prefix_samples);
-           i<frame_parms->samples_per_tti*5; i++)
-        for (aa=0; aa<frame_parms->nb_antennas_tx; aa++)
-          PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][i] = 0x0;
-      */
-    }
-    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;
-        }
-    }
-  }
-
-  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;
-
-#ifdef EMOS
-  error_code = rtf_create(CHANSOUNDER_FIFO_MINOR,CHANSOUNDER_FIFO_SIZE);
-  if (error_code==0)
-    printf("[OPENAIR][SCHED][INIT] Created EMOS FIFO %d\n",CHANSOUNDER_FIFO_MINOR);
-  else if (error_code==ENODEV)
-    printf("[OPENAIR][SCHED][INIT] Problem: EMOS FIFO %d is greater than or equal to RTF_NO\n",CHANSOUNDER_FIFO_MINOR);
-  else if (error_code==ENOMEM)
-    printf("[OPENAIR][SCHED][INIT] Problem: cannot allocate memory for EMOS FIFO %d\n",CHANSOUNDER_FIFO_MINOR);
-  else 
-    printf("[OPENAIR][SCHED][INIT] Problem creating EMOS FIFO %d, error_code %d\n",CHANSOUNDER_FIFO_MINOR,error_code);
-#endif
-
-  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"), 1);
-  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
-  if (UE_flag!=1)
-      openair0_start_rt_acquisition(card);
-
-#ifdef XFORMS
-  if (do_forms==1) {
-      fl_initialize (&argc, argv, NULL, 0, 0);
-      form_stats = create_form_stats_form();
-      if (UE_flag==1) {
-          form_ue[UE_id] = create_lte_phy_scope_ue();
-          sprintf (title, "LTE DL SCOPE UE");
-          fl_show_form (form_ue[UE_id]->lte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
-      } else {
-            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");
-      if (UE_flag==0) {
-          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");
-              }
-          }
-      }
-      else {
-          if (openair_daq_vars.use_ia_receiver) {
-              fl_set_button(form_ue[UE_id]->button_0,1);
-              fl_set_object_label(form_ue[UE_id]->button_0, "IA Receiver ON");
-          }
-          else {
-              fl_set_button(form_ue[UE_id]->button_0,0);
-              fl_set_object_label(form_ue[UE_id]->button_0, "IA Receiver OFF");
-          }
-      }
-
-      ret = pthread_create(&thread2, NULL, scope_thread, NULL);
-      printf("Scope thread created, ret=%d\n",ret);
-    }
-#endif
-
-#ifdef EMOS
-  ret = pthread_create(&thread3, NULL, emos_thread, NULL);
-  printf("EMOS 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
-  if (UE_flag == 1) {
-#ifdef RTAI
-    thread1 = rt_thread_create(UE_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");
-    }
-#endif
-#ifdef DLSCH_THREAD
-    init_rx_pdsch_thread();
-    rt_sleep_ns(FRAME_PERIOD/10);
-    init_dlsch_threads();
-#endif
-    printf("UE threads created\n");
-  }
-  else {
-#ifdef RTAI
-    thread0 = rt_thread_create(eNB_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");
-    }
-#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();
-
-#if defined(ENABLE_ITTI)
-  printf("Entering ITTI signals handler\n");
-  itti_wait_tasks_end();
-#else
-  while (oai_exit==0)
-    rt_sleep_ns(FRAME_PERIOD);
-#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);
-        if (UE_flag==1) {
-            fl_hide_form(form_ue[UE_id]->lte_phy_scope_ue);
-            fl_free_form(form_ue[UE_id]->lte_phy_scope_ue);
-        } else {
-            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
-  if (UE_flag == 1) {
-#ifdef RTAI
-    rt_thread_join(thread1); 
-#else
-    pthread_join(thread1,&status); 
-#endif
-#ifdef DLSCH_THREAD
-    cleanup_dlsch_threads();
-    cleanup_rx_pdsch_thread();
-#endif
-  }
-  else {
-#ifdef RTAI
-    rt_thread_join(thread0); 
-#else
-    pthread_join(thread0,&status); 
-#endif
-#ifdef ULSCH_THREAD
-    cleanup_ulsch_threads();
-#endif
-  }
-
-#ifdef OPENAIR2
-  //cleanup_pdcp_thread();
-#endif
-
-#ifdef RTAI
-  stop_rt_timer();
-#endif
-
-  printf("stopping card\n");
-  openair0_stop(card);
-  printf("closing openair0_lib\n");
-  openair0_close();
-
-#ifdef EMOS
-  printf("waiting for EMOS thread\n");
-  pthread_cancel(thread3);
-  pthread_join(thread3,&status);
-#endif
-
-#ifdef EMOS
-  error_code = rtf_destroy(CHANSOUNDER_FIFO_MINOR);
-  printf("[OPENAIR][SCHED][CLEANUP] EMOS FIFO closed, error_code %d\n", error_code);
-#endif
-
-  if (ouput_vcd)
-    vcd_signal_dumper_close();
-
-  logClean();
-
-  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;
-#if (BOARD_SWREV_CNTL2>=0x0A)
-  p_exmimo_config->framing.resampling_factor[ant] = 2;
-#else
-  p_exmimo_config->framing.resampling_factor = 2;
-#endif
-
-  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] = (int32_t*) openair0_exmimo_pci[card].adc_head[i+carrier];
-
-
-      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] = (int32_t*) openair0_exmimo_pci[card].dac_head[i+carrier];
-
-      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,j;
-
-  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];
-
-      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/RTAI/USER/lte_scope.c b/targets/RTAI/USER/lte_scope.c
deleted file mode 100644
index c3643acc6af34c04389a384b873d5c518dc470de..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/lte_scope.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Form definition file generated by fdesign */
-
-#include <stdlib.h>
-#include "lte_scope.h"
-
-
-/***************************************
- ***************************************/
-
-FD_lte_scope *
-create_form_lte_scope( void )
-{
-    FL_OBJECT *obj;
-    FD_lte_scope *fdui = fl_malloc( sizeof *fdui );
-
-    fdui->vdata = fdui->cdata = NULL;
-    fdui->ldata = 0;
-
-    fdui->lte_scope = fl_bgn_form( FL_NO_BOX, 780, 723 );
-
-    obj = fl_add_box( FL_ROUNDED_BOX, 0, 0, 780, 723, "" );
-    fl_set_object_color( obj, FL_BLACK, FL_BLUE );
-
-    fdui->channel_t_re[0] = obj = fl_add_xyplot( FL_NORMAL_XYPLOT, 20, 20, 280, 100, "Real(RX0)" );
-    fl_set_object_boxtype( obj, FL_EMBOSSED_BOX );
-    fl_set_object_color( obj, FL_BLACK, FL_BLUE );
-    fl_set_object_lcolor( obj, FL_WHITE );
-
-    fdui->channel_t_im[0] = obj = fl_add_xyplot( FL_NORMAL_XYPLOT, 310, 20, 280, 100, "Imag(RX0)" );
-    fl_set_object_boxtype( obj, FL_EMBOSSED_BOX );
-    fl_set_object_color( obj, FL_BLACK, FL_BLUE );
-    fl_set_object_lcolor( obj, FL_WHITE );
-
-    fdui->channel_t_re[1] = obj = fl_add_xyplot( FL_NORMAL_XYPLOT, 20, 140, 280, 100, "Real(RX1)" );
-    fl_set_object_boxtype( obj, FL_EMBOSSED_BOX );
-    fl_set_object_color( obj, FL_BLACK, FL_RED );
-    fl_set_object_lcolor( obj, FL_WHITE );
-
-    fdui->channel_t_im[1] = obj = fl_add_xyplot( FL_NORMAL_XYPLOT, 310, 140, 280, 100, "Imag(RX1)" );
-    fl_set_object_boxtype( obj, FL_EMBOSSED_BOX );
-    fl_set_object_color( obj, FL_BLACK, FL_RED );
-    fl_set_object_lcolor( obj, FL_WHITE );
-
-    fdui->channel_t_re[2] = obj = fl_add_xyplot( FL_NORMAL_XYPLOT, 20, 260, 280, 100, "Real(RX2)" );
-    fl_set_object_boxtype( obj, FL_EMBOSSED_BOX );
-    fl_set_object_color( obj, FL_BLACK, FL_GREEN );
-    fl_set_object_lcolor( obj, FL_WHITE );
-
-    fdui->channel_t_im[2] = obj = fl_add_xyplot( FL_NORMAL_XYPLOT, 310, 260, 280, 100, "Imag(RX2)" );
-    fl_set_object_boxtype( obj, FL_EMBOSSED_BOX );
-    fl_set_object_color( obj, FL_BLACK, FL_GREEN );
-    fl_set_object_lcolor( obj, FL_WHITE );
-
-    fdui->channel_t_re[3] = obj = fl_add_xyplot( FL_NORMAL_XYPLOT, 20, 380, 280, 100, "Real(RX3)" );
-    fl_set_object_boxtype( obj, FL_EMBOSSED_BOX );
-    fl_set_object_color( obj, FL_BLACK, FL_YELLOW );
-    fl_set_object_lcolor( obj, FL_WHITE );
-
-    fdui->channel_t_im[3] = obj = fl_add_xyplot( FL_NORMAL_XYPLOT, 310, 380, 280, 100, "Imag(RX3)" );
-    fl_set_object_boxtype( obj, FL_EMBOSSED_BOX );
-    fl_set_object_color( obj, FL_BLACK, FL_YELLOW );
-    fl_set_object_lcolor( obj, FL_WHITE );
-
-    /*
-    fdui->scatter_plot = obj = fl_add_xyplot( FL_POINTS_XYPLOT, 600, 230, 160, 190, "PBCH Scatter Plot" );
-    fl_set_object_boxtype( obj, FL_EMBOSSED_BOX );
-    fl_set_object_color( obj, FL_BLACK, FL_GREEN );
-    fl_set_object_lcolor( obj, FL_WHITE );
-
-    fdui->scatter_plot2 = obj = fl_add_xyplot( FL_POINTS_XYPLOT, 600, 440, 160, 190, "PDSCH/PUSCH Scatter Plot" );
-    fl_set_object_boxtype( obj, FL_EMBOSSED_BOX );
-    fl_set_object_color( obj, FL_BLACK, FL_YELLOW );
-    fl_set_object_lcolor( obj, FL_WHITE );
-
-    fdui->scatter_plot1 = obj = fl_add_xyplot( FL_POINTS_XYPLOT, 600, 20, 160, 190, "PDCCH Scatter Plot" );
-    fl_set_object_boxtype( obj, FL_EMBOSSED_BOX );
-    fl_set_object_color( obj, FL_BLACK, FL_CYAN );
-    fl_set_object_lcolor( obj, FL_WHITE );
-
-    fdui->ia_receiver_button = obj = fl_add_button( FL_PUSH_BUTTON, 620, 660, 130, 40, "IA receiver OFF" );
-    fl_set_object_lalign( obj, FL_ALIGN_CENTER );
-    fl_set_object_color( obj, FL_RED, FL_RED);
-    fl_set_object_callback( obj, ia_receiver_on_off, 0 );
-
-    fdui->tput = obj = fl_add_xyplot( FL_NORMAL_XYPLOT, 20, 560, 570, 140, "Throughput [kbits/s]" );
-    fl_set_object_boxtype( obj, FL_EMBOSSED_BOX );
-    fl_set_object_color( obj, FL_BLACK, FL_WHITE );
-    fl_set_object_lcolor( obj, FL_WHITE );
-    */
-
-    fl_end_form( );
-
-    fdui->lte_scope->fdui = fdui;
-
-    return fdui;
-}
diff --git a/targets/RTAI/USER/lte_scope.fd b/targets/RTAI/USER/lte_scope.fd
deleted file mode 100644
index 970351a87361e819f925019f605b9a088514e72e..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/lte_scope.fd
+++ /dev/null
@@ -1,214 +0,0 @@
-Magic: 14000
-
-Internal Form Definition File
-    (do not change)
-
-Number of forms: 1
-Unit of measure: FL_COORD_PIXEL
-
-=============== FORM ===============
-Name: lte_scope
-Width: 780
-Height: 723
-Number of Objects: 11
-
---------------------
-class: FL_BOX
-type: ROUNDED_BOX
-box: 0 0 780 723
-boxtype: FL_ROUNDED_BOX
-colors: FL_BLACK FL_BLUE
-alignment: FL_ALIGN_CENTER
-style: FL_NORMAL_STYLE
-size: FL_DEFAULT_SIZE
-lcol: FL_BLACK
-label: 
-shortcut: 
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: 
-callback: 
-argument: 
-
---------------------
-class: FL_XYPLOT
-type: NORMAL_XYPLOT
-box: 20 20 280 100
-boxtype: FL_EMBOSSED_BOX
-colors: FL_BLACK FL_BLUE
-alignment: FL_ALIGN_BOTTOM
-style: FL_NORMAL_STYLE
-size: FL_TINY_SIZE
-lcol: FL_WHITE
-label: Received Signal (Time-Domain, dB)
-shortcut: 
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: channel_t_re
-callback: 
-argument: 
-
---------------------
-class: FL_XYPLOT
-type: POINTS_XYPLOT
-box: 600 230 160 190
-boxtype: FL_EMBOSSED_BOX
-colors: FL_BLACK FL_GREEN
-alignment: FL_ALIGN_BOTTOM
-style: FL_NORMAL_STYLE
-size: FL_TINY_SIZE
-lcol: FL_WHITE
-label: PBCH Scatter Plot
-shortcut: 
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: scatter_plot
-callback: 
-argument: 
-
---------------------
-class: FL_XYPLOT
-type: IMPULSE_XYPLOT
-box: 20 140 570 90
-boxtype: FL_EMBOSSED_BOX
-colors: FL_BLACK FL_RED
-alignment: FL_ALIGN_BOTTOM
-style: FL_NORMAL_STYLE
-size: FL_TINY_SIZE
-lcol: FL_WHITE
-label: Frequency Domain Channel Estimate
-shortcut: 
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: channel_f
-callback: 
-argument: 
-
---------------------
-class: FL_XYPLOT
-type: NORMAL_XYPLOT
-box: 310 20 280 100
-boxtype: FL_EMBOSSED_BOX
-colors: FL_BLACK FL_BLUE
-alignment: FL_ALIGN_BOTTOM
-style: FL_NORMAL_STYLE
-size: FL_TINY_SIZE
-lcol: FL_WHITE
-label: Time-Domain Channel Estimate
-shortcut: 
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: channel_t_im
-callback: 
-argument: 
-
---------------------
-class: FL_XYPLOT
-type: POINTS_XYPLOT
-box: 20 250 570 130
-boxtype: FL_EMBOSSED_BOX
-colors: FL_BLACK FL_GREEN
-alignment: FL_ALIGN_BOTTOM
-style: FL_NORMAL_STYLE
-size: FL_TINY_SIZE
-lcol: FL_WHITE
-label: PBCH Decoder Input
-shortcut: 
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: decoder_input
-callback: 
-argument: 
-
---------------------
-class: FL_XYPLOT
-type: POINTS_XYPLOT
-box: 600 440 160 190
-boxtype: FL_EMBOSSED_BOX
-colors: FL_BLACK FL_YELLOW
-alignment: FL_ALIGN_BOTTOM
-style: FL_NORMAL_STYLE
-size: FL_TINY_SIZE
-lcol: FL_WHITE
-label: PDSCH/PUSCH Scatter Plot
-shortcut: 
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: scatter_plot2
-callback: 
-argument: 
-
---------------------
-class: FL_XYPLOT
-type: POINTS_XYPLOT
-box: 600 20 160 190
-boxtype: FL_EMBOSSED_BOX
-colors: FL_BLACK FL_CYAN
-alignment: FL_ALIGN_BOTTOM
-style: FL_NORMAL_STYLE
-size: FL_TINY_SIZE
-lcol: FL_WHITE
-label: PDCCH Scatter Plot
-shortcut: 
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: scatter_plot1
-callback: 
-argument: 
-
---------------------
-class: FL_BUTTON
-type: PUSH_BUTTON
-box: 620 660 130 40
-boxtype: FL_UP_BOX
-colors: FL_COL1 FL_COL1
-alignment: FL_ALIGN_CENTER
-style: FL_NORMAL_STYLE
-size: FL_DEFAULT_SIZE
-lcol: FL_BLACK
-label: IA receiver OFF
-shortcut: 
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: ia_receiver_button
-callback: ia_receiver_on_off
-argument: 0
-
---------------------
-class: FL_XYPLOT
-type: POINTS_XYPLOT
-box: 20 400 570 140
-boxtype: FL_EMBOSSED_BOX
-colors: FL_BLACK FL_YELLOW
-alignment: FL_ALIGN_BOTTOM
-style: FL_NORMAL_STYLE
-size: FL_TINY_SIZE
-lcol: FL_WHITE
-label: PDSCH/PUSCH Decoder Input
-shortcut: 
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: demod_out
-callback: 
-argument: 
-
---------------------
-class: FL_XYPLOT
-type: NORMAL_XYPLOT
-box: 20 560 570 140
-boxtype: FL_EMBOSSED_BOX
-colors: FL_BLACK FL_WHITE
-alignment: FL_ALIGN_BOTTOM
-style: FL_NORMAL_STYLE
-size: FL_TINY_SIZE
-lcol: FL_WHITE
-label: Throughput [kbits/s]
-shortcut: 
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: tput
-callback: 
-argument: 
-
-==============================
-create_the_forms
diff --git a/targets/RTAI/USER/lte_scope.h b/targets/RTAI/USER/lte_scope.h
deleted file mode 100644
index 2c2797ffb2498bf52568bc96f05e922429bf3356..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/lte_scope.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Header file generated by fdesign on Tue Nov 13 09:42:50 2012 */
-
-#ifndef FD_lte_scope_h_
-#define FD_lte_scope_h_
-
-#include <forms.h>
-
-/* Callbacks, globals and object handlers */
-
-extern void ia_receiver_on_off( FL_OBJECT *, long );
-
-
-/* Forms and Objects */
-
-typedef struct {
-    FL_FORM   * lte_scope;
-    void      * vdata;
-    char      * cdata;
-    long        ldata;
-    FL_OBJECT * channel_t_re[4];
-    FL_OBJECT * channel_t_im[4];
-  /*
-    FL_OBJECT * scatter_plot;
-    FL_OBJECT * channel_f;
-    FL_OBJECT * decoder_input;
-    FL_OBJECT * scatter_plot2;
-    FL_OBJECT * scatter_plot1;
-    FL_OBJECT * ia_receiver_button;
-    FL_OBJECT * demod_out;
-    FL_OBJECT * tput;
-  */
-} FD_lte_scope;
-
-extern FD_lte_scope * create_form_lte_scope( void );
-
-#endif /* FD_lte_scope_h_ */
diff --git a/targets/RTAI/USER/make_for_usrp.sh b/targets/RTAI/USER/make_for_usrp.sh
deleted file mode 100755
index 998cd7c462d5a0f4a66926d5d4890509c0b21050..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/make_for_usrp.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/bash
-
-############### make nasmesh.ko ###############
-sudo rmmod nasmesh
-#cd ${OPENAIR2_DIR} && make nasmesh_netlink.ko
-#cd ${OPENAIR2_DIR}/NAS/DRIVER/MESH/RB_TOOL/ && make
-#make all
-sudo insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko
-
-############## Ethernet config  ####################
-sudo ifconfig eth0 mtu 4000
-sudo sysctl -w net.core.wmem_max=1048576
-sudo sysctl -w net.core.rmem_max=50000000
-
-############## rtai modules ###################
-if test \! -c /dev/rtai_shm; then
-        sudo mknod -m 666 /dev/rtai_shm c 10 254
-fi
-for n in `seq 0 9`; do
-        f=/dev/rtf$n
-        if test \! -c $f; then
-                sudo mknod -m 666 $f c 150 $n
-        fi
-done
-sudo modprobe rtai_hal
-sudo modprobe rtai_sched
-sudo modprobe rtai_fifos
-sudo modprobe rtai_sem
-sudo modprobe rtai_mbx
-sudo modprobe rtai_msg
-
-############## make  ###################
-make lte-softmodem-usrp NAS=1 USRP=1 XFORMS=1 RTAI=1 HARD_RT=1 #DRIVER2013=1
-#make lte-softmodem NAS=1 XFORMS=1 USRP=0 RTAI=1 DRIVER2013=1
-echo DONE!
-exit 0
diff --git a/targets/RTAI/USER/msg_helper.c b/targets/RTAI/USER/msg_helper.c
deleted file mode 100644
index fcba4ce6a17878c12ca485e5f5de8e8ee6c53e6e..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/msg_helper.c
+++ /dev/null
@@ -1,66 +0,0 @@
-#include <rtai_sem.h>
-
-#include "msg_many.h"
-
-/*
- * Add a task task to ri->worker.
- * Return the used index in ri->worker on success
- * Return -TM_WORKER_FULL_ERROR if ri->worker full
- * Return -TM_WORKER_ERROR else
-*/
-int tm_add_task(RT_TASK *task, run_info_t *ri)
-{
-  if(ri->used >= NUM_THREADS)
-    return -TM_WORKER_FULL_ERROR;
-
-  rt_sem_wait(ri->update_sem);
-  (*ri->worker)[ri->used] = task;
-  ri->used++;
-  rt_sem_signal(ri->update_sem);
-
-  return ri->used - 1;
-}
-
-/*
- * Remove the a hole in worker at index index by
- * shift the next slots by one.
- * This function assume that update_sem are locked.
- * Return the new used counter.
-*/
-int _tm_clean_worker(RT_TASK *(*worker)[], int index, int used)
-{
-  int i;
-
-  for(i = index; i < used; i++)
-    (*worker)[i] = (*worker)[i + 1];
-
-  return used - 1;
-}
-
-/*
- * Remove a task from ri->worker a index task_index
- * Return 0 on success
- * Return -TM_WORKER_ERROR else
-*/
-int tm_del_task(int task_index, run_info_t *ri)
-{
-  rt_sem_wait(ri->update_sem);
-  ri->used = _tm_clean_worker(ri->worker, task_index, ri->used);
-  rt_sem_signal(ri->update_sem);
-
-  return 0;
-}
-
-/*
- * Return next index to use on ri->worker.
- * It depends on the old_index and ri->used.
- * Return -TM_WORKER_ERROR if ri->used == 0.
-*/
-inline int tm_get_next_task_index(int old_index, run_info_t *ri)
-{
-  if(ri->used == 0)
-    return -TM_WORKER_ERROR;
-
-  return (old_index + 1) % ri->used;
-}
-
diff --git a/targets/RTAI/USER/msg_many.c b/targets/RTAI/USER/msg_many.c
deleted file mode 100644
index b81394ae1132c1401ff1180ad9dbd36f31acac3c..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/msg_many.c
+++ /dev/null
@@ -1,153 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sched.h>
-
-#include <rtai_lxrt.h>
-#include <rtai_sem.h>
-#include <rtai_msg.h>
-
-#include "msg_many.h"
-
-static void *msg_test_thread(void *arg)
-{
-  RT_TASK *self;
-  RT_TASK *sender_task;
-  thread_info_t *ti = (thread_info_t *)arg;
-  run_info_t *ri = ti->ri;
-  unsigned int msg;
-  int counter = 0;
-  char name[6];
-  int task_index;
-
-  /* Build custom task name for each thread */
-  snprintf(name, 6, "%s%03i", THREAD_NAME_PREFIX, ti->thread_num);
-
-  self = rt_task_init_schmod(nam2num(name), 0, 0, 0, SCHED_FIFO, 0xF);
-  mlockall(MCL_CURRENT | MCL_FUTURE);
-
-  rt_make_hard_real_time();
-
-  task_index = tm_add_task(self, ri);
-  if(task_index != -TM_WORKER_FULL_ERROR)
-  {
-    while (*(ri->exit_condition) == 0)
-      {
-        // wait only one PERIOD to avoid wait for ever 
-        sender_task = rt_receive_timed(ri->sender, &msg, ri->period);
-        //sender_task = rt_receive(0, &msg);
-        if(sender_task == ri->sender)
-          counter++;
-      }
-    rt_printk("%s: counter == %i\n", name, counter);
-    tm_del_task(task_index, ri);
-  } else {
-    rt_printk("%s: Worker array full!\n", name);
-  }
-  
-  rt_make_soft_real_time();
-
-  rt_task_delete(self);
-
-  free((void *) ti);
-
-  return 0;
-}
-
-
-int main(void)
-{
-  RT_TASK *self;
-  RT_TASK *tmp_worker_task;
-  RT_TASK *worker_tasks[NUM_THREADS];
-  int worker_threads[NUM_THREADS];
-  RTIME now;
-  unsigned int i, ii;
-  run_info_t ri;
-  thread_info_t *ti;
-  uint8_t exit_condition = 0;
-  int fail_count = 0;
-  int old_index = 0;
-  uint8_t lost;
-
-  // make main thread LXRT soft realtime
-  self = rt_task_init_schmod(nam2num("MAINTK"), 10, 0, 0, SCHED_FIFO, 0xF);
-  mlockall(MCL_CURRENT | MCL_FUTURE);
-
-  rt_make_hard_real_time();
-  rt_set_periodic_mode();
-  start_rt_timer(0);
-
-  /* Build all information need to run in main and the thread */
-  ri.sender = self;
-  ri.exit_condition = &exit_condition;
-  ri.period = nano2count(PERIOD);
-  ri.update_sem = rt_sem_init(nam2num("MUTEX"), 1);
-  if(ri.update_sem == 0)
-    exit(-1);
-  ri.used = 0;
-  ri.worker = &worker_tasks;
-
-  now = rt_get_time() + ri.period;
-  rt_task_make_periodic(self, now, ri.period);
-
-  /* start all threads */
-  for(i = 0; i < NUM_THREADS; i++)
-  {
-    ti = (thread_info_t *)malloc(sizeof(thread_info_t));
-    if(ti == NULL)
-    {
-      rt_printk("MAINTK: can't get memory!\n");
-      exit(-1);
-    }
-    ti->ri = &ri;
-    ti->thread_num = i;
-    worker_threads[i] = rt_thread_create(msg_test_thread, ti , 10000);
-  }
-
-  rt_sleep(NUM_THREADS * ri.period);
-
-  rt_printk("start\n");
-  for(i = 0; i < THRESHOLD; i++)
-    {
-      rt_task_wait_period();
-      lost = 1;
-      for(ii = 0; ii < ri.used; ii++)
-      {
-        old_index = tm_get_next_task_index(old_index, &ri);
-        if(old_index == -TM_WORKER_ERROR)
-        {
-          rt_printk("MAINTK: No Tasks!\n");
-          break;
-        }
-        tmp_worker_task = rt_send_if(worker_tasks[old_index], i);
-        if(tmp_worker_task == worker_tasks[old_index])
-        {
-          lost = 0;
-          break;
-        }
-      }
-      if(lost)
-        fail_count++;
-    }
-  rt_printk("fail_count == %i\n", fail_count);
-
-  // cleanup
-  exit_condition = 1;
-  rt_make_soft_real_time();
-
-  rt_task_delete(self);
-  /* wait for the worker threadss  */
-  for(ii = 0; ii < ri.used; ii++)
-  {
-    rt_thread_join(worker_threads[ii]);
-  }
-  stop_rt_timer();
-  return 0;
-}
diff --git a/targets/RTAI/USER/msg_many.h b/targets/RTAI/USER/msg_many.h
deleted file mode 100644
index 88e88789149c2e75f6617dded5e9ed72fdee8ef3..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/msg_many.h
+++ /dev/null
@@ -1,33 +0,0 @@
-
-#ifndef __MSG_MANY_H__
-#define __MSG_MANY_H__
-#include <stdint.h>
-
-#define PERIOD 500000 /* in nano seconds */
-#define THRESHOLD 1000000
-#define THREAD_NAME_PREFIX "TK"
-#define NUM_THREADS 10
-
-#define TM_WORKER_FULL_ERROR 1
-#define TM_WORKER_ERROR 2
-
-typedef struct run_info {
-  RT_TASK *sender;
-  uint8_t *exit_condition;
-  long long period;
-  SEM *update_sem; /* protect the task array */
-  int used; /* counter of used slots in worker */
-  RT_TASK *(*worker)[]; /* declare worker as pointer to array of pointer to RT_TASK */
-} run_info_t;
-
-typedef struct thread_info {
-  run_info_t *ri;
-  uint8_t thread_num;
-} thread_info_t;
-
-int tm_add_task(RT_TASK *task, run_info_t *ri);
-int tm_del_task(int task_index, run_info_t *ri);
-inline int tm_get_next_task_index(int old_index, run_info_t *ri);
-
-#endif
-
diff --git a/targets/RTAI/USER/rt_wrapper.c b/targets/RTAI/USER/rt_wrapper.c
deleted file mode 100644
index 6b1dc4b9794ad26201d575028016935fb5a52b24..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/rt_wrapper.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
-
-  Eurecom OpenAirInterface
-  Copyright(c) 1999 - 2011 Eurecom
-
-  This program is free software; you can redistribute it and/or modify it
-  under the terms and conditions of the GNU General Public License,
-  version 2, as published by the Free Software Foundation.
-
-  This program is distributed in the hope 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
-  this program; if not, write to the Free Software Foundation, Inc.,
-  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
-
-  The full GNU General Public License is included in this distribution in
-  the file called "COPYING".
-
-  Contact Information
-  Openair Admin: openair_admin@eurecom.fr
-  Openair Tech : openair_tech@eurecom.fr
-  Forums       : http://forums.eurecom.fsr/openairinterface
-  Address      : Eurecom, 2229, route des cr锚tes, 06560 Valbonne Sophia Antipolis, France
-
-*******************************************************************************/
-
-/*! \file rt_wrapper.h
-* \brief provides a wrapper for the timing function for real-time opeartions depending on weather RTAI is used or not
-* \author F. Kaltenberger
-* \date 2013
-* \version 0.1
-* \company Eurecom
-* \email: florian.kaltenberger@eurecom.fr
-* \note
-* \warning
-*/
-
-#include "rt_wrapper.h"
-
-#ifndef RTAI
-
-struct timespec interval, next, now, res;
-clockid_t clock_id = CLOCK_REALTIME; //other options are CLOCK_MONOTONIC, CLOCK_REALTIME, CLOCK_PROCESS_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID 
-RTIME rt_get_time_ns (void) {
-  clock_gettime(clock_id, &now);
-  return(now.tv_sec*1e9+now.tv_nsec); 
-}
-
-int rt_sleep_ns (RTIME x) {
-  int ret;
-  clock_gettime(clock_id, &now);
-  interval.tv_sec = x/((RTIME)1000000000); 
-  interval.tv_nsec = x%((RTIME)1000000000); 
-  //rt_printk("sleeping for %d sec and %d ns\n",interval.tv_sec,interval.tv_nsec);
-  next = now;
-  next.tv_sec += interval.tv_sec;
-  next.tv_nsec += interval.tv_nsec;
-
-  if (next.tv_nsec>=1000000000) {
-    next.tv_nsec -= 1000000000;
-    next.tv_sec++;
-  }
-
-  ret = clock_nanosleep(clock_id, TIMER_ABSTIME, &next, NULL);
-
-  /*
-  if (ret==EFAULT)
-    rt_printk("rt_sleep_ns returned EFAULT (%d), reqested %d sec and %d ns\n",ret,next.tv_sec,next.tv_nsec);
-  if (ret==EINVAL)
-    rt_printk("rt_sleep_ns returned EINVAL (%d), reqested %d sec and %d ns\n",ret,next.tv_sec,next.tv_nsec);
-  if (ret==EINTR)
-    rt_printk("rt_sleep_ns returned EINTR (%d), reqested %d sec and %d ns\n",ret,next.tv_sec,next.tv_nsec);
-  */
-
-  return(ret);
-}
-
-void check_clock(void) {
-  if (clock_getres(clock_id, &res)) {
-    printf("clock_getres failed");
-  } else {
-    printf("reported resolution = %llu ns\n", (long long int) ((int) 1e9 * res.tv_sec) + (long long int) res.tv_nsec);
-  }
-}
-
-#else
-
-int rt_sleep_ns(RTIME x) {
-  rt_sleep(nano2count(x));
-  return(0);
-}
-
-#endif
diff --git a/targets/RTAI/USER/rt_wrapper.h b/targets/RTAI/USER/rt_wrapper.h
deleted file mode 100644
index faf557e2854795b41816b93299144ab2831b7e31..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/rt_wrapper.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*******************************************************************************
-
-  Eurecom OpenAirInterface
-  Copyright(c) 1999 - 2011 Eurecom
-
-  This program is free software; you can redistribute it and/or modify it
-  under the terms and conditions of the GNU General Public License,
-  version 2, as published by the Free Software Foundation.
-
-  This program is distributed in the hope 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
-  this program; if not, write to the Free Software Foundation, Inc.,
-  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
-
-  The full GNU General Public License is included in this distribution in
-  the file called "COPYING".
-
-  Contact Information
-  Openair Admin: openair_admin@eurecom.fr
-  Openair Tech : openair_tech@eurecom.fr
-  Forums       : http://forums.eurecom.fsr/openairinterface
-  Address      : Eurecom, 2229, route des cr锚tes, 06560 Valbonne Sophia Antipolis, France
-
-*******************************************************************************/
-
-/*! \file rt_wrapper.h
-* \brief provides a wrapper for the timing function for real-time opeartions depending on weather RTAI is used or not
-* \author F. Kaltenberger
-* \date 2013
-* \version 0.1
-* \company Eurecom
-* \email: florian.kaltenberger@eurecom.fr
-* \note
-* \warning
-*/
-
-#ifndef RTAI
-#include <time.h>
-#include <errno.h>
-#include <stdio.h>
-#include <pthread.h>
-
-#define RTIME long long int
-
-#define rt_printk printf
-
-RTIME rt_get_time_ns (void);
-
-int rt_sleep_ns (RTIME x);
-
-void check_clock(void);
-
-#else
-#include <rtai_lxrt.h>
-#include <rtai_sem.h>
-#include <rtai_msg.h>
-
-int rt_sleep_ns(RTIME x);
-
-#endif
diff --git a/targets/RTAI/USER/sched_dlsch.c b/targets/RTAI/USER/sched_dlsch.c
deleted file mode 100644
index c360ac99a9e05311e5717b660ab0f3c9ee405c0f..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/sched_dlsch.c
+++ /dev/null
@@ -1,347 +0,0 @@
-/*******************************************************************************
-
-  Eurecom OpenAirInterface
-  Copyright(c) 1999 - 2011 Eurecom
-
-  This program is free software; you can redistribute it and/or modify it
-  under the terms and conditions of the GNU General Public License,
-  version 2, as published by the Free Software Foundation.
-
-  This program is distributed in the hope 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
-  this program; if not, write to the Free Software Foundation, Inc.,
-  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
-
-  The full GNU General Public License is included in this distribution in
-  the file called "COPYING".
-
-  Contact Information
-  Openair Admin: openair_admin@eurecom.fr
-  Openair Tech : openair_tech@eurecom.fr
-  Forums       : http://forums.eurecom.fsr/openairinterface
-  Address      : Eurecom, 2229, route des cr锚tes, 06560 Valbonne Sophia Antipolis, France
-
-*******************************************************************************/
-
-/*! \file sched_dlsch.c
-* \brief DLSCH decoding thread (RTAI)
-* \author R. Knopp, F. Kaltenberger
-* \date 2011
-* \version 0.1
-* \company Eurecom
-* \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr
-* \note
-* \warning
-*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <sched.h>
-
-#include "rt_wrapper.h"
-
-#include <sys/mman.h>
-
-#include "PHY/types.h"
-#include "PHY/defs.h"
-#include "PHY/extern.h"
-
-#include "SCHED/defs.h"
-
-#include "MAC_INTERFACE/extern.h"
-
-#ifdef CBMIMO1
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h"
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/extern.h"
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/defs.h"
-#endif // CBMIMO1
-
-#include "UTIL/LOG/vcd_signal_dumper.h"
-
-#define DEBUG_PHY
-
-/// Mutex for instance count on dlsch scheduling 
-pthread_mutex_t dlsch_mutex[8];
-/// Condition variable for dlsch thread
-pthread_cond_t dlsch_cond[8];
-
-pthread_t dlsch_threads[8];
-pthread_attr_t attr_dlsch_threads;
-unsigned char dlsch_thread_indices[8];
-
-// activity indicators for harq_pid's
-int dlsch_instance_cnt[8];
-// process ids for cpu
-int dlsch_cpuid[8];
-// subframe number for each harq_pid (needed to store ack in right place for UL)
-int dlsch_subframe[8];
-
-extern int oai_exit;
-
-/*
-extern int dlsch_errors;
-extern int dlsch_received;
-extern int dlsch_errors_last;
-extern int dlsch_received_last;
-extern int dlsch_fer;
-extern int current_dlsch_cqi;
-*/
-
-/** DLSCH Decoding Thread */
-static void * dlsch_thread(void *param) {
-
-  //unsigned long cpuid;
-  unsigned char dlsch_thread_index = *((unsigned char *)param);
-  unsigned int ret;
-  uint8_t harq_pid;
-
-  RTIME time_in,time_out;
-#ifdef RTAI
-  RT_TASK *task;
-  char task_name[8];
-#endif
-
-  int eNB_id = 0, UE_id = 0;
-  PHY_VARS_UE *phy_vars_ue = PHY_vars_UE_g[UE_id];
-
-  if ((dlsch_thread_index <0) || (dlsch_thread_index>7)) {
-      LOG_E(PHY,"[SCHED][DLSCH] Illegal dlsch_thread_index %d (%p)!!!!\n",dlsch_thread_index,param);
-    return 0;
-  }
-
-#ifdef RTAI
-  sprintf(task_name,"DLSCH%d",dlsch_thread_index);
-  task = rt_task_init_schmod(nam2num(task_name), 0, 0, 0, SCHED_FIFO, 0xF);
-
-  if (task==NULL) {
-      LOG_E(PHY,"[SCHED][DLSCH] Problem starting dlsch_thread_index %d (%s)!!!!\n",dlsch_thread_index,task_name);
-      return 0;
-  }
-  else {
-      LOG_I(PHY,"[SCHED][DLSCH] dlsch_thread for process %d started with id %p\n",
-            dlsch_thread_index,
-            task);
-  }
-#endif
-
-  mlockall(MCL_CURRENT | MCL_FUTURE);
-
-  //rt_set_runnable_on_cpuid(task,1);
-  //cpuid = rtai_cpuid();
-
-#ifdef HARD_RT
-  rt_make_hard_real_time();
-#endif
-
-  //dlsch_cpuid[dlsch_thread_index] = cpuid;
-
-  while (!oai_exit){
-
-    vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_THREAD0+dlsch_thread_index,0);
-    if (pthread_mutex_lock(&dlsch_mutex[dlsch_thread_index]) != 0) {
-        LOG_E(PHY,"[SCHED][DLSCH] error locking mutex.\n");
-    }
-    else {
-        
-        while (dlsch_instance_cnt[dlsch_thread_index] < 0) {
-            pthread_cond_wait(&dlsch_cond[dlsch_thread_index],&dlsch_mutex[dlsch_thread_index]);
-        }
-        
-        if (pthread_mutex_unlock(&dlsch_mutex[dlsch_thread_index]) != 0) {	
-            LOG_E(PHY,"[SCHED][DLSCH] error unlocking mutex.\n");
-        }
-    }
-    vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_THREAD0+dlsch_thread_index,1);    
-    if (oai_exit) break;
-    
-    LOG_I(PHY,"[SCHED][DLSCH] Frame %d: Calling dlsch_decoding with dlsch_thread_index = %d\n",phy_vars_ue->frame,dlsch_thread_index);
-
-    time_in = rt_get_time_ns();
-    
-    if (phy_vars_ue->frame < phy_vars_ue->dlsch_errors[eNB_id]) {
-        phy_vars_ue->dlsch_errors[eNB_id]=0;
-        phy_vars_ue->dlsch_received[eNB_id] = 0;
-    }
-
-    harq_pid = dlsch_thread_index;
-
-    if (phy_vars_ue->dlsch_ue[eNB_id][0]) {
-
-      //      rt_printk("[SCHED][DLSCH] Frame %d, slot %d, start %llu, end %llu, proc time: %llu ns\n",phy_vars_ue->frame,last_slot,time0,time1,(time1-time0));
-     
-        dlsch_unscrambling(&phy_vars_ue->lte_frame_parms,
-                           0,
-                           phy_vars_ue->dlsch_ue[eNB_id][0],
-                           phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->G,
-                           phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->llr[0],
-                           0,
-                           dlsch_subframe[dlsch_thread_index]<<1);
-
-        LOG_I(PHY,"[UE %d] PDSCH Calling dlsch_decoding for subframe %d, harq_pid %d, G%d\n", phy_vars_ue->Mod_id,dlsch_subframe[dlsch_thread_index], harq_pid,phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->G);
-
-	vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DECODING0+dlsch_thread_index,1);
-        ret = dlsch_decoding(phy_vars_ue,
-                             phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->llr[0],
-                             &phy_vars_ue->lte_frame_parms,
-                             phy_vars_ue->dlsch_ue[eNB_id][0],
-                             phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid],
-                             dlsch_subframe[dlsch_thread_index],
-                             harq_pid,
-                             1, // is_crnti
-			     0);  // llr8_flag
-	vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DECODING0+dlsch_thread_index,0);
-
-      	LOG_D(PHY,"[UE  %d][PDSCH %x/%d] Frame %d subframe %d: PDSCH/DLSCH decoding iter %d (mcs %d, rv %d, TBS %d)\n",
-              phy_vars_ue->Mod_id,
-              phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,harq_pid,
-              phy_vars_ue->frame,dlsch_subframe[dlsch_thread_index],ret,
-              phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs,
-              phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rvidx,
-              phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->TBS); 
-      
-
-        if (ret == (1+MAX_TURBO_ITERATIONS)) {
-            phy_vars_ue->dlsch_errors[eNB_id]++;
-	
-#ifdef DEBUG_PHY
-	LOG_I(PHY,"[UE  %d][PDSCH %x/%d] Frame %d subframe %d DLSCH in error (rv %d,mcs %d)\n",
-	      phy_vars_ue->Mod_id,phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,
-	      harq_pid,phy_vars_ue->frame,dlsch_subframe[dlsch_thread_index],
-	      phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rvidx,
-	      phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs);
-#endif
-      }
-      else {
-	LOG_I(PHY,"[UE  %d][PDSCH %x/%d] Frame %d subframe %d: Received DLSCH (rv %d,mcs %d)\n",
-	      phy_vars_ue->Mod_id,phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,
-	      harq_pid,phy_vars_ue->frame,dlsch_subframe[dlsch_thread_index],
-	      phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rvidx,
-	      phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs);
-	
-#ifdef OPENAIR2
-	mac_xface->ue_send_sdu(phy_vars_ue->Mod_id,
-                           phy_vars_ue->frame,
-                           phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->b,
-                           phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->TBS>>3,
-                           eNB_id);
-#endif
-	phy_vars_ue->total_TBS[eNB_id] =  phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->TBS + phy_vars_ue->total_TBS[eNB_id];
-	phy_vars_ue->total_received_bits[eNB_id] = phy_vars_ue->total_received_bits[eNB_id] + phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->TBS;
-      }
-    }
-
-    // this is done in main thread
-    /*    
-    if (phy_vars_ue->frame % 100 == 0) {
-      if ((phy_vars_ue->dlsch_received[eNB_id] - phy_vars_ue->dlsch_received_last[eNB_id]) != 0) 
-	phy_vars_ue->dlsch_fer[eNB_id] = (100*(phy_vars_ue->dlsch_errors[eNB_id] - phy_vars_ue->dlsch_errors_last[eNB_id]))/(phy_vars_ue->dlsch_received[eNB_id] - phy_vars_ue->dlsch_received_last[eNB_id]);
-      phy_vars_ue->dlsch_errors_last[eNB_id] = phy_vars_ue->dlsch_errors[eNB_id];
-      phy_vars_ue->dlsch_received_last[eNB_id] = phy_vars_ue->dlsch_received[eNB_id];
-    }
-    */
-
-    time_out = rt_get_time_ns();
-
-#ifdef DEBUG_PHY
-    LOG_I(PHY,"[UE  %d][PDSCH %x/%d] Frame %d subframe %d: PDSCH/DLSCH decoding iter %d (mcs %d, rv %d, TBS %d)\n",
-	  phy_vars_ue->Mod_id,
-	  phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,harq_pid,
-	  phy_vars_ue->frame,dlsch_subframe[dlsch_thread_index],ret,
-	  phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs,
-	  phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rvidx,
-	  phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->TBS);
-    if (phy_vars_ue->frame%100==0) {
-      LOG_D(PHY,"[UE  %d][PDSCH %x] Frame %d subframe %d dlsch_errors %d, dlsch_received %d, dlsch_fer %d, current_dlsch_cqi %d\n",
-	    phy_vars_ue->Mod_id,phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,
-	    phy_vars_ue->frame,dlsch_subframe[dlsch_thread_index],
-	    phy_vars_ue->dlsch_errors[eNB_id],
-	    phy_vars_ue->dlsch_received[eNB_id],
-	    phy_vars_ue->dlsch_fer[eNB_id],
-	    phy_vars_ue->PHY_measurements.wideband_cqi_tot[eNB_id]);
-    }
-#endif 
-    
-    if (pthread_mutex_lock(&dlsch_mutex[dlsch_thread_index]) != 0) {
-        msg("[openair][SCHED][DLSCH] error locking mutex.\n");
-    }
-    else {
-        dlsch_instance_cnt[dlsch_thread_index]--;
-        
-        if (pthread_mutex_unlock(&dlsch_mutex[dlsch_thread_index]) != 0) {	
-            msg("[openair][SCHED][DLSCH] error unlocking mutex.\n");
-        }
-    }
-
-  }
-
-#ifdef HARD_RT
-  rt_make_soft_real_time();
-#endif
-
-  msg("[openair][SCHED][DLSCH] DLSCH thread %d exiting\n",dlsch_thread_index);  
-
-  return 0;
-}
-
-int init_dlsch_threads(void) {
-  
-    int error_code;
-    struct sched_param p;
-    unsigned char dlsch_thread_index;
-    
-    pthread_attr_init (&attr_dlsch_threads);
-    pthread_attr_setstacksize(&attr_dlsch_threads,OPENAIR_THREAD_STACK_SIZE);
-    //attr_dlsch_threads.priority = 1;
-    
-    p.sched_priority = OPENAIR_THREAD_PRIORITY;
-    pthread_attr_setschedparam  (&attr_dlsch_threads, &p);
-#ifndef RTAI_ISNT_POSIX
-    pthread_attr_setschedpolicy (&attr_dlsch_threads, SCHED_FIFO);
-#endif
-    
-    for(dlsch_thread_index=0;dlsch_thread_index<8;dlsch_thread_index++) {
-
-        pthread_mutex_init(&dlsch_mutex[dlsch_thread_index],NULL);
-        pthread_cond_init(&dlsch_cond[dlsch_thread_index],NULL);
-
-        dlsch_instance_cnt[dlsch_thread_index] = -1;
-        dlsch_thread_indices[dlsch_thread_index] = dlsch_thread_index;
-        rt_printk("[openair][SCHED][DLSCH][INIT] Allocating DLSCH thread for dlsch_thread_index %d (%p)\n",dlsch_thread_index,&dlsch_thread_indices[dlsch_thread_index]);
-        error_code = pthread_create(&dlsch_threads[dlsch_thread_index],
-                                    &attr_dlsch_threads,
-                                    dlsch_thread,
-                                    (void *)&dlsch_thread_indices[dlsch_thread_index]);
-      
-        if (error_code!= 0) {
-            rt_printk("[openair][SCHED][DLSCH][INIT] Could not allocate dlsch_thread %d, error %d\n",dlsch_thread_index,error_code);
-            return(error_code);
-        }
-        else {
-            rt_printk("[openair][SCHED][DLSCH][INIT] Allocate dlsch_thread %d successful\n",dlsch_thread_index);
-        }
-    }   
-    return(0);
-}
-
-void cleanup_dlsch_threads(void) {
-
-  unsigned char dlsch_thread_index;
-
-  for(dlsch_thread_index=0;dlsch_thread_index<8;dlsch_thread_index++) {
-      //  pthread_exit(&dlsch_threads[dlsch_thread_index]);
-      rt_printk("[openair][SCHED][DLSCH] Scheduling dlsch_thread %d to exit\n",dlsch_thread_index);
-      
-      dlsch_instance_cnt[dlsch_thread_index] = 0;
-      if (pthread_cond_signal(&dlsch_cond[dlsch_thread_index]) != 0)
-          rt_printk("[openair][SCHED][DLSCH] ERROR pthread_cond_signal\n");
-      else
-          rt_printk("[openair][SCHED][DLSCH] Signalled dlsch_thread %d to exit\n",dlsch_thread_index);
-    
-      rt_printk("[openair][SCHED][DLSCH] Exiting ...\n");
-      pthread_cond_destroy(&dlsch_cond[dlsch_thread_index]);
-      pthread_mutex_destroy(&dlsch_mutex[dlsch_thread_index]);
-  }
-}
diff --git a/targets/RTAI/USER/sched_rx_pdsch.c b/targets/RTAI/USER/sched_rx_pdsch.c
deleted file mode 100644
index 30f129c0a247b436126f7752a68ff16ce4986b4b..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/sched_rx_pdsch.c
+++ /dev/null
@@ -1,334 +0,0 @@
-/*******************************************************************************
-
-  Eurecom OpenAirInterface
-  Copyright(c) 1999 - 2011 Eurecom
-
-  This program is free software; you can redistribute it and/or modify it
-  under the terms and conditions of the GNU General Public License,
-  version 2, as published by the Free Software Foundation.
-
-  This program is distributed in the hope 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
-  this program; if not, write to the Free Software Foundation, Inc.,
-  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
-
-  The full GNU General Public License is included in this distribution in
-  the file called "COPYING".
-
-  Contact Information
-  Openair Admin: openair_admin@eurecom.fr
-  Openair Tech : openair_tech@eurecom.fr
-  Forums       : http://forums.eurecom.fsr/openairinterface
-  Address      : Eurecom, 2229, route des cr锚tes, 06560 Valbonne Sophia Antipolis, France
-
-*******************************************************************************/
-
-/*! \file sched_dlsch.c
-* \brief DLSCH decoding thread (RTAI)
-* \author R. Knopp, F. Kaltenberger
-* \date 2011
-* \version 0.1
-* \company Eurecom
-* \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr
-* \note
-* \warning
-*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <sched.h>
-
-#include "rt_wrapper.h"
-
-#include <sys/mman.h>
-
-#include "PHY/types.h"
-#include "PHY/defs.h"
-#include "PHY/extern.h"
-#include "SCHED/defs.h"
-#include "SCHED/extern.h"
-
-#include "MAC_INTERFACE/extern.h"
-
-#ifdef CBMIMO1
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h"
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/extern.h"
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/defs.h"
-#endif // CBMIMO1
-
-#include "UTIL/LOG/vcd_signal_dumper.h"
-
-RTIME time0,time1;
-
-#define DEBUG_PHY
-
-/// Mutex for instance count on rx_pdsch scheduling 
-pthread_mutex_t rx_pdsch_mutex;
-/// Condition variable for rx_pdsch thread
-pthread_cond_t rx_pdsch_cond;
-
-pthread_t rx_pdsch_thread_var;
-pthread_attr_t attr_rx_pdsch_thread;
-
-// activity indicators for harq_pid's
-int rx_pdsch_instance_cnt;
-// process ids for cpu
-int rx_pdsch_cpuid;
-// subframe number for each harq_pid (needed to store ack in right place for UL)
-int rx_pdsch_slot;
-
-extern int oai_exit;
-extern pthread_mutex_t dlsch_mutex[8];
-extern int dlsch_instance_cnt[8];
-extern int dlsch_subframe[8];
-extern pthread_cond_t dlsch_cond[8];
-
-/** RX_PDSCH Decoding Thread */
-static void * rx_pdsch_thread(void *param) {
-
-  //unsigned long cpuid;
-  uint8_t rx_pdsch_thread_index = 0;
-  uint8_t dlsch_thread_index = 0;
-  uint8_t pilot1,pilot2,pilot3,harq_pid,subframe;
-  uint8_t last_slot;
-
-  uint8_t dual_stream_UE = 0;
-  uint8_t i_mod = 0;
-
-  RTIME time_in,time_out;
-#ifdef RTAI
-  RT_TASK *task;
-#endif
-
-  int m,eNB_id = 0;
-  int eNB_id_i = 1;
-  PHY_VARS_UE *phy_vars_ue = PHY_vars_UE_g[0];
-
-#ifdef RTAI
-  task = rt_task_init_schmod(nam2num("RX_PDSCH_THREAD"), 0, 0, 0, SCHED_FIFO, 0xF);
-
-  if (task==NULL) {
-    LOG_E(PHY,"[SCHED][RX_PDSCH] Problem starting rx_pdsch thread!!!!\n");
-    return 0;
-  }
-  else {
-    LOG_I(PHY,"[SCHED][RX_PDSCH] rx_pdsch_thread started for with id %p\n",task);
-  }
-#endif
-
-  mlockall(MCL_CURRENT | MCL_FUTURE);
-
-  //rt_set_runnable_on_cpuid(task,1);
-  //cpuid = rtai_cpuid();
-
-#ifdef HARD_RT
-  rt_make_hard_real_time();
-#endif
-
-  if (phy_vars_ue->lte_frame_parms.Ncp == 0) {  // normal prefix
-    pilot1 = 4;
-    pilot2 = 7;
-    pilot3 = 11;
-  }
-  else {  // extended prefix
-    pilot1 = 3;
-    pilot2 = 6;
-    pilot3 = 9;
-  }
-
-
-  while (!oai_exit){
-    vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_THREAD, 0);
-    if (pthread_mutex_lock(&rx_pdsch_mutex) != 0) {
-      LOG_E(PHY,"[SCHED][RX_PDSCH] error locking mutex.\n");
-    }
-    else {
-      while (rx_pdsch_instance_cnt < 0) {
-	pthread_cond_wait(&rx_pdsch_cond,&rx_pdsch_mutex);
-      }
-      
-      if (pthread_mutex_unlock(&rx_pdsch_mutex) != 0) {	
-	LOG_E(PHY,"[SCHED][RX_PDSCH] error unlocking mutex.\n");
-      }
-    }
-    
-    vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_THREAD, 1);
- 
-      last_slot = rx_pdsch_slot;
-      subframe = last_slot>>1;
-      // Important! assumption that PDCCH procedure of next SF is not called yet
-      harq_pid = phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid;
-      phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->G = get_G(&phy_vars_ue->lte_frame_parms,
-                                                                            phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->nb_rb,
-                                                                            phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc,
-                                                                            get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs),  
-									    phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Nl,
-									    phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
-                                                                            phy_vars_ue->frame,subframe);
-
-      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 > 0)) {
-	dual_stream_UE = 1;
-	eNB_id_i = phy_vars_ue->n_connected_eNB;
-	if (openair_daq_vars.use_ia_receiver == 2) {
-	  i_mod =  get_Qm(((phy_vars_ue->frame%1024)/3)%28);
-	} else {
-	  i_mod =  get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs);
-	}
-      }
-      else {
-          dual_stream_UE = 0;
-          eNB_id_i = eNB_id+1;
-          i_mod = 0;
-      }
-
-    if (oai_exit) break;
-
-    LOG_D(PHY,"[SCHED][RX_PDSCH] Frame %d, slot %d: Calling rx_pdsch_decoding with harq_pid %d\n",phy_vars_ue->frame,last_slot,harq_pid);
-
-    time_in = rt_get_time_ns();
-
-    // Check if we are in even or odd slot
-    if (last_slot%2) { // odd slots
-
-        // measure time
-        //time0 = rt_get_time_ns();
-        //        rt_printk("[SCHED][RX_PDSCH][before rx_pdsch] Frame %d, slot %d, time %llu\n",phy_vars_ue->frame,last_slot,rt_get_time_ns());
-        for (m=pilot2;m<phy_vars_ue->lte_frame_parms.symbols_per_tti;m++) {
-
-            rx_pdsch(phy_vars_ue,
-                     PDSCH,
-                     eNB_id,
-                     eNB_id_i,
-                     subframe,
-                     m,
-                     0,
-                     dual_stream_UE,
-                     i_mod,
-                     harq_pid);
-            
-        }
-        //        time1 = rt_get_time_ns();
-        //        rt_printk("[SCHED][RX_PDSCH] Frame %d, slot %d, start %llu, end %llu, proc time: %llu ns\n",phy_vars_ue->frame,last_slot,time0,time1,(time1-time0));
-
-        dlsch_thread_index = harq_pid;
-	
-        if (pthread_mutex_lock (&dlsch_mutex[dlsch_thread_index]) != 0) {               // Signal MAC_PHY Scheduler
-            LOG_E(PHY,"[UE  %d] ERROR pthread_mutex_lock\n",phy_vars_ue->Mod_id);     // lock before accessing shared resource
-            //	vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
-            //return(-1);
-        }
-        dlsch_instance_cnt[dlsch_thread_index]++;
-        dlsch_subframe[dlsch_thread_index] = subframe;
-        pthread_mutex_unlock (&dlsch_mutex[dlsch_thread_index]);
-        
-        if (dlsch_instance_cnt[dlsch_thread_index] == 0) {
-            if (pthread_cond_signal(&dlsch_cond[dlsch_thread_index]) != 0) {
-                LOG_E(PHY,"[UE  %d] ERROR pthread_cond_signal for dlsch_cond[%d]\n",phy_vars_ue->Mod_id,dlsch_thread_index);
-                //	  vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
-                //return(-1);
-            }
-        }
-        else {
-            LOG_W(PHY,"[UE  %d] DLSCH thread for dlsch_thread_index %d busy!!!\n",phy_vars_ue->Mod_id,dlsch_thread_index);
-            //	vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
-            //return(-1);
-        }
-        
-    } else { // even slots
-
-        for (m=phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols;m<pilot2;m++) { 
-
-            rx_pdsch(phy_vars_ue,
-                     PDSCH,
-                     eNB_id,
-                     eNB_id_i,
-                     subframe,
-                     m,
-                     (m==phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols)?1:0,   // first_symbol_flag
-                     dual_stream_UE,
-                     i_mod,
-                     harq_pid);
-        }
-    }    
-    
-    time_out = rt_get_time_ns();
-    
-    if (pthread_mutex_lock(&rx_pdsch_mutex) != 0) {
-        msg("[openair][SCHED][RX_PDSCH] error locking mutex.\n");
-    }
-    else {
-        rx_pdsch_instance_cnt--;
-        
-        if (pthread_mutex_unlock(&rx_pdsch_mutex) != 0) {	
-            msg("[openair][SCHED][RX_PDSCH] error unlocking mutex.\n");
-        }
-    }
-    
-  }
-
-#ifdef HARD_RT
-  rt_make_soft_real_time();
-#endif
-
-  LOG_D(PHY,"[openair][SCHED][RX_PDSCH] RX_PDSCH thread exiting\n");  
-
-  return 0;
-}
-
-int init_rx_pdsch_thread(void) {
-  
-  int error_code;
-  struct sched_param p;
-
-  pthread_mutex_init(&rx_pdsch_mutex,NULL);
-  
-  pthread_cond_init(&rx_pdsch_cond,NULL);
-
-  pthread_attr_init (&attr_rx_pdsch_thread);
-  pthread_attr_setstacksize(&attr_rx_pdsch_thread,OPENAIR_THREAD_STACK_SIZE);
-  
-  //attr_rx_pdsch_thread.priority = 1;
-
-  p.sched_priority = OPENAIR_THREAD_PRIORITY;
-  pthread_attr_setschedparam  (&attr_rx_pdsch_thread, &p);
-#ifndef RTAI_ISNT_POSIX
-  pthread_attr_setschedpolicy (&attr_rx_pdsch_thread, SCHED_FIFO);
-#endif
-
-  rx_pdsch_instance_cnt = -1;
-  rt_printk("[openair][SCHED][RX_PDSCH][INIT] Allocating RX_PDSCH thread\n");
-  error_code = pthread_create(&rx_pdsch_thread_var,
-                              &attr_rx_pdsch_thread,
-                              rx_pdsch_thread,
-                              0);
-
-  if (error_code!= 0) {
-    rt_printk("[openair][SCHED][RX_PDSCH][INIT] Could not allocate rx_pdsch_thread, error %d\n",error_code);
-    return(error_code);
-  }
-  else {
-    rt_printk("[openair][SCHED][RX_PDSCH][INIT] Allocate rx_pdsch_thread successful\n");
-    return(0);
-  }
-   
-}
-
-void cleanup_rx_pdsch_thread(void) {
-
-  rt_printk("[openair][SCHED][RX_PDSCH] Scheduling rx_pdsch_thread to exit\n");
-
-  rx_pdsch_instance_cnt = 0;
-  if (pthread_cond_signal(&rx_pdsch_cond) != 0)
-    rt_printk("[openair][SCHED][RX_PDSCH] ERROR pthread_cond_signal\n");
-  else
-    rt_printk("[openair][SCHED][RX_PDSCH] Signalled rx_pdsch_thread to exit\n");
-    
-  rt_printk("[openair][SCHED][RX_PDSCH] Exiting ...\n");
-  pthread_cond_destroy(&rx_pdsch_cond);
-  pthread_mutex_destroy(&rx_pdsch_mutex);
-}
diff --git a/targets/RTAI/USER/sched_ulsch.c b/targets/RTAI/USER/sched_ulsch.c
deleted file mode 100644
index e67295fa9c152af09f35af0d8db3c020513bcfa2..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/sched_ulsch.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/*******************************************************************************
-
-  Eurecom OpenAirInterface
-  Copyright(c) 1999 - 2011 Eurecom
-
-  This program is free software; you can redistribute it and/or modify it
-  under the terms and conditions of the GNU General Public License,
-  version 2, as published by the Free Software Foundation.
-
-  This program is distributed in the hope 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
-  this program; if not, write to the Free Software Foundation, Inc.,
-  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
-
-  The full GNU General Public License is included in this distribution in
-  the file called "COPYING".
-
-  Contact Information
-  Openair Admin: openair_admin@eurecom.fr
-  Openair Tech : openair_tech@eurecom.fr
-  Forums       : http://forums.eurecom.fsr/openairinterface
-  Address      : Eurecom, 2229, route des cr锚tes, 06560 Valbonne Sophia Antipolis, France
-
-*******************************************************************************/
-
-/*! \file sched_ulsch.c
-* \brief ULSCH decoding thread (RTAI)
-* \author R. Knopp, F. Kaltenberger
-* \date 2011
-* \version 0.1
-* \company Eurecom
-* \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr
-* \note
-* \warning
-*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <sched.h>
-
-#include "rt_wrapper.h"
-
-#include <sys/mman.h>
-
-#include "PHY/types.h"
-#include "PHY/defs.h"
-#include "PHY/extern.h"
-
-#include "SCHED/defs.h"
-
-#include "MAC_INTERFACE/extern.h"
-
-#ifdef CBMIMO1
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h"
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/extern.h"
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/defs.h"
-#endif // CBMIMO1
-
-
-
-#define DEBUG_PHY
-
-/// Mutex for instance count on ulsch scheduling 
-pthread_mutex_t ulsch_mutex[NUMBER_OF_UE_MAX];
-/// Condition variable for ulsch thread
-pthread_cond_t ulsch_cond[NUMBER_OF_UE_MAX];
-
-pthread_t ulsch_threads[NUMBER_OF_UE_MAX];
-pthread_attr_t attr_ulsch_threads;
-
-// activity indicators for harq_pid's
-int ulsch_instance_cnt[NUMBER_OF_UE_MAX];
-// process ids for cpu
-int ulsch_cpuid[NUMBER_OF_UE_MAX];
-// subframe number for each harq_pid (needed to store ack in right place for UL)
-int ulsch_subframe[NUMBER_OF_UE_MAX];
-
-extern int oai_exit;
-
-/*
-extern int ulsch_errors;
-extern int ulsch_received;
-extern int ulsch_errors_last;
-extern int ulsch_received_last;
-extern int ulsch_fer;
-extern int current_ulsch_cqi;
-*/
-
-/** ULSCH Decoding Thread */
-static void * ulsch_thread(void *param) {
-
-  //unsigned long cpuid;
-  unsigned int ulsch_thread_index = (unsigned int)param;
-
-  RTIME time_in,time_out;
-#ifdef RTAI
-  RT_TASK *task;
-  char ulsch_thread_name[64];
-#endif
-
-  int eNB_id = 0, UE_id = 0;
-  PHY_VARS_eNB *phy_vars_eNB = PHY_vars_eNB_g[eNB_id];
-
-  if ((ulsch_thread_index <0) || (ulsch_thread_index>NUMBER_OF_UE_MAX)) {
-    LOG_E(PHY,"[SCHED][ULSCH] Illegal ulsch_thread_index %d!!!!\n",ulsch_thread_index);
-    return 0;
-  }
-
-#ifdef RTAI
-  sprintf(ulsch_thread_name,"ULSCH_THREAD%d",ulsch_thread_index);
-
-  LOG_I(PHY,"[SCHED][ULSCH] starting ulsch_thread %s for process %d\n",
-	ulsch_thread_name,
-	ulsch_thread_index);
-
-  task = rt_task_init_schmod(nam2num(ulsch_thread_name), 0, 0, 0, SCHED_FIFO, 0xF);
-
-  if (task==NULL) {
-    LOG_E(PHY,"[SCHED][ULSCH] Problem starting ulsch_thread_index %d!!!!\n",ulsch_thread_index);
-    return 0;
-  }
-  else {
-    LOG_I(PHY,"[SCHED][ULSCH] ulsch_thread for process %d started with id %p\n",
-	  ulsch_thread_index,
-	  task);
-  }
-#endif
-
-  mlockall(MCL_CURRENT | MCL_FUTURE);
-
-  //rt_set_runnable_on_cpuid(task,1);
-  //cpuid = rtai_cpuid();
-
-#ifdef HARD_RT
-  rt_make_hard_real_time();
-#endif
-
-  //ulsch_cpuid[ulsch_thread_index] = cpuid;
-
-  while (!oai_exit){
-    
-    if (pthread_mutex_lock(&ulsch_mutex[ulsch_thread_index]) != 0) {
-      LOG_E(PHY,"[SCHED][ULSCH] error locking mutex.\n");
-    }
-    else {
-
-      while (ulsch_instance_cnt[ulsch_thread_index] < 0) {
-	pthread_cond_wait(&ulsch_cond[ulsch_thread_index],&ulsch_mutex[ulsch_thread_index]);
-      }
-
-      if (pthread_mutex_unlock(&ulsch_mutex[ulsch_thread_index]) != 0) {	
-	LOG_E(PHY,"[SCHED][ULSCH] error unlocking mutex.\n");
-      }
-    }
-
-    if (oai_exit) break;
-
-    LOG_D(PHY,"[SCHED][ULSCH] Frame %d: Calling ulsch_decoding with ulsch_thread_index = %d\n",phy_vars_eNB->frame,ulsch_thread_index);
-
-    time_in = rt_get_time_ns();
-
-    ulsch_decoding_procedures(ulsch_subframe[ulsch_thread_index]<<1,ulsch_thread_index,phy_vars_eNB,0);
-    
-    time_out = rt_get_time_ns();
-
-    if (pthread_mutex_lock(&ulsch_mutex[ulsch_thread_index]) != 0) {
-      msg("[openair][SCHED][ULSCH] error locking mutex.\n");
-    }
-    else {
-      ulsch_instance_cnt[ulsch_thread_index]--;
-      
-      if (pthread_mutex_unlock(&ulsch_mutex[ulsch_thread_index]) != 0) {	
-	msg("[openair][SCHED][ULSCH] error unlocking mutex.\n");
-      }
-    }
-  }
-
-#ifdef HARD_RT
-  rt_make_soft_real_time();
-#endif
-
-  msg("[openair][SCHED][ULSCH] ULSCH thread %d exiting\n",ulsch_thread_index);  
-
-  return 0;
-}
-
-int init_ulsch_threads(void) {
-  
-  int error_code, return_code=0;
-  struct sched_param p;
-  int ulsch_thread_index;
-
-  // later loop on all harq_pids, do 0 for now
-  for (ulsch_thread_index=0;ulsch_thread_index<NUMBER_OF_UE_MAX;ulsch_thread_index++) {
-
-    pthread_mutex_init(&ulsch_mutex[ulsch_thread_index],NULL);
-  
-    pthread_cond_init(&ulsch_cond[ulsch_thread_index],NULL);
-
-    pthread_attr_init (&attr_ulsch_threads);
-    pthread_attr_setstacksize(&attr_ulsch_threads,OPENAIR_THREAD_STACK_SIZE);
-  
-    //attr_ulsch_threads.priority = 1;
-
-    p.sched_priority = OPENAIR_THREAD_PRIORITY;
-    pthread_attr_setschedparam  (&attr_ulsch_threads, &p);
-#ifndef RTAI_ISNT_POSIX
-    pthread_attr_setschedpolicy (&attr_ulsch_threads, SCHED_FIFO);
-#endif
-    
-    ulsch_instance_cnt[ulsch_thread_index] = -1;
-    rt_printk("[openair][SCHED][ULSCH][INIT] Allocating ULSCH thread for ulsch_thread_index %d\n",ulsch_thread_index);
-    error_code = pthread_create(&ulsch_threads[ulsch_thread_index],
-				&attr_ulsch_threads,
-				ulsch_thread,
-				(void *)ulsch_thread_index);
-
-    if (error_code!= 0) {
-      rt_printk("[openair][SCHED][ULSCH][INIT] Could not allocate ulsch_thread %d, error %d\n",ulsch_thread_index,error_code);
-      return_code+=error_code;
-      //return(error_code);
-    }
-    else {
-      rt_printk("[openair][SCHED][ULSCH][INIT] Allocate ulsch_thread %d successful\n",ulsch_thread_index);
-      //return(0);
-    }
-  }
-  return(return_code);
-}
-
-void cleanup_ulsch_threads(void) {
-
-  int ulsch_thread_index;
-
-  for (ulsch_thread_index=0;ulsch_thread_index<NUMBER_OF_UE_MAX;ulsch_thread_index++) {
-
-    //  pthread_exit(&ulsch_threads[ulsch_thread_index]);
-    rt_printk("[openair][SCHED][ULSCH] Scheduling ulsch_thread %d to exit\n",ulsch_thread_index);
-
-    ulsch_instance_cnt[ulsch_thread_index] = 0;
-    if (pthread_cond_signal(&ulsch_cond[ulsch_thread_index]) != 0)
-      rt_printk("[openair][SCHED][ULSCH] ERROR pthread_cond_signal\n");
-    else
-      rt_printk("[openair][SCHED][ULSCH] Signalled ulsch_thread %d to exit\n",ulsch_thread_index);
-    
-    rt_printk("[openair][SCHED][ULSCH] Exiting ...\n");
-    pthread_cond_destroy(&ulsch_cond[ulsch_thread_index]);
-    pthread_mutex_destroy(&ulsch_mutex[ulsch_thread_index]);
-  }
-}
diff --git a/targets/RTAI/USER/sleeptest.c b/targets/RTAI/USER/sleeptest.c
deleted file mode 100644
index 5d1d8eec2cb91982978b2c332e4f22d099243a1b..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/sleeptest.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/*******************************************************************************
-
-  Eurecom OpenAirInterface
-  Copyright(c) 1999 - 2011 Eurecom
-
-  This program is free software; you can redistribute it and/or modify it
-  under the terms and conditions of the GNU General Public License,
-  version 2, as published by the Free Software Foundation.
-
-  This program is distributed in the hope 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
-  this program; if not, write to the Free Software Foundation, Inc.,
-  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
-
-  The full GNU General Public License is included in this distribution in
-  the file called "COPYING".
-
-  Contact Information
-  Openair Admin: openair_admin@eurecom.fr
-  Openair Tech : openair_tech@eurecom.fr
-  Forums       : http://forums.eurecom.fsr/openairinterface
-  Address      : Eurecom, 2229, route des cr锚tes, 06560 Valbonne Sophia Antipolis, 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 <pthread.h>
-
-#include "rt_wrapper.h"
-
-#define TIMER_ONESHOT_MODE
-#define FRAME_PERIOD 10000000ULL
-#define DAQ_PERIOD 500000ULL
-#define LTE_SLOTS_PER_FRAME  20
-
-#ifdef RTAI
-static SEM *mutex;
-//static CND *cond;
-
-static long int thread0;
-static long int thread1;
-//static long int sync_thread;
-#else
-#define OPENAIR_THREAD_STACK_SIZE    8192
-#define OPENAIR_THREAD_PRIORITY        255
-pthread_t thread0;
-//pthread_t thread1;
-pthread_attr_t attr_dlsch_threads;
-struct sched_param sched_param_dlsch;
-#endif
-
-int oai_exit = 0;
-
-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;
-
-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 frame=0,slot=0;
-
-/* 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;
-  RTIME now;
-#endif
-  unsigned char last_slot, next_slot;
-  RTIME time_in, time_diff;
-  int ret;
-
-#ifdef RTAI
-  task = rt_task_init_schmod(nam2num("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF);
-  printf("Started eNB thread (id %p)\n",task);
-#ifndef TIMER_ONESHOT_MODE
-  now = rt_get_time();
-  ret = rt_task_make_periodic(task, now, nano2count(DAQ_PERIOD));
-  if (ret!=0)
-    printf("Problem with periodic timer\n");
-#endif
-#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;
-
-  while (!oai_exit)
-    {
-      time_in = rt_get_time_ns();
-#ifdef TIMER_ONESHOT_MODE
-      ret = rt_sleep_ns(DAQ_PERIOD);
-      if (ret)
-	printf("eNB Frame %d, time %llu: rt_sleep_ns returned %d\n",frame,time_in,ret);
-#else
-      rt_task_wait_period();
-#endif
-      time_diff = rt_get_time_ns() - time_in;
-
-      if (time_diff > timing_info.time_max)
-	timing_info.time_max = time_diff;
-      if (time_diff < timing_info.time_min)
-	timing_info.time_min = time_diff;
-      timing_info.time_avg = (timing_info.time_avg*timing_info.n_samples + time_diff)/(timing_info.n_samples+1);
-      timing_info.n_samples++;
-
-      last_slot = (slot)%LTE_SLOTS_PER_FRAME;
-      if (last_slot <0)
-        last_slot+=20;
-      next_slot = (slot+3)%LTE_SLOTS_PER_FRAME;
-      
-      slot++;
-      if (slot==20) {
-        slot=0;
-        frame++;
-      }
-    }
-
-  printf("eNB_thread: finished, ran %d times.\n",frame);
-
-#ifdef HARD_RT
-  rt_make_soft_real_time();
-#endif
-
-  // clean task
-#ifdef RTAI
-  rt_task_delete(task);
-#endif
-  printf("Task deleted. returning\n");
-  return 0;
-}
-
-
-int main(int argc, char **argv) {
-
-#ifdef RTAI
-  RT_TASK *task;
-  RTIME period;
-#else
-  int error_code;
-#endif
-  int i,j,aa;
-  void *status;
-
-  // to make a graceful exit when ctrl-c is pressed
-  signal(SIGSEGV, signal_handler);
-  signal(SIGINT, signal_handler);
-
-#ifndef RTAI
-  check_clock();
-#endif
-
-  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
-#ifdef TIMER_ONESHOT_MODE
-  rt_set_oneshot_mode();
-  start_rt_timer(0);
-  printf("started RTAI timer in oneshot mode\n");
-#else
-  rt_set_periodic_mode();
-  period = start_rt_timer(nano2count(500000));
-  printf("started RTAI timer with period %llu ns\n",count2nano(period));
-#endif
-
-  printf("Init mutex\n");
-  //mutex = rt_get_adr(nam2num("MUTEX"));
-  mutex = rt_sem_init(nam2num("MUTEX"), 1);
-  if (mutex==0)
-    {
-      printf("Error init mutex\n");
-      exit(-1);
-    }
-  else
-    printf("mutex=%p\n",mutex);
-#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
-
-#ifdef RTAI
-    thread0 = rt_thread_create(eNB_thread, NULL, 100000000);
-#else
-    error_code = pthread_create(&thread0, &attr_dlsch_threads, eNB_thread, NULL);
-    if (error_code!= 0) {
-      printf("[lte-softmodem.c] Could not allocate eNB_thread, error %d\n",error_code);
-      return(error_code);
-    }
-    else {
-      printf("[lte-softmodem.c] Allocate eNB_thread successful\n");
-    }
-#endif
-    printf("eNB threads created\n");
-  
-
-
-  // wait for end of program
-  printf("TYPE <CTRL-C> TO TERMINATE\n");
-  //getchar();
-  while (oai_exit==0) {
-
-    printf("eNB Frame %d, hw_slot %d (time %llu): period %llu, sleep time (avg/min/max/samples) %llu / %llu / %llu / %d, ratio %f\n",frame,slot,rt_get_time_ns(),DAQ_PERIOD,timing_info.time_avg,timing_info.time_min,timing_info.time_max,timing_info.n_samples,(double)timing_info.time_avg/DAQ_PERIOD);
- 
-
-    rt_sleep_ns(100*FRAME_PERIOD);
-  }
-
-  // stop threads
-#ifdef RTAI
-    rt_thread_join(thread0); 
-#else
-    pthread_join(thread0,&status); 
-#endif
-
-#ifdef RTAI
-  stop_rt_timer();
-#endif
-
-  return 0;
-}
-
diff --git a/targets/RTAI/USER/stats.c b/targets/RTAI/USER/stats.c
deleted file mode 100644
index 57f7c837759fadb11d328c23d13c07cf5042758f..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/stats.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Form definition file generated by fdesign */
-
-#include <stdlib.h>
-#include "stats.h"
-
-
-/***************************************
- ***************************************/
-
-FD_stats_form *
-create_form_stats_form( void )
-{
-    FL_OBJECT *obj;
-    FD_stats_form *fdui = fl_malloc( sizeof *fdui );
-
-    fdui->vdata = fdui->cdata = NULL;
-    fdui->ldata = 0;
-
-    fdui->stats_form = fl_bgn_form( FL_NO_BOX, 1115, 659 );
-
-    obj = fl_add_box( FL_UP_BOX, 0, 0, 1115, 659, "" );
-
-    fdui->stats_text = obj = fl_add_text( FL_NORMAL_TEXT, 60, 50, 1000, 580, "test" );
-    fl_set_object_lsize( obj, FL_TINY_SIZE );
-
-    fl_end_form( );
-
-    fdui->stats_form->fdui = fdui;
-
-    return fdui;
-}
diff --git a/targets/RTAI/USER/stats.fd b/targets/RTAI/USER/stats.fd
deleted file mode 100644
index 2bd254c59a2ef1e6a8ef83104ebb976992eb0aa7..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/stats.fd
+++ /dev/null
@@ -1,52 +0,0 @@
-Magic: 14000
-
-Internal Form Definition File
-    (do not change)
-
-Number of forms: 1
-Unit of measure: FL_COORD_PIXEL
-
-=============== FORM ===============
-Name: stats_form
-Width: 1115
-Height: 659
-Number of Objects: 2
-
---------------------
-class: FL_BOX
-type: UP_BOX
-box: 0 0 1115 659
-boxtype: FL_UP_BOX
-colors: FL_COL1 FL_COL1
-alignment: FL_ALIGN_CENTER
-style: FL_NORMAL_STYLE
-size: FL_DEFAULT_SIZE
-lcol: FL_BLACK
-label: 
-shortcut: 
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: 
-callback: 
-argument: 
-
---------------------
-class: FL_TEXT
-type: NORMAL_TEXT
-box: 60 50 1000 580
-boxtype: FL_FLAT_BOX
-colors: FL_COL1 FL_MCOL
-alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
-style: FL_NORMAL_STYLE
-size: FL_TINY_SIZE
-lcol: FL_BLACK
-label: test
-shortcut: 
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: stats_text
-callback: 
-argument: 
-
-==============================
-create_the_forms
diff --git a/targets/RTAI/USER/stats.h b/targets/RTAI/USER/stats.h
deleted file mode 100644
index eb30e507a955dd445463f216bd9dc6b8fed93cb1..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/stats.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Header file generated by fdesign on Thu Jun 14 17:53:15 2012 */
-
-#ifndef FD_stats_form_h_
-#define FD_stats_form_h_
-
-#include <forms.h>
-
-/* Callbacks, globals and object handlers */
-
-
-
-/* Forms and Objects */
-
-typedef struct {
-    FL_FORM   * stats_form;
-    void      * vdata;
-    char      * cdata;
-    long        ldata;
-    FL_OBJECT * stats_text;
-} FD_stats_form;
-
-extern FD_stats_form * create_form_stats_form( void );
-
-#endif /* FD_stats_form_h_ */
diff --git a/targets/RTAI/USER/synctest.c b/targets/RTAI/USER/synctest.c
deleted file mode 100644
index b34ef15d2b7e5093b1683c357532e3f5f42a7f2f..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/synctest.c
+++ /dev/null
@@ -1,1285 +0,0 @@
-/*******************************************************************************
-
-  Eurecom OpenAirInterface
-  Copyright(c) 1999 - 2011 Eurecom
-
-  This program is free software; you can redistribute it and/or modify it
-  under the terms and conditions of the GNU General Public License,
-  version 2, as published by the Free Software Foundation.
-
-  This program is distributed in the hope 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
-  this program; if not, write to the Free Software Foundation, Inc.,
-  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
-
-  The full GNU General Public License is included in this distribution in
-  the file called "COPYING".
-
-  Contact Information
-  Openair Admin: openair_admin@eurecom.fr
-  Openair Tech : openair_tech@eurecom.fr
-  Forums       : http://forums.eurecom.fsr/openairinterface
-  Address      : Eurecom, 2229, route des cr锚tes, 06560 Valbonne Sophia Antipolis, 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"
-
-#include "PHY/types.h"
-//#include "PHY/defs.h"
-#include "openair0_lib.h"
-
-#include "UTIL/LOG/log.h"
-#include "UTIL/LOG/vcd_signal_dumper.h"
-
-#if defined(ENABLE_ITTI)
-# include "intertask_interface_init.h"
-# include "timer.h"
-# if defined(ENABLE_USE_MME)
-#   include "s1ap_eNB.h"
-#   include "sctp_eNB_task.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];
-unsigned char scope_enb_num_ue = 1;
-#endif //XFORMS
-
-#ifdef EMOS
-#include <gps.h>
-#include <rtai_fifos.h>
-
-//#define CHANSOUNDER_FIFO_SIZE 10485760 // 10 Mbytes FIFO
-#define CHANSOUNDER_FIFO_SIZE 20971520  // 20 Mbytes FIFO
-#define CHANSOUNDER_FIFO_MINOR 4               // minor of the FIFO device - this is /dev/rtf3
-#define CHANSOUNDER_FIFO_DEV "/dev/rtf4"
-#endif
-
-#define TIMER_ONESHOT_MODE
-#define FRAME_PERIOD 100000000ULL
-#define DAQ_PERIOD 66667ULL
-#define LTE_SLOTS_PER_FRAME  20
-#define RESAMPLING_FACTOR 2
-#define SAMPLES_PER_SLOT (15360/(1<<RESAMPLING_FACTOR))
-#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 long int thread0;
-static long int thread1;
-//static long int sync_thread;
-#else
-#define OPENAIR_THREAD_STACK_SIZE    8192
-#define OPENAIR_THREAD_PRIORITY        255
-pthread_t thread0;
-//pthread_t thread1;
-pthread_attr_t attr_dlsch_threads;
-struct sched_param sched_param_dlsch;
-#endif
-
-pthread_t  thread2; //xforms
-pthread_t  thread3; //emos
-
-/*
-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;
-
-int oai_exit = 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};
-
-int fs4_test=0;
-char UE_flag=0;
-uint8_t  eNB_id=0,UE_id=0;
-
-uint32_t 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 int16_t* sync_corr_ue0;
-extern int16_t prach_ifft[4][1024*2];
-
-
-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[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);
-
-unsigned int build_rflocal(int txi, int txq, int rxi, int 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);
-}
-
-#ifdef XFORMS
-void *scope_thread(void *arg) {
-    int16_t prach_corr[1024], i;
-    char stats_buffer[16384];
-    //FILE *UE_stats, *eNB_stats;
-    int len=0;
-    struct sched_param sched_param;
-
-    sched_param.sched_priority = sched_get_priority_min(SCHED_FIFO)+1; 
-    sched_setscheduler(0, SCHED_FIFO,&sched_param);
-
-    printf("Scope thread has priority %d\n",sched_param.sched_priority);
-    
-    /*
-      if (UE_flag==1) 
-      UE_stats  = fopen("UE_stats.txt", "w");
-      else 
-      eNB_stats = fopen("eNB_stats.txt", "w");
-    */
-    
-    while (!oai_exit) {
-        if (UE_flag==1) {
-            len = dump_ue_stats (PHY_vars_UE_g[0], stats_buffer, 0, mode,rx_input_level_dBm);
-            fl_set_object_label(form_stats->stats_text, stats_buffer);
-            //rewind (UE_stats);
-            //fwrite (stats_buffer, 1, len, UE_stats);
-            
-            phy_scope_UE(form_ue[UE_id], 
-                         PHY_vars_UE_g[UE_id],
-                         eNB_id,
-                         UE_id,7);
-            
-        } else {
-            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);
-    }
-    
-    //fclose (UE_stats);
-    //fclose (eNB_stats);
-    
-    pthread_exit((void*)arg);
-}
-#endif
-
-int dummy_tx_buffer[3840*4] __attribute__((aligned(16)));
-
-#ifdef EMOS
-#define NO_ESTIMATES_DISK 20 //No. of estimates that are aquired before dumped to disk
-int channel_buffer_size =  SAMPLES_PER_SLOT*4; //one slot, 4 byte per sample
-
-
-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;
-
-  struct gps_data_t *gps_data = NULL;
-  struct gps_fix_t dummy_gps_data;
-
-  struct sched_param sched_param;
-  int ret;
-  
-  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);
-
-  memset(&dummy_gps_data,1,sizeof(struct gps_fix_t));
-  
-#if GPSD_API_MAJOR_VERSION>=5
-  ret = gps_open("127.0.0.1","2947",gps_data);
-  if (ret!=0)
-#else
-  gps_data = gps_open("127.0.0.1","2947");
-  if (gps_data == NULL) 
-#endif
-    {
-      printf("[EMOS] Could not open GPS\n");
-      //exit(-1);
-    }
-#if GPSD_API_MAJOR_VERSION>=4
-  else if (gps_stream(gps_data, WATCH_ENABLE,NULL) != 0)
-#else
-  else if (gps_query(gps_data, "w+x") != 0)
-#endif
-    {
-      //sprintf(tmptxt,"Error sending command to GPS, gps_data = %x", gps_data);
-      printf("[EMOS] Error sending command to GPS\n");
-      //exit(-1);
-    }
-  else 
-    printf("[EMOS] Opened GPS, gps_data=%p\n", gps_data);
-  
-  /*
-  if (UE_flag==0)
-    channel_buffer_size = sizeof(fifo_dump_emos_eNB);
-  else
-    channel_buffer_size = sizeof(fifo_dump_emos_UE);
-  */
-
-  // allocate memory for NO_FRAMES_DISK channes estimations
-  fifo2file_buffer = malloc(NO_ESTIMATES_DISK*channel_buffer_size);
-  fifo2file_ptr = fifo2file_buffer;
-
-  if (fifo2file_buffer == NULL)
-    {
-      printf("[EMOS] Cound not allocate memory for fifo2file_buffer\n");
-      exit(EXIT_FAILURE);
-    }
-
-  if ((fifo = open(CHANSOUNDER_FIFO_DEV, O_RDONLY)) < 0)
-    {
-      fprintf(stderr, "[EMOS] Error opening the fifo\n");
-      exit(EXIT_FAILURE);
-    }
-
-
-  time(&starttime_tmp);
-  localtime_r(&starttime_tmp,&starttime);
-  snprintf(dumpfile_name,1024,"/tmp/%s_data_%d%02d%02d_%02d%02d%02d.EMOS",
-	   (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)
-    {
-      fprintf(stderr, "[EMOS] Error opening dumpfile %s\n",dumpfile_name);
-      exit(EXIT_FAILURE);
-    }
-
-
-  printf("[EMOS] starting dump, channel_buffer_size=%d ...\n",channel_buffer_size);
-  while (!oai_exit)
-    {
-      bytes = rtf_read_timed(fifo, fifo2file_ptr, channel_buffer_size,100);
-      if (bytes<=0)
-	continue;
-
-      /*
-      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);
-      else
-	printf("UE: count %d, frame %d, read: %d bytes from the fifo\n",counter, ((fifo_dump_emos_UE*)fifo2file_ptr)->frame_rx,bytes);
-      */
-
-      fifo2file_ptr += channel_buffer_size;
-      counter ++;
-      total_bytes += bytes;
-
-      if ((counter%NO_ESTIMATES_DISK)==0)
-        {
-          //reset stuff
-          fifo2file_ptr = fifo2file_buffer;
-          //counter = 0;
-
-          //flush buffer to disk
-          if (fwrite(fifo2file_buffer, sizeof(char), NO_ESTIMATES_DISK*channel_buffer_size, dumpfile_id) != NO_ESTIMATES_DISK*channel_buffer_size)
-            {
-              fprintf(stderr, "[EMOS] Error writing to dumpfile\n");
-              exit(EXIT_FAILURE);
-            }
-	  /*
-	  if (gps_data)
-	    {
-	      if (gps_poll(gps_data) != 0) {
-		printf("[EMOS] problem polling data from gps\n");
-	      }
-	      else {
-		printf("[EMOS] lat %g, lon %g\n",gps_data->fix.latitude,gps_data->fix.longitude);
-	      }
-	      if (fwrite(&(gps_data->fix), sizeof(char), sizeof(struct gps_fix_t), dumpfile_id) != sizeof(struct gps_fix_t))
-		{
-		  printf("[EMOS] Error writing to dumpfile, stopping recording\n");
-		  exit(EXIT_FAILURE);
-		}
-	    }
-	  else
-	    {
-	      printf("[EMOS] WARNING: No GPS data available, storing dummy packet\n");
-	      if (fwrite(&(dummy_gps_data), sizeof(char), sizeof(struct gps_fix_t), dumpfile_id) != sizeof(struct gps_fix_t))
-		{
-		  printf("[EMOS] Error writing to dumpfile, stopping recording\n");
-		  exit(EXIT_FAILURE);
-		}
-	    } 
-	  */
-        }
-      if ((counter%2000)==0)
-	printf("[EMOS] count %d (%d sec), total bytes wrote %llu\n", counter, counter/2000, total_bytes);
-    }
-  
-  free(fifo2file_buffer);
-  fclose(dumpfile_id);
-  close(fifo);
-  
-  pthread_exit((void*) arg);
-
-}
-#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;
-  RTIME now;
-#endif
-  unsigned char slot=0,last_slot, next_slot;
-  int hw_slot,frame=0;
-  unsigned int msg1;
-  unsigned int aa,slot_offset, slot_offset_F;
-  int diff;
-  int delay_cnt;
-  RTIME time_in, time_diff;
-  int mbox_target=0,mbox_current=0;
-  int i,ret;
-  int tx_offset;
-  int bytes;
-
-#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);
-#ifndef TIMER_ONESHOT_MODE
-  now = rt_get_time();
-  ret = rt_task_make_periodic(task, now, nano2count(500000LL));
-  if (ret!=0)
-    LOG_E(HW,"Problem with periodic timer\n");
-#endif
-#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;
-
-  while (!oai_exit)
-    {
-      hw_slot = (((((volatile unsigned int *)DAQ_MBOX)[0]+1)%150)<<1)/15;
-      //LOG_D(HW,"eNB frame %d, time %llu: slot %d, hw_slot %d (mbox %d)\n",frame,rt_get_time_ns(),slot,hw_slot,((unsigned int *)DAQ_MBOX)[0]);
-      //this is the mbox counter where we should be 
-      //mbox_target = ((((slot+1)%20)*15+1)>>1)%150;
-      mbox_target = mbox_bounds[slot];
-      //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;
-
-      vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLES_SLOT_NUMBER_ENB, slot);
-      vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_ENB, frame);
-      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);
-      
-      time_in = rt_get_time_ns();
-      //LOG_D(HW,"eNB Frame %d delaycnt %d : hw_slot %d (%d), slot %d, (slot+1)*15=%d, diff %d, time %llu\n",frame,delay_cnt,hw_slot,((unsigned int *)DAQ_MBOX)[0],slot,(((slot+1)*15)>>1),diff,time_in);
-      //LOG_D(HW,"eNB Frame %d, time %llu: sleeping for %llu (slot %d, hw_slot %d, diff %d, mbox %d, delay_cnt %d)\n", frame, time_in, diff*DAQ_PERIOD,slot,hw_slot,diff,((volatile unsigned int *)DAQ_MBOX)[0],delay_cnt);
-      vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_RT_SLEEP,1);
-#ifdef TIMER_ONESHOT_MODE
-      //ret = rt_sleep_ns(DAQ_PERIOD * (slot%4==0?6:8));
-      ret = rt_sleep_ns(500000);
-      if (ret)
-	LOG_D(HW,"eNB Frame %d, time %llu: rt_sleep_ns returned %d\n",frame, time_in);
-#else
-      rt_task_wait_period();
-#endif
-      vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_RT_SLEEP,0);
- 
-      //hw_slot = (((((volatile unsigned int *)DAQ_MBOX)[0]+1)%150)<<1)/15;
-      //LOG_D(HW,"eNB Frame %d : hw_slot %d, time %llu\n",frame,hw_slot,rt_get_time_ns());
- 
-      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;
-      
-
-      last_slot = (slot)%LTE_SLOTS_PER_FRAME;
-      if (last_slot <0)
-        last_slot+=20;
-      next_slot = (slot+3)%LTE_SLOTS_PER_FRAME;
-      
-      slot++;
-      if (slot==20) {
-        slot=0;
-        frame++;
-      }
-
-      if (frame==1000)
-	oai_exit=1;
-
-#if defined(ENABLE_ITTI)
-      itti_update_lte_time(frame, slot);
-#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_task_delete(task);
-#endif
-  LOG_D(HW,"Task deleted. returning\n");
-  return 0;
-}
-
-
-int main(int argc, char **argv) {
-
-#ifdef RTAI
-  RT_TASK *task;
-  RTIME period;
-#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 + 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};
-  uint32_t rxgain[4]      = {20,20,20,20};
-  uint32_t txgain[4]      = {20,20,20,20};
-
-  uint16_t Nid_cell = 0;
-  uint8_t  cooperation_flag=0, transmission_mode=1, abstraction_flag=0;
-  uint8_t beta_ACK=0,beta_RI=0,beta_CQI=2;
-
-  int c;
-  char do_forms=0;
-  unsigned int fd;
-  unsigned int tcxo = 114;
-
-  int amp;
-  uint8_t 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 ant_offset=0;
-
-  int error_code;
-  char *itti_dump_file = NULL;
-
-  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:K:O:ST:UdF:V",long_options,NULL)) != -1)
-    {
-      switch (c)
-        {
-	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 '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':
-#if defined(ENABLE_USE_MME)
-          EPC_MODE_ENABLED = 1;
-          if (optarg == NULL) /* No IP address provided: use localhost */
-          {
-            memcpy(&EPC_MODE_MME_ADDRESS[0], "127.0.0.1", 10);
-          } else {
-            uint8_t ip_length = strlen(optarg) + 1;
-            memcpy(&EPC_MODE_MME_ADDRESS[0], optarg,
-            ip_length > 16 ? 16 : ip_length);
-          }
-#else
-          printf("You enabled mme mode without s1ap compiled...\n");
-#endif
-          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 defined(ENABLE_ITTI)
-  itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, itti_dump_file);
-
-# if defined(ENABLE_USE_MME)
-  if (itti_create_task(TASK_SCTP, sctp_eNB_task, NULL) < 0) {
-    LOG_E(EMU, "Create task failed");
-    LOG_D(EMU, "Initializing SCTP task interface: FAILED\n");
-    return -1;
-  }
-  if (itti_create_task(TASK_S1AP, s1ap_eNB_task, NULL) < 0) {
-    LOG_E(EMU, "Create task failed");
-    LOG_D(EMU, "Initializing S1AP task interface: FAILED\n");
-    return -1;
-  }
-# endif
-
-  if (itti_create_task(TASK_L2L1, l2l1_task, NULL) < 0) {
-      LOG_E(EMU, "Create task failed");
-      LOG_D(EMU, "Initializing L2L1 task interface: FAILED\n");
-      return -1;
-  }
-
-  // Handle signals until all tasks are terminated
-//   itti_wait_tasks_end();
-#endif
-
-  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
-
-    g_log->log_component[HW].level = LOG_DEBUG;
-    g_log->log_component[HW].flag  = LOG_HIGH;
-#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;
-
-
-  // Initialize card
-  ret = openair0_open();
-  if ( ret != 0 ) {
-          if (ret == -1)
-              printf("Error opening /dev/openair0");
-          if (ret == -2)
-              printf("Error mapping bigshm");
-          if (ret == -3)
-              printf("Error mapping RX or TX buffer");
-          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   = !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] = RESAMPLING_FACTOR;
- 
-  /*
-  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
-  }
-  */
-
-  ant_offset = 0;
-  for (ant=0; ant<4; ant++) {
-    if (ant==ant_offset) {
-      //if (1) {
-      p_exmimo_config->rf.rf_mode[ant] = rf_mode_base;
-      //p_exmimo_config->rf.rf_mode[ant] += (TXEN + DMAMODE_TX);
-      p_exmimo_config->rf.rf_mode[ant] += (RXEN + DMAMODE_RX);
-    }
-    else {
-      p_exmimo_config->rf.rf_mode[ant] = 0;
-      carrier_freq[ant] = 0; //this turns off all other LIMEs
-    }
-  }
-
-  for (ant = 0; ant<4; ant++) { 
-    p_exmimo_config->rf.do_autocal[ant] = 1;
-    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 if ((carrier_freq[ant] >= 1900000000) && (carrier_freq[ant] <= 2000000000)) {
-      p_exmimo_config->rf.rf_vcocal[ant]  = rf_vcocal[ant];
-      p_exmimo_config->rf.rffe_band_mode[ant] = B19G_TDD;	    
-    }
-    else {
-      p_exmimo_config->rf.rf_vcocal[ant]  = rf_vcocal[ant];
-      p_exmimo_config->rf.rffe_band_mode[ant] = 0;	    
-    }
-
-    p_exmimo_config->rf.rffe_gain_txlow[ant] = 31;
-    p_exmimo_config->rf.rffe_gain_txhigh[ant] = 31;
-    p_exmimo_config->rf.rffe_gain_rxfinal[ant] = 52;
-    p_exmimo_config->rf.rffe_gain_rxlow[ant] = 31;
-  }
-
-
-    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 = 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;
-
-#ifdef EMOS
-  error_code = rtf_create(CHANSOUNDER_FIFO_MINOR,CHANSOUNDER_FIFO_SIZE);
-  if (error_code==0)
-    printf("[OPENAIR][SCHED][INIT] Created EMOS FIFO %d\n",CHANSOUNDER_FIFO_MINOR);
-  else if (error_code==ENODEV)
-    printf("[OPENAIR][SCHED][INIT] Problem: EMOS FIFO %d is greater than or equal to RTF_NO\n",CHANSOUNDER_FIFO_MINOR);
-  else if (error_code==ENOMEM)
-    printf("[OPENAIR][SCHED][INIT] Problem: cannot allocate memory for EMOS FIFO %d\n",CHANSOUNDER_FIFO_MINOR);
-  else 
-    printf("[OPENAIR][SCHED][INIT] Problem creating EMOS FIFO %d, error_code %d\n",CHANSOUNDER_FIFO_MINOR,error_code);
-#endif
-
-  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
-#ifdef TIMER_ONESHOT_MODE
-  rt_set_oneshot_mode();
-  start_rt_timer(0);
-  printf("started RTAI timer inoneshot mode\n");
-#else
-  rt_set_periodic_mode();
-  period = start_rt_timer(nano2count(500000));
-  printf("started RTAI timer with period %llu ns\n",count2nano(period));
-#endif
-
-  printf("Init mutex\n");
-  //mutex = rt_get_adr(nam2num("MUTEX"));
-  mutex = rt_sem_init(nam2num("MUTEX"), 1);
-  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
-  if (UE_flag!=1)
-      openair0_start_rt_acquisition(card);
-
-
-#ifdef XFORMS
-  if (do_forms==1) {
-      fl_initialize (&argc, argv, NULL, 0, 0);
-      form_stats = create_form_stats_form();
-      if (UE_flag==1) {
-          form_ue[UE_id] = create_lte_phy_scope_ue();
-          sprintf (title, "LTE DL SCOPE UE");
-          fl_show_form (form_ue[UE_id]->lte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
-      } else {
-            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");
-      if (UE_flag==0) {
-          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");
-              }
-          }
-      }
-      else {
-          if (openair_daq_vars.use_ia_receiver) {
-              fl_set_button(form_ue[UE_id]->button_0,1);
-              fl_set_object_label(form_ue[UE_id]->button_0, "IA Receiver ON");
-          }
-          else {
-              fl_set_button(form_ue[UE_id]->button_0,0);
-              fl_set_object_label(form_ue[UE_id]->button_0, "IA Receiver OFF");
-          }
-      }
-
-      ret = pthread_create(&thread2, NULL, scope_thread, NULL);
-      printf("Scope thread created, ret=%d\n",ret);
-    }
-#endif
-
-#ifdef EMOS
-  ret = pthread_create(&thread3, NULL, emos_thread, NULL);
-  printf("EMOS 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
-  if (UE_flag == 1) {
-    /*
-#ifdef RTAI
-    thread1 = rt_thread_create(UE_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");
-    }
-#endif
-#ifdef DLSCH_THREAD
-    init_rx_pdsch_thread();
-    rt_sleep_ns(FRAME_PERIOD/10);
-    init_dlsch_threads();
-#endif
-    printf("UE threads created\n");
-    */
-  }
-  else {
-#ifdef RTAI
-    thread0 = rt_thread_create(eNB_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");
-    }
-#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);
-
-  // 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);
-        if (UE_flag==1) {
-            fl_hide_form(form_ue[UE_id]->lte_phy_scope_ue);
-            fl_free_form(form_ue[UE_id]->lte_phy_scope_ue);
-        } else {
-            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
-  if (UE_flag == 1) {
-    /*
-#ifdef RTAI
-    rt_thread_join(thread1); 
-#else
-    pthread_join(thread1,&status); 
-#endif
-#ifdef DLSCH_THREAD
-    cleanup_dlsch_threads();
-    cleanup_rx_pdsch_thread();
-#endif
-    */
-  }
-  else {
-#ifdef RTAI
-    rt_thread_join(thread0); 
-#else
-    pthread_join(thread0,&status); 
-#endif
-#ifdef ULSCH_THREAD
-    cleanup_ulsch_threads();
-#endif
-  }
-
-#ifdef OPENAIR2
-  //cleanup_pdcp_thread();
-#endif
-
-#ifdef RTAI
-  stop_rt_timer();
-#endif
-
-  printf("stopping card\n");
-  openair0_stop(card);
-  printf("closing openair0_lib\n");
-  openair0_close();
-
-#ifdef EMOS
-  printf("waiting for EMOS thread\n");
-  pthread_cancel(thread3);
-  pthread_join(thread3,&status);
-#endif
-
-#ifdef EMOS
-  error_code = rtf_destroy(CHANSOUNDER_FIFO_MINOR);
-  printf("[OPENAIR][SCHED][CLEANUP] EMOS FIFO closed, error_code %d\n", error_code);
-#endif
-
-  if (ouput_vcd)
-    vcd_signal_dumper_close();
-
-  logClean();
-
-  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[ant] = 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] = (int32_t*) openair0_exmimo_pci[card].adc_head[i+carrier];
-
-
-      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] = (int32_t*) openair0_exmimo_pci[card].dac_head[i+carrier];
-
-      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,j;
-
-  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];
-        
-        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/RTAI/USER/ue1rflo.lime b/targets/RTAI/USER/ue1rflo.lime
deleted file mode 100644
index caa1b2da2a5821c8b3a2e892059345fb4e6955e4..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/ue1rflo.lime
+++ /dev/null
@@ -1 +0,0 @@
-8254752 8254752 8254752 8254752
diff --git a/targets/RTAI/USER/ue1rxg.lime b/targets/RTAI/USER/ue1rxg.lime
deleted file mode 100644
index 64a66e18a213a9f1e826795da0f18ed898ee7aa6..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/ue1rxg.lime
+++ /dev/null
@@ -1,10 +0,0 @@
-# this file contains the calibration values to compute the RSSI
-# we can use three different gain stages (high, low, med) as well as a gain factor for fine tuning
-# the three lines in this file gives the total rx gain in dB for the three gain stages if the rx gain is set to max 30dB
-# high gain
-128 128 128 128
-# med gain
-127 127 127 127
-# low gain
-120 120 120 120
-
diff --git a/targets/RTAI/USER/ue1txg.lime b/targets/RTAI/USER/ue1txg.lime
deleted file mode 100644
index 4a9fa02b4abfaf1543f86eaf79cd7b66aec871d3..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/ue1txg.lime
+++ /dev/null
@@ -1,6 +0,0 @@
-# For the TX, we need to set the tx gain values such that the transmitted power on all antennas is the same
-# don't put any blank lines in this file
-# tx gain (dB)
-25 25 25 25 
-# total tx power (dBm)
-5
diff --git a/targets/RTAI/USER/ue2rflo.lime b/targets/RTAI/USER/ue2rflo.lime
deleted file mode 100644
index 0c7fb9956517c4ac27abdf4bab443fb38f0fa1e1..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/ue2rflo.lime
+++ /dev/null
@@ -1 +0,0 @@
-8254871 8255752 8257340 8257340
diff --git a/targets/RTAI/USER/ue2rxg.lime b/targets/RTAI/USER/ue2rxg.lime
deleted file mode 100644
index ba4c9e2bf6b3a53237c9f3ccd93df836e0854491..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/ue2rxg.lime
+++ /dev/null
@@ -1,10 +0,0 @@
-# this file contains the calibration values to compute the RSSI
-# we can use three different gain stages (high, low, med) as well as a gain factor for fine tuning
-# the three lines in this file gives the total rx gain in dB for the three gain stages if the rx gain is set to 30dB
-# high gain
-108 108 108 108
-# med gain
-127 127 127 127
-# low gain
-120 120 120 120
-
diff --git a/targets/RTAI/USER/ue2txg.lime b/targets/RTAI/USER/ue2txg.lime
deleted file mode 100644
index d8a3e875f9adca36cf9a56faa9da90bf5765c696..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/ue2txg.lime
+++ /dev/null
@@ -1,6 +0,0 @@
-# For the TX, we need to set the tx gain values such that the transmitted power on all antennas is the same
-# don't put any blank lines in this file
-# tx gain (dB)
-25 25 25 25 
-# total tx power (dBm)
-4
diff --git a/targets/RTAI/USER/zeptorflo.lime b/targets/RTAI/USER/zeptorflo.lime
deleted file mode 100644
index 9c5755d407ffe3a32baf88a2c33070deb1488af9..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/zeptorflo.lime
+++ /dev/null
@@ -1 +0,0 @@
-8255000 8255000 8255000 8255000
diff --git a/targets/RTAI/USER/zeptorxg.lime b/targets/RTAI/USER/zeptorxg.lime
deleted file mode 100644
index b296e67b71c16fd7059f0f2a1f84d44f7dc3b2b4..0000000000000000000000000000000000000000
--- a/targets/RTAI/USER/zeptorxg.lime
+++ /dev/null
@@ -1,3 +0,0 @@
-133 133 133 133
-127 127 127 127
-120 120 120 120