diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000..c75f8fa464
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,32 @@
+job1:
+ script:
+ - echo $PWD
+ - echo $USER
+ - echo $OAI_USER
+ - echo $OAI_EXTRA_ARGS
+ - echo $NFS_SHARE_DIR
+ - echo $EXTERNAL_SHARE_DIR
+ - echo $SHELL
+ - git rev-parse --abbrev-ref HEAD
+ - git_head=`git rev-parse HEAD`
+ - echo $git_head
+ - tmp=`git show-ref --head | grep $git_head`
+ - tmp=(${tmp///// })
+ - git_branch=${tmp[@]:(-1)}
+ - echo $git_branch
+ - source oaienv
+ - echo $OPENAIR_DIR
+ - NFS_TEST_RESULTS_DIR=$NFS_SHARE_DIR/$git_branch/$git_head
+ - EXTERNAL_SHARE_RESULTS_DIR=$EXTERNAL_SHARE_DIR/$git_branch/$git_head
+ - echo $NFS_TEST_RESULTS_DIR
+ - echo $EXTERNAL_SHARE_RESULTS_DIR
+ - echo $NRUNS_LTE_SOFTMODEM
+ - echo $TIMEOUT_CMD
+ - mkdir -p $OPENAIR_DIR/cmake_targets/autotests/log
+ - python $OPENAIR_DIR/cmake_targets/autotests/run_exec_lte-softmodem_tests.py -c -5GRepoHeadVersion $git_head -n $NFS_SHARE_DIR -u $OAI_USER -p $OAI_PASS $OAI_EXTRA_ARGS -g "$OAI_TEST_CASE_GROUP">& $OPENAIR_DIR/cmake_targets/autotests/python_autotest_cleanup.log
+ - python $OPENAIR_DIR/cmake_targets/autotests/run_exec_lte-softmodem_tests.py -r -5GRepoHeadVersion $git_head -n $NFS_SHARE_DIR -u $OAI_USER -p $OAI_PASS `echo $OAI_EXTRA_ARGS` -g "$OAI_TEST_CASE_GROUP" --nrun_lte_softmodem $NRUNS_LTE_SOFTMODEM --timeout_cmd $TIMEOUT_CMD >& $OPENAIR_DIR/cmake_targets/autotests/python_autotest.log
+ - mv $OPENAIR_DIR/cmake_targets/autotests/python_autotest.log $OPENAIR_DIR/cmake_targets/autotests/log/python_autotest.log
+ - mv $OPENAIR_DIR/cmake_targets/autotests/python_autotest_cleanup.log $OPENAIR_DIR/cmake_targets/autotests/log/python_autotest_cleanup.log
+ - sshpass -p "$OAI_PASS" rsync -az -e "ssh -o StrictHostKeyChecking=no " --rsync-path="mkdir -p $NFS_TEST_RESULTS_DIR && rsync" $OPENAIR_DIR/cmake_targets/autotests/log $OAI_USER@localhost:$NFS_TEST_RESULTS_DIR
+ - sshpass -p "$OAI_PASS" rsync -az -e "ssh -o StrictHostKeyChecking=no " --rsync-path="mkdir -p $EXTERNAL_SHARE_DIR && rsync" $OPENAIR_DIR/cmake_targets/autotests/log $OAI_USER@localhost:$EXTERNAL_SHARE_DIR
+ - cat $OPENAIR_DIR/cmake_targets/autotests/log/results_autotests.xml
diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index bb5048821b..92505b9ef6 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -36,12 +36,16 @@ set (OPENAIR1_DIR ${OPENAIR_DIR}/openair1)
set (OPENAIR2_DIR ${OPENAIR_DIR}/openair2)
set (OPENAIR3_DIR ${OPENAIR_DIR}/openair3)
set (OPENAIR_TARGETS ${OPENAIR_DIR}/targets)
-set (OPENAIR3_DIR ${OPENAIR_DIR}/openair3)
+set (OPENAIR3_DIR ${OPENAIR_DIR}/openair3)
set (OPENAIR_CMAKE ${OPENAIR_DIR}/cmake_targets)
set (OPENAIR_BIN_DIR ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY})
project (OpenAirInterface)
+add_subdirectory(${OPENAIR_TARGETS}/ARCH/LMSSDR/USERSPACE/LIB/lms7002m lms7002m)
+add_subdirectory(${OPENAIR_TARGETS}/ARCH/LMSSDR/USERSPACE/LIB/lmsSDR lmsSDR)
+add_subdirectory(${OPENAIR_TARGETS}/ARCH/LMSSDR/USERSPACE/LIB/Si5351C Si5351C)
+
###########################################
# macros to define options as there is numerous options in oai
################################################
@@ -160,14 +164,20 @@ set(CMAKE_C_FLAGS
"${CMAKE_C_FLAGS} -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_ARPA_INET_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_STRERROR=1 -DHAVE_SOCKET=1 -DHAVE_MEMSET=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_LIBSCTP"
)
set(CMAKE_CXX_FLAGS
- "${CMAKE_CXX_FLAGS} ${C_FLAGS_PROCESSOR}"
+ "${CMAKE_CXX_FLAGS} ${C_FLAGS_PROCESSOR} -std=c++11 "
)
+
+
+#########################
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath -Wl,${OPENAIR_TARGETS}/bin")
+#########################
# set a flag for changes in the source code
# these changes are related to hardcoded path to include .h files
add_definitions(-DCMAKER)
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} -g -DMALLOC_CHECK_=3")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS} -g -DMALLOC_CHECK_=3 -O2")
+Message("RF_BOARD is ${RF_BOARD}")
# Below has been put in comment because does not work with
# SVN authentication.
#
@@ -245,6 +255,9 @@ endif (${RTAI})
set(asn1c_call "${OPENAIR_CMAKE}/tools/generate_asn1")
set(asn1_generated_dir ${OPENAIR_BIN_DIR})
+set(protoc_call "${OPENAIR_CMAKE}/tools/generate_protobuf")
+set(protobuf_generated_dir ${OPENAIR_BIN_DIR})
+
# RRC
######
add_list2_option(RRC_ASN1_VERSION "Rel10" "ASN.1 version of RRC interface" "Rel8" "Rel10" "CBA")
@@ -405,8 +418,55 @@ add_list1_option(NB_ANTENNAS_RX "2" "Number of antennas in reception" "1" "2" "4
add_list1_option(NB_ANTENNAS_TX "2" "Number of antennas in transmission" "1" "2" "4")
add_list1_option(NB_ANTENNAS_TXRX "2" "Number of antennas in ????" "1" "2" "4")
-add_list2_option(RF_BOARD "EXMIMO" "RF head type" "False" "EXMIMO" "OAI_USRP" "ETHERNET" "OAI_BLADERF" "CPRIGW")
+add_list2_option(RF_BOARD "EXMIMO" "RF head type" "None" "EXMIMO" "OAI_USRP" "OAI_BLADERF" "CPRIGW" "OAI_LMSSDR")
+add_list2_option(TRANSP_PRO "None" "Transport protocol type" "None" "ETHERNET")
+
+
+# include RF devices / transport protocols library modules
+######################################################################
+
+include_directories("${OPENAIR_TARGETS}/ARCH/EXMIMO/USERSPACE/LIB/")
+include_directories ("${OPENAIR_TARGETS}/ARCH/EXMIMO/DEFS/")
+#set (option_HWEXMIMOLIB_lib "-l ")
+set(HWLIB_EXMIMO_SOURCE
+ ${OPENAIR_TARGETS}/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c
+ ${OPENAIR_TARGETS}/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c
+ )
+add_library(oai_exmimodevif MODULE ${HWLIB_EXMIMO_SOURCE} )
+
+include_directories("${OPENAIR_TARGETS}/ARCH/USRP/USERSPACE/LIB/")
+set (option_HWUSRPLIB_lib "-l uhd")
+set(HWLIB_USRP_SOURCE
+ ${OPENAIR_TARGETS}/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+ )
+add_library(oai_usrpdevif MODULE ${HWLIB_USRP_SOURCE} )
+
+include_directories("${OPENAIR_TARGETS}/ARCH/BLADERF/USERSPACE/LIB/")
+set (option_HWBLADERFLIB_lib "-l bladerf")
+set(HWLIB_BLADERF_SOURCE
+ ${OPENAIR_TARGETS}/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
+ )
+add_library(oai_bladerfdevif MODULE ${HWLIB_BLADERF_SOURCE} )
+
+include_directories("${OPENAIR_TARGETS}/ARCH/LMSSDR/USERSPACE/LIB/")
+set (option_HWLMSSDRLIB_lib "-l LMS_SDR -l LMS7002M -l Si5351C")
+set(HWLIB_LMSSDR_SOURCE
+ ${OPENAIR_TARGETS}/ARCH/LMSSDR/USERSPACE/LIB/lms_lib.cpp
+ )
+add_library(oai_lmssdrdevif MODULE ${HWLIB_LMSSDR_SOURCE} )
+
+include_directories("${OPENAIR_TARGETS}/ARCH/ETHERNET/USERSPACE/LIB/")
+set(TPLIB_ETHERNET_SOURCE
+ ${OPENAIR_TARGETS}/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
+ ${OPENAIR_TARGETS}/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c
+ ${OPENAIR_TARGETS}/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
+ )
+add_library(oai_eth_transpro MODULE ${TPLIB_ETHERNET_SOURCE} )
+
+
+# RF devices / transport protocols settings
+######################################################################
if (${RF_BOARD} STREQUAL "EXMIMO")
set(DRIVER2013)
include_directories ("${OPENAIR_TARGETS}/ARCH/EXMIMO/USERSPACE/LIB/")
@@ -414,6 +474,7 @@ if (${RF_BOARD} STREQUAL "EXMIMO")
set(HW_SOURCE ${HW_SOURCE}
${OPENAIR_TARGETS}/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c
${OPENAIR_TARGETS}/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c)
+ set(option_HW_lib "-rdynamic -ldl")
elseif (${RF_BOARD} STREQUAL "OAI_USRP")
include_directories("${OPENAIR_TARGETS}/ARCH/USRP/USERSPACE/LIB/")
@@ -421,8 +482,7 @@ elseif (${RF_BOARD} STREQUAL "OAI_USRP")
set(HW_SOURCE ${HW_SOURCE}
${OPENAIR_TARGETS}/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp)
LINK_DIRECTORIES("/opt/lib")
- set(option_HW_lib "uhd")
- set(LOWLATENCY False)
+ set(option_HW_lib "-luhd -rdynamic -ldl")
elseif (${RF_BOARD} STREQUAL "OAI_BLADERF")
include_directories("${OPENAIR_TARGETS}/ARCH/BLADERF/USERSPACE/LIB/")
@@ -432,26 +492,51 @@ elseif (${RF_BOARD} STREQUAL "OAI_BLADERF")
${OPENAIR_TARGETS}/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
)
LINK_DIRECTORIES("/usr/lib/x86_64-linux-gnu")
- set(option_HW_lib "bladeRF")
-#set(LOWLATENCY False)
-elseif (${RF_BOARD} STREQUAL "ETHERNET")
- include_directories ("${OPENAIR_TARGETS}/ARCH/ETHERNET/USERSPACE/LIB")
- set(HW_SOURCE ${HW_SOURCE}
- ${OPENAIR_TARGETS}/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
- )
- set(LOWLATENCY True)
-
+ set(option_HW_lib "bladeRF -rdynamic -ldl")
+ #set(LOWLATENCY False)
+
+elseif (${RF_BOARD} STREQUAL "OAI_LMSSDR")
+ include_directories("${OPENAIR_TARGETS}/ARCH/LMSSDR/USERSPACE/LIB")
+ include_directories("${OPENAIR_TARGETS}/ARCH/LMSSDR/USERSPACE/LIB/lmsSDR")
+ include_directories("${OPENAIR_TARGETS}/ARCH/LMSSDR/USERSPACE/LIB/lms7002m")
+ include_directories("${OPENAIR_TARGETS}/ARCH/LMSSDR/USERSPACE/LIB/Si5351C")
+ include_directories("${OPENAIR_TARGETS}/ARCH/LMSSDR/USERSPACE/LIB/lmsSDR/LMS_StreamBoard")
+ LINK_DIRECTORIES("/usr/lib/x86_64-linux-gnu")
+ LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/lmsSDR")
+ LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/lms7002m")
+ LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/Si5351C")
+ set(HW_SOURCE ${HW_SOURCE} ${OPENAIR_TARGETS}/ARCH/LMSSDR/USERSPACE/LIB/lms_lib.cpp)
+ set(LOWLATENCY False)
+ set(option_HW_lib "-lLMS_SDR -lLMS7002M -lSi5351C -rdynamic -ldl")
+
elseif (${RF_BOARD} STREQUAL "CPRIGW")
set(HW_SOURCE ${HW_SOURCE}
${OPENAIR_TARGETS}/ARCH/CPRIGW/USERSPACE/LIB/cprigw_lib.c
)
include_directories("${OPENAIR_TARGETS}/ARCH/CPRIGW/USERSPACE/LIB/")
- set(option_HW_lib "-rdynamic dl")
+ set(option_HW_lib "-rdynamic dl")
+
endif (${RF_BOARD} STREQUAL "EXMIMO")
+
+if (${TRANSP_PRO} STREQUAL "ETHERNET")
+
+ include_directories ("${OPENAIR_TARGETS}/ARCH/ETHERNET/USERSPACE/LIB")
+ set(TRANSPORT_SOURCE ${TRANSPORT_SOURCE}
+ ${OPENAIR_TARGETS}/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
+ ${OPENAIR_TARGETS}/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c
+ ${OPENAIR_TARGETS}/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
+ )
+ set(option_TP_lib "-rdynamic -ldl")
+
+
+endif (${TRANSP_PRO} STREQUAL "ETHERNET")
+##########################################################
+
include_directories ("${OPENAIR_TARGETS}/ARCH/COMMON")
+Message("LOWLATENCY flag is ${LOWLATENCY}")
##############################################################
# ???!!! TO BE DOCUMENTED OPTIONS !!!???
@@ -474,6 +559,9 @@ add_list_string_option(PACKAGE_NAME "NotDefined" "As per attribute name")
add_boolean_option(MESSAGE_CHART_GENERATOR False "For generating sequence diagrams")
add_boolean_option(MESSAGE_CHART_GENERATOR_RLC_MAC False "trace RLC-MAC exchanges in sequence diagrams")
add_boolean_option(MESSAGE_CHART_GENERATOR_PHY False "trace some PHY exchanges in sequence diagrams")
+
+add_boolean_option(ENB_AGENT True "enable eNB agent to inteface with a SDN contrller")
+
########################
# Include order
##########################
@@ -844,6 +932,7 @@ set(PHY_SRC
${OPENAIR1_DIR}/PHY/CODING/viterbi_lte.c
${OPENAIR1_DIR}/PHY/INIT/lte_init.c
${OPENAIR1_DIR}/PHY/INIT/lte_parms.c
+ ${OPENAIR1_DIR}/PHY/INIT/lte_param_init.c
${OPENAIR1_DIR}/PHY/TOOLS/file_output.c
${OPENAIR1_DIR}/PHY/TOOLS/lte_dfts.c
${OPENAIR1_DIR}/PHY/TOOLS/log2_approx.c
@@ -1402,10 +1491,11 @@ add_definitions(-DASN1_MINIMUM_VERSION=924)
#################################
# add executables for operation
-#################################""
+#################################
# lte-softmodem is both eNB and UE implementation
###################################################
+
add_executable(lte-softmodem
${rrc_h}
${s1ap_h}
@@ -1423,6 +1513,7 @@ add_executable(lte-softmodem
${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c
${GTPU_need_ITTI}
${HW_SOURCE}
+ ${TRANSPORT_SOURCE}
${RTAI_SOURCE}
${XFORMS_SOURCE}
${XFORMS_SOURCE_SOFTMODEM}
@@ -1430,13 +1521,14 @@ add_executable(lte-softmodem
target_link_libraries (lte-softmodem
-Wl,--start-group
- RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS L2 ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${MIH_LIB}
+ RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS L2 ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${MIH_LIB}
-Wl,--end-group )
target_link_libraries (lte-softmodem ${LIBXML2_LIBRARIES})
-target_link_libraries (lte-softmodem pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${option_HW_lib} ${XFORMS_LIBRARIES} )
+target_link_libraries (lte-softmodem pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${option_HW_lib} ${option_TP_lib} ${XFORMS_LIBRARIES} )
target_link_libraries (lte-softmodem ${LIBBOOST_LIBRARIES})
+target_link_libraries (lte-softmodem ${LIB_LMS_LIBRARIES})
# lte-softmodem-nos1 is both eNB and UE implementation
###################################################
@@ -1457,6 +1549,7 @@ add_executable(lte-softmodem-nos1
#${OPENAIR2_DIR}/RRC/NAS/rb_config.c
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
${HW_SOURCE}
+ ${TRANSPORT_SOURCE}
${RTAI_SOURCE}
${XFORMS_SOURCE}
${XFORMS_SOURCE_SOFTMODEM}
@@ -1467,38 +1560,43 @@ target_link_libraries (lte-softmodem-nos1
-Wl,--end-group )
target_link_libraries (lte-softmodem-nos1 ${LIBXML2_LIBRARIES})
-target_link_libraries (lte-softmodem-nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${option_HW_lib} ${XFORMS_LIBRARIES} )
+target_link_libraries (lte-softmodem-nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${option_HW_lib} ${option_TP_lib} ${XFORMS_LIBRARIES} )
target_link_libraries (lte-softmodem-nos1 ${LIBBOOST_LIBRARIES})
-
-
+target_link_libraries (lte-softmodem-nos1 ${LIB_LMS_LIBRARIES})
# rrh
################################
-set(DRIVER2013)
-
-#Note: only on RF type is currently supported for RRH
+#Note: only one RF type (USRP) is currently supported for RRH
add_executable(rrh_gw
${OPENAIR_TARGETS}/RT/USER/rrh_gw.c
${OPENAIR_TARGETS}/RT/USER/eNB_transport_IQ.c
${OPENAIR_TARGETS}/RT/USER/UE_transport_IQ.c
${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
- ${OPENAIR_TARGETS}/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
${HW_SOURCE}
+ ${TRANSPORT_SOURCE}
)
-# assert and common_lib.h
-target_include_directories(rrh_gw PRIVATE ${OPENAIR_DIR}/common/utils/itti ${OPENAIR_TARGETS}/ARCH/COMMON ${OPENAIR_TARGETS}/ARCH/ETHERNET/USERSPACE/LIB/ )
-
+target_include_directories(rrh_gw PRIVATE ${OPENAIR_DIR}/common/utils/itti)
target_link_libraries(rrh_gw
-Wl,--start-group
UTIL LFDS
-Wl,--end-group )
target_link_libraries (rrh_gw rt pthread m )
-target_link_libraries (rrh_gw ${option_HW_lib} ${LIBBOOST_LIBRARIES} )
+target_link_libraries (rrh_gw ${option_HW_lib} ${option_TP_lib} ${LIBBOOST_LIBRARIES} )
+target_link_libraries (rrh_gw ${LIB_LMS_LIBRARIES})
-#Message("-- default_HW_lib=ETHERNET") # only in case of RRH
Message("-- option_HW_lib=${option_HW_lib}")
Message("-- HW_SOURCE=${HW_SOURCE}")
+Message("-- option_TP_lib=${option_TP_lib}")
+Message("-- TRANSPORT_SOURCE=${TRANSPORT_SOURCE}")
+
+if (${RF_BOARD} STREQUAL "OAI_LMSSDR")
+ add_dependencies(lte-softmodem LMS7002M LMS_SDR Si5351C)
+ add_dependencies(lte-softmodem-nos1 LMS7002M LMS_SDR Si5351C)
+ add_dependencies(rrh_gw LMS7002M LMS_SDR Si5351C)
+endif (${RF_BOARD} STREQUAL "OAI_LMSSDR")
+
+
# USIM process
#################
@@ -1549,6 +1647,7 @@ add_executable(oaisim
${GTPU_need_ITTI}
${OPENAIR_TARGETS}/COMMON/create_tasks.c
${HW_SOURCE}
+ ${TRANSPORT_SOURCE}
${XFORMS_SOURCE}
)
@@ -1560,7 +1659,7 @@ target_link_libraries (oaisim
-Wl,--end-group )
target_link_libraries (oaisim ${LIBXML2_LIBRARIES} ${LAPACK_LIBRARIES})
-target_link_libraries (oaisim pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${option_HW_lib}
+target_link_libraries (oaisim pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${option_HW_lib} ${option_TP_lib}
${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${OPENPGM_LIBRARIES})
#Force link with forms, regardless XFORMS option
target_link_libraries (oaisim forms)
@@ -1587,6 +1686,7 @@ add_executable(oaisim_nos1
${OPENAIR2_DIR}/UTIL/OMG/sumo.c
${OPENAIR_TARGETS}/COMMON/create_tasks.c
${HW_SOURCE}
+ ${TRANSPORT_SOURCE}
${XFORMS_SOURCE}
)
target_include_directories(oaisim_nos1 PUBLIC ${OPENAIR_TARGETS}/SIMU/USER)
@@ -1596,7 +1696,7 @@ target_link_libraries (oaisim_nos1
-Wl,--end-group )
target_link_libraries (oaisim_nos1 ${LIBXML2_LIBRARIES} ${LAPACK_LIBRARIES})
-target_link_libraries (oaisim_nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${option_HW_lib}
+target_link_libraries (oaisim_nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${option_HW_lib} ${option_TP_lib}
${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${OPENPGM_LIBRARIES})
#Force link with forms, regardless XFORMS option
target_link_libraries (oaisim_nos1 forms)
diff --git a/cmake_targets/autotests/README.txt b/cmake_targets/autotests/README.txt
index a370ae573d..f862644d07 100644
--- a/cmake_targets/autotests/README.txt
+++ b/cmake_targets/autotests/README.txt
@@ -98,46 +98,78 @@ Obj.# Case# Test# Description
01 55 lte-softmodem tests with USRP B210 RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX, 2TX/2RX
-01 55 00 Band 7 FDD 5MHz UL Throughput for 60 sec for 1TX/1RX
-01 55 01 Band 7 FDD 10MHz UL Throughput for 60 sec for 1TX/1RX
-01 55 02 Band 7 FDD 20MHz UL Throughput for 60 sec for 1TX/1RX
-01 55 03 Band 7 FDD 5MHz DL Throughput for 60 sec for 1TX/1RX
-01 55 04 Band 7 FDD 10MHz DL Throughput for 60 sec for 1TX/1RX
-01 55 05 Band 7 FDD 20MHz DL Throughput for 60 sec for 1TX/1RX
-01 55 06 Band 7 FDD 5MHz UL Throughput for 60 sec for 2TX/2RX
-01 55 07 Band 7 FDD 10MHz UL Throughput for 60 sec for 2TX/2RX
-01 55 08 Band 7 FDD 20MHz UL Throughput for 60 sec for 2TX/2RX
-01 55 09 Band 7 FDD 5MHz DL Throughput for 60 sec for 2TX/2RX
-01 55 10 Band 7 FDD 10MHz DL Throughput for 60 sec for 2TX/2RX
-01 55 11 Band 7 FDD 20MHz DL Throughput for 60 sec for 2TX/2RX
+01 55 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
+01 55 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
+01 55 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
+01 55 03 Band 7 FDD 5MHz DL Throughput for 300 sec for 1TX/1RX
+01 55 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
+01 55 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
+01 55 06 Band 7 FDD 5MHz UL Throughput for 300 sec for 2TX/2RX
+01 55 07 Band 7 FDD 10MHz UL Throughput for 300 sec for 2TX/2RX
+01 55 08 Band 7 FDD 20MHz UL Throughput for 300 sec for 2TX/2RX
+01 55 09 Band 7 FDD 5MHz DL Throughput for 300 sec for 2TX/2RX
+01 55 10 Band 7 FDD 10MHz DL Throughput for 300 sec for 2TX/2RX
+01 55 11 Band 7 FDD 20MHz DL Throughput for 300 sec for 2TX/2RX
01 56 lte-softmodem tests with USRP B210 RF as eNB and OAI EPC (eNB and EPC are on same machines) w/ Bandrich COTS UE
-
+01 56 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
+01 56 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
+01 56 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
+01 56 03 Band 7 FDD 5MHz DL Throughput for 300 sec for 1TX/1RX
+01 56 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
+01 56 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
01 57 lte-softmodem tests with USRP B210 RF as eNB and OAI EPC (eNB and EPC are on different machines) w/ Bandrich COTS UE
+01 57 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
+01 57 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
+01 57 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
+01 57 03 Band 7 FDD 5MHz DL Throughput for 300 sec for 1TX/1RX
+01 57 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
+01 57 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
01 58 lte-softmodem tests with USRP X310 RF as eNB and ALU EPC w/ Bandrich COTS UE for `TX/1RX, 2TX/2RX
-01 58 00 Band 7 FDD 5MHz UL Throughput for 60 sec for 1TX/1RX
-01 58 01 Band 7 FDD 10MHz UL Throughput for 60 sec for 1TX/1RX
-01 58 02 Band 7 FDD 20MHz UL Throughput for 60 sec for 1TX/1RX
-01 58 03 Band 7 FDD 5MHz DL Throughput for 60 sec for 1TX/1RX
-01 58 04 Band 7 FDD 10MHz DL Throughput for 60 sec for 1TX/1RX
-01 58 05 Band 7 FDD 20MHz DL Throughput for 60 sec for 1TX/1RX
+01 58 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
+01 58 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
+01 58 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
+01 58 03 Band 7 FDD 5MHz DL Throughput for 300 sec for 1TX/1RX
+01 58 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
+01 58 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
01 59 lte-softmodem tests with USRP X310 RF as eNB and OAI EPC (eNB and EPC are on same machines) w/ Bandrich COTS UE
-01 61 lte-softmodem tests with USRP X310 RF as eNB and OAI EPC (eNB and EPC are on different machines) w/ Bandrich COTS UE
+01 60 lte-softmodem tests with USRP X310 RF as eNB and OAI EPC (eNB and EPC are on different machines) w/ Bandrich COTS UE
+01 60 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
+01 60 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
+01 60 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
+01 60 03 Band 7 FDD 5MHz DL Throughput for 300 sec for 1TX/1RX
+01 60 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
+01 60 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
01 61 lte-softmodem tests with EXMIMO RF as eNB and ALU EPC w/ Bandrich COTS UE for `TX/1RX, 2TX/2RX
-01 61 00 Band 7 FDD 5MHz UL Throughput for 60 sec for 1TX/1RX
-01 61 01 Band 7 FDD 10MHz UL Throughput for 60 sec for 1TX/1RX
-01 61 02 Band 7 FDD 20MHz UL Throughput for 60 sec for 1TX/1RX
-01 61 03 Band 7 FDD 5MHz DL Throughput for 60 sec for 1TX/1RX
-01 61 04 Band 7 FDD 10MHz DL Throughput for 60 sec for 1TX/1RX
-01 61 05 Band 7 FDD 20MHz DL Throughput for 60 sec for 1TX/1RX
+01 61 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
+01 61 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
+01 61 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
+01 61 03 Band 7 FDD 5MHz DL Throughput for 300 sec for 1TX/1RX
+01 61 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
+01 61 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
01 62 lte-softmodem tests with EXMIMO RF as eNB and OAI EPC (eNB and EPC are on same machines) w/ Bandrich COTS UE
+
01 63 lte-softmodem tests with EXMIMO RF as eNB and OAI EPC (eNB and EPC are on different machines) w/ Bandrich COTS UE
+01 63 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
+01 63 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
+01 63 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
+01 63 03 Band 7 FDD 5MHz DL Throughput for 300 sec for 1TX/1RX
+01 63 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
+01 63 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
+
+01 65 00 lte-softmodem tests with BladeRF RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
+01 65 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
+01 65 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
+01 65 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
+01 65 03 Band 7 FDD 5MHz DL Throughput for 300 sec for 1TX/1RX
+01 65 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
+01 65 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
01 64 lte-softmodem-noS1 tests
diff --git a/cmake_targets/autotests/core.py b/cmake_targets/autotests/core.py
index 8881781144..5b1f39a85b 100644
--- a/cmake_targets/autotests/core.py
+++ b/cmake_targets/autotests/core.py
@@ -118,8 +118,7 @@ class core:
rsp1 = self.prompt1
rsp2 = self.prompt2
if sudo == True:
- command = 'echo \'' + self.password + '\' | sudo -S -E ' + command
-
+ command = 'echo \'' + '' + '\' | sudo -S -E bash -c \' ' + command + '\' '
self.wait_quiet()
if self.send_cr:
log.stats['cmd'] += 1
@@ -140,7 +139,7 @@ class core:
rsp2 = self.prompt2
self.wait_quiet()
if sudo == True:
- command = 'echo \'' + self.password + '\' | sudo -S -E ' + command
+ command = 'echo \'' + '' + '\' | sudo -S -E bash -c \' ' + command + '\' '
if self.send_cr:
log.stats['cmd'] += 1
self.oai.sendline(command)
@@ -193,6 +192,7 @@ class core:
if index == 0 or index == 1 :
return self.oai.before
else:
+ print "command = " + command + "rsp1 = " + rsp1 + " rsp2 = " + rsp2 + " index = " + str(index)
raise log.err(self.failed(command, rsp1 + ' or ' + rsp2,debug))
@@ -240,8 +240,9 @@ class core:
# print rsp
if (rsp.find(expect) == -1):
return 'OK'
-
- raise log.err(self.failed(command, expect,debug))
+ else:
+ print "command = " + command + "expect = " + expect + "rsp = " + rsp
+ raise log.err(self.failed(command, expect,debug))
# **************************send_wait*************************
diff --git a/cmake_targets/autotests/openair.py b/cmake_targets/autotests/openair.py
index e8d07ba1e1..1079c466a8 100644
--- a/cmake_targets/autotests/openair.py
+++ b/cmake_targets/autotests/openair.py
@@ -83,10 +83,13 @@ class openair(core):
return (stdout, stderr)
def connect(self, username, password, prompt='PEXPECT_OAI'):
- while True:
+ max_retries=100
+ i=0
+ while i <= max_retries:
self.prompt1 = prompt
self.prompt2 = prompt
self.password = ''
+ i=i+1
# WE do not store the password when sending commands for secuirity reasons. The password might be accidentally logged in such cases.
#The password is used only to make ssh connections. In case user wants to run programs with sudo, then he/she needs to add following line in /etc/sudoers
# your_user_name ALL=(ALL:ALL) NOPASSWD: ALL
@@ -109,11 +112,14 @@ class openair(core):
except Exception, e:
error=''
error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e)
+ error = error + 'address = "'+ self.address +' username = ' + username
error = error + traceback.format_exc()
print error
- print "Retrying again in 60 seconds"
- time.sleep(60)
- #sys.exit(1)
+ print "Retrying again in 1 seconds"
+ time.sleep(1)
+ if i==max_retries:
+ print "Fatal Error: Terminating the program now..."
+ sys.exit(1)
def connect2(self, username, password, prompt='$'):
self.prompt1 = prompt
diff --git a/cmake_targets/autotests/run_exec_autotests.bash b/cmake_targets/autotests/run_exec_autotests.bash
index 836a8c197a..a622b07efb 100755
--- a/cmake_targets/autotests/run_exec_autotests.bash
+++ b/cmake_targets/autotests/run_exec_autotests.bash
@@ -175,6 +175,7 @@ function test_compile() {
#\param $13 -> output of compilation program that needs to be found for test case to pass
#\param $14 -> tags to help identify the test case for readability in output xml file
#\param $15 => password for the user to run certain commands as sudo
+#\param $16 => test config file params to be modified
function test_compile_and_run() {
xUnit_start
@@ -195,12 +196,14 @@ function test_compile_and_run() {
compile_prog_out=${13}
tags=${14}
mypassword=${15}
+ test_config_file=${16}
+
build_dir=$tdir/$1/build
#exec_file=$build_dir/$6
xmlfile_testcase=$log_dir/test.$1.xml
#Temporary log file where execution log is stored.
temp_exec_log=$log_dir/temp_log.txt
-
+ export OPENAIR_LOGDIR=$log_dir
rm -fr $log_dir
mkdir -p $log_dir
@@ -219,6 +222,10 @@ function test_compile_and_run() {
#compile_prog_array=()
#read -a compile_prog_array <<<"$compile_prog"
+
+ #test_config_file=`eval "echo \"$test_config_file\" "`
+
+ #echo "test_config_file = $test_config_file"
tags_array=()
read -a tags_array <<<"$tags"
@@ -238,17 +245,21 @@ function test_compile_and_run() {
cd $log_dir
{
uname -a
- #eval $pre_compile_prog
- #cmake ..
- #rm -fv $exec_file
- echo "Executing $compile_prog $compile_args" >> $log_file
+ echo "Executing $pre_compile_prog"
+ eval $pre_compile_prog
+
+ if [ "$test_config_file" != "" ]; then
+ echo "Modifying test_config_file parameters..."
+ echo "$test_config_file" |xargs -L 1 $OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py
+ fi
+ echo "Executing $compile_prog $compile_args"
eval "$compile_prog $compile_args"
echo "Copying compilation log files to test case log directory: $log_dir"
cp -fvr $OPENAIR_DIR/cmake_targets/log/ $log_dir/compile_log
}>> $log_file 2>&1
echo "" >> $log_file 2>&1
#done
-
+
#process the test case if it is that of execution
if [ "$class" == "execution" ]; then
tags_array_index=0
@@ -437,7 +448,8 @@ for search_expr in "${test_case_array[@]}"
else
flag_run_test_case=1
fi
-
+
+
#We skip this test case if it is not in the group list
if [ "$flag_run_test_case" -ne "1" ]; then
continue
@@ -458,6 +470,7 @@ for search_expr in "${test_case_array[@]}"
nruns=`xmlstarlet sel -t -v "/testCaseList/testCase[@id='$search_expr']/nruns" $xml_conf`
compile_prog_out=`xmlstarlet sel -t -v "/testCaseList/testCase[@id='$search_expr']/compile_prog_out" $xml_conf`
tags=`xmlstarlet sel -t -v "/testCaseList/testCase[@id='$search_expr']/tags" $xml_conf`
+ test_config_file=`xmlstarlet sel -t -v "/testCaseList/testCase[@id='$search_expr']/test_config_file" $xml_conf`
echo "class = $class"
echo "name = $name"
@@ -497,7 +510,7 @@ for search_expr in "${test_case_array[@]}"
test_compile "$name" "$compile_prog" "$compile_prog_args" "$pre_exec" "$pre_exec_args" "$main_exec" "$main_exec_args" "search_array_true[@]" "$search_expr_false" "$nruns" "$pre_compile_prog" "$class" "$compile_prog_out" "$tags"
elif [ "$class" == "execution" ]; then
$SUDO killall -q oaisim_nos1
- test_compile_and_run "$name" "$compile_prog" "$compile_prog_args" "$pre_exec" "$pre_exec_args" "$main_exec" "$main_exec_args" "search_array_true[@]" "$search_expr_false" "$nruns" "$pre_compile_prog" "$class" "$compile_prog_out" "$tags" "$mypassword"
+ test_compile_and_run "$name" "$compile_prog" "$compile_prog_args" "$pre_exec" "$pre_exec_args" "$main_exec" "$main_exec_args" "search_array_true[@]" "$search_expr_false" "$nruns" "$pre_compile_prog" "$class" "$compile_prog_out" "$tags" "$mypassword" "$test_config_file"
else
echo "Unexpected class of test case...Skipping the test case $name ...."
fi
diff --git a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py
old mode 100644
new mode 100755
index b76b5f9698..eb142c114e
--- a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py
+++ b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py
@@ -60,21 +60,29 @@ import paramiko
import subprocess
import commands
sys.path.append('/opt/ssh')
+sys.path.append(os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/tools/'))
+from lib_autotest import *
import ssh
from ssh import SSHSession
+import argparse
+# \brief write a string to a file
+# \param filename name of file
+# \param string string to write
+# \mode file opening mode (default=write)
def write_file(filename, string, mode="w"):
text_file = open(filename, mode)
text_file.write(string)
text_file.close()
-
-#$1 name of file (assuming created with iperf -s -u ....
-#$2 minimum throughput
-#$3 maximum throughput
-#$4 average throughput
-#$5 minimum duration of throughput
-#The throughput values found in file must be higher than values from from 2,3,4,5
+
+# \brief function to check if test case passed throughput test
+# \param filename name of file which has throughput results (usually from iperf -s ...
+# \param min_tput minimum throughput
+# \param max_tuput maximum throughput
+# \param average average throughput
+# \param min_duration minimum duration of throughput
+#The throughput values found in file must be higher than values from from arguments 2,3,4,5
#The function returns True if throughput conditions are saisfied else it returns fails
def tput_test(filename, min_tput, max_tput, average, min_duration):
@@ -101,13 +109,16 @@ def tput_test(filename, min_tput, max_tput, average, min_duration):
else:
return False , tput_string
-
+# \brief Convert string to float or return None if there is exception
def try_convert_to_float(string, fail=None):
try:
return float(string)
except Exception:
return fail;
+# \brief get throughput statistics from log file
+# \param search_expr search expression found in test_case_list.xml file
+# \param logfile_traffic logfile which has traffic statistics
def tput_test_search_expr (search_expr, logfile_traffic):
result=0
tput_string=''
@@ -153,7 +164,13 @@ def tput_test_search_expr (search_expr, logfile_traffic):
return result, tput_string
-
+# \brief function to copy files to/from remote machine
+# \param username user with which to make sftp connection
+# \param password password of user
+# \param hostname host to connect
+# \ports port of remote machine on which server is listening
+# \paramList This is list of operations as a set {operation: "get/put", localfile: "filename", remotefile: "filename"
+# \param logfile Ignored currently and set once at the beginning of program
def sftp_module (username, password, hostname, ports, paramList,logfile):
#localD = localfile
#remoteD = remotefile
@@ -162,14 +179,9 @@ def sftp_module (username, password, hostname, ports, paramList,logfile):
#paramiko logfile path should not be changed with multiple calls. The logs seem to in first file regardless
error = ""
#The lines below are outside exception loop to be sure to terminate the test case if the network connectivity goes down or there is authentication failure
-
-
-
transport = paramiko.Transport(hostname, ports)
transport.connect(username = username, password = password)
sftp = paramiko.SFTPClient.from_transport(transport)
-
-
# index =0
for param in paramList:
try:
@@ -201,6 +213,9 @@ def sftp_module (username, password, hostname, ports, paramList,logfile):
write_file(logfile, error, "a")
res = os.system('\n echo \'SFTP Module Log for Machine: <' + hostname + '> ends...\' >> ' + logfile + ' 2>&1 \n')
+# \brief bash script stub put at the end of scripts to terminate it
+# \param timeout_cmd terminate script after timeout_cmd seconds
+# \param terminate_missing_procs if True terminate all the processes launched by script if one of them terminates prematurely (due to error)
def finalize_deploy_script (timeout_cmd, terminate_missing_procs='True'):
cmd = 'declare -i timeout_cmd='+str(timeout_cmd) + '\n'
if terminate_missing_procs == 'True':
@@ -239,40 +254,67 @@ def finalize_deploy_script (timeout_cmd, terminate_missing_procs='True'):
return cmd
+# \brief run python script and update config file params of test case
+# \param oai module with already open connection
+# \param config_string config string taken from xml file
+# \param logdirRepo directory of remote repository
+# \param python_script python script location
def update_config_file(oai, config_string, logdirRepo, python_script):
+ cmd=""
if config_string :
stringArray = config_string.splitlines()
- cmd=""
#python_script = '$OPENAIR_DIR/targets/autotests/tools/search_repl.py'
for string in stringArray:
#split the string based on space now
string1=string.split()
cmd = cmd + 'python ' + python_script + ' ' + logdirRepo+'/'+string1[0] + ' ' + string1[1] + ' '+ string1[2] + '\n'
#cmd = cmd + 'perl -p -i -e \'s/'+ string1[1] + '\\s*=\\s*"\\S*"\\s*/' + string1[1] + ' = "' + string1[2] +'"' + '/g\' ' + logdirRepo + '/' +string1[0] + '\n'
- return cmd
- #result = oai.send_recv(cmd)
+ return cmd
+ #result = oai.send_recv(cmd)
-def SSHSessionWrapper(machine, username, key_file, password, logdir_remote_testcase, logdir_local_base):
- while True:
+# \brief thread safe sshsession wrapper due to occasional connection issues with ssh
+# \param machine name of machine
+# \param username user login for remote machine
+# \param key_file file name which has keys to enable passwordless login
+# \param password password for remote machine
+# \param logdir_remote remote directory
+# \param logdir_local_base local directory
+# \param operation operation to perform (get_all, put_all) transfers recursively for directories
+def SSHSessionWrapper(machine, username, key_file, password, logdir_remote, logdir_local_base, operation):
+ max_tries = 100
+ i=0
+ while i <= max_tries:
+ i = i +1
try:
ssh = SSHSession(machine , username, key_file, password)
- ssh.get_all(logdir_remote_testcase , logdir_local_base)
+ if operation == "get_all":
+ ssh.get_all(logdir_remote , logdir_local_base)
+ elif operation == "put_all":
+ ssh.put_all(logdir_local_base, logdir_remote )
+ else:
+ print "Error: Uknown operation in SSHSessionWrapper. Exiting now..."
+ sys.exit(1)
break
except Exception, e:
error=''
error = error + ' In Class = function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e)
- error = error + '\n username = ' + username + '\n machine = ' + machine + '\n logdir_remote = ' + logdir_remote_testcase + '\n logdir_local_base = ' + logdir_local_base
+ error = error + '\n username = ' + username + '\n machine = ' + machine + '\n logdir_remote = ' + logdir_remote + '\n logdir_local_base = ' + logdir_local_base
error = error + traceback.format_exc()
print error
- print " Trying again in 60 seconds"
- time.sleep(60)
+ print " Retrying again in 1 seconds"
+ time.sleep(1)
print "Continuing ..."
+ if i ==max_tries:
+ print "Fatal Error: Max no of retries reached. Exiting now..."
+ sys.exit(1)
-#Function to clean old programs that might be running from earlier execution
-#oai - parameter for making connection to machine
-#programList - list of programs that must be terminated before execution of any test case
+# \briefFunction to clean old programs that might be running from earlier execution
+# \param oai - parameter for making connection to machine
+# \parm programList list of programs that must be terminated before execution of any test case
+# \param CleanUpAluLteBox program to terminate AlU Bell Labs LTE Box
+# \param ExmimoRfStop String to stop EXMIMO card (specified in test_case_list.xml)
def cleanOldPrograms(oai, programList, CleanUpAluLteBox, ExmimoRfStop):
cmd = 'killall -q -r ' + programList
result = oai.send(cmd, True)
@@ -283,20 +325,19 @@ def cleanOldPrograms(oai, programList, CleanUpAluLteBox, ExmimoRfStop):
#result = oai.send_recv(cmd)
#print result
result = oai.send_expect_false(cmd, 'Match found', False)
- print result
+ print "Looking for old programs..." + result
res=oai.send_recv(CleanUpAluLteBox, True)
- res = oai.send_recv(ExmimoRfStop, True)
-
-class myThread (threading.Thread):
- def __init__(self, threadID, name, counter):
- threading.Thread.__init__(self)
- self.threadID = threadID
- self.name = name
- self.counter = counter
- def run(self):
- print "Starting " + self.name
-
+ res = oai.send_recv(ExmimoRfStop, False)
+# \brief Class thread to launch a generic command on remote machine
+# \param threadID number of thread (for book keeping)
+# \param threadname string of threadname (for book keeping)
+# \param machine machine name on which to run the command
+# \param username username with which to login
+# \param password password with which to login
+# \param cmd command as a string to run on remote machine
+# \parma sudo if True sudo is set
+# \param timeout timeout of command in seconds
class oaiThread (threading.Thread):
def __init__(self, threadID, threadname, machine, username, password, cmd, sudo, timeout):
threading.Thread.__init__(self)
@@ -311,7 +352,7 @@ class oaiThread (threading.Thread):
def run(self):
try:
oai = openair('localdomain',self.machine)
- oai.connect(user, self.password)
+ oai.connect(self.username, self.password)
print "Starting " + self.threadname + " on machine " + self.machine
result = oai.send_recv(self.cmd, self.sudo, self.timeout)
print "result = " + result
@@ -320,14 +361,24 @@ class oaiThread (threading.Thread):
except Exception, e:
error=''
error = error + ' In class oaiThread, function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e)
- error = error + '\n threadID = ' + str(self.threadID) + '\n threadname = ' + self.threadname + '\n timeout = ' + self.timeout + '\n machine = ' + self.machine + '\n cmd = ' + self.cmd + '\n timeout = ' + str(self.timeout) + '\n'
+ error = error + '\n threadID = ' + str(self.threadID) + '\n threadname = ' + self.threadname + '\n timeout = ' + str(self.timeout) + '\n machine = ' + self.machine + '\n cmd = ' + self.cmd + '\n timeout = ' + str(self.timeout) + '\n username = ' + self.username + '\n'
error = error + traceback.format_exc()
print error
-#This class runs test cases with class execution, compilatation
+# \brief This class runs test cases with class {execution, compilatation}
+# \param threadID number of thread (for book keeping)
+# \param name string of threadname (for book keeping)
+# \param machine machine name on which to run the command
+# \param logdirOAI5GRepo directory on remote machine which as openairinterface5g repo installed
+# \param testcasename name of test case to run on remote machine
+# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml)
+# \param user username with which to login
+# \param password password with which to login
+# \param timeout timeout of command in seconds
+# \param ExmimoRfStop command to stop EXMIMO Card
class testCaseThread_generic (threading.Thread):
- def __init__(self, threadID, name, machine, logdirOAI5GRepo, testcasename,oldprogramList, CleanupAluLteBox, password, timeout, ExmimoRfStop):
+ def __init__(self, threadID, name, machine, logdirOAI5GRepo, testcasename,oldprogramList, CleanupAluLteBox, user, password, timeout, ExmimoRfStop):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
@@ -339,16 +390,17 @@ class testCaseThread_generic (threading.Thread):
self.CleanupAluLteBox = CleanupAluLteBox
self.password=password
self.ExmimoRfStop = ExmimoRfStop
+ self.user = user
def run(self):
try:
mypassword=''
#addsudo = 'echo \'' + mypassword + '\' | sudo -S -E '
addpass = 'echo \'' + mypassword + '\' | '
- user = getpass.getuser()
+ #user = getpass.getuser()
print "Starting test case : " + self.testcasename + " On machine " + self.machine + " timeout = " + str(self.timeout)
oai = openair('localdomain',self.machine)
- oai.connect(user, self.password)
- cleanOldPrograms(oai, self.oldprogramList, self.CleanupAluLteBox, self.ExmimoRfStop)
+ oai.connect(self.user, self.password)
+ #cleanOldPrograms(oai, self.oldprogramList, self.CleanupAluLteBox, self.ExmimoRfStop)
logdir_local = os.environ.get('OPENAIR_DIR')
logdir_local_testcase = logdir_local +'/cmake_targets/autotests/log/'+ self.testcasename
logdir_local_base = logdir_local +'/cmake_targets/autotests/log/'
@@ -380,15 +432,15 @@ class testCaseThread_generic (threading.Thread):
#Now we copy all the remote files
#ssh = SSHSession(self.machine , username=user, key_file=None, password=self.password)
#ssh.get_all(logdir_remote_testcase , logdir_local_base)
- SSHSessionWrapper(self.machine, user, None, self.password, logdir_remote_testcase, logdir_local_base)
+ SSHSessionWrapper(self.machine, self.user, None, self.password, logdir_remote_testcase, logdir_local_base, "get_all")
print "Finishing test case : " + self.testcasename + " On machine " + self.machine
- cleanOldPrograms(oai, self.oldprogramList, self.CleanupAluLteBox, self.ExmimoRfStop)
+ #cleanOldPrograms(oai, self.oldprogramList, self.CleanupAluLteBox, self.ExmimoRfStop)
#oai.kill(user,mypassword)
oai.disconnect()
except Exception, e:
error=''
error = error + ' In Class = testCaseThread_generic, function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e)
- error = error + '\n threadID = ' + str(self.threadID) + '\n threadName = ' + self.name + '\n testcasename = ' + self.testcasename + '\n machine = ' + self.machine + '\n logdirOAI5GRepo = ' + self.logdirOAI5GRepo + '\n' + '\n timeout = ' + str(self.timeout)
+ error = error + '\n threadID = ' + str(self.threadID) + '\n threadName = ' + self.name + '\n testcasename = ' + self.testcasename + '\n machine = ' + self.machine + '\n logdirOAI5GRepo = ' + self.logdirOAI5GRepo + '\n' + '\n timeout = ' + str(self.timeout) + '\n user = ' + self.user
error = error + traceback.format_exc()
print error
print "Continuing with next test case..."
@@ -396,12 +448,25 @@ class testCaseThread_generic (threading.Thread):
-
+# \bried function to run a command as a sudo
+# \param cmd command as a string
+# \param password password to be supplied
def addsudo (cmd, password=""):
cmd = 'echo \'' + password + '\' | sudo -S -E bash -c \' ' + cmd + '\' '
return cmd
-def handle_testcaseclass_generic (testcasename, threadListGeneric, oldprogramList, logdirOAI5GRepo, MachineList, password, CleanupAluLteBox,timeout, ExmimoRfStop):
+# \brief handler for executing test cases (compilation, execution)
+# \param name of testcase
+# \param threadListGeneric list of threads which are already running on remote machines
+# \param oldprogramList list of programs which must be terminated before running a test case
+# \param logdirOAI5GRepo directory on remote machine which as openairinterface5g repo installed
+# \param MachineList list of all machines on which generic test cases can be run
+# \param user username with which to login
+# \param password password with which to login
+# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml)
+# \param timeout timeout of command in seconds
+# \param ExmimoRfStop command to stop EXMIMO Card
+def handle_testcaseclass_generic (testcasename, threadListGeneric, oldprogramList, logdirOAI5GRepo, MachineList, user, password, CleanupAluLteBox,timeout, ExmimoRfStop):
try:
mypassword=password
MachineListFree=[]
@@ -439,7 +504,7 @@ def handle_testcaseclass_generic (testcasename, threadListGeneric, oldprogramLis
print "MachineListBusy = " + ','.join(MachineListBusy)
print "MachineList = " + ','.join(MachineList)
machine = MachineListFree[0]
- thread = testCaseThread_generic(1,"Generic Thread_"+testcasename+"_"+ "machine_", machine, logdirOAI5GRepo, testcasename, oldprogramList, CleanupAluLteBox, password, timeout, ExmimoRfStop)
+ thread = testCaseThread_generic(1,"Generic Thread_"+testcasename+"_"+ "machine_", machine, logdirOAI5GRepo, testcasename, oldprogramList, CleanupAluLteBox, user, password, timeout, ExmimoRfStop)
param={"thread_id":thread, "Machine":machine, "testcasename":testcasename}
thread.start()
threadListNew.append(param)
@@ -447,13 +512,15 @@ def handle_testcaseclass_generic (testcasename, threadListGeneric, oldprogramLis
except Exception, e:
error=''
error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e)
- error = error + '\n testcasename = ' + testcasename + '\n logdirOAI5GRepo = ' + logdirOAI5GRepo + '\n MachineList = ' + ','.join(MachineList) + '\n timeout = ' + str(timeout) + '\n'
+ error = error + '\n testcasename = ' + testcasename + '\n logdirOAI5GRepo = ' + logdirOAI5GRepo + '\n MachineList = ' + ','.join(MachineList) + '\n timeout = ' + str(timeout) + '\n' + 'user = ' + user
error = error + traceback.format_exc()
print error
print "Continuing..."
#sys.exit(1)
-#Blocking wait for all threads related to generic testcase execution, class (compilation and execution)
+# \brief Blocking wait for all threads related to generic testcase execution, class (compilation and execution)
+# \param threadListGeneric list of threads which are running on remote machines
+# \param timeout time to wait on threads in seconds
def wait_testcaseclass_generic_threads(threadListGeneric, timeout = 1):
threadListGenericNew=[]
for param in threadListGeneric:
@@ -471,22 +538,37 @@ def wait_testcaseclass_generic_threads(threadListGeneric, timeout = 1):
#threadListGeneric.remove(param)
return threadListGenericNew
-#Function to handle test case class : lte-softmodem
-def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , logdirOpenaircnRepo, MachineList, password, CleanUpAluLteBox, ExmimoRfStop):
+
+# \brief handler for executing test cases (lte-softmodem)
+# \param testcase name of testcase
+# \param oldprogramList list of programs which must be terminated before running a test case
+# \param logdirOAI5GRepo directory on remote machine which has openairinterface5g repo installed
+# \param logdirOpenaircnRepo directory on remote machine which has openair-cn repo installed
+# \param MachineList list of all machines on which test cases can be run
+# \param user username with which to login
+# \param password password with which to login
+# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml)
+# \param ExmimoRfStop command to stop EXMIMO Card
+# \param nruns_lte-softmodem global parameter to override number of runs (nruns) within the test case
+def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , logdirOpenaircnRepo, MachineList, user, password, CleanUpAluLteBox, ExmimoRfStop, nruns_lte_softmodem, timeout_cmd):
#We ignore the password sent to this function for secuirity reasons for password present in log files
#It is recommended to add a line in /etc/sudoers that looks something like below. The line below will run sudo without password prompt
# your_user_name ALL=(ALL:ALL) NOPASSWD: ALL
mypassword=''
#addsudo = 'echo \'' + mypassword + '\' | sudo -S -E '
addpass = 'echo \'' + mypassword + '\' | '
- user = getpass.getuser()
+ #user = getpass.getuser()
testcasename = testcase.get('id')
testcaseclass = testcase.findtext('class',default='')
- timeout_cmd = testcase.findtext('TimeOut_cmd',default='')
+ if timeout_cmd == '':
+ timeout_cmd = testcase.findtext('TimeOut_cmd',default='')
timeout_cmd = int(float(timeout_cmd))
#Timeout_thread is more than that of cmd to have room for compilation time, etc
timeout_thread = timeout_cmd + 300
- nruns = testcase.findtext('nruns',default='')
+ if nruns_lte_softmodem == '':
+ nruns = testcase.findtext('nruns',default='')
+ else:
+ nruns = nruns_lte_softmodem
nruns = int(float(nruns))
tags = testcase.findtext('tags',default='')
eNBMachine = testcase.findtext('eNB',default='')
@@ -501,6 +583,8 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
eNB_traffic_exec_args = testcase.findtext('eNB_traffic_exec_args',default='')
eNB_terminate_missing_procs = testcase.findtext('eNB_terminate_missing_procs',default='True')
eNB_search_expr_true = testcase.findtext('eNB_search_expr_true','')
+ if re.compile('\w+').match(eNB_search_expr_true) != None:
+ eNB_search_expr_true = eNB_search_expr_true + ' duration=' + str(timeout_cmd-90) + 's'
UEMachine = testcase.findtext('UE',default='')
UE_config_file = testcase.findtext('UE_config_file',default='')
@@ -515,6 +599,8 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
UE_terminate_missing_procs = testcase.findtext('UE_terminate_missing_procs',default='True')
UE_search_expr_true = testcase.findtext('UE_search_expr_true','')
UE_stop_script = testcase.findtext('UE_stop_script','')
+ if re.compile('\w+').match(UE_search_expr_true) != None:
+ UE_search_expr_true = UE_search_expr_true + ' duration=' + str(timeout_cmd-90) + 's'
EPCMachine = testcase.findtext('EPC',default='')
EPC_config_file = testcase.findtext('EPC_config_file',default='')
@@ -533,6 +619,8 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
EPC_traffic_exec_args = testcase.findtext('EPC_traffic_exec_args',default='')
EPC_terminate_missing_procs = testcase.findtext('EPC_terminate_missing_procs',default='True')
EPC_search_expr_true = testcase.findtext('EPC_search_expr_true','')
+ if re.compile('\w+').match(EPC_search_expr_true) != None:
+ EPC_search_expr_true = EPC_search_expr_true + ' duration=' + str(timeout_cmd-90) + 's'
index_eNBMachine = MachineList.index(eNBMachine)
index_UEMachine = MachineList.index(UEMachine)
@@ -548,9 +636,9 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
oai_EPC.connect(user, password)
res = oai_eNB.send_recv(cmd)
- cleanOldPrograms(oai_eNB, oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
- cleanOldPrograms(oai_UE, oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
- cleanOldPrograms(oai_EPC, oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
+ #cleanOldPrograms(oai_eNB, oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
+ #cleanOldPrograms(oai_UE, oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
+ #cleanOldPrograms(oai_EPC, oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
logdir_eNB = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename
logdir_UE = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename
logdir_EPC = logdirOpenaircnRepo+'/TEST/autotests/log/'+ testcasename
@@ -601,6 +689,10 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
logfile_task_eNB_out = logdir_eNB + '/eNB_task_out' + '_' + str(run) + '_.log'
logfile_task_eNB = logdir_local_testcase + '/eNB_task' + '_' + str(run) + '_.log'
logfile_local_traffic_eNB_out = logdir_local_testcase + '/eNB_traffic' + '_' + str(run) + '_.log'
+ logfile_tshark_eNB = logdir_eNB + '/eNB_tshark' + '_' + str(run) + '_.log'
+ logfile_pcap_eNB = logdir_eNB + '/eNB_tshark' + '_' + str(run) + '_.pcap'
+ logfile_pcap_zip_eNB = logdir_eNB + '/eNB_tshark' + '_' + str(run) + '_.pcap.zip'
+ logfile_pcap_tmp_eNB = '/tmp/' + '/eNB_tshark' + '_' + str(run) + '_.pcap'
task_eNB_compile = ' ( uname -a ; date \n'
task_eNB_compile = task_eNB_compile + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n'
@@ -616,15 +708,22 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
task_eNB = task_eNB + 'env |grep OPENAIR \n' + 'array_exec_pid=() \n'
if eNB_pre_exec != "":
- task_eNB = task_eNB + ' ( ' + eNB_pre_exec + ' '+ eNB_pre_exec_args + ' ) > ' + logfile_pre_exec_eNB + ' 2>&1 \n'
+ task_eNB = task_eNB + ' ( date; ' + eNB_pre_exec + ' '+ eNB_pre_exec_args + ' ) > ' + logfile_pre_exec_eNB + ' 2>&1 \n'
if eNB_main_exec != "":
- task_eNB = task_eNB + ' ( ' + addsudo(eNB_main_exec + ' ' + eNB_main_exec_args, mypassword) + ' ) > ' + logfile_exec_eNB + ' 2>&1 & \n'
+ task_eNB = task_eNB + ' ( date; ' + addsudo(eNB_main_exec + ' ' + eNB_main_exec_args, mypassword) + ' ) > ' + logfile_exec_eNB + ' 2>&1 & \n'
task_eNB = task_eNB + 'array_exec_pid+=($!) \n'
task_eNB = task_eNB + 'echo eNB_main_exec PID = $! \n'
if eNB_traffic_exec != "":
- task_eNB = task_eNB + ' ( ' + eNB_traffic_exec + ' ' + eNB_traffic_exec_args + ' ) > ' + logfile_traffic_eNB + ' 2>&1 & \n '
+ cmd_traffic = eNB_traffic_exec + ' ' + eNB_traffic_exec_args
+ if cmd_traffic.find('-c') >= 0:
+ cmd_traffic = cmd_traffic + ' -t ' + str(timeout_cmd - 60)
+ task_eNB = task_eNB + ' (date; ' + cmd_traffic + ' ) > ' + logfile_traffic_eNB + ' 2>&1 & \n'
task_eNB = task_eNB + 'array_exec_pid+=($!) \n'
task_eNB = task_eNB + 'echo eNB_traffic_exec PID = $! \n'
+
+ task_eNB = task_eNB + ' (date; sudo rm -f ' + logfile_pcap_tmp_eNB + ' ; sudo -E tshark -i any -s 65535 -a duration:' + str(timeout_cmd-10)+ ' -w ' + logfile_pcap_tmp_eNB+ ' ; sudo -E chown ' + user + ' ' + logfile_pcap_tmp_eNB + ' ; zip -j -9 ' + logfile_pcap_zip_eNB + ' ' + logfile_pcap_tmp_eNB + ' ) > ' + logfile_tshark_eNB + ' 2>&1 & \n '
+ task_eNB = task_eNB + 'array_exec_pid+=($!) \n'
+ task_eNB = task_eNB + 'echo eNB_tshark_exec PID = $! \n'
#terminate the eNB test case after timeout_cmd seconds
task_eNB = task_eNB + finalize_deploy_script (timeout_cmd, eNB_terminate_missing_procs) + ' \n'
#task_eNB = task_eNB + 'sleep ' + str(timeout_cmd) + ' \n'
@@ -662,13 +761,16 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
task_UE = task_UE + 'source cmake_targets/tools/build_helper \n'
task_UE = task_UE + 'env |grep OPENAIR \n'
if UE_pre_exec != "":
- task_UE = task_UE + ' ( ' + UE_pre_exec + ' '+ UE_pre_exec_args + ' ) > ' + logfile_pre_exec_UE + ' 2>&1 \n'
+ task_UE = task_UE + ' ( date; ' + UE_pre_exec + ' '+ UE_pre_exec_args + ' ) > ' + logfile_pre_exec_UE + ' 2>&1 \n'
if UE_main_exec != "":
- task_UE = task_UE + ' ( ' + addsudo(UE_main_exec + ' ' + UE_main_exec_args, mypassword) + ' ) > ' + logfile_exec_UE + ' 2>&1 & \n'
+ task_UE = task_UE + ' ( date; ' + addsudo(UE_main_exec + ' ' + UE_main_exec_args, mypassword) + ' ) > ' + logfile_exec_UE + ' 2>&1 & \n'
task_UE = task_UE + 'array_exec_pid+=($!) \n'
task_UE = task_UE + 'echo UE_main_exec PID = $! \n'
if UE_traffic_exec != "":
- task_UE = task_UE + ' ( ' + UE_traffic_exec + ' ' + UE_traffic_exec_args + ' ) >' + logfile_traffic_UE + ' 2>&1 & \n'
+ cmd_traffic = UE_traffic_exec + ' ' + UE_traffic_exec_args
+ if cmd_traffic.find('-c') >= 0:
+ cmd_traffic = cmd_traffic + ' -t ' + str(timeout_cmd - 60)
+ task_UE = task_UE + ' ( date; ' + cmd_traffic + ' ) >' + logfile_traffic_UE + ' 2>&1 & \n'
task_UE = task_UE + 'array_exec_pid+=($!) \n'
task_UE = task_UE + 'echo UE_traffic_exec PID = $! \n'
#terminate the UE test case after timeout_cmd seconds
@@ -693,7 +795,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
task_EPC_compile = ' ( uname -a ; date \n'
task_EPC_compile = task_EPC_compile + 'array_exec_pid=()' + '\n'
- task_EPC_compile = task_EPC_compile + 'cd ' + logdirOpenaircnRepo + '\n'
+ task_EPC_compile = task_EPC_compile + 'cd ' + logdirOpenaircnRepo + ' ; source oaienv \n'
task_EPC_compile = task_EPC_compile + update_config_file(oai_EPC, EPC_config_file, logdirOpenaircnRepo, logdirOpenaircnRepo+'/TEST/autotests/tools/search_repl.py') + '\n'
task_EPC_compile = task_EPC_compile + 'source BUILD/TOOLS/build_helper \n'
if EPC_compile_prog != "":
@@ -705,20 +807,23 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
task_EPC = ' ( uname -a ; date \n'
task_EPC = task_EPC + 'array_exec_pid=()' + '\n'
- task_EPC = task_EPC + 'cd ' + logdirOpenaircnRepo + '\n'
+ task_EPC = task_EPC + 'cd ' + logdirOpenaircnRepo + '; source oaienv\n'
task_EPC = task_EPC + 'source BUILD/TOOLS/build_helper \n'
if EPC_pre_exec != "":
- task_EPC = task_EPC + ' ( ' + EPC_pre_exec + ' '+ EPC_pre_exec_args + ' ) > ' + logfile_pre_exec_EPC + ' 2>&1 \n'
+ task_EPC = task_EPC + ' ( date; ' + EPC_pre_exec + ' '+ EPC_pre_exec_args + ' ) > ' + logfile_pre_exec_EPC + ' 2>&1 \n'
if HSS_main_exec != "":
- task_EPC = task_EPC + '(' + addsudo (HSS_main_exec + ' ' + HSS_main_exec_args, mypassword) + ' ) > ' + logfile_exec_HSS + ' 2>&1 & \n'
+ task_EPC = task_EPC + '( date; ' + addsudo (HSS_main_exec + ' ' + HSS_main_exec_args, mypassword) + ' ) > ' + logfile_exec_HSS + ' 2>&1 & \n'
task_EPC = task_EPC + 'array_exec_pid+=($!) \n'
task_EPC = task_EPC + 'echo HSS_main_exec PID = $! \n'
if EPC_main_exec != "":
- task_EPC = task_EPC + '(' + addsudo (EPC_main_exec + ' ' + EPC_main_exec_args, mypassword) + ' ) > ' + logfile_exec_EPC + ' 2>&1 & \n'
+ task_EPC = task_EPC + '( date; ' + addsudo (EPC_main_exec + ' ' + EPC_main_exec_args, mypassword) + ' ) > ' + logfile_exec_EPC + ' 2>&1 & \n'
task_EPC = task_EPC + 'array_exec_pid+=($!) \n'
task_EPC = task_EPC + 'echo EPC_main_exec PID = $! \n'
if EPC_traffic_exec != "":
- task_EPC = task_EPC + '(' + EPC_traffic_exec + ' ' + EPC_traffic_exec_args + ' ) > ' + logfile_traffic_EPC + ' 2>&1 & \n'
+ cmd_traffic = EPC_traffic_exec + ' ' + EPC_traffic_exec_args
+ if cmd_traffic.find('-c') >= 0:
+ cmd_traffic = cmd_traffic + ' -t ' + str(timeout_cmd - 60)
+ task_EPC = task_EPC + '( date; ' + cmd_traffic + ' ) > ' + logfile_traffic_EPC + ' 2>&1 & \n'
task_EPC = task_EPC + 'array_exec_pid+=($!) \n'
task_EPC = task_EPC + 'echo EPC_traffic_exec PID = $! \n'
#terminate the EPC test case after timeout_cmd seconds
@@ -763,10 +868,11 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
for t in threads:
t.join()
#Now we get the log files from remote machines on the local machine
+ cleanOldProgramsAllMachines([oai_eNB, oai_UE, oai_EPC] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
- cleanOldPrograms(oai_eNB, oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
- cleanOldPrograms(oai_UE, oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
- cleanOldPrograms(oai_EPC, oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
+ #cleanOldPrograms(oai_eNB, oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
+ #cleanOldPrograms(oai_UE, oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
+ #cleanOldPrograms(oai_EPC, oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
logfile_UE_stop_script_out = logdir_UE + '/UE_stop_script_out' + '_' + str(run) + '_.log'
logfile_UE_stop_script = logdir_local_testcase + '/UE_stop_script' + '_' + str(run) + '_.log'
@@ -781,21 +887,34 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
thread_UE.start()
thread_UE.join()
+ #Now we change the permissions of the logfiles to avoid some of them being with root permissions
+ cmd = 'sudo -E chown -R ' + user + ' ' + logdir_eNB
+ res= oai_eNB.send_recv(cmd)
+ print "Changing permissions of logdir <" + logdir_eNB + "> in eNB machine..." + res
+
+ cmd = 'sudo -E chown -R ' + user + ' ' + logdir_UE
+ res= oai_UE.send_recv(cmd)
+ print "Changing permissions of logdir <" + logdir_UE + "> in UE machine..." + res
+
+ cmd = 'sudo -E chown -R ' + user + ' ' + logdir_EPC
+ res= oai_EPC.send_recv(cmd)
+ print "Changing permissions of logdir <" + logdir_EPC + "> in EPC machine..." + res
+
print "Copying files from EPCMachine : " + EPCMachine + "logdir_EPC = " + logdir_EPC
#ssh = SSHSession(EPCMachine , username=user, key_file=None, password=password)
#ssh.get_all(logdir_EPC , logdir_local + '/cmake_targets/autotests/log/'+ testcasename)
- SSHSessionWrapper(EPCMachine, user, None, password, logdir_EPC, logdir_local + '/cmake_targets/autotests/log/'+ testcasename)
+ SSHSessionWrapper(EPCMachine, user, None, password, logdir_EPC, logdir_local + '/cmake_targets/autotests/log/'+ testcasename, "get_all")
print "Copying files from eNBMachine " + eNBMachine + "logdir_eNB = " + logdir_eNB
#ssh = SSHSession(eNBMachine , username=user, key_file=None, password=password)
#ssh.get_all(logdir_eNB, logdir_local + '/cmake_targets/autotests/log/'+ testcasename)
- SSHSessionWrapper(eNBMachine, user, None, password, logdir_eNB, logdir_local + '/cmake_targets/autotests/log/'+ testcasename)
+ SSHSessionWrapper(eNBMachine, user, None, password, logdir_eNB, logdir_local + '/cmake_targets/autotests/log/'+ testcasename, "get_all")
print "Copying files from UEMachine : " + UEMachine + "logdir_UE = " + logdir_UE
#ssh = SSHSession(UEMachine , username=user, key_file=None, password=password)
#ssh.get_all(logdir_UE , logdir_local + '/cmake_targets/autotests/log/'+ testcasename)
- SSHSessionWrapper(UEMachine, user, None, password, logdir_UE, logdir_local + '/cmake_targets/autotests/log/'+ testcasename)
+ SSHSessionWrapper(UEMachine, user, None, password, logdir_UE, logdir_local + '/cmake_targets/autotests/log/'+ testcasename, "get_all")
@@ -839,7 +958,10 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
write_file(xmlFile, xml, mode="w")
-#This function searches if test case is present in list of test cases that need to be executed by user
+# \brief This function searches if test case is present in list of test cases that need to be executed by user
+# \param testcasename the test case to search for
+# \param testcasegroup list that is passed from the arguments
+# \param test_case_exclude list of test cases excluded from execution (specified in test_case_list.xml)
def search_test_case_group(testcasename, testcasegroup, test_case_exclude):
if test_case_exclude != "":
@@ -869,70 +991,150 @@ def search_test_case_group(testcasename, testcasegroup, test_case_exclude):
if match >=0:
return True
return False
-
-
-#thread1 = myThread(1, "Thread-1", 1)
+# \brief thread that cleans up remote machines from pre-existing test case executions
+# \param threadID number of thread (for book keeping)
+# \param threadname name of thread (for book keeping)
+# \param oai handler that can be used to execute programs on remote machines
+# \param CleanUpOldProgs list of programs which must be terminated before running a test case (specified in test_case_list.xml)
+# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml)
+# \param ExmimoRfStop command to stop EXMIMO Card
+class oaiCleanOldProgramThread (threading.Thread):
+ def __init__(self, threadID, threadname, oai, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop):
+ threading.Thread.__init__(self)
+ self.threadID = threadID
+ self.threadname = threadname
+ self.oai = oai
+ self.CleanUpOldProgs = CleanUpOldProgs
+ self.CleanUpAluLteBox = CleanUpAluLteBox
+ self.ExmimoRfStop = ExmimoRfStop
+ def run(self):
+ try:
+ cleanOldPrograms(self.oai, self.CleanUpOldProgs, self.CleanUpAluLteBox, self.ExmimoRfStop)
+ except Exception, e:
+ error=''
+ error = error + ' In class oaiCleanOldProgramThread, function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e)
+ error = error + '\n threadID = ' + str(self.threadID) + '\n threadname = ' + self.threadname + '\n CleanUpOldProgs = ' + self.CleanUpOldProgs + '\n CleanUpAluLteBox = ' + self.CleanUpAluLteBox + '\n ExmimoRfStop = ' + self.ExmimoRfStop + '\n'
+ error = error + traceback.format_exc()
+ print error
+ print "There is error in cleaning up old programs. The test case execution cannot continue...."
+ sys.exit(1)
+
+# \brief Run parallel threads in all machines for clean up old execution of test cases
+# \param oai_list list of handlers that can be used to execute programs on remote machines
+# \param CleanUpOldProgs list of programs which must be terminated before running a test case (specified in test_case_list.xml)
+# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml)
+# \param ExmimoRfStop command to stop EXMIMO Card
+def cleanOldProgramsAllMachines(oai_list, CleanOldProgs, CleanUpAluLteBox, ExmimoRfStop):
+ threadId=0
+ threadList=[]
+ for oai in oai_list:
+ threadName="cleanup_thread_"+str(threadId)
+ thread=oaiCleanOldProgramThread(threadId, threadName, oai, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop)
+ threadList.append(thread)
+ thread.start()
+ threadId = threadId + 1
+ for t in threadList:
+ t.join()
+
+
debug = 0
pw =''
i = 0
dlsim=0
localshell=0
-is_compiled = 0
-timeout=2000
-xmlInputFile="./test_case_list.xml"
-NFSResultsDir = '/mnt/sradio'
-cleanupOldProgramsScript = '$OPENAIR_DIR/cmake_targets/autotests/tools/remove_old_programs.bash'
+GitOAI5GRepoBranch=''
+GitOAI5GHeadVersion=''
+user=''
+pw=''
testcasegroup=''
-
-logdir = '/tmp/' + 'OAITestFrameWork-' + getpass.getuser() + '/'
-logdirOAI5GRepo = logdir + 'openairinterface5g/'
-logdirOpenaircnRepo = logdir + 'openair-cn/'
-
+NFSResultsShare=''
+cleanUpRemoteMachines=False
openairdir_local = os.environ.get('OPENAIR_DIR')
if openairdir_local is None:
print "Environment variable OPENAIR_DIR not set correctly"
sys.exit()
-locallogdir = openairdir_local + '/cmake_targets/autotests/log/'
-#Remove the contents of local log directory
-#os.system(' rm -fr ' + locallogdir + '; mkdir -p ' + locallogdir )
+locallogdir = openairdir_local + '/cmake_targets/autotests/log'
+MachineList = ''
+MachineListGeneric=''
flag_remove_logdir=False
+flag_start_testcase=False
+nruns_lte_softmodem=''
+flag_skip_git_head_check=False
+Timeout_cmd=''
+print "Number of arguments argc = " + str(len(sys.argv))
+#for index in range(1,len(sys.argv) ):
+# print "argv_" + str(index) + " : " + sys.argv[index]
+
i=1
while i < len (sys.argv):
arg=sys.argv[i]
- if arg == '-d':
- debug = 1
- elif arg == '-dd':
- debug = 2
- elif arg == '-p' :
- prompt2 = sys.argv[i+1]
- i = i +1
- elif arg == '-r':
- flag_remove_logdir=True
- elif arg == '-w' :
- pw = sys.argv[i+1]
- i = i +1
- elif arg == '-P' :
- dlsim = 1
- elif arg == '-l' :
- localshell = 1
- elif arg == '-c' :
- is_compiled = 1
- elif arg == '-t' :
- timeout = sys.argv[i+1]
- i = i +1
+ if arg == '-r':
+ flag_remove_logdir=True
+ elif arg == '-s' :
+ flag_start_testcase=True
elif arg == '-g' :
testcasegroup = sys.argv[i+1].replace("\"","")
i = i +1
+ elif arg == '-c':
+ cleanUpRemoteMachines=True
+ elif arg == '-5GRepoBranch':
+ GitOAI5GRepoBranch = sys.argv[i+1]
+ i = i +1
+ elif arg == '-5GRepoHeadVersion':
+ GitOAI5GHeadVersion = sys.argv[i+1]
+ #We now find the branch that corresponds to this Git Head Commit
+ cmd = "git show-ref --head " + " | grep " + GitOAI5GHeadVersion
+ cmd_out = subprocess.check_output ([cmd], shell=True)
+ cmd_out=cmd_out.replace("\n","")
+ cmd_out = cmd_out.split('/')
+ GitOAI5GRepoBranch = cmd_out[-1]
+ if GitOAI5GRepoBranch == '':
+ print "Error extracting GitBranch from head commit. Exiting now..."
+ sys.exit(1)
+ i = i +1
+ elif arg == '-u':
+ user = sys.argv[i+1]
+ i = i +1
+ elif arg == '-p':
+ pw = sys.argv[i+1]
+ i = i +1
+ elif arg == '-n':
+ NFSResultsShare = sys.argv[i+1]
+ i = i +1
+ elif arg == '--nrun_lte_softmodem':
+ nruns_lte_softmodem = sys.argv[i+1]
+ i = i +1
+ elif arg == '-MachineList':
+ MachineList = sys.argv[i+1]
+ MachineList = MachineList.replace("\"","")
+ MachineList = MachineList.replace("\'","")
+ i = i +1
+ elif arg == '-MachineListGeneric':
+ MachineListGeneric = sys.argv[i+1]
+ MachineListGeneric = MachineListGeneric.replace("\"","")
+ MachineListGeneric = MachineListGeneric.replace("\'","")
+ i = i +1
+ elif arg == '--skip-git-head-check':
+ flag_skip_git_head_check=True
+ elif arg == '--timeout_cmd':
+ Timeout_cmd = sys.argv[i+1]
+ i = i +1
elif arg == '-h' :
- print "-d: low debug level"
- print "-dd: high debug level"
- print "-p: set the prompt"
+ print "-s: This flag *MUST* be set to start the test cases"
print "-r: Remove the log directory in autotests"
print "-g: Run test cases in a group"
- print "-w: set the password for ssh to localhost"
- print "-l: use local shell instead of ssh connection"
- print "-t: set the time out in second for commands"
+ print "-c: Run cleanup scripts on remote machines and exit"
+ print "-5GRepoBranch: Branch for OAI 5G Repository to run tests (overrides the branch in test_case_list.xml)"
+ print "-5GRepoHeadVersion: Head commit on which to run tests (overrides the branch in test_case_list.xml)"
+ print "-u: use the user name passed as argument"
+ print "-p: use the password passed as an argument"
+ print "-n: Set the NFS share passed as an argument"
+ print "--nrun_lte_softmodem: Set the number of runs for lte-softmodem test case class"
+ print "-MachineList : overrides the MachineList parameter in test_case_list.xml"
+ print "-MachineListGeneric : overrides the MachineListGeneric parameter in test_case_list.xml"
+ print "--skip-git-head-check: skip checking of GitHead remote/local branch (only for debugging)"
+ print "--timeout_cmd: Override the default parameter (timeout_cmd) in test_case_list.xml. This parameter is in seconds and should be > 120"
sys.exit()
else :
print "Unrecongnized Option: <" + arg + ">. Use -h to see valid options"
@@ -957,27 +1159,48 @@ except KeyError:
print "Please set the environment variable OPENAIR_TARGETS in the .bashrc"
sys.exit(1)
+print "Killing zombie ssh sessions from earlier sessions..."
+cmd='ps aux |grep \"/usr/bin/ssh -q -l guptar\"|tr -s \" \" :|cut -f 2 -d :|xargs kill -9 '
+os.system(cmd)
+
+if flag_start_testcase == False:
+ print "You need to start the testcase by passing option -s. Use -h to see all options. Aborting now..."
+ sys.exit(1)
+
+# get the oai object
+host = os.uname()[1]
+#oai = openair('localdomain','calisson')
+oai_list = []
+
+#start_time = time.time() # datetime.datetime.now()
+if user=='':
+ user = getpass.getuser()
+if pw=='':
+ pw = getpass.getpass()
+
+print "Killing zombie ssh sessions from earlier sessions..."
+cmd='ps aux |grep \"/usr/bin/ssh -q -l guptar\"|tr -s \" \" :|cut -f 2 -d :|xargs kill -9 '
+cmd = cmd + '; ps aux |grep \"/usr/bin/ssh -q -l ' + user + '\"|tr -s \" \" :|cut -f 2 -d :|xargs kill -9 '
+os.system(cmd)
+
+print "host = " + host
+print "user = " + user
+xmlInputFile=os.environ.get('OPENAIR_DIR')+"/cmake_targets/autotests/test_case_list.xml"
+NFSResultsDir = '/mnt/sradio'
+cleanupOldProgramsScript = '$OPENAIR_DIR/cmake_targets/autotests/tools/remove_old_programs.bash'
+logdir = '/tmp/' + 'OAITestFrameWork-' + user + '/'
+logdirOAI5GRepo = logdir + 'openairinterface5g/'
+logdirOpenaircnRepo = logdir + 'openair-cn/'
+
if flag_remove_logdir == True:
print "Removing directory: " + locallogdir
os.system(' rm -fr ' + locallogdir + '; mkdir -p ' + locallogdir )
-
-
paramiko_logfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/log/paramiko.log')
res=os.system(' echo > ' + paramiko_logfile)
paramiko.util.log_to_file(paramiko_logfile)
-# get the oai object
-host = os.uname()[1]
-#oai = openair('localdomain','calisson')
-oai_list = {}
-
-
-#start_time = time.time() # datetime.datetime.now()
-user = getpass.getuser()
-print "host = " + host
-print "user = " + user
-pw=getpass.getpass()
+#pw=getpass.getpass()
#Now we parse the xml file for basic configuration
xmlTree = ET.parse(xmlInputFile)
@@ -985,52 +1208,59 @@ xmlRoot = xmlTree.getroot()
-
-MachineList = xmlRoot.findtext('MachineList',default='')
+if MachineList =='':
+ MachineList = xmlRoot.findtext('MachineList',default='')
NFSResultsShare = xmlRoot.findtext('NFSResultsShare',default='')
GitOpenaircnRepo = xmlRoot.findtext('GitOpenair-cnRepo',default='')
GitOAI5GRepo = xmlRoot.findtext('GitOAI5GRepo',default='')
-GitOAI5GRepoBranch = xmlRoot.findtext('GitOAI5GRepoBranch',default='')
+
+if GitOAI5GRepoBranch == '':
+ GitOAI5GRepoBranch = xmlRoot.findtext('GitOAI5GRepoBranch',default='')
+
GitOpenaircnRepoBranch = xmlRoot.findtext('GitOpenair-cnRepoBranch',default='')
CleanUpOldProgs = xmlRoot.findtext('CleanUpOldProgs',default='')
CleanUpAluLteBox = xmlRoot.findtext('CleanUpAluLteBox',default='')
Timeout_execution = int (xmlRoot.findtext('Timeout_execution'))
-MachineListGeneric = xmlRoot.findtext('MachineListGeneric',default='')
+if MachineListGeneric == '':
+ MachineListGeneric = xmlRoot.findtext('MachineListGeneric',default='')
TestCaseExclusionList = xmlRoot.findtext('TestCaseExclusionList',default='')
ExmimoRfStop = xmlRoot.findtext('ExmimoRfStop',default='')
+if nruns_lte_softmodem == '':
+ nruns_lte_softmodem = xmlRoot.findtext('nruns_lte-softmodem',default='')
+
print "MachineList = " + MachineList
print "GitOpenair-cnRepo = " + GitOpenaircnRepo
print "GitOAI5GRepo = " + GitOAI5GRepo
print "GitOAI5GBranch = " + GitOAI5GRepoBranch
print "GitOpenaircnRepoBranch = " + GitOpenaircnRepoBranch
print "NFSResultsShare = " + NFSResultsShare
-cmd = "git show-ref --heads -s "+ GitOAI5GRepoBranch
-GitOAI5GHeadVersion = subprocess.check_output ([cmd], shell=True)
+print "nruns_lte_softmodem = " + nruns_lte_softmodem
+print "Timeout_cmd = " + Timeout_cmd
+
+if GitOAI5GHeadVersion == '':
+ cmd = "git show-ref --heads -s "+ GitOAI5GRepoBranch
+ GitOAI5GHeadVersion = subprocess.check_output ([cmd], shell=True)
+ GitOAI5GHeadVersion=GitOAI5GHeadVersion.replace("\n","")
+
print "GitOAI5GHeadVersion = " + GitOAI5GHeadVersion
print "CleanUpOldProgs = " + CleanUpOldProgs
print "Timeout_execution = " + str(Timeout_execution)
+if GitOAI5GHeadVersion == '':
+ print "Error getting the OAI5GBranch Head version...Exiting"
+ sys.exit()
+
+NFSTestsResultsDir = NFSResultsShare + '/'+ GitOAI5GRepoBranch + '/' + GitOAI5GHeadVersion
+
+print "NFSTestsResultsDir = " + NFSTestsResultsDir
+
MachineList = MachineList.split()
MachineListGeneric = MachineListGeneric.split()
-index=0
+#index=0
for machine in MachineList:
- oai_list[index] = openair('localdomain',machine)
- index = index + 1
-
-
-#myThread (1,"sddsf", 1)
-
-
-#thread1 = oaiThread1(1, "Thread-1", 1)
-#def __init__(self, threadID, name, counter, oai, cmd, sudo, timeout):
-
-#sys.exit()
-
-
-
-
-
+ oai_list.append( openair('localdomain',machine))
+ #index = index + 1
print "\nTesting the sanity of machines used for testing..."
@@ -1049,14 +1279,6 @@ if localshell == 0:
#print "password: " + pw
# issues in ubuntu 12.04
oai_list[index].connect(user,pw)
- #print "result = " + result
-
-
- #print '\nCleaning Older running programs : ' + CleanUpOldProgs
- #cleanOldPrograms(oai_list[index], CleanUpOldProgs)
-
-
-
print '\nChecking for sudo permissions on machine <'+machine+'>...'
result = oai_list[index].send_expect_false('sudo -S -v','may not run sudo',True)
print "Sudo permissions..." + result
@@ -1064,18 +1286,17 @@ if localshell == 0:
print '\nCleaning Older running programs : ' + CleanUpOldProgs
cleanOldPrograms(oai_list[index], CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop)
- result = oai_list[index].send('mount ' + NFSResultsDir, True)
- print "Mounting NFS Share " + NFSResultsDir + "..." + result
+ #result = oai_list[index].send('mount ' + NFSResultsDir, True)
+ #print "Mounting NFS Share " + NFSResultsDir + "..." + result
# Check if NFS share is mounted correctly.
- print 'Checking if NFS Share<' + NFSResultsDir + '> is mounted correctly...'
- #result = oai_list[index].send_expect('mount | grep ' + NFSResultsDir, NFSResultsDir )
- cmd = 'if grep -qs '+NFSResultsDir+ ' /proc/mounts; then echo \'' + NFSResultsDir + ' is mounted\' ; fi'
- search_expr = NFSResultsDir + ' is mounted'
- print "cmd = " + cmd
- print "search_expr = " + search_expr
- result = oai_list[index].send_expect(cmd, search_expr)
- print "Mount NFS_Results_Dir..." + result
+ #print 'Checking if NFS Share<' + NFSResultsDir + '> is mounted correctly...'
+ #cmd = 'if grep -qs '+NFSResultsDir+ ' /proc/mounts; then echo \'' + NFSResultsDir + ' is mounted\' ; fi'
+ #search_expr = NFSResultsDir + ' is mounted'
+ #print "cmd = " + cmd
+ #print "search_expr = " + search_expr
+ #result = oai_list[index].send_expect(cmd, search_expr)
+ #print "Mount NFS_Results_Dir..." + result
index = index + 1
#oai.connect2(user,pw)
@@ -1087,39 +1308,18 @@ else:
pw = ''
oai_list[0].connect_localshell()
-
-
-
-
-cpu_freq = int(oai_list[0].cpu_freq())
-if timeout == 2000 :
- if cpu_freq <= 2000 :
- timeout = 3000
- elif cpu_freq < 2700 :
- timeout = 2000
- elif cpu_freq < 3300 :
- timeout = 1500
-print "cpu freq(MHz): " + str(cpu_freq) + "timeout(s): " + str(timeout)
-
-# The log files are stored in branch/version/
-
-
-
-#result = oai_list[0].send('uname -a ' )
-#print result
-
#We now prepare the machines for testing
-#index=0
+index=0
threads_init_setup=[]
-for index in oai_list:
+for oai in oai_list:
try:
print "setting up machine: " + MachineList[index]
#print oai_list[oai].send_recv('echo \''+pw+'\' |sudo -S -v')
#print oai_list[oai].send_recv('sudo su')
#print oai_list[oai].send_recv('who am i')
#cleanUpPrograms(oai_list[oai]
- cmd = 'mkdir -p ' + logdir + ' ; rm -fr ' + logdir + '/*'
- result = oai_list[index].send_recv(cmd)
+ cmd = 'sudo -S -E rm -fr ' + logdir + ' ; mkdir -p ' + logdir
+ result = oai.send_recv(cmd)
setuplogfile = logdir + '/setup_log_' + MachineList[index] + '_.txt'
setup_script = locallogdir + '/setup_script_' + MachineList[index] + '_.txt'
@@ -1128,54 +1328,33 @@ for index in oai_list:
#cmd = cmd + 'mkdir -p ' + logdir + '\n'
cmd = cmd + 'cd '+ logdir + '\n'
cmd = cmd + 'git config --global http.sslVerify false \n'
- cmd = cmd + 'git clone '+ GitOAI5GRepo + '\n'
- cmd = cmd + 'git clone '+ GitOpenaircnRepo + '\n'
+ cmd = cmd + 'git clone --depth 1 '+ GitOAI5GRepo + ' -b ' + GitOAI5GRepoBranch +' \n'
+ cmd = cmd + 'git clone '+ GitOpenaircnRepo + ' -b ' +GitOpenaircnRepoBranch + ' \n'
cmd = cmd + 'cd ' + logdirOAI5GRepo + '\n'
- cmd = cmd + 'git checkout ' + GitOAI5GHeadVersion + '\n'
+ cmd = cmd + 'git checkout ' + GitOAI5GRepoBranch + '\n'
+ #cmd = cmd + 'git checkout ' + GitOAI5GHeadVersion + '\n'
+ cmd = cmd + 'git_head=`git ls-remote |grep \'' + GitOAI5GRepoBranch + '\'` \n'
+ cmd = cmd + 'git_head=($git_head) \n'
+ cmd = cmd + 'git_head=${git_head[0]} \n'
+ cmd = cmd + 'echo \"GitOAI5GHeadVersion_remote = $git_head\"'
+ cmd = cmd + 'echo \"GitOAI5GHeadVersion_local = ' + GitOAI5GHeadVersion + '\" \n'
+ if flag_skip_git_head_check==True:
+ cmd = cmd + 'echo \"skipping GitHead check...\" \n '
+ else:
+ cmd = cmd + 'if [ \"$git_head\" != \"'+ GitOAI5GHeadVersion + '\" ]; then echo \"error: Git openairinterface5g head version does not match\" ; fi \n'
cmd = cmd + 'source oaienv' + '\n'
cmd = cmd + 'cd ' + logdirOpenaircnRepo + '\n'
cmd = cmd + 'git checkout ' + GitOpenaircnRepoBranch + '\n'
cmd = cmd + 'env |grep OPENAIR' + '\n'
cmd = cmd + ' cd ' + logdir + '\n'
- cmd = cmd + ' ) > ' + setuplogfile + ' 2>&1 '
+ cmd = cmd + ' ) > ' + setuplogfile + ' 2>&1 \n'
#cmd = cmd + 'echo \' ' + cmd + '\' > ' + setup_script + ' 2>&1 \n '
#result = oai_list[index].send_recv(cmd, False, 300 )
write_file(setup_script, cmd, mode="w")
tempThread = oaiThread(index, 'thread_setup_'+str(index)+'_' + MachineList[index] , MachineList[index] , user, pw, cmd, False, 300)
threads_init_setup.append(tempThread )
tempThread.start()
-
- #localfile = locallogdir + '/setup_log_' + MachineList[index] + '_.txt'
- #remotefile = logdir + '/setup_log_' + MachineList[index] + '_.txt'
-
- #sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log')
- #sftp_module (user, pw, MachineList[index], 22, localfile, remotefile, sftp_log, "get")
-
-
- #Now we copy test_case_list.xml on the remote machines
- #localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/test_case_list.xml')
- #remotefile = logdirOAI5GRepo + '/cmake_targets/autotests/test_case_list.xml'
-
- #sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log')
- #sftp_module (user, pw, MachineList[index], 22, localfile, remotefile, sftp_log, "put")
-
-
- #print oai_list[index].send('rm -fR ' + logdir)
- #print oai_list[index].send('mkdir -p ' + logdir)
- #print oai_list[index].send('cd '+ logdir)
- #print oai_list[index].send('git clone '+ GitOAI5GRepo )
- #print oai_list[index].send('git clone '+ GitOpenaircnRepo)
- #print oai_list[index].send('cd ' + logdirOAI5GRepo)
- #print oai_list[index].send('git checkout ' + GitOAI5GHeadVersion)
- #print oai_list[index].send('source oaienv')
- #print oai_list[index].send('cd ' + logdirOpenaircnRepo)
- #print oai_list[index].send('git checkout ' + GitOpenaircnRepoBranch)
- #print oai_list[index].send_recv('cd ' + logdirOAI5GRepo)
- #print oai_list[index].send_recv('source oaienv')
- #print oai_list[index].send_recv('env |grep OPENAIR')
-
- #print '\nCleaning Older running programs : ' + CleanUpOldProgs
- #cleanOldPrograms(oai_list[index], CleanUpOldProgs)
+ index = index + 1
except Exception, e:
print 'There is error in one of the commands to setup the machine '+ MachineList[index]
error=''
@@ -1205,8 +1384,10 @@ for t in threads_init_setup:
paramList.append ( {"operation":'put', "localfile":localfile, "remotefile":remotefile} )
sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log')
sftp_module (user, pw, MachineList[index], port, paramList, sftp_log)
- index = index+1
-
+
+ cmd = ' cd ' + logdirOAI5GRepo + ' ; source oaienv ; env|grep OPENAIR \n'
+ res = oai_list[index].send_recv(cmd)
+ index = index +1
if os.path.exists(localfile) == 0:
print "Setup log file <" + localfile + "> missing for machine <" + MachineList[index] + ">. Please check the setup log files. Exiting now"
sys.exit(1)
@@ -1214,12 +1395,15 @@ for t in threads_init_setup:
#Now we process all the test cases
#Now we check if there was error in setup files
-status, out = commands.getstatusoutput('grep ' + ' -il \'error\' ' + locallogdir + '/setup*')
+status, out = commands.getstatusoutput('grep ' + ' -il \'error\' ' + locallogdir + '/setup_log*')
if (out != '') :
print "There is error in setup of machines"
print "status = " + str(status) + "\n Check files for error = " + out
print sys.exit(1)
+cleanOldProgramsAllMachines(oai_list, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop)
+if cleanUpRemoteMachines == True:
+ sys.exit(0)
threadListGlobal=[]
testcaseList=xmlRoot.findall('testCase')
@@ -1243,11 +1427,12 @@ for testcase in testcaseList:
print "eNBMachine : " + eNBMachine + "UEMachine : " + UEMachine + "EPCMachine : " + EPCMachine + "MachineList : " + ','.join(MachineList)
print "testcasename = " + testcasename + " class = " + testcaseclass
threadListGlobal = wait_testcaseclass_generic_threads(threadListGlobal, Timeout_execution)
- handle_testcaseclass_softmodem (testcase, CleanUpOldProgs, logdirOAI5GRepo, logdirOpenaircnRepo, MachineList, pw, CleanUpAluLteBox, ExmimoRfStop )
+ #cleanOldProgramsAllMachines(oai_list, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop)
+ handle_testcaseclass_softmodem (testcase, CleanUpOldProgs, logdirOAI5GRepo, logdirOpenaircnRepo, MachineList, user, pw, CleanUpAluLteBox, ExmimoRfStop, nruns_lte_softmodem, Timeout_cmd )
elif (testcaseclass == 'compilation'):
- threadListGlobal = handle_testcaseclass_generic (testcasename, threadListGlobal, CleanUpOldProgs, logdirOAI5GRepo, MachineListGeneric, pw, CleanUpAluLteBox,Timeout_execution, ExmimoRfStop)
+ threadListGlobal = handle_testcaseclass_generic (testcasename, threadListGlobal, CleanUpOldProgs, logdirOAI5GRepo, MachineListGeneric, user, pw, CleanUpAluLteBox,Timeout_execution, ExmimoRfStop)
elif (testcaseclass == 'execution'):
- threadListGlobal = handle_testcaseclass_generic (testcasename, threadListGlobal, CleanUpOldProgs, logdirOAI5GRepo, MachineListGeneric, pw, CleanUpAluLteBox,ExmimoRfStop)
+ threadListGlobal = handle_testcaseclass_generic (testcasename, threadListGlobal, CleanUpOldProgs, logdirOAI5GRepo, MachineListGeneric, user, pw, CleanUpAluLteBox, Timeout_execution, ExmimoRfStop)
else :
print "Unknown test case class: " + testcaseclass
sys.exit()
@@ -1262,66 +1447,24 @@ for testcase in testcaseList:
#sys.exit(1)
-print "Exiting the test cases execution now..."
+print "Exiting the test cases execution now. Waiting for existing threads to complete..."
-for t in threadListGlobal:
- t.join
+for param in threadListGlobal:
+ thread_id = param["thread_id"]
+ thread_id.join()
+
+print "Creating xml file for overall results..."
+cmd = "cat $OPENAIR_DIR/cmake_targets/autotests/log/*/*.xml > $OPENAIR_DIR/cmake_targets/autotests/log/results_autotests.xml "
+res=os.system(cmd)
+
+print "Now copying files to NFS Share"
+oai_localhost = openair('localdomain','localhost')
+oai_localhost.connect(user,pw)
+cmd = ' rm -fr ' + NFSTestsResultsDir + ' ; mkdir -p ' + NFSTestsResultsDir
+res = oai_localhost.send_recv(cmd)
+print "Deleting NFSTestResults Dir..." + res
+
+print "Copying files from GilabCI Runner Machine : " + host + " .locallogdir = " + locallogdir + ", NFSTestsResultsDir = " + NFSTestsResultsDir
+SSHSessionWrapper('localhost', user, None, pw , NFSTestsResultsDir , locallogdir, "put_all")
sys.exit()
-
- #+ "class = "+ classx
-
-
-
- #index = index +1
-
-test = 'test01'
-ctime=datetime.datetime.utcnow().strftime("%Y-%m-%d.%Hh%M")
-logfile = user+'.'+test+'.'+ctime+'.txt'
-logdir = os.getcwd() + '/pre-ci-logs-'+host;
-oai.create_dir(logdir,debug)
-print 'log dir: ' + logdir
-print 'log file: ' + logfile
-pwd = oai.send_recv('pwd')
-print "pwd = " + pwd
-result = oai.send('echo linux | sudo -S ls -al;sleep 5')
-print "result =" + result
-sys.exit()
-
-#oai.send_nowait('mkdir -p -m 755' + logdir + ';')
-
-#print '=================start the ' + test + ' at ' + ctime + '=================\n'
-#print 'Results will be reported in log file : ' + logfile
-log.writefile(logfile,'====================start'+test+' at ' + ctime + '=======================\n')
-log.set_debug_level(debug)
-
-oai.kill(user, pw)
-oai.rm_driver(oai,user,pw)
-
-# start te test cases
-if is_compiled == 0 :
- is_compiled=case01.execute(oai, user, pw, host,logfile,logdir,debug,timeout)
-
-if is_compiled != 0 :
- case02.execute(oai, user, pw, host, logfile,logdir,debug)
- case03.execute(oai, user, pw, host, logfile,logdir,debug)
- case04.execute(oai, user, pw, host, logfile,logdir,debug)
- case05.execute(oai, user, pw, host, logfile,logdir,debug)
-else :
- print 'Compilation error: skip test case 02,03,04,05'
-
-oai.kill(user, pw)
-oai.rm_driver(oai,user,pw)
-
-# perform the stats
-log.statistics(logfile)
-
-
-oai.disconnect()
-
-ctime=datetime.datetime.utcnow().strftime("%Y-%m-%d_%Hh%M")
-log.writefile(logfile,'====================end the '+ test + ' at ' + ctime +'====================')
-print 'Test results can be found in : ' + logfile
-#print '\nThis test took %f minutes\n' % math.ceil((time.time() - start_time)/60)
-
-#print '\n=====================end the '+ test + ' at ' + ctime + '====================='
diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml
index ba34085d90..037f5c8ee9 100644
--- a/cmake_targets/autotests/test_case_list.xml
+++ b/cmake_targets/autotests/test_case_list.xml
@@ -1,17 +1,18 @@
-stevens calisson mozart nano amerique
- /mnt/sradio/TEST_RESULTS
+mozart calisson stevens nano amerique
+ /mnt/sradio/TEST_RESULTS/
https://gitlab.eurecom.fr/oai/openairinterface5g.git
https://gitlab.eurecom.fr/oai/openair-cn.git
- enhancement-57-UHD-interfacing
- feature-17-test_framework
- oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* iperf* hss hss_sim configure_cots_bandrich_ue* wvdial* run_exec_autotests* iperf
- /opt/ltebox/tools/stop_ltebox
-cd $OPENAIR_DIR/cmake_targets/autotests/tools/exmimo; sudo -E -S octave ./exmimo_stop.m
+ develop
+ develop
+ oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* hss hss_sim configure_cots_bandrich_ue* wvdial* iperf iperf_script ping tshark
+ sudo -S -E /opt/ltebox/tools/stop_ltebox
+$OPENAIR_DIR/cmake_targets/build_oai -w EXMIMO -c; sudo -S -E $OPENAIR_DIR/cmake_targets/tools/stop_exmimo2; uname -a; dmesg|tail
36000
- 0104+ 015502 015505 015506 015507 015508 015508 015509 015510 015511 015600 015700 016102 016105
- calisson stevens mozart nano amerique
+ 0104+ 015502 015505 015506 015507 015508 015509 015510 015511 015602 015605 015702 015705 015802 015805 016002 016005 016102 016105 016302 016305 016502 016505
+ 3
+ mozart calisson stevens nano amerique
compilation
Build oaisim.Rel8
@@ -80,7 +81,8 @@
--eNB -w USRP -r Rel10 --noS1 -c
$OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1
$OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/rb_tool
- $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/CMakeFiles/nasmesh/nasmesh.ko
+ $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/CMakeFiles/nasmesh/nasmesh.ko
+ $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/liboai_usrpdevif.so
@@ -121,14 +123,15 @@
--eNB -w BLADERF -r Rel10 --noS1 -c
$OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1
$OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/rb_tool
- $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/CMakeFiles/nasmesh/nasmesh.ko
+ $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/CMakeFiles/nasmesh/nasmesh.ko
+ $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/liboai_bladerfdevif.so
- lte-softmodem_noS1.EXMIMO.Rel10
+ lte-softmodem_noS1.BLADERF.Rel10
1
@@ -137,10 +140,11 @@
Build lte_softmodem_noS1.ETHERNET.Rel10
$OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w ETHERNET -r Rel10 --noS1 -c
+ --eNB -w None -t ETHERNET -r Rel10 --noS1 -c
$OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1
$OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/rb_tool
- $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/CMakeFiles/nasmesh/nasmesh.ko
+ $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/CMakeFiles/nasmesh/nasmesh.ko
+ $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/liboai_eth_transpro.so
@@ -159,7 +163,8 @@
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -r Rel10 -c
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/liboai_usrpdevif.so
@@ -196,7 +201,8 @@
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w BLADERF -r Rel10 -c
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/liboai_bladerfdevif.so
@@ -212,8 +218,9 @@
Build lte_softmodem.ETHERNET.Rel10
$OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w ETHERNET -r Rel10 -c
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ --eNB -w None -t ETHERNET -r Rel10 -c
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/liboai_eth_transpro.so
@@ -260,11 +267,13 @@
compilation
- Build RRH Gateway
+ Build RRH Gateway for USRP(RF) + Ethernet (Transport)
$OPENAIR_DIR/cmake_targets/build_oai
- --RRH -w USRP -c
- $OPENAIR_DIR/cmake_targets/rrh_gw/build/rrh_gw
+ --RRH -w USRP -t ETHERNET -c
+ $OPENAIR_DIR/cmake_targets/rrh_gw/build/rrh_gw
+ $OPENAIR_DIR/cmake_targets/rrh_gw/build/liboai_usrpdevif.so
+ $OPENAIR_DIR/cmake_targets/rrh_gw/build/liboai_eth_transpro.so
@@ -277,14 +286,16 @@
compilation
- Build RRH Gateway
+ Build RRH Gateway for EXMIMO(RF) + Ethernet (Transport)
$OPENAIR_DIR/cmake_targets/build_oai
- --RRH -w EXMIMO -c
+ --RRH -w EXMIMO -t ETHNERNET -c
$OPENAIR_DIR/cmake_targets/rrh_gw/build/rrh_gw
$OPENAIR_DIR/cmake_targets/rrh_gw/build/CMakeFiles/openair_rf/openair_rf.ko
$OPENAIR_DIR/cmake_targets/rrh_gw/build/updatefw
- $OPENAIR_DIR/cmake_targets/rrh_gw/build/oarf_config_exmimo.oct
+ $OPENAIR_DIR/cmake_targets/rrh_gw/build/oarf_config_exmimo.oct
+ $OPENAIR_DIR/cmake_targets/rrh_gw/build/liboai_exmimodevif.so
+ $OPENAIR_DIR/cmake_targets/rrh_gw/build/liboai_eth_transpro.so
@@ -300,8 +311,10 @@
Build RRH Gateway
$OPENAIR_DIR/cmake_targets/build_oai
- --RRH -w BLADERF -c
- $OPENAIR_DIR/cmake_targets/rrh_gw/build/rrh_gw
+ --RRH -w BLADERF -t ETHERNET -c
+ $OPENAIR_DIR/cmake_targets/rrh_gw/build/rrh_gw
+ $OPENAIR_DIR/cmake_targets/rrh_gw/build/liboai_bladerfdevif.so
+ $OPENAIR_DIR/cmake_targets/rrh_gw/build/liboai_eth_transpro.so
@@ -316,18 +329,22 @@
execution
Run OAISIM Rel10 TDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2) and search for errors, segmentation fault or exit
-
+ cp -vf $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf
$OPENAIR_DIR/cmake_targets/build_oai
--oaisim --noS1 -c
$OPENAIR_DIR/cmake_targets/tools/init_nas_nos1
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf frame_type \"TDD\"
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf eutra_band 38
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf downlink_frequency 2580000000L
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf uplink_frequency_offset 0
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 1
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 1
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 1
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 2
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 2
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 2
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 1
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 1
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 1
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 2
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 2
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 2
oaisim_noS1.tdd.5MHz.TM1 oaisim_noS1.tdd.10MHz.TM1 oaisim_noS1.tdd.20MHz.TM1 oaisim_noS1.tdd.5MHz.TM2 oaisim_noS1.tdd.10MHz.TM2 oaisim_noS1.tdd.20MHz.TM2
"Received RRCConnectionReconfigurationComplete from UE 0"
segmentation fault|assertion|exiting|fatal
@@ -337,18 +354,22 @@
execution
Run OAISIM Rel10 TDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2) in PHY_ABSTRACTION mode and search for errors, segmentation fault or exit
-
+ cp -vf $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf
$OPENAIR_DIR/cmake_targets/build_oai
--oaisim --noS1 -c
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf frame_type \"TDD\"
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf eutra_band 38
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf downlink_frequency 2580000000L
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf uplink_frequency_offset 0
$OPENAIR_DIR/cmake_targets/tools/init_nas_nos1
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 1 -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 1 -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 1 -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 2 -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 2 -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 2 -a
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 1 -a
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 1 -a
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 1 -a
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 2 -a
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 2 -a
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 2 -a
oaisim_noS1.tdd.5MHz.TM1 oaisim_noS1.tdd.10MHz.TM1 oaisim_noS1.tdd.20MHz.TM1 oaisim_noS1.tdd.5MHz.TM2 oaisim_noS1.tdd.10MHz.TM2 oaisim_noS1.tdd.20MHz.TM2
"Received RRCConnectionReconfigurationComplete from UE 0"
segmentation fault|assertion|exiting|fatal
@@ -358,18 +379,22 @@
execution
Run OAISIM Rel10 TDD, 1 eNB + 3 UEs (5 MHz/10MHz/20MHz), (TM 1,2) and search for errors, segmentation fault or exit
-
+cp -vf $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf
$OPENAIR_DIR/cmake_targets/build_oai
--oaisim --noS1 -c
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf frame_type \"TDD\"
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf eutra_band 38
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf downlink_frequency 2580000000L
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf uplink_frequency_offset 0
$OPENAIR_DIR/cmake_targets/tools/init_nas_nos1
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2
oaisim_noS1.tdd.5MHz.TM1 oaisim_noS1.tdd.10MHz.TM1 oaisim_noS1.tdd.20MHz.TM1 oaisim_noS1.tdd.5MHz.TM2 oaisim_noS1.tdd.10MHz.TM2 oaisim_noS1.tdd.20MHz.TM2
"Received RRCConnectionReconfigurationComplete from UE 0" "Received RRCConnectionReconfigurationComplete from UE 1" "Received RRCConnectionReconfigurationComplete from UE 2"
segmentation fault|assertion|exiting|fatal
@@ -379,18 +404,22 @@
execution
Run OAISIM Rel10 TDD, 1 eNB + 3 UEs (5 MHz) in PHY_ABSTRACTION mode and search for errors, segmentation fault or exit
-
+ cp -vf $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf
$OPENAIR_DIR/cmake_targets/build_oai
--oaisim --noS1 -c
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf frame_type \"TDD\"
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf eutra_band 38
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf downlink_frequency 2580000000L
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf uplink_frequency_offset 0
$OPENAIR_DIR/cmake_targets/tools/init_nas_nos1
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2 -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2 -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2 -a
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -a
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -a
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -a
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2 -a
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2 -a
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2 -a
oaisim_noS1.tdd.5MHz.TM1 oaisim_noS1.tdd.10MHz.TM1 oaisim_noS1.tdd.20MHz.TM1 oaisim_noS1.tdd.5MHz.TM2 oaisim_noS1.tdd.10MHz.TM2 oaisim_nos1.tdd.20MHz.TM2
"Received RRCConnectionReconfigurationComplete from UE 0" "Received RRCConnectionReconfigurationComplete from UE 1" "Received RRCConnectionReconfigurationComplete from UE 2"
segmentation fault|assertion|exiting|fatal
@@ -400,18 +429,22 @@
execution
Run OAI Rel10 TDD, 1 eNB + 1 UE (5 MHz) without abstraction mode, send ping from from eNB to UE, and check that there is no packet losses
-
+ cp -vf $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf
$OPENAIR_DIR/cmake_targets/build_oai
--oaisim --noS1 -c
$OPENAIR_DIR/cmake_targets/tools/init_nas_nos1
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf frame_type \"TDD\"
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf eutra_band 38
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf downlink_frequency 2580000000L
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf uplink_frequency_offset 0
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -c26
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -c26
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -c26
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2 -c26
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2 -c26
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2 -c26
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -c26
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -c26
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -c26
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2 -c26
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2 -c26
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2 -c26
oaisim_noS1.tdd.5MHz.TM1 oaisim_noS1.tdd.10MHz.TM1 oaisim_noS1.tdd.20MHz.TM1 oaisim_noS1.tdd.5MHz.TM2 oaisim_noS1.tdd.10MHz.TM2 oaisim_noS1.tdd.20MHz.TM2
"DL and UL loss rate below 10"
segmentation fault|assertion|exiting|fatal
@@ -421,18 +454,22 @@
execution
Run OAI Rel10 TDD, 1 eNB + 1 UE (5 MHz) in PHY_ABSTRACTION mode, send ping from from eNB to UE, and check that there is no packet losses
-
+ cp -vf $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf
$OPENAIR_DIR/cmake_targets/build_oai
--oaisim --noS1 -c
$OPENAIR_DIR/cmake_targets/tools/init_nas_nos1
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf frame_type \"TDD\"
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf eutra_band 38
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf downlink_frequency 2580000000L
+ $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf uplink_frequency_offset 0
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -c26 -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -c26 -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -c26 -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2 -c26 -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2 -c26 -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2 -c26 -a
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -c26 -a
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -c26 -a
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -c26 -a
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2 -c26 -a
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2 -c26 -a
+ -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2 -c26 -a
oaisim_noS1.tdd.5MHz.TM1 oaisim_noS1.tdd.10MHz.TM1 oaisim_noS1.tdd.20MHz.TM1 oaisim_noS1.tdd.5MHz.TM2 oaisim_noS1.tdd.10MHz.TM2 oaisim_noS1.tdd.20MHz.TM2
"DL and UL loss rate below 10"
segmentation fault|assertion|exiting|fatal
@@ -858,12 +895,9 @@
calisson
stevens
amerique
- 360
+ 390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 25
@@ -871,7 +905,7 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 130
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
@@ -885,40 +919,34 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
- True
+ False
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -u -c 192.172.0.1 -b 10Mbits/s -t 300 -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -926,11 +954,11 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
- throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec duration=300.0s
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
- True
+ False
USRPb210.ALU_EPC.Bandrich.5MHz.FDD.Band_7.UL.1TX.1RX
10
@@ -942,12 +970,9 @@
calisson
stevens
amerique
- 360
+ 390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50
@@ -955,7 +980,7 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 130
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
@@ -969,7 +994,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -977,16 +1002,14 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -u -c 192.172.0.1 -b 10Mbits/s -t 300 -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
@@ -994,15 +1017,11 @@
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -1010,9 +1029,9 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
- throughput_test min=2.0Mbits/sec max=2.0Mbits/sec average=2.0Mbits/sec duration=300.0s
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
True
USRPb210.ALU_EPC.Bandrich.10MHz.FDD.Band_7.UL.1TX.1RX
@@ -1025,12 +1044,9 @@
calisson
stevens
amerique
- 360
+ 390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 100
@@ -1038,7 +1054,7 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 130
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
@@ -1052,7 +1068,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1060,16 +1076,14 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -u -c 192.172.0.1 -b 10Mbits/s -t 300 -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
@@ -1077,15 +1091,11 @@
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -1093,9 +1103,9 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
- throughput_test min=4.0Mbits/sec max=4.0Mbits/sec average=4.0Mbits/sec duration=300.0s
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
True
USRPb210.ALU_EPC.Bandrich.20MHz.FDD.Band_7.UL.1TX.1RX
@@ -1108,12 +1118,9 @@
calisson
stevens
amerique
- 360
+ 390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 25
@@ -1121,7 +1128,7 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 130
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
@@ -1135,7 +1142,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1143,32 +1150,26 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
True
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
- throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec duration=60.0s
+ throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -1176,7 +1177,7 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 60; iperf -u -c 192.172.0.2 -b 10Mbits/s -t 300 -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
True
@@ -1190,12 +1191,9 @@
calisson
stevens
amerique
- 360
+ 390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50
@@ -1203,7 +1201,7 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 130
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
@@ -1217,7 +1215,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1225,33 +1223,26 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
- throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec duration=300.0s
+ throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec
True
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -1259,7 +1250,7 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 60; iperf -u -c 192.172.0.2 -b 10Mbits/s -t 300 -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
True
@@ -1273,12 +1264,9 @@
calisson
stevens
amerique
- 360
+ 390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 100
@@ -1286,7 +1274,7 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 130
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
@@ -1300,7 +1288,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1308,33 +1296,27 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
- throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec duration=300.0s
+ throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec
True
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -1342,7 +1324,7 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 60; iperf -u -c 192.172.0.2 -b 10Mbits/s -t 300 -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
True
@@ -1357,12 +1339,9 @@
calisson
stevens
amerique
- 360
+ 390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 25
@@ -1370,7 +1349,7 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 130
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 2
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2
@@ -1384,7 +1363,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1392,16 +1371,14 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue;$OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -u -c 192.172.0.1 -b 10Mbits/s -t 300 -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
@@ -1409,15 +1386,11 @@
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -1425,9 +1398,9 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo iperf -s -i 1 -u -f m -B 192.172.0.1
- throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec duration=300.0s
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
True
USRPb210.ALU_EPC.Bandrich.5MHz.FDD.Band_7.UL.2TX.2RX
@@ -1441,12 +1414,9 @@
calisson
stevens
amerique
- 360
+ 390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50
@@ -1454,7 +1424,7 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 130
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 2
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2
@@ -1468,7 +1438,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1476,16 +1446,13 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+ >
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue;$OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -u -c 192.172.0.1 -b 10Mbits/s -t 300 -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
@@ -1493,15 +1460,11 @@
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -1509,9 +1472,9 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
- throughput_test min=2.0Mbits/sec max=2.0Mbits/sec average=2.0Mbits/sec duration=300.0s
+ throughput_test min=2.0Mbits/sec max=2.0Mbits/sec average=2.0Mbits/sec
True
USRPb210.ALU_EPC.Bandrich.10MHz.FDD.Band_7.UL.2TX.2RX
@@ -1524,12 +1487,9 @@
calisson
stevens
amerique
- 360
+ 390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 100
@@ -1537,7 +1497,7 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 130
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 2
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2
@@ -1551,7 +1511,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1559,16 +1519,14 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -u -c 192.172.0.1 -b 10Mbits/s -t 300 -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
@@ -1576,15 +1534,11 @@
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -1592,9 +1546,9 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
- throughput_test min=4.0Mbits/sec max=4.0Mbits/sec average=4.0Mbits/sec duration=300.0s
+ throughput_test min=4.0Mbits/sec max=4.0Mbits/sec average=4.0Mbits/sec
True
USRPb210.ALU_EPC.Bandrich.20MHz.FDD.Band_7.UL.2TX.2RX
@@ -1607,12 +1561,9 @@
calisson
stevens
amerique
- 360
+ 390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 25
@@ -1620,7 +1571,7 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 130
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 2
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2
@@ -1634,7 +1585,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1642,33 +1593,27 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
- throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec duration=300.0s
+ throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec
True
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -1676,7 +1621,7 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 60; iperf -u -c 192.172.0.2 -b 10Mbits/s -t 300 -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
True
@@ -1690,12 +1635,9 @@
calisson
stevens
amerique
- 360
+ 390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50
@@ -1703,7 +1645,7 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 130
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 2
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2
@@ -1717,7 +1659,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1725,33 +1667,27 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
- throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec duration=300.0s
+ throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec
True
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -1759,7 +1695,7 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 60; iperf -u -c 192.172.0.2 -b 10Mbits/s -t 300 -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
True
@@ -1773,12 +1709,9 @@
calisson
stevens
amerique
- 360
+ 390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 100
@@ -1786,7 +1719,7 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 130
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 2
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2
@@ -1800,7 +1733,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1808,33 +1741,27 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
- throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec duration=300.0s
+ throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec
True
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -1842,7 +1769,7 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 60; iperf -u -c 192.172.0.2 -b 10Mbits/s -t 300 -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
True
@@ -1851,13 +1778,1022 @@
+
+ lte-softmodem
+
+ calisson
+ stevens
+ calisson
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf pdsch_referenceSignalPower -26
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mme_ip_address "ipv4=\"192.170.0.1\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0:3\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.2/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0:4\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.170.1.2/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w USRP -c
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth0:3 192.170.0.2 up ; sudo -E ifconfig eth0:4 192.170.1.2 up; ifconfig
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0:1\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.1/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0:2\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.170.1.1/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -i -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ False
+ USRPb210.OAI_EPC_local.Bandrich.5MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ stevens
+ calisson
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf pdsch_referenceSignalPower -29
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mme_ip_address "ipv4=\"192.170.0.1\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0:3\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.2/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0:4\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.170.1.2/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w USRP -c
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0:3 192.170.0.2 up ; sudo -E ifconfig eth0:4 192.170.1.2 up; ifconfig
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0:1\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.1/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0:2\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.170.1.1/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -i -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ False
+ USRPb210.OAI_EPC_local.Bandrich.10MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ stevens
+ calisson
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf pdsch_referenceSignalPower -29
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mme_ip_address "ipv4=\"192.170.0.1\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0:3\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.2/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0:4\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.170.1.2/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w USRP -c
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0:3 192.170.0.2 up ; sudo -E ifconfig eth0:4 192.170.1.2 up; ifconfig
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0:1\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.1/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0:2\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.170.1.1/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -i -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ False
+ USRPb210.OAI_EPC_local.Bandrich.20MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ stevens
+ calisson
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf pdsch_referenceSignalPower -26
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mme_ip_address "ipv4=\"192.170.0.1\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0:3\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.2/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0:4\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.170.1.2/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w USRP -c
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0:3 192.170.0.2 up ; sudo -E ifconfig eth0:4 192.170.1.2 up; ifconfig
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ throughput_test min=10.0Mbits/sec max=10.5Mbits/sec average=11.0Mbits/sec
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0:1\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.1/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0:2\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.170.1.1/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -i -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+
+ False
+ USRPb210.OAI_EPC_local.Bandrich.5MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ stevens
+ calisson
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf pdsch_referenceSignalPower -29
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mme_ip_address "ipv4=\"192.170.0.1\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0:3\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.2/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0:4\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.170.1.2/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w USRP -c
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0:3 192.170.0.2 up ; sudo -E ifconfig eth0:4 192.170.1.2 up; ifconfig
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ throughput_test min=20.0Mbits/sec max=21.0Mbits/sec average=22.0Mbits/sec
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0:1\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.1/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0:2\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.170.1.1/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -i -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+
+ False
+ USRPb210.OAI_EPC_local.Bandrich.10MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ stevens
+ calisson
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf pdsch_referenceSignalPower -29
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mme_ip_address "ipv4=\"192.170.0.1\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0:3\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.2/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0:4\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.170.1.2/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w USRP -c
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0:3 192.170.0.2 up ; sudo -E ifconfig eth0:4 192.170.1.2 up; ifconfig
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ throughput_test min=40.0Mbits/sec max=42.0Mbits/sec average=44.0Mbits/sec
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0:1\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.1/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0:2\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.170.1.1/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -i -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+
+ False
+ USRPb210.OAI_EPC_local.Bandrich.20MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ stevens
+ nano
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf pdsch_referenceSignalPower -26
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w USRP -c
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'; ifconfig
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth0\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ False
+ USRPb210.OAI_EPC_remote.Bandrich.5MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ stevens
+ nano
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf pdsch_referenceSignalPower -29
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w USRP -c
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; ifconfig
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth0\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ False
+ USRPb210.OAI_EPC_remote.Bandrich.10MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ stevens
+ nano
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf pdsch_referenceSignalPower -29
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w USRP -c
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0:3 192.170.0.2 up ; sudo -E ifconfig eth0:4 192.170.1.2 up; ifconfig
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth0\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ False
+ USRPb210.OAI_EPC_remote.Bandrich.20MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ stevens
+ nano
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf pdsch_referenceSignalPower -26
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w USRP -c
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; ifconfig
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ throughput_test min=10.0Mbits/sec max=10.5Mbits/sec average=11.0Mbits/sec
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth0\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+
+ False
+ USRPb210.OAI_EPC_remote.Bandrich.5MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ stevens
+ nano
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf pdsch_referenceSignalPower -29
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w USRP -c
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; ifconfig
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ throughput_test min=20.0Mbits/sec max=21.0Mbits/sec average=22.0Mbits/sec
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth0\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+
+ False
+ USRPb210.OAI_EPC_remote.Bandrich.10MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ stevens
+ nano
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf pdsch_referenceSignalPower -29
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w USRP -c
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; ifconfig
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ throughput_test min=20.0Mbits/sec max=21.0Mbits/sec average=22.0Mbits/sec
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth0\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+
+ False
+ USRPb210.OAI_EPC_remote.Bandrich.20MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
+
lte-softmodem
mozart
stevens
amerique
- 360
+ 390
/tmp
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf mobile_country_code \"208\"
@@ -1879,7 +2815,7 @@
sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf -W
@@ -1887,16 +2823,13 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -u -c 192.172.0.1 -b 10Mbits/s -t 300 -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
@@ -1904,15 +2837,11 @@
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -1920,9 +2849,9 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
- throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec duration=300.0s
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
True
USRPx310.ALU_EPC.Bandrich.5MHz.FDD.Band_7.UL.1TX.1RX
@@ -1936,9 +2865,9 @@
mozart
stevens
amerique
- 360
+ 390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310..conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mobile_country_code \"208\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mobile_network_code \"92\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf N_RB_DL 50
@@ -1958,7 +2887,7 @@
sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf -W
@@ -1966,16 +2895,13 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -u -c 192.172.0.1 -b 10Mbits/s -t 300 -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
@@ -1983,15 +2909,11 @@
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -1999,9 +2921,9 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
- throughput_test min=2.0Mbits/sec max=2.0Mbits/sec average=2.0Mbits/sec duration=300.0s
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
True
USRPx310.ALU_EPC.Bandrich.10MHz.FDD.Band_7.UL.1TX.1RX
@@ -2014,7 +2936,7 @@
mozart
stevens
amerique
- 360
+ 390
/tmp
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mobile_country_code \"208\"
@@ -2026,17 +2948,17 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.remote.conf ENB_PORT_FOR_S1U 2152
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf -W
@@ -2044,16 +2966,14 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -u -c 192.172.0.1 -b 10Mbits/s -t 300 -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
@@ -2061,15 +2981,11 @@
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -2077,9 +2993,9 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
- throughput_test min=4.0Mbits/sec max=4.0Mbits/sec average=4.0Mbits/sec duration=300.0s
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
True
USRPx310.ALU_EPC.Bandrich.20MHz.FDD.Band_7.UL.1TX.1RX
@@ -2092,7 +3008,7 @@
mozart
stevens
amerique
- 360
+ 390
/tmp
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf mobile_country_code \"208\"
@@ -2114,7 +3030,7 @@
sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf -W
@@ -2122,32 +3038,26 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
True
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
- throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec duration=300.0s
+ throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -2155,7 +3065,7 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 60; iperf -u -c 192.172.0.2 -b 10Mbits/s -t 300 -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
True
@@ -2169,7 +3079,7 @@
mozart
stevens
amerique
- 360
+ 390
/tmp
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mobile_country_code \"208\"
@@ -2191,7 +3101,7 @@
sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf -W
@@ -2199,32 +3109,26 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
True
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
- throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec duration=300.0s
+ throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -2232,7 +3136,7 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 60; iperf -u -c 192.172.0.2 -b 10Mbits/s -t 300 -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
True
@@ -2246,18 +3150,18 @@
mozart
stevens
amerique
- 360
+ 390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf N_RB_DL 100
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf frame_type \"FDD\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf nb_antennas_rx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf nb_antennas_tx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
@@ -2268,7 +3172,7 @@
sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf -W
@@ -2276,32 +3180,26 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
True
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
- throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec duration=300.0s
+ throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -2309,7 +3207,7 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 60; iperf -u -c 192.172.0.2 -b 10Mbits/s -t 300 -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
True
@@ -2320,13 +3218,501 @@
+
+ lte-softmodem
+
+ mozart
+ stevens
+ nano
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w USRP -x -c
+ sleep 15; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth0\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ False
+ USRPx310.OAI_EPC_remote.Bandrich.5MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+
+
+ lte-softmodem
+
+ mozart
+ stevens
+ nano
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w USRP -x -c
+ sleep 15; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf -W
+
+
+
+
+ True
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth0\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ False
+ USRPx310.OAI_EPC_remote.Bandrich.10MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ mozart
+ stevens
+ nano
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w USRP -x -c
+ sleep 15; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth0\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ False
+ USRPx310.OAI_EPC_remote.Bandrich.20MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ mozart
+ stevens
+ nano
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w USRP -x -c
+ sleep 15; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ throughput_test min=10.0Mbits/sec max=10.5Mbits/sec average=11.0Mbits/sec
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth0\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+
+ False
+ USRPx310.OAI_EPC_remote.Bandrich.5MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ mozart
+ stevens
+ nano
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w USRP -x -c
+ sleep 15; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
+ sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ throughput_test min=20.0Mbits/sec max=21.0Mbits/sec average=22.0Mbits/sec
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth0\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+
+ False
+ USRPx310.OAI_EPC_remote.Bandrich.10MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ mozart
+ stevens
+ nano
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w USRP -x -c
+ sleep 15; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf -W
+
+
+
+
+ True
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ throughput_test min=20.0Mbits/sec max=21.0Mbits/sec average=22.0Mbits/sec
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth0\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+
+ False
+ USRPx310.OAI_EPC_remote.Bandrich.20MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
lte-softmodem
calisson
stevens
amerique
- 360
+ 390
/tmp
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mobile_country_code \"208\"
@@ -2348,7 +3734,7 @@
sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
@@ -2356,16 +3742,13 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -u -c 192.172.0.1 -b 10Mbits/s -t 300 -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
@@ -2373,15 +3756,11 @@
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -2389,9 +3768,9 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
- throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec duration=300.0s
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
True
EXMIMO.ALU_EPC.Bandrich.5MHz.FDD.Band_7.UL.1TX.1RX
@@ -2405,7 +3784,7 @@
calisson
stevens
amerique
- 360
+ 390
/tmp
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mobile_country_code \"208\"
@@ -2427,7 +3806,7 @@
sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
@@ -2435,16 +3814,14 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -u -c 192.172.0.1 -b 10Mbits/s -t 300 -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
@@ -2452,15 +3829,11 @@
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -2468,9 +3841,9 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
- throughput_test min=2.0Mbits/sec max=2.0Mbits/sec average=2.0Mbits/sec duration=300.0s
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
True
EXMIMO.ALU_EPC.Bandrich.10MHz.FDD.Band_7.UL.1TX.1RX
@@ -2483,7 +3856,7 @@
calisson
stevens
amerique
- 360
+ 390
/tmp
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mobile_country_code \"208\"
@@ -2505,7 +3878,7 @@
sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
@@ -2513,16 +3886,14 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -u -c 192.172.0.1 -b 10Mbits/s -t 300 -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
@@ -2546,9 +3917,9 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
- throughput_test min=4.0Mbits/sec max=4.0Mbits/sec average=4.0Mbits/sec duration=300.0s
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
True
EXMIMO.ALU_EPC.Bandrich.20MHz.FDD.Band_7.UL.1TX.1RX
@@ -2561,7 +3932,7 @@
calisson
stevens
amerique
- 360
+ 390
/tmp
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mobile_country_code \"208\"
@@ -2583,7 +3954,7 @@
sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
@@ -2591,32 +3962,26 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
True
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
- throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec duration=300.0s
+ throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -2624,7 +3989,7 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 60; iperf -u -c 192.172.0.2 -b 10Mbits/s -t 300 -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
True
@@ -2638,7 +4003,7 @@
calisson
stevens
amerique
- 360
+ 390
/tmp
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mobile_country_code \"208\"
@@ -2660,7 +4025,7 @@
sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
@@ -2668,32 +4033,26 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
True
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
- throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec duration=300.0s
+ throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -2701,7 +4060,7 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 60; iperf -u -c 192.172.0.2 -b 10Mbits/s -t 300 -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
True
@@ -2715,7 +4074,7 @@
calisson
stevens
amerique
- 360
+ 390
/tmp
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf tracking_area_code \"1\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mobile_country_code \"208\"
@@ -2737,7 +4096,7 @@
sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
@@ -2745,32 +4104,26 @@
True
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -x -c
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 45; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
True
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
- throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec duration=300.0s
+ throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
@@ -2778,7 +4131,7 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- sleep 60; iperf -u -c 192.172.0.2 -b 10Mbits/s -t 300 -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
True
@@ -2788,162 +4141,945 @@
-
+
+ lte-softmodem
+
+ calisson
+ stevens
+ nano
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w EXMIMO -x -c
+ sleep 15; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2; dmesg|tail
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
+
+
+
+
+ False
+
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth0\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ False
+ EXMIMO.OAI_EPC_remote.Bandrich.5MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+
+
lte-softmodem
calisson
stevens
nano
- 60
+ 390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -c
-
+ --eNB -w EXMIMO -x -c
+ sleep 15; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
- iperf -s
-
-
-
- True
-
- /tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -c
-
-
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
-
- ping 192.172.0.1
-
-
-
- True
-
- /tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- BUILD/EPC/epc.conf.in MCC \"208\"
- BUILD/EPC/epc.conf.in MNC \"92\"
- BUILD/EPC/epc.conf.in TAC \"1\"
- BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
- BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\"
- BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c
-
-
-
- /SCRIPTS/run_epc -g
-
- /SCRIPTS/run_hss -g
-
- iperf -s
-
-
-
- True
- 10
-
-
-
-
- lte-softmodem
-
- calisson
- stevens
- calisson
- 60
- /tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf N_RB_DL 50
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -c
-
-
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
- True
+ False
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\"
- $OPENAIR_DIR/cmake_targets/build_oai
- --eNB -w USRP -c
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth0\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ False
+ EXMIMO.OAI_EPC_remote.Bandrich.10MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ stevens
+ nano
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w EXMIMO -x -c
+ sleep 15; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth0\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ False
+ EXMIMO.OAI_EPC_remote.Bandrich.20MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ stevens
+ nano
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w EXMIMO -x -c
+ sleep 15; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
+
+
+
+
+ False>
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ throughput_test min=10.0Mbits/sec max=10.5Mbits/sec average=11.0Mbits/sec
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth0\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+
+ False
+ EXMIMO.OAI_EPC_remote.Bandrich.5MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ stevens
+ nano
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w EXMIMO -x -c
+ sleep 15; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ throughput_test min=20.0Mbits/sec max=21.0Mbits/sec average=22.0Mbits/sec
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth0\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+
+ False
+ EXMIMO.OAI_EPC_remote.Bandrich.10MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ stevens
+ nano
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w EXMIMO -x -c
+ sleep 15; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
+
+ $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ throughput_test min=20.0Mbits/sec max=21.0Mbits/sec average=22.0Mbits/sec
+
+ False
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+ BUILD/EPC/epc.conf.in MCC \"208\"
+ BUILD/EPC/epc.conf.in MNC \"92\"
+ BUILD/EPC/epc.conf.in TAC \"1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
+ BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\";
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth0\"
+ BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ $OPENAIRCN_DIR/SCRIPTS/build_epc
+ -c -l
+ $OPENAIRCN_DIR/SCRIPTS/build_hss
+ -c -l
+
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+
+ $OPENAIRCN_DIR/SCRIPTS/run_epc
+ -r
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+
+ False
+ EXMIMO.OAI_EPC_remote.Bandrich.20MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
+
+
+ lte-softmodem
+
+ mozart
+ stevens
+ amerique
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf pdsch_referenceSignalPower -26
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w BLADERF -x -c
+ sudo -E $OPENAIR_DIR/cmake_targets/tools/start_bladerf.py
+
+ sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
- ping 192.172.0.1
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ False
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+
+
+
+
+
+
+
+
+ /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox ; sleep 3000
+
+ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ False
+ BladeRF.ALU_EPC.Bandrich.5MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+
+ lte-softmodem
+
+ mozart
+ stevens
+ amerique
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf pdsch_referenceSignalPower -29
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w BLADERF -x -c
+ sudo -E $OPENAIR_DIR/cmake_targets/tools/start_bladerf.py
+
+ sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
True
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
- BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
- BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
- BUILD/EPC/epc.conf.in MCC \"208\"
- BUILD/EPC/epc.conf.in MNC \"92\"
- BUILD/EPC/epc.conf.in TAC \"1\"
- BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
- BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
- BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
- BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\"
- BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
- SCRIPTS/build_epc
- -c -l
- SCRIPTS/build_hss
- -c -l
+
+
+
+
+
- SCRIPTS/run_epc -l
+ /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox ; sleep 3000
- SCRIPTS/run_hss
+ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- iperf -s
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
-
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
True
-
+ BladeRF.ALU_EPC.Bandrich.10MHz.FDD.Band_7.UL.1TX.1RX
10
-
+
+
+
+ lte-softmodem
+
+ mozart
+ stevens
+ amerique
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf pdsch_referenceSignalPower -32
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w BLADERF -x -c
+ sudo -E $OPENAIR_DIR/cmake_targets/tools/start_bladerf.py
+
+ sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ True
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+
+
+
+
+
+
+
+
+ /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox ; sleep 3000
+
+ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ True
+ BladeRF.ALU_EPC.Bandrich.20MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ mozart
+ stevens
+ amerique
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf pdsch_referenceSignalPower -26
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w BLADERF -x -c
+ sudo -E $OPENAIR_DIR/cmake_targets/tools/start_bladerf.py
+
+ sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ True
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec
+
+
+ /tmp
+
+
+
+
+
+
+
+
+ /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox ; sleep 3000
+
+ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+ True
+ BladeRF.ALU_EPC.Bandrich.5MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ mozart
+ stevens
+ amerique
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf pdsch_referenceSignalPower -29
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w BLADERF -x -c
+ sudo -E $OPENAIR_DIR/cmake_targets/tools/start_bladerf.py
+
+ sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec
+
+ True
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+
+ /tmp
+
+
+
+
+
+
+
+
+ /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox ; sleep 3000
+
+ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+ True
+ BladeRF.ALU_EPC.Bandrich.10MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ mozart
+ stevens
+ amerique
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf pdsch_referenceSignalPower -32
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w BLADERF -x -c
+ sudo -E $OPENAIR_DIR/cmake_targets/tools/start_bladerf.py
+
+ sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec
+
+ True
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+
+ /tmp
+
+
+
+
+
+
+
+
+ /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox ; sleep 3000
+
+ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+ True
+ BladeRF.ALU_EPC.Bandrich.20MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
diff --git a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py
index ae25013f52..6af3785865 100755
--- a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py
+++ b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py
@@ -10,6 +10,7 @@ import threading
import signal
import traceback
import os
+import commands
# configure the serial connections (the parameters differs on the device you are connecting to)
#First we find an open port to work with
@@ -20,6 +21,10 @@ if openair_dir == None:
print "Error getting OPENAIR_DIR environment variable"
sys.exit(1)
+sys.path.append(os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/tools/'))
+
+from lib_autotest import *
+
def find_open_port():
global serial_port, ser
max_ports=100
@@ -34,8 +39,7 @@ def find_open_port():
ser = serial.Serial(port=serial_port)
return
-find_open_port()
-print 'Using Serial port : ' + serial_port
+
#serial_port = '/dev/ttyUSB2'
bandrich_ppd_config = os.environ.get('OPENAIR_DIR') + '/cmake_targets/autotests/tools/wdial.bandrich.conf'
@@ -126,8 +130,8 @@ def start_ue () :
break
ip = IPRoute()
idx = ip.link_lookup(ifname=iface)[0]
- os.system ('route add 192.172.0.1 ppp0')
- os.system ('ping -c 5 192.172.0.1')
+ os.system ('route add ' + gw + ' ppp0')
+ os.system ('ping ' + gw)
break
except Exception, e:
error = ' Interface ' + iface + 'does not exist...'
@@ -144,11 +148,52 @@ def stop_ue():
send_command('AT+CGATT=0' , 'OK|ERROR' , timeout)
send_command('AT+CFUN=4' , 'OK' , timeout)
-for arg in sys.argv[1:]:
+
+#reset the USB BUS of Bandrich UE
+def reset_ue():
+ stringIdBandrich='BandRich, Inc. 4G LTE adapter'
+ status, out = commands.getstatusoutput('lsusb | grep -i \'' + stringIdBandrich + '\'')
+ if (out == '') :
+ print "Bandrich 4G LTE Adapter not found. Exiting now..."
+ sys.exit()
+ p=re.compile('Bus\s*(\w+)\s*Device\s*(\w+):\s*ID\s*(\w+):(\w+)')
+ res=p.findall(out)
+ BusId=res[0][0]
+ DeviceId=res[0][1]
+ VendorId=res[0][2]
+ ProductId=res[0][3]
+ usb_dir= find_usb_path(VendorId, ProductId)
+ print "Bandrich 4G LTE Adapter found in..." + usb_dir
+ cmd = "sudo sh -c \"echo 0 > " + usb_dir + "/authorized\""
+ os.system(cmd + " ; sleep 15" )
+ cmd = "sudo sh -c \"echo 1 > " + usb_dir + "/authorized\""
+ os.system(cmd + " ; sleep 30" )
+
+i=1
+gw='192.172.0.1'
+while i < len(sys.argv):
+ arg=sys.argv[i]
if arg == '--start-ue' :
+ find_open_port()
+ print 'Using Serial port : ' + serial_port
start_ue()
elif arg == '--stop-ue' :
+ find_open_port()
+ print 'Using Serial port : ' + serial_port
stop_ue()
+ elif arg == '--reset-ue' :
+ reset_ue()
+ elif arg == '-gw' :
+ gw = sys.argv[i+1]
+ i=i+1
+ elif arg == '-h' :
+ print "--reset-ue: Reset the UE on USB Bus. Similar to unplugging and plugging the UE"
+ print "--stop-ue: Stop the UE. Send DETACH command"
+ print "--start-ue: Start the UE. Send ATTACH command"
+ print "-gw: Specify the default gw as sometimes the gateway/route arguments are not set properly via wvdial"
else :
print " Script called with wrong arguments, arg = " + arg
sys.exit()
+ i = i +1
+
+
diff --git a/cmake_targets/autotests/tools/exmimo/init_exmimo2 b/cmake_targets/autotests/tools/exmimo/init_exmimo2
deleted file mode 100755
index 66eedf93dd..0000000000
--- a/cmake_targets/autotests/tools/exmimo/init_exmimo2
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/bin/bash
-
-################################################################################
-# OpenAirInterface
-# Copyright(c) 1999 - 2015 Eurecom
-#
-# OpenAirInterface is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-#
-# OpenAirInterface is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with OpenAirInterface.The full GNU General Public License is
-# included in this distribution in the file called "COPYING". If not,
-# see .
-#
-# Contact Information
-# OpenAirInterface Admin: openair_admin@eurecom.fr
-# OpenAirInterface Tech : openair_tech@eurecom.fr
-# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
-#
-# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
-#
-################################################################################
-# file init_nas_nos1
-# brief loads the nasmesh module and sets up the radio bearers (used to provide ip interface without S1 interface)
-# author Florian Kaltenberger
-#
-#######################################
-
-load_module()
-{
- mod_name=${1##*/}
- mod_name=${mod_name%.*}
- if awk "/$mod_name/ {found=1 ;exit} END {if (found!=1) exit 1}" /proc/modules
- then
- echo "module $mod_name already loaded: I remove it first"
- sudo rmmod $mod_name
- fi
- echo loading $mod_name
- sudo insmod $1
-}
-
-
-function main()
-{
-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
-
-
-load_module $OPENAIR_DIR/targets/bin/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}'`
-DEVICE_SWID=${DEVICE:2:2}
-if [ $DEVICE_SWID == '0a' ]; then
- echo "Using firware version 10"
- $OPENAIR_DIR/targets/bin/updatefw -s 0x43fffff0 -b -f $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v10
-else
- echo 'No corresponding firmware found'
- return
-fi
-}
-
-main "$@"
diff --git a/cmake_targets/autotests/tools/exmimo/oarf_config_exmimo.oct b/cmake_targets/autotests/tools/exmimo/oarf_config_exmimo.oct
deleted file mode 100755
index f8c24153f6..0000000000
Binary files a/cmake_targets/autotests/tools/exmimo/oarf_config_exmimo.oct and /dev/null differ
diff --git a/cmake_targets/autotests/tools/exmimo/oarf_get_frame.oct b/cmake_targets/autotests/tools/exmimo/oarf_get_frame.oct
deleted file mode 100755
index 8dd108b798..0000000000
Binary files a/cmake_targets/autotests/tools/exmimo/oarf_get_frame.oct and /dev/null differ
diff --git a/cmake_targets/autotests/tools/exmimo/oarf_get_num_detected_cards.oct b/cmake_targets/autotests/tools/exmimo/oarf_get_num_detected_cards.oct
deleted file mode 100755
index 3d84d86eba..0000000000
Binary files a/cmake_targets/autotests/tools/exmimo/oarf_get_num_detected_cards.oct and /dev/null differ
diff --git a/cmake_targets/autotests/tools/exmimo/oarf_send_frame.oct b/cmake_targets/autotests/tools/exmimo/oarf_send_frame.oct
deleted file mode 100755
index 4da12f5172..0000000000
Binary files a/cmake_targets/autotests/tools/exmimo/oarf_send_frame.oct and /dev/null differ
diff --git a/cmake_targets/autotests/tools/exmimo/oarf_stop.oct b/cmake_targets/autotests/tools/exmimo/oarf_stop.oct
deleted file mode 100755
index b234829cc0..0000000000
Binary files a/cmake_targets/autotests/tools/exmimo/oarf_stop.oct and /dev/null differ
diff --git a/cmake_targets/autotests/tools/exmimo/oarf_stop_without_reset.oct b/cmake_targets/autotests/tools/exmimo/oarf_stop_without_reset.oct
deleted file mode 100755
index 74ca17e3e0..0000000000
Binary files a/cmake_targets/autotests/tools/exmimo/oarf_stop_without_reset.oct and /dev/null differ
diff --git a/cmake_targets/autotests/tools/exmimo/openair_rf.ko b/cmake_targets/autotests/tools/exmimo/openair_rf.ko
deleted file mode 100644
index 2f948c0871..0000000000
Binary files a/cmake_targets/autotests/tools/exmimo/openair_rf.ko and /dev/null differ
diff --git a/cmake_targets/autotests/tools/exmimo/updatefw b/cmake_targets/autotests/tools/exmimo/updatefw
deleted file mode 100755
index d404a74cbb..0000000000
Binary files a/cmake_targets/autotests/tools/exmimo/updatefw and /dev/null differ
diff --git a/cmake_targets/autotests/tools/find_usb_path.bash b/cmake_targets/autotests/tools/find_usb_path.bash
new file mode 100755
index 0000000000..c8ec950292
--- /dev/null
+++ b/cmake_targets/autotests/tools/find_usb_path.bash
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+#arg1 idVendor
+#arg2 idProduct
+argIdVendor=$1
+argIdProduct=$2
+
+echo $1
+echo $2
+
+for X in /sys/bus/usb/devices/*; do
+ #echo "$X"
+ idVendor=`cat "$X/idVendor" 2>/dev/null`
+ idProduct=`cat "$X/idProduct" 2>/dev/null`
+ if [ "$argIdVendor" == "$idVendor" ] && [ "$argIdProduct" == "$idProduct" ]
+ then
+ echo "$X"
+ fi
+done
+
diff --git a/cmake_targets/autotests/tools/iperf_script b/cmake_targets/autotests/tools/iperf_script
new file mode 100755
index 0000000000..ecd2f7a996
--- /dev/null
+++ b/cmake_targets/autotests/tools/iperf_script
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+#arg1 timeout to wait before running the script
+#arg2 interface
+#arg3 iperf arguments
+
+args=($*)
+timeout=${args[0]}
+iface=${args[1]}
+iperf_args=(${args[@]:2})
+
+#array=${1:-1}
+echo "args = ${args[@]}"
+echo "timeout = $timeout"
+echo "iface = $iface"
+echo "iperf_args = ${iperf_args[@]}"
+
+sleep $timeout
+
+while true; do var=`ifconfig $iface` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5
+
+iperf ${iperf_args[@]}
diff --git a/cmake_targets/autotests/tools/lib_autotest.py b/cmake_targets/autotests/tools/lib_autotest.py
new file mode 100644
index 0000000000..67234de567
--- /dev/null
+++ b/cmake_targets/autotests/tools/lib_autotest.py
@@ -0,0 +1,33 @@
+#!/usr/bin/python
+
+import os
+from pyroute2 import IPRoute
+import sys
+import re
+import threading
+import signal
+import traceback
+import commands
+
+def read_file(filename):
+ try:
+ file = open(filename, 'r')
+ return file.read()
+ except Exception, e:
+ # WE just ignore the exception as some files are probably not present
+ #error = ' Filename ' + filename
+ #error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e)
+ #error = error + traceback.format_exc()
+ #print error
+ return ''
+
+def find_usb_path(idVendor, idProduct):
+ for root, dirs, files in os.walk("/sys/bus/usb/devices", topdown=False):
+ for name in dirs:
+ tmpdir= os.path.join(root, name)
+ tmpidVendor = read_file(tmpdir+'/idVendor').replace("\n","")
+ tmpidProduct = read_file(tmpdir+'/idProduct').replace("\n","")
+ if tmpidVendor == idVendor and tmpidProduct == idProduct:
+ return tmpdir
+ return ''
+
diff --git a/cmake_targets/autotests/tools/search_repl.py b/cmake_targets/autotests/tools/search_repl.py
index 0a91945c77..bb807502f2 100755
--- a/cmake_targets/autotests/tools/search_repl.py
+++ b/cmake_targets/autotests/tools/search_repl.py
@@ -1,27 +1,31 @@
#!/usr/bin/python
import sys
import re
+import os
#Arg 1 name of file
#Arg 2 keyword
#arg 3 replacement text
#Note that these should be seperated by spaces
if len(sys.argv) != 4:
- print "search_repl.py: Wrong number of arguments. This program needs 3 arguments"
+ print "search_repl.py: Wrong number of arguments. This program needs 3 arguments. The number of arguments supplied : " + str(sys.argv)
sys.exit()
-filename = sys.argv[1]
+filename = os.path.expandvars(sys.argv[1])
keyword = sys.argv[2]
replacement_text = sys.argv[3]
+
file = open(filename, 'r')
string = file.read()
file.close()
if keyword == 'mme_ip_address':
- #string = (re.sub(r"mme_ip_address\s*=\s*\([^\$]+)\)\s*;\s*", r"<% tex \1 %>", t, re.M)
replacement_text = keyword + ' = ( { ' + replacement_text + ' } ) ; '
string = re.sub(r"mme_ip_address\s*=\s*\(([^\$]+?)\)\s*;", replacement_text, string, re.M)
+elif keyword == 'IPV4_LIST':
+ replacement_text = keyword + ' = ( ' + replacement_text + ' ) ; '
+ string = re.sub(r"IPV4_LIST\s*=\s*\(([^\$]+?)\)\s*;", replacement_text, string, re.M)
else :
replacement_text = keyword + ' = ' + replacement_text + ' ; '
string = re.sub(r"%s\s*=\s*([^\$]+?)\s*;" % keyword , replacement_text, string, re.M)
diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai
index 25bec96b98..6300e9ec03 100755
--- a/cmake_targets/build_oai
+++ b/cmake_targets/build_oai
@@ -45,15 +45,18 @@ MSC_GEN="False"
XFORMS="False"
PRINT_STATS="False"
VCD_TIMING="False"
+LOWLATENCY_FLAG_USER="False"
+FORCE_LOWLATENCY_FLAG_USER=""
REL="Rel10"
HW="EXMIMO"
+TP="None"
NOS1=0
EPC=0
VERBOSE_COMPILE=0
CFLAGS_PROCESSOR_USER=""
RUN_GROUP=0
TEST_CASE_GROUP=""
-
+BUILD_DOXYGEN=0
trap handle_ctrl_c INT
function print_help() {
@@ -88,10 +91,13 @@ Options
default is Rel10,
Rel8 limits the implementation to 3GPP Release 8 version
-w | --hardware
- EXMIMO (Default), USRP, BLADERF, ETHERNET, None
+ EXMIMO (Default), USRP, BLADERF, LMSSDR, None
Adds this RF board support (in external packages installation and in compilation)
+-t | --transport protocol
+ ETHERNET , None
+ Adds this trasport protocol support in compilation
--oaisim
- Makes the oaisim simulator. Hardware will be defaulted to "NONE".
+ Makes the oaisim simulator. Hardware will be defaulted to "None".
--phy_simulators
Makes the unitary tests Layer 1 simulators
--core_simulators
@@ -113,7 +119,12 @@ Options
Shows detailed compilation instructions in makefile
--cflags_processor
Manually Add CFLAGS of processor if they are not detected correctly by script. Only add these flags if you know your processor supports them. Example flags: -msse3 -msse4.1 -msse4.2 -mavx2
-
+--build-doxygen
+ Builds doxygen based documentation.
+--disable-deadline
+ Disables deadline scheduler of Linux kernel (>=3.14.x).
+--enable-deadline
+ Disables deadline scheduler of Linux kernel (>=3.14.x).
Usage (first build):
oaisim (eNB + UE): ./build_oai -I -g --oaisim -x --install-system-files
Eurecom EXMIMO + COTS UE : ./build_oai -I -g --eNB -x --install-system-files
@@ -165,20 +176,35 @@ function main() {
shift;;
-r | --3gpp-release)
REL=$2
- echo_info "setting release to: $REL"
+ echo_info "Setting release to: $REL"
shift 2;;
-w | --hardware)
HW="$2" #"${i#*=}"
- # Use OAI_USRP as the key word USRP is used inside UHD driver
- if [ "$HW" == "USRP" ] ; then
- HW="OAI_USRP"
- fi
- if [ "$HW" == "BLADERF" ] ; then
- HW="OAI_BLADERF"
- fi
- echo_info "setting hardware to: $HW"
+ # Use OAI_USRP as the key word USRP is used inside UHD driver
+ if [ "$HW" != "BLADERF" -a "$HW" != "USRP" -a "$HW" != "LMSSDR" -a "$HW" != "None" -a "$HW" != "EXMIMO" ] ; then
+ echo_fatal "Unknown HW type $HW will exit..."
+ else
+ if [ "$HW" == "USRP" ] ; then
+ HW="OAI_USRP"
+ fi
+ if [ "$HW" == "BLADERF" ] ; then
+ HW="OAI_BLADERF"
+ fi
+ if [ "$HW" == "LMSSDR" ] ; then
+ HW="OAI_LMSSDR"
+ fi
+ echo_info "Setting hardware to: $HW"
+ fi
shift 2;;
- --oaisim)
+ -t | --transport_protocol)
+ TP="$2" #"${i#*=}"
+ if [ "$TP" != "ETHERNET" -a "$TP" != "None" ] ; then
+ echo_fatal "Unknown TP type $TP will exit..."
+ else
+ echo_info "Setting transport protocol to: $TP"
+ fi
+ shift 2;;
+ --oaisim)
oaisim=1
echo_info "Will compile oaisim and drivers nasmesh, ..."
shift;;
@@ -200,7 +226,7 @@ function main() {
echo_info "executing test cases only in group: $TEST_CASE_GROUP"
shift 2;;
-V | --vcd)
- echo_info "setting gtk-wave output"
+ echo_info "Setting gtk-wave output"
VCD_TIMING=1
EXE_ARGUMENTS="$EXE_ARGUMENTS -V"
shift;;
@@ -223,8 +249,20 @@ function main() {
shift;;
--cflags_processor)
CFLAGS_PROCESSOR_USER=$2
- echo_info "setting CPU FLAGS from USER to: $CFLAGS_PROCESSOR_USER"
+ echo_info "Setting CPU FLAGS from USER to: $CFLAGS_PROCESSOR_USER"
shift 2;;
+ --build-doxygen)
+ BUILD_DOXYGEN=1
+ echo_info "Will build doxygen support"
+ shift;;
+ --disable-deadline)
+ FORCE_LOWLATENCY_FLAG_USER="False"
+ echo_info "Disabling the usage of deadline scheduler"
+ shift 1;;
+ --enable-deadline)
+ FORCE_LOWLATENCY_FLAG_USER="True"
+ echo_info "Enabling the usage of deadline scheduler"
+ shift 1;;
-h | --help)
print_help
exit 1;;
@@ -234,6 +272,64 @@ function main() {
break;;
esac
done
+
+ #########################################################
+ # check validity of HW and TP parameters for RRH and eNB
+ #########################################################
+ # to be discussed
+
+ if [ "$eNB" = "1" ] ; then
+ if [ "$HW" = "None" -a "$TP" = "None" ] ; then
+ echo_fatal "Define a local radio head (e.g. -w EXMIMO) or a transport protocol (e.g. -t ETHERNET) to communicate with a remote radio head!"
+ fi
+ if [ "$HW" != "None" -a "$TP" != "None" ] ; then
+ echo_fatal "Currently eNB can not support simultaniously local and remote radio heads!!"
+ fi
+ if [ "$HW" = "None" ] ; then
+ echo_info "No radio head has been selected (HW set to $HW)"
+ fi
+ if [ "$TP" = "None" ] ; then
+ echo_info "No transport protocol has been selected (TP set to $TP)"
+ fi
+ fi
+
+ if [ "$RRH" = "1" ] ; then
+ if [ "$TP" = "None" ] ; then
+ echo_fatal "A transport protocol (e.g. -t ETHERNET) must be defined!"
+ fi
+ if [ "$HW" = "None" ] ; then
+ echo_info "No radio head has been selected (HW set to $HW)"
+ fi
+ fi
+
+ echo_info "RF HW set to $HW"
+ #Now we set flags to enable deadline scheduler settings
+ #By default: USRP: disable,
+ #By default: BLADERF: enable,
+ #By default: EXMIMO: enable
+ if [ "$FORCE_LOWLATENCY_FLAG_USER" = "" ]; then
+ if [ "$HW" = "EXMIMO" ] ; then
+ LOWLATENCY_FLAG_USER="True"
+ elif [ "$HW" = "ETHERNET" ] ; then
+ LOWLATENCY_FLAG_USER="True"
+ elif [ "$HW" = "OAI_USRP" ] ; then
+ LOWLATENCY_FLAG_USER="False"
+ elif [ "$HW" = "OAI_BLADERF" ] ; then
+ LOWLATENCY_FLAG_USER="False"
+ elif [ "$HW" = "OAI_LMSSDR" ] ; then
+ LOWLATENCY_FLAG_USER="False"
+ elif [ "$HW" = "None" ] ; then
+ LOWLATENCY_FLAG_USER="False"
+ else
+ echo_error "Unknown HW type $HW. Exiting now..."
+ exit
+ fi
+ else
+ LOWLATENCY_FLAG_USER=$FORCE_LOWLATENCY_FLAG_USER
+ fi
+
+ echo_info "Flags for Deadline scheduler: $LOWLATENCY_FLAG_USER"
+
############################################
# setting and printing OAI envs, we should check here
@@ -273,7 +369,7 @@ function main() {
check_install_usrp_uhd_driver
fi
if [ "$HW" == "OAI_BLADERF" ] ; then
- echo_info "installing packages for BALDERF support"
+ echo_info "installing packages for BLADERF support"
check_install_bladerf_driver
fi
fi
@@ -284,9 +380,11 @@ function main() {
fi
if [ "$oaisim" = "1" ] ; then
- if [ "$HW" != "ETHERNET" ] ; then
- HW="NONE"
- fi
+ #to be discussed
+ # there is no RF device and no transport protocol
+ HW="None"
+ TP="None"
+
if [ "$XFORMS" == "True" ] ; then
PRINT_STATS="True"
fi
@@ -320,7 +418,9 @@ function main() {
echo "set ( RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file
echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file
echo "set ( RF_BOARD \"${HW}\")" >> $cmake_file
- echo "set(PACKAGE_NAME \"${lte_exec}\")" >> $cmake_file
+ echo "set ( TRANSP_PRO \"${TP}\")" >> $cmake_file
+ echo "set(PACKAGE_NAME \"${lte_exec}\")" >> $cmake_file
+ echo "set (LOWLATENCY \"${LOWLATENCY_FLAG_USER}\" )" >>$cmake_file
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
cd $DIR/$lte_build_dir/build
cmake ..
@@ -525,32 +625,124 @@ function main() {
fi
# RRH compilation
- ##################
+ #####################
if [ "$RRH" = "1" ] ; then
- echo_info "Compiling RRH"
- if [ $HW == "ETHERNET" ] ; then
- echo_info "RF frontend for RRH is not defined. This mode is used for testing (loopback)."
- elif [ $HW != "EXMIMO" -a $HW != "OAI_USRP" -a $HW != "OAI_BLADERF" ] ; then
- echo_fatal "Hardware not defined ($HW)"
- fi
- cmake_file=$DIR/rrh_gw/CMakeLists.txt
- echo "cmake_minimum_required(VERSION 2.8)" > $cmake_file
- echo "set(ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file
- echo "set(ENABLE_ITTI False )" >> $cmake_file
- echo "set(RF_BOARD \"${HW}\")" >> $cmake_file
- echo 'set(PACKAGE_NAME "\"rrh_gw\"")' >> $cmake_file
- echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
- [ "$CLEAN" = "1" ] && rm -rf $DIR/rrh_gw/build
- mkdir -p $DIR/rrh_gw/build
- cd $DIR/rrh_gw/build
+ rrh_exec=rrh_gw
+ rrh_build_dir=rrh_gw
+
+ echo_info "Compiling $rrh_exec ..."
+
+ [ "$CLEAN" = "1" ] && rm -rf $DIR/rrh_gw/build
+ mkdir -p $DIR/$rrh_build_dir/build
+ cmake_file=$DIR/$rrh_build_dir/CMakeLists.txt
+ echo "cmake_minimum_required(VERSION 2.8)" > $cmake_file
+ echo "set(ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file
+ echo "set(ENABLE_ITTI False )" >> $cmake_file
+ echo "set(RF_BOARD \"${HW}\")" >> $cmake_file
+ echo "set(TRANSP_PRO \"${TP}\")" >> $cmake_file
+ echo 'set(PACKAGE_NAME "\"rrh_gw\"")' >> $cmake_file
+ echo "set (LOWLATENCY \"${LOWLATENCY_FLAG_USER}\" )" >>$cmake_file
+ echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
+ cd $DIR/$rrh_build_dir/build
+ cmake ..
+ compilations \
+ rrh_gw rrh_gw \
+ rrh_gw $dbin/rrh_gw
+
+ fi
+
+ # build RF device and transport protocol libraries
+ #####################################
+ if [ "$eNB" = "1" -o "$RRH" = "1" ] ; then
+
+ if [ "$eNB" = "1" ] ; then
+ build_dir=$lte_build_dir
+ else
+ build_dir=$rrh_build_dir
+ fi
+
+ # build RF device libraries (currently EXMIMO is not complied with the rest of HW targets)
+ if [ "$HW" != "None" ] ; then
+ rm -f liboai_device.so
+ rm -f $dbin/liboai_device.so
+
+
+ # link liboai_device.so with the selected RF device library
+ if [ "$HW" == "EXMIMO" ] ; then
+
+ #add exmimo compilation
+ #TODO EXMIMO library support
+
+ echo_info "liboai_device.so is linked to EXMIMO device library"
+ elif [ "$HW" == "OAI_USRP" ] ; then
+ if [ -d "/usr/include/uhd" ] ; then
+ compilations \
+ $build_dir oai_usrpdevif \
+ liboai_usrpdevif.so $dbin/liboai_usrpdevif.so.$REL
+ fi
+
+ ln -s liboai_usrpdevif.so liboai_device.so
+ ln -s $dbin/liboai_usrpdevif.so.$REL $dbin/liboai_device.so
+ echo_info "liboai_device.so is linked to USRP device library"
+ elif [ "$HW" == "OAI_BLADERF" ] ; then
+ if [ -f "/usr/include/libbladeRF.h" ] ; then
+ compilations \
+ $build_dir oai_bladerfdevif \
+ liboai_bladerfdevif.so $dbin/liboai_bladerfdevif.so.$REL
+ fi
+
+ ln -s liboai_bladerfdevif.so liboai_device.so
+ ln -s $dbin/liboai_bladerfdevif.so.$REL $dbin/liboai_device.so
+ echo_info "liboai_device.so is linked to BLADERF device library"
+ elif [ "$HW" == "OAI_LMSSDR" ] ; then
+# if [ -f "/usr/include/libbladeRF.h" ] ; then
+ compilations \
+ $build_dir oai_lmssdrdevif \
+ liboai_lmssdrdevif.so $dbin/liboai_lmssdrdevif.so.$REL
+# fi
+
+ ln -s liboai_lmssdrdevif.so liboai_device.so
+ ln -s $dbin/liboai_lmssdrdevif.so.$REL $dbin/liboai_device.so
+ echo_info "liboai_device.so is linked to LMSSDR device library"
+ else
+ echo_info "liboai_device.so is not linked to any device library"
+ fi
+ fi
+
+ # build trasport protocol libraries (currently only ETHERNET is available)
+ if [ "$TP" != "None" ] ; then
+ rm -f liboai_transpro.so
+ rm -f $dbin/liboai_transpro.so
+
+ if [ "$TP" == "ETHERNET" ] ; then
+ compilations \
+ $build_dir oai_eth_transpro \
+ liboai_eth_transpro.so $dbin/liboai_eth_transpro.so.$REL
+ ln -s liboai_eth_transpro.so liboai_transpro.so
+ ln -s $dbin/liboai_eth_transpro.so.$REL $dbin/liboai_transpro.so
+ echo_info "liboai_transpro.so is linked with ETHERNET library"
+ fi
+ fi
+fi
+
+
+ # Doxygen Support
+ #####################
+ if [ "$BUILD_DOXYGEN" = "1" ] ;then
+ doxygen_log=$OPENAIR_DIR/cmake_targets/log/doxygen.log
+ echo_info "Building doxygen based documentation. The documentation file is located here: $OPENAIR_DIR/targets/DOCS/html/index.html"
+ echo_info "Doxygen Generation log is located here: $doxygen_log"
+ echo_info "Generating doxygen files....please wait"
+ (
+ [ "$CLEAN" = "1" ] && rm -rf $OPENAIR_DIR/cmake_targets/doxygen/build
+ mkdir -p $OPENAIR_DIR/cmake_targets/doxygen/build
+ cd $OPENAIR_DIR/cmake_targets/doxygen/build
cmake ..
- compilations \
- rrh_gw rrh_gw \
- rrh_gw $dbin/rrh_gw
+ make doc
+ ) >& $doxygen_log
fi
-
# Auto-tests
#####################
if [ "$OAI_TEST" = "1" ]; then
diff --git a/cmake_targets/rrh_gw/CMakeLists.txt b/cmake_targets/rrh_gw/CMakeLists.txt
deleted file mode 100644
index 9ff1437f0c..0000000000
--- a/cmake_targets/rrh_gw/CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-set(ENABLE_VCD_FIFO False )
-set(ENABLE_ITTI False )
-set(RF_BOARD "ETHERNET")
-set(PACKAGE_NAME "\"rrh_gw\"")
-include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)
diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper
index a1fefec3ce..c8adf45257 100755
--- a/cmake_targets/tools/build_helper
+++ b/cmake_targets/tools/build_helper
@@ -163,33 +163,27 @@ install_gnutls_from_source(){
check_install_usrp_uhd_driver(){
- log_file=$OPENAIR_DIR/cmake_targets/log/check_install_usrp_uhd_driver_log.txt
- echo_info "\nIn function: check_install_usrp_uhd_driver(). Installing USRP Drivers : The logfile for the installation is located here: $log_file "
- (
+ #first we remove old installation
+ $SUDO apt-get remove uhd libuhd-dev libuhd003 uhd-host -y
v=$(lsb_release -cs)
- $SUDO apt-add-repository "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu/$v $v main"
+ $SUDO apt-add-repository --remove "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu/$v $v main"
+ #The new USRP repository
+ $SUDO add-apt-repository ppa:ettusresearch/uhd -y
$SUDO apt-get update
$SUDO apt-get -y install python python-tk libboost-all-dev libusb-1.0-0-dev
- $SUDO apt-get -y install -t `lsb_release -cs` uhd --force-yes
- ) >& $log_file
+ $SUDO apt-get -y install libuhd-dev libuhd003 uhd-host
+ $SUDO uhd_images_downloader
}
check_install_bladerf_driver(){
- log_file=$OPENAIR_DIR/cmake_targets/log/check_install_bladerf_driver_log.txt
- echo_info "\nIn function: check_install_bladerf_driver(). Install BLADERF drivers : The logfile for the installation is located here: $log_file "
- (
$SUDO add-apt-repository -y ppa:bladerf/bladerf
$SUDO apt-get update
$SUDO apt-get install -y bladerf libbladerf-dev
$SUDO apt-get install -y bladerf-firmware-fx3
$SUDO apt-get install -y bladerf-fpga-hostedx40
- bladeRF-cli --flash-firmware /usr/share/Nuand/bladeRF/bladeRF_fw.img
- ) >& $log_file
+ $SUDO bladeRF-cli --flash-firmware /usr/share/Nuand/bladeRF/bladeRF_fw.img
}
check_install_additional_tools (){
- log_file=$OPENAIR_DIR/cmake_targets/log/check_install_additional_tools_log.txt
- echo_info "\nIn function: check_install_oai_software(). Installing optional OAI packages : The logfile for the installation is located here: $log_file "
- (
$SUDO apt-get update
$SUDO apt-get install -y \
check \
@@ -199,7 +193,6 @@ check_install_additional_tools (){
libboost-all-dev \
libpthread-stubs0-dev \
openvpn \
- phpmyadmin \
pkg-config \
python-dev \
python-pexpect \
@@ -212,14 +205,9 @@ check_install_additional_tools (){
vlan \
ctags \
ntpdate
- ) >& $log_file
}
check_install_oai_software() {
-
- log_file=$OPENAIR_DIR/cmake_targets/log/check_install_oai_software_log.txt
- echo_info "\nIn function: check_install_oai_software(). Installing mandatory OAI packages : The logfile for the installation is located here: $log_file "
- (
$SUDO apt-get update
$SUDO apt-get install -y \
autoconf \
@@ -280,7 +268,8 @@ check_install_oai_software() {
python-pip \
pydb \
wvdial \
- python-numpy
+ python-numpy \
+ sshpass
$SUDO update-alternatives --set liblapack.so /usr/lib/atlas-base/atlas/liblapack.so
if [ `lsb_release -rs` = '12.04' ] ; then
install_nettle_from_source
@@ -290,7 +279,6 @@ check_install_oai_software() {
fi
$SUDO pip install paramiko
$SUDO pip install pyroute2
- ) > $log_file 2>&1
install_asn1c_from_source
$SUDO rm -fr /opt/ssh
$SUDO git clone https://gist.github.com/2190472.git /opt/ssh
@@ -309,8 +297,8 @@ install_asn1c_from_source(){
patch -p0 < $OPENAIR_DIR/openair2/RRC/LITE/MESSAGES/asn1c/asn1cpatch.p0
./configure
make -j`nproc`
- $SUDO make install
- ) > $asn1_install_dir 2>&1
+ $SUDO make install
+ ) > $asn1_install_dir 2>&1
}
#################################################
@@ -392,3 +380,21 @@ done
}
+# get from http://www.linuxjournal.com/content/validating-ip-address-bash-script
+validate_ip() {
+
+local ip=$1
+local stat=1
+
+if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
+ OIFS=$IFS
+ IFS='.'
+ ip=($ip)
+ IFS=$OIFS
+ [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
+ && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
+ stat=$?
+fi
+
+return $stat
+}
\ No newline at end of file
diff --git a/cmake_targets/autotests/tools/exmimo/exmimo_stop.m b/cmake_targets/tools/exmimo_stop_octave.m
similarity index 100%
rename from cmake_targets/autotests/tools/exmimo/exmimo_stop.m
rename to cmake_targets/tools/exmimo_stop_octave.m
diff --git a/cmake_targets/tools/start_bladerf.py b/cmake_targets/tools/start_bladerf.py
new file mode 100755
index 0000000000..ad83d5d517
--- /dev/null
+++ b/cmake_targets/tools/start_bladerf.py
@@ -0,0 +1,46 @@
+#!/usr/bin/python
+import time
+import serial
+import os
+from pyroute2 import IPRoute
+import sys
+import re
+import threading
+import signal
+import traceback
+import commands
+
+if os.environ.get('OPENAIR_DIR') == None:
+ print "Error getting OPENAIR_DIR environment variable"
+ sys.exit(1)
+
+sys.path.append(os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/tools/'))
+
+from lib_autotest import *
+
+def reset_bladerf():
+ stringIdBladeRF='OpenMoko, Inc'
+ status, out = commands.getstatusoutput('lsusb | grep -i \'' + stringIdBladeRF + '\'')
+ if (out == '') :
+ print "BladeRF not found. Exiting now..."
+ sys.exit()
+ p=re.compile('Bus\s*(\w+)\s*Device\s*(\w+):\s*ID\s*(\w+):(\w+)')
+ res=p.findall(out)
+ BusId=res[0][0]
+ DeviceId=res[0][1]
+ VendorId=res[0][2]
+ ProductId=res[0][3]
+ usb_dir= find_usb_path(VendorId, ProductId)
+ print "BladeRF Found in directory..." + usb_dir
+ cmd = "sudo sh -c \"echo 0 > " + usb_dir + "/authorized\""
+ os.system(cmd + " ; sleep 5" )
+ cmd = "sudo sh -c \"echo 1 > " + usb_dir + "/authorized\""
+ os.system(cmd + " ; sleep 5" )
+
+os.system ('sudo -E bladeRF-cli --flash-firmware /usr/share/Nuand/bladeRF/bladeRF_fw.img')
+
+print "Resettting BladeRF..."
+
+reset_bladerf()
+
+os.system ("dmesg|tail")
diff --git a/cmake_targets/tools/stop_exmimo2 b/cmake_targets/tools/stop_exmimo2
new file mode 100755
index 0000000000..63810e0bf8
--- /dev/null
+++ b/cmake_targets/tools/stop_exmimo2
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+echo "This script stops exmimo2 as it might be transmitting signal by itself if lte-softmodem terminates incorrectly"
+
+if [ "$OPENAIR_DIR" == "" ]; then
+ echo "Is the OPENAIR_DIR path set correctly? Exiting now"
+ exit
+fi
+sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
+
+#load the module
+sudo -E $OPENAIR_DIR/cmake_targets/tools/init_exmimo2
+
+#now we stop the card from transmitting anything
+cd $OPENAIR_DIR/targets/bin
+sudo -E octave $OPENAIR_DIR/cmake_targets/tools/exmimo_stop_octave.m
+
diff --git a/openair1/PHY/CODING/lte_rate_matching.c b/openair1/PHY/CODING/lte_rate_matching.c
index 69697fc2e0..96663bd8a6 100644
--- a/openair1/PHY/CODING/lte_rate_matching.c
+++ b/openair1/PHY/CODING/lte_rate_matching.c
@@ -36,6 +36,7 @@
#include
#endif
#include "PHY/defs.h"
+#include "assertions.h"
//#define cmin(a,b) ((a)<(b) ? (a) : (b))
@@ -515,16 +516,14 @@ uint32_t lte_rate_matching_turbo(uint32_t RTC,
// if (rvidx==3)
// for (cnt=0;cnt=(3*RTC<<5),"Exiting, RM condition (Ncb %d, Nir/C %d, Nsoft %d, Kw %d\n",Ncb,Nir/C,Nsoft,3*(RTC<<5));
+
Gp = G/Nl/Qm;
GpmodC = Gp%C;
#ifdef RM_DEBUG
- printf("lte_rate_matching_turbo: Kw %d, rvidx %d, G %d, Qm %d, Nl%d, r %d\n",3*(RTC<<5),rvidx, G, Qm,Nl,r);
+ printf("lte_rate_matching_turbo: Ncb %d, Kw %d, Nir/C %d, rvidx %d, G %d, Qm %d, Nl%d, r %d\n",Ncb,3*(RTC<<5),Nir/C,rvidx, G, Qm,Nl,r);
#endif
if (r < (C-(GpmodC)))
diff --git a/openair1/PHY/INIT/lte_param_init.c b/openair1/PHY/INIT/lte_param_init.c
new file mode 100644
index 0000000000..2b827dcb0e
--- /dev/null
+++ b/openair1/PHY/INIT/lte_param_init.c
@@ -0,0 +1,106 @@
+#include
+#include
+#include
+#include
+#include
+
+#include "SIMULATION/TOOLS/defs.h"
+#include "PHY/types.h"
+#include "PHY/defs.h"
+#include "PHY/extern.h"
+
+extern PHY_VARS_eNB *PHY_vars_eNB;
+extern PHY_VARS_UE *PHY_vars_UE;
+
+void lte_param_init(unsigned char N_tx,
+ unsigned char N_rx,
+ unsigned char transmission_mode,
+ uint8_t extended_prefix_flag,
+ frame_t frame_type,
+ uint16_t Nid_cell,
+ uint8_t tdd_config,
+ uint8_t N_RB_DL,
+ uint8_t threequarter_fs,
+ uint8_t osf,
+ uint32_t perfect_ce)
+{
+
+ LTE_DL_FRAME_PARMS *lte_frame_parms;
+ int i;
+
+
+ printf("Start lte_param_init\n");
+ PHY_vars_eNB = malloc(sizeof(PHY_VARS_eNB));
+ PHY_vars_UE = malloc(sizeof(PHY_VARS_UE));
+ //PHY_config = malloc(sizeof(PHY_CONFIG));
+ mac_xface = malloc(sizeof(MAC_xface));
+
+ srand(0);
+ randominit(0);
+ set_taus_seed(0);
+
+ lte_frame_parms = &(PHY_vars_eNB->lte_frame_parms);
+
+ lte_frame_parms->N_RB_DL = N_RB_DL; //50 for 10MHz and 25 for 5 MHz
+ lte_frame_parms->N_RB_UL = N_RB_DL;
+ lte_frame_parms->threequarter_fs = threequarter_fs;
+ lte_frame_parms->Ncp = extended_prefix_flag;
+ lte_frame_parms->Nid_cell = Nid_cell;
+ lte_frame_parms->nushift = Nid_cell%6;
+ lte_frame_parms->nb_antennas_tx = N_tx;
+ lte_frame_parms->nb_antennas_rx = N_rx;
+ lte_frame_parms->nb_antennas_tx_eNB = N_tx;
+ lte_frame_parms->phich_config_common.phich_resource = one;
+ lte_frame_parms->tdd_config = tdd_config;
+ lte_frame_parms->frame_type = frame_type;
+ // lte_frame_parms->Csrs = 2;
+ // lte_frame_parms->Bsrs = 0;
+ // lte_frame_parms->kTC = 0;44
+ // lte_frame_parms->n_RRC = 0;
+ lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
+
+ init_frame_parms(lte_frame_parms,osf);
+
+ //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
+
+ // phy_init_top(lte_frame_parms); //allocation
+
+ PHY_vars_UE->is_secondary_ue = 0;
+ PHY_vars_UE->lte_frame_parms = *lte_frame_parms;
+ PHY_vars_eNB->lte_frame_parms = *lte_frame_parms;
+
+ phy_init_lte_top(lte_frame_parms);
+ dump_frame_parms(lte_frame_parms);
+
+ PHY_vars_UE->PHY_measurements.n_adj_cells=0;
+ PHY_vars_UE->PHY_measurements.adj_cell_id[0] = Nid_cell+1;
+ PHY_vars_UE->PHY_measurements.adj_cell_id[1] = Nid_cell+2;
+
+ for (i=0; i<3; i++)
+ lte_gold(lte_frame_parms,PHY_vars_UE->lte_gold_table[i],Nid_cell+i);
+
+ phy_init_lte_ue(PHY_vars_UE,1,0);
+ phy_init_lte_eNB(PHY_vars_eNB,0,0,0);
+
+ generate_pcfich_reg_mapping(&PHY_vars_UE->lte_frame_parms);
+ generate_phich_reg_mapping(&PHY_vars_UE->lte_frame_parms);
+
+ // DL power control init
+ if (transmission_mode == 1) {
+ PHY_vars_eNB->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB
+ ((PHY_vars_eNB->lte_frame_parms).pdsch_config_common).p_b = 0;
+ PHY_vars_UE->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB
+ ((PHY_vars_UE->lte_frame_parms).pdsch_config_common).p_b = 0;
+ } else { // rho_a = rhob
+ PHY_vars_eNB->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB
+ ((PHY_vars_eNB->lte_frame_parms).pdsch_config_common).p_b = 1;
+ PHY_vars_UE->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB
+ ((PHY_vars_UE->lte_frame_parms).pdsch_config_common).p_b = 1;
+ }
+
+ PHY_vars_UE->perfect_ce = perfect_ce;
+
+ printf("Done lte_param_init\n");
+
+
+}
diff --git a/openair1/PHY/INIT/lte_parms.c b/openair1/PHY/INIT/lte_parms.c
index 55bd964aa7..fa0e731af9 100644
--- a/openair1/PHY/INIT/lte_parms.c
+++ b/openair1/PHY/INIT/lte_parms.c
@@ -68,33 +68,57 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
break;
default:
- msg("Illegal oversampling %d\n",osf);
+ printf("Illegal oversampling %d\n",osf);
return(-1);
}
switch (frame_parms->N_RB_DL) {
+
case 100:
if (osf>1) {
- msg("Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
+ printf("Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
return(-1);
}
- frame_parms->ofdm_symbol_size = 2048;
- frame_parms->log2_symbol_size = 11;
- frame_parms->samples_per_tti = 30720;
- frame_parms->first_carrier_offset = 2048-600;
+ if (frame_parms->threequarter_fs) {
+ frame_parms->ofdm_symbol_size = 1536;
+ frame_parms->samples_per_tti = 23040;
+ frame_parms->first_carrier_offset = 1536-600;
+ frame_parms->nb_prefix_samples=(frame_parms->nb_prefix_samples*3)>>2;
+ frame_parms->nb_prefix_samples0=(frame_parms->nb_prefix_samples0*3)>>2;
+ }
+ else {
+ frame_parms->ofdm_symbol_size = 2048;
+ frame_parms->samples_per_tti = 30720;
+ frame_parms->first_carrier_offset = 2048-600;
+ }
+ frame_parms->N_RBGS = 4;
+ frame_parms->N_RBG = 25;
+ break;
+
+ case 75:
+ if (osf>1) {
+ printf("Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
+ return(-1);
+ }
+
+
+ frame_parms->ofdm_symbol_size = 1536;
+ frame_parms->samples_per_tti = 23040;
+ frame_parms->first_carrier_offset = 1536-450;
+ frame_parms->nb_prefix_samples=(frame_parms->nb_prefix_samples*3)>>2;
+ frame_parms->nb_prefix_samples0=(frame_parms->nb_prefix_samples0*3)>>2;
frame_parms->N_RBGS = 4;
frame_parms->N_RBG = 25;
break;
case 50:
if (osf>1) {
- msg("Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
+ printf("Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
return(-1);
}
frame_parms->ofdm_symbol_size = 1024*osf;
- frame_parms->log2_symbol_size = 10+log2_osf;
frame_parms->samples_per_tti = 15360*osf;
frame_parms->first_carrier_offset = frame_parms->ofdm_symbol_size - 300;
frame_parms->nb_prefix_samples>>=(1-log2_osf);
@@ -105,13 +129,13 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
case 25:
if (osf>2) {
- msg("Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
+ printf("Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
return(-1);
}
frame_parms->ofdm_symbol_size = 512*osf;
- frame_parms->log2_symbol_size = 9+log2_osf;
+
frame_parms->samples_per_tti = 7680*osf;
frame_parms->first_carrier_offset = frame_parms->ofdm_symbol_size - 150;
frame_parms->nb_prefix_samples>>=(2-log2_osf);
@@ -124,7 +148,6 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
case 15:
frame_parms->ofdm_symbol_size = 256*osf;
- frame_parms->log2_symbol_size = 8+log2_osf;
frame_parms->samples_per_tti = 3840*osf;
frame_parms->first_carrier_offset = frame_parms->ofdm_symbol_size - 90;
frame_parms->nb_prefix_samples>>=(3-log2_osf);
@@ -135,7 +158,6 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
case 6:
frame_parms->ofdm_symbol_size = 128*osf;
- frame_parms->log2_symbol_size = 7+log2_osf;
frame_parms->samples_per_tti = 1920*osf;
frame_parms->first_carrier_offset = frame_parms->ofdm_symbol_size - 36;
frame_parms->nb_prefix_samples>>=(4-log2_osf);
@@ -145,7 +167,7 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
break;
default:
- msg("init_frame_parms: Error: Number of resource blocks (N_RB_DL %d) undefined, frame_parms = %p \n",frame_parms->N_RB_DL, frame_parms);
+ printf("init_frame_parms: Error: Number of resource blocks (N_RB_DL %d) undefined, frame_parms = %p \n",frame_parms->N_RB_DL, frame_parms);
return(-1);
break;
}
@@ -159,23 +181,22 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms)
{
- msg("frame_parms->N_RB_DL=%d\n",frame_parms->N_RB_DL);
- msg("frame_parms->N_RB_UL=%d\n",frame_parms->N_RB_UL);
- msg("frame_parms->Nid_cell=%d\n",frame_parms->Nid_cell);
- msg("frame_parms->Ncp=%d\n",frame_parms->Ncp);
- msg("frame_parms->Ncp_UL=%d\n",frame_parms->Ncp_UL);
- msg("frame_parms->nushift=%d\n",frame_parms->nushift);
- msg("frame_parms->frame_type=%d\n",frame_parms->frame_type);
- msg("frame_parms->tdd_config=%d\n",frame_parms->tdd_config);
- msg("frame_parms->tdd_config_S=%d\n",frame_parms->tdd_config_S);
- msg("frame_parms->mode1_flag=%d\n",frame_parms->mode1_flag);
- msg("frame_parms->nb_antennas_tx=%d\n",frame_parms->nb_antennas_tx);
- msg("frame_parms->nb_antennas_rx=%d\n",frame_parms->nb_antennas_rx);
- msg("frame_parms->ofdm_symbol_size=%d\n",frame_parms->ofdm_symbol_size);
- msg("frame_parms->log2_symbol_size=%d\n",frame_parms->log2_symbol_size);
- msg("frame_parms->nb_prefix_samples=%d\n",frame_parms->nb_prefix_samples);
- msg("frame_parms->nb_prefix_samples0=%d\n",frame_parms->nb_prefix_samples0);
- msg("frame_parms->first_carrier_offset=%d\n",frame_parms->first_carrier_offset);
- msg("frame_parms->samples_per_tti=%d\n",frame_parms->samples_per_tti);
- msg("frame_parms->symbols_per_tti=%d\n",frame_parms->symbols_per_tti);
+ printf("frame_parms->N_RB_DL=%d\n",frame_parms->N_RB_DL);
+ printf("frame_parms->N_RB_UL=%d\n",frame_parms->N_RB_UL);
+ printf("frame_parms->Nid_cell=%d\n",frame_parms->Nid_cell);
+ printf("frame_parms->Ncp=%d\n",frame_parms->Ncp);
+ printf("frame_parms->Ncp_UL=%d\n",frame_parms->Ncp_UL);
+ printf("frame_parms->nushift=%d\n",frame_parms->nushift);
+ printf("frame_parms->frame_type=%d\n",frame_parms->frame_type);
+ printf("frame_parms->tdd_config=%d\n",frame_parms->tdd_config);
+ printf("frame_parms->tdd_config_S=%d\n",frame_parms->tdd_config_S);
+ printf("frame_parms->mode1_flag=%d\n",frame_parms->mode1_flag);
+ printf("frame_parms->nb_antennas_tx=%d\n",frame_parms->nb_antennas_tx);
+ printf("frame_parms->nb_antennas_rx=%d\n",frame_parms->nb_antennas_rx);
+ printf("frame_parms->ofdm_symbol_size=%d\n",frame_parms->ofdm_symbol_size);
+ printf("frame_parms->nb_prefix_samples=%d\n",frame_parms->nb_prefix_samples);
+ printf("frame_parms->nb_prefix_samples0=%d\n",frame_parms->nb_prefix_samples0);
+ printf("frame_parms->first_carrier_offset=%d\n",frame_parms->first_carrier_offset);
+ printf("frame_parms->samples_per_tti=%d\n",frame_parms->samples_per_tti);
+ printf("frame_parms->symbols_per_tti=%d\n",frame_parms->symbols_per_tti);
}
diff --git a/openair1/PHY/LTE_ESTIMATION/defs.h b/openair1/PHY/LTE_ESTIMATION/defs.h
index 10dc558c9b..903793c2b5 100644
--- a/openair1/PHY/LTE_ESTIMATION/defs.h
+++ b/openair1/PHY/LTE_ESTIMATION/defs.h
@@ -243,15 +243,16 @@ int lte_est_timing_advance(LTE_DL_FRAME_PARMS *frame_parms,
int lte_est_timing_advance_pusch(PHY_VARS_eNB* phy_vars_eNB,module_id_t UE_id,uint8_t subframe);
-void lte_eNB_I0_measurements(PHY_VARS_eNB *phy_vars_eNb,
+void lte_eNB_I0_measurements(PHY_VARS_eNB *phy_vars_eNB,
+ int subframe,
module_id_t eNB_id,
unsigned char clear);
-void lte_eNB_I0_measurements_emul(PHY_VARS_eNB *phy_vars_eNb,
+void lte_eNB_I0_measurements_emul(PHY_VARS_eNB *phy_vars_eNB,
uint8_t sect_id);
-void lte_eNB_srs_measurements(PHY_VARS_eNB *phy_vars_eNb,
+void lte_eNB_srs_measurements(PHY_VARS_eNB *phy_vars_eNBy,
module_id_t eNB_id,
module_id_t UE_id,
unsigned char init_averaging);
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
index 10c0cef42a..cfc2d929f1 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
@@ -703,24 +703,28 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
void (*idft)(int16_t *,int16_t *, int);
- switch (phy_vars_ue->lte_frame_parms.log2_symbol_size) {
- case 7:
+ switch (phy_vars_ue->lte_frame_parms.ofdm_symbol_size) {
+ case 128:
idft = idft128;
break;
- case 8:
+ case 256:
idft = idft256;
break;
- case 9:
+ case 512:
idft = idft512;
break;
- case 10:
+ case 1024:
idft = idft1024;
break;
- case 11:
+ case 1536:
+ idft = idft1536;
+ break;
+
+ case 2048:
idft = idft2048;
break;
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
index 9564b7842c..14e1c18571 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
@@ -39,57 +39,36 @@
int32_t rx_power_avg_eNB[3][3];
-void lte_eNB_I0_measurements(PHY_VARS_eNB *phy_vars_eNb,
+void lte_eNB_I0_measurements(PHY_VARS_eNB *phy_vars_eNB,
+ int subframe,
unsigned char eNB_id,
unsigned char clear)
{
- LTE_eNB_COMMON *eNB_common_vars = &phy_vars_eNb->lte_eNB_common_vars;
- LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNb->lte_frame_parms;
- PHY_MEASUREMENTS_eNB *phy_measurements = &phy_vars_eNb->PHY_measurements_eNB[eNB_id];
-
+ LTE_eNB_COMMON *eNB_common_vars = &phy_vars_eNB->lte_eNB_common_vars;
+ LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms;
+ PHY_MEASUREMENTS_eNB *phy_measurements = &phy_vars_eNB->PHY_measurements_eNB[eNB_id];
+ int32_t *rb_mask = phy_vars_eNB->rb_mask_ul;
uint32_t aarx,rx_power_correction;
uint32_t rb;
int32_t *ul_ch;
int32_t n0_power_tot;
-
+ int len;
+ int offset;
+ int Nsymb = (frame_parms->Ncp==NORMAL)?14:12;
// noise measurements
// for the moment we measure the noise on the 7th OFDM symbol (in S subframe)
phy_measurements->n0_power_tot = 0;
- /* printf("rxdataF0 %p, rxdataF1 %p\n",
- (&eNB_common_vars->rxdataF[0][0][(frame_parms->ofdm_symbol_size + frame_parms->first_carrier_offset)<<1 ]),
- (&eNB_common_vars->rxdataF[0][1][(frame_parms->ofdm_symbol_size + frame_parms->first_carrier_offset)<<1 ]));
- */
- /*
- for (i=0;i<512;i++)
- printf("sector 0 antenna 0 : %d,%d\n",((short *)&eNB_common_vars->rxdataF[0][0][(19*frame_parms->ofdm_symbol_size)<<1])[i<<1],
- ((short *)&eNB_common_vars->rxdataF[0][0][(19*frame_parms->ofdm_symbol_size)<<1])[1+(i<<1)]);
-
- for (i=0;i<12;i++)
- // printf("sector 0 antenna 1 : %d,%d\n",((short *)&eNB_common_vars->rxdataF[0][1][(19*frame_parms->ofdm_symbol_size)<<1])[i<<1],
- ((short *)&eNB_common_vars->rxdataF[0][1][(19*frame_parms->ofdm_symbol_size)<<1])[1+(i<<1)]);
- */
-
- if ( (frame_parms->ofdm_symbol_size == 128) ||
- (frame_parms->ofdm_symbol_size == 512) )
- rx_power_correction = 2;
- else
- rx_power_correction = 1;
-
for (aarx=0; aarxnb_antennas_rx; aarx++) {
if (clear == 1)
phy_measurements->n0_power[aarx]=0;
-#ifdef USER_MODE
+
phy_measurements->n0_power[aarx] = ((k1*signal_energy(&eNB_common_vars->rxdata[eNB_id][aarx][(frame_parms->samples_per_tti<<1) -frame_parms->ofdm_symbol_size],
frame_parms->ofdm_symbol_size)) + k2*phy_measurements->n0_power[aarx])>>10;
-#else
- phy_measurements->n0_power[aarx] = ((k1*signal_energy(&eNB_common_vars->rxdata[eNB_id][aarx][(frame_parms->samples_per_tti<<1) -frame_parms->ofdm_symbol_size],
- frame_parms->ofdm_symbol_size))+k2*phy_measurements->n0_power[aarx])>>10;
-#endif
phy_measurements->n0_power[aarx] = (phy_measurements->n0_power[aarx] * 12*frame_parms->N_RB_DL)/(frame_parms->ofdm_symbol_size);
phy_measurements->n0_power_dB[aarx] = (unsigned short) dB_fixed(phy_measurements->n0_power[aarx]);
phy_measurements->n0_power_tot += phy_measurements->n0_power[aarx];
@@ -97,52 +76,49 @@ void lte_eNB_I0_measurements(PHY_VARS_eNB *phy_vars_eNb,
phy_measurements->n0_power_tot_dB = (unsigned short) dB_fixed(phy_measurements->n0_power_tot);
- phy_measurements->n0_power_tot_dBm = phy_measurements->n0_power_tot_dB - phy_vars_eNb->rx_total_gain_eNB_dB;
+ phy_measurements->n0_power_tot_dBm = phy_measurements->n0_power_tot_dB - phy_vars_eNB->rx_total_gain_eNB_dB;
// printf("n0_power %d\n",phy_measurements->n0_power_tot_dB);
for (rb=0; rbN_RB_UL; rb++) {
n0_power_tot=0;
+ if ((rb_mask[rb>>5]&(1<<(rb&31))) == 0) { // check that rb was not used in this subframe
+ for (aarx=0; aarxnb_antennas_rx; aarx++) {
- for (aarx=0; aarxnb_antennas_rx; aarx++) {
+ // select the 7th symbol in an uplink subframe
+ offset = (frame_parms->first_carrier_offset + (rb*12))%frame_parms->ofdm_symbol_size;
+ offset += (7*frame_parms->ofdm_symbol_size);//(((Nsymb*subframe)+7)*frame_parms->ofdm_symbol_size);
+ ul_ch = &eNB_common_vars->rxdataF[eNB_id][aarx][offset];
+ len = 12;
+ // just do first half of middle PRB for odd number of PRBs
+ if (((frame_parms->N_RB_UL&1) == 1) &&
+ (rb==(frame_parms->N_RB_UL>>1))) {
+ len=6;
+ }
+ if (clear == 1)
+ phy_measurements->n0_subband_power[aarx][rb]=0;
+
+ AssertFatal(ul_ch, "RX signal buffer (freq) problem");
- if (rb < 12)
- // ul_ch = &eNB_common_vars->rxdataF[eNB_id][aarx][((19*(frame_parms->ofdm_symbol_size)) + frame_parms->first_carrier_offset + (rb*12))<<1];
- ul_ch = &eNB_common_vars->rxdataF[eNB_id][aarx][((7*frame_parms->ofdm_symbol_size) + frame_parms->first_carrier_offset + (rb*12))<<1];
- else if (rb>12)
- ul_ch = &eNB_common_vars->rxdataF[eNB_id][aarx][((7*frame_parms->ofdm_symbol_size) + 6 + (rb-13)*12)<<1];
- else {
- ul_ch = NULL;
- }
-
- if (clear == 1)
- phy_measurements->n0_subband_power[aarx][rb]=0;
-
- if (ul_ch) {
- // for (i=0;i<24;i+=2)
- // printf("re %d => %d\n",i/2,ul_ch[i]);
- phy_measurements->n0_subband_power[aarx][rb] = ((k1*(signal_energy_nodc(ul_ch,
- 24))*rx_power_correction) + (k2*phy_measurements->n0_subband_power[aarx][rb]))>>11; // 11 and 24 to compensate for repeated signal format
-
- phy_measurements->n0_subband_power_dB[aarx][rb] = dB_fixed(phy_measurements->n0_subband_power[aarx][rb]);
- // printf("eNb %d, aarx %d, rb %d : energy %d (%d dB)\n",eNB_id,aarx,rb,signal_energy_nodc(ul_ch,24), phy_measurements->n0_subband_power_dB[aarx][rb]);
- n0_power_tot += phy_measurements->n0_subband_power[aarx][rb];
- } else {
- phy_measurements->n0_subband_power[aarx][rb] = 1;
- phy_measurements->n0_subband_power_dB[aarx][rb] = -99;
- n0_power_tot = 1;
+ phy_measurements->n0_subband_power[aarx][rb] = signal_energy_nodc(ul_ch,len);
+ //((k1*(signal_energy_nodc(ul_ch,len)))
+ // + (k2*phy_measurements->n0_subband_power[aarx][rb]));
+
+ phy_measurements->n0_subband_power_dB[aarx][rb] = dB_fixed(phy_measurements->n0_subband_power[aarx][rb]);
+ // printf("subframe %d (%d): eNb %d, aarx %d, rb %d len %d: energy %d (%d dB)\n",subframe,offset,eNB_id,aarx,rb,len,signal_energy_nodc(ul_ch,len),
+ // phy_measurements->n0_subband_power_dB[aarx][rb]);
+ n0_power_tot += phy_measurements->n0_subband_power[aarx][rb];
}
+
+ phy_measurements->n0_subband_power_tot_dB[rb] = dB_fixed(n0_power_tot);
+ phy_measurements->n0_subband_power_tot_dBm[rb] = phy_measurements->n0_subband_power_tot_dB[rb] - phy_vars_eNB->rx_total_gain_eNB_dB - dB_fixed(frame_parms->N_RB_UL);
+
}
-
- phy_measurements->n0_subband_power_tot_dB[rb] = dB_fixed(n0_power_tot);
- phy_measurements->n0_subband_power_tot_dBm[rb] = phy_measurements->n0_subband_power_tot_dB[rb] - phy_vars_eNb->rx_total_gain_eNB_dB - 14;
-
}
}
-
void lte_eNB_srs_measurements(PHY_VARS_eNB *phy_vars_eNb,
unsigned char eNB_id,
unsigned char UE_id,
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
index 9864a50ee2..6e2311789e 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
@@ -61,7 +61,6 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com
{
int i,k;
- //unsigned short ds = frame_parms->log2_symbol_size - 7;
sync_corr_ue0 = (int *)malloc16(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*sizeof(int)*frame_parms->samples_per_tti);
sync_corr_ue1 = (int *)malloc16(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*sizeof(int)*frame_parms->samples_per_tti);
@@ -184,13 +183,6 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com
LOG_E(PHY,"Unsupported N_RB_DL %d\n",frame_parms->N_RB_DL);
break;
}
- /*
- frame_parms->twiddle_ifft, /// complex twiddle factors
- frame_parms->rev, /// bit reversed permutation vector
- frame_parms->log2_symbol_size,/// log2(FFT_SIZE)
- (frame_parms->log2_symbol_size/2),
- 0); /// 0 - input is in complex Q1.15 format, 1 - input is in complex redundant Q1.15 format)
- */
for (i=0; iofdm_symbol_size; i++)
((int32_t*)primary_synch0_time)[i] = sync_tmp[i];
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
index 1d23bdca38..1eb663ec89 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
@@ -432,7 +432,7 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *phy_vars_eNB,
in_fft_ptr_0 = &temp_in_fft_0[0];
in_fft_ptr_1 = &temp_in_fft_1[0];
- for(j=0; j<(1<<(frame_parms->log2_symbol_size))/12; j++) {
+ for(j=0; j<(frame_parms->ofdm_symbol_size)/12; j++) {
if (j>19) {
((int16_t*)in_fft_ptr_0)[-40+(2*j)] = ((int16_t*)temp_out_ifft_0)[-80+(2*j)]*rx_power_correction;
((int16_t*)in_fft_ptr_0)[-40+(2*j)+1] = ((int16_t*)temp_out_ifft_0)[-80+(2*j+1)]*rx_power_correction;
diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
index 6faf2e1ed0..8e64275b41 100644
--- a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
+++ b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
@@ -72,7 +72,7 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *phy_vars_eNB,
else if ((p==1) && (l>0))
nu = 0;
else {
- msg("lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
+ printf("lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
return(-1);
}
@@ -94,9 +94,9 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *phy_vars_eNB,
output[k] = qpsk[(phy_vars_eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
#ifdef DEBUG_DL_CELL_SPEC
- msg("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
+ printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
Ns,l,m,mprime_dword,mprime_qpsk_symb);
- msg("index = %d (k %d)\n",(phy_vars_eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
+ printf("index = %d (k %d)\n",(phy_vars_eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
#endif
mprime++;
@@ -151,7 +151,7 @@ int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
else if ((p==1) && (l>0))
nu = 0;
else {
- msg("lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
+ printf("lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
return(-1);
}
@@ -177,9 +177,9 @@ int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
output[k] = qpsk[(phy_vars_eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
#ifdef DEBUG_DL_CELL_SPEC
- msg("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
+ printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
Ns,l,m,mprime_dword,mprime_qpsk_symb);
- msg("index = %d (k %d)\n",(phy_vars_eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
+ printf("index = %d (k %d)\n",(phy_vars_eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
#endif
mprime++;
diff --git a/openair1/PHY/LTE_REFSIG/primary_synch.h b/openair1/PHY/LTE_REFSIG/primary_synch.h
index f9cf6fc171..717f2e552c 100644
--- a/openair1/PHY/LTE_REFSIG/primary_synch.h
+++ b/openair1/PHY/LTE_REFSIG/primary_synch.h
@@ -1,31 +1,3 @@
-/*******************************************************************************
- OpenAirInterface
- Copyright(c) 1999 - 2014 Eurecom
-
- OpenAirInterface is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
-
- OpenAirInterface is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with OpenAirInterface.The full GNU General Public License is
- included in this distribution in the file called "COPYING". If not,
- see .
-
- Contact Information
- OpenAirInterface Admin: openair_admin@eurecom.fr
- OpenAirInterface Tech : openair_tech@eurecom.fr
- OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
-
- Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
-
- *******************************************************************************/
short primary_synch0[144] = {0,0,0,0,0,0,0,0,0,0,32767,0,-26120,-19785,11971,-30502,-24020,-22288,32117,6492,31311,9658,-16384,-28378,25100,-21063,-7292,-31946,20429,25618,14948,29158,11971,-30502,31311,9658,25100,-21063,-16384,28377,-24020,22287,32117,6492,-7292,31945,20429,25618,-26120,-19785,-16384,-28378,-16384,28377,-26120,-19785,-32402,4883,31311,-9659,32117,6492,-7292,-31946,32767,-1,25100,-21063,-24020,22287,-32402,4883,-32402,4883,-24020,22287,25100,-21063,32767,-1,-7292,-31946,32117,6492,31311,-9659,-32402,4883,-26120,-19785,-16384,28377,-16384,-28378,-26120,-19785,20429,25618,-7292,31945,32117,6492,-24020,22287,-16384,28377,25100,-21063,31311,9658,11971,-30502,14948,29158,20429,25618,-7292,-31946,25100,-21063,-16384,-28378,31311,9658,32117,6492,-24020,-22288,11971,-30502,-26120,-19785,32767,0,0,0,0,0,0,0,0,0,0,0};
short primary_synch1[144] = {0,0,0,0,0,0,0,0,0,0,32767,0,-31754,-8086,-24020,-22288,2448,32675,-26120,19784,27073,18458,-16384,28377,25100,21062,-29523,14217,-7292,31945,-13477,-29868,-24020,-22288,27073,18458,25100,21062,-16384,-28378,2448,-32676,-26120,19784,-29523,-14218,-7292,31945,-31754,-8086,-16384,28377,-16384,-28378,-31754,-8086,31311,-9659,27073,-18459,-26120,19784,-29523,14217,32767,-1,25100,21062,2448,-32676,31311,-9659,31311,-9659,2448,-32676,25100,21062,32767,0,-29523,14217,-26120,19784,27073,-18459,31311,-9659,-31754,-8086,-16384,-28378,-16384,28377,-31754,-8086,-7292,31945,-29523,-14218,-26120,19784,2448,-32676,-16384,-28378,25100,21062,27073,18458,-24020,-22288,-13477,-29868,-7292,31945,-29523,14217,25100,21062,-16384,28377,27073,18458,-26120,19784,2448,32675,-24020,-22288,-31754,-8086,32767,0,0,0,0,0,0,0,0,0,0,0};
short primary_synch2[144] = {0,0,0,0,0,0,0,0,0,0,32767,0,-31754,8085,-24020,22287,2448,-32676,-26120,-19785,27073,-18459,-16384,-28378,25100,-21063,-29523,-14218,-7292,-31946,-13477,29867,-24020,22287,27073,-18459,25100,-21063,-16384,28377,2448,32675,-26120,-19785,-29523,14217,-7292,-31946,-31754,8085,-16384,-28378,-16384,28377,-31754,8085,31311,9658,27073,18458,-26120,-19785,-29523,-14218,32767,0,25100,-21063,2448,32675,31311,9658,31311,9658,2448,32675,25100,-21063,32767,0,-29523,-14218,-26120,-19785,27073,18458,31311,9658,-31754,8085,-16384,28377,-16384,-28378,-31754,8085,-7292,-31946,-29523,14217,-26120,-19785,2448,32675,-16384,28377,25100,-21063,27073,-18459,-24020,22287,-13477,29867,-7292,-31946,-29523,-14218,25100,-21063,-16384,-28378,27073,-18459,-26120,-19785,2448,-32676,-24020,22287,-31754,8085,32767,-1,0,0,0,0,0,0,0,0,0,0};
diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c
index 2fd89c8f64..70761ac5ae 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci.c
@@ -2108,14 +2108,14 @@ uint8_t generate_dci_top(uint8_t num_ue_spec_dci,
if (dci_alloc[i].L == (uint8_t)L) {
#ifdef DEBUG_DCI_ENCODING
- LOG_I(PHY,"Generating common DCI %d/%d (nCCE %d) of length %d, aggregation %d (%x)\n",i,num_common_dci,dci_alloc[i].nCCE,dci_alloc[i].dci_length,1<=0) {
+ if (dci_alloc[i].firstCCE>=0) {
e_ptr = generate_dci0(dci_alloc[i].dci_pdu,
- e+(72*dci_alloc[i].nCCE),
+ e+(72*dci_alloc[i].firstCCE),
dci_alloc[i].dci_length,
dci_alloc[i].L,
dci_alloc[i].rnti);
@@ -2133,9 +2133,9 @@ uint8_t generate_dci_top(uint8_t num_ue_spec_dci,
dump_dci(frame_parms,&dci_alloc[i]);
#endif
- if (dci_alloc[i].nCCE >= 0) {
+ if (dci_alloc[i].firstCCE >= 0) {
e_ptr = generate_dci0(dci_alloc[i].dci_pdu,
- e+(72*dci_alloc[i].nCCE),
+ e+(72*dci_alloc[i].firstCCE),
dci_alloc[i].dci_length,
dci_alloc[i].L,
dci_alloc[i].rnti);
@@ -2537,13 +2537,116 @@ uint16_t get_nquad(uint8_t num_pdcch_symbols,LTE_DL_FRAME_PARMS *frame_parms,uin
return(Nreg - 4 - (3*Ngroup_PHICH));
}
-uint16_t get_nCCE_max(uint8_t Mod_id,uint8_t CC_id)
+uint16_t get_nCCE_mac(uint8_t Mod_id,uint8_t CC_id,int num_pdcch_symbols,int subframe)
{
// check for eNB only !
- return(get_nCCE(3,&PHY_vars_eNB_g[Mod_id][CC_id]->lte_frame_parms,1)); // 5, 15,21
+ return(get_nCCE(num_pdcch_symbols,
+ &PHY_vars_eNB_g[Mod_id][CC_id]->lte_frame_parms,
+ get_mi(&PHY_vars_eNB_g[Mod_id][CC_id]->lte_frame_parms,subframe)));
}
+
+int get_nCCE_offset_l1(int *CCE_table,
+ const unsigned char L,
+ const int nCCE,
+ const int common_dci,
+ const unsigned short rnti,
+ const unsigned char subframe)
+{
+
+ int search_space_free,m,nb_candidates = 0,l,i;
+ unsigned int Yk;
+ /*
+ printf("CCE Allocation: ");
+ for (i=0;i=0 ; m--) {
+
+ search_space_free = 1;
+ for (l=0; lharq_processes[harq_pid];
- dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT6[rballoc];
+ if (vrb_type==LOCALIZED) {
+ dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT6[rballoc];
+ }
+ else {
+ LOG_E(PHY,"Distributed RB allocation not done yet\n");
+ mac_xface->macphy_exit("exiting");
+ }
dlsch0_harq->vrb_type = vrb_type;
dlsch0_harq->nb_rb = RIV2nb_rb_LUT6[rballoc];//NPRB;
RIV_max = RIV_max6;
@@ -961,7 +966,14 @@ int generate_eNB_dlsch_params_from_dci(int frame,
dlsch0_harq = dlsch[0]->harq_processes[harq_pid];
- dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT25[rballoc];
+
+ if (vrb_type==LOCALIZED) {
+ dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT25[rballoc];
+ }
+ else {
+ LOG_E(PHY,"Distributed RB allocation not done yet\n");
+ mac_xface->macphy_exit("exiting");
+ }
dlsch0_harq->vrb_type = vrb_type;
dlsch0_harq->nb_rb = RIV2nb_rb_LUT25[rballoc];//NPRB;
RIV_max = RIV_max25;
@@ -988,9 +1000,16 @@ int generate_eNB_dlsch_params_from_dci(int frame,
}
dlsch0_harq = dlsch[0]->harq_processes[harq_pid];
+ if (vrb_type==LOCALIZED) {
+ dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT50_0[rballoc];
+ dlsch0_harq->rb_alloc[1] = localRIV2alloc_LUT50_1[rballoc];
+ }
+ else {
+ LOG_E(PHY,"Distributed RB allocation not done yet\n");
+ mac_xface->macphy_exit("exiting");
+ }
+
- dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT50_0[rballoc];
- dlsch0_harq->rb_alloc[1] = localRIV2alloc_LUT50_1[rballoc];
dlsch0_harq->vrb_type = vrb_type;
dlsch0_harq->nb_rb = RIV2nb_rb_LUT50[rballoc];//NPRB;
RIV_max = RIV_max50;
@@ -1018,10 +1037,17 @@ int generate_eNB_dlsch_params_from_dci(int frame,
dlsch0_harq = dlsch[0]->harq_processes[harq_pid];
dlsch0_harq->vrb_type = vrb_type;
- dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT100_0[rballoc];
- dlsch0_harq->rb_alloc[1] = localRIV2alloc_LUT100_1[rballoc];
- dlsch0_harq->rb_alloc[2] = localRIV2alloc_LUT100_2[rballoc];
- dlsch0_harq->rb_alloc[3] = localRIV2alloc_LUT100_3[rballoc];
+ if (vrb_type==LOCALIZED) {
+ dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT100_0[rballoc];
+ dlsch0_harq->rb_alloc[1] = localRIV2alloc_LUT100_1[rballoc];
+ dlsch0_harq->rb_alloc[2] = localRIV2alloc_LUT100_2[rballoc];
+ dlsch0_harq->rb_alloc[3] = localRIV2alloc_LUT100_3[rballoc];
+ }
+ else {
+ LOG_E(PHY,"Distributed RB allocation not done yet\n");
+ mac_xface->macphy_exit("exiting");
+ }
+
dlsch0_harq->nb_rb = RIV2nb_rb_LUT100[rballoc];//NPRB;
@@ -2677,17 +2703,17 @@ int generate_eNB_dlsch_params_from_dci(int frame,
#ifdef DEBUG_DCI
if (dlsch0) {
- msg("dlsch0 eNB: dlsch0 %p\n",dlsch0);
- msg("dlsch0 eNB: rnti %x\n",dlsch0->rnti);
- msg("dlsch0 eNB: NBRB %d\n",dlsch0_harq->nb_rb);
- msg("dlsch0 eNB: rballoc %x\n",dlsch0_harq->rb_alloc[0]);
- msg("dlsch0 eNB: harq_pid %d\n",harq_pid);
- msg("dlsch0 eNB: round %d\n",dlsch0_harq->round);
- msg("dlsch0 eNB: rvidx %d\n",dlsch0_harq->rvidx);
- msg("dlsch0 eNB: TBS %d (NPRB %d)\n",dlsch0_harq->TBS,NPRB);
- msg("dlsch0 eNB: mcs %d\n",dlsch0_harq->mcs);
- msg("dlsch0 eNB: tpmi %d\n",tpmi);
- msg("dlsch0 eNB: mimo_mode %d\n",dlsch0_harq->mimo_mode);
+ printf("dlsch0 eNB: dlsch0 %p\n",dlsch0);
+ printf("dlsch0 eNB: rnti %x\n",dlsch0->rnti);
+ printf("dlsch0 eNB: NBRB %d\n",dlsch0_harq->nb_rb);
+ printf("dlsch0 eNB: rballoc %x\n",dlsch0_harq->rb_alloc[0]);
+ printf("dlsch0 eNB: harq_pid %d\n",harq_pid);
+ printf("dlsch0 eNB: round %d\n",dlsch0_harq->round);
+ printf("dlsch0 eNB: rvidx %d\n",dlsch0_harq->rvidx);
+ printf("dlsch0 eNB: TBS %d (NPRB %d)\n",dlsch0_harq->TBS,NPRB);
+ printf("dlsch0 eNB: mcs %d\n",dlsch0_harq->mcs);
+ printf("dlsch0 eNB: tpmi %d\n",tpmi);
+ printf("dlsch0 eNB: mimo_mode %d\n",dlsch0_harq->mimo_mode);
}
#endif
@@ -5637,15 +5663,15 @@ int generate_ue_dlsch_params_from_dci(int frame,
#ifdef DEBUG_DCI
if (dlsch[0]) {
- msg("PDSCH dlsch0 UE: rnti %x\n",dlsch[0]->rnti);
- msg("PDSCH dlsch0 UE: NBRB %d\n",dlsch0_harq->nb_rb);
- msg("PDSCH dlsch0 UE: rballoc %x\n",dlsch0_harq->rb_alloc[0]);
- msg("PDSCH dlsch0 UE: harq_pid %d\n",harq_pid);
- msg("PDSCH dlsch0 UE: DCINdi %d\n",dlsch0_harq->DCINdi);
- msg("PDSCH dlsch0 UE: rvidx %d\n",dlsch0_harq->rvidx);
- msg("PDSCH dlsch0 UE: TBS %d\n",dlsch0_harq->TBS);
- msg("PDSCH dlsch0 UE: mcs %d\n",dlsch0_harq->mcs);
- msg("PDSCH dlsch0 UE: pwr_off %d\n",dlsch0_harq->dl_power_off);
+ printf("PDSCH dlsch0 UE: rnti %x\n",dlsch[0]->rnti);
+ printf("PDSCH dlsch0 UE: NBRB %d\n",dlsch0_harq->nb_rb);
+ printf("PDSCH dlsch0 UE: rballoc %x\n",dlsch0_harq->rb_alloc_even[0]);
+ printf("PDSCH dlsch0 UE: harq_pid %d\n",harq_pid);
+ printf("PDSCH dlsch0 UE: DCINdi %d\n",dlsch0_harq->DCINdi);
+ printf("PDSCH dlsch0 UE: rvidx %d\n",dlsch0_harq->rvidx);
+ printf("PDSCH dlsch0 UE: TBS %d\n",dlsch0_harq->TBS);
+ printf("PDSCH dlsch0 UE: mcs %d\n",dlsch0_harq->mcs);
+ printf("PDSCH dlsch0 UE: pwr_off %d\n",dlsch0_harq->dl_power_off);
}
#endif
diff --git a/openair1/PHY/LTE_TRANSPORT/defs.h b/openair1/PHY/LTE_TRANSPORT/defs.h
index 2fbb309339..a05b16d12a 100644
--- a/openair1/PHY/LTE_TRANSPORT/defs.h
+++ b/openair1/PHY/LTE_TRANSPORT/defs.h
@@ -279,6 +279,8 @@ typedef struct {
uint8_t Mdlharq;
/// MIMO transmission mode indicator for this sub-frame (for definition see 36-212 V8.6 2009-03, p.17)
uint8_t Kmimo;
+ /// Nsoft parameter related to UE Category
+ uint32_t Nsoft;
/// amplitude of PDSCH (compared to RS) in symbols without pilots
int16_t sqrt_rho_a;
/// amplitude of PDSCH (compared to RS) in symbols containing pilots
@@ -589,13 +591,13 @@ typedef struct {
/// UL RSSI per receive antenna
int32_t UL_rssi[NB_ANTENNAS_RX];
/// PUCCH1a/b power (digital linear)
- int32_t Po_PUCCH;
+ uint32_t Po_PUCCH;
/// PUCCH1a/b power (dBm)
int32_t Po_PUCCH_dBm;
/// PUCCH1 power (digital linear), conditioned on below threshold
- int32_t Po_PUCCH1_below;
+ uint32_t Po_PUCCH1_below;
/// PUCCH1 power (digital linear), conditioned on above threshold
- int32_t Po_PUCCH1_above;
+ uint32_t Po_PUCCH1_above;
/// Indicator that Po_PUCCH has been updated by PHY
int32_t Po_PUCCH_update;
/// DL Wideband CQI index (2 TBs)
@@ -706,6 +708,8 @@ typedef struct {
uint8_t Mdlharq;
/// MIMO transmission mode indicator for this sub-frame (for definition see 36-212 V8.6 2009-03, p.17)
uint8_t Kmimo;
+ /// Nsoft parameter related to UE Category
+ uint32_t Nsoft;
/// Maximum number of Turbo iterations
uint8_t max_turbo_iterations;
/// accumulated tx power adjustment for PUCCH
@@ -756,7 +760,7 @@ typedef struct {
/// Aggregation level
uint8_t L;
/// Position of first CCE of the dci
- int nCCE;
+ int firstCCE;
/// flag to indicate that this is a RA response
boolean_t ra_flag;
/// rnti
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
index f051dc3ecf..95af038ab0 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
@@ -117,7 +117,7 @@ void free_eNB_dlsch(LTE_eNB_DLSCH_t *dlsch)
}
-LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,unsigned char N_RB_DL, uint8_t abstraction_flag)
+LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,uint32_t Nsoft,unsigned char N_RB_DL, uint8_t abstraction_flag)
{
LTE_eNB_DLSCH_t *dlsch;
@@ -148,6 +148,7 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,unsigne
bzero(dlsch,sizeof(LTE_eNB_DLSCH_t));
dlsch->Kmimo = Kmimo;
dlsch->Mdlharq = Mdlharq;
+ dlsch->Nsoft = Nsoft;
for (i=0; i<10; i++)
dlsch->harq_ids[i] = Mdlharq;
@@ -400,7 +401,7 @@ int dlsch_encoding(unsigned char *a,
dlsch->harq_processes[harq_pid]->w[r],
dlsch->harq_processes[harq_pid]->e+r_offset,
dlsch->harq_processes[harq_pid]->C, // C
- NSOFT, // Nsoft,
+ dlsch->Nsoft, // Nsoft,
dlsch->Mdlharq,
dlsch->Kmimo,
dlsch->harq_processes[harq_pid]->rvidx,
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
index 6ab784aa18..efcd868338 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
@@ -81,7 +81,7 @@ void free_ue_dlsch(LTE_UE_DLSCH_t *dlsch)
}
}
-LTE_UE_DLSCH_t *new_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint8_t max_turbo_iterations,uint8_t N_RB_DL, uint8_t abstraction_flag)
+LTE_UE_DLSCH_t *new_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint8_t max_turbo_iterations,uint8_t N_RB_DL, uint8_t abstraction_flag)
{
LTE_UE_DLSCH_t *dlsch;
@@ -113,6 +113,7 @@ LTE_UE_DLSCH_t *new_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint8_t max_turbo_ite
memset(dlsch,0,sizeof(LTE_UE_DLSCH_t));
dlsch->Kmimo = Kmimo;
dlsch->Mdlharq = Mdlharq;
+ dlsch->Nsoft = Nsoft;
dlsch->max_turbo_iterations = max_turbo_iterations;
for (i=0; iC,
- NSOFT,
+ dlsch->Nsoft,
dlsch->Mdlharq,
dlsch->Kmimo,
harq_process->rvidx,
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
index 2429107e83..a4211ad3d6 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
@@ -662,14 +662,16 @@ int dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) {
if (frame_parms->mode1_flag==0)
- len = (nb_rb*8)- (2*pbch_pss_sss_adjust/3);
+ len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3);
else
len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6);
} else {
len = (nb_rb*12) - pbch_pss_sss_adjust;
}
+
// printf("dlsch_qpsk_llr: symbol %d,nb_rb %d, len %d,pbch_pss_sss_adjust %d\n",symbol,nb_rb,len,pbch_pss_sss_adjust);
+
for (i=0; iNcp=NORMAL;
frame_parms->frame_type=FDD;
init_frame_parms(frame_parms,1);
-
- // write_output("rxdata0.m","rxd0",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
-
- /*#ifdef OAI_USRP
- for (aarx = 0; aarxnb_antennas_rx;aarx++) {
- rxdata128 = (__m128i*)phy_vars_ue->lte_ue_common_vars.rxdata[aarx];
- for (i=0; i<(frame_parms->samples_per_tti*10)>>2; i++) {
- rxdata128[i] = _mm_srai_epi16(rxdata128[i],4);
- }
- }
- #endif*/
+ /*
+ write_output("rxdata0.m","rxd0",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
+ exit(-1);
+ */
sync_pos = lte_sync_time(phy_vars_ue->lte_ue_common_vars.rxdata,
frame_parms,
(int *)&phy_vars_ue->lte_ue_common_vars.eNb_id);
@@ -336,8 +329,12 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
#else
#ifndef OAI_USRP
+#ifndef OAI_BLADERF
+#ifndef OAI_LMSSDR
phy_adjust_gain(phy_vars_ue,0);
#endif
+#endif
+#endif
#endif
// SSS detection
@@ -567,7 +564,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
phy_vars_ue->lte_frame_parms.phich_config_common.phich_duration,
phich_string[phy_vars_ue->lte_frame_parms.phich_config_common.phich_resource],
phy_vars_ue->lte_frame_parms.nb_antennas_tx_eNB);
-#if defined(OAI_USRP) || defined(EXMIMO)
+#if defined(OAI_USRP) || defined(EXMIMO) || defined(OAI_LMSSDR)
LOG_I(PHY,"[UE %d] Frame %d Measured Carrier Frequency %.0f Hz (offset %d Hz)\n",
phy_vars_ue->Mod_id,
phy_vars_ue->frame_rx,
diff --git a/openair1/PHY/LTE_TRANSPORT/print_stats.c b/openair1/PHY/LTE_TRANSPORT/print_stats.c
index 53ca875953..8f6483a3e3 100644
--- a/openair1/PHY/LTE_TRANSPORT/print_stats.c
+++ b/openair1/PHY/LTE_TRANSPORT/print_stats.c
@@ -50,7 +50,7 @@
#endif
extern int mac_get_rrc_status(uint8_t Mod_id,uint8_t eNB_flag,uint8_t index);
-#if defined(OAI_USRP) || defined(EXMIMO)
+#if defined(OAI_USRP) || defined(EXMIMO) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
#include "common_lib.h"
extern openair0_config_t openair0_cfg[];
#endif
@@ -67,11 +67,12 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t
if ((mode == normal_txrx) || (mode == no_L2_connect)) {
len += sprintf(&buffer[len], "[UE_PROC] UE %d, RNTI %x\n",phy_vars_ue->Mod_id, phy_vars_ue->lte_ue_pdcch_vars[0]->crnti);
- len += sprintf(&buffer[len],"[UE PROC] RSRP[0] %.2f dBm/RE, RSSI %.2f dBm, RSRQ[0] %.2f dB, N0 %d dBm/RE\n",
+ len += sprintf(&buffer[len],"[UE PROC] RSRP[0] %.2f dBm/RE, RSSI %.2f dBm, RSRQ[0] %.2f dB, N0 %d dBm/RE (NF %.1f dB)\n",
10*log10(phy_vars_ue->PHY_measurements.rsrp[0])-phy_vars_ue->rx_total_gain_dB,
10*log10(phy_vars_ue->PHY_measurements.rssi)-phy_vars_ue->rx_total_gain_dB,
10*log10(phy_vars_ue->PHY_measurements.rsrq[0]),
- phy_vars_ue->PHY_measurements.n0_power_tot_dBm);
+ phy_vars_ue->PHY_measurements.n0_power_tot_dBm,
+ (double)phy_vars_ue->PHY_measurements.n0_power_tot_dBm+132.24);
/*
len += sprintf(&buffer[len],
@@ -96,10 +97,10 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t
#ifdef EXMIMO
len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB (LNA %d, vga %d dB)\n",phy_vars_ue->rx_total_gain_dB, openair0_cfg[0].rxg_mode[0],(int)openair0_cfg[0].rx_gain[0]);
#endif
-#ifdef OAI_USRP
+#if defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB\n",phy_vars_ue->rx_total_gain_dB);
#endif
-#if defined(EXMIMO) || defined(OAI_USRP)
+#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
len += sprintf(&buffer[len], "[UE_PROC] Frequency offset %d Hz (%d), estimated carrier frequency %f Hz\n",phy_vars_ue->lte_ue_common_vars.freq_offset,openair_daq_vars.freq_offset,openair0_cfg[0].rx_freq[0]-phy_vars_ue->lte_ue_common_vars.freq_offset);
#endif
len += sprintf(&buffer[len], "[UE PROC] UE mode = %s (%d)\n",mode_string[phy_vars_ue->UE_mode[0]],phy_vars_ue->UE_mode[0]);
@@ -573,12 +574,18 @@ int dump_eNB_stats(PHY_VARS_eNB *phy_vars_eNB, char* buffer, int length)
phy_vars_eNB->PHY_measurements_eNB[eNB].n0_power_dB[0],
phy_vars_eNB->PHY_measurements_eNB[eNB].n0_power_dB[1]);
- len += sprintf(&buffer[len],"[eNB PROC] Subband I0: ");
+ len += sprintf(&buffer[len],"[eNB PROC] PRB I0 (%X.%X.%X.%X): ",
+ phy_vars_eNB->rb_mask_ul[0],
+ phy_vars_eNB->rb_mask_ul[1],phy_vars_eNB->rb_mask_ul[2],phy_vars_eNB->rb_mask_ul[3]);
- for (i=0; i<25; i++)
- len += sprintf(&buffer[len],"%2d ",
- phy_vars_eNB->PHY_measurements_eNB[eNB].n0_subband_power_tot_dB[i]);
+ for (i=0; ilte_frame_parms.N_RB_UL; i++) {
+ len += sprintf(&buffer[len],"%4d ",
+ phy_vars_eNB->PHY_measurements_eNB[eNB].n0_subband_power_tot_dBm[i]);
+ if ((i>0) && ((i%25) == 0))
+ len += sprintf(&buffer[len],"\n ",
+ phy_vars_eNB->PHY_measurements_eNB[eNB].n0_subband_power_tot_dBm[i]);
+ }
len += sprintf(&buffer[len],"\n");
len += sprintf(&buffer[len],"\n[eNB PROC] PERFORMANCE PARAMETERS\n");
/*
@@ -634,11 +641,11 @@ int dump_eNB_stats(PHY_VARS_eNB *phy_vars_eNB, char* buffer, int length)
dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[UE_id]->ulsch_power[1]),
phy_vars_eNB->eNB_UE_stats[UE_id].UL_rssi[0],
phy_vars_eNB->eNB_UE_stats[UE_id].UL_rssi[1],
- dB_fixed(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH)-phy_vars_eNB->rx_total_gain_eNB_dB,
+ dB_fixed(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH/phy_vars_eNB->lte_frame_parms.N_RB_UL)-phy_vars_eNB->rx_total_gain_eNB_dB,
phy_vars_eNB->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH,
- dB_fixed(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH1_below)-phy_vars_eNB->rx_total_gain_eNB_dB,
- dB_fixed(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH1_above)-phy_vars_eNB->rx_total_gain_eNB_dB,
- PUCCH1_THRES+phy_vars_eNB->PHY_measurements_eNB[0].n0_power_tot_dBm, //-dB_fixed(phy_vars_eNB->lte_frame_parms.N_RB_UL),
+ dB_fixed(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH1_below/phy_vars_eNB->lte_frame_parms.N_RB_UL)-phy_vars_eNB->rx_total_gain_eNB_dB,
+ dB_fixed(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH1_above/phy_vars_eNB->lte_frame_parms.N_RB_UL)-phy_vars_eNB->rx_total_gain_eNB_dB,
+ PUCCH1_THRES+phy_vars_eNB->PHY_measurements_eNB[0].n0_power_tot_dBm-dB_fixed(phy_vars_eNB->lte_frame_parms.N_RB_UL),
phy_vars_eNB->eNB_UE_stats[UE_id].sector);
for(i=0; i<8; i++)
diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h
index 92831a28ca..91f3503904 100644
--- a/openair1/PHY/LTE_TRANSPORT/proto.h
+++ b/openair1/PHY/LTE_TRANSPORT/proto.h
@@ -56,15 +56,16 @@ void free_eNB_dlsch(LTE_eNB_DLSCH_t *dlsch);
void clean_eNb_dlsch(LTE_eNB_DLSCH_t *dlsch, uint8_t abstraction_flag);
-/** \fn new_eNB_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint8_t abstraction_flag)
+/** \fn new_eNB_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint8_t abstraction_flag)
\brief This function allocates structures for a particular DLSCH at eNB
@returns Pointer to DLSCH to be removed
@param Kmimo Kmimo factor from 36-212/36-213
@param Mdlharq Maximum number of HARQ rounds (36-212/36-213)
+ @param Nsoft Soft-LLR buffer size from UE-Category
@params N_RB_DL total number of resource blocks (determine the operating BW)
@param abstraction_flag Flag to indicate abstracted interface
*/
-LTE_eNB_DLSCH_t *new_eNB_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint8_t N_RB_DL, uint8_t abstraction_flag);
+LTE_eNB_DLSCH_t *new_eNB_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint8_t N_RB_DL, uint8_t abstraction_flag);
/** \fn free_ue_dlsch(LTE_UE_DLSCH_t *dlsch)
\brief This function frees memory allocated for a particular DLSCH at UE
@@ -72,11 +73,16 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint8_t N_RB_DL, ui
*/
void free_ue_dlsch(LTE_UE_DLSCH_t *dlsch);
-LTE_eNB_ULSCH_t *new_eNB_ulsch(uint8_t Mdlharq,uint8_t max_turbo_iterations,uint8_t N_RB_UL, uint8_t abstraction_flag);
-
-LTE_UE_DLSCH_t *new_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint8_t max_turbo_iterations,uint8_t N_RB_DL, uint8_t abstraction_flag);
-
-LTE_UE_ULSCH_t *new_ue_ulsch(unsigned char Mdlharq,unsigned char N_RB_UL, uint8_t abstraction_flag);
+/** \fn new_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint8_t abstraction_flag)
+ \brief This function allocates structures for a particular DLSCH at eNB
+ @returns Pointer to DLSCH to be removed
+ @param Kmimo Kmimo factor from 36-212/36-213
+ @param Mdlharq Maximum number of HARQ rounds (36-212/36-213)
+ @param Nsoft Soft-LLR buffer size from UE-Category
+ @params N_RB_DL total number of resource blocks (determine the operating BW)
+ @param abstraction_flag Flag to indicate abstracted interface
+*/
+LTE_UE_DLSCH_t *new_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint8_t max_turbo_iterations,uint8_t N_RB_DL, uint8_t abstraction_flag);
void clean_eNb_ulsch(LTE_eNB_ULSCH_t *ulsch, uint8_t abstraction_flag);
@@ -1261,11 +1267,20 @@ uint32_t get_TBS_DL(uint8_t mcs, uint16_t nb_rb);
uint32_t get_TBS_UL(uint8_t mcs, uint16_t nb_rb);
/* \brief Return bit-map of resource allocation for a given DCI rballoc (RIV format) and vrb type
+ @param N_RB_DL number of PRB on DL
+ @param indicator for even/odd slot
+ @param vrb vrb index
+ @param Ngap Gap indicator
+*/
+uint32_t get_prb(int N_RB_DL,int odd_slot,int vrb,int Ngap);
+
+/* \brief Return prb for a given vrb index
@param vrb_type VRB type (0=localized,1=distributed)
@param rb_alloc_dci rballoc field from DCI
*/
uint32_t get_rballoc(vrb_t vrb_type,uint16_t rb_alloc_dci);
+
/* \brief Return bit-map of resource allocation for a given DCI rballoc (RIV format) and vrb type
@returns Transmission mode (1-7)
*/
@@ -1628,6 +1643,12 @@ uint32_t pmi_extend(LTE_DL_FRAME_PARMS *frame_parms,uint8_t wideband_pmi, uint8_
*/
uint8_t get_pmi(uint8_t N_RB_DL,MIMO_mode_t mode, uint32_t pmi_alloc,uint16_t rb);
+int get_nCCE_offset_l1(int *CCE_table,
+ const unsigned char L,
+ const int nCCE,
+ const int common_dci,
+ const unsigned short rnti,
+ const unsigned char subframe);
uint16_t get_nCCE(uint8_t num_pdcch_symbols,LTE_DL_FRAME_PARMS *frame_parms,uint8_t mi);
@@ -1635,7 +1656,7 @@ uint16_t get_nquad(uint8_t num_pdcch_symbols,LTE_DL_FRAME_PARMS *frame_parms,uin
uint8_t get_mi(LTE_DL_FRAME_PARMS *frame,uint8_t subframe);
-uint16_t get_nCCE_max(uint8_t Mod_id,uint8_t CC_id);
+uint16_t get_nCCE_mac(uint8_t Mod_id,uint8_t CC_id,int num_pdcch_symbols,int subframe);
uint8_t get_num_pdcch_symbols(uint8_t num_dci,DCI_ALLOC_t *dci_alloc,LTE_DL_FRAME_PARMS *frame_parms,uint8_t subframe);
@@ -1688,22 +1709,22 @@ void generate_pucch_emul(PHY_VARS_UE *phy_vars_ue,
uint8_t subframe);
-int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
- PUCCH_FMT_t fmt,
- uint8_t UE_id,
- uint16_t n1_pucch,
- uint16_t n2_pucch,
- uint8_t shortened_format,
- uint8_t *payload,
- uint8_t subframe,
- uint8_t pucch1_thres);
+uint32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
+ PUCCH_FMT_t fmt,
+ uint8_t UE_id,
+ uint16_t n1_pucch,
+ uint16_t n2_pucch,
+ uint8_t shortened_format,
+ uint8_t *payload,
+ uint8_t subframe,
+ uint8_t pucch1_thres);
int32_t rx_pucch_emul(PHY_VARS_eNB *phy_vars_eNB,
- uint8_t UE_index,
- PUCCH_FMT_t fmt,
- uint8_t n1_pucch_sel,
- uint8_t *payload,
- uint8_t subframe);
+ uint8_t UE_index,
+ PUCCH_FMT_t fmt,
+ uint8_t n1_pucch_sel,
+ uint8_t *payload,
+ uint8_t subframe);
/*!
diff --git a/openair1/PHY/LTE_TRANSPORT/pucch.c b/openair1/PHY/LTE_TRANSPORT/pucch.c
index 2ed5694dd1..837c99b073 100644
--- a/openair1/PHY/LTE_TRANSPORT/pucch.c
+++ b/openair1/PHY/LTE_TRANSPORT/pucch.c
@@ -430,15 +430,15 @@ void generate_pucch_emul(PHY_VARS_UE *phy_vars_ue,
}
-int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
- PUCCH_FMT_t fmt,
- uint8_t UE_id,
- uint16_t n1_pucch,
- uint16_t n2_pucch,
- uint8_t shortened_format,
- uint8_t *payload,
- uint8_t subframe,
- uint8_t pucch1_thres)
+uint32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
+ PUCCH_FMT_t fmt,
+ uint8_t UE_id,
+ uint16_t n1_pucch,
+ uint16_t n2_pucch,
+ uint8_t shortened_format,
+ uint8_t *payload,
+ uint8_t subframe,
+ uint8_t pucch1_thres)
{
@@ -446,11 +446,11 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
LTE_eNB_COMMON *eNB_common_vars = &phy_vars_eNB->lte_eNB_common_vars;
LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms;
// PUCCH_CONFIG_DEDICATED *pucch_config_dedicated = &phy_vars_eNB->pucch_config_dedicated[UE_id];
- int8_t sigma2_dB = phy_vars_eNB->PHY_measurements_eNB[0].n0_power_dB[0];
- int32_t *Po_PUCCH = &(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH);
+ int8_t sigma2_dB = phy_vars_eNB->PHY_measurements_eNB[0].n0_subband_power_tot_dB[6];
+ uint32_t *Po_PUCCH = &(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH);
int32_t *Po_PUCCH_dBm = &(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH_dBm);
- int32_t *Po_PUCCH1_below = &(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH1_below);
- int32_t *Po_PUCCH1_above = &(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH1_above);
+ uint32_t *Po_PUCCH1_below = &(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH1_below);
+ uint32_t *Po_PUCCH1_above = &(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH1_above);
int32_t *Po_PUCCH_update = &(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH_update);
uint32_t u,v,n,aa;
uint32_t z[12*14];
@@ -468,7 +468,7 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
uint32_t symbol_offset;
int16_t stat_ref_re,stat_ref_im,*cfo,chest_re,chest_im;
int32_t stat_re=0,stat_im=0;
- int32_t stat,stat_max=0;
+ uint32_t stat,stat_max=0;
uint8_t deltaPUCCH_Shift = frame_parms->pucch_config_common.deltaPUCCH_Shift;
uint8_t NRB2 = frame_parms->pucch_config_common.nRB_CQI;
@@ -478,6 +478,7 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
uint32_t u1 = (frame_parms->Nid_cell + frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.grouphop[1+(subframe<<1)]) % 30;
uint32_t v0=frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[subframe<<1];
uint32_t v1=frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[1+(subframe<<1)];
+ int chL;
if (first_call == 1) {
for (i=0;i<10;i++) {
@@ -508,6 +509,7 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
}
*/
+
if ((deltaPUCCH_Shift==0) || (deltaPUCCH_Shift>3)) {
LOG_E(PHY,"[eNB] rx_pucch: Illegal deltaPUCCH_shift %d (should be 1,2,3)\n",deltaPUCCH_Shift);
return(-1);
@@ -737,30 +739,35 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
cfo = (frame_parms->Ncp==0) ? &cfo_pucch_np[14*phase] : &cfo_pucch_ep[12*phase];
for (l=0; l<(nsymb>>1); l++) {
- stat_re += ((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15) - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15);
- stat_im += ((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15);
+ stat_re += (((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15) - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15))/nsymb;
+ stat_im += (((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15))/nsymb;
off+=2;
+
+
#ifdef DEBUG_PUCCH_RX
- LOG_D(PHY,"[eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)\n",subframe,l,re,
+ LOG_D(PHY,"[eNB] PUCCH subframe %d (%d,%d,%d) => (%d,%d) x (%d,%d) : (%d,%d) , stat %d\n",subframe,phase,l,re,
rxcomp[aa][off],rxcomp[aa][1+off],
cfo[l<<1],cfo[1+(l<<1)],
- stat_re,stat_im);
+ stat_re,stat_im,stat);
#endif
}
for (l2=0,l=(nsymb>>1); l<(nsymb-1); l++,l2++) {
- stat_re += ((rxcomp[aa][off]*(int32_t)cfo[l2<<1])>>15) - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l2<<1)])>>15);
- stat_im += ((rxcomp[aa][off]*(int32_t)cfo[1+(l2<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l2<<1)])>>15);
+ stat_re += (((rxcomp[aa][off]*(int32_t)cfo[l2<<1])>>15) - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l2<<1)])>>15))/nsymb;
+ stat_im += (((rxcomp[aa][off]*(int32_t)cfo[1+(l2<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l2<<1)])>>15))/nsymb;
off+=2;
+
#ifdef DEBUG_PUCCH_RX
- LOG_D(PHY,"[eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)\n",subframe,l2,re,
+ LOG_D(PHY,"[eNB] PUCCH subframe %d (%d,%d,%d) => (%d,%d) x (%d,%d) : (%d,%d), stat %d\n",subframe,phase,l2,re,
rxcomp[aa][off],rxcomp[aa][1+off],
cfo[l2<<1],cfo[1+(l2<<1)],
- stat_re,stat_im);
+ stat_re,stat_im,stat);
#endif
+
}
- stat += (stat_re*stat_re) + (stat_im*stat_im);
+ stat += ((stat_re*stat_re) + (stat_im*stat_im));
+
} //re
} // aa
@@ -772,16 +779,18 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
} //phase
- stat_max /= (nsymb*12); // normalize to energy per symbol and RE
+ stat_max *= nsymb; // normalize to energy per symbol
+ stat_max /= (frame_parms->N_RB_UL*12); //
#ifdef DEBUG_PUCCH_RX
LOG_D(PHY,"[eNB] PUCCH: stat %d, stat_max %d, phase_max %d\n", stat,stat_max,phase_max);
#endif
#ifdef DEBUG_PUCCH_RX
- LOG_D(PHY,"[eNB] PUCCH fmt0: stat_max : %d, sigma2_dB %d (%d, %d), phase_max : %d\n",dB_fixed(stat_max),sigma2_dB,phy_vars_eNB->PHY_measurements_eNB[0].n0_power_tot_dBm,pucch1_thres,phase_max);
+ LOG_I(PHY,"[eNB] PUCCH fmt1: stat_max : %d, sigma2_dB %d (%d, %d), phase_max : %d\n",dB_fixed(stat_max),sigma2_dB,phy_vars_eNB->PHY_measurements_eNB[0].n0_subband_power_tot_dBm[6],pucch1_thres,phase_max);
#endif
phy_vars_eNB->pucch1_stats[UE_id][(subframe<<10)+phy_vars_eNB->pucch1_stats_cnt[UE_id][subframe]] = stat_max;
+ phy_vars_eNB->pucch1_stats_thres[UE_id][(subframe<<10)+phy_vars_eNB->pucch1_stats_cnt[UE_id][subframe]] = sigma2_dB+pucch1_thres;
phy_vars_eNB->pucch1_stats_cnt[UE_id][subframe] = (phy_vars_eNB->pucch1_stats_cnt[UE_id][subframe]+1)&1023;
/*
@@ -798,13 +807,13 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
if (sigma2_dB<(dB_fixed(stat_max)-pucch1_thres)) {
*payload = 1;
*Po_PUCCH1_above = ((*Po_PUCCH1_above<<9) + (stat_max<<9)+1024)>>10;
-
+ //LOG_I(PHY,"[eNB] PUCCH fmt1: stat_max : %d, sigma2_dB %d (%d, %d), phase_max : %d\n",dB_fixed(stat_max),sigma2_dB,phy_vars_eNB->PHY_measurements_eNB[0].n0_power_tot_dBm,pucch1_thres,phase_max);
}
else {
*payload = 0;
*Po_PUCCH1_below = ((*Po_PUCCH1_below<<9) + (stat_max<<9)+1024)>>10;
}
- LOG_D(PHY,"[eNB] PUCCH fmt0: stat_max : %d, sigma2_dB %d (I0 %d dBm, thres %d), Po_PUCCH1_below/above : %d / %d\n",dB_fixed(stat_max),sigma2_dB,phy_vars_eNB->PHY_measurements_eNB[0].n0_power_tot_dBm,pucch1_thres,dB_fixed(*Po_PUCCH1_below),dB_fixed(*Po_PUCCH1_above));
+ LOG_D(PHY,"[eNB] PUCCH fmt1: stat_max : %d, sigma2_dB %d (I0 %d dBm, thres %d), Po_PUCCH1_below/above : %d / %d\n",dB_fixed(stat_max),sigma2_dB,phy_vars_eNB->PHY_measurements_eNB[0].n0_subband_power_tot_dBm[6],pucch1_thres,dB_fixed(*Po_PUCCH1_below),dB_fixed(*Po_PUCCH1_above));
*Po_PUCCH_update = 1;
} else if ((fmt == pucch_format1a)||(fmt == pucch_format1b)) {
@@ -813,7 +822,7 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
LOG_I(PHY,"Doing PUCCH detection for format 1a/1b\n");
#endif
- for (phase=0; phase<7; phase++) {
+ for (phase=3;phase<4;phase++){ //phase=0; phase<7; phase++) {
stat=0;
for (aa=0; aanb_antennas_rx; aa++) {
@@ -844,6 +853,9 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
#endif
}
+
+
+
for (l2=0,l=(nsymb>>1); l<(nsymb-1); l++,l2++) {
if ((l2<2) || ((l2>(nsymb>>1) - 3)) ) { // data symbols
stat_re += ((rxcomp[aa][off]*(int32_t)cfo[l2<<1])>>15) - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l2<<1)])>>15);
@@ -863,34 +875,36 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
}
- stat += (((stat_re*stat_re)) + ((stat_im*stat_im)) +
- ((stat_ref_re*stat_ref_re)) + ((stat_ref_im*stat_ref_im)));
#ifdef DEBUG_PUCCH_RX
LOG_D(PHY,"aa%d re %d : phase %d : stat %d\n",aa,re,phase,stat);
#endif
+
+ stat += ((((stat_re*stat_re)) + ((stat_im*stat_im)) +
+ ((stat_ref_re*stat_ref_re)) + ((stat_ref_im*stat_ref_im)))/nsymb);
+
+
} //re
} // aa
#ifdef DEBUG_PUCCH_RX
- LOG_I(PHY,"phase %d : stat %d\n",phase,stat);
+ LOG_I(PHY,"Format 1A: phase %d : stat %d\n",phase,stat);
#endif
-
if (stat>stat_max) {
stat_max = stat;
phase_max = phase;
}
} //phase
- stat_max/=(nsymb*12); //normalize to energy per symbol and RE
-#ifdef DEBUG_PUCCH_RX
- LOG_I(PHY,"[eNB] PUCCH fmt1: stat_max : %d, phase_max : %d\n",stat_max,phase_max);
-#endif
+ stat_max/=(12); //normalize to energy per symbol and RE
+ //#ifdef DEBUG_PUCCH_RX
+ LOG_D(PHY,"[eNB] PUCCH fmt1a/b: stat_max : %d, phase_max : %d\n",stat_max,phase_max);
+ //#endif
stat_re=0;
stat_im=0;
LOG_D(PHY,"PUCCH1A : Po_PUCCH before %d dB (%d)\n",dB_fixed(*Po_PUCCH),*Po_PUCCH);
- *Po_PUCCH = ((*Po_PUCCH<<9) + (stat_max<<9)+1024)>>10;
- *Po_PUCCH_dBm = dB_fixed(*Po_PUCCH) - phy_vars_eNB->rx_total_gain_eNB_dB;
+ *Po_PUCCH = ((*Po_PUCCH>>1) + ((stat_max)>>1));
+ *Po_PUCCH_dBm = dB_fixed(*Po_PUCCH/frame_parms->N_RB_UL) - phy_vars_eNB->rx_total_gain_eNB_dB;
*Po_PUCCH_update = 1;
LOG_D(PHY,"PUCCH1A : stat_max %d (%d,%d,%d) => Po_PUCCH %d\n",
@@ -906,6 +920,8 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
*Po_PUCCH = ((*Po_PUCCH*1023) + stat_max)>>10;
+ chL = (nsymb>>1)-4;
+
for (aa=0; aanb_antennas_rx; aa++) {
for (re=0; re<12; re++) {
chest_re=0;
@@ -915,8 +931,8 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
// channel estimate for first slot
for (l=2; l<(nsymb>>1)-2; l++) {
off=(re<<1) + (24*l);
- chest_re += ((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15) - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15);
- chest_im += ((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15);
+ chest_re += (((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15) - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15))/chL;
+ chest_im += (((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15))/chL;
}
#ifdef DEBUG_PUCCH_RX
@@ -928,8 +944,8 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
off=(re<<1) + (24*l);
tmp_re = ((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15) - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15);
tmp_im = ((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15);
- stat_re += ((tmp_re*chest_re)>>15) + ((tmp_im*chest_im)>>15);
- stat_im += ((tmp_re*chest_im)>>15) - ((tmp_im*chest_re)>>15);
+ stat_re += (((tmp_re*chest_re)>>15) + ((tmp_im*chest_im)>>15))/4;
+ stat_im += (((tmp_re*chest_im)>>15) - ((tmp_im*chest_re)>>15))/4;
off+=2;
#ifdef DEBUG_PUCCH_RX
LOG_D(PHY,"[eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)\n",subframe,l,re,
@@ -943,8 +959,8 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
off=(re<<1) + (24*l);
tmp_re = ((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15) - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15);
tmp_im = ((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15);
- stat_re += ((tmp_re*chest_re)>>15) + ((tmp_im*chest_im)>>15);
- stat_im += ((tmp_re*chest_im)>>15) - ((tmp_im*chest_re)>>15);
+ stat_re += (((tmp_re*chest_re)>>15) + ((tmp_im*chest_im)>>15)/4);
+ stat_im += (((tmp_re*chest_im)>>15) - ((tmp_im*chest_re)>>15)/4);
off+=2;
#ifdef DEBUG_PUCCH_RX
LOG_D(PHY,"[eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)\n",subframe,l,re,
@@ -960,8 +976,8 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
// channel estimate for second slot
for (l=2; l<(nsymb>>1)-2; l++) {
off=(re<<1) + (24*l) + (nsymb>>1)*24;
- chest_re += ((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15) - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15);
- chest_im += ((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15);
+ chest_re += (((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15) - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15))/chL;
+ chest_im += (((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15))/chL;
}
#ifdef DEBUG_PUCCH_RX
@@ -973,8 +989,8 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
off=(re<<1) + (24*l) + (nsymb>>1)*24;
tmp_re = ((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15) - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15);
tmp_im = ((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15);
- stat_re += ((tmp_re*chest_re)>>15) + ((tmp_im*chest_im)>>15);
- stat_im += ((tmp_re*chest_im)>>15) - ((tmp_im*chest_re)>>15);
+ stat_re += (((tmp_re*chest_re)>>15) + ((tmp_im*chest_im)>>15))/4;
+ stat_im += (((tmp_re*chest_im)>>15) - ((tmp_im*chest_re)>>15))/4;
off+=2;
#ifdef DEBUG_PUCCH_RX
LOG_D(PHY,"[PHY][eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)\n",subframe,l,re,
@@ -988,8 +1004,8 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
off=(re<<1) + (24*l) + (nsymb>>1)*24;
tmp_re = ((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15) - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15);
tmp_im = ((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15);
- stat_re += ((tmp_re*chest_re)>>9) + ((tmp_im*chest_im)>>9);
- stat_im += ((tmp_re*chest_im)>>9) - ((tmp_im*chest_re)>>9);
+ stat_re += (((tmp_re*chest_re)>>15) + ((tmp_im*chest_im)>>15))/4;
+ stat_im += (((tmp_re*chest_im)>>15) - ((tmp_im*chest_re)>>15))/4;
off+=2;
#ifdef DEBUG_PUCCH_RX
LOG_D(PHY,"[PHY][eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)\n",subframe,l,re,
@@ -1007,20 +1023,27 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
} // aa
#ifdef DEBUG_PUCCH_RX
- LOG_D(PHY,"PUCCH 1a/b: subframe %d : stat %d,%d (pos %d)\n",subframe,stat_re,stat_im,
+ LOG_I(PHY,"PUCCH 1a/b: subframe %d : stat %d,%d (pos %d)\n",subframe,stat_re,stat_im,
(subframe<<10) + (phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe]));
#endif
-
- ((int16_t*)&phy_vars_eNB->pucch1ab_stats[UE_id][(subframe<<10) + (phy_vars_eNB->pucch1_stats_cnt[UE_id][subframe])])[0] = stat_re;
- ((int16_t*)&phy_vars_eNB->pucch1ab_stats[UE_id][(subframe<<10) + (phy_vars_eNB->pucch1_stats_cnt[UE_id][subframe])])[1] = stat_im;
- phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe] = (phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe]+1)&1023;
+ phy_vars_eNB->pucch1ab_stats[UE_id][(subframe<<11) + 2*(phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe])] = (stat_re);
+ phy_vars_eNB->pucch1ab_stats[UE_id][(subframe<<11) + 1+2*(phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe])] = (stat_im);
+ phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe] = (phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe]+1)&1023;
+
+
+
*payload = (stat_re<0) ? 1 : 0;
if (fmt==pucch_format1b)
*(1+payload) = (stat_im<0) ? 1 : 0;
} else { // insufficient energy on PUCCH so NAK
*payload = 0;
+ ((int16_t*)&phy_vars_eNB->pucch1ab_stats[UE_id][(subframe<<10) + (phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe])])[0] = (int16_t)(stat_re);
+ ((int16_t*)&phy_vars_eNB->pucch1ab_stats[UE_id][(subframe<<10) + (phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe])])[1] = (int16_t)(stat_im);
+ phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe] = (phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe]+1)&1023;
+
+ *payload = (stat_re<0) ? 1 : 0;
if (fmt==pucch_format1b)
*(1+payload) = 0;
@@ -1054,7 +1077,7 @@ int32_t rx_pucch_emul(PHY_VARS_eNB *phy_vars_eNB,
}
if (UE_id==NB_UE_INST) {
- LOG_E(PHY,"rx_pucch_emul: FATAL, didn't find UE with rnti %x\n",rnti);
+ LOG_W(PHY,"rx_pucch_emul: Didn't find UE with rnti %x\n",rnti);
return(-1);
}
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
index 606b2692d5..f2e4dea58a 100644
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
@@ -1657,8 +1657,15 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
}
} else {
for (i=0; inb_antennas_rx; i++) {
+ /*
eNB_pusch_vars->ulsch_power[i] = signal_energy_nodc(eNB_pusch_vars->drs_ch_estimates[eNB_id][i],
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12)*rx_power_correction;
+
+ */
+
+ eNB_pusch_vars->ulsch_power[i] = signal_energy_nodc(eNB_pusch_vars->drs_ch_estimates[eNB_id][i],
+ ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12);
+
#ifdef LOCALIZATION
eNB_pusch_vars->subcarrier_power = (int32_t *)malloc(ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12*sizeof(int32_t));
eNB_pusch_vars->active_subcarrier = subcarrier_energy(eNB_pusch_vars->drs_ch_estimates[eNB_id][i],
diff --git a/openair1/PHY/MODULATION/defs.h b/openair1/PHY/MODULATION/defs.h
index 8d45c15e00..6005d6d49a 100644
--- a/openair1/PHY/MODULATION/defs.h
+++ b/openair1/PHY/MODULATION/defs.h
@@ -34,12 +34,12 @@
*/
/**
-\fn void PHY_ofdm_mod(int *input,int *output,unsigned char log2fftsize,unsigned char nb_symbols,unsigned short nb_prefix_samples,Extension_t etype)
+\fn void PHY_ofdm_mod(int *input,int *output,int fftsize,unsigned char nb_symbols,unsigned short nb_prefix_samples,Extension_t etype)
This function performs OFDM modulation with cyclic extension or zero-padding.
@param input The sequence input samples in the frequency-domain. This is a concatenation of the input symbols in SIMD redundant format
@param output The time-domain output signal
-@param log2fftsize Base-2 logarithm of the OFDM symbol size (\f$N_d\f$)
+@param fftsize size of OFDM symbol size (\f$N_d\f$)
@param nb_symbols The number of OFDM symbols in the block
@param nb_prefix_samples The number of prefix/suffix/zero samples
@param etype Type of extension (CYCLIC_PREFIX,CYCLIC_SUFFIX,ZEROS)
@@ -47,7 +47,7 @@ This function performs OFDM modulation with cyclic extension or zero-padding.
*/
void PHY_ofdm_mod(int *input,
int *output,
- unsigned char log2fftsize,
+ int fftsize,
unsigned char nb_symbols,
unsigned short nb_prefix_samples,
Extension_t etype
diff --git a/openair1/PHY/MODULATION/ofdm_mod.c b/openair1/PHY/MODULATION/ofdm_mod.c
index 61e5f9fb5b..3dd76c0fbb 100755
--- a/openair1/PHY/MODULATION/ofdm_mod.c
+++ b/openair1/PHY/MODULATION/ofdm_mod.c
@@ -61,9 +61,9 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA
txdata+(i*(frame_parms->samples_per_tti>>1)));
#endif
- PHY_ofdm_mod(txdataF+(i*NUMBER_OF_OFDM_CARRIERS*frame_parms->symbols_per_tti>>1), // input
+ PHY_ofdm_mod(txdataF+(i*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti>>1), // input
txdata+(i*frame_parms->samples_per_tti>>1), // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
1, // number of symbols
frame_parms->nb_prefix_samples0, // number of prefix samples
CYCLIC_PREFIX);
@@ -71,9 +71,9 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA
printf("slot i %d (txdata offset %d)\n",i,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0+(i*frame_parms->samples_per_tti>>1));
#endif
- PHY_ofdm_mod(txdataF+NUMBER_OF_OFDM_CARRIERS+(i*NUMBER_OF_OFDM_CARRIERS*(frame_parms->symbols_per_tti>>1)), // input
+ PHY_ofdm_mod(txdataF+frame_parms->ofdm_symbol_size+(i*frame_parms->ofdm_symbol_size*(frame_parms->symbols_per_tti>>1)), // input
txdata+OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0+(i*(frame_parms->samples_per_tti>>1)), // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
(short_offset==1) ? 1 :(frame_parms->symbols_per_tti>>1)-1,//6, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
@@ -84,7 +84,7 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA
void PHY_ofdm_mod(int *input, /// pointer to complex input
int *output, /// pointer to complex output
- unsigned char log2fftsize, /// log2(FFT_SIZE)
+ int fftsize, /// FFT_SIZE
unsigned char nb_symbols, /// number of OFDM symbols
unsigned short nb_prefix_samples, /// cyclic prefix length
Extension_t etype /// type of extension
@@ -100,24 +100,28 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
int *temp_ptr=(int*)0;
void (*idft)(int16_t *,int16_t *, int);
- switch (log2fftsize) {
- case 7:
+ switch (fftsize) {
+ case 128:
idft = idft128;
break;
- case 8:
+ case 256:
idft = idft256;
break;
- case 9:
+ case 512:
idft = idft512;
break;
- case 10:
+ case 1024:
idft = idft1024;
break;
- case 11:
+ case 1536:
+ idft = idft1536;
+ break;
+
+ case 2048:
idft = idft2048;
break;
@@ -127,8 +131,8 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
}
#ifdef DEBUG_OFDM_MOD
- msg("[PHY] OFDM mod (size %d,prefix %d) Symbols %d, input %p, output %p\n",
- 1< %p)\n",i,nb_symbols,input,&input[i< %p)\n",i,nb_symbols,i*fftsize+(i*nb_prefix_samples),input,&input[i*fftsize],&output[(i*fftsize) + ((i)*nb_prefix_samples)]);
#endif
- idft((int16_t *)&input[i<=-nb_prefix_samples; k--) {
output_ptr[k] = output_ptr[--j];
@@ -175,19 +175,19 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
case CYCLIC_SUFFIX:
- output_ptr = &output[(i<>1,slot_offset);
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
&txdata[aa][slot_offset], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
12, // number of symbols
frame_parms->ofdm_symbol_size>>2, // number of prefix samples
CYCLIC_PREFIX);
@@ -252,7 +245,7 @@ void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t
if (frame_parms->Ncp == EXTENDED)
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
&txdata[aa][slot_offset], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
2, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
@@ -268,7 +261,7 @@ void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t
if (frame_parms->Ncp == EXTENDED)
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
&txdata[aa][slot_offset], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
6, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
diff --git a/openair1/PHY/MODULATION/slot_fep.c b/openair1/PHY/MODULATION/slot_fep.c
index feb2d885b2..0d2389c2ae 100644
--- a/openair1/PHY/MODULATION/slot_fep.c
+++ b/openair1/PHY/MODULATION/slot_fep.c
@@ -58,24 +58,28 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
void (*dft)(int16_t *,int16_t *, int);
int tmp_dft_in[256]; // This is for misalignment issues for 6 and 15 PRBs
- switch (frame_parms->log2_symbol_size) {
- case 7:
+ switch (frame_parms->ofdm_symbol_size) {
+ case 128:
dft = dft128;
break;
- case 8:
+ case 256:
dft = dft256;
break;
- case 9:
+ case 512:
dft = dft512;
break;
- case 10:
+ case 1024:
dft = dft1024;
break;
- case 11:
+ case 1536:
+ dft = dft1536;
+ break;
+
+ case 2048:
dft = dft2048;
break;
@@ -96,12 +100,12 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
if (l<0 || l>=7-frame_parms->Ncp) {
- msg("slot_fep: l must be between 0 and %d\n",7-frame_parms->Ncp);
+ printf("slot_fep: l must be between 0 and %d\n",7-frame_parms->Ncp);
return(-1);
}
if (Ns<0 || Ns>=20) {
- msg("slot_fep: Ns must be between 0 and 19\n");
+ printf("slot_fep: Ns must be between 0 and 19\n");
return(-1);
}
@@ -116,7 +120,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
#ifdef DEBUG_FEP
// if (phy_vars_ue->frame <100)
- msg("slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d\n", phy_vars_ue->frame_rx,Ns, symbol,
+ printf("slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d\n", phy_vars_ue->frame_rx,Ns, symbol,
nb_prefix_samples,nb_prefix_samples0,slot_offset,subframe_offset,sample_offset,rx_offset);
#endif
@@ -147,7 +151,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
#ifdef DEBUG_FEP
// if (phy_vars_ue->frame <100)
- msg("slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d\n", phy_vars_ue->frame_rx,Ns, symbol,
+ printf("slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d\n", phy_vars_ue->frame_rx,Ns, symbol,
nb_prefix_samples,nb_prefix_samples0,slot_offset,subframe_offset,sample_offset,rx_offset);
#endif
@@ -182,7 +186,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
for (aa=0; aanb_antennas_tx_eNB; aa++) {
#ifdef DEBUG_FEP
- msg("Channel estimation eNB %d, aatx %d, slot %d, symbol %d\n",eNB_id,aa,Ns,l);
+ printf("Channel estimation eNB %d, aatx %d, slot %d, symbol %d\n",eNB_id,aa,Ns,l);
#endif
start_meas(&phy_vars_ue->dlsch_channel_estimation_stats);
lte_dl_channel_estimation(phy_vars_ue,eNB_id,0,
@@ -205,7 +209,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
// do frequency offset estimation here!
// use channel estimates from current symbol (=ch_t) and last symbol (ch_{t-1})
#ifdef DEBUG_FEP
- msg("Frequency offset estimation\n");
+ printf("Frequency offset estimation\n");
#endif
if (l==(4-frame_parms->Ncp)) {
@@ -222,7 +226,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
}
#ifdef DEBUG_FEP
- msg("slot_fep: done\n");
+ printf("slot_fep: done\n");
#endif
return(0);
}
diff --git a/openair1/PHY/MODULATION/slot_fep_mbsfn.c b/openair1/PHY/MODULATION/slot_fep_mbsfn.c
index 94dc4b3ef1..d71a9d0477 100644
--- a/openair1/PHY/MODULATION/slot_fep_mbsfn.c
+++ b/openair1/PHY/MODULATION/slot_fep_mbsfn.c
@@ -54,25 +54,29 @@ int slot_fep_mbsfn(PHY_VARS_UE *phy_vars_ue,
unsigned int frame_length_samples = frame_parms->samples_per_tti * 10;
void (*dft)(int16_t *,int16_t *, int);
- switch (frame_parms->log2_symbol_size) {
+ switch (frame_parms->ofdm_symbol_size) {
- case 7:
+ case 128:
dft = dft128;
break;
- case 8:
+ case 256:
dft = dft256;
break;
- case 9:
+ case 512:
dft = dft512;
break;
- case 10:
+ case 1024:
dft = dft1024;
break;
- case 11:
+ case 1536:
+ dft = dft1536;
+ break;
+
+ case 2048:
dft = dft2048;
break;
diff --git a/openair1/PHY/MODULATION/slot_fep_ul.c b/openair1/PHY/MODULATION/slot_fep_ul.c
index 32bae2c036..57f4a6f7ab 100644
--- a/openair1/PHY/MODULATION/slot_fep_ul.c
+++ b/openair1/PHY/MODULATION/slot_fep_ul.c
@@ -50,24 +50,28 @@ int slot_fep_ul(LTE_DL_FRAME_PARMS *frame_parms,
void (*dft)(int16_t *,int16_t *, int);
- switch (frame_parms->log2_symbol_size) {
- case 7:
+ switch (frame_parms->ofdm_symbol_size) {
+ case 128:
dft = dft128;
break;
- case 8:
+ case 256:
dft = dft256;
break;
- case 9:
+ case 512:
dft = dft512;
break;
- case 10:
+ case 1024:
dft = dft1024;
break;
- case 11:
+ case 1536:
+ dft = dft1536;
+ break;
+
+ case 2048:
dft = dft2048;
break;
diff --git a/openair1/PHY/TOOLS/cmult_mm.c b/openair1/PHY/TOOLS/cmult_mm.c
deleted file mode 100644
index 328958af29..0000000000
--- a/openair1/PHY/TOOLS/cmult_mm.c
+++ /dev/null
@@ -1,200 +0,0 @@
-/*******************************************************************************
- OpenAirInterface
- Copyright(c) 1999 - 2014 Eurecom
-
- OpenAirInterface is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
-
- OpenAirInterface is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with OpenAirInterface.The full GNU General Public License is
- included in this distribution in the file called "COPYING". If not,
- see .
-
- Contact Information
- OpenAirInterface Admin: openair_admin@eurecom.fr
- OpenAirInterface Tech : openair_tech@eurecom.fr
- OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
-
- Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
-
- *******************************************************************************/
-#include "defs.h"
-
-int mult_cpx_matrix_h(short *x1[2][2],
- short *x2[2][2],
- short *y[2][2],
- unsigned int N,
- unsigned short output_shift,
- short hermitian)
-{
-
- if (hermitian) {
- // this computes x1^H*x2 and stores it in y
- mult_cpx_vector_h(x2[0][0],x1[0][0],y[0][0],N,output_shift,1);
- mult_cpx_vector_h(x2[0][1],x1[0][1],y[0][0],N,output_shift,1);
- mult_cpx_vector_h(x2[0][0],x1[1][0],y[1][0],N,output_shift,1);
- mult_cpx_vector_h(x2[0][1],x1[1][1],y[1][0],N,output_shift,1);
- mult_cpx_vector_h(x2[1][0],x1[0][0],y[0][1],N,output_shift,1);
- mult_cpx_vector_h(x2[1][1],x1[0][1],y[0][1],N,output_shift,1);
- mult_cpx_vector_h(x2[1][0],x1[1][0],y[1][1],N,output_shift,1);
- mult_cpx_vector_h(x2[1][1],x1[1][1],y[1][1],N,output_shift,1);
- } else {
- // this computes x1*x2^H and stores it in y
- mult_cpx_vector_h(x1[0][0],x2[0][0],y[0][0],N,output_shift,1);
- mult_cpx_vector_h(x1[0][1],x2[0][1],y[0][0],N,output_shift,1);
- mult_cpx_vector_h(x1[0][0],x2[1][0],y[0][1],N,output_shift,1);
- mult_cpx_vector_h(x1[0][1],x2[1][1],y[0][1],N,output_shift,1);
- mult_cpx_vector_h(x1[1][0],x2[0][0],y[1][0],N,output_shift,1);
- mult_cpx_vector_h(x1[1][1],x2[0][1],y[1][0],N,output_shift,1);
- mult_cpx_vector_h(x1[1][0],x2[1][0],y[1][1],N,output_shift,1);
- mult_cpx_vector_h(x1[1][1],x2[1][1],y[1][1],N,output_shift,1);
- }
-}
-
-int mult_cpx_matrix_vector(int *x1[2][2],
- int *x2[2],
- int *y[2],
- unsigned int N,
- unsigned short output_shift)
-{
-
- Zero_Buffer(y[0],N*8);
- Zero_Buffer(y[1],N*8);
-
- // this computes x1*x2 and stores it in y (32 bit)
- mult_cpx_vector_add32((short*)x2[0],(short*)x1[0][0],(short*)y[0],N);
- mult_cpx_vector_add32((short*)x2[1],(short*)x1[0][1],(short*)y[0],N);
- mult_cpx_vector_add32((short*)x2[0],(short*)x1[1][0],(short*)y[1],N);
- mult_cpx_vector_add32((short*)x2[1],(short*)x1[1][1],(short*)y[1],N);
-
- // shift and pack
- shift_and_pack((short*)y[0],N,output_shift);
- shift_and_pack((short*)y[1],N,output_shift);
-
-}
-
-#ifdef MAIN_MM
-#include
-#include
-main ()
-{
- short x1_00[256] __attribute__((aligned(16)));
- short x1_10[256] __attribute__((aligned(16)));
- short x1_01[256] __attribute__((aligned(16)));
- short x1_11[256] __attribute__((aligned(16)));
- short x2_0[256] __attribute__((aligned(16)));
- short x2_1[256] __attribute__((aligned(16)));
- short y_0[256] __attribute__((aligned(16)));
- short y_1[256] __attribute__((aligned(16)));
-
- int *x1[2][2];
- int *x2[2];
- int *y[2];
- int i,m,n;
-
- x1[0][0] = (int*)x1_00;
- x1[0][1] = (int*)x1_01;
- x1[1][0] = (int*)x1_10;
- x1[1][1] = (int*)x1_11;
- x2[0] = (int*)x2_0;
- x2[1] = (int*)x2_1;
- y[0] = (int*)y_0;
- y[1] = (int*)y_1;
-
- for(m=0; m<2; m++) {
- for(n=0; n<2; n++) {
- for(i=0; i<256; i+=4) {
- ((short*)x1[m][n])[i] = ((short) rand())/4;
- ((short*)x1[m][n])[i+1] = ((short) rand())/4;
- ((short*)x1[m][n])[i+2] = -((short*)x1[m][n])[i+1];
- ((short*)x1[m][n])[i+3] = ((short*)x1[m][n])[i];
- }
- }
-
- for(i=0; i<256; i+=4) {
- ((short*)x2[m])[i] = ((short) rand())/4;
- ((short*)x2[m])[i+1] = ((short) rand())/4;
- ((short*)x2[m])[i+2] = ((short*)x2[m])[i];
- ((short*)x2[m])[i+3] = ((short*)x2[m])[i+1];
- }
-
- Zero_Buffer(y[m],512);
- }
-
- /*
- input[0] = 100;
- input[1] = 200;
- input[2] = -200;
- input[3] = 100;
- input[4] = 1000;
- input[5] = 2000;
- input[6] = -2000;
- input[7] = 1000;
- input[8] = 100;
- input[9] = 200;
- input[10] = -200;
- input[11] = 100;
- input[12] = 1000;
- input[13] = 2000;
- input[14] = -2000;
- input[15] = 1000;
-
- input2[0] = 2;
- input2[1] = 1;
- input2[2] = 2;
- input2[3] = 1;
- input2[4] = 20;
- input2[5] = 10;
- input2[6] = 20;
- input2[7] = 10;
- input2[8] = 2;
- input2[9] = 1;
- input2[10] = 2;
- input2[11] = 1;
- input2[12] = 2000;
- input2[13] = 1000;
- input2[14] = 2000;
- input2[15] = 1000;
-
- x1[0][0] = (int*)input;
- x1[0][1] = (int*)input;
- x1[1][0] = (int*)input;
- x1[1][1] = (int*)input;
-
- x2[0] = (int*)input2;
- x2[1] = (int*)input2;
-
- y[0] = (int*)output;
- y[1] = (int*)output2;
- */
-
- mult_cpx_matrix_vector(x1,x2,y,64,15);
-
- //mult_cpx_vector_add32(x2[0],x1[0][0],y[0],64);
-
- for (i=0; i<128; i+=2)
- printf("i=%d, x1 = [%d+1i*%d %d+1i*%d; %d+1i*%d %d+1i*%d]; x2 = [%d+1i*%d; %d+1i*%d]; y = [%d+1i*%d; %d+1i*%d]; y_m= round(x1*x2./pow2(15)); y-y_m \n",
- i,
- ((short*)x1[0][0])[2*i], ((short*)x1[0][0])[2*i+2],
- ((short*)x1[0][1])[2*i], ((short*)x1[0][1])[2*i+2],
- ((short*)x1[1][0])[2*i], ((short*)x1[1][0])[2*i+2],
- ((short*)x1[1][1])[2*i], ((short*)x1[1][1])[2*i+2],
- ((short*)x2[0])[2*i], ((short*)x2[0])[2*i+1],
- ((short*)x2[1])[2*i], ((short*)x2[1])[2*i+1],
- ((short*)y[0])[2*i], ((short*)y[0])[2*i+1],
- ((short*)y[1])[2*i], ((short*)y[1])[2*i+1]);
-
- //((int*)y[0])[i], ((int*)y[0])[i+1],
- //((int*)y[1])[i], ((int*)y[1])[i+1]);
-
-}
-
-#endif
diff --git a/openair1/PHY/TOOLS/cmult_vv.c b/openair1/PHY/TOOLS/cmult_vv.c
index d7b7275508..f970d33224 100755
--- a/openair1/PHY/TOOLS/cmult_vv.c
+++ b/openair1/PHY/TOOLS/cmult_vv.c
@@ -50,7 +50,7 @@ int mult_cpx_conj_vector(int16_t *x1,
uint32_t N,
int output_shift)
{
- // Multiply elementwise two complex vectors of N elements with repeated formatted output
+ // Multiply elementwise the complex conjugate of x1 with x2.
// x1 - input 1 in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)|
// We assume x1 with a dinamic of 15 bit maximum
//
@@ -90,7 +90,7 @@ int mult_cpx_conj_vector(int16_t *x1,
tmp_im = _mm_shufflelo_epi16(*x1_128,_MM_SHUFFLE(2,3,0,1));
tmp_im = _mm_shufflehi_epi16(tmp_im,_MM_SHUFFLE(2,3,0,1));
tmp_im = _mm_sign_epi16(tmp_im,*(__m128i*)&conjug[0]);
- tmp_im = _mm_madd_epi16(tmp_im,*x1_128);
+ tmp_im = _mm_madd_epi16(tmp_im,*x2_128);
tmp_re = _mm_srai_epi32(tmp_re,output_shift);
tmp_im = _mm_srai_epi32(tmp_im,output_shift);
tmpy0 = _mm_unpacklo_epi32(tmp_re,tmp_im);
@@ -130,3 +130,4 @@ int mult_cpx_conj_vector(int16_t *x1,
return(0);
}
+
diff --git a/openair1/PHY/TOOLS/cmult_vvh.c b/openair1/PHY/TOOLS/cmult_vvh.c
deleted file mode 100644
index 64cf163d09..0000000000
--- a/openair1/PHY/TOOLS/cmult_vvh.c
+++ /dev/null
@@ -1,366 +0,0 @@
-/*******************************************************************************
- OpenAirInterface
- Copyright(c) 1999 - 2014 Eurecom
-
- OpenAirInterface is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
-
- OpenAirInterface is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with OpenAirInterface.The full GNU General Public License is
- included in this distribution in the file called "COPYING". If not,
- see .
-
- Contact Information
- OpenAirInterface Admin: openair_admin@eurecom.fr
- OpenAirInterface Tech : openair_tech@eurecom.fr
- OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
-
- Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
-
- *******************************************************************************/
-#include "defs.h"
-
-static __m128i shift __attribute__ ((aligned(16)));
-
-
-int mult_cpx_vector_h(short *x1,
- short *x2,
- short *y,
- unsigned int N,
- unsigned short output_shift,
- short sign)
-{
- // Multiply elementwise the complex vector x1 with the complex conjugate of the complex vecotr x2 of N elements and adds it to the vector y.
- // x1 - input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
- // We assume x1 with a dinamic of 15 bit maximum
- //
- // x2 - input 2 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
- // We assume x2 with a dinamic of 14 bit maximum
- //
- // y - output in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
- //
- // N - the size f the vectors (this function does N cpx mpy. WARNING: N>=4;
- //
- // log2_amp - increase the output amplitude by a factor 2^log2_amp (default is 0)
- // WARNING: log2_amp>0 can cause overflow!!
- // sign - +1..add, -1..substract
-
- unsigned int i; // loop counter
-
- register __m128i m0,m1,m2;
-
- short *temps;
- int *tempd;
-
- __m128i *x1_128;
- __m128i *x2_128;
- __m128i *y_128;
- __m128i mask;
-
- __m128i temp;
-
- shift = _mm_cvtsi32_si128(output_shift);
- x1_128 = (__m128i *)&x1[0];
- x2_128 = (__m128i *)&x2[0];
- y_128 = (__m128i *)&y[0];
-
- if (sign == -1)
- mask = (__m128i) _mm_set_epi16 (-1,1,-1,-1,-1,1,-1,-1);
- else
- mask = (__m128i) _mm_set_epi16 (1,-1,1,1,1,-1,1,1);
-
- // we compute 2*4 cpx multiply for each loop
- for(i=0; i<(N>>3); i++) {
-
- // printf("i=%d\n",i);
-
- // unroll 1
- // temps = (short *)x1_128;
- // printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]);
- m1 = x1_128[0];
- m2 = x2_128[0];
-
- // temps = (short *)&x2_128[0];
- // printf("x2 : %x,%x,%x,%x,%x,%x,%x,%x\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]);
-
- // bring x2 in conjugate form
- // the first two instructions might be replaced with a single one in SSE3
- m2 = _mm_shufflelo_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_shufflehi_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_mullo_epi16(m2, mask);
-
- // temp = m2;
- // temps = (short *)&temp;
- // printf("x2 conj : %x,%x,%x,%x,%x,%x,%x,%x\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]);
-
- m0 = _mm_madd_epi16(m1,m2); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0]
-
- // temp = m0;
-
- // tempd = &temp;
- // printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]);
-
- m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude
-
- // temp = m0;
-
- // tempd = (int *)&temp;
- // printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]);
-
- m0 = _mm_packs_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im]
- m0 = _mm_unpacklo_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im]
-
- y_128[0] = _mm_add_epi16(m0,y_128[0]);
-
- // temps = (short *)&y_128[0];
- // printf("y0 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]);
-
- // unroll 2
- m1 = x1_128[1];
- m2 = x2_128[1];
-
- m2 = _mm_shufflelo_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_shufflehi_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_mullo_epi16(m2, mask);
-
- m0 = _mm_madd_epi16(m1,m2); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0]
-
- m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude
-
- m0 = _mm_packs_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im]
- m0 = _mm_unpacklo_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im]
-
- y_128[1] = _mm_add_epi16(m0,y_128[1]);
-
- // unroll 3
- m1 = x1_128[2];
- m2 = x2_128[2];
-
- m2 = _mm_shufflelo_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_shufflehi_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_mullo_epi16(m2, mask);
-
- m0 = _mm_madd_epi16(m1,m2); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0]
-
- m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude
-
- m0 = _mm_packs_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im]
- m0 = _mm_unpacklo_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im]
-
- y_128[2] = _mm_add_epi16(m0,y_128[2]);
-
-
- // unroll 4
- m1 = x1_128[3];
- m2 = x2_128[3];
-
- m2 = _mm_shufflelo_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_shufflehi_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_mullo_epi16(m2, mask);
-
- m0 = _mm_madd_epi16(m1,m2); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0]
-
- m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude
-
- m0 = _mm_packs_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im]
- m0 = _mm_unpacklo_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im]
-
- y_128[3] = _mm_add_epi16(m0,y_128[3]);
-
- x1_128+=4;
- x2_128+=4;
- y_128 +=4;
- // printf("x1_128 = %p, x2_128 =%p, y_128=%p\n",x1_128,x2_128,y_128);
-
- }
-
-
- _mm_empty();
- _m_empty();
-
- return(0);
-}
-
-
-int mult_cpx_vector_h_add32(short *x1,
- short *x2,
- short *y,
- unsigned int N,
- short sign)
-{
- // Multiply elementwise the complex vector x1 with the complex conjugate of the complex vecotr x2 of N elements and adds it to the vector y.
- // x1 - input 1 in 16bit format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
- // We assume x1 with a dinamic of 15 bit maximum
- //
- // x2 - input 2 in 16bit format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
- // We assume x2 with a dinamic of 14 bit maximum
- //
- // y - output in 32bit format |Re0 Im0|,......,|Re(N-1) Im(N-1)|
- //
- // N - the size f the vectors (this function does N cpx mpy. WARNING: N>=4;
- //
- // sign - +1..add, -1..substract
-
- unsigned int i; // loop counter
-
- register __m128i m0,m1,m2;
-
- short *temps;
- int *tempd;
-
- __m128i *x1_128;
- __m128i *x2_128;
- __m128i *y_128;
- __m128i mask;
-
- __m128i temp;
-
- x1_128 = (__m128i *)&x1[0];
- x2_128 = (__m128i *)&x2[0];
- y_128 = (__m128i *)&y[0];
-
- if (sign == -1)
- mask = (__m128i) _mm_set_epi16 (-1,1,-1,-1,-1,1,-1,-1);
- else
- mask = (__m128i) _mm_set_epi16 (1,-1,1,1,1,-1,1,1);
-
- // we compute 2*4 cpx multiply for each loop
- for(i=0; i<(N>>3); i++) {
-
- m1 = x1_128[0];
- m2 = x2_128[0];
-
- // bring x2 in conjugate form
- // the first two instructions might be replaced with a single one in SSE3
- m2 = _mm_shufflelo_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_shufflehi_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_mullo_epi16(m2, mask);
-
- m0 = _mm_madd_epi16(m1,m2); // 1- compute x1[0]*x2[0], result is 32bit
-
- y_128[0] = _mm_add_epi32(m0,y_128[0]);
-
- // unroll 2
- m1 = x1_128[1];
- m2 = x2_128[1];
-
- m2 = _mm_shufflelo_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_shufflehi_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_mullo_epi16(m2, mask);
-
- m0 = _mm_madd_epi16(m1,m2);
-
- y_128[1] = _mm_add_epi32(m0,y_128[1]);
-
- // unroll 3
- m1 = x1_128[2];
- m2 = x2_128[2];
-
- m2 = _mm_shufflelo_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_shufflehi_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_mullo_epi16(m2, mask);
-
- m0 = _mm_madd_epi16(m1,m2);
-
- y_128[2] = _mm_add_epi32(m0,y_128[2]);
-
-
- // unroll 4
- m1 = x1_128[3];
- m2 = x2_128[3];
-
- m2 = _mm_shufflelo_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_shufflehi_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_mullo_epi16(m2, mask);
-
- m0 = _mm_madd_epi16(m1,m2);
-
- y_128[3] = _mm_add_epi32(m0,y_128[3]);
-
- x1_128+=4;
- x2_128+=4;
- y_128 +=4;
-
- }
-
-
- _mm_empty();
- _m_empty();
-
- return(0);
-}
-
-#ifdef MAIN
-#define L 16
-
-main ()
-{
-
- short input[256] __attribute__((aligned(16)));
- short input2[256] __attribute__((aligned(16)));
- short output[256] __attribute__((aligned(16)));
-
- int i;
-
- Zero_Buffer(output,256*2);
-
- for (i=0; i<16; i+=2)
- printf("output[%d] = %d + %d i\n",i,output[i],output[i+1]);
-
- input[0] = 100;
- input[1] = 200;
- input[2] = 100;
- input[3] = 200;
- input[4] = 1234;
- input[5] = -1234;
- input[6] = 1234;
- input[7] = -1234;
- input[8] = 100;
- input[9] = 200;
- input[10] = 100;
- input[11] = 200;
- input[12] = 1000;
- input[13] = 2000;
- input[14] = 1000;
- input[15] = 2000;
-
- input2[0] = 1;
- input2[1] = 2;
- input2[2] = 1;
- input2[3] = 2;
- input2[4] = 10;
- input2[5] = 20;
- input2[6] = 10;
- input2[7] = 20;
- input2[8] = 1;
- input2[9] = 2;
- input2[10] = 1;
- input2[11] = 2;
- input2[12] = 1000;
- input2[13] = 2000;
- input2[14] = 1000;
- input2[15] = 2000;
-
-
- mult_cpx_vector_h(input2,input2,output,8,0,1);
-
- for (i=0; i<16; i+=2)
- printf("output[%d] = %d + %d i\n",i,output[i],output[i+1]);
-
- Zero_Buffer(output,256*2);
- mult_cpx_vector_h(input2,input2,output,8,0,-1);
-
- for (i=0; i<16; i+=2)
- printf("output[%d] = %d + %d i\n",i,output[i],output[i+1]);
-
-}
-
-#endif //MAIN
diff --git a/openair1/PHY/TOOLS/defs.h b/openair1/PHY/TOOLS/defs.h
index 6960fcda4c..963c1384b7 100644
--- a/openair1/PHY/TOOLS/defs.h
+++ b/openair1/PHY/TOOLS/defs.h
@@ -64,6 +64,8 @@ struct complex32 {
int32_t i;
};
+//cmult_sv.h
+
/*!\fn void multadd_real_vector_complex_scalar(int16_t *x,int16_t *alpha,int16_t *y,uint32_t N)
This function performs componentwise multiplication and accumulation of a complex scalar and a real vector.
@param x Vector input (Q1.15)
@@ -95,192 +97,14 @@ void multadd_complex_vector_real_scalar(int16_t *x,
uint8_t zero_flag,
uint32_t N);
-
-/*!\fn int32_t mult_cpx_vector(int16_t *x1,int16_t *x2,int16_t *y,uint32_t N,int32_t output_shift)
-This function performs optimized componentwise multiplication of two Q1.15 vectors in repeated format.
-
-@param x1 Input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param x2 Input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)|
-@param y Output in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param N Length of Vector WARNING: N must be a multiple of 8 (4x loop unrolling and two complex multiplies per cycle)
-@param output_shift Number of bits to shift output down to Q1.15 (should be 15 for Q1.15 inputs) WARNING: log2_amp>0 can cause overflow!!
-
-The function implemented is : \f$\mathbf{y} = \mathbf{x_1}\odot\mathbf{x_2}\f$
-*/
-int32_t mult_cpx_vector(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N,
- int32_t output_shift);
-
-/*!\fn int32_t mult_cpx_vector_norep(int16_t *x1,int16_t *x2,int16_t *y,uint32_t N,int32_t output_shift)
-This function performs optimized componentwise multiplication of two Q1.15 vectors with normal formatted output.
-
-@param x1 Input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param x2 Input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)|
-@param y Output in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)|
-@param N Length of Vector WARNING: N must be a multiple of 8 (4x loop unrolling and two complex multiplies per cycle)
-@param output_shift Number of bits to shift output down to Q1.15 (should be 15 for Q1.15 inputs) WARNING: log2_amp>0 can cause overflow!!
-
-The function implemented is : \f$\mathbf{y} = \mathbf{x_1}\odot\mathbf{x_2}\f$
-*/
-int32_t mult_cpx_vector_norep(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N,
- int32_t output_shift);
-
-
-/*!\fn int32_t mult_cpx_vector_norep2(int16_t *x1,int16_t *x2,int16_t *y,uint32_t N,int32_t output_shift)
-This function performs optimized componentwise multiplication of two Q1.15 vectors with normal formatted output.
-
-@param x1 Input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param x2 Input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)|
-@param y Output in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)|
-@param N Length of Vector WARNING: N must be a multiple of 8 (no unrolling and two complex multiplies per cycle)
-@param output_shift Number of bits to shift output down to Q1.15 (should be 15 for Q1.15 inputs) WARNING: log2_amp>0 can cause overflow!!
-
-The function implemented is : \f$\mathbf{y} = \mathbf{x_1}\odot\mathbf{x_2}\f$
-*/
-int32_t mult_cpx_vector_norep2(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N,
- int32_t output_shift);
-
-int32_t mult_cpx_vector_norep_conj(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N,
- int32_t output_shift);
-
-int32_t mult_cpx_vector_norep_conj2(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N,
- int32_t output_shift);
-
-/*!\fn int32_t mult_cpx_vector2(int16_t *x1,int16_t *x2,int16_t *y,uint32_t N,int32_t output_shift)
-This function performs optimized componentwise multiplication of two Q1.15 vectors.
-
-@param x1 Input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param x2 Input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)|
-@param y Output in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param N Length of Vector WARNING: N must be a multiple of 2 (2 complex multiplies per cycle)
-@param output_shift Number of bits to shift output down to Q1.15 (should be 15 for Q1.15 inputs) WARNING: log2_amp>0 can cause overflow!!
-
-The function implemented is : \f$\mathbf{y} = \mathbf{x_1}\odot\mathbf{x_2}\f$
-*/
-int32_t mult_cpx_vector2(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N,
- int32_t output_shift);
-
-/*!\fn int32_t mult_cpx_vector_add(int16_t *x1,int16_t *x2,int16_t *y,uint32_t N,int32_t output_shift)
-This function performs optimized componentwise multiplication of two Q1.15 vectors. The output IS ADDED TO y. WARNING: make sure that output_shift is set to the right value, so that the result of the multiplication has the comma at the same place as y.
-
-@param x1 Input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param x2 Input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)|
-@param y Output in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param N Length of Vector WARNING: N>=4
-@param output_shift Number of bits to shift output down to Q1.15 (should be 15 for Q1.15 inputs) WARNING: log2_amp>0 can cause overflow!!
-
-The function implemented is : \f$\mathbf{y} += \mathbf{x_1}\odot\mathbf{x_2}\f$
-*/
-
-int32_t mult_cpx_vector_add(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N,
- int32_t output_shift);
-
-
-int32_t mult_cpx_vector_h_add32(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N,
- int16_t sign);
-
-int32_t mult_cpx_vector_add32(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N);
-
-int32_t mult_vector32(int16_t *x1,
- int16_t *x2,
+int rotate_cpx_vector(int16_t *x,
+ int16_t *alpha,
int16_t *y,
- uint32_t N);
-
-int32_t mult_vector32_scalar(int16_t *x1,
- int32_t x2,
- int16_t *y,
- uint32_t N);
-
-int32_t mult_cpx_vector32_conj(int16_t *x,
- int16_t *y,
- uint32_t N);
-
-int32_t mult_cpx_vector32_real(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N);
-
-int32_t shift_and_pack(int16_t *y,
- uint32_t N,
- int32_t output_shift);
-
-/*!\fn int32_t mult_cpx_vector_h(int16_t *x1,int16_t *x2,int16_t *y,uint32_t N,int32_t output_shift,int16_t sign)
-This function performs optimized componentwise multiplication of the vector x1 with the conjugate of the vector x2. The output IS ADDED TO y. WARNING: make sure that output_shift is set to the right value, so that the result of the multiplication has the comma at the same place as y.
-
-@param x1 Input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param x2 Input 2 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param y Output in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param N Length of Vector (complex samples) WARNING: N>=4
-@param output_shift Number of bits to shift output down to Q1.15 (should be 15 for Q1.15 inputs) WARNING: log2_amp>0 can cause overflow!!
-@param sign +1..add, -1..substract
-
-The function implemented is : \f$\mathbf{y} = \mathbf{y} + \mathbf{x_1}\odot\mathbf{x_2}^*\f$
-*/
-int32_t mult_cpx_vector_h(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N,
- int32_t output_shift,
- int16_t sign);
-
-/*!\fn int32_t mult_cpx_matrix_h(int16_t *x1[2][2],int16_t *x2[2][2],int16_t *y[2][2],uint32_t N,uint16_t output_shift,int16_t hermitian)
-This function performs optimized componentwise matrix multiplication of the 2x2 matrices x1 with the 2x2 matrices x2. The output IS ADDED TO y (i.e. make sure y is initilized correctly). WARNING: make sure that output_shift is set to the right value, so that the result of the multiplication has the comma at the same place as y.
-
-@param x1 Input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param x2 Input 2 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param y Output in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param N Length of Vector (complex samples) WARNING: N>=4
-@param output_shift Number of bits to shift output down to Q1.15 (should be 15 for Q1.15 inputs) WARNING: log2_amp>0 can cause overflow!!
-@param hermitian if !=0 the hermitian transpose is returned (i.e. A^H*B instead of A*B^H)
-*/
-int32_t mult_cpx_matrix_h(int16_t *x1[2][2],
- int16_t *x2[2][2],
- int16_t *y[2][2],
- uint32_t N,
- uint16_t output_shift,
- int16_t hermitian);
+ uint32_t N,
+ uint16_t output_shift);
-/*!\fn int32_t mult_cpx_matrix_vector(int32_t *x1[2][2],int32_t *x2[2],int32_t *y[2],uint32_t N,uint16_t output_shift)
-This function performs optimized componentwise matrix-vector multiplication of the 2x2 matrices x1 with the 2x1 vectors x2. The output IS ADDED TO y (i.e. make sure y is initilized correctly). WARNING: make sure that output_shift is set to the right value, so that the result of the multiplication has the comma at the same place as y.
-@param x1 Input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param x2 Input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)|
-@param y Output in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| WARNING: y must be different for x2
-@param N Length of Vector (complex samples) WARNING: N>=4
-@param output_shift Number of bits to shift output down to Q1.15 (should be 15 for Q1.15 inputs) WARNING: log2_amp>0 can cause overflow!!
-*/
-int32_t mult_cpx_matrix_vector(int32_t *x1[2][2],
- int32_t *x2[2],
- int32_t *y[2],
- uint32_t N,
- uint16_t output_shift);
/*!\fn void init_fft(uint16_t size,uint8_t logsize,uint16_t *rev)
\brief Initialize the FFT engine for a given size
@@ -289,6 +113,25 @@ int32_t mult_cpx_matrix_vector(int32_t *x1[2][2],
@param rev Pointer to bit-reversal permutation array
*/
+//cmult_vv.c
+/*!
+ Multiply elementwise the complex conjugate of x1 with x2.
+ @param x1 - input 1 in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)|
+ We assume x1 with a dinamic of 15 bit maximum
+ @param x2 - input 2 in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)|
+ We assume x2 with a dinamic of 14 bit maximum
+ @param y - output in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)|
+ @param N - the size f the vectors (this function does N cpx mpy. WARNING: N>=4;
+ @param output_shift - shift to be applied to generate output
+*/
+
+int mult_cpx_conj_vector(int16_t *x1,
+ int16_t *x2,
+ int16_t *y,
+ uint32_t N,
+ int output_shift);
+
+// lte_dfts.c
void init_fft(uint16_t size,
uint8_t logsize,
uint16_t *rev);
@@ -355,6 +198,7 @@ int32_t rotate_cpx_vector(int16_t *x,
uint16_t output_shift);
+//cadd_sv.c
/*!\fn int32_t add_cpx_vector(int16_t *x,int16_t *alpha,int16_t *y,uint32_t N)
This function performs componentwise addition of a vector with a complex scalar.
diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c
index ec4577a67a..b010f93aab 100644
--- a/openair1/PHY/TOOLS/lte_dfts.c
+++ b/openair1/PHY/TOOLS/lte_dfts.c
@@ -45,8 +45,10 @@
#define debug_msg
#define ONE_OVER_SQRT2_Q15 23170
+
#endif
+#define ONE_OVER_SQRT3_Q15 18919
#include "PHY/sse_intrin.h"
@@ -3180,6 +3182,8 @@ void idft1536(int16_t *input, int16_t *output)
int i,i2,j;
uint32_t tmp[3][512 ]__attribute__((aligned(16)));
uint32_t tmpo[3][512] __attribute__((aligned(16)));
+ simd_q15_t *y128p=(simd_q15_t*)output;
+ simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15);
for (i=0,j=0; i<512; i++) {
tmp[0][i] = ((uint32_t *)input)[j++];
@@ -3190,17 +3194,6 @@ void idft1536(int16_t *input, int16_t *output)
idft512((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),1);
idft512((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1);
idft512((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1);
- /*
- for (i=1; i<512; i++) {
- tmpo[0][i] = tmpo[0][i<<1];
- tmpo[1][i] = tmpo[1][i<<1];
- tmpo[2][i] = tmpo[2][i<<1];
- }*/
-
- // write_output("in.m","in",input,6144,1,1);
- // write_output("out0.m","o0",tmpo[0],2048,1,1);
- // write_output("out1.m","o1",tmpo[1],2048,1,1);
- // write_output("out2.m","o2",tmpo[2],2048,1,1);
for (i=0,i2=0; i<1024; i+=8,i2+=4) {
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]),
@@ -3209,6 +3202,26 @@ void idft1536(int16_t *input, int16_t *output)
}
+ for (i=0; i<24; i++) {
+ y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
+ y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128);
+ y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128);
+ y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128);
+ y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128);
+ y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128);
+ y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128);
+ y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128);
+ y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128);
+ y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128);
+ y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128);
+ y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128);
+ y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128);
+ y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128);
+ y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128);
+ y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128);
+ y128p+=16;
+ }
+
_mm_empty();
_m_empty();
diff --git a/openair1/PHY/TOOLS/lte_phy_scope.c b/openair1/PHY/TOOLS/lte_phy_scope.c
index f40377c85b..a82934fc7f 100644
--- a/openair1/PHY/TOOLS/lte_phy_scope.c
+++ b/openair1/PHY/TOOLS/lte_phy_scope.c
@@ -88,7 +88,7 @@ FD_lte_phy_scope_enb *create_lte_phy_scope_enb( void )
fl_set_object_boxtype( fdui->rxsig_t, FL_EMBOSSED_BOX );
fl_set_object_color( fdui->rxsig_t, FL_BLACK, FL_RED );
fl_set_object_lcolor( fdui->rxsig_t, FL_WHITE ); // Label color
- fl_set_xyplot_ybounds(fdui->rxsig_t,30,70);
+ fl_set_xyplot_ybounds(fdui->rxsig_t,10,70);
// Time-domain channel response
fdui->chest_t = fl_add_xyplot( FL_NORMAL_XYPLOT, 410, 20, 370, 100, "Channel Impulse Response (samples, abs)" );
@@ -119,7 +119,7 @@ FD_lte_phy_scope_enb *create_lte_phy_scope_enb( void )
fl_set_xyplot_xgrid( fdui->pusch_llr,FL_GRID_MAJOR);
// I/Q PUCCH comp (format 1)
- fdui->pucch_comp1 = fl_add_xyplot( FL_POINTS_XYPLOT, 540, 480, 240, 100, "PUCCH I/Q of MF Output" );
+ fdui->pucch_comp1 = fl_add_xyplot( FL_POINTS_XYPLOT, 540, 480, 240, 100, "PUCCH1 Energy (SR)" );
fl_set_object_boxtype( fdui->pucch_comp1, FL_EMBOSSED_BOX );
fl_set_object_color( fdui->pucch_comp1, FL_BLACK, FL_YELLOW );
fl_set_object_lcolor( fdui->pucch_comp1, FL_WHITE ); // Label color
@@ -160,7 +160,7 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
int UE_id)
{
int eNB_id = 0;
- int i,arx,atx,ind,k;
+ int i,i2,arx,atx,ind,k;
LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_enb->lte_frame_parms;
int nsymb_ce = 12*frame_parms->N_RB_UL*frame_parms->symbols_per_tti;
uint8_t nb_antennas_rx = frame_parms->nb_antennas_rx;
@@ -171,15 +171,17 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
int16_t *pusch_llr;
int16_t *pusch_comp;
int32_t *pucch1_comp;
- int16_t *pucch1ab_comp;
+ int32_t *pucch1_thres;
+ int32_t *pucch1ab_comp;
float Re,Im,ymax;
float *llr, *bit;
float I[nsymb_ce*2], Q[nsymb_ce*2];
- float I_pucch[10240],Q_pucch[10240],A_pucch[10240],B_pucch[10240];
+ float I_pucch[10240],Q_pucch[10240],A_pucch[10240],B_pucch[10240],C_pucch[10240];
float rxsig_t_dB[nb_antennas_rx][FRAME_LENGTH_COMPLEX_SAMPLES];
float chest_t_abs[nb_antennas_rx][frame_parms->ofdm_symbol_size];
float *chest_f_abs;
float time[FRAME_LENGTH_COMPLEX_SAMPLES];
+ float time2[2048];
float freq[nsymb_ce*nb_antennas_rx*nb_antennas_tx];
int frame = phy_vars_enb->proc[0].frame_tx;
uint32_t total_dlsch_bitrate = phy_vars_enb->total_dlsch_bitrate;
@@ -206,7 +208,8 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
pusch_llr = (int16_t*) phy_vars_enb->lte_eNB_pusch_vars[UE_id]->llr;
pusch_comp = (int16_t*) phy_vars_enb->lte_eNB_pusch_vars[UE_id]->rxdataF_comp[eNB_id][0];
pucch1_comp = (int32_t*) phy_vars_enb->pucch1_stats[UE_id];
- pucch1ab_comp = (int16_t*) phy_vars_enb->pucch1ab_stats[UE_id];
+ pucch1_thres = (int32_t*) phy_vars_enb->pucch1_stats_thres[UE_id];
+ pucch1ab_comp = (int32_t*) phy_vars_enb->pucch1ab_stats[UE_id];
// Received signal in time domain of receive antenna 0
if (rxsig_t != NULL) {
@@ -236,19 +239,21 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
if (chest_t[0] !=NULL) {
for (i=0; i<(frame_parms->ofdm_symbol_size); i++) {
- chest_t_abs[0][i] = 10*log10((float) (chest_t[0][2*i]*chest_t[0][2*i]+chest_t[0][2*i+1]*chest_t[0][2*i+1]));
+ i2 = (i+(frame_parms->ofdm_symbol_size>>1))%frame_parms->ofdm_symbol_size;
+ time2[i] = (float)(i-(frame_parms->ofdm_symbol_size>>1));
+ chest_t_abs[0][i] = 10*log10((float) (1+chest_t[0][2*i2]*chest_t[0][2*i2]+chest_t[0][2*i2+1]*chest_t[0][2*i2+1]));
if (chest_t_abs[0][i] > ymax)
ymax = chest_t_abs[0][i];
}
- fl_set_xyplot_data(form->chest_t,time,chest_t_abs[0],(frame_parms->ofdm_symbol_size),"","","");
+ fl_set_xyplot_data(form->chest_t,time2,chest_t_abs[0],(frame_parms->ofdm_symbol_size),"","","");
}
for (arx=1; arxofdm_symbol_size>>3); i++) {
- chest_t_abs[arx][i] = 10*log10((float) (chest_t[arx][2*i]*chest_t[arx][2*i]+chest_t[arx][2*i+1]*chest_t[arx][2*i+1]));
+ chest_t_abs[arx][i] = 10*log10((float) (1+chest_t[arx][2*i]*chest_t[arx][2*i]+chest_t[arx][2*i+1]*chest_t[arx][2*i+1]));
if (chest_t_abs[arx][i] > ymax)
ymax = chest_t_abs[arx][i];
@@ -337,16 +342,20 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
// PUSCH I/Q of MF Output
if (pucch1ab_comp!=NULL) {
for (ind=0; ind<10240; ind++) {
- I_pucch[ind] = pucch1ab_comp[2*ind];
- Q_pucch[ind] = pucch1ab_comp[2*ind+1];
+
+ I_pucch[ind] = (float)pucch1ab_comp[2*(ind)];
+ Q_pucch[ind] = (float)pucch1ab_comp[2*(ind)+1];
A_pucch[ind] = 10*log10(pucch1_comp[ind]);
B_pucch[ind] = ind;
+ C_pucch[ind] = (float)pucch1_thres[ind];
}
fl_set_xyplot_data(form->pucch_comp,I_pucch,Q_pucch,10240,"","","");
fl_set_xyplot_data(form->pucch_comp1,B_pucch,A_pucch,1024,"","","");
- fl_set_xyplot_xbounds(form->pucch_comp,-200,200);
- fl_set_xyplot_ybounds(form->pucch_comp,-100,100);
- fl_set_xyplot_ybounds(form->pucch_comp1,10,40);
+ fl_add_xyplot_overlay(form->pucch_comp1,1,B_pucch,C_pucch,1024,FL_RED);
+ fl_set_xyplot_ybounds(form->pucch_comp,-5000,5000);
+ fl_set_xyplot_xbounds(form->pucch_comp,-5000,5000);
+
+ fl_set_xyplot_ybounds(form->pucch_comp1,20,80);
}
@@ -369,6 +378,7 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
free(chest_f_abs);
}
+
FD_lte_phy_scope_ue *create_lte_phy_scope_ue( void ) {
FL_OBJECT *obj;
diff --git a/openair1/PHY/TOOLS/signal_energy.c b/openair1/PHY/TOOLS/signal_energy.c
index 323a1831dc..373fdc0d90 100755
--- a/openair1/PHY/TOOLS/signal_energy.c
+++ b/openair1/PHY/TOOLS/signal_energy.c
@@ -197,7 +197,7 @@ int32_t signal_energy(int32_t *input,uint32_t length)
for (i=0; i>1; i++) {
tmpE = vqaddq_s32(tmpE,vshrq_n_s32(vmull_s16(*in,*in),shift));
- tmpDC = vaddw_s16(tmpDC,vshr_n_s16(*in++,shift_DC));
+ //tmpDC = vaddw_s16(tmpDC,vshr_n_s16(*in++,shift_DC));
}
diff --git a/openair1/PHY/TOOLS/time_meas.h b/openair1/PHY/TOOLS/time_meas.h
index a3df897053..3e621ac281 100644
--- a/openair1/PHY/TOOLS/time_meas.h
+++ b/openair1/PHY/TOOLS/time_meas.h
@@ -26,6 +26,9 @@
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
*******************************************************************************/
+#ifndef __TIME_MEAS_DEFS__H__
+#define __TIME_MEAS_DEFS__H__
+
#include
#include
#include
@@ -148,3 +151,4 @@ static inline void copy_meas(time_stats_t *dst_ts,time_stats_t *src_ts)
dst_ts->max=src_ts->max;
}
}
+#endif
diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h
index 398861cabf..f308c0500a 100755
--- a/openair1/PHY/defs.h
+++ b/openair1/PHY/defs.h
@@ -76,6 +76,13 @@
#define openair_free(y,x) free((y))
#define PAGE_SIZE 4096
+//#ifdef SHRLIBDEV
+//extern int rxrescale;
+//#define RX_IQRESCALELEN rxrescale
+//#else
+//#define RX_IQRESCALELEN 15
+//#endif
+
//! \brief Allocate \c size bytes of memory on the heap with alignment 16 and zero it afterwards.
//! If no more memory is available, this function will terminate the program with an assertion error.
static inline void* malloc16_clear( size_t size )
@@ -313,6 +320,8 @@ typedef struct PHY_VARS_eNB_s {
struct PhysicalConfigDedicated *physicalConfigDedicated[NUMBER_OF_UE_MAX];
+ uint32_t rb_mask_ul[4];
+
/// Information regarding TM5
MU_MIMO_mode mu_mimo_mode[NUMBER_OF_UE_MAX];
@@ -374,12 +383,13 @@ typedef struct PHY_VARS_eNB_s {
#ifdef LOCALIZATION
/// time state for localization
time_stats_t localization_stats;
-#endif
+#endif
int32_t pucch1_stats_cnt[NUMBER_OF_UE_MAX][10];
int32_t pucch1_stats[NUMBER_OF_UE_MAX][10*1024];
+ int32_t pucch1_stats_thres[NUMBER_OF_UE_MAX][10*1024];
int32_t pucch1ab_stats_cnt[NUMBER_OF_UE_MAX][10];
- int32_t pucch1ab_stats[NUMBER_OF_UE_MAX][10*1024];
+ int32_t pucch1ab_stats[NUMBER_OF_UE_MAX][2*10*1024];
#if ENABLE_RAL
hash_table_t *ral_thresholds_timed;
diff --git a/openair1/PHY/impl_defs_lte.h b/openair1/PHY/impl_defs_lte.h
index a4d3b0ea6c..2d526d3cff 100644
--- a/openair1/PHY/impl_defs_lte.h
+++ b/openair1/PHY/impl_defs_lte.h
@@ -516,10 +516,10 @@ typedef struct {
uint8_t dual_tx;
/// flag to indicate SISO transmission
uint8_t mode1_flag;
+ /// Indicator that 20 MHz channel uses 3/4 sampling frequency
+ uint8_t threequarter_fs;
/// Size of FFT
uint16_t ofdm_symbol_size;
- /// log2(Size of FFT)
- uint8_t log2_symbol_size;
/// Number of prefix samples in all but first symbol of slot
uint16_t nb_prefix_samples;
/// Number of prefix samples in first symbol of slot
diff --git a/openair1/PHY/impl_defs_top.h b/openair1/PHY/impl_defs_top.h
index 51a9c50a4d..7768653fe9 100755
--- a/openair1/PHY/impl_defs_top.h
+++ b/openair1/PHY/impl_defs_top.h
@@ -44,7 +44,14 @@
/** @defgroup _ref_implementation_ OpenAirInterface LTE Implementation
* @{
- * @defgroup _PHY_RF_INTERFACE_ Generic PHY - RF Interface
+ * @defgroup _PHY_RF_INTERFACE_ PHY - RF Interface
+ * @ingroup _PHY_RF_INTERFACE_
+ * @{
+ * @defgroup _GENERIC_PHY_RF_INTERFACE_ Generic PHY - RF Interface
+ * @defgroup _USRP_PHY_RF_INTERFACE_ PHY - USRP RF Interface
+ * @defgroup _BLADERF_PHY_RF_INTERFACE_ PHY - BLADERF RF Interface
+ * @}
+ *
* @ingroup _ref_implementation_
* @{
* This module is responsible for defining the generic interface between PHY and RF Target
@@ -117,7 +124,6 @@
*/
#define NUMBER_OF_OFDM_CARRIERS (frame_parms->ofdm_symbol_size)
#define NUMBER_OF_SYMBOLS_PER_FRAME (frame_parms->symbols_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME)
-#define LOG2_NUMBER_OF_OFDM_CARRIERS (frame_parms->log2_symbol_size)
#define NUMBER_OF_USEFUL_CARRIERS (12*frame_parms->N_RB_DL)
#define NUMBER_OF_ZERO_CARRIERS (NUMBER_OF_OFDM_CARRIERS-NUMBER_OF_USEFUL_CARRIERS)
#define NUMBER_OF_USEFUL_CARRIERS_BYTES (NUMBER_OF_USEFUL_CARRIERS>>2)
@@ -340,13 +346,12 @@ typedef struct {
#define NUMBER_OF_SUBBANDS_MAX 13
#define NUMBER_OF_HARQ_PID_MAX 8
-#if defined(CBMIMO1) || defined(EXMIMO) || defined(OAI_USRP)
#define MAX_FRAME_NUMBER 0x400
+#if defined(CBMIMO1) || defined(EXMIMO) || defined(OAI_USRP)
#define NUMBER_OF_eNB_MAX 1
#define NUMBER_OF_UE_MAX 4
#define NUMBER_OF_CONNECTED_eNB_MAX 3
#else
-#define MAX_FRAME_NUMBER 0xFFFF
#ifdef LARGE_SCALE
#define NUMBER_OF_eNB_MAX 2
#define NUMBER_OF_UE_MAX 120
@@ -471,13 +476,13 @@ typedef struct {
//! estimated avg noise power (dB)
short n0_power_tot_dBm;
//! estimated avg noise power per RB per RX ant (lin)
- unsigned short n0_subband_power[NB_ANTENNAS_RX][25];
+ unsigned short n0_subband_power[NB_ANTENNAS_RX][100];
//! estimated avg noise power per RB per RX ant (dB)
- unsigned short n0_subband_power_dB[NB_ANTENNAS_RX][25];
+ unsigned short n0_subband_power_dB[NB_ANTENNAS_RX][100];
//! estimated avg noise power per RB (dB)
- short n0_subband_power_tot_dB[25];
+ short n0_subband_power_tot_dB[100];
//! estimated avg noise power per RB (dBm)
- short n0_subband_power_tot_dBm[25];
+ short n0_subband_power_tot_dBm[100];
// eNB measurements (per user)
//! estimated received spatial signal power (linear)
unsigned int rx_spatial_power[NUMBER_OF_UE_MAX][2][2];
@@ -497,13 +502,13 @@ typedef struct {
/// Wideband CQI (sum of all RX antennas, in dB)
char wideband_cqi_tot[NUMBER_OF_UE_MAX];
/// Subband CQI per RX antenna and RB (= SINR)
- int subband_cqi[NUMBER_OF_UE_MAX][NB_ANTENNAS_RX][25];
+ int subband_cqi[NUMBER_OF_UE_MAX][NB_ANTENNAS_RX][100];
/// Total Subband CQI and RB (= SINR)
- int subband_cqi_tot[NUMBER_OF_UE_MAX][25];
+ int subband_cqi_tot[NUMBER_OF_UE_MAX][100];
/// Subband CQI in dB and RB (= SINR dB)
- int subband_cqi_dB[NUMBER_OF_UE_MAX][NB_ANTENNAS_RX][25];
+ int subband_cqi_dB[NUMBER_OF_UE_MAX][NB_ANTENNAS_RX][100];
/// Total Subband CQI and RB
- int subband_cqi_tot_dB[NUMBER_OF_UE_MAX][25];
+ int subband_cqi_tot_dB[NUMBER_OF_UE_MAX][100];
} PHY_MEASUREMENTS_eNB;
diff --git a/openair1/SCHED/defs.h b/openair1/SCHED/defs.h
index a88327ba92..8692a31f12 100644
--- a/openair1/SCHED/defs.h
+++ b/openair1/SCHED/defs.h
@@ -399,7 +399,6 @@ uint32_t pdcch_alloc2ul_frame(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame, ui
uint16_t get_Np(uint8_t N_RB_DL,uint8_t nCCE,uint8_t plus1);
-int get_nCCE_offset(unsigned char L, int nCCE, int common_dci, unsigned short rnti, unsigned char subframe);
void put_harq_pid_in_freelist(LTE_eNB_DLSCH_t *DLSCH_ptr, int harq_pid);
void remove_harq_pid_from_freelist(LTE_eNB_DLSCH_t *DLSCH_ptr, int harq_pid);
diff --git a/openair1/SCHED/phy_procedures_lte_common.c b/openair1/SCHED/phy_procedures_lte_common.c
index ce659a60f8..c51bd82d8a 100755
--- a/openair1/SCHED/phy_procedures_lte_common.c
+++ b/openair1/SCHED/phy_procedures_lte_common.c
@@ -405,8 +405,8 @@ uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms,
if (harq_ack[0].send_harq_status == 1)
o_ACK[1] = harq_ack[0].ack;
- } else if (harq_ack[8].send_harq_status == 1)
- o_ACK[0] = harq_ack[8].ack;
+ } else if (harq_ack[0].send_harq_status == 1)
+ o_ACK[0] = harq_ack[0].ack;
status = harq_ack[9].send_harq_status + (harq_ack[0].send_harq_status<<1);
//printf("Subframe 4, TDD config 3: harq_ack[9] = %d,harq_ack[0] = %d\n",harq_ack[9].ack,harq_ack[0].ack);
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index d073657519..60cd0ec0f7 100755
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -104,7 +104,6 @@ extern uint8_t smbv_frame_cnt;
#ifdef DIAG_PHY
extern int rx_sig_fifo;
#endif
-static unsigned char I0_clear = 1;
uint8_t is_SR_subframe(PHY_VARS_eNB *phy_vars_eNB,uint8_t UE_id,uint8_t sched_subframe)
{
@@ -322,100 +321,6 @@ int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16
return(0);
}
-int CCE_table[800];
-
-void init_nCCE_table(void)
-{
- memset(CCE_table,0,800*sizeof(int));
-}
-
-
-int get_nCCE_offset(const unsigned char L, const int nCCE, const int common_dci, const unsigned short rnti, const unsigned char subframe)
-{
-
- int search_space_free,m,nb_candidates = 0,l,i;
- unsigned int Yk;
-
- /*
- printf("CCE Allocation: ");
- for (i=0;i=0 ; m--) {
- search_space_free = 1;
- for (l=0; lPHY_measurements_eNB[0].n0_power_tot_dBm;
@@ -501,6 +406,7 @@ void phy_procedures_eNB_S_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars
if (abstraction_flag == 0) {
lte_eNB_I0_measurements(phy_vars_eNB,
+ subframe,
0,
phy_vars_eNB->first_run_I0_measurements);
}
@@ -514,8 +420,6 @@ void phy_procedures_eNB_S_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars
#endif
- if (I0_clear == 1)
- I0_clear = 0;
}
@@ -1838,15 +1742,18 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
phy_vars_eNB->dlsch_eNB[i][0]->subframe_tx[subframe] = 0;
}
- init_nCCE_table();
+ // init_nCCE_table();
- num_pdcch_symbols = get_num_pdcch_symbols(DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci,
- DCI_pdu->dci_alloc,
- &phy_vars_eNB->lte_frame_parms,
- subframe);
+ num_pdcch_symbols = DCI_pdu->num_pdcch_symbols;
+ /*get_num_pdcch_symbols(DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci,
+ DCI_pdu->dci_alloc,
+ &phy_vars_eNB->lte_frame_parms,
+ subframe);*/
+ /*
DCI_pdu->nCCE = get_nCCE(num_pdcch_symbols,
&phy_vars_eNB->lte_frame_parms,
- get_mi(&phy_vars_eNB->lte_frame_parms,subframe));
+ get_mi(&phy_vars_eNB->lte_frame_parms,subframe));*/
+
LOG_D(PHY,"num_pdcch_symbols %"PRIu8", nCCE %u (dci commond %"PRIu8", dci uespec %"PRIu8"\n",num_pdcch_symbols,DCI_pdu->nCCE,
DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci);
@@ -1862,6 +1769,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
#endif
for (i=0; iNum_common_dci + DCI_pdu->Num_ue_spec_dci ; i++) {
+ LOG_D(PHY,"[eNB] Subframe %d: DCI %d/%d : rnti %x, CCEind %d\n",subframe,i,DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci,DCI_pdu->dci_alloc[i].rnti,DCI_pdu->dci_alloc[i].firstCCE);
#ifdef DEBUG_PHY_PROC
if (DCI_pdu->dci_alloc[i].rnti != SI_RNTI) {
@@ -1889,28 +1797,21 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single);
- int result = get_nCCE_offset(1<dci_alloc[i].L, DCI_pdu->nCCE, 1, SI_RNTI, subframe);
- phy_vars_eNB->dlsch_eNB_SI->nCCE[subframe] = result;
-
- if (result == -1) {
- // FIXME what happens to phy_vars_eNB->dlsch_eNB_SI->nCCE[subframe]?
- LOG_E(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : No available CCE resources for common DCI (SI)!!!\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
- } else {
- LOG_T(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for common DCI (SI) => %"PRIu8"/%u\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
- phy_vars_eNB->dlsch_eNB_SI->nCCE[subframe],DCI_pdu->nCCE);
+ phy_vars_eNB->dlsch_eNB_SI->nCCE[subframe] = DCI_pdu->dci_alloc[i].firstCCE;
+ LOG_T(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for common DCI (SI) => %"PRIu8"/%u\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
+ phy_vars_eNB->dlsch_eNB_SI->nCCE[subframe],DCI_pdu->nCCE);
+
#if defined(SMBV) && !defined(EXMIMO)
- // configure SI DCI
- if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
- msg("[SMBV] Frame %3d, SI in SF %d DCI %"PRIu32"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
- smbv_configure_common_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), "SI", &DCI_pdu->dci_alloc[i], i);
- }
-
-#endif
+ // configure SI DCI
+ if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
+ msg("[SMBV] Frame %3d, SI in SF %d DCI %"PRIu32"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
+ smbv_configure_common_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), "SI", &DCI_pdu->dci_alloc[i], i);
}
-
- DCI_pdu->dci_alloc[i].nCCE = phy_vars_eNB->dlsch_eNB_SI->nCCE[subframe];
+
+#endif
+
} else if (DCI_pdu->dci_alloc[i].ra_flag == 1) {
#ifdef DEBUG_PHY_PROC
@@ -1931,28 +1832,20 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
// mac_xface->macphy_exit("Transmitted RAR, exiting\n");
- int result = get_nCCE_offset(1<dci_alloc[i].L, DCI_pdu->nCCE, 1, DCI_pdu->dci_alloc[i].rnti, subframe);
- phy_vars_eNB->dlsch_eNB_ra->nCCE[subframe] = result;
- if (result == -1) {
- // FIXME what happens to phy_vars_eNB->dlsch_eNB_ra->nCCE[subframe]?
- LOG_E(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : No available CCE resources for common DCI (RA) !!!\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
- } else {
- LOG_D(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for common DCI (RA) => %"PRIu8"/%u\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
- phy_vars_eNB->dlsch_eNB_ra->nCCE[subframe],DCI_pdu->nCCE);
+ phy_vars_eNB->dlsch_eNB_ra->nCCE[subframe] = DCI_pdu->dci_alloc[i].firstCCE;
+
+ LOG_D(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for common DCI (RA) => %"PRIu8"/%u\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
+ phy_vars_eNB->dlsch_eNB_ra->nCCE[subframe],DCI_pdu->nCCE);
#if defined(SMBV) && !defined(EXMIMO)
- // configure RA DCI
- if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
- msg("[SMBV] Frame %3d, RA in SF %d DCI %"PRIu32"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
- smbv_configure_common_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), "RA", &DCI_pdu->dci_alloc[i], i);
- }
-
-#endif
-
+ // configure RA DCI
+ if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
+ msg("[SMBV] Frame %3d, RA in SF %d DCI %"PRIu32"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
+ smbv_configure_common_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), "RA", &DCI_pdu->dci_alloc[i], i);
}
- DCI_pdu->dci_alloc[i].nCCE = phy_vars_eNB->dlsch_eNB_ra->nCCE[subframe];
+#endif
}
@@ -1993,30 +1886,22 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
LOG_D(PHY,"[eNB %"PRIu8"][PDSCH %"PRIx16"/%"PRIu8"] Frame %d subframe %d: Generated dlsch params\n",
phy_vars_eNB->Mod_id,DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->current_harq_pid,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
- int result = get_nCCE_offset(1<dci_alloc[i].L, DCI_pdu->nCCE, 0, DCI_pdu->dci_alloc[i].rnti, subframe);
- phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe] = result;
- if (result == -1) {
- // FIXME what happens to phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe]?
- LOG_E(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : No available CCE resources for UE spec DCI (PDSCH %"PRIx16") !!!\n",
- phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,DCI_pdu->dci_alloc[i].rnti);
- } else {
- LOG_D(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for ue DCI (PDSCH %"PRIx16") => %"PRIu8"/%u\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
- DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe],DCI_pdu->nCCE);
+ phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe] = DCI_pdu->dci_alloc[i].firstCCE;
+
+ LOG_D(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for ue DCI (PDSCH %"PRIx16") => %"PRIu8"/%u\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
+ DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe],DCI_pdu->nCCE);
#if defined(SMBV) && !defined(EXMIMO)
- DCI_pdu->dci_alloc[i].nCCE = phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe];
-
- // configure UE-spec DCI
- if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
- msg("[SMBV] Frame %3d, PDSCH in SF %d DCI %"PRIu32"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
- smbv_configure_ue_spec_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), UE_id+1, &DCI_pdu->dci_alloc[i], i);
- }
+
+ // configure UE-spec DCI
+ if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
+ msg("[SMBV] Frame %3d, PDSCH in SF %d DCI %"PRIu32"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
+ smbv_configure_ue_spec_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), UE_id+1, &DCI_pdu->dci_alloc[i], i);
+ }
#endif
- }
- DCI_pdu->dci_alloc[i].nCCE = phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe];
#ifdef DEBUG_PHY_PROC
//if (phy_vars_eNB->proc[sched_subframe].frame_tx%100 == 0)
LOG_D(PHY,"[eNB %"PRIu8"][DCI][PDSCH %"PRIx16"] Frame %d subframe %d UE_id %"PRId8" Generated DCI format %d, aggregation %d\n",
@@ -2094,29 +1979,21 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
CBA_RNTI,
0); // do_srs
- if ((DCI_pdu->dci_alloc[i].nCCE=get_nCCE_offset(1<dci_alloc[i].L,
- DCI_pdu->nCCE,
- 0,
- DCI_pdu->dci_alloc[i].rnti,
- subframe)) == -1) {
- LOG_E(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : No available CCE resources (%u) for UE spec DCI (PUSCH %"PRIx16") !!!\n",
- phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,DCI_pdu->nCCE,DCI_pdu->dci_alloc[i].rnti);
- } else {
- LOG_T(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resources for UE spec DCI (PUSCH %"PRIx16") => %d/%u\n",
- phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,DCI_pdu->dci_alloc[i].rnti,
- DCI_pdu->dci_alloc[i].nCCE,DCI_pdu->nCCE);
-
+ LOG_T(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resources for UE spec DCI (PUSCH %"PRIx16") => %d/%u\n",
+ phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,DCI_pdu->dci_alloc[i].rnti,
+ DCI_pdu->dci_alloc[i].firstCCE,DCI_pdu->nCCE);
+
#if defined(SMBV) && !defined(EXMIMO)
// configure UE-spec DCI for UL Grant
- if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
- msg("[SMBV] Frame %3d, SF %d UL DCI %"PRIu32"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
- smbv_configure_ue_spec_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), UE_id+1, &DCI_pdu->dci_alloc[i], i);
- }
-
+ if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
+ msg("[SMBV] Frame %3d, SF %d UL DCI %"PRIu32"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
+ smbv_configure_ue_spec_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), UE_id+1, &DCI_pdu->dci_alloc[i], i);
+ }
+
#endif
- }
+
#ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[eNB %"PRIu8"][PUSCH %"PRIu8"] frame %d subframe %d Setting subframe_scheduling_flag for UE %"PRIu32" harq_pid %"PRIu8" (ul subframe %"PRIu8")\n",
@@ -2147,13 +2024,13 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
}
if (abstraction_flag == 0) {
-#ifdef DEBUG_PHY_PROC
+ //#ifdef DEBUG_PHY_PROC
if (DCI_pdu->Num_ue_spec_dci+DCI_pdu->Num_common_dci > 0)
LOG_D(PHY,"[eNB %"PRIu8"] Frame %d, subframe %d: Calling generate_dci_top (pdcch) (common %"PRIu8",ue_spec %"PRIu8")\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx, subframe,
DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci);
-#endif
+ //#endif
// for (sect_id=0;sect_idNum_ue_spec_dci,
@@ -2436,7 +2313,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
input_buffer_length = phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->TBS/8;
-#ifdef DEBUG_PHY_PROC
+ //#ifdef DEBUG_PHY_PROC
LOG_D(PHY,
"[eNB %"PRIu8"][PDSCH %"PRIx16"/%"PRIu8"] Frame %d, subframe %d: Generating PDSCH/DLSCH with input size = %"PRIu16", G %d, nb_rb %"PRIu16", mcs %"PRIu8", pmi_alloc %"PRIx16", rv %"PRIu8" (round %"PRIu8")\n",
phy_vars_eNB->Mod_id, phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->rnti,harq_pid,
@@ -2452,7 +2329,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
pmi2hex_2Ar1(phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->pmi_alloc),
phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->rvidx,
phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->round);
-#endif
+ //#endif
#if defined(MESSAGE_CHART_GENERATOR_PHY)
MSC_LOG_TX_MESSAGE(
MSC_PHY_ENB,MSC_PHY_UE,
@@ -3245,7 +3122,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
int16_t n1_pucch0,n1_pucch1,n1_pucch2,n1_pucch3;
uint8_t do_SR = 0;
uint8_t pucch_sel = 0;
- int32_t metric0=0,metric1=0;
+ int32_t metric0=0,metric1=0,metric0_SR=0;
ANFBmode_t bundling_flag;
PUCCH_FMT_t format;
uint8_t nPRS;
@@ -3274,6 +3151,11 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
phy_vars_eNB->lte_frame_parms.samples_per_tti);
#endif
*/
+ phy_vars_eNB->rb_mask_ul[0]=0;
+ phy_vars_eNB->rb_mask_ul[1]=0;
+ phy_vars_eNB->rb_mask_ul[2]=0;
+ phy_vars_eNB->rb_mask_ul[3]=0;
+
if (abstraction_flag == 0) {
remove_7_5_kHz(phy_vars_eNB,subframe<<1);
remove_7_5_kHz(phy_vars_eNB,(subframe<<1)+1);
@@ -3422,6 +3304,12 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
pusch_active = 1;
round = phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round;
+ for (int rb=0;
+ rb<=phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb;
+ rb++) {
+ int rb2 = rb+phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->first_rb;
+ phy_vars_eNB->rb_mask_ul[rb2>>5] |= (1<<(rb2&31));
+ }
#ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d Scheduling PUSCH/ULSCH Reception for rnti %x (UE_id %d)\n",
phy_vars_eNB->Mod_id,harq_pid,
@@ -3463,7 +3351,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
}
}
-#ifdef DEBUG_PHY_PROC
+ //#ifdef DEBUG_PHY_PROC
LOG_D(PHY,
"[eNB %d][PUSCH %d] Frame %d Subframe %d Demodulating PUSCH: dci_alloc %d, rar_alloc %d, round %d, first_rb %d, nb_rb %d, mcs %d, TBS %d, rv %d, cyclic_shift %d (n_DMRS2 %d, cyclicShift_common %d, nprs %d), O_ACK %d \n",
phy_vars_eNB->Mod_id,harq_pid,frame,subframe,
@@ -3480,7 +3368,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
phy_vars_eNB->lte_frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift,
nPRS,
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->O_ACK);
-#endif
+ //#endif
start_meas(&phy_vars_eNB->ulsch_demodulation_stats);
if (abstraction_flag==0) {
@@ -3526,7 +3414,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
#endif
stop_meas(&phy_vars_eNB->ulsch_decoding_stats);
-#ifdef DEBUG_PHY_PROC
+ //#ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) RSSI (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d\n",
phy_vars_eNB->Mod_id,harq_pid,
frame,subframe,
@@ -3540,7 +3428,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_ACK[0],
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_ACK[1],
ret);
-#endif //DEBUG_PHY_PROC
+ //#endif //DEBUG_PHY_PROC
/*
if ((two_ues_connected==1) && (phy_vars_eNB->cooperation_flag==2)) {
for (j=0;jlte_frame_parms.nb_antennas_rx;j++) {
@@ -3742,13 +3630,19 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
for (j=0; jlte_frame_parms.nb_antennas_rx; j++)
//this is the RSSI per RB
phy_vars_eNB->eNB_UE_stats[i].UL_rssi[j] =
+
dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[j]*
(phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb*12)/
phy_vars_eNB->lte_frame_parms.ofdm_symbol_size) -
phy_vars_eNB->rx_total_gain_eNB_dB -
hundred_times_log10_NPRB[phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb-1]/100 -
get_hundred_times_delta_IF_eNB(phy_vars_eNB,i,harq_pid, 0)/100;
-
+
+ /*
+ dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[j]*phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb) -
+ phy_vars_eNB->rx_total_gain_eNB_dB -
+ hundred_times_log10_NPRB[phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb-1]/100 -
+ get_hundred_times_delta_IF_eNB(phy_vars_eNB,i,harq_pid, 0)/100;*/
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 1;
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_ACK = 1;
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round = 0;
@@ -3756,11 +3650,11 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
if (phy_vars_eNB->ulsch_eNB[i]->Msg3_flag == 1) {
#ifdef OPENAIR2
-#ifdef DEBUG_PHY_PROC
+ //#ifdef DEBUG_PHY_PROC
LOG_I(PHY,"[eNB %d][RAPROC] Frame %d Terminating ra_proc for harq %d, UE %d\n",
phy_vars_eNB->Mod_id,
frame,harq_pid,i);
-#endif
+ //#endif
mac_xface->rx_sdu(phy_vars_eNB->Mod_id,
phy_vars_eNB->CC_id,
frame,subframe,
@@ -3770,7 +3664,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
harq_pid,
&phy_vars_eNB->ulsch_eNB[i]->Msg3_flag);
- // false msg3 detection by MAC: empty PDU
+ // one-shot msg3 detection by MAC: empty PDU (e.g. CRNTI)
if (phy_vars_eNB->ulsch_eNB[i]->Msg3_flag == 0 ) {
phy_vars_eNB->eNB_UE_stats[i].mode = PRACH;
mac_xface->cancel_ra_proc(phy_vars_eNB->Mod_id,
@@ -3793,9 +3687,9 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
phy_vars_eNB->eNB_UE_stats[i].mode = PUSCH;
phy_vars_eNB->ulsch_eNB[i]->Msg3_flag = 0;
-#ifdef DEBUG_PHY_PROC
- LOG_D(PHY,"[eNB %d][RAPROC] Frame %d : RX Subframe %d Setting UE %d mode to PUSCH\n",phy_vars_eNB->Mod_id,frame,subframe,i);
-#endif //DEBUG_PHY_PROC
+ //#ifdef DEBUG_PHY_PROC
+ LOG_D(PHY,"[eNB %d][RAPROC] Frame %d : RX Subframe %d Setting UE %d mode to PUSCH\n",phy_vars_eNB->Mod_id,frame,subframe,i);
+ //#endif //DEBUG_PHY_PROC
for (k=0; k<8; k++) { //harq_processes
for (j=0; jdlsch_eNB[i][0]->Mdlharq; j++) {
@@ -3942,28 +3836,56 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
} else {
// otherwise we have some PUCCH detection to do
+ // Null out PUCCH PRBs for noise measurement
+ switch(phy_vars_eNB->lte_frame_parms.N_RB_UL) {
+ case 6:
+ phy_vars_eNB->rb_mask_ul[0] |= (0x1 | (1<<5)); //position 5
+ break;
+ case 15:
+ phy_vars_eNB->rb_mask_ul[0] |= (0x1 | (1<<14)); // position 14
+ break;
+ case 25:
+ phy_vars_eNB->rb_mask_ul[0] |= (0x1 | (1<<24)); // position 24
+ break;
+ case 50:
+ phy_vars_eNB->rb_mask_ul[0] |= 0x1;
+ phy_vars_eNB->rb_mask_ul[1] |= (1<<17); // position 49 (49-32)
+ break;
+ case 75:
+ phy_vars_eNB->rb_mask_ul[0] |= 0x1;
+ phy_vars_eNB->rb_mask_ul[2] |= (1<<10); // position 74 (74-64)
+ break;
+ case 100:
+ phy_vars_eNB->rb_mask_ul[0] |= 0x1;
+ phy_vars_eNB->rb_mask_ul[3] |= (1<<3); // position 99 (99-96)
+ break;
+ default:
+ LOG_E(PHY,"Unknown number for N_RB_UL %d\n",phy_vars_eNB->lte_frame_parms.N_RB_UL);
+ break;
+ }
+
if (do_SR == 1) {
phy_vars_eNB->eNB_UE_stats[i].sr_total++;
if (abstraction_flag == 0)
- metric0 = rx_pucch(phy_vars_eNB,
- pucch_format1,
- i,
- phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex,
- 0, // n2_pucch
- 1, // shortened format
- &SR_payload,
- subframe,
- PUCCH1_THRES);
+ metric0_SR = rx_pucch(phy_vars_eNB,
+ pucch_format1,
+ i,
+ phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex,
+ 0, // n2_pucch
+ 0, // shortened format, should be use_srs flag, later
+ &SR_payload,
+ subframe,
+ PUCCH1_THRES);
#ifdef PHY_ABSTRACTION
else {
- metric0 = rx_pucch_emul(phy_vars_eNB,
- i,
- pucch_format1,
- 0,
- &SR_payload,
- sched_subframe);
+ metric0_SR = rx_pucch_emul(phy_vars_eNB,
+ i,
+ pucch_format1,
+ 0,
+ &SR_payload,
+ sched_subframe);
LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d Checking SR (UE SR %d/%d)\n",phy_vars_eNB->Mod_id,
phy_vars_eNB->ulsch_eNB[i]->rnti,frame,subframe,SR_payload,phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex);
}
@@ -3999,20 +3921,35 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
if ((n1_pucch0==-1) && (n1_pucch1==-1)) { // just check for SR
} else if (phy_vars_eNB->lte_frame_parms.frame_type==FDD) { // FDD
// if SR was detected, use the n1_pucch from SR, else use n1_pucch0
- n1_pucch0 = (SR_payload==1) ? phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex:n1_pucch0;
+ // n1_pucch0 = (SR_payload==1) ? phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex:n1_pucch0;
LOG_D(PHY,"Demodulating PUCCH for ACK/NAK: n1_pucch0 %d (%d), SR_payload %d\n",n1_pucch0,phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex,SR_payload);
- if (abstraction_flag == 0)
+ if (abstraction_flag == 0) {
+
+
+
metric0 = rx_pucch(phy_vars_eNB,
pucch_format1a,
i,
(uint16_t)n1_pucch0,
0, //n2_pucch
- 1, // shortened format
+ 0, // shortened format
pucch_payload0,
subframe,
PUCCH1a_THRES);
+
+ if (metric0 < metric0_SR)
+ metric0=rx_pucch(phy_vars_eNB,
+ pucch_format1a,
+ i,
+ phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex,
+ 0, //n2_pucch
+ 0, // shortened format
+ pucch_payload0,
+ subframe,
+ PUCCH1a_THRES);
+ }
else {
#ifdef PHY_ABSTRACTION
metric0 = rx_pucch_emul(phy_vars_eNB,i,
@@ -4064,15 +4001,15 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
#endif
if (abstraction_flag == 0)
- metric0 = rx_pucch(phy_vars_eNB,
- format,
- i,
- phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex,
- 0, //n2_pucch
- 1, // shortened format
- pucch_payload0,
- subframe,
- PUCCH1a_THRES);
+ metric0_SR = rx_pucch(phy_vars_eNB,
+ format,
+ i,
+ phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex,
+ 0, //n2_pucch
+ 0, // shortened format
+ pucch_payload0,
+ subframe,
+ PUCCH1a_THRES);
else {
#ifdef PHY_ABSTRACTION
metric0 = rx_pucch_emul(phy_vars_eNB,i,
@@ -4100,7 +4037,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
i,
(uint16_t)n1_pucch0,
0, // n2_pucch
- 1, // shortened format
+ 0, // shortened format
pucch_payload0,
subframe,
PUCCH1a_THRES);
@@ -4123,7 +4060,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
i,
(uint16_t)n1_pucch1,
0, //n2_pucch
- 1, // shortened format
+ 0, // shortened format
pucch_payload1,
subframe,
PUCCH1a_THRES);
@@ -4366,13 +4303,15 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
} // loop i=0 ... NUMBER_OF_UE_MAX-1
- if (pusch_active == 0) {
+ // if (pusch_active == 0) {
if (abstraction_flag == 0) {
// LOG_D(PHY,"[eNB] Frame %d, subframe %d Doing I0_measurements\n",
// (((subframe)==9)?-1:0) + phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
lte_eNB_I0_measurements(phy_vars_eNB,
+ subframe,
0,
phy_vars_eNB->first_run_I0_measurements);
+ phy_vars_eNB->first_run_I0_measurements = 0;
}
#ifdef PHY_ABSTRACTION
@@ -4384,9 +4323,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
#endif
- if (I0_clear == 1)
- I0_clear = 0;
- }
+ //}
#ifdef EMOS
phy_procedures_emos_eNB_RX(subframe,phy_vars_eNB);
@@ -4625,11 +4562,11 @@ void phy_procedures_eNB_lte(unsigned char subframe,PHY_VARS_eNB **phy_vars_eNB,u
phy_vars_eNB[CC_id]->proc[subframe].frame_tx++;
phy_vars_eNB[CC_id]->proc[subframe].frame_rx++;
- if (phy_vars_eNB[CC_id]->proc[subframe].frame_tx==MAX_FRAME_NUMBER) // defined in impl_defs_top.h
- phy_vars_eNB[CC_id]->proc[subframe].frame_tx=0;
+ if (phy_vars_eNB[CC_id]->proc[subframe].frame_tx>=MAX_FRAME_NUMBER) // defined in impl_defs_top.h
+ phy_vars_eNB[CC_id]->proc[subframe].frame_tx-=MAX_FRAME_NUMBER;
- if (phy_vars_eNB[CC_id]->proc[subframe].frame_rx==MAX_FRAME_NUMBER)
- phy_vars_eNB[CC_id]->proc[subframe].frame_rx=0;
+ if (phy_vars_eNB[CC_id]->proc[subframe].frame_rx>=MAX_FRAME_NUMBER)
+ phy_vars_eNB[CC_id]->proc[subframe].frame_rx-=MAX_FRAME_NUMBER;
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_LTE,0);
diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c
index 7dcd71ce47..afaecb7075 100755
--- a/openair1/SCHED/phy_procedures_lte_ue.c
+++ b/openair1/SCHED/phy_procedures_lte_ue.c
@@ -121,7 +121,7 @@ extern int rx_sig_fifo;
#endif
-#if defined(EXMIMO) || defined(OAI_USRP)
+#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
extern uint32_t downlink_frequency[MAX_NUM_CCs][4];
#endif
@@ -168,7 +168,7 @@ void dump_dlsch_SI(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe)
1,
phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
phy_vars_ue->frame_rx,subframe);
- LOG_I(PHY,"[UE %d] Dumping dlsch_SI : ofdm_symbol_size %d, nsymb %d, nb_rb %d, mcs %d, nb_rb %d, num_pdcch_symbols %d,G %d\n",
+ LOG_D(PHY,"[UE %d] Dumping dlsch_SI : ofdm_symbol_size %d, nsymb %d, nb_rb %d, mcs %d, nb_rb %d, num_pdcch_symbols %d,G %d\n",
phy_vars_ue->Mod_id,
phy_vars_ue->lte_frame_parms.ofdm_symbol_size,
nsymb,
@@ -197,7 +197,7 @@ void dump_dlsch_SI(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe)
exit(-1);
}
-#if defined(EXMIMO) || defined(OAI_USRP)
+#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
//unsigned int gain_table[31] = {100,112,126,141,158,178,200,224,251,282,316,359,398,447,501,562,631,708,794,891,1000,1122,1258,1412,1585,1778,1995,2239,2512,2818,3162};
/*
unsigned int get_tx_amp_prach(int power_dBm, int power_max_dBm, int N_RB_UL)
@@ -669,7 +669,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
uint8_t ack_status=0;
int8_t Po_PUCCH;
int32_t ulsch_start=0;
-#if defined(EXMIMO) || defined(OAI_USRP)
+#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
int overflow=0;
int k,l;
#endif
@@ -969,7 +969,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
#endif
phy_vars_ue->tx_total_RE = nb_rb*12;
-#if defined(EXMIMO) || defined(OAI_USRP)
+#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
tx_amp = get_tx_amp(phy_vars_ue->tx_power_dBm,
phy_vars_ue->tx_power_max_dBm,
phy_vars_ue->lte_frame_parms.N_RB_UL,
@@ -1065,7 +1065,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
#endif
phy_vars_ue->tx_total_RE = 12;
-#if defined(EXMIMO) || defined(OAI_USRP)
+#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
tx_amp = get_tx_amp(Po_PUCCH,
phy_vars_ue->tx_power_max_dBm,
phy_vars_ue->lte_frame_parms.N_RB_UL,
@@ -1128,7 +1128,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
#endif
phy_vars_ue->tx_total_RE = 12;
-#if defined(EXMIMO) || defined(OAI_USRP)
+#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
tx_amp = get_tx_amp(Po_PUCCH,
phy_vars_ue->tx_power_max_dBm,
phy_vars_ue->lte_frame_parms.N_RB_UL,
@@ -1230,7 +1230,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
if (abstraction_flag == 0) {
nsymb = (frame_parms->Ncp == 0) ? 14 : 12;
-#if defined(EXMIMO) || defined(OAI_USRP) //this is the EXPRESS MIMO case
+#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)//this is the EXPRESS MIMO case
ulsch_start = (phy_vars_ue->rx_offset+subframe_tx*frame_parms->samples_per_tti-
openair_daq_vars.timing_advance-
phy_vars_ue->timing_advance-
@@ -1257,18 +1257,18 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
for (aa=0; aanb_antennas_tx; aa++) {
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(&phy_vars_ue->lte_ue_common_vars.txdataF[aa][subframe_tx*nsymb*frame_parms->ofdm_symbol_size],
-#if defined(EXMIMO) || defined(OAI_USRP)
+#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
dummy_tx_buffer,
#else
&phy_vars_ue->lte_ue_common_vars.txdata[aa][ulsch_start],
#endif
- frame_parms->log2_symbol_size,
+ frame_parms->ofdm_symbol_size,
nsymb,
frame_parms->nb_prefix_samples,
CYCLIC_PREFIX);
else
normal_prefix_mod(&phy_vars_ue->lte_ue_common_vars.txdataF[aa][subframe_tx*nsymb*frame_parms->ofdm_symbol_size],
-#if defined(EXMIMO) || defined(OAI_USRP)
+#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
dummy_tx_buffer,
#else
&phy_vars_ue->lte_ue_common_vars.txdata[aa][ulsch_start],
@@ -1289,7 +1289,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
}
*/
#ifndef OFDMA_ULSCH
-#if defined(EXMIMO) || defined(OAI_USRP)
+#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
apply_7_5_kHz(phy_vars_ue,dummy_tx_buffer,0);
apply_7_5_kHz(phy_vars_ue,dummy_tx_buffer,1);
#else
@@ -1304,7 +1304,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
*/
#endif
-#if defined(EXMIMO) || defined(OAI_USRP)
+#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
overflow = ulsch_start - 9*frame_parms->samples_per_tti;
//if ((slot_tx==4) && (aa==0)) printf("ulsch_start %d, overflow %d\n",ulsch_start,overflow);
@@ -1404,7 +1404,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
phy_vars_ue->tx_total_RE = 96;
-#if defined(EXMIMO) || defined(OAI_USRP)
+#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
phy_vars_ue->lte_ue_prach_vars[eNB_id]->amp = get_tx_amp(phy_vars_ue->tx_power_dBm,
phy_vars_ue->tx_power_max_dBm,
phy_vars_ue->lte_frame_parms.N_RB_UL,
@@ -1553,8 +1553,12 @@ void lte_ue_measurement_procedures(uint16_t l, PHY_VARS_UE *phy_vars_ue,uint8_t
#else
#ifndef OAI_USRP
+#ifndef OAI_BLADERF
+#ifndef OAI_LMSSDR
phy_adjust_gain (phy_vars_ue,0);
#endif
+#endif
+#endif
#endif
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GAIN_CONTROL, VCD_FUNCTION_OUT);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ADJUST_SYNCH, VCD_FUNCTION_IN);
@@ -2061,9 +2065,9 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
#endif
-#ifdef DEBUG_PHY_PROC
+ //#ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[UE %d] Frame %d, slot %d, Mode %s: DCI found %i\n",phy_vars_ue->Mod_id,frame_rx,slot_rx,mode_string[phy_vars_ue->UE_mode[eNB_id]],dci_cnt);
-#endif
+ //#endif
phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_received += dci_cnt;
/*
@@ -2101,10 +2105,10 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
#ifdef DEBUG_PHY_PROC
- if (subframe_rx == 9) { //( frame_rx % 100 == 0) {
+ // if (subframe_rx == 9) { //( frame_rx % 100 == 0) {
LOG_D(PHY,"frame %d, subframe %d, rnti %x: dci %d/%d\n",frame_rx,subframe_rx,phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,i,dci_cnt);
//dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
- }
+ // }
#endif
@@ -2444,7 +2448,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
else
openair_daq_vars.use_ia_receiver = (openair_daq_vars.use_ia_receiver+1)%3;
- LOG_I(PHY,"[MYEMOS] frame %d, IA receiver %d, MCS %d, bitrate %d\n",
+ LOG_D(PHY,"[MYEMOS] frame %d, IA receiver %d, MCS %d, bitrate %d\n",
frame_rx,
openair_daq_vars.use_ia_receiver,
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->mcs,
@@ -2622,13 +2626,13 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
phy_vars_ue->dlsch_ue[eNB_id][0]->active = 0;
-#ifdef DEBUG_PHY_PROC
+ //#ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[UE %d][PDSCH %x/%d] Frame %d subframe %d Scheduling DLSCH decoding\n",
phy_vars_ue->Mod_id,
phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,
harq_pid,
(subframe_prev == 9) ? (frame_rx-1) : frame_rx,subframe_prev);
-#endif
+ //#endif
if (phy_vars_ue->dlsch_ue[eNB_id][0]) {
if (abstraction_flag == 0) {
@@ -2675,15 +2679,16 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
phy_vars_ue->dlsch_errors[eNB_id]++;
#ifdef DEBUG_PHY_PROC
- LOG_D(PHY,"[UE %d][PDSCH %x/%d] Frame %d subframe %d DLSCH in error (rv %d,mcs %d)\n",
+ LOG_D(PHY,"[UE %d][PDSCH %x/%d] Frame %d subframe %d DLSCH in error (rv %d,mcs %d,TBS %d)\n",
phy_vars_ue->Mod_id,phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,
harq_pid,frame_rx,subframe_prev,
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);
-
- // if (abstraction_flag ==0 )
- //dump_dlsch(phy_vars_ue,eNB_id,subframe_prev,harq_pid);
- //mac_xface->macphy_exit("");
+ 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]->TBS);
+/*
+ if (abstraction_flag ==0 )
+ dump_dlsch(phy_vars_ue,eNB_id,subframe_prev,harq_pid);
+ mac_xface->macphy_exit(""); */
#endif
} else {
LOG_D(PHY,"[UE %d][PDSCH %x/%d] Frame %d subframe %d (slot_rx %d): Received DLSCH (rv %d,mcs %d,TBS %d)\n",
@@ -2799,7 +2804,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
frame_rx,subframe_prev);
#ifdef DEBUG_PHY_PROC
- LOG_I(PHY,"Decoding DLSCH_SI : rb_alloc %x : nb_rb %d G %d TBS %d, num_pdcch_sym %d\n",phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[0],
+ LOG_D(PHY,"Decoding DLSCH_SI : rb_alloc %x : nb_rb %d G %d TBS %d, num_pdcch_sym %d\n",phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[0],
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->nb_rb,
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->G,
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->TBS,
@@ -2847,7 +2852,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
if (ret == (1+phy_vars_ue->dlsch_ue_SI[eNB_id]->max_turbo_iterations)) {
phy_vars_ue->dlsch_SI_errors[eNB_id]++;
#ifdef DEBUG_PHY_PROC
- LOG_I(PHY,"[UE %d] Frame %d, subframe %d, received SI in error (TBS %d, mcs %d, rvidx %d, rballoc %X.%X.%X.%X\n",
+ LOG_D(PHY,"[UE %d] Frame %d, subframe %d, received SI in error (TBS %d, mcs %d, rvidx %d, rballoc %X.%X.%X.%X\n",
phy_vars_ue->Mod_id,
frame_rx,
subframe_prev,
@@ -3280,7 +3285,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
}
if (is_pmch_subframe((subframe_rx==9?-1:0)+frame_rx,subframe_rx,&phy_vars_ue->lte_frame_parms)) {
- LOG_I(PHY,"ue calling pmch subframe ..\n ");
+ LOG_D(PHY,"ue calling pmch subframe ..\n ");
if ((slot_rx%2)==1) {
LOG_D(PHY,"[UE %d] Frame %d, subframe %d: Querying for PMCH demodulation(%d)\n",
@@ -3428,7 +3433,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
phy_vars_rn->sync_area[subframe_rx] = sync_area; // this could also go the harq data struct
phy_vars_rn->dlsch_rn_MCH[subframe_rx]->harq_processes[0]->TBS = phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->TBS;
phy_vars_rn->dlsch_rn_MCH[subframe_rx]->harq_processes[0]->mcs = phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->mcs;
- LOG_I(PHY,"[RN/UE %d] Frame %d subframe %d: store the MCH PDU for MBSFN sync area %d (MCS %d, TBS %d)\n",
+ LOG_D(PHY,"[RN/UE %d] Frame %d subframe %d: store the MCH PDU for MBSFN sync area %d (MCS %d, TBS %d)\n",
phy_vars_ue->Mod_id, frame_rx,subframe_rx,sync_area,
phy_vars_rn->dlsch_rn_MCH[subframe_rx]->harq_processes[0]->mcs,
phy_vars_rn->dlsch_rn_MCH[subframe_rx]->harq_processes[0]->TBS>>3);
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c
index 829306ba02..7e59003dfd 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim.c
@@ -108,88 +108,6 @@ void handler(int sig)
exit(1);
}
-void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,uint8_t extended_prefix_flag,uint8_t fdd_flag, uint16_t Nid_cell,uint8_t tdd_config,uint8_t N_RB_DL,
- uint8_t osf,uint32_t perfect_ce)
-{
-
- LTE_DL_FRAME_PARMS *lte_frame_parms;
- int i;
-
-
- printf("Start lte_param_init\n");
- PHY_vars_eNB = malloc(sizeof(PHY_VARS_eNB));
- PHY_vars_UE = malloc(sizeof(PHY_VARS_UE));
- //PHY_config = malloc(sizeof(PHY_CONFIG));
- mac_xface = malloc(sizeof(MAC_xface));
-
- srand(0);
- randominit(0);
- set_taus_seed(0);
-
- lte_frame_parms = &(PHY_vars_eNB->lte_frame_parms);
-
- lte_frame_parms->N_RB_DL = N_RB_DL; //50 for 10MHz and 25 for 5 MHz
- lte_frame_parms->N_RB_UL = N_RB_DL;
- lte_frame_parms->Ncp = extended_prefix_flag;
- lte_frame_parms->Nid_cell = Nid_cell;
- lte_frame_parms->nushift = Nid_cell%6;
- lte_frame_parms->nb_antennas_tx = N_tx;
- lte_frame_parms->nb_antennas_rx = N_rx;
- lte_frame_parms->nb_antennas_tx_eNB = N_tx;
- lte_frame_parms->phich_config_common.phich_resource = one;
- lte_frame_parms->tdd_config = tdd_config;
- lte_frame_parms->frame_type = (fdd_flag==1)?0 : 1;
- // lte_frame_parms->Csrs = 2;
- // lte_frame_parms->Bsrs = 0;
- // lte_frame_parms->kTC = 0;44
- // lte_frame_parms->n_RRC = 0;
- lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
-
- init_frame_parms(lte_frame_parms,osf);
-
- //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
-
- // phy_init_top(lte_frame_parms); //allocation
-
- PHY_vars_UE->is_secondary_ue = 0;
- PHY_vars_UE->lte_frame_parms = *lte_frame_parms;
- PHY_vars_eNB->lte_frame_parms = *lte_frame_parms;
-
- phy_init_lte_top(lte_frame_parms);
- dump_frame_parms(lte_frame_parms);
-
- PHY_vars_UE->PHY_measurements.n_adj_cells=0;
- PHY_vars_UE->PHY_measurements.adj_cell_id[0] = Nid_cell+1;
- PHY_vars_UE->PHY_measurements.adj_cell_id[1] = Nid_cell+2;
-
- for (i=0; i<3; i++)
- lte_gold(lte_frame_parms,PHY_vars_UE->lte_gold_table[i],Nid_cell+i);
-
- phy_init_lte_ue(PHY_vars_UE,1,0);
- phy_init_lte_eNB(PHY_vars_eNB,0,0,0);
-
- generate_pcfich_reg_mapping(&PHY_vars_UE->lte_frame_parms);
- generate_phich_reg_mapping(&PHY_vars_UE->lte_frame_parms);
-
- // DL power control init
- if (transmission_mode == 1) {
- PHY_vars_eNB->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB
- ((PHY_vars_eNB->lte_frame_parms).pdsch_config_common).p_b = 0;
- PHY_vars_UE->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB
- ((PHY_vars_UE->lte_frame_parms).pdsch_config_common).p_b = 0;
- } else { // rho_a = rhob
- PHY_vars_eNB->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB
- ((PHY_vars_eNB->lte_frame_parms).pdsch_config_common).p_b = 1;
- PHY_vars_UE->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB
- ((PHY_vars_UE->lte_frame_parms).pdsch_config_common).p_b = 1;
- }
-
- PHY_vars_UE->perfect_ce = perfect_ce;
-
- printf("Done lte_param_init\n");
-
-
-}
//DCI2_5MHz_2A_M10PRB_TDD_t DLSCH_alloc_pdu2_2A[2];
@@ -215,7 +133,7 @@ void do_OFDM_mod_l(mod_sym_t **txdataF, int32_t **txdata, uint16_t next_slot, LT
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
&txdata[aa][slot_offset], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
6, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
@@ -269,14 +187,15 @@ int main(int argc, char **argv)
unsigned int ret;
unsigned int coded_bits_per_codeword=0,nsymb,dci_cnt,tbs=0;
-
unsigned int tx_lev=0,tx_lev_dB=0,trials,errs[2][4],round_trials[4]={0,0,0,0},dci_errors=0,dlsch_active=0,num_layers;
+
int re_allocated;
char fname[32],vname[32];
FILE *bler_fd;
char bler_fname[256];
FILE *time_meas_fd;
char time_meas_fname[256];
+
//FILE *tikz_fd;
//char tikz_fname[256];
@@ -304,6 +223,7 @@ int main(int argc, char **argv)
uint8_t rx_sample_offset = 0;
//char stats_buffer[4096];
//int len;
+
uint8_t num_rounds = 4;
uint8_t subframe=7;
int u;
@@ -324,6 +244,8 @@ int main(int argc, char **argv)
uint8_t N_RB_DL=25,osf=1;
uint8_t fdd_flag = 0;
int xforms = 0;
+ frame_t frame_type = FDD;
+
#ifdef XFORMS
FD_lte_phy_scope_ue *form_ue;
char title[255];
@@ -334,7 +256,7 @@ int main(int argc, char **argv)
int common_flag=0,TPC=0;
double cpu_freq_GHz;
- time_stats_t ts;//,sts,usts;
+ // time_stats_t ts;//,sts,usts;
int avg_iter,iter_trials;
int rballocset=0;
int print_perf=0;
@@ -348,18 +270,29 @@ int main(int argc, char **argv)
int TB0_active = 1;
uint32_t perfect_ce = 0;
- LTE_DL_UE_HARQ_t *dlsch0_ue_harq;
- LTE_DL_eNB_HARQ_t *dlsch0_eNB_harq;
+ // LTE_DL_UE_HARQ_t *dlsch0_ue_harq;
+ // LTE_DL_eNB_HARQ_t *dlsch0_eNB_harq;
uint8_t Kmimo;
- mod_sym_t **sic_buffer;
+ mod_sym_t **sic_buffer;
FILE *proc_fd = NULL;
char buf[64];
+ uint8_t ue_category=4;
+ uint32_t Nsoft;
+
+ int CCE_table[800];
+
+ int threequarter_fs=0;
+
+
opp_enabled=1; // to enable the time meas
#if defined(__arm__)
+ FILE *proc_fd = NULL;
+ char buf[64];
+
proc_fd = fopen("/sys/devices/system/cpu/cpu4/cpufreq/cpuinfo_cur_freq", "r");
if(!proc_fd)
printf("cannot open /sys/devices/system/cpu/cpu4/cpufreq/cpuinfo_cur_freq");
@@ -383,16 +316,22 @@ int main(int argc, char **argv)
// default parameters
n_frames = 1000;
snr0 = 0;
- num_layers = 1;
+ // num_layers = 1;
perfect_ce = 0;
+
while ((c = getopt (argc, argv, "ahdpZDe:m:n:o:s:f:t:c:g:r:F:x:y:z:AM:N:I:i:O:R:S:C:T:b:u:v:w:B:PLl:YXV:W:J:")) != -1) {
+
switch (c) {
case 'a':
awgn_flag = 1;
channel_model = AWGN;
break;
+ case 'A':
+ abstx = 1;
+ break;
+
case 'b':
tdd_config=atoi(optarg);
break;
@@ -401,10 +340,59 @@ int main(int argc, char **argv)
N_RB_DL=atoi(optarg);
break;
+ case 'c':
+ num_pdcch_symbols=atoi(optarg);
+ break;
+
+ case 'C':
+ Nid_cell = atoi(optarg);
+ break;
+
case 'd':
dci_flag = 1;
break;
+ case 'D':
+ frame_type=TDD;
+ break;
+
+ case 'e':
+ num_rounds=1;
+ common_flag = 1;
+ TPC = atoi(optarg);
+ break;
+
+ case 'E':
+ threequarter_fs=1;
+ break;
+
+ case 'f':
+ input_snr_step= atof(optarg);
+ break;
+
+ case 'F':
+ forgetting_factor = atof(optarg);
+ break;
+
+ case 'i':
+ input_fd = fopen(optarg,"r");
+ input_file=1;
+ dci_flag = 1;
+ break;
+
+ case 'I':
+ input_trch_fd = fopen(optarg,"r");
+ input_trch_file=1;
+ break;
+
+ case 'L':
+ llr8_flag=1;
+ break;
+
+ case 'l':
+ offset_mumimo_llr_drange_fix=atoi(optarg);
+ break;
+
case 'm':
mcs1 = atoi(optarg);
break;
@@ -414,6 +402,11 @@ int main(int argc, char **argv)
//i_mod = get_Qm(mcs2); /// think here again!!!
break;
+ case 'O':
+ test_perf=atoi(optarg);
+ //print_perf =1;
+ break;
+
case 't':
mcs_i = atoi(optarg);
i_mod = get_Qm(mcs_i);
@@ -423,27 +416,15 @@ int main(int argc, char **argv)
n_frames = atoi(optarg);
break;
- case 'C':
- Nid_cell = atoi(optarg);
- break;
-
case 'o':
rx_sample_offset = atoi(optarg);
break;
- case 'D':
- fdd_flag = 1;
- break;
-
case 'r':
DLSCH_RB_ALLOC = atoi(optarg);
rballocset = 1;
break;
- case 'F':
- forgetting_factor = atof(optarg);
- break;
-
case 's':
snr0 = atof(optarg);
break;
@@ -451,15 +432,7 @@ int main(int argc, char **argv)
case 'w':
snr_int = atof(optarg);
break;
-
- case 'f':
- input_snr_step= atof(optarg);
- break;
-
- case 'A':
- abstx = 1;
- break;
-
+
case 'N':
n_ch_rlz= atof(optarg);
break;
@@ -468,10 +441,6 @@ int main(int argc, char **argv)
extended_prefix_flag=1;
break;
- case 'c':
- num_pdcch_symbols=atoi(optarg);
- break;
-
case 'g':
memcpy(channel_model_input,optarg,17);
@@ -574,20 +543,7 @@ int main(int argc, char **argv)
exit(-1);
}
break;
- case 'I':
- input_trch_fd = fopen(optarg,"r");
- input_trch_file=1;
- break;
- case 'i':
- input_fd = fopen(optarg,"r");
- input_file=1;
- dci_flag = 1;
- break;
- case 'e':
- num_rounds=1;
- common_flag = 1;
- TPC = atoi(optarg);
- break;
+
case 'R':
num_rounds=atoi(optarg);
break;
@@ -614,16 +570,6 @@ int main(int argc, char **argv)
case 'P':
print_perf=1;
break;
- case 'L':
- llr8_flag=1;
- break;
- case 'l':
- offset_mumimo_llr_drange_fix=atoi(optarg);
- break;
- case 'O':
- test_perf=atoi(optarg);
- //print_perf =1;
- break;
case 'X':
xforms = 1;
break;
@@ -672,7 +618,7 @@ int main(int argc, char **argv)
exit(1);
break;
- }
+ }
}
@@ -740,15 +686,25 @@ int main(int argc, char **argv)
if (transmission_mode==5) {
n_users = 2;
- //eNB_id_i = PHY_vars_UE->n_connected_eNB;
- eNB_id_i=1;
+ eNB_id_i = PHY_vars_UE->n_connected_eNB;
+ //eNB_id_i=1;
}
else
eNB_id_i = eNB_id;
+ lte_param_init(n_tx,
+ n_rx,
+ transmission_mode,
+ extended_prefix_flag,
+ frame_type,
+ Nid_cell,
+ tdd_config,
+ N_RB_DL,
+ threequarter_fs,
+ osf,
+ perfect_ce);
- lte_param_init(n_tx,n_rx,transmission_mode,extended_prefix_flag,fdd_flag,Nid_cell,tdd_config,N_RB_DL,osf,perfect_ce);
printf("Setting mcs1 = %d\n",mcs1);
printf("Setting mcs2 = %d\n",mcs2);
@@ -790,14 +746,14 @@ int main(int argc, char **argv)
sprintf(bler_fname,"bler_tx%d_rec%d_chan%d_nrx%d_mcs%d_mcsi%d_u%d_imod%d.csv",transmission_mode,rx_type,channel_model,n_rx,mcs1,mcs_i,rx_type,i_mod);
else if (abstx == 1)
if (perfect_ce==1)
- sprintf(bler_fname,"bler_tx%d_r%d_ch%d_%d_nrx%d_mcs%d_mcsi%d_ab_pce_sh%d_sumnormdifpm.csv",transmission_mode,rx_type,channel_model,n_frames, n_rx,mcs1, mcs2,interf_unaw_shift );
+ sprintf(bler_fname,"bler_tx%d_r%d_ch%d_%d_nrx%d_mcs%d_mcsi%d_ab_pce_sh%d_pmnew.csv",transmission_mode,rx_type,channel_model,n_frames, n_rx,mcs1, mcs2,interf_unaw_shift );
else
- sprintf(bler_fname,"bler_tx%d_r%d_ch%d_%d_nrx%d_mcs%d_mcsi%d_ab_sh%d_sumnormdifpm.csv",transmission_mode,rx_type,channel_model, n_frames, n_rx,mcs1, mcs2,interf_unaw_shift );
+ sprintf(bler_fname,"bler_tx%d_r%d_ch%d_%d_nrx%d_mcs%d_mcsi%d_ab_sh%d_pmnew.csv",transmission_mode,rx_type,channel_model, n_frames, n_rx,mcs1, mcs2,interf_unaw_shift );
else //abstx=0
if (perfect_ce==1)
- sprintf(bler_fname,"bler_tx%d_r%d_ch%d_%d_nrx%d_mcs%d_mcsi%d_pce_sh%d_sumnormdifpm.csv",transmission_mode,rx_type,channel_model,n_frames, n_rx,mcs1, mcs2, interf_unaw_shift);
+ sprintf(bler_fname,"bler_tx%d_r%d_ch%d_%d_nrx%d_mcs%d_mcsi%d_pce_sh%d_pmnew.csv",transmission_mode,rx_type,channel_model,n_frames, n_rx,mcs1, mcs2, interf_unaw_shift);
else
- sprintf(bler_fname,"bler_tx%d_r%d_ch%d_%d_nrx%d_mcs%d_mcsi%d_sh%d_sumnormdifpm.csv",transmission_mode,rx_type,channel_model,n_frames,n_rx,mcs1, mcs2, interf_unaw_shift);
+ sprintf(bler_fname,"bler_tx%d_r%d_ch%d_%d_nrx%d_mcs%d_mcsi%d_sh%d_pmnew.csv",transmission_mode,rx_type,channel_model,n_frames,n_rx,mcs1, mcs2, interf_unaw_shift);
bler_fd = fopen(bler_fname,"w");
if (bler_fd==NULL) {
@@ -833,9 +789,9 @@ int main(int argc, char **argv)
else
if (perfect_ce==1)
- sprintf(csv_fname,"dout_tx%d_r%d_mcs%d_mcsi%d_ch%d_ns%d_R%d_pce_sh%d_%d_sumnormdifpm.m",transmission_mode,rx_type,mcs1,mcs2,channel_model,n_frames,num_rounds, interf_unaw_shift, n_ch_rlz);
+ sprintf(csv_fname,"dout_tx%d_r%d_mcs%d_mcsi%d_ch%d_ns%d_R%d_pce_sh%d_%d_pmnew.m",transmission_mode,rx_type,mcs1,mcs2,channel_model,n_frames,num_rounds, interf_unaw_shift, n_ch_rlz);
else
- sprintf(csv_fname,"dout_tx%d_r%d_mcs%d_mcsi%d_ch%d_ns%d_R%d_sh%d_%d_sumnormdifpm.m",transmission_mode,rx_type,mcs1,mcs2,channel_model,n_frames,num_rounds, interf_unaw_shift, n_ch_rlz);
+ sprintf(csv_fname,"dout_tx%d_r%d_mcs%d_mcsi%d_ch%d_ns%d_R%d_sh%d_%d_pmnew.m",transmission_mode,rx_type,mcs1,mcs2,channel_model,n_frames,num_rounds, interf_unaw_shift, n_ch_rlz);
csv_fd = fopen(csv_fname,"w");
fprintf(csv_fd,"data_all%d=[",mcs1);
@@ -973,19 +929,19 @@ n(tikz_fname,"w");
CCCH_alloc_pdu.type = 0;
CCCH_alloc_pdu.vrb_type = 0;
CCCH_alloc_pdu.rballoc = CCCH_RB_ALLOC;
- CCCH_alloc_pdu.ndi = 1;
- CCCH_alloc_pdu.mcs = 1;
- CCCH_alloc_pdu.harq_pid = 0;
+ CCCH_alloc_pdu.ndi = 1;
+ CCCH_alloc_pdu.mcs = 1;
+ CCCH_alloc_pdu.harq_pid = 0;
DLSCH_alloc_pdu2_1E[0].rah = 0;
DLSCH_alloc_pdu2_1E[0].rballoc = DLSCH_RB_ALLOC;
DLSCH_alloc_pdu2_1E[0].TPC = 0;
DLSCH_alloc_pdu2_1E[0].dai = 0;
DLSCH_alloc_pdu2_1E[0].harq_pid = 0;
- //DLSCH_alloc_pdu2_1E[0].tb_swap = 0;
- DLSCH_alloc_pdu2_1E[0].mcs = mcs1;
- DLSCH_alloc_pdu2_1E[0].ndi = 1;
- DLSCH_alloc_pdu2_1E[0].rv = 0;
+ //DLSCH_alloc_pdu2_1E[0].tb_swap = 0;
+ DLSCH_alloc_pdu2_1E[0].mcs = mcs1;
+ DLSCH_alloc_pdu2_1E[0].ndi = 1;
+ DLSCH_alloc_pdu2_1E[0].rv = 0;
// Forget second codeword
DLSCH_alloc_pdu2_1E[0].tpmi = (transmission_mode>=5 ? 5 : 0); // precoding
DLSCH_alloc_pdu2_1E[0].dl_power_off = (transmission_mode==5 ? 0 : 1);
@@ -996,9 +952,9 @@ n(tikz_fname,"w");
DLSCH_alloc_pdu2_1E[1].dai = 0;
DLSCH_alloc_pdu2_1E[1].harq_pid = 0;
//DLSCH_alloc_pdu2_1E[1].tb_swap = 0;
- DLSCH_alloc_pdu2_1E[1].mcs = mcs_i;
- DLSCH_alloc_pdu2_1E[1].ndi = 1;
- DLSCH_alloc_pdu2_1E[1].rv = 0;
+ DLSCH_alloc_pdu2_1E[1].mcs = mcs_i;
+ DLSCH_alloc_pdu2_1E[1].ndi = 1;
+ DLSCH_alloc_pdu2_1E[1].rv = 0;
// Forget second codeword
DLSCH_alloc_pdu2_1E[1].tpmi = (transmission_mode>=5 ? 5 : 0) ; // precoding
DLSCH_alloc_pdu2_1E[1].dl_power_off = (transmission_mode==5 ? 0 : 1);
@@ -1034,11 +990,27 @@ n(tikz_fname,"w");
else
Kmimo=1;
+ switch (ue_category) {
+ case 1:
+ Nsoft = 250368;
+ break;
+ case 2:
+ case 3:
+ Nsoft = 1237248;
+ break;
+ case 4:
+ Nsoft = 1827072;
+ break;
+ default:
+ printf("Unsupported UE category %d\n",ue_category);
+ exit(-1);
+ break;
+ }
+
for (k=0; kdlsch_eNB[k][i] = new_eNB_dlsch(Kmimo,8,N_RB_DL,0);
+ for (i=0; i<2; i++) {
+ PHY_vars_eNB->dlsch_eNB[k][i] = new_eNB_dlsch(Kmimo,8,Nsoft,N_RB_DL,0);
if (!PHY_vars_eNB->dlsch_eNB[k][i]) {
printf("Can't get eNB dlsch structures\n");
@@ -1050,7 +1022,7 @@ n(tikz_fname,"w");
}
for (i=0; i<2; i++) {
- PHY_vars_UE->dlsch_ue[0][i] = new_ue_dlsch(Kmimo,8,MAX_TURBO_ITERATIONS,N_RB_DL,0);
+ PHY_vars_UE->dlsch_ue[0][i] = new_ue_dlsch(Kmimo,8,Nsoft,MAX_TURBO_ITERATIONS,N_RB_DL,0);
if (!PHY_vars_UE->dlsch_ue[0][i]) {
printf("Can't get ue dlsch structures\n");
@@ -1061,7 +1033,7 @@ n(tikz_fname,"w");
}
// structure for SIC at UE
- PHY_vars_UE->dlsch_eNB[0] = new_eNB_dlsch(Kmimo,8,N_RB_DL,0);
+ PHY_vars_UE->dlsch_eNB[0] = new_eNB_dlsch(Kmimo,8,Nsoft,N_RB_DL,0);
if (DLSCH_alloc_pdu2_1E[0].tpmi == 5) {
@@ -1113,9 +1085,9 @@ n(tikz_fname,"w");
((DCI1_1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0;
((DCI1_1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->dai = 0;
((DCI1_1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1_1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1_1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
- ((DCI1_1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1_1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1_1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1_1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 25:
dci_length = sizeof_DCI1_5MHz_TDD_t;
@@ -1125,9 +1097,9 @@ n(tikz_fname,"w");
((DCI1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0;
((DCI1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->dai = 0;
((DCI1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
- ((DCI1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 50:
dci_length = sizeof_DCI1_10MHz_TDD_t;
@@ -1137,9 +1109,9 @@ n(tikz_fname,"w");
((DCI1_10MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0;
((DCI1_10MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->dai = 0;
((DCI1_10MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1_10MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1_10MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
- ((DCI1_10MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1_10MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1_10MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1_10MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 100:
((DCI1_20MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->rah = 0;
@@ -1147,9 +1119,9 @@ n(tikz_fname,"w");
((DCI1_20MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0;
((DCI1_20MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->dai = 0;
((DCI1_20MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1_20MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1_20MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
- ((DCI1_20MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1_20MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1_20MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1_20MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
dci_length = sizeof_DCI1_20MHz_TDD_t;
dci_length_bytes = sizeof(DCI1_20MHz_TDD_t);
break;
@@ -1164,9 +1136,9 @@ n(tikz_fname,"w");
((DCI1_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = DLSCH_RB_ALLOC;
((DCI1_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0;
((DCI1_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
- ((DCI1_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 25:
dci_length = sizeof_DCI1_5MHz_FDD_t;
@@ -1175,9 +1147,9 @@ n(tikz_fname,"w");
((DCI1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = DLSCH_RB_ALLOC;
((DCI1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0;
((DCI1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
- ((DCI1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 50:
dci_length = sizeof_DCI1_10MHz_FDD_t;
@@ -1186,9 +1158,9 @@ n(tikz_fname,"w");
((DCI1_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = DLSCH_RB_ALLOC;
((DCI1_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0;
((DCI1_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
- ((DCI1_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 100:
dci_length = sizeof_DCI1_20MHz_FDD_t;
@@ -1197,9 +1169,9 @@ n(tikz_fname,"w");
((DCI1_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = DLSCH_RB_ALLOC;
((DCI1_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0;
((DCI1_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
- ((DCI1_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
}
}
@@ -1239,9 +1211,9 @@ n(tikz_fname,"w");
((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0;
((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 25:
dci_length = sizeof_DCI1A_5MHz_TDD_1_6_t;
@@ -1252,33 +1224,33 @@ n(tikz_fname,"w");
((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0;
((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 50:
dci_length = sizeof_DCI1A_10MHz_TDD_1_6_t;
dci_length_bytes = sizeof(DCI1A_10MHz_TDD_1_6_t);
((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->type = 1;
- ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 1;
+ ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 0;
((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_DL,0,9);
((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0;
((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 100:
((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->type = 1;
- ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 1;
+ ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 0;
((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_DL,0,9);
((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0;
((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
dci_length = sizeof_DCI1A_20MHz_TDD_1_6_t;
dci_length_bytes = sizeof(DCI1A_20MHz_TDD_1_6_t);
break;
@@ -1290,49 +1262,49 @@ n(tikz_fname,"w");
dci_length = sizeof_DCI1A_1_5MHz_FDD_t;
dci_length_bytes = sizeof(DCI1A_1_5MHz_FDD_t);
((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->type = 1;
- ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 1;
+ ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 0;
((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_DL,0,9);
((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 25:
dci_length = sizeof_DCI1A_5MHz_FDD_t;
dci_length_bytes = sizeof(DCI1A_5MHz_FDD_t);
((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->type = 1;
- ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 1;
+ ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 0;
((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_DL,0,9);
((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 50:
dci_length = sizeof_DCI1A_10MHz_FDD_t;
dci_length_bytes = sizeof(DCI1A_10MHz_FDD_t);
((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->type = 1;
- ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 1;
+ ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 0;
((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_DL,0,9);
((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 100:
dci_length = sizeof_DCI1A_20MHz_FDD_t;
dci_length_bytes = sizeof(DCI1A_20MHz_FDD_t);
((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->type = 1;
- ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 1;
+ ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 0;
((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_DL,0,9);
((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
}
}
@@ -1341,7 +1313,7 @@ n(tikz_fname,"w");
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = SI_RNTI;
dci_alloc[num_dci].format = format1A;
- dci_alloc[num_dci].nCCE = 0;
+ dci_alloc[num_dci].firstCCE = 0;
dump_dci(&PHY_vars_eNB->lte_frame_parms,&dci_alloc[num_dci]);
printf("Generating dlsch params for user %d\n",k);
@@ -1534,9 +1506,9 @@ n(tikz_fname,"w");
((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0;
((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 25:
dci_length = sizeof_DCI1A_5MHz_TDD_1_6_t;
@@ -1547,33 +1519,33 @@ n(tikz_fname,"w");
((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0;
((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 50:
dci_length = sizeof_DCI1A_10MHz_TDD_1_6_t;
dci_length_bytes = sizeof(DCI1A_10MHz_TDD_1_6_t);
((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->type = 1;
- ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 1;
+ ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 0;
((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_DL,0,9);
((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0;
((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 100:
((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->type = 1;
- ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 1;
+ ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 0;
((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_DL,0,9);
((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0;
((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
dci_length = sizeof_DCI1A_20MHz_TDD_1_6_t;
dci_length_bytes = sizeof(DCI1A_20MHz_TDD_1_6_t);
break;
@@ -1585,49 +1557,49 @@ n(tikz_fname,"w");
dci_length = sizeof_DCI1A_1_5MHz_FDD_t;
dci_length_bytes = sizeof(DCI1A_1_5MHz_FDD_t);
((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->type = 1;
- ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 1;
+ ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 0;
((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_DL,0,9);
((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 25:
dci_length = sizeof_DCI1A_5MHz_FDD_t;
dci_length_bytes = sizeof(DCI1A_5MHz_FDD_t);
((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->type = 1;
- ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 1;
+ ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 0;
((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_DL,0,9);
((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 50:
dci_length = sizeof_DCI1A_10MHz_FDD_t;
dci_length_bytes = sizeof(DCI1A_10MHz_FDD_t);
((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->type = 1;
- ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 1;
+ ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 0;
((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_DL,0,9);
((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 100:
dci_length = sizeof_DCI1A_20MHz_FDD_t;
dci_length_bytes = sizeof(DCI1A_20MHz_FDD_t);
((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->type = 1;
- ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 1;
+ ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 0;
((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_DL,0,9);
((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
}
}
@@ -1636,7 +1608,7 @@ n(tikz_fname,"w");
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = SI_RNTI;
dci_alloc[num_dci].format = format1A;
- dci_alloc[num_dci].nCCE = 0;
+ dci_alloc[num_dci].firstCCE = 0;
dump_dci(&PHY_vars_eNB->lte_frame_parms,&dci_alloc[num_dci]);
printf("Generating dlsch params for user %d\n",k);
@@ -1755,7 +1727,7 @@ n(tikz_fname,"w");
((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1;
((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0;
((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap = 0;
- ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi = 0;
+ ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi = 2;
break;
case 25:
dci_length = sizeof_DCI2_5MHz_2A_FDD_t;
@@ -1771,7 +1743,7 @@ n(tikz_fname,"w");
((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1;
((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0;
((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap = 0;
- ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi = 0;
+ ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi = 2;
break;
case 50:
dci_length = sizeof_DCI2_10MHz_2A_FDD_t;
@@ -1787,7 +1759,7 @@ n(tikz_fname,"w");
((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1;
((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0;
((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap = 0;
- ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi = 0;
+ ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi = 2;
break;
case 100:
dci_length = sizeof_DCI2_20MHz_2A_FDD_t;
@@ -1803,7 +1775,7 @@ n(tikz_fname,"w");
((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1;
((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0;
((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap = 0;
- ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi = 0;
+ ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi = 2;
break;
}
}
@@ -1813,7 +1785,7 @@ n(tikz_fname,"w");
}
printf ("TM4 with tpmi =%d\n", ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi);
- if (((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 2) { // not a nice way to do it, fix later
+ if (((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 2) {
PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single = (unsigned short)(taus()&0xffff);
@@ -1856,9 +1828,9 @@ n(tikz_fname,"w");
((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0;
((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 25:
dci_length = sizeof_DCI1A_5MHz_TDD_1_6_t;
@@ -1869,33 +1841,33 @@ n(tikz_fname,"w");
((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0;
((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 50:
dci_length = sizeof_DCI1A_10MHz_TDD_1_6_t;
dci_length_bytes = sizeof(DCI1A_10MHz_TDD_1_6_t);
((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->type = 1;
- ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 1;
+ ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 0;
((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_DL,0,9);
((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0;
((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 100:
((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->type = 1;
- ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 1;
+ ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 0;
((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_DL,0,9);
((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0;
((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
dci_length = sizeof_DCI1A_20MHz_TDD_1_6_t;
dci_length_bytes = sizeof(DCI1A_20MHz_TDD_1_6_t);
break;
@@ -1907,49 +1879,49 @@ n(tikz_fname,"w");
dci_length = sizeof_DCI1A_1_5MHz_FDD_t;
dci_length_bytes = sizeof(DCI1A_1_5MHz_FDD_t);
((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->type = 1;
- ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 1;
+ ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 0;
((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_DL,0,9);
((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 25:
dci_length = sizeof_DCI1A_5MHz_FDD_t;
dci_length_bytes = sizeof(DCI1A_5MHz_FDD_t);
((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->type = 1;
- ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 1;
+ ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 0;
((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_DL,0,9);
((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 50:
dci_length = sizeof_DCI1A_10MHz_FDD_t;
dci_length_bytes = sizeof(DCI1A_10MHz_FDD_t);
((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->type = 1;
- ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 1;
+ ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 0;
((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_DL,0,9);
((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
case 100:
dci_length = sizeof_DCI1A_20MHz_FDD_t;
dci_length_bytes = sizeof(DCI1A_20MHz_FDD_t);
((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->type = 1;
- ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 1;
+ ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->vrb_type = 0;
((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_DL,0,9);
((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC;
((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
- ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
- ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
- ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
+ ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
+ ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1;
+ ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
break;
}
}
@@ -1958,7 +1930,7 @@ n(tikz_fname,"w");
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = SI_RNTI;
dci_alloc[num_dci].format = format1A;
- dci_alloc[num_dci].nCCE = 0;
+ dci_alloc[num_dci].firstCCE = 0;
dump_dci(&PHY_vars_eNB->lte_frame_parms,&dci_alloc[num_dci]);
printf("Generating dlsch params for user %d\n",k);
@@ -1981,6 +1953,7 @@ n(tikz_fname,"w");
}
break;
+
case 5:
case 6:
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu2_1E[k],sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
@@ -1988,7 +1961,7 @@ n(tikz_fname,"w");
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = n_rnti+k;
dci_alloc[num_dci].format = format1E_2A_M10PRB;
- dci_alloc[num_dci].nCCE = 4*k;
+ dci_alloc[num_dci].firstCCE = 4*k;
printf("Generating dlsch params for user %d\n",k);
generate_eNB_dlsch_params_from_dci(0,
subframe,
@@ -2033,17 +2006,20 @@ n(tikz_fname,"w");
if (n_frames==1) printf("%d\n",numCCE);
// apply RNTI-based nCCE allocation
+ memset(CCE_table,0,800*sizeof(int));
+
for (i=num_common_dci; idlsch_eNB[k][cw]->harq_processes[0]->TBS;
#endif
+
rate = (double)tbs/(double)coded_bits_per_codeword;
if ((SNR==snr0) && (trials==0) && (round==0) && (pmi_feedback==0))
@@ -3138,7 +3115,7 @@ n(tikz_fname,"w");
if (PHY_vars_UE->perfect_ce==1) {
if (awgn_flag==0) {
- //fill the channel estimates
+
for(k=0; knb_antennas_tx; aa++) {
for (aarx=0; aarxnb_antennas_rx; aarx++) {
diff --git a/openair1/SIMULATION/LTE_PHY/mbmssim.c b/openair1/SIMULATION/LTE_PHY/mbmssim.c
index b9be0b27e8..98d1b68a15 100644
--- a/openair1/SIMULATION/LTE_PHY/mbmssim.c
+++ b/openair1/SIMULATION/LTE_PHY/mbmssim.c
@@ -47,8 +47,7 @@
#include "LAYER2/MAC/vars.h"
#ifdef XFORMS
-#include
-#include "../../USERSPACE_TOOLS/SCOPE/lte_scope.h"
+#include "PHY/TOOLS/lte_phy_scope.h"
#endif //XFORMS
@@ -176,13 +175,13 @@ int main(int argc, char **argv)
#ifdef XFORMS
- FD_lte_scope *form_dl;
+ FD_lte_phy_scope_ue *form_ue;
char title[255];
fl_initialize (&argc, argv, NULL, 0, 0);
- form_dl = create_form_lte_scope();
+ form_ue = create_lte_phy_scope_ue();
sprintf (title, "LTE DL SCOPE UE");
- fl_show_form (form_dl->lte_scope, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
+ fl_show_form (form_ue->lte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
#endif
logInit();
@@ -457,7 +456,7 @@ int main(int argc, char **argv)
PHY_ofdm_mod(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][0], // input,
txdata[0], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
diff --git a/openair1/SIMULATION/LTE_PHY/pbchsim.c b/openair1/SIMULATION/LTE_PHY/pbchsim.c
index b7f9f57b6b..319c2ed008 100644
--- a/openair1/SIMULATION/LTE_PHY/pbchsim.c
+++ b/openair1/SIMULATION/LTE_PHY/pbchsim.c
@@ -53,87 +53,11 @@
#include "OCG_vars.h"
-PHY_VARS_eNB *PHY_vars_eNb,*PHY_vars_eNb1,*PHY_vars_eNb2;
+PHY_VARS_eNB *PHY_vars_eNB,*PHY_vars_eNB1,*PHY_vars_eNB2;
PHY_VARS_UE *PHY_vars_UE;
#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13
-void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,unsigned char extended_prefix_flag,unsigned char frame_type, uint16_t Nid_cell,uint8_t N_RB_DL,uint8_t osf)
-{
-
- // unsigned int ind;
- LTE_DL_FRAME_PARMS *lte_frame_parms;
- int i;
-
- printf("Start lte_param_init\n");
- PHY_vars_eNb = malloc(sizeof(PHY_VARS_eNB));
- PHY_vars_eNb1 = malloc(sizeof(PHY_VARS_eNB));
- PHY_vars_eNb2 = malloc(sizeof(PHY_VARS_eNB));
-
- PHY_vars_UE = malloc(sizeof(PHY_VARS_UE));
- //PHY_config = malloc(sizeof(PHY_CONFIG));
- mac_xface = malloc(sizeof(MAC_xface));
-
- randominit(0);
- set_taus_seed(0);
-
- lte_frame_parms = &(PHY_vars_eNb->lte_frame_parms);
-
- lte_frame_parms->N_RB_DL = N_RB_DL; //50 for 10MHz and 25 for 5 MHz
- lte_frame_parms->N_RB_UL = N_RB_DL;
- lte_frame_parms->Ncp = extended_prefix_flag;
- lte_frame_parms->Nid_cell = Nid_cell;
- lte_frame_parms->nushift = Nid_cell%6;
- lte_frame_parms->nb_antennas_tx = N_tx;
- lte_frame_parms->nb_antennas_tx_eNB = N_tx;
- lte_frame_parms->nb_antennas_rx = N_rx;
- // lte_frame_parms->Csrs = 2;
- // lte_frame_parms->Bsrs = 0;
- // lte_frame_parms->kTC = 0;
- // lte_frame_parms->n_RRC = 0;
- lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
- lte_frame_parms->tdd_config = 3;
- lte_frame_parms->frame_type = frame_type;
- init_frame_parms(lte_frame_parms,osf);
-
- //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
-
- PHY_vars_UE->lte_frame_parms = *lte_frame_parms;
-
- phy_init_lte_top(lte_frame_parms);
-
- PHY_vars_UE->PHY_measurements.n_adj_cells=2;
- PHY_vars_UE->PHY_measurements.adj_cell_id[0] = Nid_cell+1;
- PHY_vars_UE->PHY_measurements.adj_cell_id[1] = Nid_cell+2;
-
- for (i=0; i<3; i++)
- lte_gold(lte_frame_parms,PHY_vars_UE->lte_gold_table[i],Nid_cell+i);
-
- phy_init_lte_ue(PHY_vars_UE,1,0);
-
- phy_init_lte_eNB(PHY_vars_eNb,0,0,0);
-
- memcpy((void*)&PHY_vars_eNb1->lte_frame_parms,(void*)&PHY_vars_eNb->lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
- PHY_vars_eNb1->lte_frame_parms.Nid_cell=Nid_cell+1;
- PHY_vars_eNb1->lte_frame_parms.nushift=(Nid_cell+1)%6;
- PHY_vars_eNb1->Mod_id=1;
-
- memcpy((void*)&PHY_vars_eNb2->lte_frame_parms,(void*)&PHY_vars_eNb->lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
- PHY_vars_eNb2->lte_frame_parms.Nid_cell=Nid_cell+2;
- PHY_vars_eNb2->lte_frame_parms.nushift=(Nid_cell+2)%6;
- PHY_vars_eNb2->Mod_id=2;
-
- phy_init_lte_eNB(PHY_vars_eNb1,0,0,0);
-
- phy_init_lte_eNB(PHY_vars_eNb2,0,0,0);
-
- phy_init_lte_top(lte_frame_parms);
-
- printf("Done lte_param_init\n");
-
-
-}
-
mod_sym_t *dummybuf[4];
mod_sym_t dummy0[2048*14];
mod_sym_t dummy1[2048*14];
@@ -420,6 +344,28 @@ int main(int argc, char **argv)
lte_param_init(n_tx,n_rx,transmission_mode,extended_prefix_flag,frame_type,Nid_cell,N_RB_DL,osf);
+ PHY_vars_eNB1 = malloc(sizeof(PHY_VARS_eNB));
+ PHY_vars_eNB2 = malloc(sizeof(PHY_VARS_eNB));
+ PHY_vars_UE->PHY_measurements.n_adj_cells=2;
+ PHY_vars_UE->PHY_measurements.adj_cell_id[0] = Nid_cell+1;
+ PHY_vars_UE->PHY_measurements.adj_cell_id[1] = Nid_cell+2;
+
+ for (i=0; i<3; i++)
+ lte_gold(&PHY_vars_eNB->lte_frame_parms,PHY_vars_UE->lte_gold_table[i],Nid_cell+i);
+
+ memcpy((void*)&PHY_vars_eNB1->lte_frame_parms,(void*)&PHY_vars_eNB->lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
+ PHY_vars_eNB1->lte_frame_parms.Nid_cell=Nid_cell+1;
+ PHY_vars_eNB1->lte_frame_parms.nushift=(Nid_cell+1)%6;
+ PHY_vars_eNB1->Mod_id=1;
+
+ memcpy((void*)&PHY_vars_eNB2->lte_frame_parms,(void*)&PHY_vars_eNB->lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
+ PHY_vars_eNB2->lte_frame_parms.Nid_cell=Nid_cell+2;
+ PHY_vars_eNB2->lte_frame_parms.nushift=(Nid_cell+2)%6;
+ PHY_vars_eNB2->Mod_id=2;
+
+ phy_init_lte_eNB(PHY_vars_eNB1,0,0,0);
+ phy_init_lte_eNB(PHY_vars_eNB2,0,0,0);
+
#ifdef XFORMS
fl_initialize (&argc, argv, NULL, 0, 0);
form_ue = create_lte_phy_scope_ue();
@@ -436,13 +382,13 @@ int main(int argc, char **argv)
printf("SNR0 %f, SNR1 %f\n",snr0,snr1);
- frame_parms = &PHY_vars_eNb->lte_frame_parms;
+ frame_parms = &PHY_vars_eNB->lte_frame_parms;
- txdata = PHY_vars_eNb->lte_eNB_common_vars.txdata[0];
- txdata1 = PHY_vars_eNb1->lte_eNB_common_vars.txdata[0];
- txdata2 = PHY_vars_eNb2->lte_eNB_common_vars.txdata[0];
+ txdata = PHY_vars_eNB->lte_eNB_common_vars.txdata[0];
+ txdata1 = PHY_vars_eNB1->lte_eNB_common_vars.txdata[0];
+ txdata2 = PHY_vars_eNB2->lte_eNB_common_vars.txdata[0];
s_re = malloc(2*sizeof(double*));
@@ -463,8 +409,8 @@ int main(int argc, char **argv)
printf("FFT Size %d, Extended Prefix %d, Samples per subframe %d, Symbols per subframe %d, interf (%d,%d)\n",NUMBER_OF_OFDM_CARRIERS,
frame_parms->Ncp,frame_parms->samples_per_tti,nsymb,interf1,interf2);
- printf("PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0][0] = %p\n",
- PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0][0]);
+ printf("PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0][0] = %p\n",
+ PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0][0]);
DLSCH_alloc_pdu2.rah = 0;
@@ -479,31 +425,31 @@ int main(int argc, char **argv)
// Forget second codeword
DLSCH_alloc_pdu2.tpmi = (transmission_mode==6 ? 5 : 0) ; // precoding
- eNB2UE = new_channel_desc_scm(PHY_vars_eNb->lte_frame_parms.nb_antennas_tx,
+ eNB2UE = new_channel_desc_scm(PHY_vars_eNB->lte_frame_parms.nb_antennas_tx,
PHY_vars_UE->lte_frame_parms.nb_antennas_rx,
channel_model,
- N_RB2sampling_rate(PHY_vars_eNb->lte_frame_parms.N_RB_DL),
- N_RB2channel_bandwidth(PHY_vars_eNb->lte_frame_parms.N_RB_DL),
+ N_RB2sampling_rate(PHY_vars_eNB->lte_frame_parms.N_RB_DL),
+ N_RB2channel_bandwidth(PHY_vars_eNB->lte_frame_parms.N_RB_DL),
0,
0,
0);
if (interf1>-20)
- eNB2UE1 = new_channel_desc_scm(PHY_vars_eNb->lte_frame_parms.nb_antennas_tx,
+ eNB2UE1 = new_channel_desc_scm(PHY_vars_eNB->lte_frame_parms.nb_antennas_tx,
PHY_vars_UE->lte_frame_parms.nb_antennas_rx,
channel_model,
- N_RB2sampling_rate(PHY_vars_eNb->lte_frame_parms.N_RB_DL),
- N_RB2channel_bandwidth(PHY_vars_eNb->lte_frame_parms.N_RB_DL),
+ N_RB2sampling_rate(PHY_vars_eNB->lte_frame_parms.N_RB_DL),
+ N_RB2channel_bandwidth(PHY_vars_eNB->lte_frame_parms.N_RB_DL),
0,
4,
0);
if (interf2>-20)
- eNB2UE2 = new_channel_desc_scm(PHY_vars_eNb->lte_frame_parms.nb_antennas_tx,
+ eNB2UE2 = new_channel_desc_scm(PHY_vars_eNB->lte_frame_parms.nb_antennas_tx,
PHY_vars_UE->lte_frame_parms.nb_antennas_rx,
channel_model,
- N_RB2sampling_rate(PHY_vars_eNb->lte_frame_parms.N_RB_DL),
- N_RB2channel_bandwidth(PHY_vars_eNb->lte_frame_parms.N_RB_DL),
+ N_RB2sampling_rate(PHY_vars_eNB->lte_frame_parms.N_RB_DL),
+ N_RB2channel_bandwidth(PHY_vars_eNB->lte_frame_parms.N_RB_DL),
0,
8,
0);
@@ -567,47 +513,47 @@ int main(int argc, char **argv)
pbch_pdu[1]=1;
pbch_pdu[2]=0;
- if (PHY_vars_eNb->lte_frame_parms.frame_type == 0) {
- generate_pss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ if (PHY_vars_eNB->lte_frame_parms.frame_type == 0) {
+ generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 6 : 5,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
0);
- generate_sss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 5 : 4,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 5 : 4,
0);
- generate_pss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 6 : 5,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
10);
- generate_sss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 5 : 4,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 5 : 4,
10);
} else {
- generate_sss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 6 : 5,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
1);
- generate_pss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
2,
2);
- generate_sss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 6 : 5,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
11);
- generate_pss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
2,
12);
@@ -626,11 +572,11 @@ int main(int argc, char **argv)
dci_alloc[1].rnti = 0x1234;
*/
- printf("Generating PBCH for mode1_flag = %d\n", PHY_vars_eNb->lte_frame_parms.mode1_flag);
+ printf("Generating PBCH for mode1_flag = %d\n", PHY_vars_eNB->lte_frame_parms.mode1_flag);
- generate_pilots(PHY_vars_eNb,
- PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pilots(PHY_vars_eNB,
+ PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME);
@@ -641,8 +587,8 @@ int main(int argc, char **argv)
dci_alloc,
0,
1024,
- &PHY_vars_eNb->lte_frame_parms,
- PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ &PHY_vars_eNB->lte_frame_parms,
+ PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
0);
*/
@@ -657,47 +603,47 @@ int main(int argc, char **argv)
dummybuf[1] = dummy1;
dummybuf[2] = dummy2;
dummybuf[3] = dummy3;
- generate_pbch(&PHY_vars_eNb->lte_eNB_pbch,
+ generate_pbch(&PHY_vars_eNB->lte_eNB_pbch,
(mod_sym_t**)dummybuf,
AMP,
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
pbch_pdu,
0);
}
- generate_pbch(&PHY_vars_eNb->lte_eNB_pbch,
- PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pbch(&PHY_vars_eNB->lte_eNB_pbch,
+ PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
pbch_pdu,
pbch_phase);
/*
- generate_pbch(&PHY_vars_eNb->lte_eNB_pbch,
- PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pbch(&PHY_vars_eNB->lte_eNB_pbch,
+ PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
pbch_pdu,
1);
*/
if (interf1>-20) {
/*
- generate_pss(PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0],
+ generate_pss(PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb1->lte_frame_parms,
- (PHY_vars_eNb1->lte_frame_parms.Ncp==0)?6:5,
+ &PHY_vars_eNB1->lte_frame_parms,
+ (PHY_vars_eNB1->lte_frame_parms.Ncp==0)?6:5,
0);
*/
- generate_pilots(PHY_vars_eNb1,
- PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0],
+ generate_pilots(PHY_vars_eNB1,
+ PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0],
AMP,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME);
- generate_pbch(&PHY_vars_eNb1->lte_eNB_pbch,
- PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0],
+ generate_pbch(&PHY_vars_eNB1->lte_eNB_pbch,
+ PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb1->lte_frame_parms,
+ &PHY_vars_eNB1->lte_frame_parms,
pbch_pdu,
0);
@@ -705,26 +651,26 @@ int main(int argc, char **argv)
if (interf2>-20) {
/*
- generate_pss(PHY_vars_eNb2->lte_eNB_common_vars.txdataF[0],
+ generate_pss(PHY_vars_eNB2->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb2->lte_frame_parms,
- (PHY_vars_eNb2->lte_frame_parms.Ncp==0)?6:5,
+ &PHY_vars_eNB2->lte_frame_parms,
+ (PHY_vars_eNB2->lte_frame_parms.Ncp==0)?6:5,
0);
*/
- generate_pilots(PHY_vars_eNb2,
- PHY_vars_eNb2->lte_eNB_common_vars.txdataF[0],
+ generate_pilots(PHY_vars_eNB2,
+ PHY_vars_eNB2->lte_eNB_common_vars.txdataF[0],
AMP,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME);
- generate_pbch(&PHY_vars_eNb2->lte_eNB_pbch,
- PHY_vars_eNb2->lte_eNB_common_vars.txdataF[0],
+ generate_pbch(&PHY_vars_eNB2->lte_eNB_pbch,
+ PHY_vars_eNB2->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb2->lte_frame_parms,
+ &PHY_vars_eNB2->lte_frame_parms,
pbch_pdu,
0);
@@ -733,10 +679,10 @@ int main(int argc, char **argv)
// write_output("pilotsF.m","rsF",txdataF[0],lte_frame_parms->ofdm_symbol_size,1,1);
- write_output("txsigF0.m","txsF0", PHY_vars_eNb->lte_eNB_common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
+ write_output("txsigF0.m","txsF0", PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
- if (PHY_vars_eNb->lte_frame_parms.nb_antennas_tx>1)
- write_output("txsigF1.m","txsF1", PHY_vars_eNb->lte_eNB_common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
+ if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1)
+ write_output("txsigF1.m","txsF1", PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
tx_lev = 0;
tx_lev1 = 0;
@@ -745,16 +691,16 @@ int main(int argc, char **argv)
- for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
+ for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
if (frame_parms->Ncp == 1)
- PHY_ofdm_mod(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0][aa], // input,
+ PHY_ofdm_mod(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][aa], // input,
txdata[aa], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
else {
- normal_prefix_mod(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0][aa],
+ normal_prefix_mod(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][aa],
txdata[aa],
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb,
frame_parms);
@@ -765,17 +711,17 @@ int main(int argc, char **argv)
}
if (interf1>-20) {
- for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
+ for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
if (frame_parms->Ncp == 1)
- PHY_ofdm_mod(PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0][aa], // input,
- PHY_vars_eNb1->lte_eNB_common_vars.txdata[0][aa], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ PHY_ofdm_mod(PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0][aa], // input,
+ PHY_vars_eNB1->lte_eNB_common_vars.txdata[0][aa], // output
+ frame_parms->ofdm_symbol_size,
2*nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
else {
- normal_prefix_mod(PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0][aa],
- PHY_vars_eNb1->lte_eNB_common_vars.txdata[0][aa],
+ normal_prefix_mod(PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0][aa],
+ PHY_vars_eNB1->lte_eNB_common_vars.txdata[0][aa],
2*nsymb,
frame_parms);
}
@@ -784,24 +730,24 @@ int main(int argc, char **argv)
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES);
}
- write_output("txsigF0_1.m","txsF0_1", PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
+ write_output("txsigF0_1.m","txsF0_1", PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
- if (PHY_vars_eNb1->lte_frame_parms.nb_antennas_tx>1)
- write_output("txsigF1_1.m","txsF1_1", PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
+ if (PHY_vars_eNB1->lte_frame_parms.nb_antennas_tx>1)
+ write_output("txsigF1_1.m","txsF1_1", PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
}
if (interf2>-20) {
- for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
+ for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
if (frame_parms->Ncp == 1)
- PHY_ofdm_mod(PHY_vars_eNb2->lte_eNB_common_vars.txdataF[0][aa], // input,
- PHY_vars_eNb2->lte_eNB_common_vars.txdata[0][aa], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ PHY_ofdm_mod(PHY_vars_eNB2->lte_eNB_common_vars.txdataF[0][aa], // input,
+ PHY_vars_eNB2->lte_eNB_common_vars.txdata[0][aa], // output
+ frame_parms->ofdm_symbol_size,
2*nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
else {
- normal_prefix_mod(PHY_vars_eNb2->lte_eNB_common_vars.txdataF[0][aa],
- PHY_vars_eNb2->lte_eNB_common_vars.txdata[0][aa],
+ normal_prefix_mod(PHY_vars_eNB2->lte_eNB_common_vars.txdataF[0][aa],
+ PHY_vars_eNB2->lte_eNB_common_vars.txdata[0][aa],
2*nsymb,
frame_parms);
}
@@ -810,10 +756,10 @@ int main(int argc, char **argv)
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES);
}
- write_output("txsigF0_2.m","txsF0_2", PHY_vars_eNb2->lte_eNB_common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
+ write_output("txsigF0_2.m","txsF0_2", PHY_vars_eNB2->lte_eNB_common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
- if (PHY_vars_eNb2->lte_frame_parms.nb_antennas_tx>1)
- write_output("txsigF1_2.m","txsF1_2", PHY_vars_eNb2->lte_eNB_common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
+ if (PHY_vars_eNB2->lte_frame_parms.nb_antennas_tx>1)
+ write_output("txsigF1_2.m","txsF1_2", PHY_vars_eNB2->lte_eNB_common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
}
// tx_lev_dB = (unsigned int) dB_fixed(tx_lev);
@@ -823,15 +769,15 @@ int main(int argc, char **argv)
if (frame_parms->nb_antennas_tx>1)
write_output("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
- write_output("txsig0_1.m","txs0_1", PHY_vars_eNb1->lte_eNB_common_vars.txdata[0][0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
+ write_output("txsig0_1.m","txs0_1", PHY_vars_eNB1->lte_eNB_common_vars.txdata[0][0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
if (frame_parms->nb_antennas_tx>1)
- write_output("txsig1_1.m","txs1_1", PHY_vars_eNb1->lte_eNB_common_vars.txdata[0][1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
+ write_output("txsig1_1.m","txs1_1", PHY_vars_eNB1->lte_eNB_common_vars.txdata[0][1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
- write_output("txsig0_2.m","txs0_2", PHY_vars_eNb2->lte_eNB_common_vars.txdata[0][0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
+ write_output("txsig0_2.m","txs0_2", PHY_vars_eNB2->lte_eNB_common_vars.txdata[0][0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
if (frame_parms->nb_antennas_tx>1)
- write_output("txsig1_2.m","txs1_2", PHY_vars_eNb2->lte_eNB_common_vars.txdata[0][1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
+ write_output("txsig1_2.m","txs1_2", PHY_vars_eNB2->lte_eNB_common_vars.txdata[0][1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
} else { //read in from file
i=0;
@@ -864,7 +810,7 @@ int main(int argc, char **argv)
// multipath channel
for (i=0; i<2*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES; i++) {
- for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
+ for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
s_re[aa][i] = ((double)(((short *)txdata[aa]))[(i<<1)]);
s_im[aa][i] = ((double)(((short *)txdata[aa]))[(i<<1)+1]);
@@ -925,7 +871,7 @@ int main(int argc, char **argv)
}
}
- sigma2_dB = 10*log10((double)tx_lev) +10*log10((double)PHY_vars_eNb->lte_frame_parms.ofdm_symbol_size/(double)(12*NB_RB)) - SNR;
+ sigma2_dB = 10*log10((double)tx_lev) +10*log10((double)PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size/(double)(12*NB_RB)) - SNR;
if (n_frames==1)
printf("sigma2_dB %f (SNR %f dB) tx_lev_dB %f,%f,%f\n",sigma2_dB,SNR,
@@ -947,7 +893,7 @@ int main(int argc, char **argv)
for (n_trials=0; n_trialslte_frame_parms.nb_antennas_rx; aa++) {
+ for (aa=0; aalte_frame_parms.nb_antennas_rx; aa++) {
if (n_trials==0) {
r_re[aa][i] += (pow(10.0,.05*interf1)*r_re1[aa][i] + pow(10.0,.05*interf2)*r_re2[aa][i]);
r_im[aa][i] += (pow(10.0,.05*interf1)*r_im1[aa][i] + pow(10.0,.05*interf2)*r_im2[aa][i]);
@@ -983,14 +929,14 @@ int main(int argc, char **argv)
*/
- for (l=0; llte_frame_parms.symbols_per_tti; l++) {
+ for (l=0; llte_frame_parms.symbols_per_tti; l++) {
- // subframe_offset = (l/PHY_vars_eNb->lte_frame_parms.symbols_per_tti)*PHY_vars_eNb->lte_frame_parms.samples_per_tti;
+ // subframe_offset = (l/PHY_vars_eNB->lte_frame_parms.symbols_per_tti)*PHY_vars_eNB->lte_frame_parms.samples_per_tti;
// printf("subframe_offset = %d\n",subframe_offset);
slot_fep(PHY_vars_UE,
- l%(PHY_vars_eNb->lte_frame_parms.symbols_per_tti/2),
- l/(PHY_vars_eNb->lte_frame_parms.symbols_per_tti/2),
+ l%(PHY_vars_eNB->lte_frame_parms.symbols_per_tti/2),
+ l/(PHY_vars_eNB->lte_frame_parms.symbols_per_tti/2),
0,
0,
0);
@@ -1026,7 +972,7 @@ int main(int argc, char **argv)
*/
}
- if (l==((PHY_vars_eNb->lte_frame_parms.Ncp==0)?4:3)) {
+ if (l==((PHY_vars_eNB->lte_frame_parms.Ncp==0)?4:3)) {
//sprintf(fname,"dl_ch00_%d.m",l);
//sprintf(vname,"dl_ch00_%d",l);
//write_output(fname,vname,&(lte_ue_common_vars->dl_ch_estimates[0][lte_frame_parms->ofdm_symbol_size*(l%6)]),lte_frame_parms->ofdm_symbol_size,1,1);
@@ -1038,7 +984,7 @@ int main(int argc, char **argv)
1);
}
- if (l==((PHY_vars_eNb->lte_frame_parms.Ncp==0)?10:9)) {
+ if (l==((PHY_vars_eNB->lte_frame_parms.Ncp==0)?10:9)) {
for (frame_mod4=0; frame_mod4<4; frame_mod4++) {
pbch_tx_ant = rx_pbch(&PHY_vars_UE->lte_ue_common_vars,
@@ -1059,7 +1005,7 @@ int main(int argc, char **argv)
pbch_tx_ant = rx_pbch(&PHY_vars_UE->lte_ue_common_vars,
PHY_vars_UE->lte_ue_pbch_vars[0],
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
0,
ALAMOUTI,
PHY_vars_UE->high_speed_flag,
@@ -1119,10 +1065,10 @@ int main(int argc, char **argv)
if (n_frames==1) {
- write_output("H00.m","h00",&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][0][0]),((frame_parms->Ncp==0)?7:6)*(PHY_vars_eNb->lte_frame_parms.ofdm_symbol_size),1,1);
+ write_output("H00.m","h00",&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][0][0]),((frame_parms->Ncp==0)?7:6)*(PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size),1,1);
if (n_tx==2)
- write_output("H10.m","h10",&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][2][0]),((frame_parms->Ncp==0)?7:6)*(PHY_vars_eNb->lte_frame_parms.ofdm_symbol_size),1,1);
+ write_output("H10.m","h10",&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][2][0]),((frame_parms->Ncp==0)?7:6)*(PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size),1,1);
write_output("rxsig0.m","rxs0", PHY_vars_UE->lte_ue_common_vars.rxdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
write_output("rxsigF0.m","rxsF0", PHY_vars_UE->lte_ue_common_vars.rxdataF[0],NUMBER_OF_OFDM_CARRIERS*2*((frame_parms->Ncp==0)?14:12),2,1);
diff --git a/openair1/SIMULATION/LTE_PHY/pdcchsim.c b/openair1/SIMULATION/LTE_PHY/pdcchsim.c
index 7a36132980..3c717d2625 100644
--- a/openair1/SIMULATION/LTE_PHY/pdcchsim.c
+++ b/openair1/SIMULATION/LTE_PHY/pdcchsim.c
@@ -56,107 +56,15 @@ PHY_VARS_UE *PHY_vars_UE;
#define UL_RB_ALLOC 0x1ff;
#define CCCH_RB_ALLOC computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_UL,0,2)
-#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13
-
-void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,unsigned char extended_prefix_flag,uint16_t Nid_cell,uint8_t tdd_config,uint8_t N_RB_DL,
- lte_frame_type_t frame_type,uint8_t osf,uint32_t perfect_ce)
-{
-
- unsigned int i;
- LTE_DL_FRAME_PARMS *lte_frame_parms;
-
- printf("Start lte_param_init (Nid_cell %d, extended_prefix %d, transmission_mode %d, N_tx %d, N_rx %d)\n",
- Nid_cell, extended_prefix_flag,transmission_mode,N_tx,N_rx);
- PHY_vars_eNB = malloc(sizeof(PHY_VARS_eNB));
- PHY_vars_eNB1 = malloc(sizeof(PHY_VARS_eNB));
- PHY_vars_eNB2 = malloc(sizeof(PHY_VARS_eNB));
-
- PHY_vars_UE = malloc(sizeof(PHY_VARS_UE));
- //PHY_config = malloc(sizeof(PHY_CONFIG));
- mac_xface = malloc(sizeof(MAC_xface));
-
- randominit(0);
- set_taus_seed(0);
-
- lte_frame_parms = &(PHY_vars_eNB->lte_frame_parms);
-
- lte_frame_parms->N_RB_DL = N_RB_DL; //50 for 10MHz and 25 for 5 MHz
- lte_frame_parms->N_RB_UL = N_RB_DL;
- lte_frame_parms->Ncp = extended_prefix_flag;
- lte_frame_parms->Nid_cell = Nid_cell;
- lte_frame_parms->nushift = Nid_cell%6;
- lte_frame_parms->nb_antennas_tx_eNB = N_tx;
- lte_frame_parms->nb_antennas_tx = N_tx;
- lte_frame_parms->nb_antennas_rx = N_rx;
- lte_frame_parms->phich_config_common.phich_resource = one; //half
- lte_frame_parms->tdd_config = tdd_config;
- lte_frame_parms->frame_type = frame_type;
-
- // lte_frame_parms->Csrs = 2;
- // lte_frame_parms->Bsrs = 0;
- // lte_frame_parms->kTC = 0;
- // lte_frame_parms->n_RRC = 0;
- lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
-
- init_frame_parms(lte_frame_parms,osf);
-
- //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
-
-
- memcpy(&PHY_vars_UE->lte_frame_parms,lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
-
-
- phy_init_lte_top(lte_frame_parms);
-
- phy_init_lte_ue(PHY_vars_UE,1,0);
-
- phy_init_lte_eNB(PHY_vars_eNB,0,0,0);
-
- memcpy((void*)&PHY_vars_eNB1->lte_frame_parms,(void*)&PHY_vars_eNB->lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
- PHY_vars_eNB1->lte_frame_parms.nushift=(Nid_cell+1)%6;
- PHY_vars_eNB1->lte_frame_parms.Nid_cell=Nid_cell+1;
-
- memcpy((void*)&PHY_vars_eNB2->lte_frame_parms,(void*)&PHY_vars_eNB->lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
- PHY_vars_eNB2->lte_frame_parms.nushift=(Nid_cell+2)%6;
- PHY_vars_eNB2->lte_frame_parms.Nid_cell=Nid_cell+2;
-
- phy_init_lte_eNB(PHY_vars_eNB1,0,0,0);
-
- phy_init_lte_eNB(PHY_vars_eNB2,0,0,0);
-
- phy_init_lte_top(lte_frame_parms);
-
- PHY_vars_UE->PHY_measurements.n_adj_cells=2;
- PHY_vars_UE->PHY_measurements.adj_cell_id[0] = Nid_cell+1;
- PHY_vars_UE->PHY_measurements.adj_cell_id[1] = Nid_cell+2;
- PHY_vars_UE->perfect_ce = perfect_ce;
-
- for (i=0; i<3; i++)
- lte_gold(lte_frame_parms,PHY_vars_UE->lte_gold_table[i],Nid_cell+i);
-
- generate_pcfich_reg_mapping(&PHY_vars_UE->lte_frame_parms);
- generate_phich_reg_mapping(&PHY_vars_UE->lte_frame_parms);
-
- printf("Done lte_param_init\n");
-
- CCCH_alloc_pdu.type = 1;
- CCCH_alloc_pdu.vrb_type = 0;
- CCCH_alloc_pdu.rballoc = CCCH_RB_ALLOC;
- CCCH_alloc_pdu.ndi = 1;
- CCCH_alloc_pdu.mcs = 1;
- CCCH_alloc_pdu.harq_pid = 0;
-
-}
-
-
+#define DLSCH_RB_ALLOC ((uint16_t)0x1fbf) // igore DC component,RB13
DCI_PDU DCI_pdu;
DCI_PDU *get_dci(LTE_DL_FRAME_PARMS *lte_frame_parms,uint8_t log2L, uint8_t log2Lcommon, uint8_t format_selector, uint32_t rnti)
{
- uint8_t BCCH_alloc_pdu[8];
- uint8_t DLSCH_alloc_pdu[8];
- uint8_t UL_alloc_pdu[8];
+ uint32_t BCCH_alloc_pdu[2];
+ uint32_t DLSCH_alloc_pdu[2];
+ uint32_t UL_alloc_pdu[2];
int i;
int dci_length_bytes,dci_length;
@@ -462,31 +370,35 @@ DCI_PDU *get_dci(LTE_DL_FRAME_PARMS *lte_frame_parms,uint8_t log2L, uint8_t log2
DCI_pdu.dci_alloc[0].ra_flag = 0;
memcpy((void*)&DCI_pdu.dci_alloc[0].dci_pdu[0], &BCCH_alloc_pdu[0], BCCH_pdu_size_bytes);
DCI_pdu.Num_common_dci++;
- /*
+ if (lte_frame_parms->N_RB_DL >= 25) {
// add ue specific dci
- DCI_pdu.dci_alloc[1].dci_length = dci_length;
- DCI_pdu.dci_alloc[1].L = log2L;
- DCI_pdu.dci_alloc[1].rnti = rnti;
- DCI_pdu.dci_alloc[1].format = format1;
- DCI_pdu.dci_alloc[1].ra_flag = 0;
- memcpy((void*)&DCI_pdu.dci_alloc[1].dci_pdu[0], &DLSCH_alloc_pdu[0], dci_length_bytes);
- DCI_pdu.Num_ue_spec_dci++;
+ DCI_pdu.dci_alloc[1].dci_length = dci_length;
+ DCI_pdu.dci_alloc[1].L = log2L;
+ DCI_pdu.dci_alloc[1].rnti = rnti;
+ DCI_pdu.dci_alloc[1].format = format1;
+ DCI_pdu.dci_alloc[1].ra_flag = 0;
+ memcpy((void*)&DCI_pdu.dci_alloc[1].dci_pdu[0], &DLSCH_alloc_pdu[0], dci_length_bytes);
+ DCI_pdu.Num_ue_spec_dci++;
+
+ if (lte_frame_parms->N_RB_DL >= 50) {
+ DCI_pdu.dci_alloc[2].dci_length = UL_pdu_size_bits;
+ DCI_pdu.dci_alloc[2].L = log2L;
+ DCI_pdu.dci_alloc[2].rnti = rnti;
+ DCI_pdu.dci_alloc[2].format = format0;
+ DCI_pdu.dci_alloc[2].ra_flag = 0;
+ memcpy((void*)&DCI_pdu.dci_alloc[0].dci_pdu[0], &UL_alloc_pdu[0], UL_pdu_size_bytes);
+ DCI_pdu.Num_ue_spec_dci++;
+ }
+ }
+
- DCI_pdu.dci_alloc[0].dci_length = UL_pdu_size_bits;
- DCI_pdu.dci_alloc[0].L = log2L;
- DCI_pdu.dci_alloc[0].rnti = rnti;
- DCI_pdu.dci_alloc[0].format = format0;
- DCI_pdu.dci_alloc[0].ra_flag = 0;
- memcpy((void*)&DCI_pdu.dci_alloc[0].dci_pdu[0], &UL_alloc_pdu[0], UL_pdu_size_bytes);
- DCI_pdu.Num_ue_spec_dci++;
- */
DCI_pdu.nCCE = 0;
for (i=0; iUE_mode[0] = PUSCH;
- nCCE_max = get_nCCE(3,&PHY_vars_eNB->lte_frame_parms,get_mi(&PHY_vars_eNB->lte_frame_parms,0));
+ // nCCE_max = get_nCCE(3,&PHY_vars_eNB->lte_frame_parms,get_mi(&PHY_vars_eNB->lte_frame_parms,0));
//printf("nCCE_max %d\n",nCCE_max);
//printf("num_phich interferers %d\n",num_phich_interf);
@@ -955,55 +866,62 @@ int main(int argc, char **argv)
numCCE=0;
n_trials_common++;
common_active = 1;
- n_trials_ul++;
- ul_active = 1;
- n_trials_dl++;
- dl_active = 1;
+ if (PHY_vars_eNB->lte_frame_parms.N_RB_DL >= 50) {
+ n_trials_ul++;
+ ul_active = 1;
+ }
+ if (PHY_vars_eNB->lte_frame_parms.N_RB_DL >= 25) {
+ n_trials_dl++;
+ dl_active = 1;
+ }
- init_nCCE_table();
num_pdcch_symbols = get_num_pdcch_symbols(DCI_pdu.Num_common_dci+DCI_pdu.Num_ue_spec_dci,
DCI_pdu.dci_alloc, frame_parms, subframe);
- DCI_pdu.nCCE = get_nCCE(num_pdcch_symbols,&PHY_vars_eNB->lte_frame_parms,get_mi(&PHY_vars_eNB->lte_frame_parms,subframe));
+ numCCE = get_nCCE(num_pdcch_symbols,&PHY_vars_eNB->lte_frame_parms,get_mi(&PHY_vars_eNB->lte_frame_parms,subframe));
if (n_frames==1) {
printf("num_dci %d, num_pddch_symbols %d, nCCE %d\n",
DCI_pdu.Num_common_dci+DCI_pdu.Num_ue_spec_dci,
- num_pdcch_symbols,
- DCI_pdu.nCCE);
+ num_pdcch_symbols,numCCE);
}
// apply RNTI-based nCCE allocation
+ memset(CCE_table,0,800*sizeof(int));
+
for (i = 0; i < DCI_pdu.Num_common_dci + DCI_pdu.Num_ue_spec_dci; i++) {
// SI RNTI
if (DCI_pdu.dci_alloc[i].rnti == SI_RNTI) {
- DCI_pdu.dci_alloc[i].nCCE = get_nCCE_offset(1<0) {
PHY_vars_eNB->ulsch_eNB[0]->harq_processes[harq_pid]->first_rb = 4;
@@ -1064,7 +982,7 @@ int main(int argc, char **argv)
}
PHY_vars_eNB->ulsch_eNB[0]->harq_processes[harq_pid]->first_rb = 0;
- */
+
}
// write_output("pilotsF.m","rsF",txdataF[0],lte_PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,1,1);
@@ -1084,7 +1002,7 @@ int main(int argc, char **argv)
if (PHY_vars_eNB->lte_frame_parms.Ncp == 1)
PHY_ofdm_mod(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa][subframe*nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size], // input,
&txdata[aa][subframe*PHY_vars_eNB->lte_frame_parms.samples_per_tti], // output
- PHY_vars_eNB->lte_frame_parms.log2_symbol_size, // log2_fft_size
+ PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,
2*nsymb, // number of symbols
PHY_vars_eNB->lte_frame_parms.nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
@@ -1244,7 +1162,7 @@ int main(int argc, char **argv)
for (i = 0; i < dci_cnt; i++)
printf("dci %d: rnti 0x%x, format %d, L %d, nCCE %d/%d dci_length %d\n",i, dci_alloc_rx[i].rnti, dci_alloc_rx[i].format,
- dci_alloc_rx[i].L, dci_alloc_rx[i].nCCE, numCCE, dci_alloc_rx[i].dci_length);
+ dci_alloc_rx[i].L, dci_alloc_rx[i].firstCCE, numCCE, dci_alloc_rx[i].dci_length);
}
for (i=0; ilte_frame_parms);
-
- lte_frame_parms->N_RB_DL = N_RB_DL; //50 for 10MHz and 25 for 5 MHz
- lte_frame_parms->N_RB_UL = N_RB_DL;
- lte_frame_parms->Ncp = extended_prefix_flag;
- lte_frame_parms->Nid_cell = Nid_cell;
- lte_frame_parms->nushift = 0;
- lte_frame_parms->nb_antennas_tx = N_tx;
- lte_frame_parms->nb_antennas_rx = N_rx;
- // lte_frame_parms->Csrs = 2;
- // lte_frame_parms->Bsrs = 0;
- // lte_frame_parms->kTC = 0;
- // lte_frame_parms->n_RRC = 0;
- lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
- lte_frame_parms->tdd_config = 1;
- lte_frame_parms->frame_type = 1;
- init_frame_parms(lte_frame_parms,osf);
-
- //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
-
-
- PHY_vars_UE->lte_frame_parms = *lte_frame_parms;
-
- phy_init_lte_top(lte_frame_parms);
-
- phy_init_lte_ue(PHY_vars_UE,1,0);
-
- phy_init_lte_eNB(PHY_vars_eNB,0,0,0);
-
-
-
-
-
- printf("Done lte_param_init\n");
-
-}
-
extern uint16_t prach_root_sequence_map0_3[838];
int main(int argc, char **argv)
@@ -370,7 +318,16 @@ int main(int argc, char **argv)
if (transmission_mode==2)
n_tx=2;
- lte_param_init(n_tx,n_rx,transmission_mode,extended_prefix_flag,Nid_cell,N_RB_DL,osf);
+ lte_param_init(n_tx,
+ n_rx,
+ transmission_mode,
+ extended_prefix_flag,
+ FDD,
+ Nid_cell,
+ 3,
+ N_RB_DL,
+ osf,
+ 0);
if (snr1set==0) {
diff --git a/openair1/SIMULATION/LTE_PHY/pucchsim.c b/openair1/SIMULATION/LTE_PHY/pucchsim.c
index d9a3367b90..42de78ac74 100644
--- a/openair1/SIMULATION/LTE_PHY/pucchsim.c
+++ b/openair1/SIMULATION/LTE_PHY/pucchsim.c
@@ -58,60 +58,6 @@ PHY_VARS_UE *PHY_vars_UE;
-void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,unsigned char extended_prefix_flag,uint16_t Nid_cell,uint8_t N_RB_DL,uint8_t osf)
-{
-
- LTE_DL_FRAME_PARMS *lte_frame_parms;
-
- printf("Start lte_param_init\n");
- PHY_vars_eNB = malloc(sizeof(PHY_VARS_eNB));
-
- PHY_vars_UE = malloc(sizeof(PHY_VARS_UE));
- //PHY_config = malloc(sizeof(PHY_CONFIG));
- mac_xface = malloc(sizeof(MAC_xface));
-
- randominit(0);
- set_taus_seed(0);
-
- lte_frame_parms = &(PHY_vars_eNB->lte_frame_parms);
-
- lte_frame_parms->N_RB_DL = N_RB_DL; //50 for 10MHz and 25 for 5 MHz
- lte_frame_parms->N_RB_UL = N_RB_DL;
- lte_frame_parms->Ncp = extended_prefix_flag;
- lte_frame_parms->Nid_cell = Nid_cell;
- lte_frame_parms->nushift = 0;
- lte_frame_parms->nb_antennas_tx = N_tx;
- lte_frame_parms->nb_antennas_rx = N_rx;
- // lte_frame_parms->Csrs = 2;
- // lte_frame_parms->Bsrs = 0;
- // lte_frame_parms->kTC = 0;
- // lte_frame_parms->n_RRC = 0;
- lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
- lte_frame_parms->tdd_config = 3;
- lte_frame_parms->frame_type = 0;
- init_frame_parms(lte_frame_parms,osf);
-
- //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
-
-// phy_init_top(lte_frame_parms); //allocation
-
- PHY_vars_UE->lte_frame_parms = *lte_frame_parms;
-
-
- phy_init_lte_ue(PHY_vars_UE,1,0);
-
- phy_init_lte_eNB(PHY_vars_eNB,0,0,0);
-
- phy_init_lte_top(lte_frame_parms);
-
-
-
-
- printf("Done lte_param_init\n");
-
-}
-
-
int main(int argc, char **argv)
{
@@ -246,7 +192,7 @@ int main(int argc, char **argv)
break;
default:
- msg("Unsupported channel model!\n");
+ printf("Unsupported channel model!\n");
exit(-1);
}
@@ -258,13 +204,13 @@ int main(int argc, char **argv)
case 's':
snr0 = atof(optarg);
- msg("Setting SNR0 to %f\n",snr0);
+ printf("Setting SNR0 to %f\n",snr0);
break;
case 'S':
snr1 = atof(optarg);
snr1set=1;
- msg("Setting SNR1 to %f\n",snr1);
+ printf("Setting SNR1 to %f\n",snr1);
break;
case 'p':
@@ -287,7 +233,7 @@ int main(int argc, char **argv)
if ((transmission_mode!=1) &&
(transmission_mode!=2) &&
(transmission_mode!=6)) {
- msg("Unsupported transmission mode %d\n",transmission_mode);
+ printf("Unsupported transmission mode %d\n",transmission_mode);
exit(-1);
}
@@ -297,7 +243,7 @@ int main(int argc, char **argv)
n_tx=atoi(optarg);
if ((n_tx==0) || (n_tx>2)) {
- msg("Unsupported number of tx antennas %d\n",n_tx);
+ printf("Unsupported number of tx antennas %d\n",n_tx);
exit(-1);
}
@@ -307,7 +253,7 @@ int main(int argc, char **argv)
n_rx=atoi(optarg);
if ((n_rx==0) || (n_rx>2)) {
- msg("Unsupported number of rx antennas %d\n",n_rx);
+ printf("Unsupported number of rx antennas %d\n",n_rx);
exit(-1);
}
@@ -368,7 +314,16 @@ int main(int argc, char **argv)
if (transmission_mode==2)
n_tx=2;
- lte_param_init(n_tx,n_rx,transmission_mode,extended_prefix_flag,Nid_cell,N_RB_DL,osf);
+ lte_param_init(n_tx,
+ n_rx,
+ transmission_mode,
+ extended_prefix_flag,
+ Nid_cell,
+ FDD,
+ 3,
+ N_RB_DL,
+ osf,
+ 0);
if (snr1set==0) {
@@ -412,7 +367,7 @@ int main(int argc, char **argv)
- msg("[SIM] Using SCM/101\n");
+ printf("[SIM] Using SCM/101\n");
UE2eNB = new_channel_desc_scm(PHY_vars_eNB->lte_frame_parms.nb_antennas_tx,
PHY_vars_UE->lte_frame_parms.nb_antennas_rx,
channel_model,
@@ -424,7 +379,7 @@ int main(int argc, char **argv)
if (UE2eNB==NULL) {
- msg("Problem generating channel model. Exiting.\n");
+ printf("Problem generating channel model. Exiting.\n");
exit(-1);
}
@@ -452,7 +407,7 @@ int main(int argc, char **argv)
PHY_vars_UE->lte_frame_parms.pucch_config_common.nRB_CQI = 0;
PHY_vars_UE->lte_frame_parms.pucch_config_common.nCS_AN = 0;
- pucch_payload = 1;
+ pucch_payload = 0;
generate_pucch(PHY_vars_UE->lte_ue_common_vars.txdataF,
frame_parms,
@@ -473,7 +428,7 @@ int main(int argc, char **argv)
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(txdataF2[aa], // input
txdata[aa], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
2*nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
@@ -496,7 +451,7 @@ int main(int argc, char **argv)
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(&PHY_vars_UE->lte_ue_common_vars.txdataF[aa][2*subframe*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX], // input,
&txdata[aa][PHY_vars_eNB->lte_frame_parms.samples_per_tti*subframe], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
@@ -595,9 +550,7 @@ int main(int argc, char **argv)
}
}
- lte_eNB_I0_measurements(PHY_vars_eNB,
- 0,
- 1);
+
for (i=0; i<2*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES; i++) {
for (aa=0; aalte_frame_parms.nb_antennas_rx; aa++) {
@@ -645,6 +598,10 @@ int main(int argc, char **argv)
// if (sig == 1)
// printf("*");
+ lte_eNB_I0_measurements(PHY_vars_eNB,
+ subframe,
+ 0,
+ 1);
PHY_vars_eNB->PHY_measurements_eNB[0].n0_power_tot_dB = N0;//(int8_t)(sigma2_dB-10*log10(PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size/(12*NB_RB)));
stat = rx_pucch(PHY_vars_eNB,
pucch_format,
diff --git a/openair1/SIMULATION/LTE_PHY/scansim.c b/openair1/SIMULATION/LTE_PHY/scansim.c
index c2ceb1c58d..2cbb7b3e32 100644
--- a/openair1/SIMULATION/LTE_PHY/scansim.c
+++ b/openair1/SIMULATION/LTE_PHY/scansim.c
@@ -56,94 +56,11 @@
#define BW 20.0
-PHY_VARS_eNB *PHY_vars_eNb,*PHY_vars_eNb1,*PHY_vars_eNb2;
+PHY_VARS_eNB *PHY_vars_eNB,*PHY_vars_eNB1,*PHY_vars_eNB2;
PHY_VARS_UE *PHY_vars_UE;
#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13
-void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,unsigned char extended_prefix_flag,unsigned char frame_type, uint16_t Nid_cell,uint8_t N_RB_DL,uint8_t osf)
-{
-
- // unsigned int ind;
- LTE_DL_FRAME_PARMS *lte_frame_parms;
- int i;
-
- printf("Start lte_param_init\n");
- PHY_vars_eNb = malloc(sizeof(PHY_VARS_eNB));
- PHY_vars_eNb1 = malloc(sizeof(PHY_VARS_eNB));
- PHY_vars_eNb2 = malloc(sizeof(PHY_VARS_eNB));
-
- PHY_vars_UE = malloc(sizeof(PHY_VARS_UE));
- //PHY_config = malloc(sizeof(PHY_CONFIG));
- mac_xface = malloc(sizeof(MAC_xface));
-
- randominit(0);
- set_taus_seed(0);
-
- lte_frame_parms = &(PHY_vars_eNb->lte_frame_parms);
-
- lte_frame_parms->N_RB_DL = N_RB_DL; //50 for 10MHz and 25 for 5 MHz
- lte_frame_parms->N_RB_UL = N_RB_DL;
- lte_frame_parms->Ncp = extended_prefix_flag;
- lte_frame_parms->Nid_cell = Nid_cell;
- lte_frame_parms->nushift = Nid_cell%6;
- lte_frame_parms->nb_antennas_tx = N_tx;
- lte_frame_parms->nb_antennas_tx_eNB = N_tx;
- lte_frame_parms->nb_antennas_rx = N_rx;
- // lte_frame_parms->Csrs = 2;
- // lte_frame_parms->Bsrs = 0;
- // lte_frame_parms->kTC = 0;
- // lte_frame_parms->n_RRC = 0;
- lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
- lte_frame_parms->tdd_config = 3;
- lte_frame_parms->frame_type = frame_type;
- init_frame_parms(lte_frame_parms,osf);
-
- //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
-
-
- PHY_vars_UE->lte_frame_parms = *lte_frame_parms;
-
- phy_init_lte_top(lte_frame_parms);
-
- PHY_vars_UE->PHY_measurements.n_adj_cells=2;
- PHY_vars_UE->PHY_measurements.adj_cell_id[0] = Nid_cell+1;
- PHY_vars_UE->PHY_measurements.adj_cell_id[1] = Nid_cell+2;
-
- for (i=0; i<3; i++)
- lte_gold(lte_frame_parms,PHY_vars_UE->lte_gold_table[i],Nid_cell+i);
-
- phy_init_lte_ue(PHY_vars_UE,1,0);
-
- phy_init_lte_eNB(PHY_vars_eNb,0,0,0);
-
- for (i=0; i<10; i++) {
- PHY_vars_UE->scan_info[0].amp[0][i] = 0;
- PHY_vars_UE->scan_info[0].amp[1][i] = 0;
- PHY_vars_UE->scan_info[0].amp[2][i] = 0;
- }
-
- memcpy((void*)&PHY_vars_eNb1->lte_frame_parms,(void*)&PHY_vars_eNb->lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
- PHY_vars_eNb1->lte_frame_parms.Nid_cell=Nid_cell+1;
- PHY_vars_eNb1->lte_frame_parms.nushift=(Nid_cell+1)%6;
- PHY_vars_eNb1->Mod_id=1;
-
- memcpy((void*)&PHY_vars_eNb2->lte_frame_parms,(void*)&PHY_vars_eNb->lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
- PHY_vars_eNb2->lte_frame_parms.Nid_cell=Nid_cell+2;
- PHY_vars_eNb2->lte_frame_parms.nushift=(Nid_cell+2)%6;
- PHY_vars_eNb2->Mod_id=2;
-
- phy_init_lte_eNB(PHY_vars_eNb1,0,0,0);
-
- phy_init_lte_eNB(PHY_vars_eNb2,0,0,0);
-
- phy_init_lte_top(lte_frame_parms);
-
- printf("Done lte_param_init\n");
-
-
-}
-
mod_sym_t *dummybuf[4];
mod_sym_t dummy0[2048*14];
mod_sym_t dummy1[2048*14];
@@ -404,7 +321,16 @@ int main(int argc, char **argv)
if (transmission_mode>=2)
n_tx=2;
- lte_param_init(n_tx,n_rx,transmission_mode,extended_prefix_flag,frame_type,Nid_cell,N_RB_DL,osf);
+ lte_param_init(n_tx,
+ n_rx,
+ transmission_mode,
+ extended_prefix_flag,
+ frame_type,
+ Nid_cell,
+ 3,
+ N_RB_DL,
+ osf,
+ 0);
#ifdef XFORMS
fl_initialize (&argc, argv, NULL, 0, 0);
@@ -422,13 +348,13 @@ int main(int argc, char **argv)
printf("SNR0 %f, SNR1 %f\n",snr0,snr1);
- frame_parms = &PHY_vars_eNb->lte_frame_parms;
+ frame_parms = &PHY_vars_eNB->lte_frame_parms;
- txdata = PHY_vars_eNb->lte_eNB_common_vars.txdata[0];
- txdata1 = PHY_vars_eNb1->lte_eNB_common_vars.txdata[0];
- txdata2 = PHY_vars_eNb2->lte_eNB_common_vars.txdata[0];
+ txdata = PHY_vars_eNB->lte_eNB_common_vars.txdata[0];
+ txdata1 = PHY_vars_eNB1->lte_eNB_common_vars.txdata[0];
+ txdata2 = PHY_vars_eNB2->lte_eNB_common_vars.txdata[0];
s_re = malloc(2*sizeof(double*));
@@ -449,8 +375,8 @@ int main(int argc, char **argv)
printf("FFT Size %d, Extended Prefix %d, Samples per subframe %d, Symbols per subframe %d\n",NUMBER_OF_OFDM_CARRIERS,
frame_parms->Ncp,frame_parms->samples_per_tti,nsymb);
- printf("PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0][0] = %p\n",
- PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0][0]);
+ printf("PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0][0] = %p\n",
+ PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0][0]);
DLSCH_alloc_pdu2.rah = 0;
@@ -465,13 +391,14 @@ int main(int argc, char **argv)
// Forget second codeword
DLSCH_alloc_pdu2.tpmi = (transmission_mode==6 ? 5 : 0) ; // precoding
- eNB2UE = new_channel_desc_scm(PHY_vars_eNb->lte_frame_parms.nb_antennas_tx,
- PHY_vars_UE->lte_frame_parms.nb_antennas_rx,
- channel_model,
- BW,
- 0,
- 0,
- 0);
+ eNB2UE = new_channel_desc_scm(PHY_vars_eNB->lte_frame_parms.nb_antennas_tx,
+ PHY_vars_UE->lte_frame_parms.nb_antennas_rx,
+ channel_model,
+ N_RB2sampling_rate(PHY_vars_eNB->lte_frame_parms.N_RB_DL),
+ N_RB2channel_bandwidth(PHY_vars_eNB->lte_frame_parms.N_RB_DL),
+ 0,
+ 0,
+ 0);
if (eNB2UE==NULL) {
@@ -512,51 +439,51 @@ int main(int argc, char **argv)
pbch_pdu[1]=1;
pbch_pdu[2]=0;
- if (PHY_vars_eNb->lte_frame_parms.frame_type == FDD) {
- generate_pss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ if (PHY_vars_eNB->lte_frame_parms.frame_type == FDD) {
+ generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==NORMAL) ? 6 : 5,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 6 : 5,
0);
/*
- generate_sss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 5 : 4,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 5 : 4,
0);*/
- generate_pss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 6 : 5,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
10);
/*
- generate_sss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 5 : 4,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 5 : 4,
10);
*/
} else {
- generate_sss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 6 : 5,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
1);
- generate_pss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
2,
2);
- generate_sss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 6 : 5,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
11);
- generate_pss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
2,
12);
@@ -565,8 +492,8 @@ int main(int argc, char **argv)
/*
- generate_pilots(PHY_vars_eNb,
- PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pilots(PHY_vars_eNB,
+ PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME);
@@ -577,8 +504,8 @@ int main(int argc, char **argv)
dci_alloc,
0,
1024,
- &PHY_vars_eNb->lte_frame_parms,
- PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ &PHY_vars_eNB->lte_frame_parms,
+ PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
0);
*/
@@ -593,25 +520,25 @@ int main(int argc, char **argv)
dummybuf[1] = dummy1;
dummybuf[2] = dummy2;
dummybuf[3] = dummy3;
- generate_pbch(&PHY_vars_eNb->lte_eNB_pbch,
+ generate_pbch(&PHY_vars_eNB->lte_eNB_pbch,
(mod_sym_t**)dummybuf,
AMP,
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
pbch_pdu,
0);
}
- generate_pbch(&PHY_vars_eNb->lte_eNB_pbch,
- PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pbch(&PHY_vars_eNB->lte_eNB_pbch,
+ PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
pbch_pdu,
pbch_phase);
*/
- write_output("txsigF0.m","txsF0", PHY_vars_eNb->lte_eNB_common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
+ write_output("txsigF0.m","txsF0", PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
- if (PHY_vars_eNb->lte_frame_parms.nb_antennas_tx>1)
- write_output("txsigF1.m","txsF1", PHY_vars_eNb->lte_eNB_common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
+ if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1)
+ write_output("txsigF1.m","txsF1", PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
tx_lev = 0;
tx_lev1 = 0;
@@ -620,16 +547,16 @@ int main(int argc, char **argv)
- for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
+ for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
if (frame_parms->Ncp == 1)
- PHY_ofdm_mod(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0][aa], // input,
+ PHY_ofdm_mod(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][aa], // input,
txdata[aa], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
else {
- normal_prefix_mod(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0][aa],
+ normal_prefix_mod(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][aa],
txdata[aa],
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb,
frame_parms);
@@ -648,7 +575,7 @@ int main(int argc, char **argv)
// multipath channel
for (i=0; i<2*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES; i++) {
- for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
+ for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
s_re[aa][i] = ((double)(((short *)txdata[aa]))[(i<<1)]);
s_im[aa][i] = ((double)(((short *)txdata[aa]))[(i<<1)+1]);
}
@@ -667,7 +594,7 @@ int main(int argc, char **argv)
multipath_channel(eNB2UE,s_re,s_im,r_re,r_im,
2*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES,0);
- sigma2_dB = 10*log10((double)tx_lev) +10*log10((double)PHY_vars_eNb->lte_frame_parms.ofdm_symbol_size/(double)(12*NB_RB)) - SNR;
+ sigma2_dB = 10*log10((double)tx_lev) +10*log10((double)PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size/(double)(12*NB_RB)) - SNR;
if (n_frames==1)
printf("sigma2_dB %f (SNR %f dB) tx_lev_dB %f,%f,%f\n",sigma2_dB,SNR,
@@ -689,7 +616,7 @@ int main(int argc, char **argv)
for (n_trials=0; n_trialslte_frame_parms.nb_antennas_rx; aa++) {
+ for (aa=0; aalte_frame_parms.nb_antennas_rx; aa++) {
((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[2*i] = (short) ((r_re[aa][i] +sqrt(sigma2/2)*gaussdouble(0.0,1.0)));
((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[2*i+1] = (short) ((r_im[aa][i] + (iqim*r_re[aa][i]) + sqrt(sigma2/2)*gaussdouble(0.0,1.0)));
}
diff --git a/openair1/SIMULATION/LTE_PHY/syncsim.c b/openair1/SIMULATION/LTE_PHY/syncsim.c
index a5f046da93..45b69adcc5 100644
--- a/openair1/SIMULATION/LTE_PHY/syncsim.c
+++ b/openair1/SIMULATION/LTE_PHY/syncsim.c
@@ -1189,7 +1189,7 @@ int main(int argc, char **argv)
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(txdataF2[aa], // input
txdata[aa], // output
- PHY_vars_eNB->lte_frame_parms.log2_symbol_size, // log2_fft_size
+ PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size, // log2_fft_size
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb, // number of symbols
PHY_vars_eNB->lte_frame_parms.nb_prefix_samples, // number of prefix samples
PHY_vars_eNB->lte_frame_parms.twiddle_ifft, // IFFT twiddle factors
@@ -1218,7 +1218,7 @@ int main(int argc, char **argv)
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa], // input,
txdata[aa], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size, // log2_fft_size
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
frame_parms->twiddle_ifft, // IFFT twiddle factors
@@ -1240,7 +1240,7 @@ int main(int argc, char **argv)
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(PHY_vars_eNB1->lte_eNB_common_vars.txdataF[eNb_id][aa], // input,
PHY_vars_eNB1->lte_eNB_common_vars.txdata[eNb_id][aa], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size, // log2_fft_size
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
frame_parms->twiddle_ifft, // IFFT twiddle factors
@@ -1260,7 +1260,7 @@ int main(int argc, char **argv)
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(PHY_vars_eNB2->lte_eNB_common_vars.txdataF[eNb_id][aa], // input,
PHY_vars_eNB2->lte_eNB_common_vars.txdata[eNb_id][aa], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size, // log2_fft_size
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
frame_parms->twiddle_ifft, // IFFT twiddle factors
diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c
index de2789acef..463c74c123 100644
--- a/openair1/SIMULATION/LTE_PHY/ulsim.c
+++ b/openair1/SIMULATION/LTE_PHY/ulsim.c
@@ -89,60 +89,6 @@ double t_rx_min = 1000000000; /*!< \brief initial min process time for tx */
int n_tx_dropped = 0; /*!< \brief initial max process time for tx */
int n_rx_dropped = 0; /*!< \brief initial max process time for rx */
-void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,uint8_t extended_prefix_flag,uint8_t N_RB_DL,uint8_t frame_type,uint8_t tdd_config,uint8_t osf)
-{
-
- LTE_DL_FRAME_PARMS *lte_frame_parms;
-
- printf("Start lte_param_init\n");
- PHY_vars_eNB = malloc(sizeof(PHY_VARS_eNB));
- PHY_vars_UE = malloc(sizeof(PHY_VARS_UE));
- //PHY_config = malloc(sizeof(PHY_CONFIG));
- mac_xface = malloc(sizeof(MAC_xface));
-
- randominit(0);
- set_taus_seed(0);
-
- lte_frame_parms = &(PHY_vars_eNB->lte_frame_parms);
-
- lte_frame_parms->frame_type = frame_type;
- lte_frame_parms->tdd_config = tdd_config;
- lte_frame_parms->N_RB_DL = N_RB_DL; //50 for 10MHz and 25 for 5 MHz
- lte_frame_parms->N_RB_UL = N_RB_DL;
- lte_frame_parms->Ncp = extended_prefix_flag;
- lte_frame_parms->Ncp_UL = extended_prefix_flag;
- lte_frame_parms->Nid_cell = 10;
- lte_frame_parms->nushift = 0;
- lte_frame_parms->nb_antennas_tx = N_tx;
- lte_frame_parms->nb_antennas_rx = N_rx;
- // lte_frame_parms->Csrs = 2;
- // lte_frame_parms->Bsrs = 0;
- // lte_frame_parms->kTC = 0;
- // lte_frame_parms->n_RRC = 0;
- lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
- lte_frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = 0;//n_DMRS1 set to 0
-
- init_frame_parms(lte_frame_parms,osf);
-
- //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
-
-
- PHY_vars_UE->lte_frame_parms = *lte_frame_parms;
-
- phy_init_lte_top(lte_frame_parms);
-
- phy_init_lte_ue(PHY_vars_UE,1,0);
-
- phy_init_lte_eNB(PHY_vars_eNB,0,0,0);
-
- printf("Done lte_param_init\n");
-
-
-}
-
-
-
-
int main(int argc, char **argv)
{
@@ -151,7 +97,7 @@ int main(int argc, char **argv)
int aarx,aatx;
double channelx,channely;
- double sigma2, sigma2_dB=10,SNR,SNR2,snr0=-2.0,snr1,SNRmeas,rate,saving_bler;
+ double sigma2, sigma2_dB=10,SNR,SNR2,snr0=-2.0,snr1,SNRmeas,rate,saving_bler=0;
double input_snr_step=.2,snr_int=30;
double blerr;
@@ -180,7 +126,7 @@ int main(int argc, char **argv)
unsigned int coded_bits_per_codeword,nsymb;
int subframe=3;
unsigned int tx_lev=0,tx_lev_dB,trials,errs[4]= {0,0,0,0},round_trials[4]= {0,0,0,0};
- uint8_t transmission_mode=1,n_rx=1,n_tx=1;
+ uint8_t transmission_mode=1,n_rx=1;
FILE *bler_fd=NULL;
char bler_fname[512];
@@ -248,6 +194,7 @@ int main(int argc, char **argv)
int nb_rb_set = 0;
int sf;
+ int threequarter_fs=0;
opp_enabled=1; // to enable the time meas
cpu_freq_GHz = (double)get_cpu_freq_GHz();
@@ -257,7 +204,7 @@ int main(int argc, char **argv)
logInit();
- while ((c = getopt (argc, argv, "hapZbm:n:Y:X:x:s:w:e:q:d:D:O:c:r:i:f:y:c:oA:C:R:g:N:l:S:T:QB:PI:L")) != -1) {
+ while ((c = getopt (argc, argv, "hapZEbm:n:Y:X:x:s:w:e:q:d:D:O:c:r:i:f:y:c:oA:C:R:g:N:l:S:T:QB:PI:L")) != -1) {
switch (c) {
case 'a':
channel_model = AWGN;
@@ -395,10 +342,6 @@ int main(int argc, char **argv)
exit(-1);
}
- if (transmission_mode>1) {
- n_tx = 1;
- }
-
break;
case 'y':
@@ -431,6 +374,10 @@ int main(int argc, char **argv)
cyclic_shift = atoi(optarg);
break;
+ case 'E':
+ threequarter_fs=1;
+ break;
+
case 'N':
N0 = atoi(optarg);
break;
@@ -520,7 +467,17 @@ int main(int argc, char **argv)
}
}
- lte_param_init(1,n_rx,1,extended_prefix_flag,N_RB_DL,frame_type,tdd_config,osf);
+ lte_param_init(1,
+ n_rx,
+ 1,
+ extended_prefix_flag,
+ frame_type,
+ 0,
+ tdd_config,
+ N_RB_DL,
+ threequarter_fs,
+ osf,
+ 0);
if (nb_rb_set == 0)
nb_rb = PHY_vars_eNB->lte_frame_parms.N_RB_UL;
@@ -690,8 +647,8 @@ int main(int argc, char **argv)
// Create transport channel structures for 2 transport blocks (MIMO)
for (i=0; i<2; i++) {
- PHY_vars_eNB->dlsch_eNB[0][i] = new_eNB_dlsch(1,8,N_RB_DL,0);
- PHY_vars_UE->dlsch_ue[0][i] = new_ue_dlsch(1,8,MAX_TURBO_ITERATIONS,N_RB_DL,0);
+ PHY_vars_eNB->dlsch_eNB[0][i] = new_eNB_dlsch(1,8,1827072,N_RB_DL,0);
+ PHY_vars_UE->dlsch_ue[0][i] = new_ue_dlsch(1,8,1827072,MAX_TURBO_ITERATIONS,N_RB_DL,0);
if (!PHY_vars_eNB->dlsch_eNB[0][i]) {
printf("Can't get eNB dlsch structures\n");
@@ -706,7 +663,7 @@ int main(int argc, char **argv)
PHY_vars_eNB->dlsch_eNB[0][i]->rnti = 14;
PHY_vars_UE->dlsch_ue[0][i]->rnti = 14;
- }
+ }
switch (PHY_vars_eNB->lte_frame_parms.N_RB_UL) {
@@ -894,11 +851,11 @@ int main(int argc, char **argv)
harq_pid = subframe2harq_pid(&PHY_vars_UE->lte_frame_parms,PHY_vars_UE->frame_tx,subframe);
-
+ input_buffer_length = PHY_vars_UE->ulsch_ue[0]->harq_processes[harq_pid]->TBS/8;
+ input_buffer = (unsigned char *)malloc(input_buffer_length+4);
// printf("UL frame %d/subframe %d, harq_pid %d\n",PHY_vars_UE->frame,subframe,harq_pid);
if (input_fdUL == NULL) {
- input_buffer_length = PHY_vars_UE->ulsch_ue[0]->harq_processes[harq_pid]->TBS/8;
- input_buffer = (unsigned char *)malloc(input_buffer_length+4);
+
if (n_frames == 1) {
trch_out_fdUL= fopen("ulsch_trchUL.txt","w");
@@ -920,7 +877,7 @@ int main(int argc, char **argv)
i=0;
while (!feof(input_fdUL)) {
- fscanf(input_fdUL,"%s %s",input_val_str,input_val_str2);//&input_val1,&input_val2);
+ ret=fscanf(input_fdUL,"%s %s",input_val_str,input_val_str2);//&input_val1,&input_val2);
if ((i%4)==0) {
((short*)txdata[0])[i/2] = (short)((1<<15)*strtod(input_val_str,NULL));
@@ -1109,7 +1066,7 @@ int main(int argc, char **argv)
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(&PHY_vars_UE->lte_ue_common_vars.txdataF[aa][subframe*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX], // input
&txdata[aa][PHY_vars_eNB->lte_frame_parms.samples_per_tti*subframe], // output
- PHY_vars_UE->lte_frame_parms.log2_symbol_size, // log2_fft_size
+ PHY_vars_UE->lte_frame_parms.ofdm_symbol_size,
nsymb, // number of symbols
PHY_vars_UE->lte_frame_parms.nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
@@ -1250,6 +1207,7 @@ int main(int argc, char **argv)
start_meas(&PHY_vars_eNB->phy_proc_rx);
start_meas(&PHY_vars_eNB->ofdm_demod_stats);
lte_eNB_I0_measurements(PHY_vars_eNB,
+ subframe,
0,
1);
diff --git a/openair1/SIMULATION/TOOLS/abstraction.c b/openair1/SIMULATION/TOOLS/abstraction.c
index b896a2ad78..938c8cdacd 100644
--- a/openair1/SIMULATION/TOOLS/abstraction.c
+++ b/openair1/SIMULATION/TOOLS/abstraction.c
@@ -64,7 +64,7 @@ int init_freq_channel(channel_desc_t *desc,uint16_t nb_rb,int16_t n_samples)
delta_f = nb_rb*180000/(n_samples-1);
- for (f=-(n_samples>>1); f<(n_samples>>1); f++) {
+ for (f=-(n_samples>>1); f<=(n_samples>>1); f++) {
freq=delta_f*(double)f*1e-6;// due to the fact that delays is in mus
cos_lut[f+(n_samples>>1)] = (double *)malloc((int)desc->nb_taps*sizeof(double));
@@ -122,7 +122,7 @@ int freq_channel(channel_desc_t *desc,uint16_t nb_rb,int16_t n_samples)
start_meas(&desc->interp_freq);
- for (f=-n_samples_max/2,f2=-n_samples/2; fmnc);
}
+
+ for (j=0; j< enb_properties.properties[i]->nb_rrh_gw; j++) {
+ if (enb_properties.properties[i]->rrh_gw_config[j].active == 1 ){
+ printf( "\n\tRRH GW %d config for eNB %u:\n\n", j, i);
+ printf( "\tinterface name : \t%s:\n",enb_properties.properties[i]->rrh_gw_if_name);
+ printf( "\tlocal address : \t%s:\n",enb_properties.properties[i]->rrh_gw_config[j].local_address);
+ printf( "\tlocal port : \t%d:\n",enb_properties.properties[i]->rrh_gw_config[j].local_port);
+ printf( "\tremote address : \t%s:\n",enb_properties.properties[i]->rrh_gw_config[j].remote_address);
+ printf( "\tremote port : \t%d:\n",enb_properties.properties[i]->rrh_gw_config[j].remote_port);
+ printf( "\ttx_scheduling_advance :\t%d:\n",enb_properties.properties[i]->rrh_gw_config[j].tx_scheduling_advance);
+ printf( "\ttx_sample_advance : \t%d:\n",enb_properties.properties[i]->rrh_gw_config[j].tx_sample_advance);
+ printf( "\tiq_txshift : \t%d:\n",enb_properties.properties[i]->rrh_gw_config[j].iq_txshift);
+ printf( "\ttransport : \t%s Ethernet:\n",(enb_properties.properties[i]->rrh_gw_config[j].raw == 1)? "RAW" : "UDP");
+ if (enb_properties.properties[i]->rrh_gw_config[j].exmimo == 1) {
+ printf( "\tRF target : \tEXMIMO:\n\n");
+ } else if (enb_properties.properties[i]->rrh_gw_config[j].usrp_b200 == 1) {
+ printf( "\tRF target : \tUSRP_B200:\n\n");
+ } else if (enb_properties.properties[i]->rrh_gw_config[j].usrp_x300 == 1) {
+ printf( "\tRF target : \tUSRP_X300:\n\n");
+ } else if (enb_properties.properties[i]->rrh_gw_config[j].bladerf == 1) {
+ printf( "\tRF target : \tBLADERF:\n\n");
+ } else if (enb_properties.properties[i]->rrh_gw_config[j].lmssdr == 1) {
+ printf( "\tRF target : \tLMSSDR:\n\n");
+ } else {
+ printf( "\tRF target : \tNONE:\n\n");
+ }
+ }
+ }
for (j=0; j< enb_properties.properties[i]->nb_cc; j++) {
printf( "\teutra band for CC %d: \t%"PRId16":\n",j,enb_properties.properties[i]->eutra_band[j]);
@@ -455,15 +495,18 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
config_setting_t *setting_srb1 = NULL;
config_setting_t *setting_mme_addresses = NULL;
config_setting_t *setting_mme_address = NULL;
+ config_setting_t *setting_rrh_gws = NULL;
+ config_setting_t *setting_rrh_gw = NULL;
config_setting_t *setting_enb = NULL;
config_setting_t *setting_otg = NULL;
- config_setting_t *subsetting_otg = NULL;
+ config_setting_t *subsetting_otg = NULL;
int num_enb_properties = 0;
int enb_properties_index = 0;
int num_enbs = 0;
int num_mme_address = 0;
- int num_otg_elements =0;
- int num_component_carriers =0;
+ int num_rrh_gw = 0;
+ int num_otg_elements = 0;
+ int num_component_carriers = 0;
int i = 0;
int j = 0;
int parse_errors = 0;
@@ -558,10 +601,21 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
libconfig_int my_int;
+
+ char* if_name = NULL;
char* ipv4 = NULL;
+ char* ipv4_remote = NULL;
char* ipv6 = NULL;
char* active = NULL;
char* preference = NULL;
+
+ char* tr_preference = NULL;
+ char* rf_preference = NULL;
+ libconfig_int tx_scheduling_advance = 0;
+ libconfig_int tx_sample_advance = 0;
+ libconfig_int iq_txshift = 0;
+ libconfig_int local_port = 0;
+ libconfig_int remote_port = 0;
const char* active_enb[MAX_ENB];
char* enb_interface_name_for_S1U = NULL;
char* enb_ipv4_address_for_S1U = NULL;
@@ -965,7 +1019,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
enb_properties.properties[enb_properties_index]->prach_zero_correlation[j] =prach_zero_correlation;
- if ((prach_zero_correlation <0) || (prach_zero_correlation > 63))
+ if ((prach_zero_correlation <0) || (prach_zero_correlation > 15))
AssertError (0, parse_errors ++,
"Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_zero_correlation choice: 0..15!\n",
lib_config_file_name_pP, i, prach_zero_correlation);
@@ -2136,6 +2190,97 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
enb_properties.properties[enb_properties_index]->mme_ip_address[j].ipv6 = 1;
}
}
+ // RRH Config
+ setting_rrh_gws = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_RRH_GW_CONFIG);
+ if ( setting_rrh_gws != NULL) {
+ num_rrh_gw = config_setting_length(setting_rrh_gws);
+ enb_properties.properties[enb_properties_index]->nb_rrh_gw = 0;
+
+ for (j = 0; j < num_rrh_gw; j++) {
+ setting_rrh_gw = config_setting_get_elem(setting_rrh_gws, j);
+
+ if ( !(
+ config_setting_lookup_string(setting_rrh_gw, ENB_CONFIG_STRING_RRH_GW_LOCAL_IF_NAME, (const char **)&if_name)
+ && config_setting_lookup_string(setting_rrh_gw, ENB_CONFIG_STRING_RRH_GW_LOCAL_ADDRESS, (const char **)&ipv4)
+ && config_setting_lookup_string(setting_rrh_gw, ENB_CONFIG_STRING_RRH_GW_REMOTE_ADDRESS , (const char **)&ipv4_remote)
+ && config_setting_lookup_int(setting_rrh_gw, ENB_CONFIG_STRING_RRH_GW_LOCAL_PORT, &local_port)
+ && config_setting_lookup_int(setting_rrh_gw, ENB_CONFIG_STRING_RRH_GW_REMOTE_PORT, &remote_port)
+ && config_setting_lookup_string(setting_rrh_gw, ENB_CONFIG_STRING_RRH_GW_ACTIVE, (const char **)&active)
+ && config_setting_lookup_string(setting_rrh_gw, ENB_CONFIG_STRING_RRH_GW_TRANSPORT_PREFERENCE, (const char **)&tr_preference)
+ && config_setting_lookup_string(setting_rrh_gw, ENB_CONFIG_STRING_RRH_GW_RF_TARGET_PREFERENCE, (const char **)&rf_preference)
+ && config_setting_lookup_int(setting_rrh_gw, ENB_CONFIG_STRING_RRH_GW_IQ_TXSHIFT, &iq_txshift)
+ && config_setting_lookup_int(setting_rrh_gw, ENB_CONFIG_STRING_RRH_GW_TX_SAMPLE_ADVANCE, &tx_sample_advance)
+ && config_setting_lookup_int(setting_rrh_gw, ENB_CONFIG_STRING_RRH_GW_TX_SCHEDULING_ADVANCE, &tx_scheduling_advance)
+ )
+ ) {
+ AssertError (0, parse_errors ++,
+ "Failed to parse eNB configuration file %s, %u th enb %u the RRH GW address !\n",
+ lib_config_file_name_pP, i, j);
+ continue; // FIXME will prevent segfaults below, not sure what happens at function exit...
+ }
+
+ enb_properties.properties[enb_properties_index]->nb_rrh_gw += 1;
+
+ enb_properties.properties[enb_properties_index]->rrh_gw_if_name = strdup(if_name);
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].local_address = strdup(ipv4);
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].remote_address = strdup(ipv4_remote);
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].local_port = local_port;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].remote_port = remote_port;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].iq_txshift = iq_txshift;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].tx_sample_advance = tx_sample_advance;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].tx_scheduling_advance= tx_scheduling_advance;
+
+ if (strcmp(active, "yes") == 0) {
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].active = 1;
+ }
+
+ if (strcmp(tr_preference, "udp") == 0) {
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].udp = 1;
+ } else if (strcmp(tr_preference, "raw") == 0) {
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].raw = 1;
+ } else {//if (strcmp(preference, "no") == 0)
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].udp = 1;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].raw = 1;
+ }
+
+ if (strcmp(rf_preference, "exmimo") == 0) {
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].exmimo = 1;
+ } else if (strcmp(rf_preference, "usrp_b200") == 0) {
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].usrp_b200 = 1;
+ } else if (strcmp(rf_preference, "usrp_x300") == 0) {
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].usrp_x300 = 1;
+ } else if (strcmp(rf_preference, "bladerf") == 0) {
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].bladerf = 1;
+ } else if (strcmp(rf_preference, "bladerf") == 0) {
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].lmssdr = 1;
+ } else {//if (strcmp(preference, "no") == 0)
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].exmimo = 1;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].usrp_b200 = 1;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].usrp_x300 = 1;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].bladerf = 1;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].lmssdr = 1;
+
+ }
+ }
+ } else {
+ enb_properties.properties[enb_properties_index]->nb_rrh_gw = 0;
+ enb_properties.properties[enb_properties_index]->rrh_gw_if_name = "none";
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].local_address = "0.0.0.0";
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].remote_address = "0.0.0.0";
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].local_port= 0;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].remote_port= 0;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].active = 0;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].udp = 0;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].raw = 0;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].tx_scheduling_advance = 0;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].tx_sample_advance = 0;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].iq_txshift = 0;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].exmimo = 0;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].usrp_b200 = 0;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].usrp_x300 = 0;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].bladerf = 0;
+ enb_properties.properties[enb_properties_index]->rrh_gw_config[j].lmssdr = 0;
+ }
// SCTP SETTING
enb_properties.properties[enb_properties_index]->sctp_out_streams = SCTP_OUT_STREAMS;
diff --git a/openair2/ENB_APP/enb_config.h b/openair2/ENB_APP/enb_config.h
index 113681dafe..422ef67cd3 100755
--- a/openair2/ENB_APP/enb_config.h
+++ b/openair2/ENB_APP/enb_config.h
@@ -78,6 +78,24 @@ typedef struct mme_ip_address_s {
char *ipv6_address;
} mme_ip_address_t;
+typedef struct rrh_gw_config_s {
+ unsigned udp:1;
+ unsigned raw:1;
+ unsigned active:1;
+ char *local_address;
+ char *remote_address;
+ uint16_t local_port;
+ uint16_t remote_port;
+ int tx_scheduling_advance;
+ int tx_sample_advance;
+ int iq_txshift;
+ unsigned exmimo:1;
+ unsigned usrp_b200:1;
+ unsigned usrp_x300:1;
+ unsigned bladerf:1;
+ unsigned lmssdr:1;
+} rrh_gw_config_t;
+
typedef struct Enb_properties_s {
/* Unique eNB_id to identify the eNB within EPC.
* For macro eNB ids this field should be 20 bits long.
@@ -203,6 +221,13 @@ typedef struct Enb_properties_s {
char *enb_interface_name_for_S1_MME;
in_addr_t enb_ipv4_address_for_S1_MME;
+
+ /* Nb of RRH to connect to */
+ uint8_t nb_rrh_gw;
+ char *rrh_gw_if_name;
+ /* List of MME to connect to */
+ rrh_gw_config_t rrh_gw_config[4];
+
// otg config
/* Nb of OTG elements */
uint8_t num_otg_elements;
diff --git a/openair2/LAYER2/MAC/defs.h b/openair2/LAYER2/MAC/defs.h
index a0a43b6d79..cd2d593726 100644
--- a/openair2/LAYER2/MAC/defs.h
+++ b/openair2/LAYER2/MAC/defs.h
@@ -251,7 +251,8 @@ typedef struct {
typedef struct {
uint8_t Num_ue_spec_dci ;
uint8_t Num_common_dci ;
- unsigned int nCCE;
+ uint32_t nCCE;
+ uint32_t num_pdcch_symbols;
DCI_ALLOC_t dci_alloc[NUM_DCI_MAX] ;
} DCI_PDU;
/*! \brief CCCH payload */
@@ -735,7 +736,8 @@ typedef struct {
uint8_t dl_pow_off[MAX_NUM_CCs];
uint16_t pre_nb_available_rbs[MAX_NUM_CCs];
unsigned char rballoc_sub_UE[MAX_NUM_CCs][N_RBG_MAX];
-
+ uint16_t ta_timer;
+ int16_t ta_update;
} UE_sched_ctrl;
/*! \brief eNB template for the Random access information */
typedef struct {
@@ -765,8 +767,6 @@ typedef struct {
uint8_t Msg3_subframe;
/// Flag to indicate the eNB should generate Msg4 upon reception of SDU from RRC. This is triggered by first ULSCH reception at eNB for new user.
uint8_t generate_Msg4;
- /// Flag to indicate the eNB should generate the DCI for Msg4, after getting the SDU from RRC.
- uint8_t generate_Msg4_dci;
/// Flag to indicate that eNB is waiting for ACK that UE has received Msg3.
uint8_t wait_ack_Msg4;
/// UE RNTI allocated during RAR
@@ -835,8 +835,8 @@ typedef struct {
/// Outgoing CCCH pdu for PHY
CCCH_PDU CCCH_pdu;
RA_TEMPLATE RA_template[NB_RA_PROC_MAX];
- /// BCCH active flag
- uint8_t bcch_active;
+ /// VRB map for common channels
+ uint8_t vrb_map[100];
/// MBSFN SubframeConfig
struct MBSFN_SubframeConfig *mbsfn_SubframeConfig[8];
/// number of subframe allocation pattern available for MBSFN sync area
@@ -883,9 +883,11 @@ typedef struct {
/// Common cell resources
COMMON_channels_t common_channels[MAX_NUM_CCs];
UE_list_t UE_list;
+
///subband bitmap configuration
SBMAP_CONF sbmap_conf;
-
+ /// CCE table used to build DCI scheduling information
+ int CCE_table[MAX_NUM_CCs][800];
/// active flag for Other lcid
// uint8_t lcid_active[NB_RB_MAX];
/// eNB stats
diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c
index 329c40be05..21e9337dbb 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler.c
@@ -77,13 +77,13 @@
+
+
+
void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag, frame_t frameP, sub_frame_t subframeP) //, int calibration_flag) {
{
- unsigned int nprb[MAX_NUM_CCs];
- unsigned int nCCE[MAX_NUM_CCs];
int mbsfn_status[MAX_NUM_CCs];
- uint32_t RBalloc[MAX_NUM_CCs];
protocol_ctxt_t ctxt;
#ifdef EXMIMO
int ret;
@@ -106,10 +106,11 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
for (CC_id=0; CC_idnCCE=0;
+ DCI_pdu[CC_id]->num_pdcch_symbols=1;
mbsfn_status[CC_id]=0;
+ // clear vrb_map
+ memset(eNB_mac_inst[module_idP].common_channels[CC_id].vrb_map,0,100);
}
// refresh UE list based on UEs dropped by PHY in previous subframe
@@ -186,7 +187,7 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
for (CC_id=0; CC_idNum_common_dci = 0;
DCI_pdu[CC_id]->Num_ue_spec_dci = 0;
- eNB_mac_inst[module_idP].common_channels[CC_id].bcch_active = 0;
+
#ifdef Rel10
eNB_mac_inst[module_idP].common_channels[CC_id].mcch_active =0;
@@ -194,6 +195,8 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
eNB_mac_inst[module_idP].frame = frameP;
eNB_mac_inst[module_idP].subframe = subframeP;
+
+
}
//if (subframeP%5 == 0)
@@ -238,19 +241,20 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
// Schedule ULSCH for FDD or subframeP 4 (TDD config 0,3,6)
// Schedule Normal DLSCH
- schedule_RA(module_idP,frameP,subframeP,2,nprb,nCCE);
+
+ schedule_RA(module_idP,frameP,subframeP,2);
+
if (mac_xface->lte_frame_parms->frame_type == FDD) { //FDD
- schedule_ulsch(module_idP,frameP,cooperation_flag,0,4,nCCE);//,calibration_flag);
+ schedule_ulsch(module_idP,frameP,cooperation_flag,0,4);//,calibration_flag);
} else if ((mac_xface->lte_frame_parms->tdd_config == TDD) || //TDD
(mac_xface->lte_frame_parms->tdd_config == 3) ||
(mac_xface->lte_frame_parms->tdd_config == 6)) {
- //schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,4,nCCE);//,calibration_flag);
+ //schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,4);//,calibration_flag);
}
- // schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
-
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,1,mbsfn_status);
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
break;
@@ -262,22 +266,22 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
switch (mac_xface->lte_frame_parms->tdd_config) {
case 0:
case 1:
- schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,7,nCCE);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
+ schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,7);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
break;
case 6:
- schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,8,nCCE);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
+ schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,8);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
break;
default:
break;
}
} else { //FDD
- schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
- schedule_ulsch(module_idP,frameP,cooperation_flag,1,5,nCCE);
+ schedule_ulsch(module_idP,frameP,cooperation_flag,1,5);
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
}
break;
@@ -287,9 +291,9 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
// TDD, nothing
// FDD, normal UL/DLSCH
if (mac_xface->lte_frame_parms->frame_type == FDD) { //FDD
- schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
- schedule_ulsch(module_idP,frameP,cooperation_flag,2,6,nCCE);
+ schedule_ulsch(module_idP,frameP,cooperation_flag,2,6);
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
}
break;
@@ -302,22 +306,22 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
if (mac_xface->lte_frame_parms->frame_type == TDD) {
switch (mac_xface->lte_frame_parms->tdd_config) {
case 2:
- schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,7,nCCE);
+ schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,7);
// no break here!
case 5:
- schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
break;
default:
break;
}
} else { //FDD
- schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
- schedule_ulsch(module_idP,frameP,cooperation_flag,3,7,nCCE);
+ schedule_ulsch(module_idP,frameP,cooperation_flag,3,7);
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
}
break;
@@ -330,8 +334,8 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
if (mac_xface->lte_frame_parms->frame_type == 1) { // TDD
switch (mac_xface->lte_frame_parms->tdd_config) {
case 1:
- // schedule_RA(module_idP,frameP,subframeP,nprb,nCCE);
- schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,8,nCCE);
+ // schedule_RA(module_idP,frameP,subframeP);
+ schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,8);
// no break here!
case 2:
@@ -341,8 +345,9 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
// no break here!
case 5:
- schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,1,mbsfn_status);
+
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
break;
default:
@@ -350,11 +355,11 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
}
} else {
if (mac_xface->lte_frame_parms->frame_type == FDD) { //FDD
- // schedule_RA(module_idP,frameP, subframeP, 0, nprb, nCCE);
- // schedule_ulsch(module_idP, frameP, cooperation_flag, 4, 8, nCCE);
- schedule_ue_spec(module_idP, frameP, subframeP, nprb, nCCE, mbsfn_status);
- fill_DLSCH_dci(module_idP, frameP, subframeP, RBalloc, 1, mbsfn_status);
+ // schedule_RA(module_idP,frameP, subframeP, 0);
+ schedule_ulsch(module_idP, frameP, cooperation_flag, 4, 8);
+ schedule_ue_spec(module_idP, frameP, subframeP, mbsfn_status);
+ fill_DLSCH_dci(module_idP, frameP, subframeP, mbsfn_status);
}
}
@@ -365,21 +370,21 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
// TDD Config 0,6 ULSCH for subframes 9,3 resp.
// TDD normal DLSCH
// FDD normal UL/DLSCH
- schedule_SI(module_idP,frameP,nprb,nCCE);
+ schedule_SI(module_idP,frameP,subframeP);
- //schedule_RA(module_idP,frameP,subframeP,5,nprb,nCCE);
+ //schedule_RA(module_idP,frameP,subframeP,5);
if (mac_xface->lte_frame_parms->frame_type == FDD) {
- schedule_RA(module_idP,frameP,subframeP,1,nprb,nCCE);
- // schedule_ulsch(module_idP,frameP,cooperation_flag,5,9,nCCE);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,1,mbsfn_status);
-
+ schedule_RA(module_idP,frameP,subframeP,1);
+ schedule_ulsch(module_idP,frameP,cooperation_flag,5,9);
+ schedule_ue_spec(module_idP, frameP, subframeP, mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
} else if ((mac_xface->lte_frame_parms->tdd_config == 0) || // TDD Config 0
(mac_xface->lte_frame_parms->tdd_config == 6)) { // TDD Config 6
- //schedule_ulsch(module_idP,cooperation_flag,subframeP,nCCE);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
+ //schedule_ulsch(module_idP,cooperation_flag,subframeP);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
} else {
- //schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
}
break;
@@ -395,36 +400,36 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
break;
case 1:
- schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,2,nCCE);
- // schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
+ schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,2);
+ // schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
break;
case 6:
- schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,3,nCCE);
- // schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
+ schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,3);
+ // schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
break;
case 5:
- schedule_RA(module_idP,frameP,subframeP,2,nprb,nCCE);
- schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,1,mbsfn_status);
+ schedule_RA(module_idP,frameP,subframeP,2);
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
break;
case 3:
case 4:
- schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
break;
default:
break;
}
} else { //FDD
- // schedule_ulsch(module_idP,frameP,cooperation_flag,6,0,nCCE);
- schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
+ // schedule_ulsch(module_idP,frameP,cooperation_flag,6,0);
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
}
break;
@@ -437,23 +442,23 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
switch (mac_xface->lte_frame_parms->tdd_config) {
case 3:
case 4:
- schedule_RA(module_idP,frameP,subframeP,3,nprb,nCCE); // 3 = Msg3 subframeP, not
- schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,1,mbsfn_status);
+ schedule_RA(module_idP,frameP,subframeP,3); // 3 = Msg3 subframeP, not
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
break;
case 5:
- schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
break;
default:
break;
}
} else { //FDD
- //schedule_ulsch(module_idP,frameP,cooperation_flag,7,1,nCCE);
- schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
+ //schedule_ulsch(module_idP,frameP,cooperation_flag,7,1);
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
}
break;
@@ -470,19 +475,19 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
case 4:
case 5:
- // schedule_RA(module_idP,subframeP,nprb,nCCE);
- schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,2,nCCE);
- schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
+ // schedule_RA(module_idP,subframeP);
+ schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,2);
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
break;
default:
break;
}
} else { //FDD
- //schedule_ulsch(module_idP,frameP,cooperation_flag,8,2,nCCE);
- schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
+ //schedule_ulsch(module_idP,frameP,cooperation_flag,8,2);
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
}
break;
@@ -493,51 +498,53 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
if (mac_xface->lte_frame_parms->frame_type == TDD) {
switch (mac_xface->lte_frame_parms->tdd_config) {
case 1:
- schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,3,nCCE);
- schedule_RA(module_idP,frameP,subframeP,7,nprb,nCCE); // 7 = Msg3 subframeP, not
- schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,1,mbsfn_status);
+ schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,3);
+ schedule_RA(module_idP,frameP,subframeP,7); // 7 = Msg3 subframeP, not
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
break;
case 3:
case 4:
- schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,3,nCCE);
- schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
+ schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,3);
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
break;
case 6:
- schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,4,nCCE);
- //schedule_RA(module_idP,frameP,subframeP,nprb,nCCE);
- schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
+ schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,4);
+ //schedule_RA(module_idP,frameP,subframeP);
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
break;
case 2:
case 5:
- //schedule_RA(module_idP,frameP,subframeP,nprb,nCCE);
- schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
+ //schedule_RA(module_idP,frameP,subframeP);
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
break;
default:
break;
}
} else { //FDD
- // schedule_ulsch(module_idP,frameP,cooperation_flag,9,3,nCCE);
- schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
- fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
+ // schedule_ulsch(module_idP,frameP,cooperation_flag,9,3);
+ schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
+ fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
}
break;
}
- for (CC_id=0; CC_idnCCE = nCCE[CC_id];
- }
+ LOG_D(MAC,"FrameP %d, subframeP %d : Scheduling CCEs\n",frameP,subframeP);
- LOG_D(MAC,"frameP %d, subframeP %d nCCE %d\n",frameP,subframeP,nCCE[0]);
+ // Allocate CCEs for good after scheduling is done
+ for (CC_id=0;CC_idschedule_ra);
for (CC_id=0; CC_idcommon_channels[CC_id].RA_template[0];
+
+ vrb_map = eNB->common_channels[CC_id].vrb_map;
+ DCI_pdu = &eNB->common_channels[CC_id].DCI_pdu;
for (i=0; icommon_channels[CC_id].RA_template[i];
+
+ if (RA_template->RA_active == TRUE) {
LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d RA %d is active (generate RAR %d, generate_Msg4 %d, wait_ack_Msg4 %d, rnti %x)\n",
- module_idP,CC_id,i,RA_template[i].generate_rar,RA_template[i].generate_Msg4,RA_template[i].wait_ack_Msg4, RA_template[i].rnti);
+ module_idP,CC_id,i,RA_template->generate_rar,RA_template->generate_Msg4,RA_template->wait_ack_Msg4, RA_template->rnti);
- if (RA_template[i].generate_rar == 1) {
- nprb[CC_id]= nprb[CC_id] + 3;
- nCCE[CC_id] = nCCE[CC_id] + 4;
- RA_template[i].Msg3_subframe=Msg3_subframe;
- } else if (RA_template[i].generate_Msg4 == 1) {
+ if (RA_template->generate_rar == 1) {
+
+ LOG_D(MAC,"[eNB %d] CC_id %d Frame %d, subframeP %d: Generating RAR DCI (proc %d), RA_active %d format 1A (%d,%d))\n",
+ module_idP, CC_id, frameP, subframeP,i,
+ RA_template->RA_active,
+ RA_template->RA_dci_fmt1,
+ RA_template->RA_dci_size_bits1);
+
+
+
+ if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
+ switch(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
+ case 6:
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->ndi=1;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rv=0;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->mcs=0;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
+ break;
+
+ case 25:
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->ndi=1;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rv=0;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->mcs=0;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
+ break;
+
+ case 50:
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->ndi=1;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rv=0;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->mcs=0;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
+ break;
+
+ case 100:
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->ndi=1;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rv=0;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->mcs=0;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
+ break;
+
+ default:
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->ndi=1;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rv=0;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->mcs=0;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
+ break;
+ }
+ } else {
+ switch(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
+ case 6:
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->ndi=1;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rv=0;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->mcs=0;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
+ break;
+
+ case 25:
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->ndi=1;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rv=0;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->mcs=0;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_UL,first_rb,4);
+ rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
+ break;
+
+ case 50:
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->ndi=1;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rv=0;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->mcs=0;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
+ break;
+
+ case 100:
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->ndi=1;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rv=0;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->mcs=0;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ if (!CCE_allocation_infeasible(module_idP,CC_id,1,subframeP,2,RA_template->RA_rnti)) {
+ add_common_dci(DCI_pdu,
+ (void*)&RA_template->RA_alloc_pdu1[0],
+ RA_template->RA_rnti,
+ RA_template->RA_dci_size_bytes1,
+ 2,
+ RA_template->RA_dci_size_bits1,
+ RA_template->RA_dci_fmt1,
+ 1);
+
+ RA_template->Msg3_subframe=Msg3_subframe;
+ }
+ } else if (RA_template->generate_Msg4 == 1) {
// check for Msg4 Message
- UE_id = find_UE_id(module_idP,RA_template[i].rnti);
+ UE_id = find_UE_id(module_idP,RA_template->rnti);
if (Is_rrc_registered == 1) {
@@ -131,7 +293,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
if (rrc_sdu_length>0) {
LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Generating Msg4 with RRC Piggyback (RA proc %d, RNTI %x)\n",
- module_idP, CC_id, frameP, subframeP,i,RA_template[i].rnti);
+ module_idP, CC_id, frameP, subframeP,i,RA_template->rnti);
//msg("[MAC][eNB %d][RAPROC] Frame %d, subframeP %d: Received %d bytes for Msg4: \n",module_idP,frameP,subframeP,rrc_sdu_length);
// for (j=0;jlte_frame_parms.N_RB_DL-4));
+
+ if ((vrb_map[first_rb] != 1) && (vrb_map[first_rb+3] != 1))
+ break;
+ }
+ */
+ first_rb=0;
+
+ vrb_map[first_rb] = 1;
+ vrb_map[first_rb+1] = 1;
+ vrb_map[first_rb+2] = 1;
+ vrb_map[first_rb+3] = 1;
// Compute MCS for 3 PRB
@@ -149,273 +326,406 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
switch (mac_xface->lte_frame_parms->N_RB_DL) {
case 6:
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->ndi=1;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->ndi=1;
if ((rrc_sdu_length+msg4_header) <= 22) {
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=4;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=4;
TBsize = 22;
} else if ((rrc_sdu_length+msg4_header) <= 28) {
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=5;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=5;
TBsize = 28;
} else if ((rrc_sdu_length+msg4_header) <= 32) {
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=6;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=6;
TBsize = 32;
} else if ((rrc_sdu_length+msg4_header) <= 41) {
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=7;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=7;
TBsize = 41;
} else if ((rrc_sdu_length+msg4_header) <= 49) {
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=8;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=8;
TBsize = 49;
} else if ((rrc_sdu_length+msg4_header) <= 57) {
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=9;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=9;
TBsize = 57;
}
-
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->type=1;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type=0;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rv=0;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
+
break;
case 25:
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->ndi=1;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->ndi=1;
if ((rrc_sdu_length+msg4_header) <= 22) {
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=4;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=4;
TBsize = 22;
} else if ((rrc_sdu_length+msg4_header) <= 28) {
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=5;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=5;
TBsize = 28;
} else if ((rrc_sdu_length+msg4_header) <= 32) {
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=6;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=6;
TBsize = 32;
} else if ((rrc_sdu_length+msg4_header) <= 41) {
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=7;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=7;
TBsize = 41;
} else if ((rrc_sdu_length+msg4_header) <= 49) {
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=8;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=8;
TBsize = 49;
} else if ((rrc_sdu_length+msg4_header) <= 57) {
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=9;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=9;
TBsize = 57;
}
-
+
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->type=1;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type=0;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rv=0;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
break;
case 50:
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->ndi=1;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->ndi=1;
if ((rrc_sdu_length+msg4_header) <= 22) {
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=4;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=4;
TBsize = 22;
} else if ((rrc_sdu_length+msg4_header) <= 28) {
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=5;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=5;
TBsize = 28;
} else if ((rrc_sdu_length+msg4_header) <= 32) {
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=6;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=6;
TBsize = 32;
} else if ((rrc_sdu_length+msg4_header) <= 41) {
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=7;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=7;
TBsize = 41;
} else if ((rrc_sdu_length+msg4_header) <= 49) {
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=8;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=8;
TBsize = 49;
} else if ((rrc_sdu_length+msg4_header) <= 57) {
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=9;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=9;
TBsize = 57;
}
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->type=1;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type=0;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rv=0;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
+ ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
break;
case 100:
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->ndi=1;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->ndi=1;
if ((rrc_sdu_length+msg4_header) <= 22) {
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=4;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=4;
TBsize = 22;
} else if ((rrc_sdu_length+msg4_header) <= 28) {
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=5;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=5;
TBsize = 28;
} else if ((rrc_sdu_length+msg4_header) <= 32) {
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=6;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=6;
TBsize = 32;
} else if ((rrc_sdu_length+msg4_header) <= 41) {
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=7;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=7;
TBsize = 41;
} else if ((rrc_sdu_length+msg4_header) <= 49) {
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=8;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=8;
TBsize = 49;
} else if ((rrc_sdu_length+msg4_header) <= 57) {
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=9;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->mcs=9;
TBsize = 57;
}
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->type=1;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type=0;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rv=0;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
+ ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
break;
}
} else { // FDD DCI
switch (mac_xface->lte_frame_parms->N_RB_DL) {
case 6:
- ((DCI1A_1_5MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->ndi=1;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->ndi=1;
if ((rrc_sdu_length+msg4_header) <= 22) {
- ((DCI1A_1_5MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=4;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=4;
TBsize = 22;
} else if ((rrc_sdu_length+msg4_header) <= 28) {
- ((DCI1A_1_5MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=5;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=5;
TBsize = 28;
} else if ((rrc_sdu_length+msg4_header) <= 32) {
- ((DCI1A_1_5MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=6;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=6;
TBsize = 32;
} else if ((rrc_sdu_length+msg4_header) <= 41) {
- ((DCI1A_1_5MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=7;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=7;
TBsize = 41;
} else if ((rrc_sdu_length+msg4_header) <= 49) {
- ((DCI1A_1_5MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=8;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=8;
TBsize = 49;
} else if ((rrc_sdu_length+msg4_header) <= 57) {
- ((DCI1A_1_5MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=9;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=9;
TBsize = 57;
}
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->type=1;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type=0;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rv=0;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
+ ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
break;
case 25:
- ((DCI1A_5MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->ndi=1;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->ndi=1;
if ((rrc_sdu_length+msg4_header) <= 22) {
- ((DCI1A_5MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=4;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=4;
TBsize = 22;
} else if ((rrc_sdu_length+msg4_header) <= 28) {
- ((DCI1A_5MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=5;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=5;
TBsize = 28;
} else if ((rrc_sdu_length+msg4_header) <= 32) {
- ((DCI1A_5MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=6;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=6;
TBsize = 32;
} else if ((rrc_sdu_length+msg4_header) <= 41) {
- ((DCI1A_5MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=7;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=7;
TBsize = 41;
} else if ((rrc_sdu_length+msg4_header) <= 49) {
- ((DCI1A_5MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=8;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=8;
TBsize = 49;
} else if ((rrc_sdu_length+msg4_header) <= 57) {
- ((DCI1A_5MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=9;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=9;
TBsize = 57;
}
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->type=1;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type=0;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rv=0;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
break;
case 50:
- ((DCI1A_10MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->ndi=1;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->ndi=1;
if ((rrc_sdu_length+msg4_header) <= 22) {
- ((DCI1A_10MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=4;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=4;
TBsize = 22;
} else if ((rrc_sdu_length+msg4_header) <= 28) {
- ((DCI1A_10MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=5;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=5;
TBsize = 28;
} else if ((rrc_sdu_length+msg4_header) <= 32) {
- ((DCI1A_10MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=6;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=6;
TBsize = 32;
} else if ((rrc_sdu_length+msg4_header) <= 41) {
- ((DCI1A_10MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=7;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=7;
TBsize = 41;
} else if ((rrc_sdu_length+msg4_header) <= 49) {
- ((DCI1A_10MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=8;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=8;
TBsize = 49;
} else if ((rrc_sdu_length+msg4_header) <= 57) {
- ((DCI1A_10MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=9;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=9;
TBsize = 57;
}
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->type=1;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type=0;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rv=0;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
+ ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
break;
case 100:
- ((DCI1A_20MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->ndi=1;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->ndi=1;
if ((rrc_sdu_length+msg4_header) <= 22) {
- ((DCI1A_20MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=4;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=4;
TBsize = 22;
} else if ((rrc_sdu_length+msg4_header) <= 28) {
- ((DCI1A_20MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=5;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=5;
TBsize = 28;
} else if ((rrc_sdu_length+msg4_header) <= 32) {
- ((DCI1A_20MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=6;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=6;
TBsize = 32;
} else if ((rrc_sdu_length+msg4_header) <= 41) {
- ((DCI1A_20MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=7;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=7;
TBsize = 41;
} else if ((rrc_sdu_length+msg4_header) <= 49) {
- ((DCI1A_20MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=8;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=8;
TBsize = 49;
} else if ((rrc_sdu_length+msg4_header) <= 57) {
- ((DCI1A_20MHz_FDD_t*)&RA_template[i].RA_alloc_pdu2[0])->mcs=9;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->mcs=9;
TBsize = 57;
}
-
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->type=1;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type=0;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rv=0;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
+ ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
break;
}
}
- RA_template[i].generate_Msg4=0;
- RA_template[i].generate_Msg4_dci=1;
- RA_template[i].wait_ack_Msg4=1;
- RA_template[i].RA_active = FALSE;
- lcid=0;
-
- if ((TBsize - rrc_sdu_length - msg4_header) <= 2) {
- msg4_padding = TBsize - rrc_sdu_length - msg4_header;
- msg4_post_padding = 0;
- } else {
- msg4_padding = 0;
- msg4_post_padding = TBsize - rrc_sdu_length - msg4_header -1;
- }
-
- LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d subframeP %d Msg4 : TBS %d, sdu_len %d, msg4_header %d, msg4_padding %d, msg4_post_padding %d\n",
- module_idP,CC_id,frameP,subframeP,TBsize,rrc_sdu_length,msg4_header,msg4_padding,msg4_post_padding);
- DevAssert( UE_id != UE_INDEX_INVALID ); // FIXME not sure how to gracefully return
- offset = generate_dlsch_header((unsigned char*)eNB->UE_list.DLSCH_pdu[CC_id][0][(unsigned char)UE_id].payload[0],
- 1, //num_sdus
- (unsigned short*)&rrc_sdu_length, //
- &lcid, // sdu_lcid
- 255, // no drx
- 0, // no timing advance
- RA_template[i].cont_res_id, // contention res id
- msg4_padding, // no padding
- msg4_post_padding);
-
- memcpy((void*)&eNB->UE_list.DLSCH_pdu[CC_id][0][(unsigned char)UE_id].payload[0][(unsigned char)offset],
- &eNB->common_channels[CC_id].CCCH_pdu.payload[0],
- rrc_sdu_length);
-
- if (opt_enabled==1) {
- trace_pdu(1, (uint8_t *)eNB->UE_list.DLSCH_pdu[CC_id][0][(unsigned char)UE_id].payload[0],
- rrc_sdu_length, UE_id, 3, UE_RNTI(module_idP, UE_id),
- eNB->subframe,0,0);
- LOG_D(OPT,"[eNB %d][DLSCH] CC_id %d Frame %d trace pdu for rnti %x with size %d\n",
- module_idP, CC_id, frameP, UE_RNTI(module_idP,UE_id), rrc_sdu_length);
- }
-
- nprb[CC_id]= nprb[CC_id] + 3;
- nCCE[CC_id] = nCCE[CC_id] + 4;
- }
+ if (!CCE_allocation_infeasible(module_idP,CC_id,0,subframeP,2,RA_template->rnti)) {
+ add_ue_spec_dci(DCI_pdu,
+ (void*)&RA_template->RA_alloc_pdu2[0],
+ RA_template->rnti,
+ RA_template->RA_dci_size_bytes2,
+ 2,
+ RA_template->RA_dci_size_bits2,
+ RA_template->RA_dci_fmt2,
+ 0);
+
+ RA_template->generate_Msg4=0;
+ RA_template->wait_ack_Msg4=1;
+ RA_template->RA_active = FALSE;
+ lcid=0;
+
+ if ((TBsize - rrc_sdu_length - msg4_header) <= 2) {
+ msg4_padding = TBsize - rrc_sdu_length - msg4_header;
+ msg4_post_padding = 0;
+ } else {
+ msg4_padding = 0;
+ msg4_post_padding = TBsize - rrc_sdu_length - msg4_header -1;
+ }
+
+ LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d subframeP %d Msg4 : TBS %d, sdu_len %d, msg4_header %d, msg4_padding %d, msg4_post_padding %d\n",
+ module_idP,CC_id,frameP,subframeP,TBsize,rrc_sdu_length,msg4_header,msg4_padding,msg4_post_padding);
+ DevAssert( UE_id != UE_INDEX_INVALID ); // FIXME not sure how to gracefully return
+ offset = generate_dlsch_header((unsigned char*)eNB->UE_list.DLSCH_pdu[CC_id][0][(unsigned char)UE_id].payload[0],
+ 1, //num_sdus
+ (unsigned short*)&rrc_sdu_length, //
+ &lcid, // sdu_lcid
+ 255, // no drx
+ 0, // no timing advance
+ RA_template->cont_res_id, // contention res id
+ msg4_padding, // no padding
+ msg4_post_padding);
+
+ memcpy((void*)&eNB->UE_list.DLSCH_pdu[CC_id][0][(unsigned char)UE_id].payload[0][(unsigned char)offset],
+ &eNB->common_channels[CC_id].CCCH_pdu.payload[0],
+ rrc_sdu_length);
+
+ if (opt_enabled==1) {
+ trace_pdu(1, (uint8_t *)eNB->UE_list.DLSCH_pdu[CC_id][0][(unsigned char)UE_id].payload[0],
+ rrc_sdu_length, UE_id, 3, UE_RNTI(module_idP, UE_id),
+ eNB->subframe,0,0);
+ LOG_D(OPT,"[eNB %d][DLSCH] CC_id %d Frame %d trace pdu for rnti %x with size %d\n",
+ module_idP, CC_id, frameP, UE_RNTI(module_idP,UE_id), rrc_sdu_length);
+ }
+
+ }
+ }
//try here
}
- /*
- else if (eNB_mac_inst[module_idP][CC_id].RA_template[i].wait_ack_Msg4==1) {
- // check HARQ status and retransmit if necessary
- LOG_I(MAC,"[eNB %d][RAPROC] Frame %d, subframeP %d: Checking if Msg4 was acknowledged :\n",module_idP,frameP,subframeP);
- // Get candidate harq_pid from PHY
- mac_xface->get_ue_active_harq_pid(module_idP,eNB_mac_inst[module_idP][CC_id].RA_template[i].rnti,subframeP,&harq_pid,&round,0);
- if (round>0) {
- *nprb= (*nprb) + 3;
- *nCCE = (*nCCE) + 4;
- }
- }
- */
+ } else if (RA_template->wait_ack_Msg4==1) {
+ // check HARQ status and retransmit if necessary
+ LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Checking if Msg4 was acknowledged: \n",
+ module_idP,CC_id,frameP,subframeP);
+ // Get candidate harq_pid from PHY
+ mac_xface->get_ue_active_harq_pid(module_idP,CC_id,RA_template->rnti,frameP,subframeP,&harq_pid,&round,0);
+
+ if (round>0) {
+ //RA_template->wait_ack_Msg4++;
+ // we have to schedule a retransmission
+ if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->ndi=1;
+ } else {
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->ndi=1;
+ }
+
+ /*
+ // randomize frequency allocation for RA
+ while (1) {
+ first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL-4));
+
+ if ((vrb_map[first_rb] != 1) && (vrb_map[first_rb+3] != 1))
+ break;
+ }
+ */
+ first_rb=0;
+ vrb_map[first_rb] = 1;
+ vrb_map[first_rb+1] = 1;
+ vrb_map[first_rb+2] = 1;
+ vrb_map[first_rb+3] = 1;
+
+ if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_UL,first_rb,4);
+ rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
+ ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
+ } else {
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_UL,first_rb,4);
+ rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
+ ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
+ }
+
+ if (!CCE_allocation_infeasible(module_idP,CC_id,0,subframeP,2,RA_template->rnti)) {
+ add_ue_spec_dci(DCI_pdu,
+ (void*)&RA_template->RA_alloc_pdu2[0],
+ RA_template->rnti,
+ RA_template->RA_dci_size_bytes2,
+ 2,
+ RA_template->RA_dci_size_bits2,
+ RA_template->RA_dci_fmt2,
+ 0);
+ }
+ LOG_W(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Msg4 not acknowledged, adding ue specific dci (rnti %x) for RA (Msg4 Retransmission)\n",
+ module_idP,CC_id,frameP,subframeP,RA_template->rnti);
+ } else {
+ /* msg4 not received
+ if ((round == 0) && (RA_template->wait_ack_Msg4>1){
+ remove UE instance across all the layers: mac_xface->cancel_RA();
+ }
+ */
+ LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d : Msg4 acknowledged\n",module_idP,CC_id,frameP,subframeP);
+ RA_template->wait_ack_Msg4=0;
+ RA_template->RA_active=FALSE;
+ UE_id = find_UE_id(module_idP,RA_template->rnti);
+ DevAssert( UE_id != -1 );
+ eNB_mac_inst[module_idP].UE_list.UE_template[UE_PCCID(module_idP,UE_id)][UE_id].configured=TRUE;
+
+ }
}
- }
- }
+ } // for i=0 .. N_RA_PROC-1
+ } // CC_id
stop_meas(&eNB->schedule_ra);
}
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_bch.c b/openair2/LAYER2/MAC/eNB_scheduler_bch.c
index dd0890783e..65240356a7 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_bch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_bch.c
@@ -72,9 +72,8 @@ void
schedule_SI(
module_id_t module_idP,
frame_t frameP,
- unsigned int* nprbP,
- unsigned int* nCCEP
-)
+ sub_frame_t subframeP)
+
//------------------------------------------------------------------------------
{
@@ -85,12 +84,19 @@ schedule_SI(
void *BCCH_alloc_pdu;
int CC_id;
eNB_MAC_INST *eNB = &eNB_mac_inst[module_idP];
+ uint8_t *vrb_map;
+ int first_rb;
+ int rballoc[MAX_NUM_CCs];
+ int sizeof1A_bytes,sizeof1A_bits;
+ DCI_PDU *DCI_pdu;
start_meas(&eNB->schedule_si);
for (CC_id=0; CC_idcommon_channels[CC_id].BCCH_alloc_pdu;
+
+ BCCH_alloc_pdu = (void*)&eNB->common_channels[CC_id].BCCH_alloc_pdu;
+ DCI_pdu = (void*)&eNB->common_channels[CC_id].DCI_pdu;
+ vrb_map = (void*)&eNB->common_channels[CC_id].vrb_map;
bcch_sdu_length = mac_rrc_data_req(module_idP,
CC_id,
@@ -104,7 +110,41 @@ schedule_SI(
if (bcch_sdu_length > 0) {
LOG_D(MAC,"[eNB %d] Frame %d : BCCH->DLSCH CC_id %d, Received %d bytes \n",module_idP,frameP,CC_id,bcch_sdu_length);
+ // Allocate 4 PRBs in a random location
+ /*
+ while (1) {
+ first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL-4));
+ if ((vrb_map[first_rb] != 1) &&
+ (vrb_map[first_rb+1] != 1) &&
+ (vrb_map[first_rb+2] != 1) &&
+ (vrb_map[first_rb+3] != 1))
+ break;
+ }
+ */
+ switch (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
+ case 6:
+ first_rb = 0;
+ break;
+ case 15:
+ first_rb = 6;
+ break;
+ case 25:
+ first_rb = 11;
+ break;
+ case 50:
+ first_rb = 23;
+ break;
+ case 100:
+ first_rb = 48;
+ break;
+ }
+ vrb_map[first_rb] = 1;
+ vrb_map[first_rb+1] = 1;
+ vrb_map[first_rb+2] = 1;
+ vrb_map[first_rb+3] = 1;
+
+ // Get MCS for length of SI
if (bcch_sdu_length <= (mac_xface->get_TBS_DL(0,3))) {
mcs=0;
} else if (bcch_sdu_length <= (mac_xface->get_TBS_DL(1,3))) {
@@ -125,46 +165,153 @@ schedule_SI(
mcs=8;
}
+
+
if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
switch (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
case 6:
((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->mcs = mcs;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->type = 1;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->vrb_type = 0;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->ndi = 1;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rv = 1;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->harq_pid = 0;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->TPC = 1;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->padding = 0;
+ rballoc[CC_id] |= mac_xface->get_rballoc(0,((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc);
+ sizeof1A_bytes = sizeof(DCI1A_1_5MHz_TDD_1_6_t);
+ sizeof1A_bits = sizeof_DCI1A_1_5MHz_TDD_1_6_t;
break;
case 25:
((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->mcs = mcs;
- break;
+ ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->type = 1;
+ ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->vrb_type = 0;
+ ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->ndi = 1;
+ ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rv = 1;
+ ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->harq_pid = 0;
+ ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->TPC = 1;
+ ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->padding = 0;
+ rballoc[CC_id] |= mac_xface->get_rballoc(0,((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc);
+ sizeof1A_bytes = sizeof(DCI1A_5MHz_TDD_1_6_t);
+ sizeof1A_bits = sizeof_DCI1A_5MHz_TDD_1_6_t;
+ break;
case 50:
((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->mcs = mcs;
+ ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->type = 1;
+ ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->vrb_type = 0;
+ ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->ndi = 1;
+ ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rv = 1;
+ ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->harq_pid = 0;
+ ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->TPC = 1;
+ ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->padding = 0;
+ rballoc[CC_id] |= mac_xface->get_rballoc(0,((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc);
+ sizeof1A_bytes = sizeof(DCI1A_10MHz_TDD_1_6_t);
+ sizeof1A_bits = sizeof_DCI1A_10MHz_TDD_1_6_t;
break;
case 100:
((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->mcs = mcs;
- break;
+ ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->type = 1;
+ ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->vrb_type = 0;
+ ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->ndi = 1;
+ ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rv = 1;
+ ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->harq_pid = 0;
+ ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->TPC = 1;
+ ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->padding = 0;
+ rballoc[CC_id] |= mac_xface->get_rballoc(0,((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc);
+ sizeof1A_bytes = sizeof(DCI1A_20MHz_TDD_1_6_t);
+ sizeof1A_bits = sizeof_DCI1A_20MHz_TDD_1_6_t;
+ break;
}
} else {
switch (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
case 6:
((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->mcs = mcs;
+ ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->type = 1;
+ ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->vrb_type = 0;
+ ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->ndi = 1;
+ ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->rv = 1;
+ ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->harq_pid = 0;
+ ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->TPC = 1;
+ ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->padding = 0;
+
+ rballoc[CC_id] |= mac_xface->get_rballoc(0,((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->rballoc);
+ sizeof1A_bytes = sizeof(DCI1A_1_5MHz_FDD_t);
+ sizeof1A_bits = sizeof_DCI1A_1_5MHz_FDD_t;
break;
case 25:
((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->mcs = mcs;
+ ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->type = 1;
+ ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->vrb_type = 0;
+ ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->ndi = 1;
+ ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->rv = 1;
+ ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->harq_pid = 0;
+ ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->TPC = 1;
+ ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->padding = 0;
+
+ rballoc[CC_id] |= mac_xface->get_rballoc(0,((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->rballoc);
+ sizeof1A_bytes = sizeof(DCI1A_5MHz_FDD_t);
+ sizeof1A_bits = sizeof_DCI1A_5MHz_FDD_t;
break;
case 50:
((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->mcs = mcs;
+ ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->type = 1;
+ ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->vrb_type = 0;
+ ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->ndi = 1;
+ ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->rv = 1;
+ ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->harq_pid = 0;
+ ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->TPC = 1;
+ ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->padding = 0;
+
+ rballoc[CC_id] |= mac_xface->get_rballoc(0,((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->rballoc);
+ sizeof1A_bytes = sizeof(DCI1A_10MHz_FDD_t);
+ sizeof1A_bits = sizeof_DCI1A_10MHz_FDD_t;
break;
case 100:
((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->mcs = mcs;
- break;
+ ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+ ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->type = 1;
+ ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->vrb_type = 0;
+ ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->ndi = 1;
+ ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->rv = 1;
+ ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->harq_pid = 0;
+ ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->TPC = 1;
+ ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->padding = 0;
+
+ rballoc[CC_id] |= mac_xface->get_rballoc(0,((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->rballoc);
+ sizeof1A_bytes = sizeof(DCI1A_20MHz_FDD_t);
+ sizeof1A_bits = sizeof_DCI1A_20MHz_FDD_t;
+ break;
}
}
+ if (!CCE_allocation_infeasible(module_idP,CC_id,1,subframeP,2,SI_RNTI)) {
+ add_common_dci(DCI_pdu,
+ BCCH_alloc_pdu,
+ SI_RNTI,
+ sizeof1A_bytes,
+ 2,
+ sizeof1A_bits,
+ format1A,0);
+ }
+ else {
+ LOG_E(MAC,"[eNB %d] CCid %d Frame %d, subframe %d : Cannot add DCI 1A for SI\n",module_idP, CC_id,frameP,subframeP);
+ }
+
if (opt_enabled == 1) {
trace_pdu(1,
&eNB->common_channels[CC_id].BCCH_pdu.payload[0],
@@ -194,17 +341,13 @@ schedule_SI(
mac_xface->get_TBS_DL(mcs,3));
}
- eNB->common_channels[CC_id].bcch_active=1;
- nprbP[CC_id]=3;
- nCCEP[CC_id]=4;
+
eNB->eNB_stats[CC_id].total_num_bcch_pdu+=1;
eNB->eNB_stats[CC_id].bcch_buffer=bcch_sdu_length;
eNB->eNB_stats[CC_id].total_bcch_buffer+=bcch_sdu_length;
eNB->eNB_stats[CC_id].bcch_mcs=mcs;
} else {
- eNB->common_channels[CC_id].bcch_active=0;
- nprbP[CC_id]=0;
- nCCEP[CC_id]=0;
+
//LOG_D(MAC,"[eNB %d] Frame %d : BCCH not active \n",Mod_id,frame);
}
}
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
index 52e0f60d65..2a52d8779a 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
@@ -422,16 +422,13 @@ schedule_ue_spec(
module_id_t module_idP,
frame_t frameP,
sub_frame_t subframeP,
- unsigned int *nb_rb_used0,
- unsigned int *nCCE_used,
- int* mbsfn_flag
+ int* mbsfn_flag
)
//------------------------------------------------------------------------------
{
uint8_t CC_id;
int UE_id;
- uint16_t nCCE[MAX_NUM_CCs];
int N_RBG[MAX_NUM_CCs];
unsigned char aggregation;
mac_rlc_status_resp_t rlc_status;
@@ -450,7 +447,6 @@ schedule_ue_spec(
// uint16_t pre_nb_available_rbs[MAX_NUM_CCs][NUMBER_OF_UE_MAX];
int mcs;
uint16_t min_rb_unit[MAX_NUM_CCs];
- short ta_update = 0;
eNB_MAC_INST *eNB = &eNB_mac_inst[module_idP];
UE_list_t *UE_list = &eNB->UE_list;
LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs];
@@ -459,6 +455,7 @@ schedule_ue_spec(
int32_t tpc=1;
static int32_t tpc_accumulated=0;
UE_sched_ctrl *ue_sched_ctl;
+ int i;
if (UE_list->head==-1) {
return;
@@ -473,15 +470,18 @@ schedule_ue_spec(
for (CC_id=0; CC_idget_lte_frame_parms(module_idP,CC_id);
- total_nb_available_rb[CC_id] = frame_parms[CC_id]->N_RB_DL - nb_rb_used0[CC_id];
- nCCE[CC_id] = mac_xface->get_nCCE_max(module_idP,CC_id) - nCCE_used[CC_id];
+ // get number of PRBs less those used by common channels
+ total_nb_available_rb[CC_id] = frame_parms[CC_id]->N_RB_DL;
+ for (i=0;iN_RB_DL;i++)
+ if (eNB->common_channels[CC_id].vrb_map[i]!=0)
+ total_nb_available_rb[CC_id]--;
+
N_RBG[CC_id] = frame_parms[CC_id]->N_RBG;
// store the global enb stats:
eNB->eNB_stats[CC_id].num_dlactive_UEs = UE_list->num_UEs;
eNB->eNB_stats[CC_id].available_prbs = total_nb_available_rb[CC_id];
eNB->eNB_stats[CC_id].total_available_prbs += total_nb_available_rb[CC_id];
- eNB->eNB_stats[CC_id].available_ncces = nCCE[CC_id];
eNB->eNB_stats[CC_id].dlsch_bytes_tx=0;
eNB->eNB_stats[CC_id].dlsch_pdus_tx=0;
}
@@ -523,9 +523,11 @@ schedule_ue_spec(
continue_flag=1;
}
- if ((ue_sched_ctl->pre_nb_available_rbs[CC_id] == 0) || (nCCE[CC_id] < (1<pre_nb_available_rbs[CC_id] == 0) || // no RBs allocated
+ CCE_allocation_infeasible(module_idP,CC_id,0,subframeP,aggregation,rnti)
+ ) {
LOG_D(MAC,"[eNB %d] Frame %d : no RB allocated for UE %d on CC_id %d: continue \n",
- module_idP, frameP, UE_id, CC_id, nb_rb_used0[CC_id], ue_sched_ctl->pre_nb_available_rbs[CC_id], nCCE[CC_id], aggregation);
+ module_idP, frameP, UE_id, CC_id);
//if(mac_xface->get_transmission_mode(module_idP,rnti)==5)
continue_flag=1; //to next user (there might be rbs availiable for other UEs in TM5
// else
@@ -540,7 +542,6 @@ schedule_ue_spec(
UE_list);
// update UL DAI after DLSCH scheduling
set_ul_DAI(module_idP,UE_id,CC_id,frameP,subframeP,frame_parms);
-
}
if (continue_flag == 1 ) {
@@ -587,11 +588,10 @@ schedule_ue_spec(
UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = 0;
}
- LOG_D(MAC,"[eNB %d] Frame %d: Scheduling UE %d on CC_id %d (rnti %x, harq_pid %d, round %d, rb %d, cqi %d, mcs %d, ncc %d, rrc %d)\n",
+ LOG_D(MAC,"[eNB %d] Frame %d: Scheduling UE %d on CC_id %d (rnti %x, harq_pid %d, round %d, rb %d, cqi %d, mcs %d, rrc %d)\n",
module_idP, frameP, UE_id,CC_id,rnti,harq_pid, round,nb_available_rb,
eNB_UE_stats->DL_cqi[0], eNB_UE_stats->dlsch_mcs1,
- nCCE[CC_id],
- UE_list->eNB_UE_stats[CC_id][UE_id].rrc_status);
+ UE_list->eNB_UE_stats[CC_id][UE_id].rrc_status);
// Note this code is for a specific DCI format
@@ -641,8 +641,6 @@ schedule_ue_spec(
nb_available_rb -= nb_rb;
aggregation = process_ue_cqi(module_idP,UE_id);
- nCCE[CC_id]-=(1<mu_mimo_mode[UE_id].pre_nb_available_rbs = nb_rb;
@@ -789,7 +787,6 @@ schedule_ue_spec(
UE_list->eNB_UE_stats[CC_id][UE_id].num_retransmission+=1;
UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used_retx=nb_rb;
UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_retx+=nb_rb;
- UE_list->eNB_UE_stats[CC_id][UE_id].ncce_used_retx=nCCE[CC_id];
UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs1=eNB_UE_stats->dlsch_mcs1;
UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs2=eNB_UE_stats->dlsch_mcs1;
} else {
@@ -806,29 +803,7 @@ schedule_ue_spec(
// check first for RLC data on DCCH
// add the length for all the control elements (timing adv, drx, etc) : header + payload
- //#ifndef EXMIMO_IOT
- // to be checked by RK, NN, FK
- uint8_t update_TA=4;
-
- switch (frame_parms[CC_id]->N_RB_DL) {
- case 6:
- update_TA = 1;
- break;
-
- case 25:
- update_TA = 4;
- break;
-
- case 50:
- update_TA = 8;
- break;
-
- case 100:
- update_TA = 16;
- break;
- }
-
- ta_len = ((eNB_UE_stats->timing_advance_update/update_TA)!=0) ? 2 : 0;
+ ta_len = (ue_sched_ctl->ta_update!=0) ? 2 : 0;
header_len_dcch = 2; // 2 bytes DCCH SDU subheader
@@ -1076,11 +1051,6 @@ schedule_ue_spec(
post_padding = TBS - sdu_length_total - header_len_dcch - header_len_dtch - ta_len ; // 1 is for the postpadding header
}
- //#ifndef EXMIMO_IOT
- ta_update = eNB_UE_stats->timing_advance_update/update_TA;
- /*#else
- ta_update = 0;
- #endif*/
offset = generate_dlsch_header((unsigned char*)UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0],
// offset = generate_dlsch_header((unsigned char*)eNB_mac_inst[0].DLSCH_pdu[0][0].payload[0],
@@ -1088,17 +1058,17 @@ schedule_ue_spec(
sdu_lengths, //
sdu_lcids,
255, // no drx
- ta_update, // timing advance
+ ue_sched_ctl->ta_update, // timing advance
NULL, // contention res id
padding,
post_padding);
//#ifdef DEBUG_eNB_SCHEDULER
- if (ta_update) {
+ if (ue_sched_ctl->ta_update) {
LOG_I(MAC,
"[eNB %d][DLSCH] Frame %d Generate header for UE_id %d on CC_id %d: sdu_length_total %d, num_sdus %d, sdu_lengths[0] %d, sdu_lcids[0] %d => payload offset %d,timing advance value : %d, padding %d,post_padding %d,(mcs %d, TBS %d, nb_rb %d),header_dcch %d, header_dtch %d\n",
module_idP,frameP, UE_id, CC_id, sdu_length_total,num_sdus,sdu_lengths[0],sdu_lcids[0],offset,
- ta_update,padding,post_padding,mcs,TBS,nb_rb,header_len_dcch,header_len_dtch);
+ ue_sched_ctl->ta_update,padding,post_padding,mcs,TBS,nb_rb,header_len_dcch,header_len_dtch);
}
//#endif
@@ -1130,8 +1100,6 @@ schedule_ue_spec(
}
aggregation = process_ue_cqi(module_idP,UE_id);
- nCCE[CC_id]-=(1<UE_template[CC_id][UE_id].nb_rb[harq_pid] = nb_rb;
add_ue_dlsch_info(module_idP,
@@ -1145,7 +1113,6 @@ schedule_ue_spec(
UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used = nb_rb;
UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used += nb_rb;
- UE_list->eNB_UE_stats[CC_id][UE_id].ncce_used = nCCE[CC_id];
UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs1=eNB_UE_stats->dlsch_mcs1;
UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs2=mcs;
UE_list->eNB_UE_stats[CC_id][UE_id].TBS = TBS;
@@ -1166,7 +1133,7 @@ schedule_ue_spec(
// this is the normalized RX power
eNB_UE_stats = mac_xface->get_eNB_UE_stats(module_idP,CC_id,rnti);
normalized_rx_power = eNB_UE_stats->Po_PUCCH_dBm;
- target_rx_power = mac_xface->get_target_pucch_rx_power(module_idP,CC_id) + 10;
+ target_rx_power = mac_xface->get_target_pucch_rx_power(module_idP,CC_id) + 20;
// this assumes accumulated tpc
// make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out
@@ -1178,6 +1145,7 @@ schedule_ue_spec(
UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_frame=frameP;
UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_subframe=subframeP;
+
if (normalized_rx_power>(target_rx_power+1)) {
tpc = 0; //-1
tpc_accumulated--;
@@ -1187,9 +1155,11 @@ schedule_ue_spec(
} else {
tpc = 1; //0
}
- LOG_D(MAC,"[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n",
+ /*
+ LOG_I(MAC,"[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n",
module_idP,frameP, subframeP,harq_pid,tpc,
- tpc_accumulated,normalized_rx_power,target_rx_power);
+ tpc_accumulated,normalized_rx_power,target_rx_power);*/
+
} // Po_PUCCH has been updated
else {
tpc = 1; //0
@@ -1495,10 +1465,9 @@ schedule_ue_spec(
if (frame_parms[CC_id]->frame_type == TDD) {
set_ul_DAI(module_idP,UE_id,CC_id,frameP,subframeP,frame_parms);
}
- }
- }
- //printf("MAC nCCE : %d\n",*nCCE_used);
+ } // UE_id loop
+ } // CC_id loop
stop_meas(&eNB->schedule_dlsch);
@@ -1509,13 +1478,11 @@ schedule_ue_spec(
//------------------------------------------------------------------------------
void
fill_DLSCH_dci(
- module_id_t module_idP,
- frame_t frameP,
- sub_frame_t subframeP,
- uint32_t* RBallocP,
- uint8_t RA_scheduledP,
- int* mbsfn_flagP
-)
+ module_id_t module_idP,
+ frame_t frameP,
+ sub_frame_t subframeP,
+ int* mbsfn_flagP
+ )
//------------------------------------------------------------------------------
{
@@ -1523,10 +1490,9 @@ fill_DLSCH_dci(
int UE_id = -1;
uint8_t first_rb,nb_rb=3;
rnti_t rnti;
- unsigned char vrb_map[100];
+ unsigned char *vrb_map;
uint8_t rballoc_sub[25];
//uint8_t number_of_subbands=13;
- uint32_t *rballoc=RBallocP;
unsigned char round;
unsigned char harq_pid;
@@ -1549,598 +1515,8 @@ fill_DLSCH_dci(
if (mbsfn_flagP[CC_id]>0)
continue;
- DCI_pdu = &eNB->common_channels[CC_id].DCI_pdu;
- BCCH_alloc_pdu=(void*)&eNB->common_channels[CC_id].BCCH_alloc_pdu;
- // clear vrb_map
- memset(vrb_map,0,100);
-
-
- // SI DLSCH
- // printf("BCCH check\n");
- if (eNB->common_channels[CC_id].bcch_active == 1) {
- eNB->common_channels[CC_id].bcch_active = 0;
- LOG_D(MAC,"[eNB %d] CC_id %d Frame %d subframeP %d: BCCH active\n", module_idP, CC_id, frameP, subframeP);
- // randomize frequency allocation for SI
- first_rb = 10;//(unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL-4));
-
- /* Where is this from, should be removed!!!!
-
- if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
-
- }
- else {
- BCCH_alloc_pdu_fdd.rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(BCCH_alloc_pdu_fdd.vrb_type,BCCH_alloc_pdu_fdd.rballoc);
- }
- */
-
-
- vrb_map[first_rb] = 1;
- vrb_map[first_rb+1] = 1;
- vrb_map[first_rb+2] = 1;
- vrb_map[first_rb+3] = 1;
-
- if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
- switch (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
- case 6:
- ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->type = 1;
- ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->vrb_type = 0;
- ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->ndi = 1;
- ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rv = 1;
- ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->harq_pid = 0;
- ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->TPC = 1;
- ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->padding = 0;
- rballoc[CC_id] |= mac_xface->get_rballoc(0,((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc);
- add_common_dci(DCI_pdu,
- BCCH_alloc_pdu,
- SI_RNTI,
- sizeof(DCI1A_1_5MHz_TDD_1_6_t),
- 2,
- sizeof_DCI1A_1_5MHz_TDD_1_6_t,
- format1A,0);
- break;
-
- case 25:
- ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->type = 1;
- ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->vrb_type = 0;
- ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->ndi = 1;
- ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rv = 1;
- ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->harq_pid = 0;
- ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->TPC = 1;
- ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->padding = 0;
- rballoc[CC_id] |= mac_xface->get_rballoc(0,((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc);
- add_common_dci(DCI_pdu,
- BCCH_alloc_pdu,
- SI_RNTI,
- sizeof(DCI1A_5MHz_TDD_1_6_t),
- 2,
- sizeof_DCI1A_5MHz_TDD_1_6_t,
- format1A,0);
- break;
-
- case 50:
- ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->type = 1;
- ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->vrb_type = 0;
- ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->ndi = 1;
- ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rv = 1;
- ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->harq_pid = 0;
- ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->TPC = 1;
- ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->padding = 0;
- rballoc[CC_id] |= mac_xface->get_rballoc(0,((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc);
- add_common_dci(DCI_pdu,
- BCCH_alloc_pdu,
- SI_RNTI,
- sizeof(DCI1A_10MHz_TDD_1_6_t),
- 2,
- sizeof_DCI1A_10MHz_TDD_1_6_t,
- format1A,0);
- break;
-
- case 100:
- ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->type = 1;
- ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->vrb_type = 0;
- ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->ndi = 1;
- ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rv = 1;
- ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->harq_pid = 0;
- ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->TPC = 1;
- ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->padding = 0;
- rballoc[CC_id] |= mac_xface->get_rballoc(0,((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc);
- add_common_dci(DCI_pdu,
- BCCH_alloc_pdu,
- SI_RNTI,
- sizeof(DCI1A_20MHz_TDD_1_6_t),
- 2,
- sizeof_DCI1A_20MHz_TDD_1_6_t,
- format1A,0);
- break;
- }
- } else {
- switch (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
- case 6:
- ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->type = 1;
- ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->vrb_type = 0;
- ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->ndi = 1;
- ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->rv = 1;
- ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->harq_pid = 0;
- ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->TPC = 1;
- ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->padding = 0;
-
- rballoc[CC_id] |= mac_xface->get_rballoc(0,((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->rballoc);
- add_common_dci(DCI_pdu,
- BCCH_alloc_pdu,
- SI_RNTI,
- sizeof(DCI1A_1_5MHz_FDD_t),
- 2,
- sizeof_DCI1A_1_5MHz_FDD_t,
- format1A,0);
- break;
-
- case 25:
- ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->type = 1;
- ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->vrb_type = 0;
- ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->ndi = 1;
- ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->rv = 1;
- ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->harq_pid = 0;
- ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->TPC = 1;
- ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->padding = 0;
-
- rballoc[CC_id] |= mac_xface->get_rballoc(0,((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->rballoc);
- add_common_dci(DCI_pdu,
- BCCH_alloc_pdu,
- SI_RNTI,
- sizeof(DCI1A_5MHz_FDD_t),
- 2,
- sizeof_DCI1A_5MHz_FDD_t,
- format1A,0);
- break;
-
- case 50:
- ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->type = 1;
- ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->vrb_type = 0;
- ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->ndi = 1;
- ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->rv = 1;
- ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->harq_pid = 0;
- ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->TPC = 1;
- ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->padding = 0;
-
- rballoc[CC_id] |= mac_xface->get_rballoc(0,((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->rballoc);
- add_common_dci(DCI_pdu,
- BCCH_alloc_pdu,
- SI_RNTI,
- sizeof(DCI1A_10MHz_FDD_t),
- 2,
- sizeof_DCI1A_10MHz_FDD_t,
- format1A,0);
- break;
-
- case 100:
- ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->type = 1;
- ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->vrb_type = 0;
- ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->ndi = 1;
- ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->rv = 1;
- ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->harq_pid = 0;
- ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->TPC = 1;
- ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->padding = 0;
-
- rballoc[CC_id] |= mac_xface->get_rballoc(0,((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->rballoc);
- add_common_dci(DCI_pdu,
- BCCH_alloc_pdu,
- SI_RNTI,
- sizeof(DCI1A_20MHz_FDD_t),
- 2,
- sizeof_DCI1A_20MHz_FDD_t,
- format1A,0);
- break;
- }
- }
- }
-
- if (RA_scheduledP == 1) {
- for (i=0; icommon_channels[CC_id].RA_template[i];
-
- if (RA_template->generate_rar == 1) {
-
- //FK: postponed to fill_rar
- //RA_template->generate_rar = 0;
-
- LOG_D(MAC,"[eNB %d] CC_id %d Frame %d, subframeP %d: Generating RAR DCI (proc %d), RA_active %d format 1A (%d,%d))\n",
- module_idP, CC_id, frameP, subframeP,i,
- RA_template->RA_active,
- RA_template->RA_dci_fmt1,
- RA_template->RA_dci_size_bits1);
-
- // randomize frequency allocation for RA
- while (1) {
- first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL-4));
-
- if ((vrb_map[first_rb] != 1) && (vrb_map[first_rb+3] != 1))
- break;
- }
-
- vrb_map[first_rb] = 1;
- vrb_map[first_rb+1] = 1;
- vrb_map[first_rb+2] = 1;
- vrb_map[first_rb+3] = 1;
-
- if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
- switch(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
- case 6:
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->ndi=1;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rv=0;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->mcs=0;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
- break;
-
- case 25:
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->ndi=1;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rv=0;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->mcs=0;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
- break;
-
- case 50:
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->ndi=1;
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rv=0;
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->mcs=0;
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
- break;
-
- case 100:
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->ndi=1;
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rv=0;
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->mcs=0;
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
- break;
-
- default:
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->ndi=1;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rv=0;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->mcs=0;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
- break;
- }
- } else {
- switch(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
- case 6:
- ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
- ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
- ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->ndi=1;
- ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rv=0;
- ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->mcs=0;
- ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
- ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
- ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
- ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
- ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
- break;
-
- case 25:
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->ndi=1;
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rv=0;
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->mcs=0;
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_UL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
- break;
-
- case 50:
- ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
- ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
- ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->ndi=1;
- ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rv=0;
- ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->mcs=0;
- ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
- ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
- ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
- ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
- ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
- break;
-
- case 100:
- ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
- ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
- ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->ndi=1;
- ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rv=0;
- ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->mcs=0;
- ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
- ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
- ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
- ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
- ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
- break;
-
- default:
- break;
- }
- }
-
- add_common_dci(DCI_pdu,
- (void*)&RA_template->RA_alloc_pdu1[0],
- RA_template->RA_rnti,
- RA_template->RA_dci_size_bytes1,
- 2,
- RA_template->RA_dci_size_bits1,
- RA_template->RA_dci_fmt1,
- 1);
-
-
-
- LOG_D(MAC,"[eNB %d] CC_id %d Frame %d: Adding common dci for RA%d (RAR) RA_active %d\n",
- module_idP,CC_id,frameP,i, RA_template->RA_active);
- }
-
- if (RA_template->generate_Msg4_dci == 1) {
-
- // randomize frequency allocation for RA
- while (1) {
- first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL-4));
-
- if ((vrb_map[first_rb] != 1) && (vrb_map[first_rb+3] != 1))
- break;
- }
-
- vrb_map[first_rb] = 1;
- vrb_map[first_rb+1] = 1;
- vrb_map[first_rb+2] = 1;
- vrb_map[first_rb+3] = 1;
-
- if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
- switch (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
- case 6:
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->type=1;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type=0;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rv=0;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
- ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
- break;
-
- case 25:
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->type=1;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type=0;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rv=0;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
- break;
-
- case 50:
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->type=1;
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type=0;
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rv=0;
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
- ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
- break;
-
- case 100:
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->type=1;
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type=0;
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rv=0;
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
- ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
- break;
-
- default:
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->type=1;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type=0;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rv=0;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
- break;
- }
- } else {
- switch (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
-
- case 6:
- ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->type=1;
- ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type=0;
- ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rv=0;
- ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
- ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
- ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
- ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
- ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
- break;
-
- case 25:
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->type=1;
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type=0;
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rv=0;
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
- break;
-
- case 50:
- ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->type=1;
- ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type=0;
- ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rv=0;
- ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
- ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
- ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
- ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
- ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
- break;
-
- case 100:
- ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->type=1;
- ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type=0;
- ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rv=0;
- ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
- ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
- ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
- ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
- ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
- break;
-
- default:
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->type=1;
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type=0;
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rv=0;
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
- break;
- }
- }
-
- add_ue_spec_dci(DCI_pdu,
- (void*)&RA_template->RA_alloc_pdu2[0],
- RA_template->rnti,
- RA_template->RA_dci_size_bytes2,
- 1,
- RA_template->RA_dci_size_bits2,
- RA_template->RA_dci_fmt2,
- 0);
- LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Adding ue specific dci (rnti %x) for Msg4\n",
- module_idP,CC_id,frameP,subframeP,RA_template->rnti);
- RA_template->generate_Msg4_dci=0;
-
- } else if (RA_template->wait_ack_Msg4==1) {
- // check HARQ status and retransmit if necessary
- LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Checking if Msg4 was acknowledged: \n",
- module_idP,CC_id,frameP,subframeP);
- // Get candidate harq_pid from PHY
- mac_xface->get_ue_active_harq_pid(module_idP,CC_id,RA_template->rnti,frameP,subframeP,&harq_pid,&round,0);
-
- if (round>0) {
- //RA_template->wait_ack_Msg4++;
- // we have to schedule a retransmission
- if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->ndi=1;
- } else {
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->ndi=1;
- }
-
- // randomize frequency allocation for RA
- while (1) {
- first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL-4));
-
- if ((vrb_map[first_rb] != 1) && (vrb_map[first_rb+3] != 1))
- break;
- }
-
- vrb_map[first_rb] = 1;
- vrb_map[first_rb+1] = 1;
- vrb_map[first_rb+2] = 1;
- vrb_map[first_rb+3] = 1;
-
- if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_UL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
- ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
- } else {
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_UL,first_rb,4);
- rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
- ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
- }
-
- add_ue_spec_dci(DCI_pdu,
- (void*)&RA_template->RA_alloc_pdu2[0],
- RA_template->rnti,
- RA_template->RA_dci_size_bytes2,
- 2,
- RA_template->RA_dci_size_bits2,
- RA_template->RA_dci_fmt2,
- 0);
- LOG_W(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Msg4 not acknowledged, adding ue specific dci (rnti %x) for RA (Msg4 Retransmission)\n",
- module_idP,CC_id,frameP,subframeP,RA_template->rnti);
- } else {
- /* msg4 not received
- if ((round == 0) && (RA_template->wait_ack_Msg4>1){
- remove UE instance across all the layers: mac_xface->cancel_RA();
- }
- */
- LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d : Msg4 acknowledged\n",module_idP,CC_id,frameP,subframeP);
- RA_template->wait_ack_Msg4=0;
- RA_template->RA_active=FALSE;
- UE_id = find_UE_id(module_idP,RA_template->rnti);
- DevAssert( UE_id != -1 );
- eNB_mac_inst[module_idP].UE_list.UE_template[UE_PCCID(module_idP,UE_id)][UE_id].configured=TRUE;
-
- }
- }
- }
- } // RA is scheduled in this subframeP
-
+ DCI_pdu = &eNB->common_channels[CC_id].DCI_pdu;
+
// UE specific DCIs
for (UE_id=UE_list->head; UE_id>=0; UE_id=UE_list->next[UE_id]) {
@@ -2161,11 +1537,6 @@ fill_DLSCH_dci(
/// Synchronizing rballoc with rballoc_sub
for(i=0; ilte_frame_parms.N_RBG; i++) {
rballoc_sub[i] = UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][i];
-
- if(rballoc_sub[i] == 1) {
- rballoc[CC_id] |= (0x0001<get_transmission_mode(module_idP,CC_id,rnti)) {
@@ -2174,7 +1545,7 @@ fill_DLSCH_dci(
case 1:
case 2:
- LOG_D(MAC,"[eNB %d] CC_id %d Adding UE %d spec DCI for %d PRBS (rb alloc: %x) \n",module_idP, CC_id, UE_id, nb_rb,rballoc);
+ LOG_D(MAC,"[eNB %d] CC_id %d Adding UE %d spec DCI for %d PRBS \n",module_idP, CC_id, UE_id, nb_rb);
if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
switch (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
@@ -2267,7 +1638,7 @@ fill_DLSCH_dci(
case 3:
LOG_D(MAC,"[eNB %d] CC_id %d Adding Format 2A UE %d spec DCI for %d PRBS (rb alloc: %x) \n",
- module_idP, CC_id, UE_id, nb_rb,rballoc);
+ module_idP, CC_id, UE_id, nb_rb);
if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
switch (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
index 34169d902e..9cabd6b622 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
@@ -267,6 +267,7 @@ int add_new_ue(module_id_t mod_idP, int cc_idP, rnti_t rntiP,int harq_pidP)
UE_list->ordered_ULCCids[0][UE_id] = cc_idP;
UE_list->num_UEs++;
UE_list->active[UE_id] = TRUE;
+ memset((void*)&UE_list->UE_sched_ctrl[UE_id],0,sizeof(UE_sched_ctrl));
for (j=0; j<8; j++) {
UE_list->UE_template[cc_idP][UE_id].oldNDI[j] = (j==0)?1:0; // 1 because first transmission is with format1A (Msg4) for harq_pid 0
@@ -879,3 +880,230 @@ int get_nb_subband(void)
return nb_sb;
}
+
+void init_CCE_table(int module_idP,int CC_idP)
+{
+ memset(eNB_mac_inst[module_idP].CCE_table[CC_idP],0,800*sizeof(int));
+}
+
+
+int get_nCCE_offset(int *CCE_table,
+ const unsigned char L,
+ const int nCCE,
+ const int common_dci,
+ const unsigned short rnti,
+ const unsigned char subframe)
+{
+
+ int search_space_free,m,nb_candidates = 0,l,i;
+ unsigned int Yk;
+ /*
+ printf("CCE Allocation: ");
+ for (i=0;i=0 ; m--) {
+
+ search_space_free = 1;
+ for (l=0; lget_nCCE_max(module_idP,CC_idP,DCI_pdu->num_pdcch_symbols,subframeP);
+ int fCCE;
+ int i,j;
+ int allocation_is_feasible = 1;
+ DCI_ALLOC_t *dci_alloc;
+
+
+ LOG_D(MAC,"Allocate CCEs subframe %d, test %d : (common %d,uspec %d)\n",subframeP,test_onlyP,DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci);
+
+ init_CCE_table(module_idP,CC_idP);
+ DCI_pdu->nCCE=0;
+
+ while (allocation_is_feasible == 1) {
+
+ for (i=0;iNum_common_dci + DCI_pdu->Num_ue_spec_dci;i++) {
+ dci_alloc = &DCI_pdu->dci_alloc[i];
+ LOG_D(MAC,"Trying to allocate DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n",
+ i,DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci,
+ DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci,
+ dci_alloc->rnti,1<L,
+ DCI_pdu->nCCE,nCCE_max,DCI_pdu->num_pdcch_symbols);
+
+ if (DCI_pdu->nCCE + (1<L) > nCCE_max) {
+ if (DCI_pdu->num_pdcch_symbols == 3)
+ allocation_is_feasible = 0;
+ else {
+ DCI_pdu->num_pdcch_symbols++;
+ nCCE_max = mac_xface->get_nCCE_max(module_idP,CC_idP,DCI_pdu->num_pdcch_symbols,subframeP);
+ }
+ break;
+ }
+ else { // number of CCEs left can potentially hold this allocation
+ if ((fCCE = get_nCCE_offset(CCE_table,
+ 1<<(dci_alloc->L),
+ nCCE_max,
+ (iNum_common_dci) ? 1 : 0,
+ dci_alloc->rnti,
+ subframeP))>=0) {// the allocation is feasible, rnti rule passes
+
+ LOG_D(MAC,"Allocating at nCCE %d\n",fCCE);
+ if (test_onlyP == 0) {
+ DCI_pdu->nCCE += (1<L);
+ dci_alloc->firstCCE=fCCE;
+ LOG_D(MAC,"Allocate CCEs subframe %d, test %d\n",subframeP,test_onlyP);
+ }
+ } // fCCE>=0
+ else {
+ if (DCI_pdu->num_pdcch_symbols == 3) {
+ allocation_is_feasible = 0;
+ LOG_I(MAC,"subframe %d: Dropping Allocation for RNTI %x\n",
+ subframeP,dci_alloc->rnti);
+ for (j=0;j<=i;j++){
+
+ LOG_I(MAC,"DCI %d/%d (%d,%d) : rnti %x dci format %d, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n",
+ i,DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci,
+ DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci,
+ DCI_pdu->dci_alloc[j].rnti,DCI_pdu->dci_alloc[j].format,
+ 1<dci_alloc[j].L,
+ DCI_pdu->nCCE,nCCE_max,DCI_pdu->num_pdcch_symbols);
+ }
+ }
+ else {
+ DCI_pdu->num_pdcch_symbols++;
+ nCCE_max = mac_xface->get_nCCE_max(module_idP,CC_idP,DCI_pdu->num_pdcch_symbols,subframeP);
+ }
+ break;
+ } // fCCE==-1
+ } // nCCE <= nCCE_max
+ } // for i = 0 ... num_dcis
+ if (allocation_is_feasible==1)
+ return (0);
+ } // allocation_is_feasible == 1
+
+ return(-1);
+
+
+}
+
+boolean_t CCE_allocation_infeasible(int module_idP,
+ int CC_idP,
+ int common_flag,
+ int subframe,
+ int aggregation,
+ int rnti) {
+
+
+ DCI_PDU *DCI_pdu = &eNB_mac_inst[module_idP].common_channels[CC_idP].DCI_pdu;
+ DCI_ALLOC_t *dci_alloc;
+ int ret;
+ boolean_t res=FALSE;
+
+ if (common_flag==1) {
+ DCI_pdu->dci_alloc[DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci].rnti = rnti;
+ DCI_pdu->dci_alloc[DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci].L = aggregation;
+ DCI_pdu->Num_common_dci++;
+ ret = allocate_CCEs(module_idP,CC_idP,subframe,1);
+ if (ret==-1)
+ res = TRUE;
+ DCI_pdu->Num_common_dci--;
+ }
+ else {
+ DCI_pdu->dci_alloc[DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci].rnti = rnti;
+ DCI_pdu->dci_alloc[DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci].L = aggregation;
+ DCI_pdu->Num_ue_spec_dci++;
+ ret = allocate_CCEs(module_idP,CC_idP,subframe,1);
+ if (ret==-1)
+ res = TRUE;
+ DCI_pdu->Num_ue_spec_dci--;
+ }
+ return(res);
+}
+
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
index 1018c6e7d8..493ff11d33 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
@@ -88,6 +88,7 @@ void rx_sdu(
int ii,j;
eNB_MAC_INST *eNB = &eNB_mac_inst[enb_mod_idP];
UE_list_t *UE_list= &eNB->UE_list;
+ int crnti_rx=0;
start_meas(&eNB->rx_ulsch_sdu);
@@ -126,13 +127,11 @@ void rx_sdu(
break;
case CRNTI:
- LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d (ce %d/%d): Received CRNTI %2.2x%2.2x\n",
- enb_mod_idP, CC_idP, rx_ces[i], i,num_ce, payload_ptr[0], payload_ptr[1]);
UE_id = find_UE_id(enb_mod_idP,(((uint16_t)payload_ptr[0])<<8) + payload_ptr[1]);
- LOG_I(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d : CRNTI %x (UE_id %d) in Msg3\n",enb_mod_idP, CC_idP, rx_ces[i], (((uint16_t)payload_ptr[0])<<8) + payload_ptr[1],UE_id);
-
+ LOG_I(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d (ce %d/%d): CRNTI %x (UE_id %d) in Msg3\n",enb_mod_idP, CC_idP, rx_ces[i], i,num_ce,(((uint16_t)payload_ptr[0])<<8) + payload_ptr[1],UE_id);
+ crnti_rx=1;
payload_ptr+=2;
- /* we don't process this CE yet */
+
if (msg3_flagP != NULL) {
*msg3_flagP = 0;
}
@@ -146,6 +145,9 @@ void rx_sdu(
LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d : Received short BSR LCGID = %u bsr = %d\n",
enb_mod_idP, CC_idP, rx_ces[i], lcgid, payload_ptr[0] & 0x3f);
+ if (crnti_rx==1)
+ LOG_I(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d : Received short BSR LCGID = %u bsr = %d\n",
+ enb_mod_idP, CC_idP, rx_ces[i], lcgid, payload_ptr[0] & 0x3f);
if (UE_id != -1) {
UE_list->UE_template[CC_idP][UE_id].bsr_info[lcgid] = (payload_ptr[0] & 0x3f);
@@ -177,6 +179,15 @@ void rx_sdu(
UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID1],
UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID2],
UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID3]);
+ if (crnti_rx==1)
+ LOG_I(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d: Received long BSR LCGID0 = %u LCGID1 = "
+ "%u LCGID2 = %u LCGID3 = %u\n",
+ enb_mod_idP, CC_idP,
+ rx_ces[i],
+ UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID0],
+ UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID1],
+ UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID2],
+ UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID3]);
if (UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID0] == 0 ) {
UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[LCGID0]=0;
@@ -223,7 +234,7 @@ void rx_sdu(
payload_ptr[0],payload_ptr[1],payload_ptr[2],payload_ptr[3],payload_ptr[4], payload_ptr[5], rntiP);
for (ii=0; iicommon_channels[CC_idP].RA_template[ii].rnti, rntiP,
eNB->common_channels[CC_idP].RA_template[ii].RA_active);
@@ -236,7 +247,7 @@ void rx_sdu(
if (UE_id < 0) {
memcpy(&eNB->common_channels[CC_idP].RA_template[ii].cont_res_id[0],payload_ptr,6);
LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d CCCH: Received Msg3: length %d, offset %d\n",
- enb_mod_idP,CC_idP,frameP,rx_lengths[ii],payload_ptr-sduP);
+ enb_mod_idP,CC_idP,frameP,rx_lengths[i],payload_ptr-sduP);
if ((UE_id=add_new_ue(enb_mod_idP,CC_idP,eNB->common_channels[CC_idP].RA_template[ii].rnti,harq_pidP)) == -1 ) {
mac_xface->macphy_exit("[MAC][eNB] Max user count reached\n");
@@ -246,7 +257,7 @@ void rx_sdu(
enb_mod_idP,CC_idP,frameP,eNB->common_channels[CC_idP].RA_template[ii].rnti,UE_id);
} else {
LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d CCCH: Received Msg3 from already registered UE %d: length %d, offset %d\n",
- enb_mod_idP,CC_idP,frameP,UE_id,rx_lengths[ii],payload_ptr-sduP);
+ enb_mod_idP,CC_idP,frameP,UE_id,rx_lengths[i],payload_ptr-sduP);
// kill RA procedure
}
@@ -258,7 +269,7 @@ void rx_sdu(
rntiP,
CCCH,
(uint8_t*)payload_ptr,
- rx_lengths[ii],
+ rx_lengths[i],
ENB_FLAG_YES,
enb_mod_idP,
0);
@@ -297,17 +308,17 @@ void rx_sdu(
enb_mod_idP,CC_idP,frameP, rx_lengths[i], UE_id, rx_lcids[i]);
mac_rlc_data_ind(
- enb_mod_idP,
- rntiP,
- enb_mod_idP,
- frameP,
- ENB_FLAG_YES,
- MBMS_FLAG_NO,
- rx_lcids[i],
- (char *)payload_ptr,
- rx_lengths[i],
- 1,
- NULL);//(unsigned int*)crc_status);
+ enb_mod_idP,
+ rntiP,
+ enb_mod_idP,
+ frameP,
+ ENB_FLAG_YES,
+ MBMS_FLAG_NO,
+ rx_lcids[i],
+ (char *)payload_ptr,
+ rx_lengths[i],
+ 1,
+ NULL);//(unsigned int*)crc_status);
UE_list->eNB_UE_stats[CC_idP][UE_id].num_pdu_rx[rx_lcids[i]]+=1;
UE_list->eNB_UE_stats[CC_idP][UE_id].num_bytes_rx[rx_lcids[i]]+=rx_lengths[i];
}
@@ -596,12 +607,14 @@ unsigned char *parse_ulsch_header(unsigned char *mac_header,
}
-void schedule_ulsch(module_id_t module_idP, frame_t frameP,unsigned char cooperation_flag,sub_frame_t subframeP, unsigned char sched_subframe,
- unsigned int *nCCE) //,int calibration_flag) {
-{
+void schedule_ulsch(module_id_t module_idP,
+ frame_t frameP,
+ unsigned char cooperation_flag,
+ sub_frame_t subframeP,
+ unsigned char sched_subframe) {
+
- unsigned int nCCE_available[MAX_NUM_CCs];
uint16_t first_rb[MAX_NUM_CCs],i;
int CC_id;
eNB_MAC_INST *eNB=&eNB_mac_inst[module_idP];
@@ -612,7 +625,6 @@ void schedule_ulsch(module_id_t module_idP, frame_t frameP,unsigned char coopera
for (CC_id=0; CC_idget_nCCE_max(module_idP,CC_id) - nCCE[CC_id];
// UE data info;
// check which UE has data to transmit
@@ -644,10 +656,10 @@ void schedule_ulsch(module_id_t module_idP, frame_t frameP,unsigned char coopera
}
- schedule_ulsch_rnti(module_idP, cooperation_flag, frameP, subframeP, sched_subframe, nCCE, nCCE_available, first_rb);
+ schedule_ulsch_rnti(module_idP, cooperation_flag, frameP, subframeP, sched_subframe,first_rb);
#ifdef CBA
- schedule_ulsch_cba_rnti(module_idP, cooperation_flag, frameP, subframeP, sched_subframe, nCCE, nCCE_available, first_rb);
+ schedule_ulsch_cba_rnti(module_idP, cooperation_flag, frameP, subframeP, sched_subframe, first_rb);
#endif
@@ -662,8 +674,6 @@ void schedule_ulsch_rnti(module_id_t module_idP,
frame_t frameP,
sub_frame_t subframeP,
unsigned char sched_subframe,
- unsigned int *nCCE,
- unsigned int *nCCE_available,
uint16_t *first_rb)
{
@@ -697,8 +707,7 @@ void schedule_ulsch_rnti(module_id_t module_idP,
frameP,
subframeP,
first_rb,
- aggregation,
- nCCE);
+ aggregation);
// LOG_I(MAC,"exiting ulsch preprocesor\n");
@@ -729,11 +738,12 @@ void schedule_ulsch_rnti(module_id_t module_idP,
continue; // mac_xface->macphy_exit("[MAC][eNB] Cannot find eNB_UE_stats\n");
}
- if (nCCE_available[CC_id] < (1<mode]);
if (eNB_UE_stats->mode == PUSCH) { // ue has a ulsch channel
@@ -747,9 +757,10 @@ void schedule_ulsch_rnti(module_id_t module_idP,
//should we continue or set harq_pid to 0?
continue;
} else
- LOG_T(MAC,"[eNB %d] Frame %d, subframeP %d, UE %d CC %d : got harq pid %d round %d (nCCE %d, rnti %x,mode %s)\n",
- module_idP,frameP,subframeP,UE_id,CC_id, harq_pid, round,nCCE[CC_id],rnti,mode_string[eNB_UE_stats->mode]);
+ LOG_T(MAC,"[eNB %d] Frame %d, subframeP %d, UE %d CC %d : got harq pid %d round %d (rnti %x,mode %s)\n",
+ module_idP,frameP,subframeP,UE_id,CC_id, harq_pid, round,rnti,mode_string[eNB_UE_stats->mode]);
+ //#undef EXMIMO_IOT
#ifndef EXMIMO_IOT
if (((UE_is_to_be_scheduled(module_idP,CC_id,UE_id)>0)) || (round>0) || ((frameP%10)==0))
@@ -1088,9 +1099,6 @@ void schedule_ulsch_rnti(module_id_t module_idP,
subframeP,
S_UL_SCHEDULED);
- nCCE[CC_id] = nCCE[CC_id] + (1<get_nCCE_max(module_idP,CC_id) - nCCE[CC_id];
-
LOG_D(MAC,"[eNB %d] CC_id %d Frame %d, subframeP %d: Generated ULSCH DCI for next UE_id %d, format 0\n", module_idP,CC_id,frameP,subframeP,UE_id);
#ifdef DEBUG
dump_dci(frame_parms, &DCI_pdu->dci_alloc[DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci-1]);
@@ -1103,8 +1111,7 @@ void schedule_ulsch_rnti(module_id_t module_idP,
}
#ifdef CBA
-void schedule_ulsch_cba_rnti(module_id_t module_idP, unsigned char cooperation_flag, frame_t frameP, sub_frame_t subframeP, unsigned char sched_subframe, unsigned int *nCCE,
- unsigned int *nCCE_available, uint16_t *first_rb)
+void schedule_ulsch_cba_rnti(module_id_t module_idP, unsigned char cooperation_flag, frame_t frameP, sub_frame_t subframeP, unsigned char sched_subframe, uint16_t *first_rb)
{
eNB_MAC_INST *eNB = &eNB_mac_inst[module_idP];
@@ -1163,11 +1170,11 @@ void schedule_ulsch_cba_rnti(module_id_t module_idP, unsigned char cooperation_f
// cba group template uses the exisitng UE template, and thus if a UE
// is scheduled, the correspodning group can't be used for CBA
// this can be fixed later
- if ((total_groups > 0) && (nCCE[CC_id] == 0)) {
+ if (total_groups > 0) {
DCI_pdu = &eNB_mac_inst[module_idP].common_channels[CC_id].DCI_pdu;
for (cba_group=0;
- (cba_group (1< (1<= nCCE_available[CC_id]) {
- num_cba_resources[cba_group%total_groups]--;
- total_cba_resources--;
- // LOG_N(MAC,"reducing num cba resources to %d for group %d \n", num_cba_resources[cba_group%total_groups], cba_group%total_groups );
- cba_group++;
- }
-
if (total_cba_resources <= 0) {
return;
}
@@ -1279,11 +1279,11 @@ void schedule_ulsch_cba_rnti(module_id_t module_idP, unsigned char cooperation_f
for (cba_group=0; cba_groupN_RB_UL) {
case 6:
@@ -1425,8 +1425,6 @@ void schedule_ulsch_cba_rnti(module_id_t module_idP, unsigned char cooperation_f
break;
}
- nCCE[CC_id] = nCCE[CC_id] + (1<get_nCCE_max(module_idP,CC_id) - nCCE[CC_id];
// break;// for the moment only schedule one
}
}
diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c
index 5db78a30c2..0e8a65cf01 100644
--- a/openair2/LAYER2/MAC/main.c
+++ b/openair2/LAYER2/MAC/main.c
@@ -468,6 +468,7 @@ int l2_init(LTE_DL_FRAME_PARMS *frame_parms,int eMBMS_active, char *uecap_xer,ui
mac_xface->get_transmission_mode = get_transmission_mode;
mac_xface->get_rballoc = get_rballoc;
mac_xface->get_nb_rb = conv_nprb;
+ mac_xface->get_prb = get_prb;
// mac_xface->get_SB_size = Get_SB_size;
mac_xface->get_subframe_direction = get_subframe_direction;
mac_xface->Msg3_transmitted = Msg3_tx;
@@ -507,7 +508,7 @@ int l2_init(LTE_DL_FRAME_PARMS *frame_parms,int eMBMS_active, char *uecap_xer,ui
mac_xface->computeRIV = computeRIV;
mac_xface->get_TBS_DL = get_TBS_DL;
mac_xface->get_TBS_UL = get_TBS_UL;
- mac_xface->get_nCCE_max = get_nCCE_max;
+ mac_xface->get_nCCE_max = get_nCCE_mac;
mac_xface->get_nCCE_offset = get_nCCE_offset;
mac_xface->get_ue_mode = get_ue_mode;
mac_xface->phy_config_sib1_eNB = phy_config_sib1_eNB;
diff --git a/openair2/LAYER2/MAC/pre_processor.c b/openair2/LAYER2/MAC/pre_processor.c
index 5a4caf82c4..410d454419 100644
--- a/openair2/LAYER2/MAC/pre_processor.c
+++ b/openair2/LAYER2/MAC/pre_processor.c
@@ -176,6 +176,7 @@ void assign_rbs_required (module_id_t Mod_id,
eNB_UE_stats[CC_id]->DL_cqi[0], MIN_CQI_VALUE, MAX_CQI_VALUE);
*/
eNB_UE_stats[CC_id]->dlsch_mcs1=cqi_to_mcs[eNB_UE_stats[CC_id]->DL_cqi[0]];
+
eNB_UE_stats[CC_id]->dlsch_mcs1 = cmin(eNB_UE_stats[CC_id]->dlsch_mcs1,openair_daq_vars.target_ue_dl_mcs);
}
@@ -729,38 +730,123 @@ void dlsch_scheduler_pre_processor (module_id_t Mod_id,
}
}
+#define SF05_LIMIT 1
void dlsch_scheduler_pre_processor_reset (int module_idP,
- int UE_id,
- uint8_t CC_id,
- int frameP,
- int subframeP,
- int N_RBG,
- uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX],
- uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX],
- unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX],
- unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX])
+ int UE_id,
+ uint8_t CC_id,
+ int frameP,
+ int subframeP,
+ int N_RBG,
+ uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX],
+ uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX],
+ unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX],
+ unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX])
+
{
- int i;
+ int i,j;
UE_list_t *UE_list=&eNB_mac_inst[module_idP].UE_list;
UE_sched_ctrl *ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id];
rnti_t rnti = UE_RNTI(module_idP,UE_id);
-
+ uint8_t *vrb_map = &eNB_mac_inst[module_idP].common_channels[CC_id].vrb_map;
+ int RBGsize = PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL/N_RBG;
+#ifdef SF05_LIMIT
+ int subframe05_limit=0;
+ int sf05_upper=-1,sf05_lower=-1;
+#endif
+ LTE_eNB_UE_stats *eNB_UE_stats = mac_xface->get_eNB_UE_stats(module_idP,CC_id,rnti);
// initialize harq_pid and round
mac_xface->get_ue_active_harq_pid(module_idP,CC_id,rnti,
frameP,subframeP,
&ue_sched_ctl->harq_pid[CC_id],
&ue_sched_ctl->round[CC_id],
0);
+ if (ue_sched_ctl->ta_timer == 0) {
+ // WE SHOULD PROTECT the eNB_UE_stats with a mutex here ...
+
+ ue_sched_ctl->ta_timer = 20; // wait 20 subframes before taking TA measurement from PHY
+ switch (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
+ case 6:
+ ue_sched_ctl->ta_update = eNB_UE_stats->timing_advance_update;
+ break;
+
+ case 15:
+ ue_sched_ctl->ta_update = eNB_UE_stats->timing_advance_update/2;
+ break;
+
+ case 25:
+ ue_sched_ctl->ta_update = eNB_UE_stats->timing_advance_update/4;
+ break;
+
+ case 50:
+ ue_sched_ctl->ta_update = eNB_UE_stats->timing_advance_update/8;
+ break;
+
+ case 75:
+ ue_sched_ctl->ta_update = eNB_UE_stats->timing_advance_update/12;
+ break;
+
+ case 100:
+ ue_sched_ctl->ta_update = eNB_UE_stats->timing_advance_update/16;
+ break;
+ }
+ // clear the update in case PHY does not have a new measurement after timer expiry
+ eNB_UE_stats->timing_advance_update = 0;
+ }
+ else {
+ ue_sched_ctl->ta_timer--;
+ ue_sched_ctl->ta_update =0; // don't trigger a timing advance command
+ }
nb_rbs_required[CC_id][UE_id]=0;
ue_sched_ctl->pre_nb_available_rbs[CC_id] = 0;
ue_sched_ctl->dl_pow_off[CC_id] = 2;
nb_rbs_required_remaining[CC_id][UE_id] = 0;
+#ifdef SF05_LIMIT
+ switch (N_RBG) {
+ case 6:
+ sf05_lower=0;
+ sf05_upper=5;
+ break;
+ case 8:
+ sf05_lower=2;
+ sf05_upper=5;
+ break;
+ case 13:
+ sf05_lower=4;
+ sf05_upper=7;
+ break;
+ case 17:
+ sf05_lower=7;
+ sf05_upper=9;
+ break;
+ case 25:
+ sf05_lower=11;
+ sf05_upper=13;
+ break;
+ }
+#endif
+ // Initialize Subbands according to VRB map
for (i=0; irballoc_sub_UE[CC_id][i] = 0;
rballoc_sub[CC_id][i] = 0;
+#ifdef SF05_LIMIT
+ // for avoiding 6+ PRBs around DC in subframe 0-5 (avoid excessive errors)
+
+ if ((subframeP==0 || subframeP==5) &&
+ (i>=sf05_lower && i<=sf05_upper))
+ rballoc_sub[CC_id][i]=1;
+#endif
+ // for SI-RNTI,RA-RNTI and P-RNTI allocations
+ for (j=0;jpre_allocated_nb_rb_ul > 0) {
total_ue_count+=1;
}
-
- if((mac_xface->get_nCCE_max(module_idP,CC_id) - nCCE_to_be_used[CC_id]) > (1<get_nCCE_max(module_idP,CC_id,3,subframeP) - nCCE_to_be_used[CC_id]) > (1<criticalExtensions.present = RRCConnectionReject__criticalExtensions_PR_c1;
+ rrcConnectionReject->criticalExtensions.choice.c1.present = RRCConnectionReject__criticalExtensions__c1_PR_rrcConnectionReject_r8;
+ /* let's put a wait time of 1s for the moment */
+ rrcConnectionReject->criticalExtensions.choice.c1.choice.rrcConnectionReject_r8.waitTime = 1;
+
+#ifdef XER_PRINT
+ xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
+#endif
+ enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message,
+ (void*)&dl_ccch_msg,
+ buffer,
+ 100);
+ AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %ld)!\n",
+ enc_rval.failed_type->name, enc_rval.encoded);
+
+#if defined(ENABLE_ITTI)
+# if !defined(DISABLE_XER_SPRINT)
+ {
+ char message_string[20000];
+ size_t message_string_size;
+
+ if ((message_string_size = xer_sprint(message_string, sizeof(message_string), &asn_DEF_DL_CCCH_Message, (void *) &dl_ccch_msg)) > 0) {
+ MessageDef *msg_p;
+
+ msg_p = itti_alloc_new_message_sized (TASK_RRC_ENB, RRC_DL_CCCH, message_string_size + sizeof (IttiMsgText));
+ msg_p->ittiMsg.rrc_dl_ccch.size = message_string_size;
+ memcpy(&msg_p->ittiMsg.rrc_dl_ccch.text, message_string, message_string_size);
+
+ itti_send_msg_to_task(TASK_UNKNOWN, Mod_id, msg_p);
+ }
+ }
+# endif
+#endif
+
+#ifdef USER_MODE
+ LOG_D(RRC,"RRCConnectionReject Encoded %d bits (%d bytes)\n",
+ enc_rval.encoded,(enc_rval.encoded+7)/8);
+#endif
+
+ return((enc_rval.encoded+7)/8);
+}
+
uint8_t do_RRCConnectionRelease(
uint8_t Mod_id,
uint8_t *buffer,
diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.h b/openair2/RRC/LITE/MESSAGES/asn1_msg.h
index b5747cb94b..9c5e72293a 100644
--- a/openair2/RRC/LITE/MESSAGES/asn1_msg.h
+++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.h
@@ -218,6 +218,16 @@ do_RRCConnectionReestablishmentReject(
uint8_t Mod_id,
uint8_t* const buffer);
+/**
+\brief Generate an RRCConnectionReject DL-CCCH-Message (eNB).
+@param Mod_id Module ID of eNB
+@param buffer Pointer to PER-encoded ASN.1 description of DL-CCCH-Message PDU
+@returns Size of encoded bit stream in bytes*/
+uint8_t
+do_RRCConnectionReject(
+ uint8_t Mod_id,
+ uint8_t* const buffer);
+
/**
\brief Generate an RRCConnectionRequest UL-CCCH-Message (UE) based on random string or S-TMSI. This
routine only generates an mo-data establishment cause.
diff --git a/openair2/RRC/LITE/defs.h b/openair2/RRC/LITE/defs.h
index bae3dc887a..78240de082 100644
--- a/openair2/RRC/LITE/defs.h
+++ b/openair2/RRC/LITE/defs.h
@@ -212,9 +212,9 @@ typedef struct UE_RRC_INFO_s {
} __attribute__ ((__packed__)) UE_RRC_INFO;
typedef struct UE_S_TMSI_s {
- uint8_t presence;
- uint8_t mme_code;
- uint32_t m_tmsi;
+ boolean_t presence;
+ mme_code_t mme_code;
+ m_tmsi_t m_tmsi;
} __attribute__ ((__packed__)) UE_S_TMSI;
#if defined(ENABLE_ITTI)
diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c
index f19c3bced4..1d0b5f2902 100644
--- a/openair2/RRC/LITE/rrc_eNB.c
+++ b/openair2/RRC/LITE/rrc_eNB.c
@@ -540,8 +540,8 @@ rrc_eNB_get_next_transaction_identifier(
//-----------------------------------------------------------------------------
-// return 1 if there is already an UE with ue_identityP, 0 otherwise
-static int
+// return the ue context if there is already an UE with ue_identityP, NULL otherwise
+static struct rrc_eNB_ue_context_s*
rrc_eNB_ue_context_random_exist(
const protocol_ctxt_t* const ctxt_pP,
const uint64_t ue_identityP
@@ -551,9 +551,28 @@ rrc_eNB_ue_context_random_exist(
struct rrc_eNB_ue_context_s* ue_context_p = NULL;
RB_FOREACH(ue_context_p, rrc_ue_tree_s, &(eNB_rrc_inst[ctxt_pP->module_id].rrc_ue_head)) {
if (ue_context_p->ue_context.random_ue_identity == ue_identityP)
- return 1;
+ return ue_context_p;
}
- return 0;
+ return NULL;
+}
+//-----------------------------------------------------------------------------
+// return the ue context if there is already an UE with the same S-TMSI(MMEC+M-TMSI), NULL otherwise
+static struct rrc_eNB_ue_context_s*
+rrc_eNB_ue_context_stmsi_exist(
+ const protocol_ctxt_t* const ctxt_pP,
+ const mme_code_t mme_codeP,
+ const m_tmsi_t m_tmsiP
+)
+//-----------------------------------------------------------------------------
+{
+ struct rrc_eNB_ue_context_s* ue_context_p = NULL;
+ RB_FOREACH(ue_context_p, rrc_ue_tree_s, &(eNB_rrc_inst[ctxt_pP->module_id].rrc_ue_head)) {
+ if (ue_context_p->ue_context.Initialue_identity_s_TMSI.presence == TRUE)
+ if (ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi == m_tmsiP)
+ if (ue_context_p->ue_context.Initialue_identity_s_TMSI.mme_code == mme_codeP)
+ return ue_context_p;
+ }
+ return NULL;
}
//-----------------------------------------------------------------------------
@@ -963,6 +982,49 @@ rrc_eNB_generate_UECapabilityEnquiry(
}
+//-----------------------------------------------------------------------------
+void
+rrc_eNB_generate_RRCConnectionReject(
+ const protocol_ctxt_t* const ctxt_pP,
+ rrc_eNB_ue_context_t* const ue_context_pP,
+ const int CC_id
+)
+//-----------------------------------------------------------------------------
+{
+#ifdef RRC_MSG_PRINT
+ int cnt;
+#endif
+
+ eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].Srb0.Tx_buffer.payload_size =
+ do_RRCConnectionReject(ctxt_pP->module_id,
+ (uint8_t*) eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].Srb0.Tx_buffer.Payload);
+
+#ifdef RRC_MSG_PRINT
+ LOG_F(RRC,"[MSG] RRCConnectionReject\n");
+
+ for (cnt = 0; cnt < eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].Srb0.Tx_buffer.payload_size; cnt++) {
+ LOG_F(RRC,"%02x ", ((uint8_t*)eNB_rrc_inst[ctxt_pP->module_id].Srb0.Tx_buffer.Payload)[cnt]);
+ }
+
+ LOG_F(RRC,"\n");
+#endif
+
+ MSC_LOG_TX_MESSAGE(
+ MSC_RRC_ENB,
+ MSC_RRC_UE,
+ eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].Srb0.Tx_buffer.Header,
+ eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].Srb0.Tx_buffer.payload_size,
+ MSC_AS_TIME_FMT" RRCConnectionReject UE %x size %u",
+ MSC_AS_TIME_ARGS(ctxt_pP),
+ ue_context_pP == NULL ? -1 : ue_context_pP->ue_context.rnti,
+ eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].Srb0.Tx_buffer.payload_size);
+
+ LOG_I(RRC,
+ PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCConnectionReject (bytes %d)\n",
+ PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
+ eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].Srb0.Tx_buffer.payload_size);
+}
+
//-----------------------------------------------------------------------------
void
rrc_eNB_generate_RRCConnectionReestablishmentReject(
@@ -3627,23 +3689,62 @@ rrc_eNB_decode_ccch(
} else {
rrcConnectionRequest = &ul_ccch_msg->message.choice.c1.choice.rrcConnectionRequest.criticalExtensions.choice.rrcConnectionRequest_r8;
{
- AssertFatal(rrcConnectionRequest->ue_Identity.present == InitialUE_Identity_PR_randomValue,
- "unsupported InitialUE-Identity in RRCConnectionRequest");
- AssertFatal(rrcConnectionRequest->ue_Identity.choice.randomValue.size == 5,
- "wrong InitialUE-Identity randomValue size, expected 5, provided %d",
- rrcConnectionRequest->ue_Identity.choice.randomValue.size);
- memcpy(((uint8_t*) & random_value) + 3,
- rrcConnectionRequest->ue_Identity.choice.randomValue.buf,
- rrcConnectionRequest->ue_Identity.choice.randomValue.size);
- /* if there is already a registered UE (with another RNTI) with this random_value,
- * the current one must be removed from MAC/PHY (zombie UE)
- */
- if (rrc_eNB_ue_context_random_exist(ctxt_pP, random_value)) {
- AssertFatal(0 == 1, "TODO: remove UE fro MAC/PHY (how?)");
- ue_context_p = NULL;
+ if (InitialUE_Identity_PR_randomValue == rrcConnectionRequest->ue_Identity.present) {
+ AssertFatal(rrcConnectionRequest->ue_Identity.choice.randomValue.size == 5,
+ "wrong InitialUE-Identity randomValue size, expected 5, provided %d",
+ rrcConnectionRequest->ue_Identity.choice.randomValue.size);
+ memcpy(((uint8_t*) & random_value) + 3,
+ rrcConnectionRequest->ue_Identity.choice.randomValue.buf,
+ rrcConnectionRequest->ue_Identity.choice.randomValue.size);
+ /* if there is already a registered UE (with another RNTI) with this random_value,
+ * the current one must be removed from MAC/PHY (zombie UE)
+ */
+ if ((ue_context_p = rrc_eNB_ue_context_random_exist(ctxt_pP, random_value))) {
+#warning "TODO: random_exist: remove UE from MAC/PHY (how?)"
+ // AssertFatal(0 == 1, "TODO: remove UE from MAC/PHY (how?)");
+ ue_context_p = NULL;
+ } else {
+ ue_context_p = rrc_eNB_get_next_free_ue_context(ctxt_pP, random_value);
+ }
+ } else if (InitialUE_Identity_PR_s_TMSI == rrcConnectionRequest->ue_Identity.present) {
+ /* Save s-TMSI */
+ S_TMSI_t s_TMSI = rrcConnectionRequest->ue_Identity.choice.s_TMSI;
+ mme_code_t mme_code = BIT_STRING_to_uint8(&s_TMSI.mmec);
+ m_tmsi_t m_tmsi = BIT_STRING_to_uint32(&s_TMSI.m_TMSI);
+ random_value = (((uint64_t)mme_code) << 32) | m_tmsi;
+ if ((ue_context_p = rrc_eNB_ue_context_stmsi_exist(ctxt_pP, mme_code, m_tmsi))) {
+#warning "TODO: stmsi_exist: remove UE from MAC/PHY (how?)"
+ // AssertFatal(0 == 1, "TODO: remove UE from MAC/PHY (how?)");
+ ue_context_p = NULL;
+ } else {
+ ue_context_p = rrc_eNB_get_next_free_ue_context(ctxt_pP, NOT_A_RANDOM_UE_IDENTITY);
+ }
+ ue_context_p->ue_context.Initialue_identity_s_TMSI.presence = TRUE;
+ ue_context_p->ue_context.Initialue_identity_s_TMSI.mme_code = mme_code;
+ ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi = m_tmsi;
+
+ MSC_LOG_RX_MESSAGE(
+ MSC_RRC_ENB,
+ MSC_RRC_UE,
+ Srb_info->Rx_buffer.Payload,
+ dec_rval.consumed,
+ MSC_AS_TIME_FMT" RRCConnectionRequest UE %x size %u (s-TMSI mmec %u m_TMSI %u random UE id (0x%" PRIx64 ")",
+ MSC_AS_TIME_ARGS(ctxt_pP),
+ ue_context_p->ue_context.rnti,
+ dec_rval.consumed,
+ ue_context_p->ue_context.Initialue_identity_s_TMSI.mme_code,
+ ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi,
+ ue_context_p->ue_context.random_ue_identity);
} else {
- ue_context_p = rrc_eNB_get_next_free_ue_context(ctxt_pP, random_value);
+ LOG_E(RRC,
+ PROTOCOL_RRC_CTXT_UE_FMT" RRCConnectionRequest without random UE identity or S-TMSI not supported, let's reject the UE\n",
+ PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP));
+ rrc_eNB_generate_RRCConnectionReject(ctxt_pP,
+ rrc_eNB_get_ue_context(&eNB_rrc_inst[ctxt_pP->module_id], ctxt_pP->rnti),
+ CC_id);
+ break;
}
+
}
LOG_D(RRC,
PROTOCOL_RRC_CTXT_UE_FMT" UE context: %X\n",
@@ -3654,47 +3755,7 @@ rrc_eNB_decode_ccch(
#if defined(ENABLE_ITTI)
- /* Check s-TMSI presence in message */
- ue_context_p->ue_context.Initialue_identity_s_TMSI.presence =
- (rrcConnectionRequest->ue_Identity.present == InitialUE_Identity_PR_s_TMSI);
-
- if (ue_context_p->ue_context.Initialue_identity_s_TMSI.presence) {
- /* Save s-TMSI */
- S_TMSI_t s_TMSI = rrcConnectionRequest->ue_Identity.choice.s_TMSI;
-
- ue_context_p->ue_context.Initialue_identity_s_TMSI.mme_code =
- BIT_STRING_to_uint8(&s_TMSI.mmec);
- ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi =
- BIT_STRING_to_uint32(&s_TMSI.m_TMSI);
-
- MSC_LOG_RX_DISCARDED_MESSAGE(
- MSC_RRC_ENB,
- MSC_RRC_UE,
- Srb_info->Rx_buffer.Payload,
- dec_rval.consumed,
- MSC_AS_TIME_FMT" RRCConnectionRequest UE %x size %u (s-TMSI mmec %u m_TMSI %u random UE id (0x%" PRIx64 ")",
- MSC_AS_TIME_ARGS(ctxt_pP),
- ue_context_p->ue_context.rnti,
- dec_rval.consumed,
- s_TMSI.mmec,
- s_TMSI.m_TMSI,
- ue_context_p->ue_context.random_ue_identity);
-
- } else {
- MSC_LOG_RX_DISCARDED_MESSAGE(
- MSC_RRC_ENB,
- MSC_RRC_UE,
- Srb_info->Rx_buffer.Payload,
- dec_rval.consumed,
- MSC_AS_TIME_FMT" RRCConnectionRequest UE %x size %u random UE id (0x%" PRIx64 ")",
- MSC_AS_TIME_ARGS(ctxt_pP),
- ue_context_p->ue_context.rnti,
- dec_rval.consumed,
- ue_context_p->ue_context.random_ue_identity);
- }
-
- ue_context_p->ue_context.establishment_cause =
- rrcConnectionRequest->establishmentCause;
+ ue_context_p->ue_context.establishment_cause = rrcConnectionRequest->establishmentCause;
LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Accept new connection from UE random UE identity (0x%" PRIx64 ") MME code %u TMSI %u cause %u\n",
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
ue_context_p->ue_context.random_ue_identity,
diff --git a/openair2/RRC/LITE/rrc_eNB_S1AP.c b/openair2/RRC/LITE/rrc_eNB_S1AP.c
index 5c41658862..d93b8eea2f 100644
--- a/openair2/RRC/LITE/rrc_eNB_S1AP.c
+++ b/openair2/RRC/LITE/rrc_eNB_S1AP.c
@@ -43,6 +43,7 @@
# include "RRC/LITE/defs.h"
# include "rrc_eNB_UE_context.h"
# include "rrc_eNB_S1AP.h"
+# include "enb_config.h"
# if defined(ENABLE_ITTI)
# include "asn1_conversions.h"
@@ -661,15 +662,16 @@ rrc_eNB_send_S1AP_NAS_FIRST_REQ(
S1AP_NAS_FIRST_REQ (message_p).ue_identity.s_tmsi.mme_code = s_TMSI->mme_code;
S1AP_NAS_FIRST_REQ (message_p).ue_identity.s_tmsi.m_tmsi = s_TMSI->m_tmsi;
LOG_I(S1AP, "[eNB %d] Build S1AP_NAS_FIRST_REQ with s_TMSI: MME code %u M-TMSI %u ue %x\n",
- ctxt_pP->module_id,
- S1AP_NAS_FIRST_REQ (message_p).ue_identity.s_tmsi.mme_code,
- S1AP_NAS_FIRST_REQ (message_p).ue_identity.s_tmsi.m_tmsi,
- ue_context_pP->ue_context.rnti);
+ ctxt_pP->module_id,
+ S1AP_NAS_FIRST_REQ (message_p).ue_identity.s_tmsi.mme_code,
+ S1AP_NAS_FIRST_REQ (message_p).ue_identity.s_tmsi.m_tmsi,
+ ue_context_pP->ue_context.rnti);
}
if (rrcConnectionSetupComplete->registeredMME != NULL) {
/* Fill GUMMEI */
struct RegisteredMME *r_mme = rrcConnectionSetupComplete->registeredMME;
+ int selected_plmn_identity = rrcConnectionSetupComplete->selectedPLMN_Identity;
S1AP_NAS_FIRST_REQ (message_p).ue_identity.presenceMask |= UE_IDENTITIES_gummei;
@@ -678,9 +680,9 @@ rrc_eNB_send_S1AP_NAS_FIRST_REQ(
/* Use first indicated PLMN MCC if it is defined */
S1AP_NAS_FIRST_REQ (message_p).ue_identity.gummei.mcc = *r_mme->plmn_Identity->mcc->list.array[0];
LOG_I(S1AP, "[eNB %d] Build S1AP_NAS_FIRST_REQ adding in s_TMSI: GUMMEI MCC %u ue %x\n",
- ctxt_pP->module_id,
- S1AP_NAS_FIRST_REQ (message_p).ue_identity.gummei.mcc,
- ue_context_pP->ue_context.rnti);
+ ctxt_pP->module_id,
+ S1AP_NAS_FIRST_REQ (message_p).ue_identity.gummei.mcc,
+ ue_context_pP->ue_context.rnti);
}
if (r_mme->plmn_Identity->mnc.list.count > 0) {
@@ -691,6 +693,14 @@ rrc_eNB_send_S1AP_NAS_FIRST_REQ(
S1AP_NAS_FIRST_REQ (message_p).ue_identity.gummei.mnc,
ue_context_pP->ue_context.rnti);
}
+ } else {
+ const Enb_properties_array_t *enb_properties_p = NULL;
+ enb_properties_p = enb_config_get();
+
+ // actually the eNB configuration contains only one PLMN (can be up to 6)
+ S1AP_NAS_FIRST_REQ (message_p).ue_identity.gummei.mcc = enb_properties_p->properties[ctxt_pP->module_id]->mcc;
+ S1AP_NAS_FIRST_REQ (message_p).ue_identity.gummei.mnc = enb_properties_p->properties[ctxt_pP->module_id]->mnc;
+ S1AP_NAS_FIRST_REQ (message_p).ue_identity.gummei.mnc_len = enb_properties_p->properties[ctxt_pP->module_id]->mnc_digit_length;
}
S1AP_NAS_FIRST_REQ (message_p).ue_identity.gummei.mme_code = BIT_STRING_to_uint8 (&r_mme->mmec);
@@ -1178,7 +1188,7 @@ int rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_COMMAND (MessageDef *msg_p, const ch
GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p).rnti = ue_context_p->ue_context.rnti;
for (e_rab = 0; e_rab < ue_context_p->ue_context.nb_of_e_rabs; e_rab++) {
- GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p).eps_bearer_id[GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_p).num_erab++] =
+ GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p).eps_bearer_id[GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p).num_erab++] =
ue_context_p->ue_context.enb_gtp_ebi[e_rab];
// erase data
ue_context_p->ue_context.enb_gtp_teid[e_rab] = 0;
diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.c b/openair2/UTIL/LOG/vcd_signal_dumper.c
index 8dfbfd6ef5..31ce2e0d71 100644
--- a/openair2/UTIL/LOG/vcd_signal_dumper.c
+++ b/openair2/UTIL/LOG/vcd_signal_dumper.c
@@ -106,6 +106,9 @@ const char* eurecomVariablesNames[] = {
"lhw_cnt_tx",
"pck_rx",
"pck_tx",
+ "rx_seq_num",
+ "rx_seq_num_prv",
+ "tx_seq_num",
"cnt",
"dummy_dump",
"itti_send_msg",
diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.h b/openair2/UTIL/LOG/vcd_signal_dumper.h
index 68257484f0..9ca55846fd 100644
--- a/openair2/UTIL/LOG/vcd_signal_dumper.h
+++ b/openair2/UTIL/LOG/vcd_signal_dumper.h
@@ -78,6 +78,9 @@ typedef enum {
VCD_SIGNAL_DUMPER_VARIABLES_TX_LHWCNT,
VCD_SIGNAL_DUMPER_VARIABLES_RX_PCK,
VCD_SIGNAL_DUMPER_VARIABLES_TX_PCK,
+ VCD_SIGNAL_DUMPER_VARIABLES_RX_SEQ_NUM,
+ VCD_SIGNAL_DUMPER_VARIABLES_RX_SEQ_NUM_PRV,
+ VCD_SIGNAL_DUMPER_VARIABLES_TX_SEQ_NUM,
VCD_SIGNAL_DUMPER_VARIABLES_CNT,
VCD_SIGNAL_DUMPER_VARIABLES_DUMMY_DUMP,
VCD_SIGNAL_DUMPER_VARIABLE_ITTI_SEND_MSG,
diff --git a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
index d515a206ae..065b0bbad2 100644
--- a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
+++ b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
@@ -38,57 +38,96 @@
#include
#include "bladerf_lib.h"
+/** @addtogroup _BLADERF_PHY_RF_INTERFACE_
+ * @{
+ */
+
+//! Number of BladeRF devices
+#ifdef __SSE4_1__
+# include
+#endif
+
+#ifdef __AVX2__
+# include
+#endif
+
int num_devices=0;
+
/*These items configure the underlying asynch stream used by the the sync interface.
*/
-int trx_brf_init(openair0_device *openair0) {
+/*! \brief BladeRF Init function (not used at the moment)
+ * \param device RF frontend parameters set by application
+ */
+int trx_brf_init(openair0_device *device) {
}
+/*! \brief get current timestamp
+ *\param device the hardware to use
+ *\param module the bladeRf module
+ */
-openair0_timestamp trx_get_timestamp(openair0_device *device) {
+openair0_timestamp trx_get_timestamp(openair0_device *device, bladerf_module module) {
int status;
struct bladerf_metadata meta;
brf_state_t *brf = (brf_state_t*)device->priv;
+ memset(&meta, 0, sizeof(meta));
- if ((status=bladerf_get_timestamp(brf->dev, BLADERF_MODULE_TX, &meta.timestamp)) != 0) {
- fprintf(stderr,"Failed to get current RX timestamp: %s\n",bladerf_strerror(status));
- } else {
- printf("Current TX timestampe 0x%016"PRIx64"\n", meta.timestamp);
- }
+ if ((status=bladerf_get_timestamp(brf->dev, module, &meta.timestamp)) != 0) {
+ fprintf(stderr,"Failed to get current %s timestamp: %s\n",(module == BLADERF_MODULE_RX ) ? "RX" : "TX", bladerf_strerror(status));
+ return -1;
+ } // else {printf("Current RX timestampe 0x%016"PRIx64"\n", meta.timestamp); }
+
return meta.timestamp;
}
-
-int trx_brf_start(openair0_device *openair0) {
+/*! \brief Start BladeRF
+ *\param device the hardware to use
+ */
+int trx_brf_start(openair0_device *device) {
return 0;
}
+/*! \brief Get BladeRF stats
+ *\param device the hardware to use
+ */
static void trx_brf_stats(openair0_device *device){
}
-static int trx_brf_write(openair0_device *device,openair0_timestamp ptimestamp, void **buff, int nsamps, int cc) {
+/*! \brief Called to send samples to the BladeRF RF target
+ @param device pointer to the device structure specific to the RF hardware target
+ @param timestamp The timestamp at whicch the first sample MUST be sent
+ @param buff Buffer which holds the samples
+ @param nsamps number of samples to be sent
+ @param cc index of the component carrier
+ @param flags Ignored for the moment
+*/
+static int trx_brf_write(openair0_device *device,openair0_timestamp ptimestamp, void **buff, int nsamps, int cc, int flags) {
- int status, i;
+ int status;
brf_state_t *brf = (brf_state_t*)device->priv;
/* BRF has only 1 rx/tx chaine : is it correct? */
- void *samples = (void*)buff[0];
+ int16_t *samples = (int16_t*)buff[0];
- //brf->meta_tx.flags &= ~BLADERF_META_FLAG_TX_NOW;
- brf->meta_tx.flags = BLADERF_META_FLAG_TX_BURST_START |
- BLADERF_META_FLAG_TX_NOW |
- BLADERF_META_FLAG_TX_BURST_END;
-
- brf->meta_tx.timestamp= (uint64_t) ptimestamp;
-
+ //memset(&brf->meta_tx, 0, sizeof(brf->meta_tx));
+ // When BLADERF_META_FLAG_TX_NOW is used the timestamp is not used, so one can't schedule a tx
+ if (brf->meta_tx.flags == 0 )
+ brf->meta_tx.flags = (BLADERF_META_FLAG_TX_BURST_START);// | BLADERF_META_FLAG_TX_BURST_END);// | BLADERF_META_FLAG_TX_NOW);
+
+
+ brf->meta_tx.timestamp= (uint64_t) (ptimestamp);
status = bladerf_sync_tx(brf->dev, samples, (unsigned int) nsamps, &brf->meta_tx, 2*brf->tx_timeout_ms);
+
+ if (brf->meta_tx.flags == BLADERF_META_FLAG_TX_BURST_START)
+ brf->meta_tx.flags = BLADERF_META_FLAG_TX_UPDATE_TIMESTAMP;
+
if (status != 0) {
- fprintf(stderr,"Failed to TX sample: %s\n", bladerf_strerror(status));
+ //fprintf(stderr,"Failed to TX sample: %s\n", bladerf_strerror(status));
brf->num_tx_errors++;
brf_error(status);
} else if (brf->meta_tx.status & BLADERF_META_STATUS_UNDERRUN){
@@ -96,6 +135,8 @@ static int trx_brf_write(openair0_device *device,openair0_timestamp ptimestamp,
fprintf(stderr, "TX Underrun detected. %u valid samples were read.\n", brf->meta_tx.actual_count);
brf->num_underflows++;
}
+ //printf("Provided TX timestampe %u, meta timestame %u\n", ptimestamp,brf->meta_tx.timestamp);
+
// printf("tx status %d \n",brf->meta_tx.status);
brf->tx_current_ts=brf->meta_tx.timestamp;
brf->tx_actual_nsamps+=brf->meta_tx.actual_count;
@@ -106,27 +147,39 @@ static int trx_brf_write(openair0_device *device,openair0_timestamp ptimestamp,
return(0);
}
+/*! \brief Receive samples from hardware.
+ * Read \ref nsamps samples from each channel to buffers. buff[0] is the array for
+ * the first channel. *ptimestamp is the time at which the first sample
+ * was received.
+ * \param device the hardware to use
+ * \param[out] ptimestamp the time at which the first sample was received.
+ * \param[out] buff An array of pointers to buffers for received samples. The buffers must be large enough to hold the number of samples \ref nsamps.
+ * \param nsamps Number of samples. One sample is 2 byte I + 2 byte Q => 4 byte.
+ * \param cc Index of component carrier
+*/
static int trx_brf_read(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps, int cc) {
- int status, ret;
-
- unsigned int i;
+
+ int status=0;
brf_state_t *brf = (brf_state_t*)device->priv;
// BRF has only one rx/tx chain
- void *samples = (void*)buff[0];
-
- brf->meta_rx.flags |= BLADERF_META_FLAG_RX_NOW;
+ int16_t *samples = (int16_t*)buff[0];
+
+ brf->meta_rx.flags = BLADERF_META_FLAG_RX_NOW;
status = bladerf_sync_rx(brf->dev, samples, (unsigned int) nsamps, &brf->meta_rx, 2*brf->rx_timeout_ms);
+ // printf("Current RX timestampe %u, nsamps %u, actual %u, cc %d\n", brf->meta_rx.timestamp, nsamps, brf->meta_rx.actual_count, cc);
+
if (status != 0) {
fprintf(stderr, "RX failed: %s\n", bladerf_strerror(status));
+ // printf("RX failed: %s\n", bladerf_strerror(status));
brf->num_rx_errors++;
} else if ( brf->meta_rx.status & BLADERF_META_STATUS_OVERRUN) {
brf->num_overflows++;
- fprintf(stderr, "RX overrun (%d) is detected. t=0x%"PRIu64". Got %u samples. nsymps %d\n",
- brf->num_overflows,brf->meta_rx.timestamp, brf->meta_rx.actual_count, nsamps);
- //brf->meta_rx.timestamp=(unsigned int)(nsamps-brf->meta_rx.actual_count);
- }
+ printf("RX overrun (%d) is detected. t=%u. Got %u samples. nsymps %d\n",
+ brf->num_overflows,brf->meta_rx.timestamp, brf->meta_rx.actual_count, nsamps);
+ }
+ //printf("Current RX timestampe %u\n", brf->meta_rx.timestamp);
//printf("[BRF] (buff %p) ts=0x%"PRIu64" %s\n",samples, brf->meta_rx.timestamp,bladerf_strerror(status));
brf->rx_current_ts=brf->meta_rx.timestamp;
brf->rx_actual_nsamps+=brf->meta_rx.actual_count;
@@ -135,11 +188,14 @@ static int trx_brf_read(openair0_device *device, openair0_timestamp *ptimestamp,
*ptimestamp = brf->meta_rx.timestamp;
-
+
return brf->meta_rx.actual_count;
}
+/*! \brief Terminate operation of the BladeRF transceiver -- free all associated resources
+ * \param device the hardware to use
+ */
int trx_brf_end(openair0_device *device) {
int status;
@@ -155,55 +211,739 @@ int trx_brf_end(openair0_device *device) {
return 0;
}
-
+/*! \brief print the BladeRF statistics
+* \param device the hardware to use
+* \returns 0 on success
+*/
int trx_brf_get_stats(openair0_device* device) {
return(0);
}
+/*! \brief Reset the BladeRF statistics
+* \param device the hardware to use
+* \returns 0 on success
+*/
int trx_brf_reset_stats(openair0_device* device) {
return(0);
}
+/*! \brief Stop USRP
+ * \param device the hardware to use
+ */
int trx_brf_stop(openair0_device* device) {
return(0);
}
+/*! \brief Set frequencies (TX/RX)
+ * \param device the hardware to use
+ * \returns 0 in success
+ */
int trx_brf_set_freq(openair0_device* device) {
+ int status;
+ brf_state_t *brf = (brf_state_t *)device->priv;
+ openair0_config_t *openair0_cfg = (openair0_config_t *)device->openair0_cfg;
+
+
+ if ((status=bladerf_set_frequency(brf->dev, BLADERF_MODULE_TX, (unsigned int) openair0_cfg->tx_freq[0])) != 0){
+ fprintf(stderr,"Failed to set TX frequency: %s\n",bladerf_strerror(status));
+ brf_error(status);
+ }else
+ printf("[BRF] set TX Frequency to %u\n", (unsigned int) openair0_cfg->tx_freq[0]);
+
+ if ((status=bladerf_set_frequency(brf->dev, BLADERF_MODULE_RX, (unsigned int) openair0_cfg->rx_freq[0])) != 0){
+ fprintf(stderr,"Failed to set RX frequency: %s\n",bladerf_strerror(status));
+ brf_error(status);
+ } else
+ printf("[BRF] set RX frequency to %u\n",(unsigned int)openair0_cfg->rx_freq[0]);
+
return(0);
}
+
+/*! \brief Set Gains (TX/RX)
+ * \param device the hardware to use
+ * \returns 0 in success
+ */
int trx_brf_set_gains(openair0_device* device) {
return(0);
}
-int openair0_dev_init_bladerf(openair0_device *device, openair0_config_t *openair0_cfg) {
+
+#define RXDCLENGTH 16384
+int16_t cos_fsover8[8] = {2047, 1447, 0, -1448, -2047, -1448, 0, 1447};
+int16_t cos_3fsover8[8] = {2047, -1448, 0, 1447, -2047, 1447, 0, -1448};
+
+rx_gain_calib_table_t calib_table_fx4[] = {
+ {2300000000.0,53.5},
+ {1880000000.0,57.0},
+ {816000000.0,73.0},
+ {-1,0}};
+
+void set_rx_gain_offset(openair0_config_t *openair0_cfg, int chain_index) {
+
+ int i=0;
+ // loop through calibration table to find best adjustment factor for RX frequency
+ double min_diff = 6e9,diff;
+
+ while (openair0_cfg->rx_gain_calib_table[i].freq>0) {
+ diff = fabs(openair0_cfg->rx_freq[chain_index] - openair0_cfg->rx_gain_calib_table[i].freq);
+ printf("cal %d: freq %f, offset %f, diff %f\n",
+ i,
+ openair0_cfg->rx_gain_calib_table[i].freq,
+ openair0_cfg->rx_gain_calib_table[i].offset,diff);
+ if (min_diff > diff) {
+ min_diff = diff;
+ openair0_cfg->rx_gain_offset[chain_index] = openair0_cfg->rx_gain_calib_table[i].offset;
+ }
+ i++;
+ }
+
+}
+
+void calibrate_rf(openair0_device *device) {
+
+
+ brf_state_t *brf = (brf_state_t *)device->priv;
+ openair0_timestamp ptimestamp;
+ int16_t *calib_buffp,*calib_tx_buffp;
+ int16_t calib_buff[2*RXDCLENGTH];
+ int16_t calib_tx_buff[2*RXDCLENGTH];
+ int i,j,offI,offQ,offIold,offQold,offInew,offQnew,offphase,offphaseold,offphasenew,offgain,offgainold,offgainnew;
+ int32_t meanI,meanQ,meanIold,meanQold;
+ int cnt=0,loop;
+
+ // put TX on a far-away frequency to avoid interference in RX band
+ bladerf_set_frequency(brf->dev,BLADERF_MODULE_TX, (unsigned int) device->openair0_cfg->rx_freq[0] + 200e6);
+ // Set gains to close to max
+ bladerf_set_gain(brf->dev, BLADERF_MODULE_RX, 60);
+ bladerf_set_gain(brf->dev, BLADERF_MODULE_TX, 60);
+
+ // fill TX buffer with fs/8 complex sinusoid
+ j=0;
+ for (i=0;idev,BLADERF_MODULE_RX,BLADERF_CORR_LMS_DCOFF_I,offIold);
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_LMS_DCOFF_Q,offQold);
+ for (i=0;i<10;i++)
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+
+ for (meanIold=meanQold=i=j=0;i (%d,%d)\n",offIold,offQold,meanIold,meanQold);
+
+ offI=offQ=-2048;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_LMS_DCOFF_I,offI);
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_LMS_DCOFF_Q,offQ);
+ for (i=0;i<10;i++)
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+
+ for (meanI=meanQ=i=j=0;i (%d,%d)\n",offI,offQ,meanI,meanQ);
+
+ while (cnt++ < 12) {
+
+ offInew=(offIold+offI)>>1;
+ offQnew=(offQold+offQ)>>1;
+
+ if (meanI*meanI < meanIold*meanIold) {
+ meanIold = meanI;
+ offIold = offI;
+ printf("[BRF] *** RX DC: offI %d => %d\n",offIold,meanI);
+ }
+ if (meanQ*meanQ < meanQold*meanQold) {
+ meanQold = meanQ;
+ offQold = offQ;
+ printf("[BRF] *** RX DC: offQ %d => %d\n",offQold,meanQ);
+ }
+ offI = offInew;
+ offQ = offQnew;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_LMS_DCOFF_I,offI);
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_LMS_DCOFF_Q,offQ);
+
+ for (i=0;i<10;i++)
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+
+ for (meanI=meanQ=i=j=0;i (%d,%d)\n",offI,offQ,meanI,meanQ);
+ }
+
+ printf("[BRF] RX DC: (%d,%d) => (%d,%d)\n",offIold,offQold,meanIold,meanQold);
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_LMS_DCOFF_I,offIold);
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_LMS_DCOFF_Q,offQold);
+
+ // TX DC offset
+ // PUT TX as f_RX + fs/4
+ // loop back BLADERF_LB_RF_LNA1
+ bladerf_set_frequency(brf->dev,BLADERF_MODULE_TX, (unsigned int) device->openair0_cfg->rx_freq[0] + (unsigned int) device->openair0_cfg->sample_rate/4);
+ bladerf_set_loopback (brf->dev,BLADERF_LB_RF_LNA1);
+
+ offIold=2048;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_I,offIold);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
+ }
+ for (meanIold=meanQold=i=j=0;i (%d,%d)\n",offIold,meanIold,meanQold);
+
+ offI=-2048;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_I,offI);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
+ }
+ for (meanI=meanQ=i=j=0;i (%d,%d)\n",offI,meanI,meanQ);
+ cnt = 0;
+ while (cnt++ < 12) {
+
+ offInew=(offIold+offI)>>1;
+ if (meanI*meanI+meanQ*meanQ < meanIold*meanIold +meanQold*meanQold) {
+ printf("[BRF] TX DC (offI): ([%d,%d]) => %d : %d\n",offIold,offI,offInew,meanI*meanI+meanQ*meanQ);
+ meanIold = meanI;
+ meanQold = meanQ;
+ offIold = offI;
+ }
+ offI = offInew;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_I,offI);
+
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
+ }
+ for (meanI=meanQ=i=j=0;i (%d,%d)\n",offI,meanI,meanQ);
+ }
+
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_I,offIold);
+
+ offQold=2048;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_Q,offQold);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
+ }
+ // project on fs/4
+ for (meanIold=meanQold=i=j=0;i (%d,%d)\n",offQold,meanIold,meanQold);
+
+ offQ=-2048;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_Q,offQ);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
+ }
+ for (meanI=meanQ=i=j=0;i (%d,%d)\n",offQ,meanI,meanQ);
+
+ cnt=0;
+ while (cnt++ < 12) {
+
+ offQnew=(offQold+offQ)>>1;
+ if (meanI*meanI+meanQ*meanQ < meanIold*meanIold +meanQold*meanQold) {
+ printf("[BRF] TX DC (offQ): ([%d,%d]) => %d : %d\n",offQold,offQ,offQnew,meanI*meanI+meanQ*meanQ);
+
+ meanIold = meanI;
+ meanQold = meanQ;
+ offQold = offQ;
+ }
+ offQ = offQnew;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_Q,offQ);
+
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
+ }
+ for (meanI=meanQ=i=j=0;i (%d,%d)\n",offQ,meanI,meanQ);
+ }
+
+ printf("[BRF] TX DC: (%d,%d) => (%d,%d)\n",offIold,offQold,meanIold,meanQold);
+
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_Q,offQold);
+
+ // TX IQ imbalance
+ for (loop=0;loop<2;loop++) {
+ offphaseold=4096;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_PHASE,offphaseold);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
+ }
+ // project on fs/8 (Image of TX signal in +ve frequencies)
+ for (meanIold=meanQold=i=j=0;i>11;
+ meanQold+= (calib_buff[j]*cos_fsover8[(i+2)&7] + calib_buff[j+1]*cos_fsover8[i&7])>>11;
+ j+=2;
+ }
+
+ meanIold/=RXDCLENGTH;
+ meanQold/=RXDCLENGTH;
+ printf("[BRF] TX IQ (offphase): %d => (%d,%d)\n",offphaseold,meanIold,meanQold);
+
+ offphase=-4096;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_PHASE,offphase);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
+ }
+ // project on fs/8 (Image of TX signal in +ve frequencies)
+ for (meanI=meanQ=i=j=0;i>11;
+ meanQ+= (calib_buff[j]*cos_fsover8[(i+2)&7] + calib_buff[j+1]*cos_fsover8[i&7])>>11;
+ j+=2;
+ }
+
+ meanI/=RXDCLENGTH;
+ meanQ/=RXDCLENGTH;
+ printf("[BRF] TX IQ (offphase): %d => (%d,%d)\n",offphase,meanI,meanQ);
+
+ cnt=0;
+ while (cnt++ < 13) {
+
+ offphasenew=(offphaseold+offphase)>>1;
+ printf("[BRF] TX IQ (offphase): ([%d,%d]) => %d : %d\n",offphaseold,offphase,offphasenew,meanI*meanI+meanQ*meanQ);
+ if (meanI*meanI+meanQ*meanQ < meanIold*meanIold +meanQold*meanQold) {
+
+
+ meanIold = meanI;
+ meanQold = meanQ;
+ offphaseold = offphase;
+ }
+ offphase = offphasenew;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_PHASE,offphase);
+
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
+ }
+ // project on fs/8 (Image of TX signal in +ve frequencies)
+ for (meanI=meanQ=i=j=0;i>11;
+ meanQ+= (calib_buff[j]*cos_fsover8[(i+2)&7] + calib_buff[j+1]*cos_fsover8[i&7])>>11;
+ j+=2;
+ }
+ meanI/=RXDCLENGTH;
+ meanQ/=RXDCLENGTH;
+
+ // printf("[BRF] TX DC (offQ): %d => (%d,%d)\n",offQ,meanI,meanQ);
+ }
+
+ printf("[BRF] TX IQ offphase: %d => (%d,%d)\n",offphaseold,meanIold,meanQold);
+
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_PHASE,offphaseold);
+
+ offgainold=4096;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_GAIN,offgainold);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
+ }
+ // project on fs/8 (Image of TX signal in +ve frequencies)
+ for (meanIold=meanQold=i=j=0;i>11;
+ meanQold+= (calib_buff[j]*cos_fsover8[(i+2)&7] + calib_buff[j+1]*cos_fsover8[i&7])>>11;
+ j+=2;
+ }
+
+ meanIold/=RXDCLENGTH;
+ meanQold/=RXDCLENGTH;
+ printf("[BRF] TX IQ (offgain): %d => (%d,%d)\n",offgainold,meanIold,meanQold);
+
+ offgain=-4096;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_GAIN,offgain);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
+ }
+ // project on fs/8 (Image of TX signal in +ve frequencies)
+ for (meanI=meanQ=i=j=0;i>11;
+ meanQ+= (calib_buff[j]*cos_fsover8[(i+2)&7] + calib_buff[j+1]*cos_fsover8[i&7])>>11;
+ j+=2;
+ }
+
+ meanI/=RXDCLENGTH;
+ meanQ/=RXDCLENGTH;
+ printf("[BRF] TX IQ (offgain): %d => (%d,%d)\n",offgain,meanI,meanQ);
+
+ cnt=0;
+ while (cnt++ < 13) {
+
+ offgainnew=(offgainold+offgain)>>1;
+ if (meanI*meanI+meanQ*meanQ < meanIold*meanIold +meanQold*meanQold) {
+ printf("[BRF] TX IQ (offgain): ([%d,%d]) => %d : %d\n",offgainold,offgain,offgainnew,meanI*meanI+meanQ*meanQ);
+
+ meanIold = meanI;
+ meanQold = meanQ;
+ offgainold = offgain;
+ }
+ offgain = offgainnew;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_GAIN,offgain);
+
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
+ }
+ // project on fs/8 (Image of TX signal in +ve frequencies)
+ for (meanI=meanQ=i=j=0;i>11;
+ meanQ+= (calib_buff[j]*cos_fsover8[(i+2)&7] + calib_buff[j+1]*cos_fsover8[i&7])>>11;
+ j+=2;
+ }
+ meanI/=RXDCLENGTH;
+ meanQ/=RXDCLENGTH;
+
+ // printf("[BRF] TX DC (offQ): %d => (%d,%d)\n",offQ,meanI,meanQ);
+ }
+
+ printf("[BRF] TX IQ offgain: %d => (%d,%d)\n",offgainold,meanIold,meanQold);
+
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_GAIN,offgainold);
+ }
+
+ // RX IQ imbalance
+ for (loop=0;loop<2;loop++) {
+ offphaseold=4096;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_PHASE,offphaseold);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
+ }
+ // project on -3fs/8 (Image of TX signal in -ve frequencies)
+ for (meanIold=meanQold=i=j=0;i>11;
+ meanQold+= (calib_buff[j]*cos_3fsover8[(i+2)&7] + calib_buff[j+1]*cos_3fsover8[i&7])>>11;
+ j+=2;
+ }
+
+ meanIold/=RXDCLENGTH;
+ meanQold/=RXDCLENGTH;
+ printf("[BRF] RX IQ (offphase): %d => (%d,%d)\n",offphaseold,meanIold,meanQold);
+
+ offphase=-4096;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_PHASE,offphase);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
+ }
+ // project on -3fs/8 (Image of TX signal in -ve frequencies)
+ for (meanI=meanQ=i=j=0;i>11;
+ meanQ+= (calib_buff[j]*cos_3fsover8[(i+2)&7] + calib_buff[j+1]*cos_3fsover8[i&7])>>11;
+ j+=2;
+ }
+
+ meanI/=RXDCLENGTH;
+ meanQ/=RXDCLENGTH;
+ printf("[BRF] RX IQ (offphase): %d => (%d,%d)\n",offphase,meanI,meanQ);
+
+ cnt=0;
+ while (cnt++ < 13) {
+
+ offphasenew=(offphaseold+offphase)>>1;
+ printf("[BRF] RX IQ (offphase): ([%d,%d]) => %d : %d\n",offphaseold,offphase,offphasenew,meanI*meanI+meanQ*meanQ);
+ if (meanI*meanI+meanQ*meanQ < meanIold*meanIold +meanQold*meanQold) {
+
+
+ meanIold = meanI;
+ meanQold = meanQ;
+ offphaseold = offphase;
+ }
+ offphase = offphasenew;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_PHASE,offphase);
+
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
+ }
+ // project on -3fs/8 (Image of TX signal in -ve frequencies)
+ for (meanI=meanQ=i=j=0;i>11;
+ meanQ+= (calib_buff[j]*cos_3fsover8[(i+2)&7] + calib_buff[j+1]*cos_3fsover8[i&7])>>11;
+ j+=2;
+ }
+ meanI/=RXDCLENGTH;
+ meanQ/=RXDCLENGTH;
+
+ // printf("[BRF] TX DC (offQ): %d => (%d,%d)\n",offQ,meanI,meanQ);
+ }
+
+ printf("[BRF] RX IQ offphase: %d => (%d,%d)\n",offphaseold,meanIold,meanQold);
+
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_PHASE,offphaseold);
+
+ offgainold=4096;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_GAIN,offgainold);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0,0);
+ }
+ // project on -3fs/8 (Image of TX signal in +ve frequencies)
+ for (meanIold=meanQold=i=j=0;i>11;
+ meanQold+= (calib_buff[j]*cos_3fsover8[(i+2)&7] + calib_buff[j+1]*cos_3fsover8[i&7])>>11;
+ j+=2;
+ }
+
+ meanIold/=RXDCLENGTH;
+ meanQold/=RXDCLENGTH;
+ printf("[BRF] RX IQ (offgain): %d => (%d,%d)\n",offgainold,meanIold,meanQold);
+
+ offgain=-4096;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_GAIN,offgain);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
+ }
+ // project on 3fs/8 (Image of TX signal in -ve frequencies)
+ for (meanI=meanQ=i=j=0;i>11;
+ meanQ+= (calib_buff[j]*cos_3fsover8[(i+2)&7] + calib_buff[j+1]*cos_3fsover8[i&7])>>11;
+ j+=2;
+ }
+
+ meanI/=RXDCLENGTH;
+ meanQ/=RXDCLENGTH;
+ printf("[BRF] RX IQ (offgain): %d => (%d,%d)\n",offgain,meanI,meanQ);
+
+ cnt=0;
+ while (cnt++ < 13) {
+
+ offgainnew=(offgainold+offgain)>>1;
+ if (meanI*meanI+meanQ*meanQ < meanIold*meanIold +meanQold*meanQold) {
+ printf("[BRF] RX IQ (offgain): ([%d,%d]) => %d : %d\n",offgainold,offgain,offgainnew,meanI*meanI+meanQ*meanQ);
+
+ meanIold = meanI;
+ meanQold = meanQ;
+ offgainold = offgain;
+ }
+ offgain = offgainnew;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_GAIN,offgain);
+
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
+ }
+ // project on -3fs/8 (Image of TX signal in -ve frequencies)
+ for (meanI=meanQ=i=j=0;i>11;
+ meanQ+= (calib_buff[j]*cos_3fsover8[(i+2)&7] + calib_buff[j+1]*cos_3fsover8[i&7])>>11;
+ j+=2;
+ }
+ meanI/=RXDCLENGTH;
+ meanQ/=RXDCLENGTH;
+
+ // printf("[BRF] TX DC (offQ): %d => (%d,%d)\n",offQ,meanI,meanQ);
+ }
+
+ printf("[BRF] RX IQ offgain: %d => (%d,%d)\n",offgainold,meanIold,meanQold);
+
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_GAIN,offgainold);
+ }
+
+ bladerf_set_frequency(brf->dev,BLADERF_MODULE_TX, (unsigned int) device->openair0_cfg->tx_freq[0]);
+ bladerf_set_loopback(brf->dev,BLADERF_LB_NONE);
+ bladerf_set_gain(brf->dev, BLADERF_MODULE_RX, (unsigned int) device->openair0_cfg->rx_gain[0]-device->openair0_cfg[0].rx_gain_offset[0]);
+ bladerf_set_gain(brf->dev, BLADERF_MODULE_TX, (unsigned int) device->openair0_cfg->tx_gain[0]);
+ // write_output("blade_rf_test.m","rxs",calib_buff,RXDCLENGTH,1,1);
+}
+
+/*! \brief Initialize Openair BLADERF target. It returns 0 if OK
+ * \param device the hardware to use
+ * \param openair0_cfg RF frontend parameters set by application
+ */
+int device_init(openair0_device *device, openair0_config_t *openair0_cfg) {
int status;
int card=0;
brf_state_t *brf = (brf_state_t*)malloc(sizeof(brf_state_t));
memset(brf, 0, sizeof(brf_state_t));
- // init required params for BRF
- brf->num_buffers = 128;
- brf->buffer_size = (unsigned int) openair0_cfg[card].samples_per_packet*sizeof(int32_t); // buffer size = 4096 for sample_len of 1024
- brf->num_transfers = 16;
- brf->rx_timeout_ms = 0;
- brf->tx_timeout_ms = 0;
- brf->sample_rate=(unsigned int)openair0_cfg[card].sample_rate;
+ /* device specific */
+ openair0_cfg->txlaunch_wait = 1;//manage when TX processing is triggered
+ openair0_cfg->txlaunch_wait_slotcount = 1; //manage when TX processing is triggered
+ openair0_cfg->iq_txshift = 0;// shift
+ openair0_cfg->iq_rxrescale = 15;//rescale iqs
+
+ // init required params
+ switch ((int)openair0_cfg->sample_rate) {
+ case 30720000:
+ openair0_cfg->samples_per_packet = 2048;
+ openair0_cfg->tx_sample_advance = 0;
+ openair0_cfg->tx_scheduling_advance = 8*openair0_cfg->samples_per_packet;
+ break;
+ case 15360000:
+ openair0_cfg->samples_per_packet = 2048;
+ openair0_cfg->tx_sample_advance = 0;
+ openair0_cfg->tx_scheduling_advance = 4*openair0_cfg->samples_per_packet;
+ break;
+ case 7680000:
+ openair0_cfg->samples_per_packet = 1024;
+ openair0_cfg->tx_sample_advance = 0;
+ openair0_cfg->tx_scheduling_advance = 4*openair0_cfg->samples_per_packet;
+ break;
+ case 1920000:
+ openair0_cfg->samples_per_packet = 256;
+ openair0_cfg->tx_sample_advance = 50;
+ openair0_cfg->tx_scheduling_advance = 8*openair0_cfg->samples_per_packet;
+ break;
+ default:
+ printf("Error: unknown sampling rate %f\n",openair0_cfg->sample_rate);
+ exit(-1);
+ break;
+ }
+ openair0_cfg->iq_txshift= 0;
+ openair0_cfg->iq_rxrescale = 15; /*not sure*/
+ openair0_cfg->rx_gain_calib_table = calib_table_fx4;
-
- printf("\n[BRF] sampling_rate %d, num_buffers %d, buffer_size %d, num transfer %d, timeout_ms (rx %d, tx %d)\n",
- brf->sample_rate, brf->num_buffers, brf->buffer_size,brf->num_transfers, brf->rx_timeout_ms, brf->tx_timeout_ms);
+ // The number of buffers to use in the underlying data stream
+ brf->num_buffers = 128;
+ // the size of the underlying stream buffers, in samples
+ brf->buffer_size = (unsigned int) openair0_cfg->samples_per_packet;//*sizeof(int32_t); // buffer size = 4096 for sample_len of 1024
+ brf->num_transfers = 16;
+ brf->rx_timeout_ms = 0;
+ brf->tx_timeout_ms = 0;
+ brf->sample_rate=(unsigned int)openair0_cfg->sample_rate;
+ memset(&brf->meta_rx, 0, sizeof(brf->meta_rx));
+ memset(&brf->meta_tx, 0, sizeof(brf->meta_tx));
+
+ printf("\n[BRF] sampling_rate %d, num_buffers %d, buffer_size %d, num transfer %d, timeout_ms (rx %d, tx %d)\n",
+ brf->sample_rate, brf->num_buffers, brf->buffer_size,brf->num_transfers, brf->rx_timeout_ms, brf->tx_timeout_ms);
+
if ((status=bladerf_open(&brf->dev, "")) != 0 ) {
fprintf(stderr,"Failed to open brf device: %s\n",bladerf_strerror(status));
brf_error(status);
@@ -217,83 +957,81 @@ int openair0_dev_init_bladerf(openair0_device *device, openair0_config_t *openai
printf("[BRF] Device does not operates at max speed, change the USB port\n");
brf_error(BLADERF_ERR_UNSUPPORTED);
}
- // RX
+ // RX
// Example of CLI output: RX Frequency: 2539999999Hz
- if ((status=bladerf_set_frequency(brf->dev, BLADERF_MODULE_RX, (unsigned int) openair0_cfg[card].rx_freq[0])) != 0){
+ if ((status=bladerf_set_frequency(brf->dev, BLADERF_MODULE_RX, (unsigned int) openair0_cfg->rx_freq[0])) != 0){
fprintf(stderr,"Failed to set RX frequency: %s\n",bladerf_strerror(status));
brf_error(status);
} else
- printf("[BRF] set RX frequency to %f\n",openair0_cfg[card].rx_freq[0]);
+ printf("[BRF] set RX frequency to %u\n",(unsigned int)openair0_cfg->rx_freq[0]);
-
- if ((status=bladerf_set_sample_rate(brf->dev, BLADERF_MODULE_RX, (unsigned int)openair0_cfg[card].sample_rate, NULL)) != 0){
+
+
+ unsigned int actual_value=0;
+ if ((status=bladerf_set_sample_rate(brf->dev, BLADERF_MODULE_RX, (unsigned int) openair0_cfg->sample_rate, &actual_value)) != 0){
fprintf(stderr,"Failed to set RX sample rate: %s\n", bladerf_strerror(status));
brf_error(status);
- }else
- printf("[BRF] set RX sample rate to %f\n",openair0_cfg[card].sample_rate);
+ }else
+ printf("[BRF] set RX sample rate to %u, %u\n", (unsigned int) openair0_cfg->sample_rate, actual_value);
- if ((status=bladerf_set_bandwidth(brf->dev, BLADERF_MODULE_RX, (unsigned int) openair0_cfg[card].rx_bw, NULL)) != 0){
+
+ if ((status=bladerf_set_bandwidth(brf->dev, BLADERF_MODULE_RX, (unsigned int) openair0_cfg->rx_bw*2, &actual_value)) != 0){
fprintf(stderr,"Failed to set RX bandwidth: %s\n", bladerf_strerror(status));
brf_error(status);
}else
- printf("[BRF] set RX bandwidth to %f\n",openair0_cfg[card].rx_bw);
+ printf("[BRF] set RX bandwidth to %u, %u\n",(unsigned int)openair0_cfg->rx_bw*2, actual_value);
- if ((status=bladerf_set_gain(brf->dev, BLADERF_MODULE_RX, (int) openair0_cfg[card].rx_gain[0])) != 0) {
+ set_rx_gain_offset(&openair0_cfg[0],0);
+ if ((status=bladerf_set_gain(brf->dev, BLADERF_MODULE_RX, (int) openair0_cfg->rx_gain[0]-openair0_cfg[0].rx_gain_offset[0])) != 0) {
fprintf(stderr,"Failed to set RX gain: %s\n",bladerf_strerror(status));
brf_error(status);
} else
- printf("[BRF] set RX gain to %f\n",openair0_cfg[card].rx_gain[0]);
+ printf("[BRF] set RX gain to %d (%d)\n",(int)(openair0_cfg->rx_gain[0]-openair0_cfg[0].rx_gain_offset[0]),(int)openair0_cfg[0].rx_gain_offset[0]);
- /* Configure the device's RX module for use with the sync interface.
- * SC16 Q11 samples *with* metadata are used. */
- if ((status=bladerf_sync_config(brf->dev, BLADERF_MODULE_RX, BLADERF_FORMAT_SC16_Q11_META,brf->num_buffers,brf->buffer_size,brf->num_transfers,brf->rx_timeout_ms)) != 0 ) {
- fprintf(stderr,"Failed to configure RX sync interface: %s\n", bladerf_strerror(status));
- brf_error(status);
- }else
- printf("[BRF] configured Rx for sync interface \n");
-
- /* We must always enable the RX module after calling bladerf_sync_config(), and
- * before attempting to RX samples via bladerf_sync_rx(). */
- if ((status=bladerf_enable_module(brf->dev, BLADERF_MODULE_RX, true)) != 0) {
- fprintf(stderr,"Failed to enable RX module: %s\n", bladerf_strerror(status));
- brf_error(status);
- }else
- printf("[BRF] RX module enabled \n");
-
// TX
- if ((status=bladerf_set_frequency(brf->dev, BLADERF_MODULE_TX, (unsigned int) openair0_cfg[card].tx_freq[0])) != 0){
+
+ if ((status=bladerf_set_frequency(brf->dev, BLADERF_MODULE_TX, (unsigned int) openair0_cfg->tx_freq[0])) != 0){
fprintf(stderr,"Failed to set TX frequency: %s\n",bladerf_strerror(status));
brf_error(status);
}else
- printf("[BRF] set Tx Frequenct to %f \n", openair0_cfg[card].tx_freq[0]);
+ printf("[BRF] set TX Frequency to %u\n", (unsigned int) openair0_cfg->tx_freq[0]);
- if ((status=bladerf_set_sample_rate(brf->dev, BLADERF_MODULE_TX, (unsigned int) openair0_cfg[card].sample_rate, NULL)) != 0){
+ if ((status=bladerf_set_sample_rate(brf->dev, BLADERF_MODULE_TX, (unsigned int) openair0_cfg->sample_rate, NULL)) != 0){
fprintf(stderr,"Failed to set TX sample rate: %s\n", bladerf_strerror(status));
brf_error(status);
}else
- printf("[BRF] set Tx sampling rate to %f \n", openair0_cfg[card].sample_rate);
+ printf("[BRF] set TX sampling rate to %u \n", (unsigned int) openair0_cfg->sample_rate);
- if ((status=bladerf_set_bandwidth(brf->dev, BLADERF_MODULE_TX,(unsigned int)openair0_cfg[card].tx_bw, NULL)) != 0){
- fprintf(stderr, "Failed to set RX bandwidth: %s\n", bladerf_strerror(status));
+ if ((status=bladerf_set_bandwidth(brf->dev, BLADERF_MODULE_TX,(unsigned int)openair0_cfg->tx_bw*2, NULL)) != 0){
+ fprintf(stderr, "Failed to set TX bandwidth: %s\n", bladerf_strerror(status));
brf_error(status);
}else
- printf("[BRF] set Tx sampling ratebandwidth to %f \n", openair0_cfg[card].tx_bw);
+ printf("[BRF] set TX bandwidth to %u \n", (unsigned int) openair0_cfg->tx_bw*2);
- if ((status=bladerf_set_gain(brf->dev, BLADERF_MODULE_TX, (int)openair0_cfg[card].tx_gain[0])) != 0) {
+ if ((status=bladerf_set_gain(brf->dev, BLADERF_MODULE_TX, (int) openair0_cfg->tx_gain[0])) != 0) {
fprintf(stderr,"Failed to set TX gain: %s\n",bladerf_strerror(status));
brf_error(status);
}else
- printf("[BRF] set the Tx gain to %f \n", openair0_cfg[card].tx_gain[0]);
+ printf("[BRF] set the TX gain to %d\n", (int)openair0_cfg->tx_gain[0]);
+
-
- /* Configure the device's TX module for use with the sync interface.
+ /* Configure the device's TX module for use with the sync interface.
* SC16 Q11 samples *with* metadata are used. */
if ((status=bladerf_sync_config(brf->dev, BLADERF_MODULE_TX,BLADERF_FORMAT_SC16_Q11_META,brf->num_buffers,brf->buffer_size,brf->num_transfers,brf->tx_timeout_ms)) != 0 ) {
fprintf(stderr,"Failed to configure TX sync interface: %s\n", bladerf_strerror(status));
brf_error(status);
}else
- printf("[BRF] configured tx for sync interface \n");
+ printf("[BRF] configured TX sync interface \n");
+
+/* Configure the device's RX module for use with the sync interface.
+ * SC16 Q11 samples *with* metadata are used. */
+ if ((status=bladerf_sync_config(brf->dev, BLADERF_MODULE_RX, BLADERF_FORMAT_SC16_Q11_META,brf->num_buffers,brf->buffer_size,brf->num_transfers,brf->rx_timeout_ms)) != 0 ) {
+ fprintf(stderr,"Failed to configure RX sync interface: %s\n", bladerf_strerror(status));
+ brf_error(status);
+ }else
+ printf("[BRF] configured Rx sync interface \n");
+
/* We must always enable the TX module after calling bladerf_sync_config(), and
* before attempting to TX samples via bladerf_sync_tx(). */
@@ -303,11 +1041,35 @@ int openair0_dev_init_bladerf(openair0_device *device, openair0_config_t *openai
} else
printf("[BRF] TX module enabled \n");
- bladerf_log_set_verbosity(get_brf_log_level(openair0_cfg[card].log_level));
+ /* We must always enable the RX module after calling bladerf_sync_config(), and
+ * before attempting to RX samples via bladerf_sync_rx(). */
+ if ((status=bladerf_enable_module(brf->dev, BLADERF_MODULE_RX, true)) != 0) {
+ fprintf(stderr,"Failed to enable RX module: %s\n", bladerf_strerror(status));
+ brf_error(status);
+ }else
+ printf("[BRF] RX module enabled \n");
+
+ // calibrate
+
+ if ((status=bladerf_calibrate_dc(brf->dev, BLADERF_MODULE_TX)) != 0) {
+ fprintf(stderr,"Failed to calibrate TX DC: %s\n", bladerf_strerror(status));
+ brf_error(status);
+ } else
+ printf("[BRF] TX module calibrated DC \n");
+
+ if ((status=bladerf_calibrate_dc(brf->dev, BLADERF_MODULE_RX)) != 0) {
+ fprintf(stderr,"Failed to calibrate RX DC: %s\n", bladerf_strerror(status));
+ brf_error(status);
+ }else
+ printf("[BRF] RX module calibrated DC \n");
+
+
+
+ bladerf_log_set_verbosity(get_brf_log_level(openair0_cfg->log_level));
printf("BLADERF: Initializing openair0_device\n");
- device->priv = brf;
device->Mod_id = num_devices++;
+ device->type = BLADERF_DEV;
device->trx_start_func = trx_brf_start;
device->trx_end_func = trx_brf_end;
device->trx_read_func = trx_brf_read;
@@ -317,11 +1079,18 @@ int openair0_dev_init_bladerf(openair0_device *device, openair0_config_t *openai
device->trx_stop_func = trx_brf_stop;
device->trx_set_freq_func = trx_brf_set_freq;
device->trx_set_gains_func = trx_brf_set_gains;
- memcpy((void*)&device->openair0_cfg,(void*)openair0_cfg,sizeof(openair0_config_t));
+ device->openair0_cfg = openair0_cfg;
+
+ calibrate_rf(device);
+
+ // memcpy((void*)&device->openair0_cfg,(void*)&openair0_cfg[0],sizeof(openair0_config_t));
return 0;
}
+/*! \brief bladeRF error report
+ * \param status
+ */
int brf_error(int status) {
//exit(-1);
@@ -329,7 +1098,9 @@ int brf_error(int status) {
}
-
+/*! \brief Open BladeRF from serial port
+ * \param serial name of serial port on which to open BladeRF device
+ */
struct bladerf * open_bladerf_from_serial(const char *serial) {
int status;
@@ -356,10 +1127,14 @@ struct bladerf * open_bladerf_from_serial(const char *serial) {
return dev;
}
}
+
+/*! \brief Get BladeRF log level
+ * \param log_level log level
+ */
int get_brf_log_level(int log_level){
int level=BLADERF_LOG_LEVEL_INFO;
- //return BLADERF_LOG_LEVEL_DEBUG;
+ return BLADERF_LOG_LEVEL_DEBUG; // BLADERF_LOG_LEVEL_VERBOSE;// BLADERF_LOG_LEVEL_DEBUG; //
switch(log_level) {
case LOG_DEBUG:
level=BLADERF_LOG_LEVEL_DEBUG;
@@ -384,3 +1159,4 @@ int get_brf_log_level(int log_level){
}
return level;
}
+/*@}*/
diff --git a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h
index 15e1d39da7..3a05c80e5c 100644
--- a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h
+++ b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h
@@ -37,45 +37,69 @@
#include "common_lib.h"
#include "log.h"
+/** @addtogroup _BLADERF_PHY_RF_INTERFACE_
+ * @{
+ */
+
+/*! \brief BladeRF specific data structure */
typedef struct {
- // opaque BRF data struct
+ //! opaque BladeRF device struct. An empty ("") or NULL device identifier will result in the first encountered device being opened (using the first discovered backend)
struct bladerf *dev;
- // An empty ("") or NULL device identifier will result in the first encountered device being opened (using the first discovered backend)
-
+
+ //! Number of buffers
unsigned int num_buffers;
+ //! Buffer size
unsigned int buffer_size;
+ //! Number of transfers
unsigned int num_transfers;
+ //! RX timeout
unsigned int rx_timeout_ms;
+ //! TX timeout
unsigned int tx_timeout_ms;
-
+ //! Metadata for RX
struct bladerf_metadata meta_rx;
+ //!Metadata for TX
struct bladerf_metadata meta_tx;
-
+ //! Sample rate
unsigned int sample_rate;
- // time offset between transmiter timestamp and receiver timestamp;
+ //! time offset between transmiter timestamp and receiver timestamp;
double tdiff;
- // use brf_time_offset to get this value
+ //! TX number of forward samples use brf_time_offset to get this value
int tx_forward_nsamps; //166 for 20Mhz
// --------------------------------
// Debug and output control
// --------------------------------
+ //! Number of underflows
int num_underflows;
+ //! Number of overflows
int num_overflows;
+ //! number of sequential errors
int num_seq_errors;
+ //! number of RX errors
int num_rx_errors;
+ //! Number of TX errors
int num_tx_errors;
+ //! timestamp of current TX
uint64_t tx_current_ts;
+ //! timestamp of current RX
uint64_t rx_current_ts;
+ //! number of actual samples transmitted
uint64_t tx_actual_nsamps;
+ //! number of actual samples received
uint64_t rx_actual_nsamps;
+ //! number of TX samples
uint64_t tx_nsamps;
+ //! number of RX samples
uint64_t rx_nsamps;
+ //! number of TX count
uint64_t tx_count;
+ //! number of RX count
uint64_t rx_count;
+ //! timestamp of RX packet
openair0_timestamp rx_timestamp;
} brf_state_t;
@@ -84,3 +108,4 @@ typedef struct {
*/
int brf_error(int status);
+/*@}*/
diff --git a/targets/ARCH/COMMON/common_lib.c b/targets/ARCH/COMMON/common_lib.c
index b7700ec06f..e4ee06d0a4 100644
--- a/targets/ARCH/COMMON/common_lib.c
+++ b/targets/ARCH/COMMON/common_lib.c
@@ -37,28 +37,140 @@
* \warning
*/
#include
+#include
+#include
+#include
+#include
+
#include "common_lib.h"
+int set_device(openair0_device *device) {
-int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cfg) {
-
-#ifdef ETHERNET
- device->type=ETH_IF;
- device->func_type = BBU_FUNC;
- openair0_dev_init_eth(device, openair0_cfg);
- printf(" openair0_dev_init_eth ...\n");
-#elif EXMIMO
- device->type=EXMIMO_IF;
- openair0_dev_init_exmimo(device, openair0_cfg);
- printf("openair0_dev_init_exmimo...\n");
-#elif OAI_USRP
- device->type=USRP_B200_IF;
- openair0_dev_init_usrp(device, openair0_cfg);
- printf("openair0_dev_init_usrp ...\n");
-#elif OAI_BLADERF
- device->type=BLADERF_IF;
- openair0_dev_init_bladerf(device, openair0_cfg);
- printf(" openair0_dev_init_bladerf ...\n");
-#endif
-
+ switch (device->type) {
+
+ case EXMIMO_DEV:
+ printf("[%s] has loaded EXPRESS MIMO device.\n",((device->host_type == BBU_HOST) ? "BBU": "RRH"));
+ break;
+ case USRP_B200_DEV:
+ printf("[%s] has loaded USRP B200 device.\n",((device->host_type == BBU_HOST) ? "BBU": "RRH"));
+ break;
+case USRP_X300_DEV:
+ printf("[%s] has loaded USRP X300 device.\n",((device->host_type == BBU_HOST) ? "BBU": "RRH"));
+ break;
+ case BLADERF_DEV:
+ printf("[%s] has loaded BLADERF device.\n",((device->host_type == BBU_HOST) ? "BBU": "RRH"));
+ break;
+ case LMSSDR_DEV:
+ printf("[%s] has loaded LMSSDR device.\n",((device->host_type == BBU_HOST) ? "BBU": "RRH"));
+ break;
+ case NONE_DEV:
+ printf("[%s] has not loaded a HW device.\n",((device->host_type == BBU_HOST) ? "BBU": "RRH"));
+ break;
+ default:
+ printf("[%s] invalid HW device.\n",((device->host_type == BBU_HOST) ? "BBU": "RRH"));
+ return -1;
+ }
+ return 0;
}
+
+int set_transport(openair0_device *device) {
+
+ switch (device->transp_type) {
+
+ case ETHERNET_TP:
+ printf("[%s] has loaded ETHERNET trasport protocol.\n",((device->host_type == BBU_HOST) ? "BBU": "RRH"));
+ return 0;
+ break;
+ case NONE_TP:
+ printf("[%s] has not loaded a transport protocol.\n",((device->host_type == BBU_HOST) ? "BBU": "RRH"));
+ return 0;
+ break;
+ default:
+ printf("[%s] invalid transport protocol.\n",((device->host_type == BBU_HOST) ? "BBU": "RRH"));
+ return -1;
+ break;
+ }
+
+}
+
+/* look for the interface library and load it */
+int load_lib(openair0_device *device, openair0_config_t *openair0_cfg, eth_params_t * cfg, uint8_t flag) {
+
+ void *lib_handle;
+ oai_device_initfunc_t dp ;
+ oai_transport_initfunc_t tp ;
+
+ if (flag == BBU_LOCAL_RADIO_HEAD) {
+ lib_handle = dlopen(OAI_RF_LIBNAME, RTLD_LAZY);
+ if (!lib_handle) {
+ printf( "Unable to locate %s: HW device set to NONE_DEV.\n", OAI_RF_LIBNAME);
+ return 0;
+ }
+
+ dp = dlsym(lib_handle,"device_init");
+
+ if (dp != NULL ) {
+ dp(device,openair0_cfg);
+ } else {
+ fprintf(stderr, "%s %d:oai device intializing function not found %s\n", __FILE__, __LINE__, dlerror());
+ return -1;
+ }
+ } else {
+ lib_handle = dlopen(OAI_TP_LIBNAME, RTLD_LAZY);
+ if (!lib_handle) {
+ printf( "Unable to locate %s: transport protocol set to NONE_TP.\n", OAI_TP_LIBNAME);
+ return 0;
+ }
+
+ tp = dlsym(lib_handle,"transport_init");
+
+ if (tp != NULL ) {
+ tp(device,openair0_cfg,cfg);
+ } else {
+ fprintf(stderr, "%s %d:oai device intializing function not found %s\n", __FILE__, __LINE__, dlerror());
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+
+
+int openair0_device_load(openair0_device *device, openair0_config_t *openair0_cfg) {
+
+ int rc;
+ //ToDo: EXMIMO harmonization is not complete. That is the reason for this ifdef
+ #ifdef EXMIMO
+ device_init(device, openair0_cfg);
+ #else
+ rc=load_lib(device, openair0_cfg, NULL,BBU_LOCAL_RADIO_HEAD );
+ if ( rc >= 0) {
+ if ( set_device(device) < 0) {
+ fprintf(stderr, "%s %d:Unsupported radio head\n",__FILE__, __LINE__);
+ return -1;
+ }
+ }
+ #endif
+ return 0;
+}
+
+int openair0_transport_load(openair0_device *device, openair0_config_t *openair0_cfg, eth_params_t * eth_params) {
+ int rc;
+ rc=load_lib(device, openair0_cfg, eth_params, BBU_REMOTE_RADIO_HEAD);
+ if ( rc >= 0) {
+ if ( set_transport(device) < 0) {
+ fprintf(stderr, "%s %d:Unsupported transport protocol\n",__FILE__, __LINE__);
+ return -1;
+ }
+ }
+ return 0;
+
+}
+
+
+
+
+
+
+
diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h
index 156da0c4ce..dc0b31af58 100644
--- a/targets/ARCH/COMMON/common_lib.h
+++ b/targets/ARCH/COMMON/common_lib.h
@@ -42,11 +42,20 @@
#include
#include
+/* name of shared library implementing the radio front end */
+#define OAI_RF_LIBNAME "liboai_device.so"
+/* name of shared library implementing the transport */
+#define OAI_TP_LIBNAME "liboai_transpro.so"
+
+/* flags for BBU to determine whether the attached radio head is local or remote */
+#define BBU_LOCAL_RADIO_HEAD 0
+#define BBU_REMOTE_RADIO_HEAD 1
+
typedef int64_t openair0_timestamp;
typedef volatile int64_t openair0_vtimestamp;
-/* structrue holds the parameters to configure USRP devices*/
+/*!\brief structrue holds the parameters to configure USRP devices*/
typedef struct openair0_device_t openair0_device;
@@ -65,10 +74,56 @@ typedef enum {
} duplex_mode_t;
-/** @addtogroup _PHY_RF_INTERFACE_
+
+/** @addtogroup _GENERIC_PHY_RF_INTERFACE_
* @{
*/
-
+/*!\brief RF device types
+ */
+typedef enum {
+ MIN_RF_DEV_TYPE = 0,
+ /*!\brief device is ExpressMIMO */
+ EXMIMO_DEV,
+ /*!\brief device is USRP B200/B210*/
+ USRP_B200_DEV,
+ /*!\brief device is USRP X300/X310*/
+ USRP_X300_DEV,
+ /*!\brief device is BLADE RF*/
+ BLADERF_DEV,
+ /*!\brief device is LMSSDR (SoDeRa)*/
+ LMSSDR_DEV,
+ /*!\brief device is NONE*/
+ NONE_DEV,
+ MAX_RF_DEV_TYPE
+
+} dev_type_t;
+
+/*!\brief transport protocol types
+ */
+typedef enum {
+ MIN_TRANSP_TYPE = 0,
+ /*!\brief transport protocol ETHERNET */
+ ETHERNET_TP,
+ /*!\brief no transport protocol*/
+ NONE_TP,
+ MAX_TRANSP_TYPE
+
+} transport_type_t;
+
+
+/*!\brief openair0 device host type */
+typedef enum {
+ MIN_HOST_TYPE = 0,
+ /*!\brief device functions within a BBU */
+ BBU_HOST,
+ /*!\brief device functions within a RRH */
+ RRH_HOST,
+ MAX_HOST_TYPE
+
+}host_type_t;
+
+
+/*! \brief RF Gain clibration */
typedef struct {
//! Frequency for which RX chain was calibrated
double freq;
@@ -76,10 +131,11 @@ typedef struct {
double offset;
} rx_gain_calib_table_t;
+/*! \brief RF frontend parameters set by application */
typedef struct {
//! Module ID for this configuration
int Mod_id;
- // device log level
+ //! device log level
int log_level;
//! duplexing mode
duplex_mode_t duplex_mode;
@@ -90,11 +146,15 @@ typedef struct {
//! the sample rate for both transmit and receive.
double sample_rate;
//! number of samples per RX/TX packet (USRP + Ethernet)
- int samples_per_packet;
+ unsigned int samples_per_packet;
//! delay in sending samples (write) due to hardware access, softmodem processing and fronthaul delay if exist
int tx_scheduling_advance;
//! offset in samples between TX and RX paths
int tx_sample_advance;
+ //! configurable tx thread lauch delay
+ int txlaunch_wait; /* 1 or 0 */
+ //! configurable tx thread lauch delay
+ int txlaunch_wait_slotcount;
//! number of RX channels (=RX antennas)
int rx_num_channels;
//! number of TX channels (=TX antennas)
@@ -125,77 +185,72 @@ typedef struct {
double tx_bw;
//! Auto calibration flag
int autocal[4];
- //! RRH IP addr for Ethernet interface
- char *remote_ip;
- //! RRH port number for Ethernet interface
- int remote_port;
- //! my IP addr for Ethernet interface (eNB/BBU, UE)
- char *my_ip;
- //! my port number for Ethernet interface (eNB/BBU, UE)
- int my_port;
-
+ //! rf devices work with x bits iqs when oai have its own iq format
+ //! the two following parameters are used to convert iqs
+ int iq_txshift;
+ int iq_rxrescale;
+ //! remote IP/MAC addr for Ethernet interface
+ char *remote_addr;
+ //! remote port number for Ethernet interface
+ unsigned int remote_port;
+ //! local IP/MAC addr for Ethernet interface (eNB/BBU, UE)
+ char *my_addr;
+ //! local port number for Ethernet interface (eNB/BBU, UE)
+ unsigned int my_port;
+ //! Configuration file for LMS7002M
+ char *configFilename;
} openair0_config_t;
+/*! \brief RF mapping */
typedef struct {
- /* card id */
+ //! card id
int card;
- /* rf chain id */
+ //! rf chain id
int chain;
} openair0_rf_map;
-
-/*!\brief interface types that apply to modules (RRH_BBU/RRH_UE) created in RRH (rrh_gw.c)
- and are defined with respect to the RF device that is present in RRH
- -RRH_BBU modules have two devices, one is by default ETHERNET (will have ETH_IF) and the other one is a
- RF device (EXMIMO,USRP,BLADERF) or no device (NONE_IF).
- -RRH_UE modules have two devices one is by default ETHERNET (will have ETH_IF)
- and the other one by default not present so it will have NONE_IF
- */
-typedef enum {
- MIN_DEV_TYPE = 0,
- /*!\brief device is ETH */
- ETH_IF,
- /*!\brief device is ExpressMIMO */
- EXMIMO_IF,
- /*!\brief device is USRP B200/B210*/
- USRP_B200_IF,
- /*!\brief device is USRP X300/X310*/
- USRP_X300_IF,
- /*!\brief device is BLADE RF*/
- BLADERF_IF,
- /*!\brief device is NONE*/
- NONE_IF,
- MAX_DEV_TYPE
-
-} dev_type_t;
+typedef struct {
+ char *remote_addr;
+ //! remote port number for Ethernet interface
+ uint16_t remote_port;
+ //! local IP/MAC addr for Ethernet interface (eNB/BBU, UE)
+ char *my_addr;
+ //! local port number for Ethernet interface (eNB/BBU, UE)
+ uint16_t my_port;
+ //! local Ethernet interface (eNB/BBU, UE)
+ char *local_if_name;
+ //! tx_sample_advance for RF + ETH
+ uint8_t tx_sample_advance;
+ //! tx_scheduling_advance for RF + ETH
+ uint8_t tx_scheduling_advance;
+ //! iq_txshift for RF + ETH
+ uint8_t iq_txshift;
+ //! transport type preference (RAW/UDP)
+ uint8_t transp_preference;
+ //! radio front end preference (EXMIMO,USRP, BALDERF,LMSSDR)
+ uint8_t rf_preference;
+} eth_params_t;
-/*!\brief openair0 device host type */
-typedef enum {
- MIN_FUNC_TYPE = 0,
- /*!\brief device functions within a BBU */
- BBU_FUNC,
- /*!\brief device functions within a RRH */
- RRH_FUNC,
- MAX_FUNC_TYPE
-
-}func_type_t;
-
+/*!\brief structure holds the parameters to configure USRP devices */
struct openair0_device_t {
- /* Module ID of this device */
+ /*!brief Module ID of this device */
int Mod_id;
- /* Type of this device */
+ /*!brief Type of this device */
dev_type_t type;
- /* Type of the device's host (BBU/RRH) */
- func_type_t func_type;
+ /*!brief Transport protocol type that the device suppports (in case I/Q samples need to be transported) */
+ transport_type_t transp_type;
- /* RF frontend parameters set by application */
- openair0_config_t openair0_cfg;
+ /*!brief Type of the device's host (BBU/RRH) */
+ host_type_t host_type;
- /* Can be used by driver to hold internal structure*/
+ /* !brief RF frontend parameters set by application */
+ openair0_config_t *openair0_cfg;
+
+ /*!brief Can be used by driver to hold internal structure*/
void *priv;
/* Functions API, which are called by the application*/
@@ -217,7 +272,7 @@ struct openair0_device_t {
@param msg pointer to the message structure passed between BBU-RRH
@param msg_len length of the message
*/
- int (*trx_reply_func)(openair0_device *openair0, void *msg, ssize_t msg_len);
+ int (*trx_reply_func)(openair0_device *device, void *msg, ssize_t msg_len);
/*! \brief Called to send samples to the RF target
@param device pointer to the device structure specific to the RF hardware target
@@ -235,9 +290,9 @@ struct openair0_device_t {
* was received.
* \param device the hardware to use
* \param[out] ptimestamp the time at which the first sample was received.
- * \param[out] An array of pointers to buffers for received samples. The buffers must be large enough to hold the number of samples \ref nsamps.
+ * \param[out] buff An array of pointers to buffers for received samples. The buffers must be large enough to hold the number of samples \ref nsamps.
* \param nsamps Number of samples. One sample is 2 byte I + 2 byte Q => 4 byte.
- * \param cc Number of channels. If cc == 1, only buff[0] is filled with samples.
+ * \param antenna_id Index of antenna for which to receive samples
* \returns the number of sample read
*/
int (*trx_read_func)(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps,int antenna_id);
@@ -254,49 +309,64 @@ struct openair0_device_t {
*/
int (*trx_reset_stats_func)(openair0_device *device);
- /*! \brief Terminate operation of the transceiver -- free all associated resources */
+ /*! \brief Terminate operation of the transceiver -- free all associated resources
+ * \param device the hardware to use
+ */
void (*trx_end_func)(openair0_device *device);
- /* Terminate operation */
+ /*! \brief Stop operation of the transceiver
+ * \param card RF Card to use
+ */
int (*trx_stop_func)(int card);
/* Functions API related to UE*/
/*! \brief Set RX feaquencies
- * \param
+ * \param device the hardware to use
+ * \param openair0_cfg RF frontend parameters set by application
+ * \param exmimo_dump_config dump EXMIMO configuration
* \returns 0 in success
*/
int (*trx_set_freq_func)(openair0_device* device, openair0_config_t *openair0_cfg,int exmimo_dump_config);
/*! \brief Set gains
- * \param
+ * \param device the hardware to use
+ * \param openair0_cfg RF frontend parameters set by application
* \returns 0 in success
*/
int (*trx_set_gains_func)(openair0_device* device, openair0_config_t *openair0_cfg);
};
+/* type of device init function, implemented in shared lib */
+typedef int(*oai_device_initfunc_t)(openair0_device *device, openair0_config_t *openair0_cfg);
+/* type of transport init function, implemented in shared lib */
+typedef int(*oai_transport_initfunc_t)(openair0_device *device, openair0_config_t *openair0_cfg, eth_params_t * eth_params);
#ifdef __cplusplus
extern "C"
{
#endif
-/*! \brief Initialize Openair RF target. It returns 0 if OK */
- int openair0_device_init(openair0_device* device, openair0_config_t *openair0_cfg);
+
+ /*! \brief Initialize openair RF target. It returns 0 if OK */
+ int openair0_device_load(openair0_device *device, openair0_config_t *openair0_cfg);
+ /*! \brief Initialize transport protocol . It returns 0 if OK */
+ int openair0_transport_load(openair0_device *device, openair0_config_t *openair0_cfg, eth_params_t * eth_params);
+
- //USRP
-/*! \brief Get the current timestamp of USRP */
+ /*! \brief Get current timestamp of USRP
+ * \param device the hardware to use
+ */
openair0_timestamp get_usrp_time(openair0_device *device);
-/*! \brief Set the RX frequency of USRP RF TARGET */
+
+ /*! \brief Set RX frequencies
+ * \param device the hardware to use
+ * \param openair0_cfg RF frontend parameters set by application
+ * \returns 0 in success
+ */
int openair0_set_rx_frequencies(openair0_device* device, openair0_config_t *openair0_cfg);
-
-//extern
-/*! \brief Initialize Openair ETHERNET target. It returns 0 if OK */
- int openair0_dev_init_eth(openair0_device *device, openair0_config_t *openair0_cfg);
- int openair0_dev_init_bladerf(openair0_device *device, openair0_config_t *openair0_cfg);
- int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_cfg);
- int openair0_dev_init_exmimo(openair0_device *device, openair0_config_t *openair0_cfg);
+
/*@}*/
#ifdef __cplusplus
diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c b/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
new file mode 100644
index 0000000000..a360f26556
--- /dev/null
+++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
@@ -0,0 +1,319 @@
+/*******************************************************************************
+ OpenAirInterface
+ Copyright(c) 1999 - 2014 Eurecom
+
+ OpenAirInterface is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+
+ OpenAirInterface is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenAirInterface.The full GNU General Public License is
+ included in this distribution in the file called "COPYING". If not,
+ see .
+
+ Contact Information
+ OpenAirInterface Admin: openair_admin@eurecom.fr
+ OpenAirInterface Tech : openair_tech@eurecom.fr
+ OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
+
+ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
+
+ *******************************************************************************/
+/*! \file ethernet_lib.c
+ * \brief API to stream I/Q samples over standard ethernet
+ * \author add alcatel Katerina Trilyraki, Navid Nikaein, Pedro Dinis, Lucio Ferreira, Raymond Knopp
+ * \date 2015
+ * \version 0.2
+ * \company Eurecom
+ * \maintainer: navid.nikaein@eurecom.fr
+ * \note
+ * \warning
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "common_lib.h"
+#include "ethernet_lib.h"
+
+#define DEBUG 0
+
+struct sockaddr_ll dest_addr[MAX_INST];
+struct sockaddr_ll local_addr[MAX_INST];
+int addr_len[MAX_INST];
+struct ifreq if_index[MAX_INST];
+struct ether_header eh;
+
+int eth_socket_init_raw(openair0_device *device) {
+
+ int i = 0;
+ eth_state_t *eth = (eth_state_t*)device->priv;
+ int Mod_id = device->Mod_id;
+ const char *local_mac, *remote_mac;
+ int local_port=0, remote_port=0;
+ int sock_dom=0;
+ int sock_type=0;
+ int sock_proto=0;
+
+ if (device->host_type == RRH_HOST ) { /* RRH doesn't know remote MAC(will be retrieved from first packet send from BBU) and remote port(don't care) */
+ local_mac = device->openair0_cfg->my_addr;
+ local_port = device->openair0_cfg->my_port;
+ remote_mac = malloc(ETH_ALEN);
+ memset(remote_mac,0,ETH_ALEN);
+ remote_port = 0;
+ printf("[%s] local MAC addr %s remote MAC addr %s\n","RRH", local_mac,remote_mac);
+ } else {
+ local_mac = device->openair0_cfg->my_addr;
+ local_port = device->openair0_cfg->my_port;
+ remote_mac = device->openair0_cfg->remote_addr;
+ remote_port = device->openair0_cfg->remote_port;
+ printf("[%s] local MAC addr %s remote MAC addr %s\n","BBU", local_mac,remote_mac);
+ }
+
+
+ /* Open a RAW socket to send on */
+ sock_dom=AF_PACKET;
+ sock_type=SOCK_RAW;
+ sock_proto=IPPROTO_RAW;
+ if ((eth->sockfd[Mod_id] = socket(sock_dom, sock_type, sock_proto)) == -1) {
+ perror("ETHERNET: Error opening RAW socket");
+ exit(0);
+ }
+
+ /* initialize destination address */
+ for (i=0; i< MAX_INST; i++) {
+ bzero((void *)&(local_addr[i]), sizeof(struct sockaddr_ll));
+ bzero((void *)&(if_index[i]), sizeof(struct ifreq));
+ }
+ /* Get the index of the interface to send on */
+ strcpy(if_index[Mod_id].ifr_name,eth->if_name[Mod_id]);
+ if (ioctl(eth->sockfd[Mod_id], SIOCGIFINDEX, &(if_index[Mod_id])) < 0)
+ perror("SIOCGIFINDEX");
+
+ local_addr[Mod_id].sll_family = AF_PACKET;
+ local_addr[Mod_id].sll_ifindex = if_index[Mod_id].ifr_ifindex;
+ /* hear traffic from specific protocol*/
+ local_addr[Mod_id].sll_protocol = htons((short)device->openair0_cfg->my_port);
+ local_addr[Mod_id].sll_halen = ETH_ALEN;
+ local_addr[Mod_id].sll_pkttype = PACKET_OTHERHOST;
+ addr_len[Mod_id] = sizeof(struct sockaddr_ll);
+
+ if (bind(eth->sockfd[Mod_id],(struct sockaddr *)&local_addr[Mod_id],addr_len[Mod_id])<0) {
+ perror("ETHERNET: Cannot bind to socket");
+ exit(0);
+ }
+
+ /* Construct the Ethernet header */
+ ether_aton_r(local_mac, (struct ether_addr *)(&(eh.ether_shost)));
+ ether_aton_r(remote_mac, (struct ether_addr *)(&(eh.ether_dhost)));
+ eh.ether_type = htons((short)device->openair0_cfg->my_port);
+
+ printf("[%s] binding mod_%d to hardware address %x:%x:%x:%x:%x:%x\n",((device->host_type == BBU_HOST) ? "BBU": "RRH"),Mod_id,eh.ether_shost[0],eh.ether_shost[1],eh.ether_shost[2],eh.ether_shost[3],eh.ether_shost[4],eh.ether_shost[5]);
+
+ return 0;
+}
+
+
+int trx_eth_write_raw(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps,int cc, int flags) {
+
+ int bytes_sent=0;
+ eth_state_t *eth = (eth_state_t*)device->priv;
+ int Mod_id = device->Mod_id;
+ int sendto_flag =0;
+ int i=0;
+ //sendto_flag|=flags;
+
+ eth->tx_nsamps=nsamps;
+
+ for (i=0;isockfd[Mod_id],RAW_PACKET_SIZE_BYTES(nsamps), buff2);*/
+
+ while(bytes_sent < RAW_PACKET_SIZE_BYTES(nsamps)) {
+#if DEBUG
+ printf("------- TX ------: buff2 current position=%d remaining_bytes=%d bytes_sent=%d \n",
+ (void *)(buff2+bytes_sent),
+ RAW_PACKET_SIZE_BYTES(nsamps) - bytes_sent,
+ bytes_sent);
+#endif
+ /* Send packet */
+ bytes_sent += send(eth->sockfd[Mod_id],
+ buff2,
+ RAW_PACKET_SIZE_BYTES(nsamps),
+ sendto_flag);
+ if ( bytes_sent == -1) {
+ eth->num_tx_errors++;
+ perror("ETHERNET WRITE: ");
+ exit(-1);
+ } else {
+#if DEBUG
+ printf("------- TX ------: nu=%x an_id=%d ts%d bytes_sent=%d\n",
+ *(uint8_t *)(buff2+ETH_ALEN),
+ *(int16_t *)(buff2 + MAC_HEADER_SIZE_BYTES + sizeof(int16_t)),
+ *(openair0_timestamp *)(buff2 + MAC_HEADER_SIZE_BYTES + sizeof(int32_t)),
+ bytes_sent);
+ dump_packet((device->host_type == BBU_HOST)? "BBU":"RRH", buff2, RAW_PACKET_SIZE_BYTES(nsamps), TX_FLAG);
+#endif
+ eth->tx_actual_nsamps=bytes_sent>>2;
+ eth->tx_count++;
+ }
+ }
+
+ /* tx buffer values restored */
+ *(struct ether_header *)buff2 = temp;
+ *(int32_t *)(buff2 + MAC_HEADER_SIZE_BYTES) = temp0;
+ *(openair0_timestamp *)(buff2 + MAC_HEADER_SIZE_BYTES + sizeof(int32_t)) = temp1;
+ }
+ return (bytes_sent-APP_HEADER_SIZE_BYTES-MAC_HEADER_SIZE_BYTES)>>2;
+}
+
+
+int trx_eth_read_raw(openair0_device *device, openair0_timestamp *timestamp, void **buff, int nsamps, int cc) {
+
+ int bytes_received=0;
+ int i=0;
+ eth_state_t *eth = (eth_state_t*)device->priv;
+ int Mod_id = device->Mod_id;
+ int rcvfrom_flag =0;
+
+ eth->rx_nsamps=nsamps;
+
+ for (i=0;isockfd[Mod_id],
+ buff2,
+ RAW_PACKET_SIZE_BYTES(nsamps),
+ rcvfrom_flag);
+
+ if (bytes_received ==-1) {
+ eth->num_rx_errors++;
+ perror("ETHERNET READ: ");
+ exit(-1);
+ } else {
+ /* store the timestamp value from packet's header */
+ *timestamp = *(openair0_timestamp *)(buff2 + MAC_HEADER_SIZE_BYTES + sizeof(int32_t));
+ eth->rx_actual_nsamps=bytes_received>>2;
+ eth->rx_count++;
+ }
+ }
+
+#if DEBUG
+ printf("------- RX------: nu=%x an_id=%d ts%d bytes_recv=%d \n",
+ *(uint8_t *)(buff2+ETH_ALEN),
+ *(int16_t *)(buff2 + MAC_HEADER_SIZE_BYTES + sizeof(int16_t)),
+ *(openair0_timestamp *)(buff2 + MAC_HEADER_SIZE_BYTES + sizeof(int32_t)),
+ bytes_received);
+ dump_packet((device->host_type == BBU_HOST)? "BBU":"RRH", buff2, RAW_PACKET_SIZE_BYTES(nsamps),RX_FLAG);
+
+#endif
+
+ /* tx buffer values restored */
+ *(struct ether_header *)buff2 = temp;
+ *(int32_t *)(buff2 + MAC_HEADER_SIZE_BYTES) = temp0;
+ *(openair0_timestamp *)(buff2 + MAC_HEADER_SIZE_BYTES + sizeof(int32_t)) = temp1;
+ }
+ return (bytes_received-APP_HEADER_SIZE_BYTES-MAC_HEADER_SIZE_BYTES)>>2;
+}
+
+
+
+
+int eth_set_dev_conf_raw(openair0_device *device) {
+
+ int Mod_id = device->Mod_id;
+ eth_state_t *eth = (eth_state_t*)device->priv;
+ void *msg;
+ ssize_t msg_len;
+
+ /* a BBU client sends to RRH a set of configuration parameters (openair0_config_t)
+ so that RF front end is configured appropriately and
+ frame/packet size etc. can be set */
+
+ msg = malloc(MAC_HEADER_SIZE_BYTES + sizeof(openair0_config_t));
+ msg_len = MAC_HEADER_SIZE_BYTES + sizeof(openair0_config_t);
+
+
+ memcpy(msg,(void*)&eh,MAC_HEADER_SIZE_BYTES);
+ memcpy((msg+MAC_HEADER_SIZE_BYTES),(void*)device->openair0_cfg,sizeof(openair0_config_t));
+
+ if (send(eth->sockfd[Mod_id],
+ msg,
+ msg_len,
+ 0)==-1) {
+ perror("ETHERNET: ");
+ exit(0);
+ }
+
+ return 0;
+}
+
+
+int eth_get_dev_conf_raw(openair0_device *device) {
+
+ eth_state_t *eth = (eth_state_t*)device->priv;
+ int Mod_id = device->Mod_id;
+ char str[INET_ADDRSTRLEN];
+ void *msg;
+ ssize_t msg_len;
+
+ msg = malloc(MAC_HEADER_SIZE_BYTES + sizeof(openair0_config_t));
+ msg_len = MAC_HEADER_SIZE_BYTES + sizeof(openair0_config_t);
+
+ /* RRH receives from BBU openair0_config_t */
+ if (recv(eth->sockfd[Mod_id],
+ msg,
+ msg_len,
+ 0)==-1) {
+ perror("ETHERNET: ");
+ exit(0);
+ }
+
+ /* RRH stores the remote MAC address */
+ memcpy(eh.ether_dhost,(msg+ETH_ALEN),ETH_ALEN);
+ //memcpy((void*)&device->openair0_cfg,(msg + MAC_HEADER_SIZE_BYTES), sizeof(openair0_config_t));
+ device->openair0_cfg=(openair0_config_t *)(msg + MAC_HEADER_SIZE_BYTES);
+ printf("[%s] binding mod_%d to hardware address %x:%x:%x:%x:%x:%x hardware address %x:%x:%x:%x:%x:%x\n",((device->host_type == BBU_HOST) ? "BBU": "RRH"),Mod_id,eh.ether_shost[0],eh.ether_shost[1],eh.ether_shost[2],eh.ether_shost[3],eh.ether_shost[4],eh.ether_shost[5],eh.ether_dhost[0],eh.ether_dhost[1],eh.ether_dhost[2],eh.ether_dhost[3],eh.ether_dhost[4],eh.ether_dhost[5]);
+
+ return 0;
+}
diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c b/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c
new file mode 100644
index 0000000000..a9706c73bd
--- /dev/null
+++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c
@@ -0,0 +1,383 @@
+/*******************************************************************************
+ OpenAirInterface
+ Copyright(c) 1999 - 2014 Eurecom
+
+ OpenAirInterface is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+
+ OpenAirInterface is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenAirInterface.The full GNU General Public License is
+ included in this distribution in the file called "COPYING". If not,
+ see .
+
+ Contact Information
+ OpenAirInterface Admin: openair_admin@eurecom.fr
+ OpenAirInterface Tech : openair_tech@eurecom.fr
+ OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
+
+ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
+
+ *******************************************************************************/
+/*! \file ethernet_lib.c
+ * \brief API to stream I/Q samples over standard ethernet
+ * \author add alcatel Katerina Trilyraki, Navid Nikaein, Pedro Dinis, Lucio Ferreira, Raymond Knopp
+ * \date 2015
+ * \version 0.2
+ * \company Eurecom
+ * \maintainer: navid.nikaein@eurecom.fr
+ * \note
+ * \warning
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "vcd_signal_dumper.h"
+
+#include "common_lib.h"
+#include "ethernet_lib.h"
+
+#define DEBUG 0
+struct sockaddr_in dest_addr[MAX_INST];
+struct sockaddr_in local_addr[MAX_INST];
+int addr_len[MAX_INST];
+
+
+uint16_t pck_seq_num = 1;
+uint16_t pck_seq_num_cur=0;
+uint16_t pck_seq_num_prev=0;
+
+ int eth_socket_init_udp(openair0_device *device) {
+
+ int i = 0;
+ eth_state_t *eth = (eth_state_t*)device->priv;
+ int Mod_id = device->Mod_id;
+ char str_local[INET_ADDRSTRLEN];
+ char str_remote[INET_ADDRSTRLEN];
+ const char *local_ip, *remote_ip;
+ int local_port=0, remote_port=0;
+ int sock_dom=0;
+ int sock_type=0;
+ int sock_proto=0;
+ int enable=1;
+
+ if (device->host_type == RRH_HOST ) {
+ local_ip = device->openair0_cfg->my_addr;
+ local_port = device->openair0_cfg->my_port;
+ remote_ip = "0.0.0.0";
+ remote_port = 0;
+ printf("[%s] local ip addr %s port %d\n", "RRH", local_ip, local_port);
+ } else {
+ local_ip = device->openair0_cfg->my_addr;
+ local_port = device->openair0_cfg->my_port;
+ remote_ip = device->openair0_cfg->remote_addr;
+ remote_port = device->openair0_cfg->remote_port;
+ printf("[%s] local ip addr %s port %d\n","BBU", local_ip, local_port);
+ }
+
+ /* Open socket to send on */
+ sock_dom=AF_INET;
+ sock_type=SOCK_DGRAM;
+ sock_proto=IPPROTO_UDP;
+
+ if ((eth->sockfd[Mod_id] = socket(sock_dom, sock_type, sock_proto)) == -1) {
+ perror("ETHERNET: Error opening socket");
+ exit(0);
+ }
+
+ /* initialize addresses */
+ for (i=0; i< MAX_INST; i++) {
+ bzero((void *)&(dest_addr[i]), sizeof(dest_addr[i]));
+ bzero((void *)&(local_addr[i]), sizeof(local_addr[i]));
+ }
+
+ addr_len[Mod_id] = sizeof(struct sockaddr_in);
+
+ dest_addr[Mod_id].sin_family = AF_INET;
+ inet_pton(AF_INET,remote_ip,&(dest_addr[Mod_id].sin_addr.s_addr));
+ dest_addr[Mod_id].sin_port=htons(remote_port);
+ inet_ntop(AF_INET, &(dest_addr[Mod_id].sin_addr), str_remote, INET_ADDRSTRLEN);
+
+
+ local_addr[Mod_id].sin_family = AF_INET;
+ inet_pton(AF_INET,local_ip,&(local_addr[Mod_id].sin_addr.s_addr));
+ local_addr[Mod_id].sin_port=htons(local_port);
+ inet_ntop(AF_INET, &(local_addr[Mod_id].sin_addr), str_local, INET_ADDRSTRLEN);
+
+
+ /* set reuse address flag */
+ if (setsockopt(eth->sockfd[Mod_id], SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(int))) {
+ perror("ETHERNET: Cannot set SO_REUSEADDR option on socket");
+ exit(0);
+ }
+
+ /* want to receive -> so bind */
+ if (bind(eth->sockfd[Mod_id],(struct sockaddr *)&local_addr[Mod_id],addr_len[Mod_id])<0) {
+ perror("ETHERNET: Cannot bind to socket");
+ exit(0);
+ } else {
+ printf("[%s] binding mod_%d to %s:%d\n","RRH",Mod_id,str_local,ntohs(local_addr[Mod_id].sin_port));
+ }
+
+ return 0;
+}
+
+int trx_eth_write_udp(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps,int cc, int flags) {
+
+ int bytes_sent=0;
+ eth_state_t *eth = (eth_state_t*)device->priv;
+ int Mod_id = device->Mod_id;
+ int sendto_flag =0;
+ int i=0;
+ //sendto_flag|=flags;
+ eth->tx_nsamps=nsamps;
+
+ for (i=0;ipck_header.seq_num = pck_seq_num;
+ //eth->pck_header.antenna_id = 1+(i<<1);
+ //eth->pck_header.timestamp = timestamp;
+ *(uint16_t *)buff2 = pck_seq_num;
+ *(uint16_t *)(buff2 + sizeof(uint16_t)) = 1+(i<<1);
+ *(openair0_timestamp *)(buff2 + sizeof(int32_t)) = timestamp;
+ VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TX_SEQ_NUM, pck_seq_num);
+
+ while(bytes_sent < UDP_PACKET_SIZE_BYTES(nsamps)) {
+#if DEBUG
+ printf("------- TX ------: buff2 current position=%d remaining_bytes=%d bytes_sent=%d \n",
+ (void *)(buff2+bytes_sent),
+ UDP_PACKET_SIZE_BYTES(nsamps) - bytes_sent,
+ bytes_sent);
+#endif
+ /* Send packet */
+ bytes_sent += sendto(eth->sockfd[Mod_id],
+ buff2,
+ UDP_PACKET_SIZE_BYTES(nsamps),
+ sendto_flag,
+ (struct sockaddr*)&dest_addr[Mod_id],
+ addr_len[Mod_id]);
+
+ if ( bytes_sent == -1) {
+ eth->num_tx_errors++;
+ perror("ETHERNET WRITE: ");
+ exit(-1);
+ } else {
+#if DEBUG
+ printf("------- TX ------: nu=%d an_id=%d ts%d bytes_send=%d\n",
+ *(int16_t *)buff2,
+ *(int16_t *)(buff2 + sizeof(int16_t)),
+ *(openair0_timestamp *)(buff2 + sizeof(int32_t)),
+ bytes_sent);
+ dump_packet((device->host_type == BBU_HOST)? "BBU":"RRH", buff2, UDP_PACKET_SIZE_BYTES(nsamps), TX_FLAG);
+#endif
+ eth->tx_actual_nsamps=bytes_sent>>2;
+ eth->tx_count++;
+ pck_seq_num++;
+ if ( pck_seq_num > MAX_PACKET_SEQ_NUM(nsamps,76800) ) pck_seq_num = 1;
+ }
+ }
+ /* tx buffer values restored */
+ *(int32_t *)buff2 = temp0;
+ *(openair0_timestamp *)(buff2 + sizeof(int32_t)) = temp1;
+ }
+
+ return (bytes_sent-APP_HEADER_SIZE_BYTES)>>2;
+}
+
+
+
+int trx_eth_read_udp(openair0_device *device, openair0_timestamp *timestamp, void **buff, int nsamps, int cc) {
+
+ int bytes_received=0;
+ eth_state_t *eth = (eth_state_t*)device->priv;
+ openair0_timestamp prev_timestamp = -1;
+ int Mod_id = device->Mod_id;
+ int rcvfrom_flag =0;
+ int block_cnt=0;
+ int again_cnt=0;
+ int i=0;
+
+ eth->rx_nsamps=nsamps;
+
+ for (i=0;isockfd[Mod_id],
+ buff2,
+ UDP_PACKET_SIZE_BYTES(nsamps),
+ rcvfrom_flag,
+ (struct sockaddr *)&dest_addr[Mod_id],
+ (socklen_t *)&addr_len[Mod_id]);
+
+ if (bytes_received ==-1) {
+ eth->num_rx_errors++;
+ if (errno == EAGAIN) {
+ again_cnt++;
+ usleep(10);
+ if (again_cnt == 1000) {
+ perror("ETHERNET READ: ");
+ exit(-1);
+ } else {
+ printf("AGAIN AGAIN AGAIN AGAIN AGAIN AGAIN AGAIN AGAIN AGAIN AGAIN AGAIN AGAIN \n");
+ goto again;
+ }
+ } else if (errno == EWOULDBLOCK) {
+ block_cnt++;
+ usleep(10);
+ if (block_cnt == 1000) {
+ perror("ETHERNET READ: ");
+ exit(-1);
+ } else {
+ printf("BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK \n");
+ goto again;
+ }
+ }
+ } else {
+#if DEBUG
+ printf("------- RX------: nu=%d an_id=%d ts%d bytes_recv=%d\n",
+ *(int16_t *)buff2,
+ *(int16_t *)(buff2 + sizeof(int16_t)),
+ *(openair0_timestamp *)(buff2 + sizeof(int32_t)),
+ bytes_received);
+ dump_packet((device->host_type == BBU_HOST)? "BBU":"RRH", buff2, UDP_PACKET_SIZE_BYTES(nsamps),RX_FLAG);
+#endif
+
+ /* store the timestamp value from packet's header */
+ *timestamp = *(openair0_timestamp *)(buff2 + sizeof(int32_t));
+ /* store the sequence number of the previous packet received */
+ if (pck_seq_num_cur == 0) {
+ pck_seq_num_prev = *(uint16_t *)buff2;
+ } else {
+ pck_seq_num_prev = pck_seq_num_cur;
+ }
+ /* get the packet sequence number from packet's header */
+ pck_seq_num_cur = *(uint16_t *)buff2;
+ //printf("cur=%d prev=%d buff=%d\n",pck_seq_num_cur,pck_seq_num_prev,*(uint16_t *)(buff2));
+ if ( ( pck_seq_num_cur != (pck_seq_num_prev + 1) ) && !((pck_seq_num_prev==75) && (pck_seq_num_cur==1 ))){
+ printf("out of order packet received1! %d|%d|%d\n",pck_seq_num_cur,pck_seq_num_prev, *timestamp);
+ }
+ VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RX_SEQ_NUM,pck_seq_num_cur);
+ VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RX_SEQ_NUM_PRV,pck_seq_num_prev);
+ eth->rx_actual_nsamps=bytes_received>>2;
+ eth->rx_count++;
+ }
+
+ }
+ /* tx buffer values restored */
+ *(int32_t *)buff2 = temp0;
+ *(openair0_timestamp *)(buff2 + sizeof(int32_t)) = temp1;
+
+ }
+ return (bytes_received-APP_HEADER_SIZE_BYTES)>>2;
+}
+
+
+
+
+int eth_set_dev_conf_udp(openair0_device *device) {
+
+ int Mod_id = device->Mod_id;
+ eth_state_t *eth = (eth_state_t*)device->priv;
+ void *msg;
+ ssize_t msg_len;
+
+
+ /* a BBU client sents to RRH a set of configuration parameters (openair0_config_t)
+ so that RF front end is configured appropriately and
+ frame/packet size etc. can be set */
+
+ msg=malloc(sizeof(openair0_config_t));
+ msg_len=sizeof(openair0_config_t);
+ memcpy(msg,(void*)device->openair0_cfg,msg_len);
+
+ if (sendto(eth->sockfd[Mod_id],msg,msg_len,0,(struct sockaddr *)&dest_addr[Mod_id],addr_len[Mod_id])==-1) {
+ perror("ETHERNET: ");
+ exit(0);
+ }
+
+ return 0;
+}
+
+int eth_get_dev_conf_udp(openair0_device *device) {
+
+ eth_state_t *eth = (eth_state_t*)device->priv;
+ int Mod_id = device->Mod_id;
+ char str1[INET_ADDRSTRLEN],str[INET_ADDRSTRLEN];
+ void *msg;
+ ssize_t msg_len;
+
+ msg=malloc(sizeof(openair0_config_t));
+ msg_len=sizeof(openair0_config_t);
+
+ inet_ntop(AF_INET, &(local_addr[Mod_id].sin_addr), str, INET_ADDRSTRLEN);
+ inet_ntop(AF_INET, &(dest_addr[Mod_id].sin_addr), str1, INET_ADDRSTRLEN);
+
+ /* RRH receives from BBU openair0_config_t */
+ if (recvfrom(eth->sockfd[Mod_id],
+ msg,
+ msg_len,
+ 0,
+ (struct sockaddr *)&dest_addr[Mod_id],
+ (socklen_t *)&addr_len[Mod_id])==-1) {
+ perror("ETHERNET: ");
+ exit(0);
+ }
+ device->openair0_cfg=(openair0_config_t *)msg;
+
+ /* get remote ip address and port */
+ /* inet_ntop(AF_INET, &(dest_addr[Mod_id].sin_addr), str1, INET_ADDRSTRLEN); */
+ /* device->openair0_cfg->remote_port =ntohs(dest_addr[Mod_id].sin_port); */
+ /* device->openair0_cfg->remote_addr =str1; */
+
+ /* /\* restore local ip address and port *\/ */
+ /* inet_ntop(AF_INET, &(local_addr[Mod_id].sin_addr), str, INET_ADDRSTRLEN); */
+ /* device->openair0_cfg->my_port =ntohs(local_addr[Mod_id].sin_port); */
+ /* device->openair0_cfg->my_addr =str; */
+
+ /* printf("[RRH] mod_%d socket %d connected to BBU %s:%d %s:%d\n", Mod_id, eth->sockfd[Mod_id],str1, device->openair0_cfg->remote_port, str, device->openair0_cfg->my_port); */
+ return 0;
+}
diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
index ce90d2cff9..f15f2d98eb 100644
--- a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
+++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
@@ -28,7 +28,7 @@
*******************************************************************************/
/*! \file ethernet_lib.c
* \brief API to stream I/Q samples over standard ethernet
- * \author Katerina Trilyraki, Navid Nikaein, Pedro Dinis, Lucio Ferreira, Raymond Knopp
+ * \author add alcatel Katerina Trilyraki, Navid Nikaein, Pedro Dinis, Lucio Ferreira, Raymond Knopp
* \date 2015
* \version 0.2
* \company Eurecom
@@ -52,196 +52,56 @@
#include "common_lib.h"
#include "ethernet_lib.h"
-//#define DEBUG 1
int num_devices_eth = 0;
+struct sockaddr_in dest_addr[MAX_INST];
int dest_addr_len[MAX_INST];
-char sendbuf[MAX_INST][BUF_SIZ]; /*TODO*/
-
-
-/*! \fn static int eth_socket_init(openair0_device *device)
-* \brief initialization of UDP Socket to communicate with one destination
-* \param[in] *device openair device for which the socket will be created
-* \param[out]
-* \return 0 on success, otherwise -1
-* \note
-* @ingroup _oai
-*/
-static int eth_socket_init(openair0_device *device);
-
-/*! \fn static int eth_set_dev_conf(openair0_device *device)
-* \brief
-* \param[in] *device openair device
-* \param[out]
-* \return 0 on success, otherwise -1
-* \note
-* @ingroup _oai
-*/
-static int eth_set_dev_conf(openair0_device *device);
-
-/*! \fn static int eth_get_dev_conf(openair0_device *device)
-* \brief
-* \param[in] *device openair device
-* \param[out]
-* \return 0 on success, otherwise -1
-* \note
-* @ingroup _oai
-*/
-static int eth_get_dev_conf(openair0_device *device);
-
int trx_eth_start(openair0_device *device) {
+
+ eth_state_t *eth = (eth_state_t*)device->priv;
/* initialize socket */
- if (eth_socket_init(device)!=0) {
- return -1;
- }
-
- /* RRH gets openair0 device configuration BBU sets openair0 device configuration*/
- if (device->func_type == BBU_FUNC) {
- return eth_set_dev_conf(device);
+ if ((eth->flags & ETH_RAW_MODE) != 0 ) {
+ if (eth_socket_init_raw(device)!=0) return -1;
+ /* RRH gets openair0 device configuration - BBU sets openair0 device configuration*/
+ if (device->host_type == BBU_HOST) {
+ if(eth_set_dev_conf_raw(device)!=0) return -1;
+ } else {
+ if(eth_get_dev_conf_raw(device)!=0) return -1;
+ }
+ /* adjust MTU wrt number of samples per packet */
+ if(ethernet_tune (device,MTU_SIZE,RAW_PACKET_SIZE_BYTES(device->openair0_cfg->samples_per_packet))!=0) return -1;
} else {
- return eth_get_dev_conf(device);
+ if (eth_socket_init_udp(device)!=0) return -1;
+ /* RRH gets openair0 device configuration - BBU sets openair0 device configuration*/
+ if (device->host_type == BBU_HOST) {
+ if(eth_set_dev_conf_udp(device)!=0) return -1;
+ } else {
+ if(eth_get_dev_conf_udp(device)!=0) return -1;
+ }
+ /* adjust MTU wrt number of samples per packet */
+ //if(ethernet_tune (device,MTU_SIZE,UDP_PACKET_SIZE_BYTES(device->openair0_cfg->samples_per_packet))!=0) return -1;
}
-
+ /* apply additional configuration */
+ if(ethernet_tune (device, SND_BUF_SIZE,2000000000)!=0) return -1;
+ if(ethernet_tune (device, RCV_BUF_SIZE,2000000000)!=0) return -1;
+
return 0;
}
-int trx_eth_write(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps,int cc, int flags) {
-
- int n_written=0,i;
- uint16_t header_size=sizeof(int32_t) + sizeof(openair0_timestamp);
- eth_state_t *eth = (eth_state_t*)device->priv;
- int Mod_id = device->Mod_id;
- int sendto_flag =0;
- sendto_flag|=MSG_DONTWAIT;
-
- for (i=0;isockfd[Mod_id],(nsamps<<2)+header_size, buff2, antenna_id);*/
-
- while(n_written < nsamps) {
- /* Send packet */
- if ((n_written += sendto(eth->sockfd[Mod_id],
- buff2,
- (nsamps<<2)+header_size,
- 0,
- (struct sockaddr*)ð->dest_addr[Mod_id],
- dest_addr_len[Mod_id])) < 0) {
- perror("ETHERNET WRITE");
- exit(-1);
- }
- }
-
-#if DEBUG
- printf("Buffer head TX: nu=%d an_id=%d ts%d samples_send=%d i=%d data=%x\n",
- *(int16_t *)buff2,
- *(int16_t *)(buff2 + sizeof(int16_t)),
- *(openair0_timestamp *)(buff2 + sizeof(int32_t)),
- n_written>>2,i,*(int32_t *)(buff2 + 20*sizeof(int32_t)));
-#endif
-
- /* tx buffer values restored */
- *(int32_t *)buff2 = temp0;
- *(openair0_timestamp *)(buff2 + sizeof(int32_t)) = temp1;
- }
- return n_written;
-
-}
-
-int trx_eth_read(openair0_device *device, openair0_timestamp *timestamp, void **buff, int nsamps, int cc) {
-
- int bytes_received=0;
- int block_cnt=0;
- int ret=0,i;
- uint16_t header_size=sizeof(int32_t) + sizeof(openair0_timestamp);
-
- eth_state_t *eth = (eth_state_t*)device->priv;
- int Mod_id = device->Mod_id;
-
- for (i=0;isockfd[Mod_id],(nsamps<<2)+header_size, buff2, antenna_id);*/
-
- while(bytes_received < (int)((nsamps<<2))) {
- ret=recvfrom(eth->sockfd[Mod_id],
- buff2+bytes_received,
- (nsamps<<2)+header_size-bytes_received,
- 0,//MSG_DONTWAIT,
- (struct sockaddr *)ð->dest_addr[Mod_id],
- (socklen_t *)&dest_addr_len[Mod_id]);
-
- if (ret==-1) {
- if (errno == EAGAIN) {
- perror("ETHERNET READ: ");
- return((nsamps<<2) + header_size);
- } else if (errno == EWOULDBLOCK) {
- block_cnt++;
- usleep(10);
-
- if (block_cnt == 100) return(-1);
- }
- } else {
- bytes_received+=ret;
- }
- }
-
-#if DEBUG
- printf("Buffer head RX: nu=%d an_id=%d ts%d samples_recv=%d i=%d data=%x\n",
- *(int16_t *)buff2,
- *(int16_t *)(buff2 + sizeof(int16_t)),
- *(openair0_timestamp *)(buff2 + sizeof(int32_t)),
- ret>>2,i,*(int32_t *)(buff2 + 20*sizeof(int32_t)));
-#endif
-
- /* store the timestamp value from packet's header */
- *timestamp = *(openair0_timestamp *)(buff2 + sizeof(int32_t));
-
- /* tx buffer values restored */
- *(int32_t *)buff2 = temp0;
- *(openair0_timestamp *)(buff2 + sizeof(int32_t)) = temp1;
- }
- return nsamps;
-
-}
-
void trx_eth_end(openair0_device *device) {
eth_state_t *eth = (eth_state_t*)device->priv;
int Mod_id = device->Mod_id;
- /*destroys socket only for the processes that call the eth_end fuction-- shutdown() for beaking the pipe */
+ /* destroys socket only for the processes that call the eth_end fuction-- shutdown() for beaking the pipe */
if ( close(eth->sockfd[Mod_id]) <0 ) {
perror("ETHERNET: Failed to close socket");
exit(0);
} else {
- printf("[RRH] socket for mod_id %d has been successfully closed.\n",Mod_id);
+ printf("[%s] socket for mod_id %d has been successfully closed.\n",(device->host_type == BBU_HOST)? "BBU":"RRH",Mod_id);
}
}
@@ -253,7 +113,7 @@ int trx_eth_request(openair0_device *device, void *msg, ssize_t msg_len) {
eth_state_t *eth = (eth_state_t*)device->priv;
/* BBU sends a message to RRH */
- if (sendto(eth->sockfd[Mod_id],msg,msg_len,0,(struct sockaddr *)ð->dest_addr[Mod_id],dest_addr_len[Mod_id])==-1) {
+ if (sendto(eth->sockfd[Mod_id],msg,msg_len,0,(struct sockaddr *)&dest_addr[Mod_id],dest_addr_len[Mod_id])==-1) {
perror("ETHERNET: ");
exit(0);
}
@@ -262,7 +122,6 @@ int trx_eth_request(openair0_device *device, void *msg, ssize_t msg_len) {
}
-
int trx_eth_reply(openair0_device *device, void *msg, ssize_t msg_len) {
eth_state_t *eth = (eth_state_t*)device->priv;
@@ -273,7 +132,7 @@ int trx_eth_reply(openair0_device *device, void *msg, ssize_t msg_len) {
msg,
msg_len,
0,
- (struct sockaddr *)ð->dest_addr[Mod_id],
+ (struct sockaddr *)&dest_addr[Mod_id],
(socklen_t *)&dest_addr_len[Mod_id])==-1) {
perror("ETHERNET: ");
exit(0);
@@ -283,65 +142,6 @@ int trx_eth_reply(openair0_device *device, void *msg, ssize_t msg_len) {
}
-static int eth_set_dev_conf(openair0_device *device) {
-
- int Mod_id = device->Mod_id;
- eth_state_t *eth = (eth_state_t*)device->priv;
- void *msg;
- ssize_t msg_len;
-
-
- /* a BBU client sents to RRH a set of configuration parameters (openair0_config_t)
- so that RF front end is configured appropriately and
- frame/packet size etc. can be set */
-
- msg=malloc(sizeof(openair0_config_t));
- msg_len=sizeof(openair0_config_t);
- memcpy(msg,(void*)&device->openair0_cfg,msg_len);
-
- if (sendto(eth->sockfd[Mod_id],msg,msg_len,0,(struct sockaddr *)ð->dest_addr[Mod_id],dest_addr_len[Mod_id])==-1) {
- perror("ETHERNET: ");
- exit(0);
- }
-
- return 0;
-}
-
-
-static int eth_get_dev_conf(openair0_device *device) {
-
- eth_state_t *eth = (eth_state_t*)device->priv;
- int Mod_id = device->Mod_id;
- char str[INET_ADDRSTRLEN];
- void *msg;
- ssize_t msg_len;
-
- msg=malloc(sizeof(openair0_config_t));
- msg_len=sizeof(openair0_config_t);
-
- /* RRH receives from BBU openair0_config_t */
- if (recvfrom(eth->sockfd[Mod_id],
- msg,
- msg_len,
- 0,
- (struct sockaddr *)ð->dest_addr[Mod_id],
- (socklen_t *)&dest_addr_len[Mod_id])==-1) {
- perror("ETHERNET: ");
- exit(0);
- }
-
- memcpy((void*)&device->openair0_cfg,msg,msg_len);
- inet_ntop(AF_INET, &(eth->dest_addr[Mod_id].sin_addr), str, INET_ADDRSTRLEN);
- device->openair0_cfg.remote_port =ntohs(eth->dest_addr[Mod_id].sin_port);
- device->openair0_cfg.remote_ip=str;
- /*apply additional configuration*/
- //ethernet_tune (device, RING_PAR);
- // printf("[RRH] write mod_%d %d to %s:%d\n",Mod_id,eth->sockfd[Mod_id],str,ntohs(eth->dest_addr[Mod_id].sin_port));
-
- return 0;
-}
-
-
int trx_eth_stop(int card) {
return(0);
@@ -364,186 +164,307 @@ int trx_eth_reset_stats(openair0_device* device) {
}
-static int eth_socket_init(openair0_device *device) {
-
- int i = 0;
- eth_state_t *eth = (eth_state_t*)device->priv;
- int Mod_id = device->Mod_id;
- char str[INET_ADDRSTRLEN];
- const char *dest_ip;
- int dest_port=0;
-
- if (device->func_type == RRH_FUNC ) {
- dest_ip = device->openair0_cfg.my_ip;
- dest_port = device->openair0_cfg.my_port;
- printf("[RRH] ip addr %s port %d\n",dest_ip, dest_port);
- } else {
- dest_ip = device->openair0_cfg.remote_ip;
- dest_port = device->openair0_cfg.remote_port;
- printf("[BBU] ip addr %s port %d\n",dest_ip, dest_port);
- }
-
- /* Open RAW socket to send on */
- if ((eth->sockfd[Mod_id] = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) {
- perror("ETHERNET: Error opening socket");
- exit(0);
- }
-
- /* initialize destination address */
- for (i=0; i< MAX_INST; i++) {
- bzero((void *)&(eth->dest_addr[i]), sizeof(eth->dest_addr[i]));
- }
-
- // bzero((void *)dest,sizeof(struct sockaddr_in));
- eth->dest_addr[Mod_id].sin_family = AF_INET;
- inet_pton(AF_INET,dest_ip,&(eth->dest_addr[Mod_id].sin_addr.s_addr));
- eth->dest_addr[Mod_id].sin_port=htons(dest_port);
- dest_addr_len[Mod_id] = sizeof(struct sockaddr_in);
- inet_ntop(AF_INET, &(eth->dest_addr[Mod_id].sin_addr), str, INET_ADDRSTRLEN);
-
- /* if RRH, then I am the server, so bind */
- if (device->func_type == RRH_FUNC ) {
- if (bind(eth->sockfd[Mod_id],(struct sockaddr *)ð->dest_addr[Mod_id], dest_addr_len[Mod_id])<0) {
- perror("ETHERNET: Cannot bind to socket");
- exit(0);
- } else {
- printf("[RRH] binding mod_%d to %s:%d\n",Mod_id,str,ntohs(eth->dest_addr[Mod_id].sin_port));
- }
-
- } else {
- printf("[BBU] Connecting to %s:%d\n",str,ntohs(eth->dest_addr[Mod_id].sin_port));
- }
-
- return 0;
-}
-
-
-int ethernet_tune(openair0_device *device , eth_opt_t option) {
+int ethernet_tune(openair0_device *device, unsigned int option, int value) {
eth_state_t *eth = (eth_state_t*)device->priv;
int Mod_id=device->Mod_id;
-
- unsigned int sndbuf_size=0, rcvbuf_size=0;
- struct timeval snd_timeout, rcv_timeout;
+ struct timeval timeout;
struct ifreq ifr;
char system_cmd[256];
char* if_name=DEFAULT_IF;
-
- /****************** socket level options ************************/
- if (option== SND_BUF_SIZE) { /* transmit socket buffer size */
+ struct in_addr ia;
+ struct if_nameindex *ids;
+ int ret=0;
+ int i=0;
+
+ /****************** socket level options ************************/
+ switch(option) {
+ case SND_BUF_SIZE: /* transmit socket buffer size */
if (setsockopt(eth->sockfd[Mod_id],
SOL_SOCKET,
SO_SNDBUF,
- &sndbuf_size,sizeof(sndbuf_size))) {
+ &value,sizeof(value))) {
perror("[ETHERNET] setsockopt()");
} else {
- printf( "sndbuf_size= %d bytes\n", sndbuf_size);
- }
- } else if (option== RCV_BUF_SIZE) { /* receive socket buffer size */
+ printf("send buffer size= %d bytes\n",value);
+ }
+ break;
+
+ case RCV_BUF_SIZE: /* receive socket buffer size */
if (setsockopt(eth->sockfd[Mod_id],
SOL_SOCKET,
SO_RCVBUF,
- &rcvbuf_size,sizeof(rcvbuf_size))) {
+ &value,sizeof(value))) {
perror("[ETHERNET] setsockopt()");
} else {
- printf( "rcvbuf_size= %d bytes\n", rcvbuf_size);
+ printf("receive bufffer size= %d bytes\n",value);
}
- } else if (option==RCV_TIMEOUT) {
- rcv_timeout.tv_sec = 0;
- rcv_timeout.tv_usec = 180;//less than rt_period
+ break;
+
+ case RCV_TIMEOUT:
+ timeout.tv_sec = value/1000000000;
+ timeout.tv_usec = value%1000000000;//less than rt_period?
if (setsockopt(eth->sockfd[Mod_id],
SOL_SOCKET,
SO_RCVTIMEO,
- (char *)&rcv_timeout,sizeof(rcv_timeout))) {
+ (char *)&timeout,sizeof(timeout))) {
perror("[ETHERNET] setsockopt()");
} else {
- printf( "rcv_timeout= %d usecs\n", rcv_timeout.tv_usec);
+ printf( "receive timeout= %d,%d sec\n",timeout.tv_sec,timeout.tv_usec);
}
- } else if (option==SND_TIMEOUT) {
- snd_timeout.tv_sec = 0;
- snd_timeout.tv_usec = 180;//less than rt_period
+ break;
+
+ case SND_TIMEOUT:
+ timeout.tv_sec = value/1000000000;
+ timeout.tv_usec = value%1000000000;//less than rt_period?
if (setsockopt(eth->sockfd[Mod_id],
SOL_SOCKET,
SO_SNDTIMEO,
- (char *)&snd_timeout,sizeof(snd_timeout))) {
+ (char *)&timeout,sizeof(timeout))) {
perror("[ETHERNET] setsockopt()");
} else {
- printf( "snd_timeout= %d usecs\n", snd_timeout.tv_usec);
+ printf( "send timeout= %d,%d sec\n",timeout.tv_sec,timeout.tv_usec);
}
- }
-
- /******************* interface level options *************************/
- else if (option==MTU_SIZE) { /* change MTU of the eth interface */
+ break;
+
+
+ /******************* interface level options *************************/
+ case MTU_SIZE: /* change MTU of the eth interface */
ifr.ifr_addr.sa_family = AF_INET;
- strncpy(ifr.ifr_name,if_name, sizeof(ifr.ifr_name));
- ifr.ifr_mtu =8960;
+ strncpy(ifr.ifr_name,eth->if_name[Mod_id], sizeof(ifr.ifr_name));
+ ifr.ifr_mtu =value;
if (ioctl(eth->sockfd[Mod_id],SIOCSIFMTU,(caddr_t)&ifr) < 0 )
perror ("[ETHERNET] Can't set the MTU");
else
- printf("[ETHERNET] %s MTU size has changed to %d\n",DEFAULT_IF,ifr.ifr_mtu);
- } else if (option==TX_Q_LEN) { /* change TX queue length of eth interface */
+ printf("[ETHERNET] %s MTU size has changed to %d\n",eth->if_name[Mod_id],ifr.ifr_mtu);
+ break;
+
+ case TX_Q_LEN: /* change TX queue length of eth interface */
ifr.ifr_addr.sa_family = AF_INET;
- strncpy(ifr.ifr_name,if_name, sizeof(ifr.ifr_name));
- ifr.ifr_qlen =3000 ;
+ strncpy(ifr.ifr_name,eth->if_name[Mod_id], sizeof(ifr.ifr_name));
+ ifr.ifr_qlen =value;
if (ioctl(eth->sockfd[Mod_id],SIOCSIFTXQLEN,(caddr_t)&ifr) < 0 )
perror ("[ETHERNET] Can't set the txqueuelen");
else
- printf("[ETHERNET] %s txqueuelen size has changed to %d\n",DEFAULT_IF,ifr.ifr_qlen);
-
-
+ printf("[ETHERNET] %s txqueuelen size has changed to %d\n",eth->if_name[Mod_id],ifr.ifr_qlen);
+ break;
+
/******************* device level options *************************/
- } else if (option==COALESCE_PAR) {
- if (snprintf(system_cmd,sizeof(system_cmd),"ethtool -C %s rx-usecs 3",DEFAULT_IF) > 0) {
- system(system_cmd);
+ case COALESCE_PAR:
+ ret=snprintf(system_cmd,sizeof(system_cmd),"ethtool -C %s rx-usecs %d",eth->if_name[Mod_id],value);
+ if (ret > 0) {
+ ret=system(system_cmd);
+ if (ret == -1) {
+ fprintf (stderr,"[ETHERNET] Can't start shell to execute %s %s",system_cmd, strerror(errno));
+ } else {
+ printf ("[ETHERNET] status of %s is %i\n",WEXITSTATUS(ret));
+ }
printf("[ETHERNET] Coalesce parameters %s\n",system_cmd);
} else {
perror("[ETHERNET] Can't set coalesce parameters\n");
}
+ break;
- } else if (option==PAUSE_PAR ) {
- if (snprintf(system_cmd,sizeof(system_cmd),"ethtool -A %s autoneg off rx off tx off",DEFAULT_IF) > 0) {
- system(system_cmd);
+ case PAUSE_PAR:
+ if (value==1) ret=snprintf(system_cmd,sizeof(system_cmd),"ethtool -A %s autoneg off rx off tx off",eth->if_name[Mod_id]);
+ else if (value==0) ret=snprintf(system_cmd,sizeof(system_cmd),"ethtool -A %s autoneg on rx on tx on",eth->if_name[Mod_id]);
+ else break;
+ if (ret > 0) {
+ ret=system(system_cmd);
+ if (ret == -1) {
+ fprintf (stderr,"[ETHERNET] Can't start shell to execute %s %s",system_cmd, strerror(errno));
+ } else {
+ printf ("[ETHERNET] status of %s is %i\n",WEXITSTATUS(ret));
+ }
printf("[ETHERNET] Pause parameters %s\n",system_cmd);
} else {
perror("[ETHERNET] Can't set pause parameters\n");
}
- } else if (option==RING_PAR ) {
- if (snprintf(system_cmd,sizeof(system_cmd),"ethtool -G %s rx 4096 tx 4096",DEFAULT_IF) > 0) {
- system(system_cmd);
+ break;
+
+ case RING_PAR:
+ ret=snprintf(system_cmd,sizeof(system_cmd),"ethtool -G %s rx %d tx %d",eth->if_name[Mod_id],value);
+ if (ret > 0) {
+ ret=system(system_cmd);
+ if (ret == -1) {
+ fprintf (stderr,"[ETHERNET] Can't start shell to execute %s %s",system_cmd, strerror(errno));
+ } else {
+ printf ("[ETHERNET] status of %s is %i\n",WEXITSTATUS(ret));
+ }
printf("[ETHERNET] Ring parameters %s\n",system_cmd);
} else {
perror("[ETHERNET] Can't set ring parameters\n");
}
+ break;
+ default:
+ break;
}
+
return 0;
}
-int openair0_dev_init_eth(openair0_device *device, openair0_config_t *openair0_cfg) {
+int transport_init(openair0_device *device, openair0_config_t *openair0_cfg, eth_params_t * eth_params ) {
eth_state_t *eth = (eth_state_t*)malloc(sizeof(eth_state_t));
- int card = 0;
memset(eth, 0, sizeof(eth_state_t));
- eth->buffer_size = (unsigned int)openair0_cfg[card].samples_per_packet*sizeof(int32_t); // buffer size = 4096 for sample_len of 1024
- eth->sample_rate = (unsigned int)openair0_cfg[card].sample_rate;
- device->priv = eth;
- printf("ETHERNET: Initializing openair0_device for %s ...\n", ((device->func_type == BBU_FUNC) ? "BBU": "RRH"));
+ if (eth_params->transp_preference == 1) {
+ eth->flags = ETH_RAW_MODE;
+ } else {
+ eth->flags = ETH_UDP_MODE;
+ }
+
+ printf("[ETHERNET]: Initializing openair0_device for %s ...\n", ((device->host_type == BBU_HOST) ? "BBU": "RRH"));
device->Mod_id = num_devices_eth++;
+ device->transp_type = ETHERNET_TP;
device->trx_start_func = trx_eth_start;
device->trx_request_func = trx_eth_request;
device->trx_reply_func = trx_eth_reply;
- device->trx_write_func = trx_eth_write;
- device->trx_read_func = trx_eth_read;
device->trx_get_stats_func = trx_eth_get_stats;
device->trx_reset_stats_func = trx_eth_reset_stats;
- device->trx_end_func = trx_eth_end;
- device->trx_stop_func = trx_eth_stop;
+ device->trx_end_func = trx_eth_end;
+ device->trx_stop_func = trx_eth_stop;
device->trx_set_freq_func = trx_eth_set_freq;
device->trx_set_gains_func = trx_eth_set_gains;
-
- memcpy((void*)&device->openair0_cfg,(void*)openair0_cfg,sizeof(openair0_config_t));
+
+ if ((eth->flags & ETH_RAW_MODE) != 0 ) {
+ device->trx_write_func = trx_eth_write_raw;
+ device->trx_read_func = trx_eth_read_raw;
+ } else {
+ device->trx_write_func = trx_eth_write_udp;
+ device->trx_read_func = trx_eth_read_udp;
+ }
+
+ eth->if_name[device->Mod_id] = eth_params->local_if_name;
+ device->priv = eth;
+
+ /* device specific */
+ openair0_cfg[0].txlaunch_wait = 0;//manage when TX processing is triggered
+ openair0_cfg[0].txlaunch_wait_slotcount = 0; //manage when TX processing is triggered
+ openair0_cfg[0].iq_rxrescale = 15;//rescale iqs
+ openair0_cfg[0].iq_txshift = eth_params->iq_txshift;// shift
+ openair0_cfg[0].tx_sample_advance = eth_params->tx_sample_advance;
+
+ /* RRH does not have any information to make this configuration atm */
+ if (device->host_type == BBU_HOST) {
+ /*Note scheduling advance values valid only for case 7680000 */
+ switch ((int)openair0_cfg[0].sample_rate) {
+ case 30720000:
+ openair0_cfg[0].samples_per_packet = 4096;
+ break;
+ case 23040000:
+ openair0_cfg[0].samples_per_packet = 2048;
+ break;
+ case 15360000:
+ openair0_cfg[0].samples_per_packet = 2048;
+ break;
+ case 7680000:
+ openair0_cfg[0].samples_per_packet = 1024;
+ break;
+ case 1920000:
+ openair0_cfg[0].samples_per_packet = 256;
+ break;
+ default:
+ printf("Error: unknown sampling rate %f\n",openair0_cfg[0].sample_rate);
+ exit(-1);
+ break;
+ }
+ openair0_cfg[0].tx_scheduling_advance = eth_params->tx_scheduling_advance*openair0_cfg[0].samples_per_packet;
+ }
+
+ device->openair0_cfg=&openair0_cfg[0];
return 0;
}
+
+
+/**************************************************************************************************************************
+ * DEBUGING-RELATED FUNCTIONS *
+ **************************************************************************************************************************/
+void dump_packet(char *title, unsigned char* pkt, int bytes, unsigned int tx_rx_flag) {
+
+ static int numSend = 1;
+ static int numRecv = 1;
+ int num, k;
+ char tmp[48];
+ unsigned short int cksum;
+
+ num = (tx_rx_flag)? numSend++:numRecv++;
+ for (k = 0; k < 24; k++) sprintf(tmp+k, "%02X", pkt[k]);
+ cksum = calc_csum((unsigned short *)pkt, bytes>>2);
+ printf("%s-%s (%06d): %s 0x%04X\n", title,(tx_rx_flag)? "TX":"RX", num, tmp, cksum);
+}
+
+unsigned short calc_csum (unsigned short *buf, int nwords) {
+
+ unsigned long sum;
+ for (sum = 0; nwords > 0; nwords--)
+ sum += *buf++;
+ sum = (sum >> 16) + (sum & 0xffff);
+ sum += (sum >> 16);
+ return ~sum;
+}
+
+void dump_dev(openair0_device *device) {
+
+ eth_state_t *eth = (eth_state_t*)device->priv;
+
+ printf("Ethernet device interface %i configuration:\n" ,device->openair0_cfg->Mod_id);
+ printf(" Log level is %i :\n" ,device->openair0_cfg->log_level);
+ printf(" RB number: %i, sample rate: %lf \n" ,
+ device->openair0_cfg->num_rb_dl, device->openair0_cfg->sample_rate);
+ printf(" Scheduling_advance: %i, Sample_advance: %u \n" ,
+ device->openair0_cfg->tx_scheduling_advance, device->openair0_cfg->tx_sample_advance);
+ printf(" BBU configured for %i tx/%i rx channels)\n",
+ device->openair0_cfg->tx_num_channels,device->openair0_cfg->rx_num_channels);
+ printf(" Running flags: %s %s %s\n",
+ ((eth->flags & ETH_RAW_MODE) ? "RAW socket mode - ":""),
+ ((eth->flags & ETH_UDP_MODE) ? "UDP socket mode - ":""));
+ printf(" Number of iqs dumped when displaying packets: %i\n\n",eth->iqdumpcnt);
+
+}
+
+void inline dump_txcounters(openair0_device *device) {
+ eth_state_t *eth = (eth_state_t*)device->priv;
+ printf(" Ethernet device interface %i, tx counters:\n" ,device->openair0_cfg->Mod_id);
+ printf(" Sent packets: %llu send errors: %i\n", eth->tx_count, eth->num_tx_errors);
+}
+
+void inline dump_rxcounters(openair0_device *device) {
+
+ eth_state_t *eth = (eth_state_t*)device->priv;
+ printf(" Ethernet device interface %i rx counters:\n" ,device->openair0_cfg->Mod_id);
+ printf(" Received packets: %llu missed packets errors: %i\n", eth->rx_count, eth->num_underflows);
+}
+
+void inline dump_buff(openair0_device *device, char *buff,unsigned int tx_rx_flag, int nsamps) {
+
+ char *strptr;
+ eth_state_t *eth = (eth_state_t*)device->priv;
+ /*need to add ts number of iqs in printf need to fix dump iqs call */
+ strptr = (( tx_rx_flag == TX_FLAG) ? "TX" : "RX");
+ printf("\n %s, nsamps=%i \n" ,strptr,nsamps);
+
+ if (tx_rx_flag == 1) {
+ dump_txcounters(device);
+ printf(" First %i iqs of TX buffer\n",eth->iqdumpcnt);
+ dump_iqs(buff,eth->iqdumpcnt);
+ } else {
+ dump_rxcounters(device);
+ printf(" First %i iqs of RX buffer\n",eth->iqdumpcnt);
+ dump_iqs(buff,eth->iqdumpcnt);
+ }
+
+}
+
+void dump_iqs(char * buff, int iq_cnt) {
+ int i;
+ for (i=0;i
#include
@@ -47,71 +49,90 @@
#include
#include
-#define MAX_INST 4
-#define DEFAULT_IF "lo"
-#define BUF_SIZ 8960 /*Jumbo frame size*/
+#define MAX_INST 4
+#define DEFAULT_IF "lo"
+#define ETH_RAW_MODE 1
+#define ETH_UDP_MODE 0
+
+#define TX_FLAG 1
+#define RX_FLAG 0
+
+#define MAX_PACKET_SEQ_NUM(spp,spf) (spf/spp)
+#define MAC_HEADER_SIZE_BYTES (sizeof(struct ether_header))
+#define APP_HEADER_SIZE_BYTES (sizeof(int32_t) + sizeof(openair0_timestamp))
+#define PAYLOAD_SIZE_BYTES(nsamps) (nsamps<<2)
+#define UDP_PACKET_SIZE_BYTES(nsamps) (APP_HEADER_SIZE_BYTES + PAYLOAD_SIZE_BYTES(nsamps))
+#define RAW_PACKET_SIZE_BYTES(nsamps) (APP_HEADER_SIZE_BYTES + MAC_HEADER_SIZE_BYTES + PAYLOAD_SIZE_BYTES(nsamps))
+
+
+/*!\brief opaque ethernet data structure */
typedef struct {
-
- // opaque eth data struct
- //struct eth_if *dev;
- // An empty ("") or NULL device identifier will result in the first encountered device being opened (using the first discovered backend)
-
+
+ /*!\brief socket file desc */
int sockfd[MAX_INST];
- struct sockaddr_in dest_addr[MAX_INST];
-
+ /*!\brief interface name */
+ char *if_name[MAX_INST];
+ /*!\brief buffer size */
unsigned int buffer_size;
- unsigned int timeout_ns;
-
- //struct eth_metadata meta_rx;
- //struct eth_metadata meta_tx;
-
- unsigned int sample_rate;
- // time offset between transmiter timestamp and receiver timestamp;
+ /*!\brief timeout ms */
+ unsigned int rx_timeout_ms;
+ /*!\brief timeout ms */
+ unsigned int tx_timeout_ms;
+ /*!\brief runtime flags */
+ uint32_t flags;
+ /*!\ time offset between transmiter timestamp and receiver timestamp */
double tdiff;
- // use brf_time_offset to get this value
- int tx_forward_nsamps; //166 for 20Mhz
-
-
+ /*!\ calibration */
+ int tx_forward_nsamps;
+
// --------------------------------
// Debug and output control
// --------------------------------
- int num_underflows;
- int num_overflows;
- int num_seq_errors;
- int num_rx_errors;
- int num_tx_errors;
+
+ /*!\brief number of I/Q samples to be printed */
+ int iqdumpcnt;
- uint64_t tx_actual_nsamps; // actual number of samples transmitted
+ /*!\brief number of underflows in interface */
+ int num_underflows;
+ /*!\brief number of overflows in interface */
+ int num_overflows;
+ /*!\brief number of concesutive errors in interface */
+ int num_seq_errors;
+ /*!\brief number of errors in interface's receiver */
+ int num_rx_errors;
+ /*!\brief umber of errors in interface's transmitter */
+ int num_tx_errors;
+
+ /*!\brief current TX timestamp */
+ openair0_timestamp tx_current_ts;
+ /*!\brief socket file desc */
+ openair0_timestamp rx_current_ts;
+ /*!\brief actual number of samples transmitted */
+ uint64_t tx_actual_nsamps;
+ /*!\brief actual number of samples received */
uint64_t rx_actual_nsamps;
- uint64_t tx_nsamps; // number of planned samples
+ /*!\brief number of samples to be transmitted */
+ uint64_t tx_nsamps;
+ /*!\brief number of samples to be received */
uint64_t rx_nsamps;
- uint64_t tx_count; // number pf packets
+ /*!\brief number of packets transmitted */
+ uint64_t tx_count;
+ /*!\brief number of packets received */
uint64_t rx_count;
- //openair0_timestamp rx_timestamp;
} eth_state_t;
-#define ETH_META_STATUS_OVERRUN (1 << 0)
-#define ETH_META_STATUS_UNDERRUN (1 << 1)
-
-struct eth_meta_data{
- uint64_t timestamp;
- uint32_t flags;
- uint32_t status;
- unsigned int actual_count;
-};
-
/*!\brief packet header */
typedef struct {
+ /*!\brief packet sequence number max value=packets per frame*/
+ uint16_t seq_num ;
+ /*!\brief antenna port used to resynchronize */
+ uint16_t antenna_id;
/*!\brief packet's timestamp */
openair0_timestamp timestamp;
- /*!\brief variable declared for alignment purposes (sample size=32 bit) */
- int16_t not_used;
- /*!\brief antenna port used to resynchronize */
- int16_t antenna_id;
} header_t;
/*!\brief different options for ethernet tuning in socket and driver level */
@@ -138,9 +159,37 @@ typedef enum {
MAX_OPT
} eth_opt_t;
+/*
+#define SND_BUF_SIZE 1
+#define RCV_BUF_SIZE 1<<1
+#define SND_TIMEOUT 1<<2
+#define RCV_TIMEOUT 1<<3
+#define MTU_SIZE 1<<4
+#define TX_Q_LEN 1<<5
+#define RING_PAR 1<<5
+#define COALESCE_PAR 1<<6
+#define PAUSE_PAR 1<<7
+*/
+
+/*!\brief I/Q samples */
+typedef struct {
+ /*!\brief phase */
+ short i;
+ /*!\brief quadrature */
+ short q;
+} iqoai_t ;
+
+void dump_packet(char *title, unsigned char* pkt, int bytes, unsigned int tx_rx_flag);
+unsigned short calc_csum (unsigned short *buf, int nwords);
+void dump_dev(openair0_device *device);
+void inline dump_buff(openair0_device *device, char *buff,unsigned int tx_rx_flag,int nsamps);
+void inline dump_rxcounters(openair0_device *device);
+void inline dump_txcounters(openair0_device *device);
+void dump_iqs(char * buff, int iq_cnt);
-/*! \fn int ethernet_tune (openair0_device *device, eth_opt_t option)
+
+/*! \fn int ethernet_tune (openair0_device *device, unsigned int option, int value);
* \brief this function allows you to configure certain ethernet parameters in socket or device level
* \param[in] openair0 device which bears the socket
* \param[in] name of parameter to configure
@@ -148,6 +197,37 @@ typedef enum {
* \note
* @ingroup _oai
*/
-int ethernet_tune (openair0_device *device, eth_opt_t option);
-int ethernet_write_data(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps,int cc) ;
-int ethernet_read_data(openair0_device *device,openair0_timestamp *timestamp,void **buff, int nsamps,int cc);
+int ethernet_tune(openair0_device *device, unsigned int option, int value);
+
+
+
+/*! \fn int eth_socket_init_udp(openair0_device *device)
+* \brief initialization of UDP Socket to communicate with one destination
+* \param[in] *device openair device for which the socket will be created
+* \param[out]
+* \return 0 on success, otherwise -1
+* \note
+* @ingroup _oai
+*/
+int eth_socket_init_udp(openair0_device *device);
+int trx_eth_write_udp(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps,int cc, int flags);
+int trx_eth_read_udp(openair0_device *device, openair0_timestamp *timestamp, void **buff, int nsamps, int cc);
+int eth_get_dev_conf_udp(openair0_device *device);
+
+/*! \fn static int eth_set_dev_conf_udp(openair0_device *device)
+* \brief
+* \param[in] *device openair device
+* \param[out]
+* \return 0 on success, otherwise -1
+* \note
+* @ingroup _oai
+*/
+int eth_set_dev_conf_udp(openair0_device *device);
+int eth_socket_init_raw(openair0_device *device);
+int trx_eth_write_raw(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps,int cc, int flags);
+int trx_eth_read_raw(openair0_device *device, openair0_timestamp *timestamp, void **buff, int nsamps, int cc);
+int eth_get_dev_conf_raw(openair0_device *device);
+int eth_set_dev_conf_raw(openair0_device *device);
+
+
+#endif
diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c
index 238c94bd7e..427cd47be8 100644
--- a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c
+++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c
@@ -247,7 +247,7 @@ int openair0_stop_without_reset(int card)
#define MY_RF_MODE (RXEN + TXEN + TXLPFNORM + TXLPFEN + TXLPF25 + RXLPFNORM + RXLPFEN + RXLPF25 + LNA1ON +LNAMax + RFBBNORM + DMAMODE_RX + DMAMODE_TX)
#define RF_MODE_BASE (LNA1ON + RFBBNORM)
-int openair0_dev_init_exmimo(openair0_device *device, openair0_config_t *openair0_cfg) {
+int device_init(openair0_device *device, openair0_config_t *openair0_cfg) {
// Initialize card
// exmimo_config_t *p_exmimo_config;
@@ -287,6 +287,8 @@ int openair0_dev_init_exmimo(openair0_device *device, openair0_config_t *openair
return(-1);
}
+ device->type = EXMIMO_DEV;
+
return(0);
}
@@ -323,6 +325,12 @@ int openair0_config(openair0_config_t *openair0_cfg, int UE_flag)
else
p_exmimo_config->framing.multicard_syncmode=SYNCMODE_SLAVE;
+ /* device specific */
+ openair0_cfg[card].txlaunch_wait = 1;//manage when TX processing is triggered
+ openair0_cfg[card].txlaunch_wait_slotcount = 1; //manage when TX processing is triggered
+ openair0_cfg[card].iq_txshift = 4;//shift
+ openair0_cfg[card].iq_rxrescale = 15;//rescale iqs
+
if (openair0_cfg[card].sample_rate==30.72e6) {
resampling_factor = 0;
rx_filter = RXLPF10;
diff --git a/targets/ARCH/LMSSDR/USERSPACE/LIB/Si5351C/CMakeLists.txt b/targets/ARCH/LMSSDR/USERSPACE/LIB/Si5351C/CMakeLists.txt
new file mode 100644
index 0000000000..88a021ae00
--- /dev/null
+++ b/targets/ARCH/LMSSDR/USERSPACE/LIB/Si5351C/CMakeLists.txt
@@ -0,0 +1,11 @@
+set(si5351_src_files
+ Si5351C.cpp
+)
+set(CMAKE_CXX_FLAGS
+ "${CMAKE_CXX_FLAGS} ${C_FLAGS_PROCESSOR} -std=c++11 "
+)
+
+
+add_library(Si5351C STATIC ${si5351_src_files})
+target_include_directories(Si5351C PUBLIC ../lms7002m ${CMAKE_CURRENT_SOURCE_DIR})
+target_link_libraries(Si5351C LMS7002M)
diff --git a/targets/ARCH/LMSSDR/USERSPACE/LIB/Si5351C/Si5351C.cpp b/targets/ARCH/LMSSDR/USERSPACE/LIB/Si5351C/Si5351C.cpp
new file mode 100644
index 0000000000..88bcb74f3d
--- /dev/null
+++ b/targets/ARCH/LMSSDR/USERSPACE/LIB/Si5351C/Si5351C.cpp
@@ -0,0 +1,872 @@
+/**
+@file Si5351C.cpp
+@author Lime Microsystems
+@brief Configuring of Si5351C
+*/
+
+#include "Si5351C.h"
+#include "lmsComms.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+using namespace std;
+
+#define Log(msg, type) cout << (msg) << endl;
+
+/// Splits float into fraction integers A + B/C
+void realToFrac(const float real, int &A, int &B, int &C)
+{
+ A = (int)real;
+ B = (int)((real - A) * 1048576 + 0.5);
+ C = 1048576;
+
+ int a = B;
+ int b = C;
+ int temp;
+ while( b!= 0) // greatest common divider
+ {
+ temp = a % b;
+ a = b;
+ b = temp;
+ }
+ B = B/a;
+ C = C/a;
+}
+
+/// Default configuration
+const unsigned char Si5351C::m_defaultConfiguration[] =
+{ 0,0x00,
+ 1,0x00,
+ 2,0x08,
+ 3,0x00,
+ 4,0x00,
+ 5,0x00,
+ 6,0x00,
+ 7,0x00,
+ 8,0x00,
+ 9,0x00,
+ 10,0x00,
+ 11,0x00,
+ 12,0x00,
+ 13,0x00,
+ 14,0x00,
+ 15,0x04,
+ 16,0x4F,
+ 17,0x4F,
+ 18,0x4F,
+ 19,0x4F,
+ 20,0x4F,
+ 21,0x4F,
+ 22,0x0F,
+ 23,0x0F,
+ 24,0x00,
+ 25,0x00,
+ 26,0x00,
+ 27,0x80,
+ 28,0x00,
+ 29,0x0B,
+ 30,0x2F,
+ 31,0x00,
+ 32,0x00,
+ 33,0x00,
+ 34,0x00,
+ 35,0x00,
+ 36,0x00,
+ 37,0x00,
+ 38,0x00,
+ 39,0x00,
+ 40,0x00,
+ 41,0x00,
+ 42,0x00,
+ 43,0x01,
+ 44,0x00,
+ 45,0x0D,
+ 46,0x00,
+ 47,0x00,
+ 48,0x00,
+ 49,0x00,
+ 50,0x00,
+ 51,0x01,
+ 52,0x00,
+ 53,0x0D,
+ 54,0x00,
+ 55,0x00,
+ 56,0x00,
+ 57,0x00,
+ 58,0x00,
+ 59,0x01,
+ 60,0x00,
+ 61,0x0D,
+ 62,0x00,
+ 63,0x00,
+ 64,0x00,
+ 65,0x00,
+ 66,0x00,
+ 67,0x01,
+ 68,0x00,
+ 69,0x0D,
+ 70,0x00,
+ 71,0x00,
+ 72,0x00,
+ 73,0x00,
+ 74,0x00,
+ 75,0x01,
+ 76,0x00,
+ 77,0x0D,
+ 78,0x00,
+ 79,0x00,
+ 80,0x00,
+ 81,0x00,
+ 82,0x00,
+ 83,0x01,
+ 84,0x00,
+ 85,0x0D,
+ 86,0x00,
+ 87,0x00,
+ 88,0x00,
+ 89,0x00,
+ 90,0x1E,
+ 91,0x1E,
+ 92,0x00,
+ 93,0x00,
+ 94,0x00,
+ 95,0x00,
+ 96,0x00,
+ 97,0x00,
+ 98,0x00,
+ 99,0x00,
+100,0x00,
+101,0x00,
+102,0x00,
+103,0x00,
+104,0x00,
+105,0x00,
+106,0x00,
+107,0x00,
+108,0x00,
+109,0x00,
+110,0x00,
+111,0x00,
+112,0x00,
+113,0x00,
+114,0x00,
+115,0x00,
+116,0x00,
+117,0x00,
+118,0x00,
+119,0x00,
+120,0x00,
+121,0x00,
+122,0x00,
+123,0x00,
+124,0x00,
+125,0x00,
+126,0x00,
+127,0x00,
+128,0x00,
+129,0x00,
+130,0x00,
+131,0x00,
+132,0x00,
+133,0x00,
+134,0x00,
+135,0x00,
+136,0x00,
+137,0x00,
+138,0x00,
+139,0x00,
+140,0x00,
+141,0x00,
+142,0x00,
+143,0x00,
+144,0x00,
+145,0x00,
+146,0x00,
+147,0x00,
+148,0x00,
+149,0x00,
+150,0x00,
+151,0x00,
+152,0x00,
+153,0x00,
+154,0x00,
+155,0x00,
+156,0x00,
+157,0x00,
+158,0x00,
+159,0x00,
+160,0x00,
+161,0x00,
+162,0x00,
+163,0x00,
+164,0x00,
+165,0x00,
+166,0x00,
+167,0x00,
+168,0x00,
+169,0x00,
+170,0x00,
+171,0x00,
+172,0x00,
+173,0x00,
+174,0x00,
+175,0x00,
+176,0x00,
+177,0x00,
+178,0x00,
+179,0x00,
+180,0x00,
+181,0x30,
+182,0x00,
+183,0xD2,
+184,0x60,
+185,0x60,
+186,0x00,
+187,0xC0,
+188,0x00,
+189,0x00,
+190,0x00,
+191,0x00,
+192,0x00,
+193,0x00,
+194,0x00,
+195,0x00,
+196,0x00,
+197,0x00,
+198,0x00,
+199,0x00,
+200,0x00,
+201,0x00,
+202,0x00,
+203,0x00,
+204,0x00,
+205,0x00,
+206,0x00,
+207,0x00,
+208,0x00,
+209,0x00,
+210,0x00,
+211,0x00,
+212,0x00,
+213,0x00,
+214,0x00,
+215,0x00,
+216,0x00,
+217,0x00,
+218,0x00,
+219,0x00,
+220,0x00,
+221,0x0D,
+222,0x00,
+223,0x00,
+224,0x00,
+225,0x00,
+226,0x00,
+227,0x00,
+228,0x00,
+229,0x00,
+230,0x00,
+231,0x00,
+232,0x00};
+
+// ---------------------------------------------------------------------------
+Si5351C::Si5351C()
+{
+ memset(m_newConfiguration, 0, 255);
+ for(unsigned int i=0; iIsOpen() )
+ {
+ return FAILED;
+ }
+ LMScomms::TransferStatus status;
+ status = device->TransferPacket(pkt);
+ if (status != LMScomms::TRANSFER_SUCCESS || pkt.status != STATUS_COMPLETED_CMD)
+ {
+ return FAILED;
+ }
+ return SUCCESS;
+}
+
+// ---------------------------------------------------------------------------
+/**
+ @brief Sets connection manager to use for data transferring Si5351C
+ @param mng connection manager for data transferring
+*/
+void Si5351C::Initialize(LMScomms *mng)
+{
+ assert(mng != nullptr);
+ device = mng;
+}
+
+/**
+ @brief Loads register values for Si5356A from file
+ @param FName input filename
+*/
+bool Si5351C::LoadRegValuesFromFile(string FName)
+{
+ fstream fin;
+ fin.open(FName.c_str(), ios::in);
+
+ const int len = 1024;
+ char line[len];
+
+ int addr;
+ int value;
+
+ while(!fin.eof())
+ {
+ fin.getline(line, len);
+ if( line[0] == '#')
+ continue;
+ if( strcmp(line, "#END_PROFILE") == 0)
+ break;
+ sscanf(line, "%i,%x",&addr,&value);
+ m_newConfiguration[addr] = value;
+ }
+
+ fin.close();
+ return false;
+};
+
+/** @brief Calculates multisynth dividers and VCO frequencies
+ @param clocks output clocks configuration
+ @param plls plls configurations
+ @param Fmin lowest VCO frequency
+ @param Fmax highest VCO frequency
+*/
+void Si5351C::FindVCO(Si5351_Channel *clocks, Si5351_PLL *plls, const unsigned long Fmin, const unsigned long Fmax)
+{
+ int clockCount = 8;
+ //reset output parameters
+ for(int i=0; i availableFrequenciesPLLA; //all available frequencies for VCO
+ map< unsigned long, int> availableFrequenciesPLLB; //all available frequencies for VCO
+
+ //if clk6 or clk7 is used make available frequencies according to them
+ if(clocks[6].powered || clocks[7].powered)
+ {
+ set clk6freqs;
+ set clk7freqs;
+ set sharedFreqs;
+ unsigned int mult = 6;
+ if(!clk6satisfied)
+ {
+ unsigned long freq = clocks[6].outputFreqHz;
+ while(freq <= Fmax && mult <= 254)
+ {
+ freq = clocks[6].outputFreqHz*mult;
+ if(freq >= Fmin && freq <= Fmax)
+ {
+ clk6freqs.insert(freq);
+ }
+ mult += 2;
+ }
+ }
+ mult = 6;
+ if(!clk7satisfied)
+ {
+ unsigned long freq = clocks[7].outputFreqHz;
+ while(freq <= Fmax && mult <= 254)
+ {
+ freq = clocks[7].outputFreqHz*mult;
+ if(freq >= Fmin && freq <= Fmax)
+ {
+ clk7freqs.insert(freq);
+ }
+ mult += 2;
+ }
+ }
+ bool canShare = false;
+ //find if clk6 and clk7 can share the same pll
+ for (set::iterator it6=clk6freqs.begin(); it6!=clk6freqs.end(); ++it6)
+ {
+ for (set::iterator it7=clk7freqs.begin(); it7!=clk7freqs.end(); ++it7)
+ {
+ if(*it6 == *it7)
+ {
+ canShare = true;
+ sharedFreqs.insert(*it6);
+ }
+ }
+ }
+ if(canShare) //assign PLLA for both clocks
+ {
+ clocks[6].pllSource = 0;
+ clocks[7].pllSource = 0;
+ pllAused = true;
+ for (set::iterator it=sharedFreqs.begin(); it!=sharedFreqs.end(); ++it)
+ {
+ availableFrequenciesPLLA.insert( pair (*it, 0) );
+ }
+ clk6satisfied = true;
+ clk7satisfied = true;
+ }
+ else //if clocks 6 and 7 can't share pll, assign pllA to clk6 and pllB to clk7
+ {
+ if(!clk6satisfied)
+ {
+ clocks[6].pllSource = 0;
+ clk6satisfied = true;
+ pllAused = true;
+ for (set::iterator it6=clk6freqs.begin(); it6!=clk6freqs.end(); ++it6)
+ {
+ availableFrequenciesPLLA.insert( pair(*it6, 0) );
+ }
+ }
+ if(!clk7satisfied)
+ {
+ clocks[7].pllSource = 1;
+ clk7satisfied = true;
+ pllBused = true;
+ for (set::iterator it7=clk7freqs.begin(); it7!=clk7freqs.end(); ++it7)
+ {
+ availableFrequenciesPLLB.insert( pair (*it7, 0) );
+ }
+ }
+ }
+ }
+
+ //PLLA stage, find all clocks that have integer coefficients with PLLA
+ //if pllA is not used by clk6 or clk7, fill available frequencies according to clk1-clk5 clocks
+ if( availableFrequenciesPLLA.size() == 0 && !pllAused)
+ {
+ for(int i=0; i<6; ++i)
+ {
+ unsigned long freq = clocks[i].outputFreqHz > Fmin ? clocks[i].outputFreqHz : (clocks[i].outputFreqHz*((Fmin/clocks[i].outputFreqHz) + ((Fmin%clocks[i].outputFreqHz)!=0)));
+ while(freq >= Fmin && freq <= Fmax)
+ {
+ //add all output frequency multiples that are in VCO interval
+ availableFrequenciesPLLA.insert( pair (freq, 0));
+ freq += clocks[i].outputFreqHz;
+ }
+ }
+ }
+
+ unsigned int bestScore = 0; //score shows how many outputs have integer dividers
+ //calculate scores for all available frequencies
+ unsigned long bestVCOA = 0;
+ for (map::iterator it=availableFrequenciesPLLA.begin(); it!=availableFrequenciesPLLA.end(); ++it)
+ {
+ for(int i=0; i<8; ++i)
+ {
+ if(clocks[i].outputFreqHz == 0 || !clocks[i].powered)
+ continue;
+
+ if( (it->first % clocks[i].outputFreqHz) == 0)
+ {
+ it->second = it->second+1;
+ }
+ }
+ if(it->second >= bestScore)
+ {
+ bestScore = it->second;
+ bestVCOA = it->first;
+ }
+ }
+ //scores calculated
+ //cout << "PLLA stage: " << endl;
+ //cout << "best score: " << bestScore << " best VCO: " << bestVCOA << endl;
+ plls[0].VCO_Hz = bestVCOA;
+ plls[0].feedbackDivider = (double)bestVCOA/plls[0].inputFreqHz;
+
+ for(int i=0; i Fmin ? clocks[i].outputFreqHz : (clocks[i].outputFreqHz*((Fmin/clocks[i].outputFreqHz) + ((Fmin%clocks[i].outputFreqHz)!=0)));
+ while(freq >= Fmin && freq <= Fmax)
+ {
+ availableFrequenciesPLLB.insert( pair (freq, 0));
+ freq += clocks[i].outputFreqHz;
+ }
+ }
+ }
+
+ bestScore = 0;
+ //calculate scores for all available frequencies
+ unsigned long bestVCOB = 0;
+ for (map::iterator it=availableFrequenciesPLLB.begin(); it!=availableFrequenciesPLLB.end(); ++it)
+ {
+ for(int i=0; i<8; ++i)
+ {
+ if(clocks[i].outputFreqHz == 0 || !clocks[i].powered)
+ continue;
+
+ if( (it->first % clocks[i].outputFreqHz) == 0)
+ {
+ it->second = it->second+1;
+ }
+ }
+ if(it->second >= bestScore)
+ {
+ bestScore = it->second;
+ bestVCOB = it->first;
+ }
+ }
+ //scores calculated
+// cout << "PLLB stage: " << endl;
+// cout << "best score: " << bestScore << " best VCO: " << bestVCOB << endl;
+ if(bestVCOB == 0) //just in case if pllb is not used make it the same frequency as plla
+ bestVCOB = bestVCOA;
+ plls[1].VCO_Hz = bestVCOB;
+ plls[1].feedbackDivider = (double)bestVCOB/plls[0].inputFreqHz;
+ for(int i=0; i> 8;
+ m_newConfiguration[addr+1] = MSX_P3;
+
+ m_newConfiguration[addr+2] = 0;
+ m_newConfiguration[addr+2] |= (MSX_P1 >> 16 ) & 0x03;
+ m_newConfiguration[addr+3] = MSX_P1 >> 8;
+ m_newConfiguration[addr+4] = MSX_P1;
+
+ m_newConfiguration[addr+5] = 0;
+ m_newConfiguration[addr+5] = (MSX_P2 >> 16) & 0x0F;
+ m_newConfiguration[addr+5] |= (MSX_P3 >> 16) << 4;
+
+ m_newConfiguration[addr+6] = MSX_P2;
+ m_newConfiguration[addr+7] = MSX_P2 >> 8;
+ }
+ else if( CLK[i].outputFreqHz <= 160000000) // AVAILABLE ONLY ON 0-5 MULTISYNTHS
+ {
+ Log("Si5351C - clock configuring for more than 150 MHz not implemented\n", LOG_ERROR);
+ return FAILED;
+ }
+ }
+ else // CLK6 and CLK7 only integer mode
+ {
+ if(CLK[i].outputFreqHz <= 150000000)
+ {
+ if(i==6)
+ {
+ m_newConfiguration[90] = DivA;
+ if(DivA%2 != 0)
+ {
+ Log("Si5351C - CLK6 multisynth divider is not even integer\n", LOG_ERROR);
+ return FAILED;
+ }
+ }
+ else
+ {
+ m_newConfiguration[91] = DivA;
+ if(DivA%2 != 0)
+ {
+ Log("Si5351C - CLK7 multisynth divider is not even integer\n", LOG_ERROR);
+ return FAILED;
+ }
+ }
+ }
+ else if( CLK[i].outputFreqHz <= 160000000) // AVAILABLE ONLY ON 0-5 MULTISYNTHS
+ {
+ Log("Si5351C - clock configuring for more than 150 MHz not implemented\n", LOG_ERROR);
+ return FAILED;
+ }
+ }
+ }
+
+ //configure pll
+ //set input clk source
+ m_newConfiguration[15] = m_newConfiguration[15] & 0xF3;
+ m_newConfiguration[15] |= (PLL[0].CLK_SRC & 1) << 2;
+ m_newConfiguration[15] |= (PLL[1].CLK_SRC & 1) << 3;
+ for(int i=0; i<2; ++i)
+ {
+ addr = 26+i*8;
+ if(PLL[i].feedbackDivider < 15 || PLL[i].feedbackDivider > 90)
+ {
+ Log("Si5351C - VCO frequency divider out of range [15:90].\n", LOG_ERROR);
+ return FAILED;
+ }
+ if( PLL[i].VCO_Hz < 600000000 || PLL[i].VCO_Hz > 900000000)
+ {
+ Log("Si5351C - Can't calculate valid VCO frequency.\n", LOG_ERROR);
+ return FAILED;
+ }
+ ss.clear();
+ ss.str(string());
+ ss << "Si5351C : VCO" << (i==0 ? "A" : "B") << " = " << PLL[i].VCO_Hz/1000000.0 << " MHz";
+
+ //calculate MSNx_P1, MSNx_P2, MSNx_P3
+ int MSNx_P1;
+ int MSNx_P2;
+ int MSNx_P3;
+
+ int DivA;
+ int DivB;
+ int DivC;
+ realToFrac(PLL[i].feedbackDivider, DivA, DivB, DivC);
+ ss << " Feedback Divider " << DivA << " " << DivB << "/" << DivC << endl;
+ Log(ss.str(), LOG_INFO);
+
+ MSNx_P1 = 128 * DivA + floor(128 * ( (float)DivB/DivC)) - 512;
+ MSNx_P2 = 128 * DivB - DivC * floor( 128 * DivB/DivC );
+ MSNx_P3 = DivC;
+
+ m_newConfiguration[addr+4] = MSNx_P1;
+ m_newConfiguration[addr+3] = MSNx_P1 >> 8;
+ m_newConfiguration[addr+2] = MSNx_P1 >> 16;
+
+ m_newConfiguration[addr+7] = MSNx_P2;
+ m_newConfiguration[addr+6] = MSNx_P2 >> 8;
+ m_newConfiguration[addr+5] = 0;
+ m_newConfiguration[addr+5] = (MSNx_P2 >> 16) & 0x0F;
+
+ m_newConfiguration[addr+5] |= (MSNx_P3 >> 16) << 4;
+ m_newConfiguration[addr+1] |= MSNx_P3;
+ m_newConfiguration[addr] |= MSNx_P3 >> 8;
+ }
+ return SUCCESS;
+}
+
+/** @brief Sets output clock parameters
+ @param id clock id 0-CLK0 1-CLK1 ...
+ @param fOut_Hz output frequency in Hz
+ @param enabled is this output powered
+ @param inverted invert clock
+*/
+void Si5351C::SetClock(unsigned char id, unsigned long fOut_Hz, bool enabled, bool inverted)
+{
+ if( id < 8)
+ {
+ if(fOut_Hz < 8000 || fOut_Hz > 160000000)
+ {
+ stringstream ss;
+ ss << "Si5351C - CLK" << (int)id << " output frequency must be between 8kHz and 160MHz. fOut_MHz = " << fOut_Hz/1000000.0 << endl;
+ Log(ss.str(), LOG_ERROR);
+ return;
+ }
+ CLK[id].powered = enabled;
+ CLK[id].inverted = inverted;
+ CLK[id].outputFreqHz = fOut_Hz;
+ }
+}
+
+/** @brief Sets PLL input frequency
+ @param id PLL id 0-PLLA 1-PLLB
+ @param CLKIN_Hz clock input in Hz
+*/
+void Si5351C::SetPLL(unsigned char id, unsigned long CLKIN_Hz, int CLK_SRC)
+{
+ if (id < 2)
+ {
+ PLL[id].inputFreqHz = CLKIN_Hz;
+ PLL[id].CLK_SRC = CLK_SRC;
+ }
+}
+
+/** @brief Resets configuration registers to default values
+*/
+void Si5351C::Reset()
+{
+ memset(m_newConfiguration, 0, 255);
+ for(unsigned int i=0; iTransferPacket(pkt);
+ if (status != LMScomms::TRANSFER_SUCCESS || pkt.status != STATUS_COMPLETED_CMD)
+ {
+ return stat;
+ }
+
+ stat.sys_init = (pkt.inBuffer[0] >> 7);
+ stat.lol_b = (pkt.inBuffer[0] >> 6) & 0x1;
+ stat.lol_a = (pkt.inBuffer[0] >> 5) & 0x1;
+ stat.los = (pkt.inBuffer[0] >> 4) & 0x1;
+ stat.sys_init_stky = (pkt.inBuffer[1] >> 7);
+ stat.lol_b_stky = (pkt.inBuffer[1] >> 6) & 0x1;
+ stat.lol_a_stky = (pkt.inBuffer[1] >> 5) & 0x1;
+ stat.los_stky = (pkt.inBuffer[1] >> 4) & 0x1;
+ return stat;
+}
+
+Si5351C::Status Si5351C::ClearStatus()
+{
+ LMScomms::GenericPacket pkt;
+ pkt.cmd = CMD_SI5351_WR;
+ pkt.outBuffer.push_back(1);
+ pkt.outBuffer.push_back(0x0);
+ LMScomms::TransferStatus status;
+ status = device->TransferPacket(pkt);
+ if (status != LMScomms::TRANSFER_SUCCESS || pkt.status != STATUS_COMPLETED_CMD)
+ return FAILED;
+ return SUCCESS;
+}
diff --git a/targets/ARCH/LMSSDR/USERSPACE/LIB/Si5351C/Si5351C.h b/targets/ARCH/LMSSDR/USERSPACE/LIB/Si5351C/Si5351C.h
new file mode 100644
index 0000000000..971a2d1d69
--- /dev/null
+++ b/targets/ARCH/LMSSDR/USERSPACE/LIB/Si5351C/Si5351C.h
@@ -0,0 +1,100 @@
+/**
+@file Si5351C.h
+@brief Header for Si5351C.cpp
+@author Lime Microsystems
+*/
+
+#ifndef SI5351C_MODULE
+#define SI5351C_MODULE
+
+#include
+#include
+using namespace std;
+//---------------------------------------------------------------------------
+
+enum eSi_CLOCK_INPUT
+{
+ Si_CLKIN,
+ Si_XTAL,
+ Si_CMOS
+};
+
+struct Si5351_Channel
+{
+ Si5351_Channel() : outputDivider(1), outputFreqHz(1), multisynthDivider(1), pllSource(0),
+ phaseOffset(0), powered(true), inverted(false), int_mode(false) {};
+ int outputDivider;
+ unsigned long outputFreqHz;
+ float multisynthDivider;
+ int pllSource;
+ float phaseOffset;
+ bool powered;
+ bool inverted;
+ bool int_mode;
+};
+
+struct Si5351_PLL
+{
+ Si5351_PLL() : inputFreqHz(0), VCO_Hz(0), feedbackDivider(0), CLKIN_DIV(1), CLK_SRC(1) {}
+ unsigned long inputFreqHz;
+ float VCO_Hz;
+ float feedbackDivider;
+ int CLKIN_DIV;
+ int CLK_SRC; //0-XTAL, 1-CLKIN
+};
+
+class LMScomms;
+class Si5351C
+{
+public:
+ enum Status
+ {
+ SUCCESS,
+ FAILED,
+ };
+
+ struct StatusBits
+ {
+ StatusBits() : sys_init(0), sys_init_stky(0), lol_b(0), lol_b_stky(0), lol_a(0), lol_a_stky(0), los(0), los_stky(0)
+ {
+
+ }
+ int sys_init;
+ int sys_init_stky;
+ int lol_b;
+ int lol_b_stky;
+ int lol_a;
+ int lol_a_stky;
+ int los;
+ int los_stky;
+ };
+
+ StatusBits GetStatusBits();
+ Status ClearStatus();
+
+ Si5351C();
+ ~Si5351C();
+ void Initialize(LMScomms *mng);
+ bool LoadRegValuesFromFile(string FName);
+
+ void SetPLL(unsigned char id, unsigned long CLKIN_Hz, int CLK_SRC);
+ void SetClock(unsigned char id, unsigned long fOut_Hz, bool enabled = true, bool inverted = false);
+
+ Status UploadConfiguration();
+ Status ConfigureClocks();
+ void Reset();
+
+private:
+ void FindVCO(Si5351_Channel *clocks, Si5351_PLL *plls, const unsigned long Fmin, const unsigned long Fmax);
+ LMScomms *device;
+
+ Si5351_PLL PLL[2];
+ Si5351_Channel CLK[8];
+
+ static const unsigned char m_defaultConfiguration[];
+ unsigned char m_newConfiguration[255];
+
+
+};
+
+#endif // SI5351C_MODULE
diff --git a/targets/ARCH/LMSSDR/USERSPACE/LIB/lms7002m/CMakeLists.txt b/targets/ARCH/LMSSDR/USERSPACE/LIB/lms7002m/CMakeLists.txt
new file mode 100644
index 0000000000..cea22ac829
--- /dev/null
+++ b/targets/ARCH/LMSSDR/USERSPACE/LIB/lms7002m/CMakeLists.txt
@@ -0,0 +1,63 @@
+cmake_minimum_required(VERSION 2.8)
+set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE TYPE INTERNAL FORCE)
+project("lms7api")
+#include modules for finding FFTW and CyAPI
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
+cmake_policy(SET CMP0015 OLD)
+if(${CMAKE_MAJOR_VERSION} GREATER 2)
+ cmake_policy(SET CMP0043 NEW)
+endif()
+ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
+if(CMAKE_COMPILER_IS_GNUCXX)
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
+endif()
+
+# set up include-directories
+include_directories(
+ "${PROJECT_SOURCE_DIR}"
+ "${PROJECT_BINARY_DIR}"
+ cpp-feather-ini-parser
+ )
+
+set(LMS7002M_src_files
+ LMS7002M.cpp
+ LMS7002M_parameters.cpp
+ LMS7002M_statuses.cpp
+ LMS7002M_filtersCalibration.cpp
+ lmsComms.cpp
+ LMS7002M_RegistersMap.cpp
+)
+
+set(ENABLE_USB_CONNECTION "YES" CACHE BOOL INTERNAL)
+set(ENABLE_SPI_CONNECTION "NO" CACHE BOOL INTERNAL)
+set(CONNECTION_MANAGER_DIR connectionManager)
+set(connectionManager_src_files
+ ${CONNECTION_MANAGER_DIR}/ConnectionManager.cpp
+ ${CONNECTION_MANAGER_DIR}/ConnectionCOM.cpp
+ ${CONNECTION_MANAGER_DIR}/ConnectionManager.h
+ ${CONNECTION_MANAGER_DIR}/ConnectionCOM.h
+)
+if(ENABLE_USB_CONNECTION)
+ list(APPEND connectionManager_src_files ${CONNECTION_MANAGER_DIR}/ConnectionUSB.cpp ${CONNECTION_MANAGER_DIR}/ConnectionUSB.h)
+ add_definitions(-DENABLE_USB_CONNECTION)
+endif()
+if(ENABLE_SPI_CONNECTION)
+ list(APPEND connectionManager_src_files ${CONNECTION_MANAGER_DIR}/ConnectionSPI.cpp ${CONNECTION_MANAGER_DIR}/ConnectionSPI.h)
+ add_definitions(-DENABLE_SPI_CONNECTION)
+endif()
+
+add_library(LMS7002M STATIC ${LMS7002M_src_files} ${connectionManager_src_files})
+target_include_directories(LMS7002M PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
+
+if(WIN32 AND ENABLE_USB_CONNECTION)
+ find_package(CyAPI REQUIRED)
+ LINK_DIRECTORIES(${CYAPI_LIBRARIES})
+ include_directories(${CYAPI_INCLUDE_DIRS})
+ set(CONNECTION_MANAGER_LIBS ${CYAPI_LIBRARIES} SetupAPI)
+ target_link_libraries(LMS7002M ${CONNECTION_MANAGER_LIBS})
+endif()
+if(UNIX AND ENABLE_USB_CONNECTION)
+ set(CONNECTION_MANAGER_LIBS usb-1.0 -lpthread)
+ target_link_libraries(LMS7002M ${CONNECTION_MANAGER_LIBS})
+endif()
+
diff --git a/targets/ARCH/LMSSDR/USERSPACE/LIB/lms7002m/LMS7002M.cpp b/targets/ARCH/LMSSDR/USERSPACE/LIB/lms7002m/LMS7002M.cpp
new file mode 100644
index 0000000000..ded70e114f
--- /dev/null
+++ b/targets/ARCH/LMSSDR/USERSPACE/LIB/lms7002m/LMS7002M.cpp
@@ -0,0 +1,2612 @@
+/**
+@file LMS7002M.cpp
+@author Lime Microsystems (www.limemicro.com)
+@brief Implementation of LMS7002M transceiver configuring
+*/
+
+#include "LMS7002M.h"
+#include
+#include
+#include "lmsComms.h"
+#include "INI.h"
+#include
+#include
+#include
+#include "LMS7002M_RegistersMap.h"
+
+#include
+#include
+
+float_type LMS7002M::gVCO_frequency_table[3][2] = { { 3800, 5222 }, { 4961, 6754 }, {6306, 7714} };
+float_type LMS7002M::gCGEN_VCO_frequencies[2] = {2000, 2700};
+
+///define for parameter enumeration if prefix might be needed
+#define LMS7param(id) id
+
+//module addresses needs to be sorted in ascending order
+const uint16_t LMS7002M::readOnlyRegisters[] = { 0x002F, 0x008C, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x0123, 0x0209, 0x020A, 0x020B, 0x040E, 0x040F };
+const uint16_t LMS7002M::readOnlyRegistersMasks[] = { 0x0000, 0x0FFF, 0x007F, 0x0000, 0x0000, 0x0000, 0x0000, 0x003F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 };
+
+/** @brief Simple logging function to print status messages
+ @param text message to print
+ @param type message type for filtering specific information
+*/
+void LMS7002M::Log(const char* text, LogType type)
+{
+ switch(type)
+ {
+ case LOG_INFO:
+ printf("%s\n", text);
+ break;
+ case LOG_WARNING:
+ printf("Warning: %s\n", text);
+ break;
+ case LOG_ERROR:
+ printf("ERROR: %s\n", text);
+ break;
+ case LOG_DATA:
+ printf("DATA: %s\n", text);
+ break;
+ }
+}
+
+LMS7002M::LMS7002M() : controlPort(NULL), mRegistersMap(new LMS7002M_RegistersMap())
+{
+ mRefClkSXR_MHz = 30.72;
+ mRefClkSXT_MHz = 30.72;
+}
+
+/** @brief Creates LMS7002M main control object, it requires LMScomms to communicate with chip
+ @param controlPort data connection for controlling LMS7002 chip registers
+*/
+LMS7002M::LMS7002M(LMScomms* controlPort) :
+ controlPort(controlPort), mRegistersMap(new LMS7002M_RegistersMap())
+{
+ mRefClkSXR_MHz = 30.72;
+ mRefClkSXT_MHz = 30.72;
+
+ //memory intervals for registers tests and calibration algorithms
+ MemorySectionAddresses[LimeLight][0] = 0x0020;
+ MemorySectionAddresses[LimeLight][1] = 0x002F;
+ MemorySectionAddresses[EN_DIR][0] = 0x0081;
+ MemorySectionAddresses[EN_DIR][1] = 0x0081;
+ MemorySectionAddresses[AFE][0] = 0x0082;
+ MemorySectionAddresses[AFE][1] = 0x0082;
+ MemorySectionAddresses[BIAS][0] = 0x0084;
+ MemorySectionAddresses[BIAS][1] = 0x0084;
+ MemorySectionAddresses[XBUF][0] = 0x0085;
+ MemorySectionAddresses[XBUF][1] = 0x0085;
+ MemorySectionAddresses[CGEN][0] = 0x0086;
+ MemorySectionAddresses[CGEN][1] = 0x008C;
+ MemorySectionAddresses[LDO][0] = 0x0092;
+ MemorySectionAddresses[LDO][1] = 0x00A7;
+ MemorySectionAddresses[BIST][0] = 0x00A8;
+ MemorySectionAddresses[BIST][1] = 0x00AC;
+ MemorySectionAddresses[CDS][0] = 0x00AD;
+ MemorySectionAddresses[CDS][1] = 0x00AE;
+ MemorySectionAddresses[TRF][0] = 0x0100;
+ MemorySectionAddresses[TRF][1] = 0x0104;
+ MemorySectionAddresses[TBB][0] = 0x0105;
+ MemorySectionAddresses[TBB][1] = 0x010A;
+ MemorySectionAddresses[RFE][0] = 0x010C;
+ MemorySectionAddresses[RFE][1] = 0x0114;
+ MemorySectionAddresses[RBB][0] = 0x0115;
+ MemorySectionAddresses[RBB][1] = 0x011A;
+ MemorySectionAddresses[SX][0] = 0x011C;
+ MemorySectionAddresses[SX][1] = 0x0124;
+ MemorySectionAddresses[TxTSP][0] = 0x0200;
+ MemorySectionAddresses[TxTSP][1] = 0x020C;
+ MemorySectionAddresses[TxNCO][0] = 0x0240;
+ MemorySectionAddresses[TxNCO][1] = 0x0261;
+ MemorySectionAddresses[TxGFIR1][0] = 0x0280;
+ MemorySectionAddresses[TxGFIR1][1] = 0x02A7;
+ MemorySectionAddresses[TxGFIR2][0] = 0x02C0;
+ MemorySectionAddresses[TxGFIR2][1] = 0x02E7;
+ MemorySectionAddresses[TxGFIR3a][0] = 0x0300;
+ MemorySectionAddresses[TxGFIR3a][1] = 0x0327;
+ MemorySectionAddresses[TxGFIR3b][0] = 0x0340;
+ MemorySectionAddresses[TxGFIR3b][1] = 0x0367;
+ MemorySectionAddresses[TxGFIR3c][0] = 0x0380;
+ MemorySectionAddresses[TxGFIR3c][1] = 0x03A7;
+ MemorySectionAddresses[RxTSP][0] = 0x0400;
+ MemorySectionAddresses[RxTSP][1] = 0x040F;
+ MemorySectionAddresses[RxNCO][0] = 0x0440;
+ MemorySectionAddresses[RxNCO][1] = 0x0461;
+ MemorySectionAddresses[RxGFIR1][0] = 0x0480;
+ MemorySectionAddresses[RxGFIR1][1] = 0x04A7;
+ MemorySectionAddresses[RxGFIR2][0] = 0x04C0;
+ MemorySectionAddresses[RxGFIR2][1] = 0x04E7;
+ MemorySectionAddresses[RxGFIR3a][0] = 0x0500;
+ MemorySectionAddresses[RxGFIR3a][1] = 0x0527;
+ MemorySectionAddresses[RxGFIR3b][0] = 0x0540;
+ MemorySectionAddresses[RxGFIR3b][1] = 0x0567;
+ MemorySectionAddresses[RxGFIR3c][0] = 0x0580;
+ MemorySectionAddresses[RxGFIR3c][1] = 0x05A7;
+
+ mRegistersMap->InitializeDefaultValues(LMS7parameterList);
+}
+
+LMS7002M::~LMS7002M()
+{
+
+}
+
+/** @brief Sends reset signal to chip, after reset enables B channel controls
+ @return 0-success, other-failure
+*/
+liblms7_status LMS7002M::ResetChip()
+{
+ if (controlPort == NULL)
+ return LIBLMS7_NO_CONNECTION_MANAGER;
+ if (controlPort->IsOpen() == false)
+ return LIBLMS7_NOT_CONNECTED;
+
+ LMScomms::GenericPacket pkt;
+ pkt.cmd = CMD_LMS7002_RST;
+ pkt.outBuffer.push_back(LMS_RST_PULSE);
+ controlPort->TransferPacket(pkt);
+ if (pkt.status == STATUS_COMPLETED_CMD)
+ {
+ Modify_SPI_Reg_bits(LMS7param(MIMO_SISO), 0); //enable B channel after reset
+ return LIBLMS7_SUCCESS;
+ }
+ else
+ return LIBLMS7_FAILURE;
+}
+
+liblms7_status LMS7002M::LoadConfigLegacyFile(const char* filename)
+{
+ ifstream f(filename);
+ if (f.good() == false) //file not found
+ {
+ f.close();
+ return LIBLMS7_FILE_NOT_FOUND;
+ }
+ f.close();
+ uint16_t addr = 0;
+ uint16_t value = 0;
+ uint8_t ch = (uint8_t)Get_SPI_Reg_bits(LMS7param(MAC)); //remember used channel
+ liblms7_status status;
+ typedef INI ini_t;
+ ini_t parser(filename, true);
+ if (parser.select("FILE INFO") == false)
+ return LIBLMS7_FILE_INVALID_FORMAT;
+
+ string type = "";
+ type = parser.get("type", "undefined");
+ stringstream ss;
+ if (type.find("LMS7002 configuration") == string::npos)
+ {
+ ss << "File " << filename << " not recognized" << endl;
+ return LIBLMS7_FILE_INVALID_FORMAT;
+ }
+
+ int fileVersion = 0;
+ fileVersion = parser.get("version", 0);
+
+ vector addrToWrite;
+ vector dataToWrite;
+ if (fileVersion == 1)
+ {
+ if (parser.select("Reference clocks"))
+ {
+ mRefClkSXR_MHz = parser.get("SXR reference frequency MHz", 30.72);
+ mRefClkSXT_MHz = parser.get("SXT reference frequency MHz", 30.72);
+ }
+
+ if (parser.select("LMS7002 registers ch.A") == true)
+ {
+ ini_t::sectionsit_t section = parser.sections.find("LMS7002 registers ch.A");
+
+ uint16_t x0020_value = 0;
+ Modify_SPI_Reg_bits(LMS7param(MAC), 1); //select A channel
+ for (ini_t::keysit_t pairs = section->second->begin(); pairs != section->second->end(); pairs++)
+ {
+ sscanf(pairs->first.c_str(), "%hx", &addr);
+ sscanf(pairs->second.c_str(), "%hx", &value);
+ if (addr == LMS7param(MAC).address) //skip register containing channel selection
+ {
+ x0020_value = value;
+ continue;
+ }
+ addrToWrite.push_back(addr);
+ dataToWrite.push_back(value);
+ }
+ status = SPI_write_batch(&addrToWrite[0], &dataToWrite[0], addrToWrite.size());
+ if (status != LIBLMS7_SUCCESS && status != LIBLMS7_NOT_CONNECTED)
+ return status;
+
+ //parse FCW or PHO
+ if (parser.select("NCO Rx ch.A") == true)
+ {
+ char varname[64];
+ int mode = Get_SPI_Reg_bits(LMS7param(MODE_RX));
+ if (mode == 0) //FCW
+ {
+ for (int i = 0; i < 16; ++i)
+ {
+ sprintf(varname, "FCW%02i", i);
+ SetNCOFrequency(LMS7002M::Rx, i, parser.get(varname, 0.0));
+ }
+ }
+ else
+ {
+ for (int i = 0; i < 16; ++i)
+ {
+ sprintf(varname, "PHO%02i", i);
+ SetNCOPhaseOffset(LMS7002M::Rx, i, parser.get(varname, 0.0));
+ }
+ }
+ }
+ if (parser.select("NCO Tx ch.A") == true)
+ {
+ char varname[64];
+ int mode = Get_SPI_Reg_bits(LMS7param(MODE_TX));
+ if (mode == 0) //FCW
+ {
+ for (int i = 0; i < 16; ++i)
+ {
+ sprintf(varname, "FCW%02i", i);
+ SetNCOFrequency(LMS7002M::Tx, i, parser.get(varname, 0.0));
+ }
+ }
+ else
+ {
+ for (int i = 0; i < 16; ++i)
+ {
+ sprintf(varname, "PHO%02i", i);
+ SetNCOPhaseOffset(LMS7002M::Tx, i, parser.get(varname, 0.0));
+ }
+ }
+ }
+ status = SPI_write(0x0020, x0020_value);
+ if (status != LIBLMS7_SUCCESS && status != LIBLMS7_NOT_CONNECTED)
+ return status;
+ }
+
+ Modify_SPI_Reg_bits(LMS7param(MAC), 2);
+
+ if (parser.select("LMS7002 registers ch.B") == true)
+ {
+ addrToWrite.clear();
+ dataToWrite.clear();
+ ini_t::sectionsit_t section = parser.sections.find("LMS7002 registers ch.B");
+ for (ini_t::keysit_t pairs = section->second->begin(); pairs != section->second->end(); pairs++)
+ {
+ sscanf(pairs->first.c_str(), "%hx", &addr);
+ sscanf(pairs->second.c_str(), "%hx", &value);
+ addrToWrite.push_back(addr);
+ dataToWrite.push_back(value);
+ }
+ Modify_SPI_Reg_bits(LMS7param(MAC), 2); //select B channel
+ status = SPI_write_batch(&addrToWrite[0], &dataToWrite[0], addrToWrite.size());
+ if (status != LIBLMS7_SUCCESS && status != LIBLMS7_NOT_CONNECTED)
+ return status;
+
+ //parse FCW or PHO
+ if (parser.select("NCO Rx ch.B") == true)
+ {
+ char varname[64];
+ int mode = Get_SPI_Reg_bits(LMS7param(MODE_RX));
+ if (mode == 0) //FCW
+ {
+ for (int i = 0; i < 16; ++i)
+ {
+ sprintf(varname, "FCW%02i", i);
+ SetNCOFrequency(LMS7002M::Rx, i, parser.get(varname, 0.0));
+ }
+ }
+ else
+ {
+ for (int i = 0; i < 16; ++i)
+ {
+ sprintf(varname, "PHO%02i", i);
+ SetNCOPhaseOffset(LMS7002M::Rx, i, parser.get(varname, 0.0));
+ }
+ }
+ }
+ if (parser.select("NCO Tx ch.A") == true)
+ {
+ char varname[64];
+ int mode = Get_SPI_Reg_bits(LMS7param(MODE_TX));
+ if (mode == 0) //FCW
+ {
+ for (int i = 0; i < 16; ++i)
+ {
+ sprintf(varname, "FCW%02i", i);
+ SetNCOFrequency(LMS7002M::Tx, i, parser.get(varname, 0.0));
+ }
+ }
+ else
+ {
+ for (int i = 0; i < 16; ++i)
+ {
+ sprintf(varname, "PHO%02i", i);
+ SetNCOPhaseOffset(LMS7002M::Tx, i, parser.get(varname, 0.0));
+ }
+ }
+ }
+ }
+ Modify_SPI_Reg_bits(LMS7param(MAC), ch);
+ return LIBLMS7_SUCCESS;
+ }
+ else
+ return LIBLMS7_FILE_INVALID_FORMAT;
+ return LIBLMS7_FAILURE;
+}
+
+/** @brief Reads configuration file and uploads registers to chip
+ @param filename Configuration source file
+ @return 0-success, other-failure
+*/
+liblms7_status LMS7002M::LoadConfig(const char* filename)
+{
+ ifstream f(filename);
+ if (f.good() == false) //file not found
+ {
+ f.close();
+ return LIBLMS7_FILE_NOT_FOUND;
+ }
+ f.close();
+ uint16_t addr = 0;
+ uint16_t value = 0;
+ uint8_t ch = (uint8_t)Get_SPI_Reg_bits(LMS7param(MAC)); //remember used channel
+
+ liblms7_status status;
+ typedef INI ini_t;
+ ini_t parser(filename, true);
+ if (parser.select("file_info") == false)
+ {
+ //try loading as legacy format
+ status = LoadConfigLegacyFile(filename);
+ Modify_SPI_Reg_bits(MAC, 1);
+ return status;
+ }
+ string type = "";
+ type = parser.get("type", "undefined");
+ stringstream ss;
+ if (type.find("lms7002m_minimal_config") == string::npos)
+ {
+ ss << "File " << filename << " not recognized" << endl;
+ return LIBLMS7_FILE_INVALID_FORMAT;
+ }
+
+ int fileVersion = 0;
+ fileVersion = parser.get("version", 0);
+
+ vector addrToWrite;
+ vector dataToWrite;
+
+ if (fileVersion == 1)
+ {
+ if(parser.select("lms7002_registers_a") == true)
+ {
+ ini_t::sectionsit_t section = parser.sections.find("lms7002_registers_a");
+
+ uint16_t x0020_value = 0;
+ Modify_SPI_Reg_bits(LMS7param(MAC), 1); //select A channel
+ for (ini_t::keysit_t pairs = section->second->begin(); pairs != section->second->end(); pairs++)
+ {
+ sscanf(pairs->first.c_str(), "%hx", &addr);
+ sscanf(pairs->second.c_str(), "%hx", &value);
+ if (addr == LMS7param(MAC).address) //skip register containing channel selection
+ {
+ x0020_value = value;
+ continue;
+ }
+ addrToWrite.push_back(addr);
+ dataToWrite.push_back(value);
+ }
+ status = SPI_write_batch(&addrToWrite[0], &dataToWrite[0], addrToWrite.size());
+ if (status != LIBLMS7_SUCCESS && status != LIBLMS7_NOT_CONNECTED)
+ return status;
+ status = SPI_write(0x0020, x0020_value);
+ if (status != LIBLMS7_SUCCESS && status != LIBLMS7_NOT_CONNECTED)
+ return status;
+ Modify_SPI_Reg_bits(LMS7param(MAC), 2);
+ if (status != LIBLMS7_SUCCESS && status != LIBLMS7_NOT_CONNECTED)
+ return status;
+ }
+
+ if (parser.select("lms7002_registers_b") == true)
+ {
+ addrToWrite.clear();
+ dataToWrite.clear();
+ ini_t::sectionsit_t section = parser.sections.find("lms7002_registers_b");
+ for (ini_t::keysit_t pairs = section->second->begin(); pairs != section->second->end(); pairs++)
+ {
+ sscanf(pairs->first.c_str(), "%hx", &addr);
+ sscanf(pairs->second.c_str(), "%hx", &value);
+ addrToWrite.push_back(addr);
+ dataToWrite.push_back(value);
+ }
+ Modify_SPI_Reg_bits(LMS7param(MAC), 2); //select B channel
+ status = SPI_write_batch(&addrToWrite[0], &dataToWrite[0], addrToWrite.size());
+ if (status != LIBLMS7_SUCCESS && status != LIBLMS7_NOT_CONNECTED)
+ return status;
+ }
+ Modify_SPI_Reg_bits(LMS7param(MAC), ch);
+
+ parser.select("reference_clocks");
+ mRefClkSXR_MHz = parser.get("sxr_ref_clk_mhz", 30.72);
+ mRefClkSXT_MHz = parser.get("sxt_ref_clk_mhz", 30.72);
+ }
+
+ Modify_SPI_Reg_bits(MAC, 1);
+ if (controlPort == NULL)
+ return LIBLMS7_NO_CONNECTION_MANAGER;
+ if (controlPort->IsOpen() == false)
+ return LIBLMS7_NOT_CONNECTED;
+ return LIBLMS7_SUCCESS;
+}
+
+/** @brief Reads all registers from chip and saves to file
+ @param filename destination filename
+ @return 0-success, other failure
+*/
+liblms7_status LMS7002M::SaveConfig(const char* filename)
+{
+ liblms7_status status;
+ typedef INI<> ini_t;
+ ini_t parser(filename, true);
+ parser.create("file_info");
+ parser.set("type", "lms7002m_minimal_config");
+ parser.set("version", 1);
+
+ char addr[80];
+ char value[80];
+
+ uint8_t ch = (uint8_t)Get_SPI_Reg_bits(LMS7param(MAC));
+
+ vector addrToRead;
+ for (uint8_t i = 0; i < MEMORY_SECTIONS_COUNT; ++i)
+ for (uint16_t addr = MemorySectionAddresses[i][0]; addr <= MemorySectionAddresses[i][1]; ++addr)
+ addrToRead.push_back(addr);
+ vector dataReceived;
+ dataReceived.resize(addrToRead.size(), 0);
+
+ parser.create("lms7002_registers_a");
+ Modify_SPI_Reg_bits(LMS7param(MAC), 1);
+ for (uint16_t i = 0; i < addrToRead.size(); ++i)
+ {
+ dataReceived[i] = Get_SPI_Reg_bits(addrToRead[i], 15, 0, false);
+ sprintf(addr, "0x%04X", addrToRead[i]);
+ sprintf(value, "0x%04X", dataReceived[i]);
+ parser.set(addr, value);
+ }
+
+ parser.create("lms7002_registers_b");
+ addrToRead.clear(); //add only B channel addresses
+ for (uint8_t i = 0; i < MEMORY_SECTIONS_COUNT; ++i)
+ for (uint16_t addr = MemorySectionAddresses[i][0]; addr <= MemorySectionAddresses[i][1]; ++addr)
+ if (addr >= 0x0100)
+ addrToRead.push_back(addr);
+
+ Modify_SPI_Reg_bits(LMS7param(MAC), 2);
+ for (uint16_t i = 0; i < addrToRead.size(); ++i)
+ {
+ dataReceived[i] = Get_SPI_Reg_bits(addrToRead[i], 15, 0, false);
+ sprintf(addr, "0x%04X", addrToRead[i]);
+ sprintf(value, "0x%04X", dataReceived[i]);
+ parser.set(addr, value);
+ }
+
+ Modify_SPI_Reg_bits(LMS7param(MAC), ch); //retore previously used channel
+
+ parser.create("reference_clocks");
+ parser.set("sxt_ref_clk_mhz", mRefClkSXT_MHz);
+ parser.set("sxr_ref_clk_mhz", mRefClkSXR_MHz);
+ parser.save(filename);
+ return LIBLMS7_SUCCESS;
+}
+
+/** @brief Returns reference clock in MHz used for SXT or SXR
+ @param Tx transmitter or receiver selection
+*/
+float_type LMS7002M::GetReferenceClk_SX(bool tx)
+{
+ return tx ? mRefClkSXT_MHz : mRefClkSXR_MHz;
+}
+
+/** @return Current CLKGEN frequency in MHz
+ Returned frequency depends on reference clock used for Receiver
+*/
+float_type LMS7002M::GetFrequencyCGEN_MHz()
+{
+ float_type dMul = (mRefClkSXR_MHz/2.0)/(Get_SPI_Reg_bits(LMS7param(DIV_OUTCH_CGEN))+1); //DIV_OUTCH_CGEN
+ uint16_t gINT = Get_SPI_Reg_bits(0x0088, 13, 0); //read whole register to reduce SPI transfers
+ uint32_t gFRAC = ((gINT & 0xF) * 65536) | Get_SPI_Reg_bits(0x0087, 15, 0);
+ return dMul * (((gINT>>4) + 1 + gFRAC/1048576.0));
+}
+
+/** @brief Returns TSP reference frequency
+ @param tx TxTSP or RxTSP selection
+ @return TSP reference frequency in MHz
+*/
+float_type LMS7002M::GetReferenceClk_TSP_MHz(bool tx)
+{
+ float_type cgenFreq = GetFrequencyCGEN_MHz();
+ float_type clklfreq = cgenFreq/pow(2.0, Get_SPI_Reg_bits(LMS7param(CLKH_OV_CLKL_CGEN)));
+ if(Get_SPI_Reg_bits(LMS7param(EN_ADCCLKH_CLKGN)) == 0)
+ return tx ? clklfreq : cgenFreq/4.0;
+ else
+ return tx ? cgenFreq : clklfreq/4.0;
+}
+
+/** @brief Sets CLKGEN frequency, calculations use receiver'r reference clock
+ @param freq_MHz desired frequency in MHz
+ @return 0-succes, other-cannot deliver desired frequency
+*/
+liblms7_status LMS7002M::SetFrequencyCGEN(const float_type freq_MHz)
+{
+ float_type dFvco;
+ float_type dFrac;
+ int16_t iHdiv;
+
+ //VCO frequency selection according to F_CLKH
+ iHdiv = (int16_t)((gCGEN_VCO_frequencies[1]/ 2) / freq_MHz) - 1;
+ dFvco = 2*(iHdiv+1) * freq_MHz;
+
+ //Integer division
+ uint16_t gINT = (uint16_t)(dFvco/mRefClkSXR_MHz - 1);
+
+ //Fractional division
+ dFrac = dFvco/mRefClkSXR_MHz - (uint32_t)(dFvco/mRefClkSXR_MHz);
+ uint32_t gFRAC = (uint32_t)(dFrac * 1048576);
+
+ Modify_SPI_Reg_bits(LMS7param(INT_SDM_CGEN), gINT); //INT_SDM_CGEN
+ Modify_SPI_Reg_bits(0x0087, 15, 0, gFRAC&0xFFFF); //INT_SDM_CGEN[15:0]
+ Modify_SPI_Reg_bits(0x0088, 3, 0, gFRAC>>16); //INT_SDM_CGEN[19:16]
+ Modify_SPI_Reg_bits(LMS7param(DIV_OUTCH_CGEN), iHdiv); //DIV_OUTCH_CGEN
+
+ return TuneVCO(VCO_CGEN);
+}
+
+/** @brief Performs VCO tuning operations for CLKGEN, SXR, SXT modules
+ @param module module selection for tuning 0-cgen, 1-SXR, 2-SXT
+ @return 0-success, other-failure
+*/
+liblms7_status LMS7002M::TuneVCO(VCO_Module module) // 0-cgen, 1-SXR, 2-SXT
+{
+ if (controlPort == NULL)
+ return LIBLMS7_NO_CONNECTION_MANAGER;
+ if (controlPort->IsOpen() == false)
+ return LIBLMS7_NOT_CONNECTED;
+ int8_t i;
+ uint8_t cmphl; //comparators
+ int16_t csw_lowest = -1;
+ uint16_t addrVCOpd; // VCO power down address
+ uint16_t addrCSW_VCO;
+ uint16_t addrCMP; //comparator address
+ uint8_t lsb; //SWC lsb index
+ uint8_t msb; //SWC msb index
+
+ uint8_t ch = (uint8_t)Get_SPI_Reg_bits(LMS7param(MAC)); //remember used channel
+
+ if(module != VCO_CGEN) //set addresses to SX module
+ {
+ Modify_SPI_Reg_bits(LMS7param(MAC), module);
+ addrVCOpd = LMS7param(PD_VCO).address;
+ addrCSW_VCO = LMS7param(CSW_VCO).address;
+ lsb = LMS7param(CSW_VCO).lsb;
+ msb = LMS7param(CSW_VCO).msb;
+ addrCMP = LMS7param(VCO_CMPHO).address;
+ }
+ else //set addresses to CGEN module
+ {
+ addrVCOpd = LMS7param(PD_VCO_CGEN).address;
+ addrCSW_VCO = LMS7param(CSW_VCO_CGEN).address;
+ lsb = LMS7param(CSW_VCO_CGEN).lsb;
+ msb = LMS7param(CSW_VCO_CGEN).msb;
+ addrCMP = LMS7param(VCO_CMPHO_CGEN).address;
+ }
+ // Initialization
+ Modify_SPI_Reg_bits (addrVCOpd, 2, 1, 0); //activate VCO and comparator
+ if (Get_SPI_Reg_bits(addrVCOpd, 2, 1) != 0)
+ return LIBLMS7_VCO_IS_POWERED_DOWN;
+ if(module == VCO_CGEN)
+ Modify_SPI_Reg_bits(LMS7param(SPDUP_VCO_CGEN), 1); //SHORT_NOISEFIL=1 SPDUP_VCO_ Short the noise filter resistor to speed up the settling time
+ else
+ Modify_SPI_Reg_bits(LMS7param(SPDUP_VCO), 1); //SHORT_NOISEFIL=1 SPDUP_VCO_ Short the noise filter resistor to speed up the settling time
+ Modify_SPI_Reg_bits (addrCSW_VCO , msb, lsb , 0); //Set SWC_VCO<7:0>=<00000000>
+
+ i=7;
+ while(i>=0)
+ {
+ Modify_SPI_Reg_bits (addrCSW_VCO, lsb + i, lsb + i, 1); // CSW_VCO=1
+ std::this_thread::sleep_for(std::chrono::milliseconds(5));
+ cmphl = (uint8_t)Get_SPI_Reg_bits(addrCMP, 13, 12);
+ if ( (cmphl&0x01) == 1) // reduce CSW
+ Modify_SPI_Reg_bits (addrCSW_VCO, lsb + i, lsb + i, 0); // CSW_VCO=0
+ if( cmphl == 2 && csw_lowest < 0)
+ csw_lowest = Get_SPI_Reg_bits(addrCSW_VCO, msb, lsb);
+ --i;
+ }
+ if(csw_lowest >= 0)
+ {
+ uint16_t csw_highest = Get_SPI_Reg_bits(addrCSW_VCO, msb, lsb);
+ if(csw_lowest == csw_highest)
+ {
+ while(csw_lowest>=0)
+ {
+ Modify_SPI_Reg_bits(addrCSW_VCO, msb, lsb, csw_lowest);
+ std::this_thread::sleep_for(std::chrono::milliseconds(5));
+ if(Get_SPI_Reg_bits(addrCMP, 13, 12) == 0)
+ {
+ ++csw_lowest;
+ break;
+ }
+ else
+ --csw_lowest;
+ }
+ }
+ Modify_SPI_Reg_bits(addrCSW_VCO, msb, lsb, csw_lowest+(csw_highest-csw_lowest)/2);
+ }
+ if (module == VCO_CGEN)
+ Modify_SPI_Reg_bits(LMS7param(SPDUP_VCO_CGEN), 0); //SHORT_NOISEFIL=1 SPDUP_VCO_ Short the noise filter resistor to speed up the settling time
+ else
+ Modify_SPI_Reg_bits(LMS7param(SPDUP_VCO), 0); //SHORT_NOISEFIL=1 SPDUP_VCO_ Short the noise filter resistor to speed up the settling time
+ cmphl = (uint8_t)Get_SPI_Reg_bits(addrCMP, 13, 12);
+ Modify_SPI_Reg_bits(LMS7param(MAC), ch); //restore previously used channel
+ if(cmphl == 2)
+ return LIBLMS7_SUCCESS;
+ else
+ return LIBLMS7_FAILURE;
+}
+
+/** @brief Returns given parameter value from chip register
+ @param param LMS7002M control parameter
+ @param fromChip read directly from chip
+ @return parameter value
+*/
+uint16_t LMS7002M::Get_SPI_Reg_bits(const LMS7Parameter ¶m, bool fromChip)
+{
+ return Get_SPI_Reg_bits(param.address, param.msb, param.lsb, fromChip);
+}
+
+/** @brief Returns given parameter value from chip register
+ @param address register address
+ @param msb most significant bit index
+ @param lsb least significant bit index
+ @param fromChip read directly from chip
+ @return register bits from selected interval, shifted to right by lsb bits
+*/
+uint16_t LMS7002M::Get_SPI_Reg_bits(uint16_t address, uint8_t msb, uint8_t lsb, bool fromChip)
+{
+ return (SPI_read(address, fromChip) & (~(~0<<(msb+1)))) >> lsb; //shift bits to LSB
+}
+
+/** @brief Change given parameter value
+ @param param LMS7002M control parameter
+ @param fromChip read initial value directly from chip
+ @param value new parameter value
+*/
+liblms7_status LMS7002M::Modify_SPI_Reg_bits(const LMS7Parameter ¶m, const uint16_t value, bool fromChip)
+{
+ return Modify_SPI_Reg_bits(param.address, param.msb, param.lsb, value, fromChip);
+}
+
+/** @brief Change given parameter value
+ @param address register address
+ @param value new bits value, the value is shifted left by lsb bits
+ @param fromChip read initial value directly from chip
+*/
+liblms7_status LMS7002M::Modify_SPI_Reg_bits(const uint16_t address, const uint8_t msb, const uint8_t lsb, const uint16_t value, bool fromChip)
+{
+ uint16_t spiDataReg = SPI_read(address, fromChip); //read current SPI reg data
+ uint16_t spiMask = (~(~0 << (msb - lsb + 1))) << (lsb); // creates bit mask
+ spiDataReg = (spiDataReg & (~spiMask)) | ((value << lsb) & spiMask);//clear bits
+ return SPI_write(address, spiDataReg); //write modified data back to SPI reg
+}
+
+/** @brief Modifies given registers with values applied using masks
+ @param addr array of register addresses
+ @param masks array of applied masks
+ @param values array of values to be written
+ @param start starting index of given arrays
+ @param stop end index of given arrays
+*/
+liblms7_status LMS7002M::Modify_SPI_Reg_mask(const uint16_t *addr, const uint16_t *masks, const uint16_t *values, uint8_t start, uint8_t stop)
+{
+ liblms7_status status;
+ uint16_t reg_data;
+ vector addresses;
+ vector data;
+ while (start <= stop)
+ {
+ reg_data = SPI_read(addr[start], true, &status); //read current SPI reg data
+ reg_data &= ~masks[start];//clear bits
+ reg_data |= (values[start] & masks[start]);
+ addresses.push_back(addr[start]);
+ data.push_back(reg_data);
+ ++start;
+ }
+ if (status != LIBLMS7_SUCCESS)
+ return status;
+ SPI_write_batch(&addresses[0], &data[0], addresses.size());
+ return status;
+}
+
+/** @brief Sets SX frequency
+ @param Tx Rx/Tx module selection
+ @param freq_MHz desired frequency in MHz
+ @param refClk_MHz reference clock in MHz
+ @return 0-success, other-cannot deliver requested frequency
+*/
+liblms7_status LMS7002M::SetFrequencySX(bool tx, float_type freq_MHz, float_type refClk_MHz)
+{
+ if (controlPort == NULL)
+ return LIBLMS7_NO_CONNECTION_MANAGER;
+ if (controlPort->IsOpen() == false)
+ return LIBLMS7_NOT_CONNECTED;
+ const uint8_t sxVCO_N = 2; //number of entries in VCO frequencies
+ const float_type m_dThrF = 5500; //threshold to enable additional divider
+ uint8_t ch; //remember used channel
+ float_type VCOfreq;
+ int8_t div_loch;
+ int8_t sel_vco;
+ bool canDeliverFrequency = false;
+ uint16_t integerPart;
+ uint32_t fractionalPart;
+ int8_t i;
+
+ //find required VCO frequency
+ for (div_loch = 6; div_loch >= 0; --div_loch)
+ {
+ VCOfreq = (1 << (div_loch + 1)) * freq_MHz;
+ if ((VCOfreq >= gVCO_frequency_table[0][0]) && (VCOfreq <= gVCO_frequency_table[2][sxVCO_N - 1]))
+ {
+ canDeliverFrequency = true;
+ break;
+ }
+ }
+ if (canDeliverFrequency == false)
+ return LIBLMS7_CANNOT_DELIVER_FREQUENCY;
+
+ integerPart = (uint16_t)(VCOfreq / (refClk_MHz * (1 + (VCOfreq > m_dThrF))) - 4);
+ fractionalPart = (uint32_t)((VCOfreq / (refClk_MHz * (1 + (VCOfreq > m_dThrF))) - (uint32_t)(VCOfreq / (refClk_MHz * (1 + (VCOfreq > m_dThrF))))) * 1048576);
+
+ ch = (uint8_t)Get_SPI_Reg_bits(LMS7param(MAC));
+ Modify_SPI_Reg_bits(LMS7param(MAC), tx + 1);
+ Modify_SPI_Reg_bits(LMS7param(INT_SDM), integerPart); //INT_SDM
+ Modify_SPI_Reg_bits(0x011D, 15, 0, fractionalPart & 0xFFFF); //FRAC_SDM[15:0]
+ Modify_SPI_Reg_bits(0x011E, 3, 0, (fractionalPart >> 16)); //FRAC_SDM[19:16]
+ Modify_SPI_Reg_bits(LMS7param(DIV_LOCH), div_loch); //DIV_LOCH
+ Modify_SPI_Reg_bits(LMS7param(EN_DIV2_DIVPROG), (VCOfreq > m_dThrF)); //EN_DIV2_DIVPROG
+
+ //find which VCO supports required frequency
+ Modify_SPI_Reg_bits(LMS7param(PD_VCO), 0); //
+ Modify_SPI_Reg_bits(LMS7param(PD_VCO_COMP), 0); //
+ int cswBackup = Get_SPI_Reg_bits(LMS7param(CSW_VCO)); //remember to restore previous tune value
+ canDeliverFrequency = false;
+ int tuneScore[] = { -128, -128, -128 }; //best is closest to 0
+ for (sel_vco = 0; sel_vco < 3; ++sel_vco)
+ {
+ Modify_SPI_Reg_bits(LMS7param(SEL_VCO), sel_vco);
+ liblms7_status status = TuneVCO(tx ? VCO_SXT : VCO_SXR);
+ int csw = Get_SPI_Reg_bits(LMS7param(CSW_VCO), true);
+ tuneScore[sel_vco] = -128 + csw;
+ if (status == LIBLMS7_SUCCESS)
+ canDeliverFrequency = true;
+ }
+ if (abs(tuneScore[0]) < abs(tuneScore[1]))
+ {
+ if (abs(tuneScore[0]) < abs(tuneScore[2]))
+ sel_vco = 0;
+ else
+ sel_vco = 2;
+ }
+ else
+ {
+ if (abs(tuneScore[1]) < abs(tuneScore[2]))
+ sel_vco = 1;
+ else
+ sel_vco = 2;
+ }
+ Modify_SPI_Reg_bits(LMS7param(SEL_VCO), sel_vco);
+ Modify_SPI_Reg_bits(LMS7param(CSW_VCO), cswBackup);
+ Modify_SPI_Reg_bits(LMS7param(MAC), ch); //restore used channel
+ if (tx)
+ mRefClkSXT_MHz = refClk_MHz;
+ else
+ mRefClkSXR_MHz = refClk_MHz;
+ if (canDeliverFrequency == false)
+ return LIBLMS7_CANNOT_DELIVER_FREQUENCY;
+ return TuneVCO( tx ? VCO_SXT : VCO_SXR); //Rx-1, Tx-2
+}
+
+/** @brief Returns currently set SXR/SXT frequency
+ @return SX frequency MHz
+*/
+float_type LMS7002M::GetFrequencySX_MHz(bool Tx, float_type refClk_MHz)
+{
+ uint8_t ch = (uint8_t)Get_SPI_Reg_bits(LMS7param(MAC)); //remember previously used channel
+ float_type dMul;
+ if(Tx)
+ Modify_SPI_Reg_bits(LMS7param(MAC), 2); // Rx mac = 1, Tx max = 2
+ else
+ Modify_SPI_Reg_bits(LMS7param(MAC), 1); // Rx mac = 1, Tx max = 2
+ uint16_t gINT = Get_SPI_Reg_bits(0x011E, 13, 0); // read whole register to reduce SPI transfers
+ uint32_t gFRAC = ((gINT&0xF) * 65536) | Get_SPI_Reg_bits(0x011D, 15, 0);
+
+ dMul = (float_type)refClk_MHz / (1 << (Get_SPI_Reg_bits(LMS7param(DIV_LOCH)) + 1));
+ //Calculate real frequency according to the calculated parameters
+ dMul = dMul * ((gINT >> 4) + 4 + (float_type)gFRAC / 1048576.0) * (Get_SPI_Reg_bits(LMS7param(EN_DIV2_DIVPROG)) + 1);
+ Modify_SPI_Reg_bits(LMS7param(MAC), ch); //restore used channel
+ return dMul;
+}
+
+/** @brief Loads given DC_REG values into registers
+ @param tx TxTSP or RxTSP selection
+ @param I DC_REG I value
+ @param Q DC_REG Q value
+*/
+liblms7_status LMS7002M::LoadDC_REG_IQ(bool tx, int16_t I, int16_t Q)
+{
+ if(tx)
+ {
+ Modify_SPI_Reg_bits(LMS7param(DC_REG_TXTSP), I);
+ Modify_SPI_Reg_bits(LMS7param(TSGDCLDI_TXTSP), 0);
+ Modify_SPI_Reg_bits(LMS7param(TSGDCLDI_TXTSP), 1);
+ Modify_SPI_Reg_bits(LMS7param(TSGDCLDI_TXTSP), 0);
+ Modify_SPI_Reg_bits(LMS7param(DC_REG_TXTSP), Q);
+ Modify_SPI_Reg_bits(LMS7param(TSGDCLDQ_TXTSP), 0);
+ Modify_SPI_Reg_bits(LMS7param(TSGDCLDQ_TXTSP), 1);
+ Modify_SPI_Reg_bits(LMS7param(TSGDCLDQ_TXTSP), 0);
+ Modify_SPI_Reg_bits(LMS7param(DC_BYP_TXTSP), 0); //DC_BYP
+ }
+ else
+ {
+ Modify_SPI_Reg_bits(LMS7param(DC_REG_RXTSP), I);
+ Modify_SPI_Reg_bits(LMS7param(TSGDCLDI_RXTSP), 0);
+ Modify_SPI_Reg_bits(LMS7param(TSGDCLDI_RXTSP), 1);
+ Modify_SPI_Reg_bits(LMS7param(TSGDCLDI_RXTSP), 0);
+ Modify_SPI_Reg_bits(LMS7param(DC_REG_TXTSP), Q);
+ Modify_SPI_Reg_bits(LMS7param(TSGDCLDQ_RXTSP), 0);
+ Modify_SPI_Reg_bits(LMS7param(TSGDCLDQ_RXTSP), 1);
+ Modify_SPI_Reg_bits(LMS7param(TSGDCLDQ_RXTSP), 0);
+ Modify_SPI_Reg_bits(LMS7param(DC_BYP_RXTSP), 0); //DC_BYP
+ }
+ return LIBLMS7_SUCCESS;
+}
+
+/** @brief Sets chosen NCO's frequency
+ @param tx transmitter or receiver selection
+ @param index NCO index from 0 to 15
+ @param freq_MHz desired NCO frequency
+ @return 0-success, other-failure
+*/
+liblms7_status LMS7002M::SetNCOFrequency(bool tx, uint8_t index, float_type freq_MHz)
+{
+ if(index > 15)
+ return LIBLMS7_INDEX_OUT_OF_RANGE;
+ float_type refClk_MHz = GetReferenceClk_TSP_MHz(tx);
+ uint16_t addr = tx ? 0x0240 : 0x0440;
+ uint32_t fcw = (uint32_t)((freq_MHz/refClk_MHz)*4294967296);
+ SPI_write(addr+2+index*2, (fcw >> 16)); //NCO frequency control word register MSB part.
+ SPI_write(addr+3+index*2, fcw); //NCO frequency control word register LSB part.
+ return LIBLMS7_SUCCESS;
+}
+
+/** @brief Returns chosen NCO's frequency in MHz
+ @param tx transmitter or receiver selection
+ @param index NCO index from 0 to 15
+ @param fromChip read frequency directly from chip or local registers
+ @return NCO frequency in MHz
+*/
+float_type LMS7002M::GetNCOFrequency_MHz(bool tx, uint8_t index, const float_type refClk_MHz, bool fromChip)
+{
+ if(index > 15)
+ return LIBLMS7_INDEX_OUT_OF_RANGE;
+ uint16_t addr = tx ? 0x0240 : 0x0440;
+ uint32_t fcw = 0;
+ fcw |= SPI_read(addr + 2 + index * 2, fromChip) << 16; //NCO frequency control word register MSB part.
+ fcw |= SPI_read(addr + 3 + index * 2, fromChip); //NCO frequency control word register LSB part.
+ return refClk_MHz*(fcw/4294967296.0);
+}
+
+/** @brief Sets chosen NCO phase offset angle when memory table MODE is 0
+@param tx transmitter or receiver selection
+@param angle_deg phase offset angle in degrees
+@return 0-success, other-failure
+*/
+liblms7_status LMS7002M::SetNCOPhaseOffsetForMode0(bool tx, float_type angle_deg)
+{
+ uint16_t addr = tx ? 0x0241 : 0x0441;
+ uint16_t pho = (uint16_t)(65536 * (angle_deg / 360 ));
+ SPI_write(addr, pho);
+ return LIBLMS7_SUCCESS;
+}
+
+/** @brief Sets chosen NCO's phase offset angle
+ @param tx transmitter or receiver selection
+ @param index PHO index from 0 to 15
+ @param angle_deg phase offset angle in degrees
+ @return 0-success, other-failure
+*/
+liblms7_status LMS7002M::SetNCOPhaseOffset(bool tx, uint8_t index, float_type angle_deg)
+{
+ if(index > 15)
+ return LIBLMS7_INDEX_OUT_OF_RANGE;
+ uint16_t addr = tx ? 0x0244 : 0x0444;
+ uint16_t pho = (uint16_t)(65536*(angle_deg / 360));
+ SPI_write(addr+index, pho);
+ return LIBLMS7_SUCCESS;
+}
+
+/** @brief Returns chosen NCO's phase offset angle in radians
+ @param tx transmitter or receiver selection
+ @param index PHO index from 0 to 15
+ @return phase offset angle in degrees
+*/
+float_type LMS7002M::GetNCOPhaseOffset_Deg(bool tx, uint8_t index)
+{
+ uint16_t addr = tx ? 0x0244 : 0x0444;
+ uint16_t pho = SPI_read(addr+index);
+ float_type angle = 360*pho/65536.0;
+ return angle;
+}
+
+/** @brief Uploads given FIR coefficients to chip
+ @param tx Transmitter or receiver selection
+ @param GFIR_index GIR index from 0 to 2
+ @param coef array of coefficients
+ @param coefCount number of coefficients
+ @return 0-success, other-failure
+
+ This function does not change GFIR*_L or GFIR*_N parameters, they have to be set manually
+*/
+liblms7_status LMS7002M::SetGFIRCoefficients(bool tx, uint8_t GFIR_index, const int16_t *coef, uint8_t coefCount)
+{
+ uint8_t index;
+ uint8_t coefLimit;
+ uint16_t startAddr;
+ if (GFIR_index == 0)
+ startAddr = 0x0280;
+ else if (GFIR_index == 1)
+ startAddr = 0x02C0;
+ else
+ startAddr = 0x0300;
+
+ if (tx == false)
+ startAddr += 0x0200;
+ if (GFIR_index < 2)
+ coefLimit = 40;
+ else
+ coefLimit = 120;
+ if (coefCount > coefLimit)
+ return LIBLMS7_TOO_MANY_VALUES;
+ vector addresses;
+ for (index = 0; index < coefCount; ++index)
+ addresses.push_back(startAddr + index + 24 * (index / 40));
+ SPI_write_batch(&addresses[0], (uint16_t*)coef, coefCount);
+ return LIBLMS7_SUCCESS;
+}
+
+/** @brief Returns currently loaded FIR coefficients
+ @param tx Transmitter or receiver selection
+ @param GFIR_index GIR index from 0 to 2
+ @param coef array of returned coefficients
+ @param coefCount number of coefficients to read
+ @return 0-success, other-failure
+*/
+liblms7_status LMS7002M::GetGFIRCoefficients(bool tx, uint8_t GFIR_index, int16_t *coef, uint8_t coefCount)
+{
+ liblms7_status status = LIBLMS7_FAILURE;
+ uint8_t index;
+ uint8_t coefLimit;
+ uint16_t startAddr;
+ if(GFIR_index == 0)
+ startAddr = 0x0280;
+ else if (GFIR_index == 1)
+ startAddr = 0x02C0;
+ else
+ startAddr = 0x0300;
+
+ if (tx == false)
+ startAddr += 0x0200;
+ if (GFIR_index < 2)
+ coefLimit = 40;
+ else
+ coefLimit = 120;
+ if (coefCount > coefLimit)
+ return LIBLMS7_TOO_MANY_VALUES;
+
+ std::vector addresses;
+ for (index = 0; index < coefCount; ++index)
+ addresses.push_back(startAddr + index + 24 * (index / 40));
+ uint16_t spiData[120];
+ memset(spiData, 0, 120 * sizeof(uint16_t));
+ if (controlPort->IsOpen())
+ {
+ status = SPI_read_batch(&addresses[0], spiData, coefCount);
+ for (index = 0; index < coefCount; ++index)
+ coef[index] = spiData[index];
+ }
+ else
+ {
+ const int channel = Get_SPI_Reg_bits(LMS7param(MAC), false) > 1 ? 1 : 0;
+ for (index = 0; index < coefCount; ++index)
+ coef[index] = mRegistersMap->GetValue(channel, addresses[index]);
+ status = LIBLMS7_SUCCESS;
+ }
+
+ return status;
+}
+
+/** @brief Write given data value to whole register
+ @param address SPI address
+ @param data new register value
+ @return 0-succes, other-failure
+*/
+liblms7_status LMS7002M::SPI_write(uint16_t address, uint16_t data)
+{
+ if (controlPort == NULL)
+ return LIBLMS7_NO_CONNECTION_MANAGER;
+
+ if ((mRegistersMap->GetValue(0, LMS7param(MAC).address) & 0x0003) > 1 && address >= 0x0100)
+ mRegistersMap->SetValue(1, address, data);
+ else
+ mRegistersMap->SetValue(0, address, data);
+
+ if (controlPort->IsOpen() == false)
+ return LIBLMS7_NOT_CONNECTED;
+
+ LMScomms::GenericPacket pkt;
+ pkt.cmd = CMD_LMS7002_WR;
+ pkt.outBuffer.push_back(address >> 8);
+ pkt.outBuffer.push_back(address & 0xFF);
+ pkt.outBuffer.push_back(data >> 8);
+ pkt.outBuffer.push_back(data & 0xFF);
+ controlPort->TransferPacket(pkt);
+ if (pkt.status == STATUS_COMPLETED_CMD)
+ return LIBLMS7_SUCCESS;
+ else
+ return LIBLMS7_FAILURE;
+}
+
+/** @brief Reads whole register value from given address
+ @param address SPI address
+ @param status operation status(optional)
+ @param fromChip read value directly from chip
+ @return register value
+*/
+uint16_t LMS7002M::SPI_read(uint16_t address, bool fromChip, liblms7_status *status)
+{
+ if (controlPort == NULL)
+ {
+ if (status)
+ *status = LIBLMS7_NO_CONNECTION_MANAGER;
+ }
+ if (controlPort->IsOpen() == false || fromChip == false)
+ {
+ if ((mRegistersMap->GetValue(0, LMS7param(MAC).address) & 0x0003) > 1 && address >= 0x0100)
+ return mRegistersMap->GetValue(1, address);
+ else
+ return mRegistersMap->GetValue(0, address);
+ }
+
+ LMScomms::GenericPacket pkt;
+ pkt.cmd = CMD_LMS7002_RD;
+ pkt.outBuffer.push_back(address >> 8);
+ pkt.outBuffer.push_back(address & 0xFF);
+ if (controlPort->TransferPacket(pkt) == LMScomms::TRANSFER_SUCCESS)
+ {
+ if (status)
+ *status = (pkt.status == STATUS_COMPLETED_CMD ? LIBLMS7_SUCCESS : LIBLMS7_FAILURE);
+ return (pkt.inBuffer[2] << 8) | pkt.inBuffer[3];
+ }
+ else
+ return 0;
+}
+
+/** @brief Batches multiple register writes into least ammount of transactions
+ @param spiAddr spi register addresses to be written
+ @param spiData registers data to be written
+ @param cnt number of registers to write
+ @return 0-success, other-failure
+*/
+liblms7_status LMS7002M::SPI_write_batch(const uint16_t* spiAddr, const uint16_t* spiData, uint16_t cnt)
+{
+ LMScomms::GenericPacket pkt;
+ pkt.cmd = CMD_LMS7002_WR;
+ uint32_t index = 0;
+ for (uint32_t i = 0; i < cnt; ++i)
+ {
+ pkt.outBuffer.push_back(spiAddr[i] >> 8);
+ pkt.outBuffer.push_back(spiAddr[i] & 0xFF);
+ pkt.outBuffer.push_back(spiData[i] >> 8);
+ pkt.outBuffer.push_back(spiData[i] & 0xFF);
+
+ if ((mRegistersMap->GetValue(0, LMS7param(MAC).address) & 0x0003) > 1)
+ mRegistersMap->SetValue(1, spiAddr[i], spiData[i]);
+ else
+ mRegistersMap->SetValue(0, spiAddr[i], spiData[i]);
+
+ }
+ if (controlPort == NULL)
+ return LIBLMS7_NO_CONNECTION_MANAGER;
+ if (controlPort->IsOpen() == false)
+ return LIBLMS7_NOT_CONNECTED;
+
+ controlPort->TransferPacket(pkt);
+ if (pkt.status == STATUS_COMPLETED_CMD)
+ return LIBLMS7_SUCCESS;
+ else
+ return LIBLMS7_FAILURE;
+}
+
+/** @brief Batches multiple register reads into least amount of transactions
+ @param spiAddr SPI addresses to read
+ @param spiData array for read data
+ @param cnt number of registers to read
+ @return 0-success, other-failure
+*/
+liblms7_status LMS7002M::SPI_read_batch(const uint16_t* spiAddr, uint16_t* spiData, uint16_t cnt)
+{
+ LMScomms::GenericPacket pkt;
+ pkt.cmd = CMD_LMS7002_RD;
+ uint32_t index = 0;
+ for (uint32_t i = 0; i < cnt; ++i)
+ {
+ pkt.outBuffer.push_back(spiAddr[i] >> 8);
+ pkt.outBuffer.push_back(spiAddr[i] & 0xFF);
+ }
+ if (controlPort == NULL)
+ return LIBLMS7_NO_CONNECTION_MANAGER;
+ if (controlPort->IsOpen() == false)
+ return LIBLMS7_NOT_CONNECTED;
+
+ LMScomms::TransferStatus status = controlPort->TransferPacket(pkt);
+ if (status != LMScomms::TRANSFER_SUCCESS)
+ return LIBLMS7_FAILURE;
+
+ for (uint32_t i = 0; i < cnt; ++i)
+ {
+ spiData[i] = (pkt.inBuffer[2*sizeof(uint16_t)*i + 2] << 8) | pkt.inBuffer[2*sizeof(uint16_t)*i + 3];
+ if ((mRegistersMap->GetValue(0, LMS7param(MAC).address) & 0x0003) > 1)
+ mRegistersMap->SetValue(1, spiAddr[i], spiData[i]);
+ else
+ mRegistersMap->SetValue(0, spiAddr[i], spiData[i]);
+ }
+ return pkt.status == STATUS_COMPLETED_CMD ? LIBLMS7_SUCCESS : LIBLMS7_FAILURE;
+ /*
+ for(int i=0; iGetValue(0, LMS7param(MAC).address) & 0x0003) > 1)
+ mRegistersMap->SetValue(1, spiAddr[i], spiData[i]);
+ else
+ mRegistersMap->SetValue(0, spiAddr[i], spiData[i]);
+ }
+ return LIBLMS7_SUCCESS;*/
+}
+
+/** @brief Performs registers test by writing known data and confirming readback data
+ @return 0-registers test passed, other-failure
+*/
+liblms7_status LMS7002M::RegistersTest()
+{
+ char chex[16];
+ if (controlPort == NULL)
+ return LIBLMS7_NO_CONNECTION_MANAGER;
+ if (controlPort->IsOpen() == false)
+ return LIBLMS7_NOT_CONNECTED;
+
+ liblms7_status status;
+ uint8_t ch = (uint8_t)Get_SPI_Reg_bits(LMS7param(MAC));
+
+ //backup both channel data for restoration after test
+ vector ch1Addresses;
+ for (uint8_t i = 0; i < MEMORY_SECTIONS_COUNT; ++i)
+ for (uint16_t addr = MemorySectionAddresses[i][0]; addr <= MemorySectionAddresses[i][1]; ++addr)
+ ch1Addresses.push_back(addr);
+ vector ch1Data;
+ ch1Data.resize(ch1Addresses.size(), 0);
+
+ //backup A channel
+ Modify_SPI_Reg_bits(LMS7param(MAC), 1);
+ status = SPI_read_batch(&ch1Addresses[0], &ch1Data[0], ch1Addresses.size());
+ if (status != LIBLMS7_SUCCESS)
+ return status;
+
+ vector ch2Addresses;
+ for (uint8_t i = 0; i < MEMORY_SECTIONS_COUNT; ++i)
+ for (uint16_t addr = MemorySectionAddresses[i][0]; addr <= MemorySectionAddresses[i][1]; ++addr)
+ if (addr >= 0x0100)
+ ch2Addresses.push_back(addr);
+ vector ch2Data;
+ ch2Data.resize(ch2Addresses.size(), 0);
+
+ Modify_SPI_Reg_bits(LMS7param(MAC), 2);
+ status = SPI_read_batch(&ch2Addresses[0], &ch2Data[0], ch2Addresses.size());
+ if (status != LIBLMS7_SUCCESS)
+ return status;
+
+ //test registers
+ ResetChip();
+ Modify_SPI_Reg_bits(LMS7param(MIMO_SISO), 0);
+ Modify_SPI_Reg_bits(LMS7param(PD_RX_AFE2), 0);
+ Modify_SPI_Reg_bits(LMS7param(PD_TX_AFE2), 0);
+ Modify_SPI_Reg_bits(LMS7param(MAC), 1);
+
+ stringstream ss;
+
+ //check single channel memory sections
+ vector modulesToCheck = { AFE, BIAS, XBUF, CGEN, LDO, BIST, CDS, TRF, TBB, RFE, RBB, SX,
+ TxTSP, TxNCO, TxGFIR1, TxGFIR2, TxGFIR3a, TxGFIR3b, TxGFIR3c,
+ RxTSP, RxNCO, RxGFIR1, RxGFIR2, RxGFIR3a, RxGFIR3b, RxGFIR3c, LimeLight };
+ const char* moduleNames[] = { "AFE", "BIAS", "XBUF", "CGEN", "LDO", "BIST", "CDS", "TRF", "TBB", "RFE", "RBB", "SX",
+ "TxTSP", "TxNCO", "TxGFIR1", "TxGFIR2", "TxGFIR3a", "TxGFIR3b", "TxGFIR3c",
+ "RxTSP", "RxNCO", "RxGFIR1", "RxGFIR2", "RxGFIR3a", "RxGFIR3b", "RxGFIR3c", "LimeLight" };
+
+ const uint16_t patterns[] = { 0xAAAA, 0x5555 };
+ const uint8_t patternsCount = 2;
+
+ bool allTestSuccess = true;
+
+ for (unsigned i = 0; i < modulesToCheck.size(); ++i)
+ {
+ bool moduleTestsSuccess = true;
+ uint16_t startAddr = MemorySectionAddresses[modulesToCheck[i]][0];
+ uint16_t endAddr = MemorySectionAddresses[modulesToCheck[i]][1];
+ uint8_t channelCount = startAddr >= 0x0100 ? 2 : 1;
+ for (int cc = 1; cc <= channelCount; ++cc)
+ {
+ Modify_SPI_Reg_bits(LMS7param(MAC), cc);
+ sprintf(chex, "0x%04X", startAddr);
+ ss << moduleNames[i] << " [" << chex << ":";
+ sprintf(chex, "0x%04X", endAddr);
+ ss << chex << "]";
+ if (startAddr >= 0x0100)
+ ss << " Ch." << (cc == 1 ? "A" : "B");
+ ss << endl;
+ for (uint8_t p = 0; p < patternsCount; ++p)
+ moduleTestsSuccess &= RegistersTestInterval(startAddr, endAddr, patterns[p], ss) == LIBLMS7_SUCCESS;
+ }
+ allTestSuccess &= moduleTestsSuccess;
+ }
+
+ //restore register values
+ Modify_SPI_Reg_bits(LMS7param(MAC), 1);
+ SPI_write_batch(&ch1Addresses[0], &ch1Data[0], ch1Addresses.size());
+ Modify_SPI_Reg_bits(LMS7param(MAC), 2);
+ SPI_write_batch(&ch2Addresses[0], &ch2Data[0], ch2Addresses.size());
+ Modify_SPI_Reg_bits(LMS7param(MAC), ch);
+
+ fstream fout;
+ fout.open("registersTest.txt", ios::out);
+ fout << ss.str() << endl;
+ fout.close();
+
+ return allTestSuccess ? LIBLMS7_SUCCESS : LIBLMS7_FAILURE;
+}
+
+/** @brief Performs registers test for given address interval by writing given pattern data
+ @param startAddr first register address
+ @param endAddr last reigster address
+ @param pattern data to be written into registers
+ @return 0-register test passed, other-failure
+*/
+liblms7_status LMS7002M::RegistersTestInterval(uint16_t startAddr, uint16_t endAddr, uint16_t pattern, stringstream &ss)
+{
+ vector addrToWrite;
+ vector dataToWrite;
+ vector dataReceived;
+ vector dataMasks;
+
+ for (uint16_t addr = startAddr; addr <= endAddr; ++addr)
+ {
+ addrToWrite.push_back(addr);
+ }
+ dataMasks.resize(addrToWrite.size(), 0xFFFF);
+ for (uint16_t j = 0; j < sizeof(readOnlyRegisters)/sizeof(uint16_t); ++j)
+ for (uint16_t k = 0; k < addrToWrite.size(); ++k)
+ if (readOnlyRegisters[j] == addrToWrite[k])
+ {
+ dataMasks[k] = readOnlyRegistersMasks[j];
+ break;
+ }
+
+ dataToWrite.clear();
+ dataReceived.clear();
+ for (uint16_t j = 0; j < addrToWrite.size(); ++j)
+ {
+ if (addrToWrite[j] == 0x00A6)
+ dataToWrite.push_back(0x1 | pattern & ~0x2);
+ else if (addrToWrite[j] == 0x0084)
+ dataToWrite.push_back(pattern & ~0x19);
+ else
+ dataToWrite.push_back(pattern & dataMasks[j]);
+ }
+ dataReceived.resize(addrToWrite.size(), 0);
+ liblms7_status status;
+ status = SPI_write_batch(&addrToWrite[0], &dataToWrite[0], addrToWrite.size());
+ if (status != LIBLMS7_SUCCESS)
+ return status;
+ status = SPI_read_batch(&addrToWrite[0], &dataReceived[0], addrToWrite.size());
+ if (status != LIBLMS7_SUCCESS)
+ return status;
+ bool registersMatch = true;
+ char ctemp[16];
+ for (uint16_t j = 0; j < dataToWrite.size(); ++j)
+ {
+ if (dataToWrite[j] != (dataReceived[j] & dataMasks[j]))
+ {
+ registersMatch = false;
+ sprintf(ctemp, "0x%04X", addrToWrite[j]);
+ ss << "\t" << ctemp << "(wr/rd): ";
+ sprintf(ctemp, "0x%04X", dataToWrite[j]);
+ ss << ctemp << "/";
+ sprintf(ctemp, "0x%04X", dataReceived[j]);
+ ss << ctemp << endl;
+ }
+ }
+ if (registersMatch)
+ {
+ sprintf(ctemp, "0x%04X", pattern);
+ ss << "\tRegisters OK (" << ctemp << ")\n";
+ }
+ return registersMatch ? LIBLMS7_SUCCESS : LIBLMS7_FAILURE;
+}
+
+/** @brief Parameters setup instructions for Tx calibration
+ @return 0-success, other-failure
+*/
+liblms7_status LMS7002M::CalibrateTxSetup(float_type bandwidth_MHz)
+{
+ //Stage 2
+ uint8_t ch = (uint8_t)Get_SPI_Reg_bits(LMS7param(MAC));
+ uint8_t sel_band1_trf = (uint8_t)Get_SPI_Reg_bits(LMS7param(SEL_BAND1_TRF));
+ uint8_t sel_band2_trf = (uint8_t)Get_SPI_Reg_bits(LMS7param(SEL_BAND2_TRF));
+
+ //rfe
+ //reset RFE to defaults
+ SetDefaults(RFE);
+ if (sel_band1_trf == 1)
+ Modify_SPI_Reg_bits(LMS7param(SEL_PATH_RFE), 3); //SEL_PATH_RFE 3
+ else if (sel_band2_trf == 1)
+ Modify_SPI_Reg_bits(LMS7param(SEL_PATH_RFE), 2);
+ else
+ return LIBLMS7_BAND_NOT_SELECTED;
+
+ if (ch == 2)
+ Modify_SPI_Reg_bits(LMS7param(EN_NEXTRX_RFE), 1); // EN_NEXTTX_RFE 1
+
+ Modify_SPI_Reg_bits(LMS7param(G_RXLOOPB_RFE), 8); //G_RXLOOPB_RFE 8
+ Modify_SPI_Reg_bits(0x010C, 4, 3, 0); //PD_MXLOBUF_RFE 0, PD_QGEN_RFE 0
+ Modify_SPI_Reg_bits(LMS7param(CCOMP_TIA_RFE), 10); //CCOMP_TIA_RFE 10
+ Modify_SPI_Reg_bits(LMS7param(CFB_TIA_RFE), 2600); //CFB_TIA_RFE 2600
+ Modify_SPI_Reg_bits(LMS7param(ICT_LODC_RFE), 31); //ICT_LODC_RFE 31
+ Modify_SPI_Reg_bits(LMS7param(PD_LNA_RFE), 1);
+
+ //RBB
+ //reset RBB to defaults
+ SetDefaults(RBB);
+ Modify_SPI_Reg_bits(LMS7param(PD_LPFL_RBB), 0); //PD_LPFL_RBB 0
+ Modify_SPI_Reg_bits(LMS7param(RCC_CTL_LPFL_RBB), 0); //RCC_CTL_LPFL_RBB 0
+ Modify_SPI_Reg_bits(LMS7param(C_CTL_LPFL_RBB), 1500); //C_CTL_LPFL_RBB 1500
+ Modify_SPI_Reg_bits(LMS7param(G_PGA_RBB), 22); //G_PGA_RBB 22
+
+ //TRF
+ //reset TRF to defaults
+ //SetDefaults(TRF);
+ Modify_SPI_Reg_bits(LMS7param(L_LOOPB_TXPAD_TRF), 0); //L_LOOPB_TXPAD_TRF 0
+ Modify_SPI_Reg_bits(LMS7param(EN_LOOPB_TXPAD_TRF), 1); //EN_LOOPB_TXPAD_TRF 1
+ Modify_SPI_Reg_bits(LMS7param(EN_G_TRF), 0); //EN_G_TRF 0
+ if (ch == 2)
+ Modify_SPI_Reg_bits(LMS7param(EN_NEXTTX_TRF), 1); //EN_NEXTTX_TRF 1
+ Modify_SPI_Reg_bits(LMS7param(LOSS_LIN_TXPAD_TRF), 0); //LOSS_LIN_TXPAD_TRF 5
+ Modify_SPI_Reg_bits(LMS7param(LOSS_MAIN_TXPAD_TRF), 0); //LOSS_MAIN_TXPAD_TRF 5
+
+ //TBB
+ //reset TBB to defaults
+ /*SetDefaults(TBB);
+ Modify_SPI_Reg_bits(LMS7param(CG_IAMP_TBB), 9); //CG_IAMP_TBB 9
+ Modify_SPI_Reg_bits(LMS7param(ICT_IAMP_FRP_TBB), 1); //ICT_IAMP_FRP_TBB 1
+ Modify_SPI_Reg_bits(LMS7param(ICT_IAMP_GG_FRP_TBB), 6); //ICT_IAMP_GG_FRP_TBB 6
+ Modify_SPI_Reg_bits(LMS7param(RCAL_LPFH_TBB), 125); //RCAL_LPFH_TBB 0
+ */
+ //AFE
+ //reset AFE to defaults
+ uint8_t isel_dac_afe =(uint8_t) Get_SPI_Reg_bits(LMS7param(ISEL_DAC_AFE));
+ SetDefaults(AFE);
+ Modify_SPI_Reg_bits(LMS7param(PD_RX_AFE2), 0); //PD_RX_AFE2 0
+ Modify_SPI_Reg_bits(LMS7param(ISEL_DAC_AFE), isel_dac_afe);
+
+ if (ch == 2)
+ Modify_SPI_Reg_bits(LMS7param(PD_TX_AFE2), 0);
+ //BIAS
+ uint16_t backup = Get_SPI_Reg_bits(LMS7param(RP_CALIB_BIAS));
+ SetDefaults(BIAS);
+ Modify_SPI_Reg_bits(LMS7param(RP_CALIB_BIAS), backup); //RP_CALIB_BIAS
+
+ //XBUF
+ Modify_SPI_Reg_bits(0x0085, 2, 0, 1); //PD_XBUF_RX 0, PD_XBUF_TX 0, EN_G_XBUF 1
+
+ //CGEN
+ //reset CGEN to defaults
+ SetDefaults(CGEN);
+ //power up VCO
+ Modify_SPI_Reg_bits(LMS7param(PD_VCO_CGEN), 0);
+
+ if (SetFrequencyCGEN(122.88) != LIBLMS7_SUCCESS)
+ return LIBLMS7_FAILURE;
+ if (TuneVCO(VCO_CGEN) != LIBLMS7_SUCCESS)
+ return LIBLMS7_FAILURE;
+
+ //SXR
+ Modify_SPI_Reg_bits(LMS7param(MAC), 1);
+ SetDefaults(SX);
+ float_type SXTfreqMHz = GetFrequencySX_MHz(Tx, mRefClkSXT_MHz);
+
+ float_type SXRfreqMHz = SXTfreqMHz - bandwidth_MHz / 4 - 1;
+ if (SetFrequencySX(Rx, SXRfreqMHz, mRefClkSXR_MHz) != LIBLMS7_SUCCESS)
+ return LIBLMS7_FAILURE;
+ if (TuneVCO(VCO_SXR) != LIBLMS7_SUCCESS)
+ return LIBLMS7_FAILURE;
+
+ //SXT
+ Modify_SPI_Reg_bits(LMS7param(MAC), 2);
+ Modify_SPI_Reg_bits(LMS7param(PD_LOCH_T2RBUF), 1); //PD_LOCH_T2RBUF 1
+ if (SetFrequencySX(Tx, SXTfreqMHz, mRefClkSXT_MHz) != LIBLMS7_SUCCESS)
+ return LIBLMS7_FAILURE;
+ if (TuneVCO(VCO_SXT) != LIBLMS7_SUCCESS)
+ return LIBLMS7_FAILURE;
+ Modify_SPI_Reg_bits(LMS7param(MAC), ch);
+
+ //TXTSP
+ SetDefaults(TxTSP);
+ Modify_SPI_Reg_bits(0x0200, 3, 2, 0x3); //TSGMODE 1, INSEL 1
+ Modify_SPI_Reg_bits(0x0208, 6, 4, 0x7); //GFIR3_BYP 1, GFIR2_BYP 1, GFIR1_BYP 1
+ LoadDC_REG_IQ(Tx, (int16_t)0x7FFF, (int16_t)0x8000);
+ Modify_SPI_Reg_bits(LMS7param(MAC), ch);
+ Modify_SPI_Reg_bits(0x0440, 4, 0, 0); //TX SEL[3:0] = 0 & MODE = 0
+
+ float_type offset = 0.2;
+ if (bandwidth_MHz == 8)
+ {
+ //SXR
+ Modify_SPI_Reg_bits(LMS7param(MAC), 1);
+ SetDefaults(SX);
+ float_type SXTfreqMHz = GetFrequencySX_MHz(Tx, mRefClkSXT_MHz);
+
+ float_type sxrFreq = SXTfreqMHz - bandwidth_MHz / 4 - 1 - offset;
+ if (SetFrequencySX(Rx, sxrFreq, mRefClkSXR_MHz) != LIBLMS7_SUCCESS)
+ return LIBLMS7_FAILURE;
+ SetNCOFrequency(Tx, 0, bandwidth_MHz / 4 + offset);
+ }
+ else
+ SetNCOFrequency(Tx, 0, bandwidth_MHz / 4);
+
+ //RXTSP
+ SetDefaults(RxTSP);
+ Modify_SPI_Reg_bits(LMS7param(AGC_MODE_RXTSP), 1); //AGC_MODE 1
+ Modify_SPI_Reg_bits(0x040C, 7, 0, 0xBF);
+ Modify_SPI_Reg_bits(LMS7param(CAPSEL), 0);
+ Modify_SPI_Reg_bits(LMS7param(HBD_OVR_RXTSP), 0); //Decimation HBD ratio
+ Modify_SPI_Reg_bits(LMS7param(AGC_AVG_RXTSP), 0x7); //agc_avg iq corr
+
+ return LIBLMS7_SUCCESS;
+}
+
+/** @brief Flips the CAPTURE bit and returns digital RSSI value
+*/
+uint32_t LMS7002M::GetRSSI()
+{
+ Modify_SPI_Reg_bits(LMS7param(CAPTURE), 0);
+ Modify_SPI_Reg_bits(LMS7param(CAPTURE), 1);
+ return (Get_SPI_Reg_bits(0x040F, 15, 0) << 2) | Get_SPI_Reg_bits(0x040E, 1, 0);
+}
+
+/** @brief Sets Rx Dc offsets by converting two's complementary numbers to sign and magnitude
+*/
+void LMS7002M::SetRxDCOFF(int8_t offsetI, int8_t offsetQ)
+{
+ uint16_t valToSend = 0;
+ if (offsetI < 0)
+ valToSend |= 0x40;
+ valToSend |= labs(offsetI);
+ valToSend = valToSend << 7;
+ if (offsetQ < 0)
+ valToSend |= 0x40;
+ valToSend |= labs(offsetQ);
+ SPI_write(0x010E, valToSend);
+}
+
+/** @brief Calibrates Transmitter. DC correction, IQ gains, IQ phase correction
+ @return 0-success, other-failure
+*/
+liblms7_status LMS7002M::CalibrateTx(float_type bandwidth_MHz)
+{
+ liblms7_status status;
+ Log("Tx calibration started", LOG_INFO);
+ BackupAllRegisters();
+
+ int16_t iqcorr = 0;
+ uint16_t gcorrq = 0;
+ uint16_t gcorri = 0;
+ uint16_t dccorri;
+ uint16_t dccorrq;
+ int16_t corrI = 0;
+ int16_t corrQ = 0;
+ uint32_t minRSSI_i;
+ uint32_t minRSSI_q;
+ uint32_t minRSSI_iq;
+ int16_t i;
+ int16_t offsetI = 0;
+ int16_t offsetQ = 0;
+
+ const short firCoefs[] =
+ {
+ -2531,
+ -517,
+ 2708,
+ 188,
+ -3059,
+ 216,
+ 3569,
+ -770,
+ -4199,
+ 1541,
+ 4886,
+ -2577,
+ -5552,
+ 3909,
+ 6108,
+ -5537,
+ -6457,
+ 7440,
+ 6507,
+ -9566,
+ -6174,
+ 11845,
+ 5391,
+ -14179,
+ -4110,
+ 16457,
+ 2310,
+ -18561,
+ 0,
+ 20369,
+ -2780,
+ -21752,
+ 5963,
+ 22610,
+ -9456,
+ -22859,
+ 13127,
+ 22444,
+ -16854,
+ -21319,
+ 20489,
+ 19492,
+ -23883,
+ -17002,
+ 26881,
+ 13902,
+ -29372,
+ -10313,
+ 31226,
+ 6345,
+ -32380,
+ -2141,
+ 32767,
+ -2141,
+ -32380,
+ 6345,
+ 31226,
+ -10313,
+ -29372,
+ 13902,
+ 26881,
+ -17002,
+ -23883,
+ 19492,
+ 20489,
+ -21319,
+ -16854,
+ 22444,
+ 13127,
+ -22859,
+ -9456,
+ 22610,
+ 5963,
+ -21752,
+ -2780,
+ 20369,
+ 0,
+ -18561,
+ 2310,
+ 16457,
+ -4110,
+ -14179,
+ 5391,
+ 11845,
+ -6174,
+ -9566,
+ 6507,
+ 7440,
+ -6457,
+ -5537,
+ 6108,
+ 3909,
+ -5552,
+ -2577,
+ 4886,
+ 1541,
+ -4199,
+ -770,
+ 3569,
+ 216,
+ -3059,
+ 188,
+ 2708,
+ -517,
+ -2531
+ };
+
+ uint8_t ch = (uint8_t)Get_SPI_Reg_bits(LMS7param(MAC));
+ //Stage 1
+ uint8_t sel_band1_trf = (uint8_t)Get_SPI_Reg_bits(LMS7param(SEL_BAND1_TRF));
+ uint8_t sel_band2_trf = (uint8_t)Get_SPI_Reg_bits(LMS7param(SEL_BAND2_TRF));
+ Log("Setup stage", LOG_INFO);
+ status = CalibrateTxSetup(bandwidth_MHz);
+ if (status != LIBLMS7_SUCCESS)
+ goto TxCalibrationEnd; //go to ending stage to restore registers
+
+ //Stage 3
+ //Calibrate Rx DC
+ Log("Rx DC calibration", LOG_INFO);
+ {
+ uint16_t requiredRegs[] = { 0x0400, 0x040A, 0x010D, 0x040C };
+ uint16_t requiredMask[] = { 0x6000, 0x3007, 0x0040, 0x00FF }; //CAPSEL, AGC_MODE, AGC_AVG, EN_DCOFF, Bypasses
+ uint16_t requiredValue[] = { 0x0000, 0x1007, 0x0040, 0x00BD };
+
+ Modify_SPI_Reg_mask(requiredRegs, requiredMask, requiredValue, 0, 3);
+ }
+
+ for (i = 0; i<6; ++i)
+ {
+ FindMinRSSI(LMS7param(DCOFFI_RFE), offsetI, &offsetI, 3, 2, 32 >> i);
+ FindMinRSSI(LMS7param(DCOFFQ_RFE), offsetQ, &offsetQ, 3, 2, 32 >> i);
+ }
+ SetRxDCOFF((int8_t)offsetI, (int8_t)offsetQ);
+ Modify_SPI_Reg_bits(LMS7param(DC_BYP_RXTSP), 0); // DC_BYP 0
+
+ sel_band1_trf = (uint8_t)Get_SPI_Reg_bits(LMS7param(SEL_BAND1_TRF));
+ sel_band2_trf = (uint8_t)Get_SPI_Reg_bits(LMS7param(SEL_BAND2_TRF));
+ //B
+ Modify_SPI_Reg_bits(0x0100, 0, 0, 1); //EN_G_TRF 1
+ if (sel_band1_trf == 1)
+ {
+ Modify_SPI_Reg_bits(LMS7param(PD_RLOOPB_1_RFE), 0); //PD_RLOOPB_1_RFE 0
+ Modify_SPI_Reg_bits(LMS7param(EN_INSHSW_LB1_RFE), 0); //EN_INSHSW_LB1 0
+ }
+ if (sel_band2_trf == 1)
+ {
+ Modify_SPI_Reg_bits(LMS7param(PD_RLOOPB_2_RFE), 0); //PD_RLOOPB_2_RFE 0
+ Modify_SPI_Reg_bits(LMS7param(EN_INSHSW_LB2_RFE), 0); // EN_INSHSW_LB2 0
+ }
+ FixRXSaturation();
+
+ Modify_SPI_Reg_bits(LMS7param(GFIR3_BYP_RXTSP), 0); //GFIR3_BYP 0
+ Modify_SPI_Reg_bits(LMS7param(HBD_OVR_RXTSP), 2);
+ Modify_SPI_Reg_bits(LMS7param(GFIR3_L_RXTSP), 7);
+ Modify_SPI_Reg_bits(LMS7param(GFIR3_N_RXTSP), 7);
+
+ SetGFIRCoefficients(Rx, 2, firCoefs, sizeof(firCoefs) / sizeof(int16_t));
+
+ Log("IQ correction stage", LOG_INFO);
+ Modify_SPI_Reg_bits(LMS7param(GCORRI_TXTSP), 2047);
+ Modify_SPI_Reg_bits(LMS7param(GCORRQ_TXTSP), 2047);
+
+ Modify_SPI_Reg_bits(LMS7param(IQCORR_TXTSP), 0);
+
+ Log("I gain", LOG_INFO);
+ minRSSI_i = FindMinRSSI_Gain(LMS7param(GCORRI_TXTSP), &gcorri);
+
+ Modify_SPI_Reg_bits(LMS7param(GCORRI_TXTSP), 2047);
+ Modify_SPI_Reg_bits(LMS7param(GCORRQ_TXTSP), 2047);
+
+ Log("Q gain", LOG_INFO);
+ minRSSI_q = FindMinRSSI_Gain(LMS7param(GCORRQ_TXTSP), &gcorrq);
+
+ if (minRSSI_i < minRSSI_q)
+ gcorrq = 2047;
+ else
+ gcorri = 2047;
+
+ Modify_SPI_Reg_bits(LMS7param(GCORRI_TXTSP), gcorri);
+ Modify_SPI_Reg_bits(LMS7param(GCORRQ_TXTSP), gcorrq);
+
+ Log("Phase", LOG_INFO);
+ iqcorr = 0;
+ for (uint8_t i = 0; i<9; ++i)
+ minRSSI_iq = FindMinRSSI(LMS7param(IQCORR_TXTSP), iqcorr, &iqcorr, 3, 1, 256 >> i);
+
+ Modify_SPI_Reg_bits(LMS7param(GCORRI_TXTSP), gcorri);
+ Modify_SPI_Reg_bits(LMS7param(GCORRQ_TXTSP), gcorrq);
+ Modify_SPI_Reg_bits(LMS7param(IQCORR_TXTSP), iqcorr);
+
+ Modify_SPI_Reg_bits(LMS7param(MAC), 1);
+ status = SetFrequencySX(Rx, GetFrequencySX_MHz(Tx, mRefClkSXT_MHz)-1, mRefClkSXR_MHz);
+ if (status != LIBLMS7_SUCCESS)
+ goto TxCalibrationEnd; //go to ending stage to restore registers
+
+ //C
+ Modify_SPI_Reg_bits(LMS7param(MAC), ch);
+ Modify_SPI_Reg_bits(LMS7param(AGC_MODE_RXTSP), 1);
+ Modify_SPI_Reg_bits(LMS7param(CAPSEL), 0);
+
+ Log("TX LO calibration", LOG_INFO);
+
+ //Calibrate Tx DC
+ for (uint8_t i = 0; i<7; ++i)
+ {
+ FindMinRSSI(LMS7param(DCCORRI_TXTSP), corrI, &corrI, 3, 1, 64 >> i);
+ FindMinRSSI(LMS7param(DCCORRQ_TXTSP), corrQ, &corrQ, 3, 1, 64 >> i);
+ }
+
+ dccorri = Get_SPI_Reg_bits(LMS7param(DCCORRI_TXTSP));
+ dccorrq = Get_SPI_Reg_bits(LMS7param(DCCORRQ_TXTSP));
+
+ // Stage 4
+TxCalibrationEnd:
+ Log("Restoring registers state", LOG_INFO);
+ Modify_SPI_Reg_bits(LMS7param(MAC), ch);
+ RestoreAllRegisters();
+ if (status != LIBLMS7_SUCCESS)
+ {
+ Log("Tx calibration failed", LOG_WARNING);
+ return status;
+ }
+
+ Modify_SPI_Reg_bits(LMS7param(MAC), ch);
+ Modify_SPI_Reg_bits(LMS7param(DCCORRI_TXTSP), dccorri);
+ Modify_SPI_Reg_bits(LMS7param(DCCORRQ_TXTSP), dccorrq);
+ Modify_SPI_Reg_bits(LMS7param(GCORRI_TXTSP), gcorri);
+ Modify_SPI_Reg_bits(LMS7param(GCORRQ_TXTSP), gcorrq);
+ Modify_SPI_Reg_bits(LMS7param(IQCORR_TXTSP), iqcorr);
+
+ Modify_SPI_Reg_bits(LMS7param(DC_BYP_TXTSP), 0); //DC_BYP
+ Modify_SPI_Reg_bits(0x0208, 1, 0, 0); //GC_BYP PH_BYP
+ Log("Tx calibration finished", LOG_INFO);
+ return LIBLMS7_SUCCESS;
+}
+
+/** @brief Performs Rx DC offsets calibration
+*/
+void LMS7002M::CalibrateRxDC_RSSI()
+{
+ int16_t i;
+ int16_t offsetI = 0;
+ int16_t offsetQ = 0;
+ uint16_t requiredRegs[] = { 0x0400, 0x040A, 0x010D, 0x040C };
+ uint16_t requiredMask[] = { 0x6000, 0x3007, 0x0040, 0x00FF }; //CAPSEL, AGC_MODE, AGC_AVG, EN_DCOFF, Bypasses
+ uint16_t requiredValue[] = { 0x0000, 0x1007, 0x0040, 0x00BD };
+
+ Modify_SPI_Reg_mask(requiredRegs, requiredMask, requiredValue, 0, 3);
+ for (i = 0; i<6; ++i)
+ {
+ FindMinRSSI(LMS7param(DCOFFI_RFE), offsetI, &offsetI, 3, 2, 32 >> i);
+ FindMinRSSI(LMS7param(DCOFFQ_RFE), offsetQ, &offsetQ, 3, 2, 32 >> i);
+ }
+ Modify_SPI_Reg_bits(LMS7param(EN_DCOFF_RXFE_RFE), 1);
+ SetRxDCOFF((int8_t)offsetI, (int8_t)offsetQ);
+ Modify_SPI_Reg_bits(LMS7param(DC_BYP_RXTSP), 0); // DC_BYP 0
+}
+
+/** @brief Tries to detect and fix gains if Rx is saturated
+ @return 0-success, other-failure
+*/
+liblms7_status LMS7002M::FixRXSaturation()
+{
+ uint8_t g_rxloopb = 0;
+ Modify_SPI_Reg_bits(LMS7param(G_RXLOOPB_RFE), g_rxloopb);
+ Modify_SPI_Reg_bits(LMS7param(L_LOOPB_TXPAD_TRF), 3);
+
+ int8_t lLoopb = 3;
+ const uint32_t rssi_saturation_level = 0xD000;
+ while (g_rxloopb < 15)
+ {
+ g_rxloopb += 1;
+ Modify_SPI_Reg_bits(LMS7param(G_RXLOOPB_RFE), g_rxloopb);
+ Modify_SPI_Reg_bits(LMS7param(L_LOOPB_TXPAD_TRF), 3);
+ if (GetRSSI() < rssi_saturation_level)
+ {
+ for (lLoopb = 3; lLoopb >= 0; --lLoopb)
+ {
+ Modify_SPI_Reg_bits(LMS7param(L_LOOPB_TXPAD_TRF), lLoopb);
+ if (GetRSSI() > rssi_saturation_level)
+ {
+ ++lLoopb;
+ Modify_SPI_Reg_bits(LMS7param(L_LOOPB_TXPAD_TRF), lLoopb);
+ goto finished;
+ }
+ }
+ }
+ else
+ {
+ g_rxloopb -= 1;
+ Modify_SPI_Reg_bits(LMS7param(G_RXLOOPB_RFE), g_rxloopb);
+ break;
+ }
+ }
+finished:
+ return GetRSSI() < rssi_saturation_level ? LIBLMS7_SUCCESS : LIBLMS7_FAILURE;
+}
+
+uint32_t LMS7002M::FindMinRSSI(const LMS7Parameter ¶m, const int16_t startValue, int16_t *result, const uint8_t scanWidth, const uint8_t twoCompl, int8_t stepMult)
+{
+ return FindMinRSSI(param.address, param.msb, param.lsb, startValue, result, scanWidth, twoCompl, stepMult);
+}
+
+/** @brief Searches for minimal RSSI value while changing given address bits
+@param addr address of parameter being changed
+@param msb most significant bit index
+@param lsb least significant bit index
+@param startValue initial value where to start search
+@param result found minimal parameter value will be set here
+@param twoCompl varying parameter value is treated as two's complement
+@return found minimal RSSI value
+*/
+uint32_t LMS7002M::FindMinRSSI(const uint16_t addr, const uint8_t msb, const uint8_t lsb, const int16_t startValue, int16_t *result, const uint8_t scanWidth, const uint8_t twoCompl, int8_t stepMult)
+{
+ if (scanWidth < 1)
+ return ~0;
+ int minI;
+ int min = startValue;
+ int globMin = 0;
+ uint32_t minRSSI = ~0;
+ unsigned int *rssiField = new unsigned int[scanWidth];
+ int minRSSIindex;
+ int i;
+ int maxVal;
+ int minVal = 0;
+ if (twoCompl)
+ {
+ maxVal = (~(~0x0 << (msb - lsb + 1))) / 2;
+ minVal = -(~(~0x0 << (msb - lsb + 1))) / 2 - 1;
+ }
+ else
+ maxVal = (~(~0x0 << (msb - lsb + 1)));
+
+ Modify_SPI_Reg_bits(addr, msb, lsb, startValue);
+
+ Modify_SPI_Reg_bits(LMS7param(AGC_MODE_RXTSP), 1);
+ Modify_SPI_Reg_bits(LMS7param(CAPSEL), 0);
+
+ minRSSIindex = 0;
+ for (i = 0; i maxVal)
+ currentValue = maxVal;
+ if (twoCompl == 2)
+ {
+ uint16_t valToSend = 0;
+ if (currentValue < 0)
+ valToSend |= 0x40;
+ valToSend |= labs(currentValue);
+ Modify_SPI_Reg_bits(addr, msb, lsb, valToSend);
+ }
+ else
+ Modify_SPI_Reg_bits(addr, msb, lsb, currentValue);
+
+ rssiField[i] = GetRSSI();
+ }
+ minI = min;
+ minRSSIindex = 0;
+ for (i = 0; i maxVal)
+ minI = maxVal;
+ else if (minI < minVal)
+ minI = minVal;
+ globMin = minI;
+ }
+ min = minI;
+
+ Modify_SPI_Reg_bits(addr, msb, lsb, min);
+
+ *result = min;
+ return minRSSI;
+}
+
+/** @brief Sets given module registers to default values
+ @return 0-success, other-failure
+*/
+liblms7_status LMS7002M::SetDefaults(MemorySection module)
+{
+ liblms7_status status = LIBLMS7_SUCCESS;
+ vector addrs;
+ vector values;
+ for(uint32_t address = MemorySectionAddresses[module][0]; address <= MemorySectionAddresses[module][1]; ++address)
+ {
+ addrs.push_back(address);
+ values.push_back(mRegistersMap->GetDefaultValue(address));
+ }
+ status = SPI_write_batch(&addrs[0], &values[0], addrs.size());
+ return status;
+}
+
+/** @brief Parameters setup instructions for Rx calibration
+ @param bandwidth_MHz filter bandwidth in MHz
+ @return 0-success, other-failure
+*/
+liblms7_status LMS7002M::CalibrateRxSetup(float_type bandwidth_MHz)
+{
+ uint8_t ch = (uint8_t)Get_SPI_Reg_bits(LMS7param(MAC));
+
+ //rfe
+ if (ch == 2)
+ Modify_SPI_Reg_bits(LMS7param(EN_NEXTTX_TRF), 1); // EN_NEXTTX_TRF 0
+
+ Modify_SPI_Reg_bits(LMS7param(G_RXLOOPB_RFE), 15); //G_RXLOOPB_RFE 15
+ Modify_SPI_Reg_bits(0x010C, 4, 3, 0); //PD_MXLOBUF_RFE 0, PD_QGEN_RFE 0
+ Modify_SPI_Reg_bits(0x010C, 1, 1, 0); //PD_TIA 0
+ Modify_SPI_Reg_bits(0x010C, 7, 7, 1); //PD_LNA 1
+
+ Modify_SPI_Reg_bits(0x0110, 4, 0, 31); //ICT_LO_RFE 31
+ Modify_SPI_Reg_bits(0x010D, 4, 1, 0xFF); // all short switches are enabled
+
+ //RBB
+ Modify_SPI_Reg_bits(0x0115, 15, 14, 0); //Loopback switches disable
+ Modify_SPI_Reg_bits(0x0119, 15, 15, 0); //OSW_PGA 0
+
+ //TRF
+ //reset TRF to defaults
+ SetDefaults(TRF);
+ Modify_SPI_Reg_bits(LMS7param(L_LOOPB_TXPAD_TRF), 0); //L_LOOPB_TXPAD_TRF 0
+ Modify_SPI_Reg_bits(LMS7param(EN_LOOPB_TXPAD_TRF), 1); //EN_LOOPB_TXPAD_TRF 1
+ Modify_SPI_Reg_bits(LMS7param(EN_G_TRF), 0); //EN_G_TRF 0
+ if (ch == 2)
+ Modify_SPI_Reg_bits(LMS7param(EN_NEXTTX_TRF), 1); //EN_NEXTTX_TRF 1
+ Modify_SPI_Reg_bits(LMS7param(LOSS_LIN_TXPAD_TRF), 0); //LOSS_LIN_TXPAD_TRF 5
+ Modify_SPI_Reg_bits(LMS7param(LOSS_MAIN_TXPAD_TRF), 0); //LOSS_MAIN_TXPAD_TRF 5
+
+ //TBB
+ //reset TBB to defaults
+ SetDefaults(TBB);
+ Modify_SPI_Reg_bits(LMS7param(CG_IAMP_TBB), 9); //CG_IAMP_TBB 9
+ Modify_SPI_Reg_bits(LMS7param(ICT_IAMP_FRP_TBB), 1); //ICT_IAMP_FRP_TBB 1
+ Modify_SPI_Reg_bits(LMS7param(ICT_IAMP_GG_FRP_TBB), 6); //ICT_IAMP_GG_FRP_TBB 6
+
+ //AFE
+ //reset AFE to defaults
+ SetDefaults(AFE);
+ Modify_SPI_Reg_bits(LMS7param(PD_RX_AFE2), 0); //PD_RX_AFE2
+ if (ch == 2)
+ {
+ Modify_SPI_Reg_bits(LMS7param(PD_TX_AFE2), 0); //PD_TX_AFE2
+ }
+ //BIAS
+ uint16_t backup = Get_SPI_Reg_bits(0x0084, 10, 6);
+ SetDefaults(BIAS);
+ Modify_SPI_Reg_bits(0x0084, 10, 6, backup); //RP_CALIB_BIAS
+
+ //XBUF
+ Modify_SPI_Reg_bits(0x0085, 2, 0, 1); //PD_XBUF_RX 0, PD_XBUF_TX 0, EN_G_XBUF 1
+
+ //CGEN
+ //reset CGEN to defaults
+ SetDefaults(CGEN);
+ //power up VCO
+ Modify_SPI_Reg_bits(0x0086, 2, 2, 0);
+
+ liblms7_status status = SetFrequencyCGEN(122.88);
+ if (status != LIBLMS7_SUCCESS)
+ return status;
+
+ // //SXR
+ Modify_SPI_Reg_bits(LMS7param(MAC), 1);
+ float_type SXRfreqMHz = GetFrequencySX_MHz(Rx, mRefClkSXR_MHz);
+
+ //SXT
+ Modify_SPI_Reg_bits(LMS7param(MAC), 2);
+ Modify_SPI_Reg_bits(LMS7param(PD_LOCH_T2RBUF), 1); //PD_LOCH_t2RBUF 1
+ status = SetFrequencySX(Tx, SXRfreqMHz + bandwidth_MHz / 4, mRefClkSXT_MHz);
+ if ( status != LIBLMS7_SUCCESS)
+ return status;
+ Modify_SPI_Reg_bits(LMS7param(MAC), ch);
+
+ //TXTSP
+ SetDefaults(TxTSP);
+ Modify_SPI_Reg_bits(0x0200, 3, 2, 0x3); //TSGMODE 1, INSEL 1
+ //Modify_SPI_Reg_bits(0x0208, 6, 4, 0xFFFF); //GFIR3_BYP 1, GFIR2_BYP 1, GFIR1_BYP 1
+ Modify_SPI_Reg_bits(0x0208, 6, 6, 1); //GFIR3_BYP 1, GFIR2_BYP 1, GFIR1_BYP 1
+ Modify_SPI_Reg_bits(0x0208, 5, 5, 1); //GFIR3_BYP 1, GFIR2_BYP 1, GFIR1_BYP 1
+ Modify_SPI_Reg_bits(0x0208, 4, 4, 1); //GFIR3_BYP 1, GFIR2_BYP 1, GFIR1_BYP 1
+ LoadDC_REG_IQ(Tx, (int16_t)0x7FFF, (int16_t)0x8000);
+ SetNCOFrequency(Tx, 0, 0);
+
+ //RXTSP
+ SetDefaults(RxTSP);
+ Modify_SPI_Reg_bits(LMS7param(AGC_MODE_RXTSP), 1); //AGC_MODE 1
+ Modify_SPI_Reg_bits(0x040C, 7, 7, 0x1); //CMIX_BYP 1
+ Modify_SPI_Reg_bits(0x040C, 6, 6, 0x0); //AGC_BYP 0
+ Modify_SPI_Reg_bits(0x040C, 5, 5, 1); //
+ Modify_SPI_Reg_bits(0x040C, 4, 4, 1); //
+ Modify_SPI_Reg_bits(0x040C, 3, 3, 1); //
+ Modify_SPI_Reg_bits(0x040C, 2, 2, 1); // DC_BYP
+ Modify_SPI_Reg_bits(0x040C, 1, 1, 1); //
+ Modify_SPI_Reg_bits(0x040C, 0, 0, 1); //
+
+ Modify_SPI_Reg_bits(LMS7param(CAPSEL), 0);
+ Modify_SPI_Reg_bits(LMS7param(HBD_OVR_RXTSP), 2);
+ Modify_SPI_Reg_bits(LMS7param(AGC_AVG_RXTSP), 0x7); //agc_avg iq corr
+ return LIBLMS7_SUCCESS;
+}
+
+/** @brief Calibrates Receiver. DC offset, IQ gains, IQ phase correction
+ @return 0-success, other-failure
+*/
+liblms7_status LMS7002M::CalibrateRx(float_type bandwidth_MHz)
+{
+ liblms7_status status;
+ uint32_t minRSSI_i;
+ uint32_t minRSSI_q;
+ int16_t iqcorr_rx = 0;
+ uint32_t minRSSI_iq;
+ int16_t dcoffi;
+ int16_t dcoffq;
+
+ const int16_t firCoefs[] =
+ {
+ -2531,
+ -517,
+ 2708,
+ 188,
+ -3059,
+ 216,
+ 3569,
+ -770,
+ -4199,
+ 1541,
+ 4886,
+ -2577,
+ -5552,
+ 3909,
+ 6108,
+ -5537,
+ -6457,
+ 7440,
+ 6507,
+ -9566,
+ -6174,
+ 11845,
+ 5391,
+ -14179,
+ -4110,
+ 16457,
+ 2310,
+ -18561,
+ 0,
+ 20369,
+ -2780,
+ -21752,
+ 5963,
+ 22610,
+ -9456,
+ -22859,
+ 13127,
+ 22444,
+ -16854,
+ -21319,
+ 20489,
+ 19492,
+ -23883,
+ -17002,
+ 26881,
+ 13902,
+ -29372,
+ -10313,
+ 31226,
+ 6345,
+ -32380,
+ -2141,
+ 32767,
+ -2141,
+ -32380,
+ 6345,
+ 31226,
+ -10313,
+ -29372,
+ 13902,
+ 26881,
+ -17002,
+ -23883,
+ 19492,
+ 20489,
+ -21319,
+ -16854,
+ 22444,
+ 13127,
+ -22859,
+ -9456,
+ 22610,
+ 5963,
+ -21752,
+ -2780,
+ 20369,
+ 0,
+ -18561,
+ 2310,
+ 16457,
+ -4110,
+ -14179,
+ 5391,
+ 11845,
+ -6174,
+ -9566,
+ 6507,
+ 7440,
+ -6457,
+ -5537,
+ 6108,
+ 3909,
+ -5552,
+ -2577,
+ 4886,
+ 1541,
+ -4199,
+ -770,
+ 3569,
+ 216,
+ -3059,
+ 188,
+ 2708,
+ -517,
+ -2531
+ };
+
+ Log("Rx calibration started", LOG_INFO);
+ uint8_t ch = (uint8_t)Get_SPI_Reg_bits(LMS7param(MAC));
+ Log("Saving registers state", LOG_INFO);
+ BackupAllRegisters();
+ uint8_t sel_path_rfe = (uint8_t)Get_SPI_Reg_bits(LMS7param(SEL_PATH_RFE));
+ if (sel_path_rfe == 1 || sel_path_rfe == 0)
+ return LIBLMS7_BAD_SEL_PATH;
+
+ Log("Setup stage", LOG_INFO);
+ status = CalibrateRxSetup(bandwidth_MHz);
+ if (status != LIBLMS7_SUCCESS)
+ goto RxCalibrationEndStage;
+
+ Log("Rx DC calibration", LOG_INFO);
+ CalibrateRxDC_RSSI();
+ dcoffi = Get_SPI_Reg_bits(LMS7param(DCOFFI_RFE));
+ dcoffq = Get_SPI_Reg_bits(LMS7param(DCOFFQ_RFE));
+ Modify_SPI_Reg_bits(LMS7param(EN_G_TRF), 1);
+
+ if (sel_path_rfe == 2)
+ {
+ Modify_SPI_Reg_bits(LMS7param(PD_RLOOPB_2_RFE), 0);
+ Modify_SPI_Reg_bits(0x0103, 10, 10, 1);
+ Modify_SPI_Reg_bits(0x0103, 11, 11, 0);
+ Modify_SPI_Reg_bits(LMS7param(EN_INSHSW_LB2_RFE), 0);
+ }
+ if (sel_path_rfe == 3)
+ {
+ Modify_SPI_Reg_bits(LMS7param(PD_RLOOPB_1_RFE), 0);
+ Modify_SPI_Reg_bits(0x0103, 11, 11, 1);
+ Modify_SPI_Reg_bits(0x0103, 10, 10, 0);
+ Modify_SPI_Reg_bits(LMS7param(EN_INSHSW_LB1_RFE), 0);
+ }
+
+ Modify_SPI_Reg_bits(0x040C, 7, 7, 0); //CMIX_BYP 0
+ Modify_SPI_Reg_bits(0x040C, 2, 0, 0); //DC_BYP 0, GC_BYP 0, PH_BYP 0
+ Modify_SPI_Reg_bits(LMS7param(CMIX_GAIN_RXTSP), 1); //CMIX_GAIN 1 +6 db
+ Modify_SPI_Reg_bits(0x040C, 13, 13, 1); //CMIX_SC 1
+
+ FixRXSaturation();
+
+ Modify_SPI_Reg_bits(0x040C, 5, 5, 0); //GFIR3_BYP 0
+ Modify_SPI_Reg_bits(LMS7param(HBD_OVR_RXTSP), 2);
+ Modify_SPI_Reg_bits(LMS7param(GFIR3_L_RXTSP), 7);
+ Modify_SPI_Reg_bits(LMS7param(GFIR3_N_RXTSP), 7);
+
+ SetGFIRCoefficients(Rx, 2, firCoefs, sizeof(firCoefs) / sizeof(int16_t));
+
+ SetNCOFrequency(Rx, 0, bandwidth_MHz / 4 + 1);
+ Modify_SPI_Reg_bits(LMS7param(GCORRI_RXTSP), 2047);
+ Modify_SPI_Reg_bits(LMS7param(GCORRQ_RXTSP), 2047);
+
+ Log("IQ correction stage", LOG_INFO);
+ iqcorr_rx = 0;
+ for (int i = 0; i<9; ++i)
+ minRSSI_iq = FindMinRSSI(LMS7param(IQCORR_RXTSP), iqcorr_rx, &iqcorr_rx, 3, 1, 256 >> i);
+ Modify_SPI_Reg_bits(LMS7param(IQCORR_RXTSP), iqcorr_rx);
+
+ uint16_t mingcorri;
+ Log("I gain", LOG_INFO);
+ minRSSI_i = FindMinRSSI_Gain(LMS7param(GCORRI_RXTSP), &mingcorri);
+
+ Modify_SPI_Reg_bits(LMS7param(GCORRI_RXTSP), 2047);
+ Modify_SPI_Reg_bits(LMS7param(GCORRQ_RXTSP), 2047);
+
+ Log("Q gain", LOG_INFO);
+ uint16_t mingcorrq;
+ minRSSI_q = FindMinRSSI_Gain(LMS7param(GCORRQ_RXTSP), &mingcorrq);
+
+ if (minRSSI_i < minRSSI_q)
+ mingcorrq = 2047;
+ else
+ mingcorri = 2047;
+
+ Modify_SPI_Reg_bits(LMS7param(GCORRI_RXTSP), mingcorri);
+ Modify_SPI_Reg_bits(LMS7param(GCORRQ_RXTSP), mingcorrq);
+
+ Log("Phase", LOG_INFO);
+ for (int i = 0; i<9; ++i)
+ minRSSI_iq = FindMinRSSI(LMS7param(IQCORR_RXTSP), iqcorr_rx, &iqcorr_rx, 3, 1, 256 >> i);
+
+RxCalibrationEndStage:
+ Log("Restoring registers state", LOG_INFO);
+ RestoreAllRegisters();
+ if (status != LIBLMS7_SUCCESS)
+ {
+ Log("Rx calibration failed", LOG_WARNING);
+ return status;
+ }
+
+ Modify_SPI_Reg_bits(LMS7param(MAC), ch);
+ SetRxDCOFF((int8_t)dcoffi, (int8_t)dcoffq);
+ Modify_SPI_Reg_bits(LMS7param(EN_DCOFF_RXFE_RFE), 1);
+ Modify_SPI_Reg_bits(LMS7param(GCORRI_RXTSP), mingcorri);
+ Modify_SPI_Reg_bits(LMS7param(GCORRQ_RXTSP), mingcorrq);
+ Modify_SPI_Reg_bits(LMS7param(IQCORR_RXTSP), iqcorr_rx);
+ Modify_SPI_Reg_bits(0x040C, 2, 0, 0); //DC_BYP 0, GC_BYP 0, PH_BYP 0
+ Modify_SPI_Reg_bits(0x0110, 4, 0, 31); //ICT_LO_RFE 31
+ Log("Rx calibration finished", LOG_INFO);
+ return LIBLMS7_SUCCESS;
+}
+
+const uint16_t backupAddrs[] = {
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028,
+ 0x0029, 0x002A, 0x002B, 0x002C, 0x002E, 0x0081, 0x0082, 0x0084, 0x0085,
+ 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x0092, 0x0093, 0x0094,
+ 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E,
+ 0x009F, 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8,
+ 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0100, 0x0101, 0x0102, 0x0103,
+ 0x0104, 0x0105, 0x0106, 0x0107, 0x0108, 0x0109, 0x010A, 0x010C, 0x010D, 0x010E,
+ 0x010F, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116, 0x0117, 0x0118,
+ 0x0119, 0x011A, 0x011C, 0x011D, 0x011E, 0x011F, 0x0120, 0x0121, 0x0122, 0x0123,
+ 0x0124, 0x0200, 0x0201, 0x0202, 0x0203, 0x0204, 0x0205, 0x0206, 0x0207, 0x0208,
+ 0x0240, 0x0242, 0x0243, 0x0400, 0x0401, 0x0402,
+ 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 0x040A, 0x040B, 0x040C,
+ 0x0440, 0x0442, 0x0443 };
+uint16_t backupRegs[sizeof(backupAddrs) / 2];
+const uint16_t backupSXAddr[] = { 0x011C, 0x011D, 0x011E, 0x011F, 0x01200, 0x0121, 0x0122, 0x0123, 0x0124 };
+uint16_t backupRegsSXR[sizeof(backupSXAddr) / 2];
+uint16_t backupRegsSXT[sizeof(backupSXAddr) / 2];
+
+/** @brief Stores chip current registers state into memory for later restoration
+*/
+void LMS7002M::BackupAllRegisters()
+{
+ uint8_t ch = (uint8_t)Get_SPI_Reg_bits(LMS7param(MAC));
+ SPI_read_batch(backupAddrs, backupRegs, sizeof(backupAddrs) / sizeof(uint16_t));
+ Modify_SPI_Reg_bits(LMS7param(MAC), 1); // channel A
+ SPI_read_batch(backupSXAddr, backupRegsSXR, sizeof(backupRegsSXR) / sizeof(uint16_t));
+ Modify_SPI_Reg_bits(LMS7param(MAC), 2); // channel B
+ SPI_read_batch(backupSXAddr, backupRegsSXT, sizeof(backupRegsSXR) / sizeof(uint16_t));
+ Modify_SPI_Reg_bits(LMS7param(MAC), ch);
+}
+
+/** @brief Sets chip registers to state that was stored in memory using BackupAllRegisters()
+*/
+void LMS7002M::RestoreAllRegisters()
+{
+ uint8_t ch = (uint8_t)Get_SPI_Reg_bits(LMS7param(MAC));
+ SPI_write_batch(backupAddrs, backupRegs, sizeof(backupAddrs) / sizeof(uint16_t));
+ Modify_SPI_Reg_bits(LMS7param(MAC), 1); // channel A
+ SPI_write_batch(backupSXAddr, backupRegsSXR, sizeof(backupRegsSXR) / sizeof(uint16_t));
+ Modify_SPI_Reg_bits(LMS7param(MAC), 2); // channel B
+ SPI_write_batch(backupSXAddr, backupRegsSXT, sizeof(backupRegsSXR) / sizeof(uint16_t));
+ Modify_SPI_Reg_bits(LMS7param(MAC), ch);
+}
+
+/** @brief Searches for minimal digital RSSI value by changing given gain parameter
+ @param param LMS7002M gain correction parameter
+ @param foundValue returns value which achieved minimal RSSI
+ @return minimal found RSSI value
+*/
+uint32_t LMS7002M::FindMinRSSI_Gain(const LMS7Parameter ¶m, uint16_t *foundValue)
+{
+ uint32_t RSSI = ~0 - 2;
+ uint32_t prevRSSI = RSSI + 1;
+ uint8_t decrement = 2;
+ uint16_t gcorr = 2047;
+ while (gcorr > 1024)
+ {
+ Modify_SPI_Reg_bits(param, gcorr);
+ RSSI = GetRSSI();
+ if (RSSI < prevRSSI)
+ {
+ prevRSSI = RSSI;
+ *foundValue = gcorr;
+ gcorr -= decrement;
+ decrement *= 2;
+ }
+ else
+ {
+ if (decrement == 2)
+ break;
+ gcorr -= decrement;
+ decrement = 2;
+ }
+ }
+ return prevRSSI;
+}
+
+/** @brief Reads all chip configuration and checks if it matches with local registers copy
+*/
+bool LMS7002M::IsSynced()
+{
+ if (controlPort->IsOpen() == false)
+ return false;
+ bool isSynced = true;
+ liblms7_status status;
+
+ uint8_t ch = (uint8_t)Get_SPI_Reg_bits(LMS7param(MAC));
+
+ vector addrToRead = mRegistersMap->GetUsedAddresses(0);
+ vector dataReceived;
+ dataReceived.resize(addrToRead.size(), 0);
+
+ Modify_SPI_Reg_bits(LMS7param(MAC), 1);
+ status = SPI_read_batch(&addrToRead[0], &dataReceived[0], addrToRead.size());
+ if (status != LIBLMS7_SUCCESS)
+ {
+ isSynced = false;
+ goto isSyncedEnding;
+ }
+
+ //mask out readonly bits
+ for (uint16_t j = 0; j < sizeof(readOnlyRegisters) / sizeof(uint16_t); ++j)
+ for (uint16_t k = 0; k < addrToRead.size(); ++k)
+ if (readOnlyRegisters[j] == addrToRead[k])
+ {
+ dataReceived[k] &= readOnlyRegistersMasks[j];
+ break;
+ }
+
+ //check if local copy matches chip
+ for (uint16_t i = 0; i < addrToRead.size(); ++i)
+ {
+ if (dataReceived[i] != mRegistersMap->GetValue(0, addrToRead[i]))
+ {
+ isSynced = false;
+ goto isSyncedEnding;
+ }
+ }
+
+ addrToRead.clear(); //add only B channel addresses
+ addrToRead = mRegistersMap->GetUsedAddresses(1);
+
+ //mask out readonly bits
+ for (uint16_t j = 0; j < sizeof(readOnlyRegisters) / sizeof(uint16_t); ++j)
+ for (uint16_t k = 0; k < addrToRead.size(); ++k)
+ if (readOnlyRegisters[j] == addrToRead[k])
+ {
+ dataReceived[k] &= readOnlyRegistersMasks[j];
+ break;
+ }
+
+ Modify_SPI_Reg_bits(LMS7param(MAC), 2);
+ status = SPI_read_batch(&addrToRead[0], &dataReceived[0], addrToRead.size());
+ if (status != LIBLMS7_SUCCESS)
+ return false;
+ //check if local copy matches chip
+ for (uint16_t i = 0; i < addrToRead.size(); ++i)
+ if (dataReceived[i] != mRegistersMap->GetValue(1, addrToRead[i]))
+ {
+ isSynced = false;
+ break;
+ }
+
+isSyncedEnding:
+ Modify_SPI_Reg_bits(LMS7param(MAC), ch); //restore previously used channel
+ return isSynced;
+}
+
+/** @brief Writes all registers from host to chip
+
+When used on Novena board, also changes gpios to match rx path and tx band selections
+*/
+liblms7_status LMS7002M::UploadAll()
+{
+ if (controlPort == NULL)
+ return LIBLMS7_NO_CONNECTION_MANAGER;
+ if (controlPort->IsOpen() == false)
+ return LIBLMS7_NOT_CONNECTED;
+
+ uint8_t ch = (uint8_t)Get_SPI_Reg_bits(LMS7param(MAC)); //remember used channel
+
+ liblms7_status status;
+
+ vector addrToWrite;
+ vector dataToWrite;
+
+ uint16_t x0020_value = mRegistersMap->GetValue(0, 0x0020);
+ Modify_SPI_Reg_bits(LMS7param(MAC), 1); //select A channel
+
+ addrToWrite = mRegistersMap->GetUsedAddresses(0);
+ //remove 0x0020 register from list, to not change MAC
+ addrToWrite.erase( find(addrToWrite.begin(), addrToWrite.end(), 0x0020) );
+ for (auto address : addrToWrite)
+ dataToWrite.push_back(mRegistersMap->GetValue(0, address));
+
+ status = SPI_write_batch(&addrToWrite[0], &dataToWrite[0], addrToWrite.size());
+ status = LIBLMS7_SUCCESS;
+ if (status != LIBLMS7_SUCCESS)
+ return status;
+ //after all channel A registers have been written, update 0x0020 register value
+ status = SPI_write(0x0020, x0020_value);
+ if (status != LIBLMS7_SUCCESS)
+ return status;
+ Modify_SPI_Reg_bits(LMS7param(MAC), 2);
+ if (status != LIBLMS7_SUCCESS)
+ return status;
+
+ addrToWrite = mRegistersMap->GetUsedAddresses(1);
+ dataToWrite.clear();
+ for (auto address : addrToWrite)
+ {
+ dataToWrite.push_back(mRegistersMap->GetValue(1, address));
+ }
+ Modify_SPI_Reg_bits(LMS7param(MAC), 2); //select B channel
+ status = SPI_write_batch(&addrToWrite[0], &dataToWrite[0], addrToWrite.size());
+ if (status != LIBLMS7_SUCCESS)
+ return status;
+ Modify_SPI_Reg_bits(LMS7param(MAC), ch); //restore last used channel
+
+ //in case of Novena board, need to update GPIO
+ if(controlPort->GetInfo().device == LMS_DEV_NOVENA)
+ {
+ uint16_t regValue = SPI_read(0x0706) & 0xFFF8;
+ //lms_gpio2 - tx output selection:
+ // 0 - TX1_A and TX1_B (Band 1),
+ // 1 - TX2_A and TX2_B (Band 2)
+ regValue |= Get_SPI_Reg_bits(LMS7param(SEL_BAND2_TRF)) << 2; //gpio2
+ //RX active paths
+ //lms_gpio0 | lms_gpio1 RX_A RX_B
+ // 0 0 => no active path
+ // 1 0 => LNAW_A LNAW_B
+ // 0 1 => LNAH_A LNAH_B
+ // 1 1 => LNAL_A LNAL_B
+ switch(Get_SPI_Reg_bits(LMS7param(SEL_PATH_RFE)))
+ {
+ //set gpio1:gpio0
+ case 0: regValue |= 0x0; break;
+ case 1: regValue |= 0x2; break;
+ case 2: regValue |= 0x3; break;
+ case 3: regValue |= 0x1; break;
+ }
+ SPI_write(0x0706, regValue);
+ }
+ return LIBLMS7_SUCCESS;
+}
+
+/** @brief Reads all registers from the chip to host
+
+When used on Novena board, also updates gpios to match rx path and tx band selections
+*/
+liblms7_status LMS7002M::DownloadAll()
+{
+ if (controlPort == nullptr)
+ return LIBLMS7_NO_CONNECTION_MANAGER;
+ if (controlPort->IsOpen() == false)
+ return LIBLMS7_NOT_CONNECTED;
+ liblms7_status status;
+ uint8_t ch = (uint8_t)Get_SPI_Reg_bits(LMS7param(MAC), false);
+
+ vector addrToRead = mRegistersMap->GetUsedAddresses(0);
+ vector dataReceived;
+ dataReceived.resize(addrToRead.size(), 0);
+ Modify_SPI_Reg_bits(LMS7param(MAC), 1);
+ status = SPI_read_batch(&addrToRead[0], &dataReceived[0], addrToRead.size());
+ if (status != LIBLMS7_SUCCESS)
+ return status;
+
+ for (uint16_t i = 0; i < addrToRead.size(); ++i)
+ {
+ uint16_t adr = addrToRead[i];
+ uint16_t val = dataReceived[i];
+ mRegistersMap->SetValue(0, addrToRead[i], dataReceived[i]);
+ }
+
+ addrToRead.clear(); //add only B channel addresses
+ addrToRead = mRegistersMap->GetUsedAddresses(1);
+ dataReceived.resize(addrToRead.size(), 0);
+
+ Modify_SPI_Reg_bits(LMS7param(MAC), 2);
+ status = SPI_read_batch(&addrToRead[0], &dataReceived[0], addrToRead.size());
+ if (status != LIBLMS7_SUCCESS)
+ return status;
+ for (uint16_t i = 0; i < addrToRead.size(); ++i)
+ mRegistersMap->SetValue(1, addrToRead[i], dataReceived[i]);
+
+ Modify_SPI_Reg_bits(LMS7param(MAC), ch); //retore previously used channel
+
+ //in case of Novena board, update GPIO
+ if(controlPort->GetInfo().device == LMS_DEV_NOVENA)
+ {
+ uint16_t regValue = SPI_read(0x0706) & 0xFFF8;
+ //lms_gpio2 - tx output selection:
+ // 0 - TX1_A and TX1_B (Band 1),
+ // 1 - TX2_A and TX2_B (Band 2)
+ regValue |= Get_SPI_Reg_bits(LMS7param(SEL_BAND2_TRF)) << 2; //gpio2
+ //RX active paths
+ //lms_gpio0 | lms_gpio1 RX_A RX_B
+ // 0 0 => no active path
+ // 1 0 => LNAW_A LNAW_B
+ // 0 1 => LNAH_A LNAH_B
+ // 1 1 => LNAL_A LNAL_B
+ switch(Get_SPI_Reg_bits(LMS7param(SEL_PATH_RFE)))
+ {
+ //set gpio1:gpio0
+ case 0: regValue |= 0x0; break;
+ case 1: regValue |= 0x2; break;
+ case 2: regValue |= 0x3; break;
+ case 3: regValue |= 0x1; break;
+ }
+ SPI_write(0x0706, regValue);
+ }
+
+ return LIBLMS7_SUCCESS;
+}
+
+/** @brief Configures interfaces for desired frequency
+ Sets interpolation and decimation, changes MCLK sources and TSP clock dividers accordingly to selected interpolation and decimation
+*/
+liblms7_status LMS7002M::SetInterfaceFrequency(float_type cgen_freq_MHz, const uint8_t interpolation, const uint8_t decimation)
+{
+ Modify_SPI_Reg_bits(LMS7param(HBD_OVR_RXTSP), decimation);
+ Modify_SPI_Reg_bits(LMS7param(HBI_OVR_TXTSP), interpolation);
+ liblms7_status status = SetFrequencyCGEN(cgen_freq_MHz);
+ if (status != LIBLMS7_SUCCESS)
+ return status;
+
+ if (decimation == 7 || decimation == 0) //bypass
+ {
+ Modify_SPI_Reg_bits(LMS7param(RXTSPCLKA_DIV), 0);
+ Modify_SPI_Reg_bits(LMS7param(RXDIVEN), false);
+ Modify_SPI_Reg_bits(LMS7param(MCLK2SRC), 3);
+ }
+ else
+ {
+ uint8_t divider = (uint8_t)pow(2.0, decimation);
+ if (divider > 1)
+ Modify_SPI_Reg_bits(LMS7param(RXTSPCLKA_DIV), (divider / 2) - 1);
+ else
+ Modify_SPI_Reg_bits(LMS7param(RXTSPCLKA_DIV), 0);
+ Modify_SPI_Reg_bits(LMS7param(RXDIVEN), true);
+ Modify_SPI_Reg_bits(LMS7param(MCLK2SRC), 1);
+ }
+ if (interpolation == 7 || interpolation == 0) //bypass
+ {
+ Modify_SPI_Reg_bits(LMS7param(TXTSPCLKA_DIV), 0);
+ Modify_SPI_Reg_bits(LMS7param(TXDIVEN), false);
+ Modify_SPI_Reg_bits(LMS7param(MCLK1SRC), 2);
+ }
+ else
+ {
+ uint8_t divider = (uint8_t)pow(2.0, interpolation);
+ if (divider > 1)
+ Modify_SPI_Reg_bits(LMS7param(TXTSPCLKA_DIV), (divider / 2) - 1);
+ else
+ Modify_SPI_Reg_bits(LMS7param(TXTSPCLKA_DIV), 0);
+ Modify_SPI_Reg_bits(LMS7param(TXDIVEN), true);
+ Modify_SPI_Reg_bits(LMS7param(MCLK1SRC), 0);
+ }
+ return status;
+}
diff --git a/targets/ARCH/LMSSDR/USERSPACE/LIB/lms7002m/LMS7002M.h b/targets/ARCH/LMSSDR/USERSPACE/LIB/lms7002m/LMS7002M.h
new file mode 100644
index 0000000000..81234c28a3
--- /dev/null
+++ b/targets/ARCH/LMSSDR/USERSPACE/LIB/lms7002m/LMS7002M.h
@@ -0,0 +1,177 @@
+/**
+@file LMS7002M.h
+@author Lime Microsystems (www.limemicro.com)
+@brief LMS7002M transceiver configuration interface
+*/
+
+#ifndef LMS7API_H
+#define LMS7API_H
+
+#include "LMS7002M_statuses.h"
+#include "LMS7002M_parameters.h"
+#include "typedefs.h"
+
+#include
+
+class LMScomms;
+class LMS7002M_RegistersMap;
+
+class LMS7002M
+{
+public:
+ enum
+ {
+ Rx, Tx
+ };
+
+ LMS7002M();
+ LMS7002M(LMScomms* controlPort);
+ virtual ~LMS7002M();
+
+ ///@name Registers writing and reading
+ liblms7_status UploadAll();
+ liblms7_status DownloadAll();
+ bool IsSynced();
+
+ liblms7_status ResetChip();
+ liblms7_status LoadConfig(const char* filename);
+ liblms7_status SaveConfig(const char* filename);
+ ///@}
+
+ ///@name Registers writing and reading
+ uint16_t Get_SPI_Reg_bits(const LMS7Parameter ¶m, bool fromChip = true);
+ uint16_t Get_SPI_Reg_bits(uint16_t address, uint8_t msb, uint8_t lsb, bool fromChip = true);
+ liblms7_status Modify_SPI_Reg_bits(const LMS7Parameter ¶m, const uint16_t value, bool fromChip = true);
+ liblms7_status Modify_SPI_Reg_bits(uint16_t address, uint8_t msb, uint8_t lsb, uint16_t value, bool fromChip = true);
+ liblms7_status SPI_write(uint16_t address, uint16_t data);
+ uint16_t SPI_read(uint16_t address, bool fromChip = true, liblms7_status *status = 0);
+ liblms7_status RegistersTest();
+ ///@}
+
+ ///@name Transmitter, Receiver calibrations
+ liblms7_status CalibrateRx(float_type bandwidth_MHz);
+ liblms7_status CalibrateTx(float_type bandwidth_MHz);
+ ///@}
+
+ ///@name Filters tuning
+ enum TxFilter
+ {
+ TX_LADDER, TX_REALPOLE, TX_HIGHBAND
+ };
+ enum RxFilter
+ {
+ RX_TIA, RX_LPF_LOWBAND, RX_LPF_HIGHBAND
+ };
+ liblms7_status TuneTxFilter(TxFilter filterType, float_type bandwidth_MHz);
+ liblms7_status TuneTxFilterLowBandChain(float_type ladder_bw_MHz, float_type realpole_bw_MHz);
+ liblms7_status TuneRxFilter(RxFilter filterType, float_type bandwidth_MHz);
+ ///@}
+
+ ///@name CGEN and PLL
+ float_type GetReferenceClk_SX(bool tx);
+ float_type GetFrequencyCGEN_MHz();
+ liblms7_status SetFrequencyCGEN(float_type freq_MHz);
+ float_type GetFrequencySX_MHz(bool tx, float_type refClk_MHz);
+ liblms7_status SetFrequencySX(bool tx, float_type freq_MHz, float_type refClk_MHz);
+ ///VCO modules available for tuning
+ enum VCO_Module
+ {
+ VCO_CGEN, VCO_SXR, VCO_SXT
+ };
+ liblms7_status TuneVCO(VCO_Module module);
+ ///@}
+
+ ///@name TSP
+ liblms7_status LoadDC_REG_IQ(bool tx, int16_t I, int16_t Q);
+ liblms7_status SetNCOFrequency(bool tx, uint8_t index, float_type freq_MHz);
+ float_type GetNCOFrequency_MHz(bool tx, uint8_t index, float_type refClk_MHz, bool fromChip = true);
+ liblms7_status SetNCOPhaseOffsetForMode0(bool tx, float_type angle_Deg);
+ liblms7_status SetNCOPhaseOffset(bool tx, uint8_t index, float_type angle_Deg);
+ float_type GetNCOPhaseOffset_Deg(bool tx, uint8_t index);
+ liblms7_status SetGFIRCoefficients(bool tx, uint8_t GFIR_index, const int16_t *coef, uint8_t coefCount);
+ liblms7_status GetGFIRCoefficients(bool tx, uint8_t GFIR_index, int16_t *coef, uint8_t coefCount);
+ float_type GetReferenceClk_TSP_MHz(bool tx);
+ ///@}
+
+ liblms7_status SetInterfaceFrequency(float_type cgen_freq_MHz, const uint8_t interpolation, const uint8_t decimation);
+
+ ///enumeration to indicate module registers intervals
+ enum MemorySection
+ {
+ LimeLight = 0, EN_DIR, AFE, BIAS, XBUF, CGEN, LDO, BIST, CDS,
+ TRF, TBB, RFE, RBB, SX, TxTSP,
+ TxNCO, TxGFIR1, TxGFIR2, TxGFIR3a, TxGFIR3b, TxGFIR3c,
+ RxTSP, RxNCO, RxGFIR1, RxGFIR2, RxGFIR3a, RxGFIR3b, RxGFIR3c,
+ MEMORY_SECTIONS_COUNT
+ };
+ virtual liblms7_status SetDefaults(MemorySection module);
+ LMScomms* GetControlPort() const { return controlPort;};
+
+ static const float_type gLadder_lower_limit;
+ static const float_type gLadder_higher_limit;
+ static const float_type gRealpole_lower_limit;
+ static const float_type gRealpole_higher_limit;
+ static const float_type gHighband_lower_limit;
+ static const float_type gHighband_higher_limit;
+
+ static const float_type gRxTIA_higher_limit;
+ static const float_type gRxTIA_lower_limit_g1;
+ static const float_type gRxTIA_lower_limit_g23;
+ static const float_type gRxLPF_low_lower_limit;
+ static const float_type gRxLPF_low_higher_limit;
+ static const float_type gRxLPF_high_lower_limit;
+ static const float_type gRxLPF_high_higher_limit;
+
+ static float_type gVCO_frequency_table[3][2];
+ static float_type gCGEN_VCO_frequencies[2];
+
+ //protected:
+ LMS7002M_RegistersMap *mRegistersMap;
+ static const uint16_t readOnlyRegisters[];
+ static const uint16_t readOnlyRegistersMasks[];
+
+ uint16_t MemorySectionAddresses[MEMORY_SECTIONS_COUNT][2];
+ ///@name Algorithms functions
+ void BackupAllRegisters();
+ void RestoreAllRegisters();
+ uint32_t GetRSSI();
+ void SetRxDCOFF(int8_t offsetI, int8_t offsetQ);
+ uint32_t FindMinRSSI_Gain(const LMS7Parameter ¶m, uint16_t *foundValue);
+ uint32_t FindMinRSSI(const LMS7Parameter ¶m, const int16_t startValue, int16_t *result, const uint8_t scanWidth, const uint8_t twoCompl, int8_t stepMult = 1);
+ uint32_t FindMinRSSI(const uint16_t addr, const uint8_t msb, const uint8_t lsb, const int16_t startValue, int16_t *result, const uint8_t scanWidth, const uint8_t twoCompl, int8_t stepMult = 1);
+ void CalibrateRxDC_RSSI();
+ liblms7_status CalibrateTxSetup(float_type bandwidth_MHz);
+ liblms7_status CalibrateRxSetup(float_type bandwidth_MHz);
+ liblms7_status FixRXSaturation();
+ void FilterTuning_AdjustGains();
+ liblms7_status TuneTxFilterSetup(TxFilter type, float_type cutoff_MHz);
+ liblms7_status TuneRxFilterSetup(RxFilter type, float_type cutoff_MHz);
+ liblms7_status RFE_TIA_Calibration(float_type TIA_freq_MHz);
+ liblms7_status RxLPFLow_Calibration(float_type RxLPFL_freq_MHz);
+ liblms7_status RxLPFHigh_Calibration(float_type RxLPFH_freq_MHz);
+
+ liblms7_status RegistersTestInterval(uint16_t startAddr, uint16_t endAddr, uint16_t pattern, std::stringstream &ss);
+ liblms7_status SPI_write_batch(const uint16_t* spiAddr, const uint16_t* spiData, uint16_t cnt);
+ liblms7_status SPI_read_batch(const uint16_t* spiAddr, uint16_t* spiData, uint16_t cnt);
+ liblms7_status Modify_SPI_Reg_mask(const uint16_t *addr, const uint16_t *masks, const uint16_t *values, uint8_t start, uint8_t stop);
+ ///@}
+ ///Reference clock used for Receiver frequency calculations
+ float_type mRefClkSXR_MHz;
+ ///Reference clock used for Transmitter frequency calculations
+ float_type mRefClkSXT_MHz;
+
+ enum LogType
+ {
+ LOG_INFO,
+ LOG_WARNING,
+ LOG_ERROR,
+ LOG_DATA
+ };
+ virtual void Log(const char* text, LogType type);
+
+ ///port used for communicating with LMS7002M
+ LMScomms* controlPort;
+
+ liblms7_status LoadConfigLegacyFile(const char* filename);
+};
+#endif
diff --git a/targets/ARCH/LMSSDR/USERSPACE/LIB/lms7002m/LMS7002M_RegistersMap.cpp b/targets/ARCH/LMSSDR/USERSPACE/LIB/lms7002m/LMS7002M_RegistersMap.cpp
new file mode 100644
index 0000000000..8c870ffcc0
--- /dev/null
+++ b/targets/ARCH/LMSSDR/USERSPACE/LIB/lms7002m/LMS7002M_RegistersMap.cpp
@@ -0,0 +1,68 @@
+#include "LMS7002M_RegistersMap.h"
+#include "LMS7002M_parameters.h"
+
+LMS7002M_RegistersMap::LMS7002M_RegistersMap()
+{
+
+}
+
+LMS7002M_RegistersMap::~LMS7002M_RegistersMap()
+{
+
+}
+
+uint16_t LMS7002M_RegistersMap::GetDefaultValue(uint16_t address) const
+{
+ std::map::const_iterator iter = mChannelA.find(address);
+ if( iter != mChannelA.end())
+ return iter->second.defaultValue;
+ else
+ return 0;
+}
+
+void LMS7002M_RegistersMap::InitializeDefaultValues(const std::vector parameterList)
+{
+ for(auto parameter : parameterList)
+ {
+ uint16_t regValue = mChannelA[parameter->address].defaultValue;
+ mChannelA[parameter->address].defaultValue = regValue | (parameter->defaultValue << parameter->lsb);
+ mChannelA[parameter->address].value = mChannelA[parameter->address].defaultValue;
+ if(parameter->address >= 0x0100)
+ mChannelB[parameter->address].value = mChannelA[parameter->address].value;
+ }
+}
+
+void LMS7002M_RegistersMap::SetValue(uint8_t channel, const uint16_t address, const uint16_t value)
+{
+ if(channel == 0)
+ mChannelA[address].value = value;
+ else if(channel == 1)
+ mChannelB[address].value = value;
+}
+
+uint16_t LMS7002M_RegistersMap::GetValue(uint8_t channel, uint16_t address) const
+{
+ const std::map *regMap;
+ if(channel == 0)
+ regMap = &mChannelA;
+ else if(channel == 1)
+ regMap = &mChannelB;
+ std::map::const_iterator iter;
+ iter = regMap->find(address);
+ if (iter != regMap->end())
+ return iter->second.value;
+ else
+ return 0;
+}
+
+std::vector LMS7002M_RegistersMap::GetUsedAddresses(const uint8_t channel) const
+{
+ std::vector addresses;
+ if(channel == 0)
+ for(auto iter : mChannelA)
+ addresses.push_back(iter.first);
+ else if(channel == 1)
+ for(auto iter : mChannelB)
+ addresses.push_back(iter.first);
+ return addresses;
+}
diff --git a/targets/ARCH/LMSSDR/USERSPACE/LIB/lms7002m/LMS7002M_RegistersMap.h b/targets/ARCH/LMSSDR/USERSPACE/LIB/lms7002m/LMS7002M_RegistersMap.h
new file mode 100644
index 0000000000..5ccda752db
--- /dev/null
+++ b/targets/ARCH/LMSSDR/USERSPACE/LIB/lms7002m/LMS7002M_RegistersMap.h
@@ -0,0 +1,35 @@
+#ifndef LMS7002M_REGISTERS_MAP_H
+#define LMS7002M_REGISTERS_MAP_H
+
+#include
+#include