Compare commits
23 Commits
pre-commit
...
mavenir-in
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cfb1295750 | ||
|
|
90a77ddb7d | ||
|
|
9d96fe3982 | ||
|
|
80ba29e045 | ||
|
|
711c94240c | ||
|
|
7f9a4af1be | ||
|
|
d3913b5dc2 | ||
|
|
87f045157a | ||
|
|
f035f67db9 | ||
|
|
43251259be | ||
|
|
c697e62554 | ||
|
|
b1fd315378 | ||
|
|
fde44e79c1 | ||
|
|
5ac65203d0 | ||
|
|
7e5ac36827 | ||
|
|
61a73e52f3 | ||
|
|
ba8d796a29 | ||
|
|
cb17950243 | ||
|
|
acc1487289 | ||
|
|
d8a7a69571 | ||
|
|
552c4b251a | ||
|
|
4ecce3f0e7 | ||
|
|
e4634aa85a |
@@ -160,6 +160,11 @@ set (OPENAIR_TARGETS ${OPENAIR_DIR}/targets)
|
||||
set (OPENAIR3_DIR ${OPENAIR_DIR}/openair3)
|
||||
set (OPENAIR_CMAKE ${OPENAIR_DIR}/cmake_targets)
|
||||
set (OPENAIR_BIN_DIR ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY})
|
||||
set (XRAN_DIR ${OPENAIR_DIR}/targets/ARCH/ORAN_FHI/lib)
|
||||
set (XRAN_LIB_DIR /usr/local/xran)
|
||||
set (INTEL_LIB_DIR /usr/local/intel64)
|
||||
set (INTEL_LIB /usr/local/intel64)
|
||||
set (DPDK_DIR /usr/local/dpdk_19_11/include/dpdk)
|
||||
|
||||
project (OpenAirInterface)
|
||||
|
||||
@@ -793,10 +798,34 @@ add_library(benetel_4g MODULE ${HWLIB_BENETEL_4G_SOURCE} )
|
||||
|
||||
set_target_properties(benetel_4g PROPERTIES COMPILE_FLAGS "-fvisibility=hidden -I$ENV{RTE_SDK}/$ENV{RTE_TARGET}/include")
|
||||
|
||||
SET(DPDK_LIBS "-Wl,-rpath,$ENV{RTE_SDK}/$ENV{RTE_TARGET}/lib -Wl,--whole-archive -L$ENV{RTE_SDK}/$ENV{RTE_TARGET}/lib -ldpdk -Wl,--no-whole-archive")
|
||||
SET(DPDK_LIBS "-Wl,-rpath,$ENV{RTE_SDK}/$ENV{RTE_TARGET}/lib -Wl,--whole-archive -L$ENV{RTE_SDK}/$ENV{RTE_TARGET}/lib -L/usr/local/lib64/ -ldpdk -Wl,--no-whole-archive")
|
||||
TARGET_LINK_LIBRARIES(benetel_4g ${DPDK_LIBS})
|
||||
TARGET_LINK_LIBRARIES(benetel_4g pthread dl rt m numa)
|
||||
|
||||
# ORAN 4G library
|
||||
######################################################################
|
||||
|
||||
include_directories("${XRAN_DIR}")
|
||||
include_directories("${DPDK_DIR}")
|
||||
include_directories("${INTEL_LIB}")
|
||||
|
||||
set(ORAN_FHLIB_4G_SOURCE
|
||||
${OPENAIR_TARGETS}/ARCH/ETHERNET/oran/4g/oran.cpp
|
||||
${OPENAIR_TARGETS}/ARCH/ETHERNET/oran/4g/shared_buffers.c
|
||||
${OPENAIR_TARGETS}/ARCH/ETHERNET/oran/4g/low_oran.c
|
||||
${OPENAIR_TARGETS}/ARCH/ETHERNET/oran/4g/low_dpdk_oran.c
|
||||
${OPENAIR_TARGETS}/ARCH/ETHERNET/oran/4g/oran_isolate.c
|
||||
)
|
||||
add_library(oran_fhlib_4g MODULE ${ORAN_FHLIB_4G_SOURCE})
|
||||
|
||||
set_target_properties(oran_fhlib_4g PROPERTIES COMPILE_FLAGS "-fvisibility=hidden -march=native -I$ENV{RTE_SDK}/$ENV{RTE_TARGET}/include")
|
||||
|
||||
SET(DPDK_LIBS "-Wl,-rpath,$ENV{RTE_SDK}/$ENV{RTE_TARGET}/lib -Wl,--whole-archive -L$ENV{RTE_SDK}/$ENV{RTE_TARGET}/lib -ldpdk -Wl,--no-whole-archive")
|
||||
TARGET_LINK_LIBRARIES(oran_fhlib_4g ${DPDK_LIBS})
|
||||
TARGET_LINK_LIBRARIES(oran_fhlib_4g -L${XRAN_LIB_DIR} -lxran)
|
||||
TARGET_LINK_LIBRARIES(oran_fhlib_4g -L${INTEL_LIB} -lirc)
|
||||
TARGET_LINK_LIBRARIES(oran_fhlib_4g pthread dl rt m numa)
|
||||
|
||||
# Benetel 5G library
|
||||
######################################################################
|
||||
|
||||
@@ -815,6 +844,36 @@ SET(DPDK_LIBS "-Wl,-rpath,$ENV{RTE_SDK}/$ENV{RTE_TARGET}/lib -Wl,--whole-archive
|
||||
TARGET_LINK_LIBRARIES(benetel_5g ${DPDK_LIBS})
|
||||
TARGET_LINK_LIBRARIES(benetel_5g pthread dl rt m numa)
|
||||
|
||||
# ORAN 5G library
|
||||
######################################################################
|
||||
|
||||
include_directories("${XRAN_DIR}")
|
||||
include_directories("${DPDK_DIR}")
|
||||
include_directories("${INTEL_LIB_DIR}")
|
||||
include_directories("${XRAN_LIB_DIR}")
|
||||
|
||||
set(ORAN_FHLIB_5G_SOURCE
|
||||
${OPENAIR_TARGETS}/ARCH/ETHERNET/oran/5g/oran.cpp
|
||||
${OPENAIR_TARGETS}/ARCH/ETHERNET/oran/5g/xran_lib_wrap.cpp
|
||||
${OPENAIR_TARGETS}/ARCH/ETHERNET/oran/5g/common.cpp
|
||||
${OPENAIR_TARGETS}/ARCH/ETHERNET/oran/5g/oran_isolate.c
|
||||
)
|
||||
add_library(oran_fhlib_5g MODULE ${ORAN_FHLIB_5G_SOURCE})
|
||||
|
||||
find_library(XRANFHI xran HINTS ${XRAN_LIB_DIR})
|
||||
#find_library(INTELIRC irc HINTS ${INTEL_LIB_DIR})
|
||||
|
||||
set_target_properties(oran_fhlib_5g PROPERTIES COMPILE_FLAGS "-fvisibility=hidden -march=native -I$ENV{RTE_SDK}/$ENV{RTE_TARGET}/include")
|
||||
|
||||
#SET(DPDK_LIBS "-Wl,-rpath,$ENV{RTE_SDK}/$ENV{RTE_TARGET}/lib -Wl,--whole-archive -L$ENV{RTE_SDK}/$ENV{RTE_TARGET}/lib -L/usr/local/lib64 -ldpdk -Wl,--no-whole-archive")
|
||||
execute_process(COMMAND pkg-config --libs libdpdk | sed --expression='s/[[:space:]]*$//' OUTPUT_VARIABLE DPDK_LIBS)
|
||||
TARGET_LINK_LIBRARIES(oran_fhlib_5g ${DPDK_LIBS})
|
||||
#TARGET_LINK_LIBRARIES(oran_fhlib_5g -L${XRAN_LIB_DIR} -lxran)
|
||||
TARGET_LINK_LIBRARIES(oran_fhlib_5g -lxran)
|
||||
#TARGET_LINK_LIBRARIES(oran_fhlib_5g -L${INTEL_LIB} -lirc)
|
||||
#TARGET_LINK_LIBRARIES(oran_fhlib_5g ${INTELIRC})
|
||||
TARGET_LINK_LIBRARIES(oran_fhlib_5g pthread dl rt m numa)
|
||||
|
||||
##########################################################
|
||||
|
||||
include_directories ("${OPENAIR_TARGETS}/ARCH/COMMON")
|
||||
|
||||
@@ -117,6 +117,8 @@ Options
|
||||
--run-group
|
||||
runs only specified test cases specified here. This flag is only valid with -s
|
||||
-V | --vcd
|
||||
-t | --transport
|
||||
Ethernet, benetel4g, benetel5g, oran_fhlib_4g, oran_fhlib_5g
|
||||
Adds a debgging facility to the binary files: GUI with major internal synchronization events
|
||||
-x | --xforms
|
||||
Will compile with software oscilloscope features
|
||||
@@ -256,7 +258,7 @@ function main() {
|
||||
--RU)
|
||||
RU=1
|
||||
echo_info "Will compile RRU"
|
||||
shift;;
|
||||
shift;;
|
||||
-a | --agent)
|
||||
echo_info "FlexRAN support is always compiled into the eNB"
|
||||
shift;;
|
||||
@@ -299,7 +301,7 @@ function main() {
|
||||
CMAKE_CMD="$CMAKE_CMD -DRF_BOARD=${HW}"
|
||||
shift 2;;
|
||||
-t | --transport)
|
||||
TP=$2
|
||||
TP=$2
|
||||
shift 2;;
|
||||
-P | --phy_simulators)
|
||||
SIMUS_PHY=1
|
||||
@@ -349,7 +351,7 @@ function main() {
|
||||
echo_info "Setting CPU FLAGS from USER to: $2"
|
||||
shift 2;;
|
||||
--build-doxygen)
|
||||
BUILD_DOXYGEN=1
|
||||
BUILD_DOXYGEN=1
|
||||
echo_info "Will build doxygen support"
|
||||
shift;;
|
||||
--build-coverity-scan)
|
||||
@@ -419,7 +421,7 @@ function main() {
|
||||
fi
|
||||
done
|
||||
done
|
||||
if [ "${BUILD_OPTLIB## }" != "$2" ] ; then
|
||||
if [ "${BUILD_OPTLIB## }" != "$2" ] ; then
|
||||
echo_fatal "Unknown optional library in $2, valid libraries are $OPTIONAL_LIBRARIES"
|
||||
fi
|
||||
fi
|
||||
@@ -443,8 +445,8 @@ function main() {
|
||||
-h | --help)
|
||||
print_help
|
||||
exit 1;;
|
||||
*)
|
||||
print_help
|
||||
*)
|
||||
print_help
|
||||
echo_fatal "Unknown option $1"
|
||||
break;;
|
||||
esac
|
||||
@@ -470,13 +472,13 @@ function main() {
|
||||
|
||||
if [ "$eNB" = "1" -o "$eNBocp" = "1" -o "$gNB" = "1" ] ; then
|
||||
if [ "$HW" = "None" -a "$TP" = "None" ] ; then
|
||||
echo_info "No local radio head and no transport protocol selected"
|
||||
echo_info "No local radio head and no transport protocol selected"
|
||||
fi
|
||||
if [ "$HW" = "None" ] ; then
|
||||
echo_info "No radio head has been selected (HW set to $HW)"
|
||||
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)"
|
||||
echo_info "No transport protocol has been selected (TP set to $TP)"
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -491,11 +493,11 @@ function main() {
|
||||
if [ "$DEADLINE_SCHEDULER_FLAG_USER" = "" ]; then
|
||||
case "$HW" in
|
||||
"EXMIMO")
|
||||
DEADLINE_SCHEDULER_FLAG_USER="True"
|
||||
;;
|
||||
DEADLINE_SCHEDULER_FLAG_USER="True"
|
||||
;;
|
||||
*)
|
||||
DEADLINE_SCHEDULER_FLAG_USER="False"
|
||||
;;
|
||||
DEADLINE_SCHEDULER_FLAG_USER="False"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
@@ -695,7 +697,7 @@ function main() {
|
||||
echo_info "Compiling physical unitary tests simulators"
|
||||
# TODO: fix: dlsim_tm4 pucchsim prachsim pdcchsim pbchsim mbmssim
|
||||
simlist="dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim"
|
||||
# simlist="ldpctest"
|
||||
# simlist="ldpctest"
|
||||
for f in $simlist ; do
|
||||
compilations \
|
||||
ran_build $f \
|
||||
@@ -734,9 +736,9 @@ function main() {
|
||||
make -C $OPENAIR_DIR/cmake_targets/$BUILD_DIR/build oarf > $dlog/oarf.txt 2>&1
|
||||
cp $OPENAIR_DIR/cmake_targets/$BUILD_DIR/build/*.oct $dbin
|
||||
if [ -s $dbin/oarf_config_exmimo.oct ] ; then
|
||||
echo_success "oarf tools compiled"
|
||||
echo_success "oarf tools compiled"
|
||||
else
|
||||
echo_error "oarf tools compilation failed"
|
||||
echo_error "oarf tools compilation failed"
|
||||
fi
|
||||
cp $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 $dbin
|
||||
fi
|
||||
@@ -844,7 +846,7 @@ function main() {
|
||||
|
||||
ln -sf liboai_bladerfdevif.so liboai_device.so
|
||||
ln -sf $dbin/liboai_bladerfdevif.so.$REL $dbin/liboai_device.so
|
||||
echo_info "liboai_device.so is linked to BLADERF device library"
|
||||
echo_info "liboai_device.so is linked to BLADERF device library"
|
||||
elif [ "$HW" == "OAI_LMSSDR" ] ; then
|
||||
# if [ -f "/usr/include/libbladeRF.h" ] ; then
|
||||
compilations \
|
||||
@@ -854,7 +856,7 @@ function main() {
|
||||
|
||||
ln -sf liboai_lmssdrdevif.so liboai_device.so
|
||||
ln -sf $dbin/liboai_lmssdrdevif.so.$REL $dbin/liboai_device.so
|
||||
echo_info "liboai_device.so is linked to LMSSDR device library"
|
||||
echo_info "liboai_device.so is linked to LMSSDR device library"
|
||||
elif [ "$HW" == "OAI_IRIS" ] ; then
|
||||
compilations \
|
||||
$BUILD_DIR oai_irisdevif \
|
||||
@@ -906,30 +908,46 @@ function main() {
|
||||
echo_info "Building transport protocol libraries"
|
||||
rm -f liboai_transpro.so
|
||||
rm -f $dbin/liboai_transpro.so
|
||||
if [ "$TP" == "Ethernet" ]; then
|
||||
if [ "$TP" == "Ethernet" ]; then
|
||||
compilations \
|
||||
$BUILD_DIR oai_eth_transpro \
|
||||
liboai_eth_transpro.so $dbin/liboai_eth_transpro.so.$REL
|
||||
$BUILD_DIR oai_eth_transpro \
|
||||
liboai_eth_transpro.so $dbin/liboai_eth_transpro.so.$REL
|
||||
ln -sf liboai_eth_transpro.so liboai_transpro.so
|
||||
ln -sf $dbin/liboai_eth_transpro.so.$REL $dbin/liboai_transpro.so
|
||||
echo_info "liboai_transpro.so is linked to ETHERNET transport"
|
||||
fi
|
||||
if [ "$TP" == "benetel4g" ]; then
|
||||
fi
|
||||
if [ "$TP" == "benetel4g" ]; then
|
||||
compilations \
|
||||
$BUILD_DIR benetel_4g \
|
||||
libbenetel_4g.so $dbin/libbenetel_4g.$REL
|
||||
ln -sf libbenetel_4g.so liboai_transpro.so
|
||||
ln -sf $dbin/libbenetel_4g.so.$REL $dbin/liboai_transpro.so
|
||||
echo_info "liboai_transpro.so is linked to BENETEL4G transport"
|
||||
fi
|
||||
if [ "$TP" == "benetel5g" ]; then
|
||||
fi
|
||||
if [ "$TP" == "benetel5g" ]; then
|
||||
compilations \
|
||||
$BUILD_DIR benetel_5g \
|
||||
libbenetel_5g.so $dbin/libbenetel_5g.$REL
|
||||
ln -sf libbenetel_5g.so liboai_transpro.so
|
||||
ln -sf $dbin/libbenetel_5g.so.$REL $dbin/liboai_transpro.so
|
||||
echo_info "liboai_transpro.so is linked to BENETEL4G transport"
|
||||
fi
|
||||
fi
|
||||
if [ "$TP" == "oran_fhlib_4g" ]; then
|
||||
compilations \
|
||||
$build_dir oran_fhlib_4g \
|
||||
liboran_fhlib_4g.so $dbin/liboran_fhlib_4g.$REL
|
||||
ln -sf liboran_fhlib_4g.so liboai_transpro.so
|
||||
ln -sf $dbin/liboran_fhlib_4g.so.$REL $dbin/liboai_transpro.so
|
||||
echo_info "liboai_transpro.so is linked to oran_fhlib_4G transport"
|
||||
fi
|
||||
if [ "$TP" == "oran_fhlib_5g" ]; then
|
||||
compilations \
|
||||
$build_dir oran_fhlib_5g \
|
||||
liboran_fhlib_5g.so $dbin/liboran_fhlib_5g.$REL
|
||||
ln -sf liboran_fhlib_5g.so liboai_transpro.so
|
||||
ln -sf $dbin/liboran_fhlib_5g.so.$REL $dbin/liboai_transpro.so
|
||||
echo_info "liboai_transpro.so is linked to oran_fhlib_5G transport"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
1
cmake_targets/ran_build/build/conf.json
Symbolic link
@@ -0,0 +1 @@
|
||||
/home/eurecom/raymond/conf_mavenir.json
|
||||
@@ -46,7 +46,6 @@
|
||||
|
||||
#include "PHY/NR_REFSIG/ul_ref_seq_nr.h"
|
||||
|
||||
|
||||
int l1_north_init_gNB() {
|
||||
|
||||
if (RC.nb_nr_L1_inst > 0 && RC.gNB != NULL) {
|
||||
|
||||
@@ -679,6 +679,7 @@ typedef enum {
|
||||
OAI_IF4p5_only =1,
|
||||
OAI_IF5_and_IF4p5 =2,
|
||||
MBP_IF5 =3,
|
||||
ORAN_only =4,
|
||||
MAX_FH_FMTs =4
|
||||
} FH_fmt_options_t;
|
||||
|
||||
|
||||
@@ -46,6 +46,8 @@
|
||||
#include "common_lib.h"
|
||||
#include "ethernet_lib.h"
|
||||
|
||||
#include "../../oran/4g/oran.h"
|
||||
|
||||
|
||||
int num_devices_eth = 0;
|
||||
struct sockaddr_in dest_addr[MAX_INST];
|
||||
|
||||
99
targets/ARCH/ETHERNET/oran/4g/low_dpdk_oran.c
Normal file
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <sched.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#include "low_oran.h"
|
||||
|
||||
int oran_main(int argc, char **argv, oran_t *);
|
||||
|
||||
void *dpdk_thread(void *bs)
|
||||
{
|
||||
char *v[] = { "softmodem", "config_file_o_du.dat", "0000:81:0e.0", "0000:81:0e.1"};
|
||||
oran_main(4, v, bs);
|
||||
exit(1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void *oran_start_dpdk(char *ifname, shared_buffers *buffers)
|
||||
{
|
||||
oran_t *bs;
|
||||
|
||||
bs = calloc(1, sizeof(oran_t));
|
||||
if (bs == NULL) {
|
||||
printf("%s: out of memory\n", __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
bs->buffers = buffers;
|
||||
|
||||
pthread_attr_t attr;
|
||||
|
||||
if (pthread_attr_init(&attr) != 0) {
|
||||
printf("pthread_attr_init failed\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
cpu_set_t cpuset;
|
||||
CPU_ZERO(&cpuset);
|
||||
CPU_SET(10,&cpuset);
|
||||
if (pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &cpuset) != 0) {
|
||||
printf("pthread_attr_setaffinity_np failed\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (pthread_attr_setschedpolicy(&attr, SCHED_FIFO) != 0) {
|
||||
printf("pthread_attr_setschedpolicy failed\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
struct sched_param params;
|
||||
params.sched_priority = sched_get_priority_max(SCHED_FIFO);
|
||||
if (sched_get_priority_max(SCHED_FIFO) == -1) {
|
||||
printf("sched_get_priority_max failed\n");
|
||||
exit(1);
|
||||
}
|
||||
if (pthread_attr_setschedparam(&attr, ¶ms) != 0) {
|
||||
printf("pthread_setschedparam failed\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
pthread_t t;
|
||||
if (pthread_create(&t, &attr, dpdk_thread, bs) != 0) {
|
||||
printf("%s: thread creation failed\n", __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (pthread_attr_destroy(&attr) != 0) {
|
||||
printf("pthread_attr_init failed\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
return bs;
|
||||
}
|
||||
|
||||
|
||||
41
targets/ARCH/ETHERNET/oran/4g/low_oran.c
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
#include "low_oran.h"
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
|
||||
void *oran_start_dpdk(char *ifname, shared_buffers *buffers);
|
||||
|
||||
void *oran_start(char *ifname, shared_buffers *buffers)
|
||||
{
|
||||
printf("oran_start\n");
|
||||
if (!strcmp(ifname, "dpdk"))
|
||||
return oran_start_dpdk(ifname, buffers);
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
39
targets/ARCH/ETHERNET/oran/4g/low_oran.h
Normal file
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
#include "shared_buffers.h"
|
||||
|
||||
#ifndef LOW_ORAN_H
|
||||
#define LOW_ORAN_H
|
||||
|
||||
void *oran_start(char *ifname, shared_buffers *buffers);
|
||||
|
||||
|
||||
typedef struct {
|
||||
shared_buffers *buffers;
|
||||
int next_subframe;
|
||||
int next_symbol;
|
||||
int expected_oran_frame;
|
||||
} oran_t;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
510
targets/ARCH/ETHERNET/oran/4g/oran.cpp
Normal file
@@ -0,0 +1,510 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
// #include "common_lib.h"
|
||||
// #include "ethernet_lib.h"
|
||||
#include "oran_isolate.h"
|
||||
#include "shared_buffers.h"
|
||||
#include "low_oran.h"
|
||||
#include "xran_lib_wrap.hpp"
|
||||
#include "common.hpp"
|
||||
#include "xran_compression.h"
|
||||
|
||||
|
||||
// Declare variable useful for the send buffer function
|
||||
struct xran_device_ctx *p_xran_dev_ctx_2;
|
||||
|
||||
// Variable declaration useful for fill IQ samples from file
|
||||
#define IQ_PLAYBACK_BUFFER_BYTES (XRAN_NUM_OF_SLOT_IN_TDD_LOOP*N_SYM_PER_SLOT*XRAN_MAX_PRBS*N_SC_PER_PRB*4L)
|
||||
int16_t *p_tx_play_buffer[MAX_ANT_CARRIER_SUPPORTED];
|
||||
int iq_playback_buffer_size_dl = IQ_PLAYBACK_BUFFER_BYTES;
|
||||
int32_t tx_play_buffer_size[MAX_ANT_CARRIER_SUPPORTED];
|
||||
int32_t tx_play_buffer_position[MAX_ANT_CARRIER_SUPPORTED];
|
||||
|
||||
// Declare the function useful to load IQs from file
|
||||
int sys_load_file_to_buff(char *filename, char *bufname, unsigned char *pBuffer, unsigned int size, unsigned int buffers_num)
|
||||
{
|
||||
unsigned int file_size = 0;
|
||||
int num= 0;
|
||||
|
||||
if (size)
|
||||
{
|
||||
if (filename && bufname)
|
||||
{
|
||||
FILE *file;
|
||||
printf("Loading file %s to %s: ", filename, bufname);
|
||||
file = fopen(filename, "rb");
|
||||
|
||||
|
||||
if (file == NULL)
|
||||
{
|
||||
printf("can't open file %s!!!", filename);
|
||||
exit(-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
fseek(file, 0, SEEK_END);
|
||||
file_size = ftell(file);
|
||||
fseek(file, 0, SEEK_SET);
|
||||
|
||||
if ((file_size > size) || (file_size == 0))
|
||||
file_size = size;
|
||||
|
||||
printf("Reading IQ samples from file: File Size: %d [Buffer Size: %d]\n", file_size, size);
|
||||
|
||||
num = fread(pBuffer, buffers_num, size, file);
|
||||
fflush(file);
|
||||
fclose(file);
|
||||
printf("from addr (0x%lx) size (%d) bytes num (%d)", (uint64_t)pBuffer, file_size, num);
|
||||
}
|
||||
printf(" \n");
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
printf(" the file name, buffer name are not set!!!");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf(" the %s is free: size = %d bytes!!!", bufname, size);
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
void xran_fh_rx_callback(void *pCallbackTag, xran_status_t status){
|
||||
rte_pause();
|
||||
}
|
||||
void xran_fh_srs_callback(void *pCallbackTag, xran_status_t status){
|
||||
rte_pause();
|
||||
}
|
||||
void xran_fh_rx_prach_callback(void *pCallbackTag, xran_status_t status){
|
||||
rte_pause();
|
||||
}
|
||||
|
||||
|
||||
int physide_dl_tti_call_back(void * param)
|
||||
{
|
||||
rte_pause();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int physide_ul_half_slot_call_back(void * param)
|
||||
{
|
||||
rte_pause();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int physide_ul_full_slot_call_back(void * param)
|
||||
{
|
||||
rte_pause();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
void* define_oran_pointer(){
|
||||
xranLibWraper *xranlib;
|
||||
xranlib = new xranLibWraper;
|
||||
//xranLibWraper *xranlib = (xranLibWraper*) calloc(1,sizeof(xranLibWraper));
|
||||
|
||||
return xranlib;
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int setup_oran( void *xranlib_ ){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
if(xranlib->SetUp() < 0) {
|
||||
return (-1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int open_oran_callback(void *xranlib_){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
xranlib->Open(nullptr,
|
||||
nullptr,
|
||||
(void *)xran_fh_rx_callback,
|
||||
(void *)xran_fh_rx_prach_callback,
|
||||
(void *)xran_fh_srs_callback);
|
||||
|
||||
return(0);
|
||||
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int open_oran(void *xranlib_){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
struct xran_fh_config *pCfg = (struct xran_fh_config*) malloc(sizeof(struct xran_fh_config));
|
||||
assert(pCfg != NULL);
|
||||
xranlib->get_cfg_fh(pCfg);
|
||||
xran_open(xranlib->get_xranhandle(),pCfg);
|
||||
|
||||
return(0);
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int initialize_oran(void *xranlib_){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
|
||||
xranlib->Init();
|
||||
|
||||
return(0);
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int start_oran(void *xranlib_){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
xranlib->Start();
|
||||
|
||||
return (0);
|
||||
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int register_physide_callbacks(void *xranlib_){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
|
||||
xran_reg_physide_cb(xranlib->get_xranhandle(), physide_dl_tti_call_back, NULL, 10, XRAN_CB_TTI);
|
||||
xran_reg_physide_cb(xranlib->get_xranhandle(), physide_ul_half_slot_call_back, NULL, 10, XRAN_CB_HALF_SLOT_RX);
|
||||
xran_reg_physide_cb(xranlib->get_xranhandle(), physide_ul_full_slot_call_back, NULL, 10, XRAN_CB_FULL_SLOT_RX);
|
||||
|
||||
return (0);
|
||||
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int load_iq_from_file(void *xranlib_){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
|
||||
int numCCPorts_ = xranlib->get_num_cc();
|
||||
int num_eAxc_ = xranlib->get_num_eaxc();
|
||||
|
||||
printf("numCCPorts_ =%d, num_eAxc_=%d, MAX_ANT_CARRIER_SUPPORTED =%d\n",numCCPorts_,num_eAxc_,MAX_ANT_CARRIER_SUPPORTED);
|
||||
|
||||
int i;
|
||||
char *IQ_filename[MAX_ANT_CARRIER_SUPPORTED];
|
||||
for(i=0; i<MAX_ANT_CARRIER_SUPPORTED; i++){
|
||||
if( (i==0) || (i==1) || (i==2) || (i==3) ){
|
||||
IQ_filename[0] = "/home/oba/PISONS/phy/fhi_lib/app/usecase/mu0_5mhz/ant_0.bin";
|
||||
IQ_filename[1] = "/home/oba/PISONS/phy/fhi_lib/app/usecase/mu0_5mhz/ant_1.bin";
|
||||
IQ_filename[2] = "/home/oba/PISONS/phy/fhi_lib/app/usecase/mu0_5mhz/ant_2.bin";
|
||||
IQ_filename[3] = "/home/oba/PISONS/phy/fhi_lib/app/usecase/mu0_5mhz/ant_3.bin";
|
||||
}else{
|
||||
IQ_filename[i] = "";
|
||||
}
|
||||
}
|
||||
|
||||
int32_t number_slots = 40; // According to wrapper.hpp uint32_t m_nSlots = 10; but for the file 5MHz is set to 40
|
||||
uint32_t numerology = xranlib->get_numerology(); // According to the conf file is mu number
|
||||
uint32_t bandwidth = 5; // According to the wrapper.hpp since we are reading the 5MHz files
|
||||
uint32_t sub6 = xranlib->get_sub6();
|
||||
iq_playback_buffer_size_dl = (number_slots * N_SYM_PER_SLOT * N_SC_PER_PRB * xranlib->get_num_rbs(numerology,bandwidth,sub6)*4L);
|
||||
|
||||
for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(numCCPorts_ * num_eAxc_); i++) {
|
||||
if(((uint8_t *)IQ_filename[i])[0]!=0){
|
||||
|
||||
p_tx_play_buffer[i] = (int16_t*)malloc(iq_playback_buffer_size_dl);
|
||||
assert (NULL != (p_tx_play_buffer[i]));
|
||||
tx_play_buffer_size[i] = (int32_t)iq_playback_buffer_size_dl;
|
||||
|
||||
printf("Loading file [%d] %s \n",i,IQ_filename[i]);
|
||||
tx_play_buffer_size[i] = sys_load_file_to_buff( IQ_filename[i],
|
||||
"DL IFFT IN IQ Samples in binary format",
|
||||
(uint8_t*) p_tx_play_buffer[i],
|
||||
tx_play_buffer_size[i],
|
||||
1);
|
||||
tx_play_buffer_position[i] = 0;
|
||||
} else {
|
||||
|
||||
p_tx_play_buffer[i]=(int16_t*)malloc(iq_playback_buffer_size_dl);
|
||||
tx_play_buffer_size[i]=0;
|
||||
tx_play_buffer_position[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return(0);
|
||||
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int xran_fh_tx_send_buffer(void *xranlib_){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
|
||||
int32_t flowId;
|
||||
void *ptr = NULL;
|
||||
char *pos = NULL;
|
||||
|
||||
p_xran_dev_ctx_2 = xran_dev_get_ctx();
|
||||
if (p_xran_dev_ctx_2 != NULL){
|
||||
printf("p_xran_dev_ctx_2=%d\n",p_xran_dev_ctx_2);
|
||||
}
|
||||
|
||||
int num_eaxc = xranlib->get_num_eaxc();
|
||||
int num_eaxc_ul = xranlib->get_num_eaxc_ul();
|
||||
uint32_t xran_max_antenna_nr = RTE_MAX(num_eaxc, num_eaxc_ul);
|
||||
int ant_el_trx = xranlib->get_num_antelmtrx();
|
||||
uint32_t xran_max_ant_array_elm_nr = RTE_MAX(ant_el_trx, xran_max_antenna_nr);
|
||||
|
||||
int32_t nSectorIndex[XRAN_MAX_SECTOR_NR];
|
||||
int32_t nSectorNum;
|
||||
|
||||
for (nSectorNum = 0; nSectorNum < XRAN_MAX_SECTOR_NR; nSectorNum++)
|
||||
{
|
||||
nSectorIndex[nSectorNum] = nSectorNum;
|
||||
}
|
||||
nSectorNum = xranlib->get_num_cc();
|
||||
|
||||
int maxflowid = num_eaxc * (nSectorNum-1) + (xran_max_antenna_nr-1);
|
||||
printf("the maximum flowID will be=%d\n",maxflowid);
|
||||
|
||||
for(uint16_t cc_id=0; cc_id<nSectorNum; cc_id++){
|
||||
for(int32_t tti = 0; tti < XRAN_N_FE_BUF_LEN; tti++) {
|
||||
for(uint8_t ant_id = 0; ant_id < xran_max_antenna_nr; ant_id++){
|
||||
for(int32_t sym_idx = 0; sym_idx < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_idx++) {
|
||||
|
||||
flowId = num_eaxc * cc_id + ant_id;
|
||||
uint8_t *pData = p_xran_dev_ctx_2->sFrontHaulTxBbuIoBufCtrl[tti % XRAN_N_FE_BUF_LEN][cc_id][ant_id].sBufferList.pBuffers[sym_idx%XRAN_NUM_OF_SYMBOL_PER_SLOT].pData;
|
||||
uint8_t *pPrbMapData = p_xran_dev_ctx_2->sFrontHaulTxPrbMapBbuIoBufCtrl[tti % XRAN_N_FE_BUF_LEN][cc_id][ant_id].sBufferList.pBuffers->pData;
|
||||
struct xran_prb_map *pPrbMap = (struct xran_prb_map *)pPrbMapData;
|
||||
ptr = pData;
|
||||
pos = ((char*)p_tx_play_buffer[flowId]) + tx_play_buffer_position[flowId];
|
||||
|
||||
uint8_t *u8dptr;
|
||||
struct xran_prb_map *pRbMap = pPrbMap;
|
||||
int32_t sym_id = sym_idx%XRAN_NUM_OF_SYMBOL_PER_SLOT;
|
||||
if(ptr && pos){
|
||||
int idxElm = 0;
|
||||
u8dptr = (uint8_t*)ptr;
|
||||
int16_t payload_len = 0;
|
||||
|
||||
uint8_t *dst = (uint8_t *)u8dptr;
|
||||
uint8_t *src = (uint8_t *)pos;
|
||||
struct xran_prb_elm* p_prbMapElm = &pRbMap->prbMap[idxElm];
|
||||
|
||||
dst = xran_add_hdr_offset(dst, p_prbMapElm->compMethod);
|
||||
for (idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++) {
|
||||
struct xran_section_desc *p_sec_desc = NULL;
|
||||
p_prbMapElm = &pRbMap->prbMap[idxElm];
|
||||
p_sec_desc = p_prbMapElm->p_sec_desc[sym_id];
|
||||
|
||||
if(p_sec_desc == NULL){
|
||||
printf ("p_sec_desc == NULL\n");
|
||||
exit(-1);
|
||||
}
|
||||
src = (uint8_t *)(pos + p_prbMapElm->nRBStart*N_SC_PER_PRB*4L);
|
||||
|
||||
if(p_prbMapElm->compMethod == XRAN_COMPMETHOD_NONE) {
|
||||
payload_len = p_prbMapElm->nRBSize*N_SC_PER_PRB*4L;
|
||||
rte_memcpy(dst, src, payload_len);
|
||||
} else if (p_prbMapElm->compMethod == XRAN_COMPMETHOD_BLKFLOAT) {
|
||||
printf("idxElm=%d, compMeth==BLKFLOAT\n",idxElm);
|
||||
struct xranlib_compress_request bfp_com_req;
|
||||
struct xranlib_compress_response bfp_com_rsp;
|
||||
|
||||
memset(&bfp_com_req, 0, sizeof(struct xranlib_compress_request));
|
||||
memset(&bfp_com_rsp, 0, sizeof(struct xranlib_compress_response));
|
||||
|
||||
bfp_com_req.data_in = (int16_t*)src;
|
||||
bfp_com_req.numRBs = p_prbMapElm->nRBSize;
|
||||
bfp_com_req.len = p_prbMapElm->nRBSize*N_SC_PER_PRB*4L;
|
||||
bfp_com_req.compMethod = p_prbMapElm->compMethod;
|
||||
bfp_com_req.iqWidth = p_prbMapElm->iqWidth;
|
||||
|
||||
bfp_com_rsp.data_out = (int8_t*)dst;
|
||||
bfp_com_rsp.len = 0;
|
||||
|
||||
xranlib_compress_avx512(&bfp_com_req, &bfp_com_rsp);
|
||||
payload_len = bfp_com_rsp.len;
|
||||
}else {
|
||||
printf ("p_prbMapElm->compMethod == %d is not supported\n",
|
||||
p_prbMapElm->compMethod);
|
||||
exit(-1);
|
||||
}
|
||||
p_sec_desc->iq_buffer_offset = RTE_PTR_DIFF(dst, u8dptr);
|
||||
p_sec_desc->iq_buffer_len = payload_len;
|
||||
|
||||
dst += payload_len;
|
||||
dst = xran_add_hdr_offset(dst, p_prbMapElm->compMethod);
|
||||
}
|
||||
} else {
|
||||
exit(-1);
|
||||
printf("ptr ==NULL\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return(0);
|
||||
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
int64_t count_sec =0;
|
||||
struct xran_common_counters x_counters;
|
||||
uint64_t nTotalTime;
|
||||
uint64_t nUsedTime;
|
||||
uint32_t nCoreUsed;
|
||||
float nUsedPercent;
|
||||
long old_rx_counter = 0;
|
||||
long old_tx_counter = 0;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int compute_xran_statistics(void *xranlib_){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
|
||||
if(xran_get_common_counters(xranlib->get_xranhandle(), &x_counters) == XRAN_STATUS_SUCCESS) {
|
||||
xran_get_time_stats(&nTotalTime, &nUsedTime, &nCoreUsed, 1);
|
||||
nUsedPercent = ((float)nUsedTime * 100.0) / (float)nTotalTime;
|
||||
|
||||
printf("[rx %7ld pps %7ld kbps %7ld][tx %7ld pps %7ld kbps %7ld] [on_time %ld early %ld late %ld corrupt %ld pkt_dupl %ld Total %ld] IO Util: %5.2f %%\n",
|
||||
x_counters.rx_counter,
|
||||
x_counters.rx_counter-old_rx_counter,
|
||||
x_counters.rx_bytes_per_sec*8/1000L,
|
||||
x_counters.tx_counter,
|
||||
x_counters.tx_counter-old_tx_counter,
|
||||
x_counters.tx_bytes_per_sec*8/1000L,
|
||||
x_counters.Rx_on_time,
|
||||
x_counters.Rx_early,
|
||||
x_counters.Rx_late,
|
||||
x_counters.Rx_corrupt,
|
||||
x_counters.Rx_pkt_dupl,
|
||||
x_counters.Total_msgs_rcvd,
|
||||
nUsedPercent);
|
||||
|
||||
if(x_counters.rx_counter > old_rx_counter)
|
||||
old_rx_counter = x_counters.rx_counter;
|
||||
if(x_counters.tx_counter > old_tx_counter)
|
||||
old_tx_counter = x_counters.tx_counter;
|
||||
} else {
|
||||
printf("error xran_get_common_counters\n");
|
||||
return(1);
|
||||
}
|
||||
|
||||
return (0);
|
||||
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
49
targets/ARCH/ETHERNET/oran/4g/oran.h
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
#ifndef _ORAN_H_
|
||||
#define _ORAN_H_
|
||||
|
||||
#include "shared_buffers.h"
|
||||
#include "common_lib.h"
|
||||
|
||||
void oran_fh_if4p5_south_out(RU_t *ru,
|
||||
int frame,
|
||||
int subframe,
|
||||
uint64_t timestamp);
|
||||
|
||||
void oran_fh_if4p5_south_in(RU_t *ru,
|
||||
int *frame,
|
||||
int *subframe);
|
||||
|
||||
int transport_init(openair0_device *device,
|
||||
openair0_config_t *openair0_cfg,
|
||||
eth_params_t * eth_params );
|
||||
|
||||
typedef struct {
|
||||
eth_state_t e;
|
||||
shared_buffers buffers;
|
||||
rru_config_msg_type_t last_msg;
|
||||
int capabilities_sent;
|
||||
void *oran_priv;
|
||||
} oran_eth_state_t;
|
||||
|
||||
#endif /* _ORAN_H_ */
|
||||
463
targets/ARCH/ETHERNET/oran/4g/oran_isolate.c
Normal file
@@ -0,0 +1,463 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include "common_lib.h"
|
||||
#include "ethernet_lib.h"
|
||||
#include "shared_buffers.h"
|
||||
#include "low_oran.h"
|
||||
#include "oran_isolate.h"
|
||||
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
|
||||
typedef struct {
|
||||
eth_state_t e;
|
||||
shared_buffers buffers;
|
||||
rru_config_msg_type_t last_msg;
|
||||
int capabilities_sent;
|
||||
void *oran_priv;
|
||||
} oran_eth_state_t;
|
||||
|
||||
|
||||
int trx_oran_start(openair0_device *device)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void trx_oran_end(openair0_device *device)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
}
|
||||
|
||||
|
||||
int trx_oran_stop(openair0_device *device)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
return(0);
|
||||
}
|
||||
|
||||
int trx_oran_set_freq(openair0_device* device,
|
||||
openair0_config_t *openair0_cfg,
|
||||
int exmimo_dump_config)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
return(0);
|
||||
}
|
||||
|
||||
int trx_oran_set_gains(openair0_device* device,
|
||||
openair0_config_t *openair0_cfg)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
return(0);
|
||||
}
|
||||
|
||||
int trx_oran_get_stats(openair0_device* device)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
int trx_oran_reset_stats(openair0_device* device)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
return(0);
|
||||
}
|
||||
|
||||
int ethernet_tune(openair0_device *device,
|
||||
unsigned int option,
|
||||
int value)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int trx_oran_write_raw(openair0_device *device,
|
||||
openair0_timestamp timestamp,
|
||||
void **buff, int nsamps, int cc, int flags)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int trx_oran_read_raw(openair0_device *device,
|
||||
openair0_timestamp *timestamp,
|
||||
void **buff, int nsamps, int cc)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *msg_type(int t)
|
||||
{
|
||||
static char *s[12] = {
|
||||
"RAU_tick",
|
||||
"RRU_capabilities",
|
||||
"RRU_config",
|
||||
"RRU_config_ok",
|
||||
"RRU_start",
|
||||
"RRU_stop",
|
||||
"RRU_sync_ok",
|
||||
"RRU_frame_resynch",
|
||||
"RRU_MSG_max_num",
|
||||
"RRU_check_sync",
|
||||
"RRU_config_update",
|
||||
"RRU_config_update_ok",
|
||||
};
|
||||
|
||||
if (t < 0 || t > 11) return "UNKNOWN";
|
||||
return s[t];
|
||||
}
|
||||
|
||||
|
||||
int trx_oran_ctlsend(openair0_device *device, void *msg, ssize_t msg_len)
|
||||
{
|
||||
RRU_CONFIG_msg_t *rru_config_msg = msg;
|
||||
oran_eth_state_t *s = device->priv;
|
||||
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
|
||||
printf(" rru_config_msg->type %d [%s]\n", rru_config_msg->type,
|
||||
msg_type(rru_config_msg->type));
|
||||
|
||||
s->last_msg = rru_config_msg->type;
|
||||
|
||||
return msg_len;
|
||||
|
||||
}
|
||||
|
||||
|
||||
int trx_oran_ctlrecv(openair0_device *device, void *msg, ssize_t msg_len)
|
||||
{
|
||||
|
||||
RRU_CONFIG_msg_t *rru_config_msg = msg;
|
||||
|
||||
oran_eth_state_t *s = device->priv;
|
||||
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
|
||||
if (s->last_msg == RAU_tick && s->capabilities_sent == 0) {
|
||||
printf("Oran RAU_tick and capabilities sent\n");
|
||||
RRU_capabilities_t *cap;
|
||||
rru_config_msg->type = RRU_capabilities;
|
||||
rru_config_msg->len = sizeof(RRU_CONFIG_msg_t)-MAX_RRU_CONFIG_SIZE+sizeof(RRU_capabilities_t);
|
||||
cap = (RRU_capabilities_t*)&rru_config_msg->msg[0];
|
||||
cap->FH_fmt = OAI_IF4p5_only;
|
||||
cap->num_bands = 1;
|
||||
cap->band_list[0] = 7;
|
||||
cap->nb_rx[0] = device->openair0_cfg->rx_num_channels;
|
||||
cap->nb_tx[0] = device->openair0_cfg->tx_num_channels;
|
||||
cap->max_pdschReferenceSignalPower[0] = -27;
|
||||
cap->max_rxgain[0] = 90;
|
||||
|
||||
s->capabilities_sent = 1;
|
||||
|
||||
return rru_config_msg->len;
|
||||
}
|
||||
if (s->last_msg == RRU_config) {
|
||||
printf("Oran RRU_config\n");
|
||||
rru_config_msg->type = RRU_config_ok;
|
||||
return 0;
|
||||
}
|
||||
if (s->last_msg == RRU_start) {
|
||||
// Folllow the same steps as in the wrapper
|
||||
printf("Oran RRU_start\n");
|
||||
|
||||
// Check if the machine is PTP sync
|
||||
check_xran_ptp_sync();
|
||||
|
||||
// SetUp
|
||||
if ( setup_oran(s->oran_priv) !=0 ){
|
||||
printf("%s:%d:%s: SetUp ORAN failed ... Exit\n",
|
||||
__FILE__, __LINE__, __FUNCTION__);
|
||||
exit(1);
|
||||
}else{
|
||||
printf("SetUp ORAN. Done\n");
|
||||
}
|
||||
|
||||
// Load the IQ samples from file
|
||||
load_iq_from_file(s->oran_priv);
|
||||
printf("Load IQ from file. Done\n");
|
||||
|
||||
// Register physide callbacks
|
||||
register_physide_callbacks(s->oran_priv);
|
||||
printf("Register physide callbacks. Done\n");
|
||||
|
||||
// Open callbacks
|
||||
open_oran_callback(s->oran_priv);
|
||||
printf("Open Oran callbacks. Done\n");
|
||||
|
||||
// Init ORAN
|
||||
initialize_oran(s->oran_priv);
|
||||
printf("Init Oran. Done\n");
|
||||
|
||||
// Copy the loaded IQ to the xran buffer fro the tx
|
||||
xran_fh_tx_send_buffer(s->oran_priv);
|
||||
printf("ORAN FH send tx buffer filled in with loaded IQs. Done\n");
|
||||
|
||||
// Open ORAN
|
||||
open_oran(s->oran_priv);
|
||||
printf("xran_open. Done\n");
|
||||
|
||||
// Start ORAN
|
||||
if ( start_oran(s->oran_priv) !=0 ){
|
||||
printf("%s:%d:%s: Start ORAN failed ... Exit\n",
|
||||
__FILE__, __LINE__, __FUNCTION__);
|
||||
exit(1);
|
||||
}else{
|
||||
printf("Start ORAN. Done\n");
|
||||
}
|
||||
|
||||
// Once xran library and thread started compute the statistics
|
||||
while(1){
|
||||
sleep(1);
|
||||
compute_xran_statistics(s->oran_priv);
|
||||
}
|
||||
|
||||
}
|
||||
return(0);
|
||||
|
||||
}
|
||||
|
||||
/*This function reads the IQ samples from OAI, symbol by symbol.
|
||||
It also handles the shared buffers. */
|
||||
|
||||
void oran_fh_if4p5_south_in(RU_t *ru,
|
||||
int *frame,
|
||||
int *subframe)
|
||||
{
|
||||
printf("ORAN: %s for UL. frame=%d, subframe=%d, \n", __FUNCTION__,frame,subframe);
|
||||
oran_eth_state_t *s = ru->ifdevice.priv;
|
||||
PHY_VARS_eNB **eNB_list = ru->eNB_list, *eNB;
|
||||
LTE_DL_FRAME_PARMS *fp;
|
||||
int symbol;
|
||||
int32_t *rxdata;
|
||||
int antenna;
|
||||
|
||||
lock_ul_buffer(&s->buffers, *subframe);
|
||||
next:
|
||||
while (!((s->buffers.ul_busy[0][*subframe] == 0x3fff &&
|
||||
s->buffers.ul_busy[1][*subframe] == 0x3fff) ||
|
||||
s->buffers.prach_busy[*subframe] == 1))
|
||||
wait_ul_buffer(&s->buffers, *subframe);
|
||||
if (s->buffers.prach_busy[*subframe] == 1) {
|
||||
int i;
|
||||
int antenna = 0;
|
||||
uint16_t *in;
|
||||
uint16_t *out;
|
||||
in = (uint16_t *)s->buffers.prach[*subframe];
|
||||
out = (uint16_t *)ru->prach_rxsigF[0][antenna];
|
||||
for (i = 0; i < 840*2; i++)
|
||||
out[i] = ntohs(in[i]);
|
||||
s->buffers.prach_busy[*subframe] = 0;
|
||||
ru->wakeup_prach_eNB(ru->eNB_list[0], ru, *frame, *subframe);
|
||||
goto next;
|
||||
}
|
||||
|
||||
eNB = eNB_list[0];
|
||||
fp = &eNB->frame_parms;
|
||||
for (antenna = 0; antenna < ru->nb_rx; antenna++) {
|
||||
for (symbol = 0; symbol < 14; symbol++) {
|
||||
int i;
|
||||
uint16_t *p = (uint16_t *)(&s->buffers.ul[antenna][*subframe][symbol*1200*4]);
|
||||
for (i = 0; i < 1200*2; i++) {
|
||||
p[i] = htons(p[i]);
|
||||
}
|
||||
rxdata = &ru->common.rxdataF[antenna][symbol * fp->ofdm_symbol_size];
|
||||
#if 1
|
||||
memcpy(rxdata + 2048 - 600,
|
||||
&s->buffers.ul[antenna][*subframe][symbol*1200*4],
|
||||
600 * 4);
|
||||
memcpy(rxdata,
|
||||
&s->buffers.ul[antenna][*subframe][symbol*1200*4] + 600*4,
|
||||
600 * 4);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
s->buffers.ul_busy[0][*subframe] = 0;
|
||||
s->buffers.ul_busy[1][*subframe] = 0;
|
||||
signal_ul_buffer(&s->buffers, *subframe);
|
||||
unlock_ul_buffer(&s->buffers, *subframe);
|
||||
|
||||
|
||||
RU_proc_t *proc = &ru->proc;
|
||||
extern uint16_t sf_ahead;
|
||||
int f = *frame;
|
||||
int sf = *subframe;
|
||||
|
||||
|
||||
proc->tti_rx = sf;
|
||||
proc->frame_rx = f;
|
||||
proc->timestamp_rx = ((proc->frame_rx * 10) + proc->tti_rx ) * fp->samples_per_tti ;
|
||||
|
||||
if (get_nprocs()<=4) {
|
||||
proc->tti_tx = (sf+sf_ahead)%10;
|
||||
proc->frame_tx = (sf>(9-sf_ahead)) ? (f+1)&1023 : f;
|
||||
}
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_IF4P5_SOUTH_IN_RU+ru->idx,f);
|
||||
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_IF4P5_SOUTH_IN_RU+ru->idx,sf);
|
||||
proc->symbol_mask[sf] = 0;
|
||||
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_TRX_TS, proc->timestamp_rx&0xffffffff);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
void oran_fh_if4p5_south_out(RU_t *ru,
|
||||
int frame,
|
||||
int subframe,
|
||||
uint64_t timestamp)
|
||||
{
|
||||
|
||||
/*
|
||||
* Romain:
|
||||
* Questions:
|
||||
* -Do we need a lock on the buffer? If yes, how should we implement it?
|
||||
* -Why is the byte order changed in Benetel? Do we need to do the same?
|
||||
*/
|
||||
|
||||
printf("ORAN: %s for DL. frame=%d, subframe=%d, \n", __FUNCTION__,frame,subframe);
|
||||
oran_eth_state_t *s = ru->ifdevice.priv;
|
||||
PHY_VARS_eNB **eNB_list = ru->eNB_list, *eNB;
|
||||
LTE_DL_FRAME_PARMS *fp;
|
||||
int symbol;
|
||||
int32_t *txdata;
|
||||
int aa;
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff );
|
||||
// Romain: Lock on the DL buffer on given slot for avoiding concurrent write
|
||||
lock_dl_buffer(&s->buffers, subframe);
|
||||
if (s->buffers.dl_busy[0][subframe] ||
|
||||
s->buffers.dl_busy[1][subframe]) {
|
||||
printf("%s: fatal: DL buffer busy for subframe %d\n", __FUNCTION__, subframe);
|
||||
unlock_dl_buffer(&s->buffers, subframe);
|
||||
return;
|
||||
}
|
||||
// Romain: Configuration check
|
||||
eNB = eNB_list[0];
|
||||
fp = &eNB->frame_parms;
|
||||
if (ru->num_eNB != 1 || fp->ofdm_symbol_size != 2048 ||
|
||||
fp->Ncp != NORMAL || fp->symbols_per_tti != 14) {
|
||||
printf("%s:%d:%s: unsupported configuration\n",
|
||||
__FILE__, __LINE__, __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// Romain: Loop over antenas and symbols
|
||||
for (aa = 0; aa < ru->nb_tx; aa++) {
|
||||
for (symbol = 0; symbol < 14; symbol++) {
|
||||
// Romain: txdata will hold the data from OAI to send on downlink. How are they presented?
|
||||
txdata = &ru->common.txdataF_BF[aa][symbol * fp->ofdm_symbol_size];
|
||||
#if 1
|
||||
// Romain: For Benetel, '&s->buffers.dl' is the downlink buffer. Should we moove the data as it is done here?
|
||||
memcpy(&s->buffers.dl[aa][subframe][symbol*1200*4],
|
||||
txdata + 2048 - 600,
|
||||
600 * 4);
|
||||
memcpy(&s->buffers.dl[aa][subframe][symbol*1200*4] + 600*4,
|
||||
txdata + 1,
|
||||
600 * 4);
|
||||
#endif
|
||||
// Romain: Change byte order. Why?
|
||||
int i;
|
||||
uint16_t *p = (uint16_t *)(&s->buffers.dl[aa][subframe][symbol*1200*4]);
|
||||
for (i = 0; i < 1200*2; i++) {
|
||||
p[i] = htons(p[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Romain: Lock on the DL buffer on given slot for avoiding concurrent write
|
||||
s->buffers.dl_busy[0][subframe] = 0x3fff;
|
||||
s->buffers.dl_busy[1][subframe] = 0x3fff;
|
||||
unlock_dl_buffer(&s->buffers, subframe);
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_IF4P5_SOUTH_OUT_RU+ru->idx, ru->proc.frame_tx);
|
||||
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_IF4P5_SOUTH_OUT_RU+ru->idx, ru->proc.tti_tx);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void *get_internal_parameter(char *name)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
|
||||
if (!strcmp(name, "fh_if4p5_south_in"))
|
||||
return (void *) oran_fh_if4p5_south_in;
|
||||
if (!strcmp(name, "fh_if4p5_south_out"))
|
||||
return (void *) oran_fh_if4p5_south_out;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
__attribute__((__visibility__("default")))
|
||||
int transport_init(openair0_device *device,
|
||||
openair0_config_t *openair0_cfg,
|
||||
eth_params_t * eth_params )
|
||||
{
|
||||
oran_eth_state_t *eth;
|
||||
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
|
||||
device->Mod_id = 0;
|
||||
device->transp_type = ETHERNET_TP;
|
||||
device->trx_start_func = trx_oran_start;
|
||||
device->trx_get_stats_func = trx_oran_get_stats;
|
||||
device->trx_reset_stats_func = trx_oran_reset_stats;
|
||||
device->trx_end_func = trx_oran_end;
|
||||
device->trx_stop_func = trx_oran_stop;
|
||||
device->trx_set_freq_func = trx_oran_set_freq;
|
||||
device->trx_set_gains_func = trx_oran_set_gains;
|
||||
|
||||
device->trx_write_func = trx_oran_write_raw;
|
||||
device->trx_read_func = trx_oran_read_raw;
|
||||
|
||||
device->trx_ctlsend_func = trx_oran_ctlsend;
|
||||
device->trx_ctlrecv_func = trx_oran_ctlrecv;
|
||||
|
||||
|
||||
device->get_internal_parameter = get_internal_parameter;
|
||||
|
||||
eth = (oran_eth_state_t *)calloc(1, sizeof(oran_eth_state_t));
|
||||
if (eth == NULL) {
|
||||
AssertFatal(0==1, "out of memory\n");
|
||||
}
|
||||
|
||||
eth->e.flags = ETH_RAW_IF4p5_MODE;
|
||||
eth->e.compression = NO_COMPRESS;
|
||||
eth->e.if_name = eth_params->local_if_name;
|
||||
eth->oran_priv = define_oran_pointer();
|
||||
device->priv = eth;
|
||||
device->openair0_cfg=&openair0_cfg[0];
|
||||
|
||||
eth->last_msg = (rru_config_msg_type_t)-1;
|
||||
|
||||
init_buffers(ð->buffers);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
134
targets/ARCH/ETHERNET/oran/4g/oran_isolate.h
Normal file
@@ -0,0 +1,134 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
#ifndef _ORAN_ISOLATE_H_
|
||||
#define _ORAN_ISOLATE_H_
|
||||
|
||||
#include <stdio.h>
|
||||
#include "shared_buffers.h"
|
||||
#include "low_oran.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
void* define_oran_pointer();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int setup_oran( void *xranlib_ );
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int open_oran_callback( void *xranlib_ );
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int open_oran( void *xranlib_ );
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int initialize_oran( void *xranlib_ );
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int start_oran( void *xranlib_ );
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int register_physide_callbacks(void *xranlib_);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int load_iq_from_file(void *xranlib_);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int xran_fh_tx_send_buffer(void *xranlib_);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int compute_xran_statistics(void *xranlib_);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif /* _ORAN_ISOLATE_H_ */
|
||||
175
targets/ARCH/ETHERNET/oran/4g/shared_buffers.c
Normal file
@@ -0,0 +1,175 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
#include "shared_buffers.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#if 0
|
||||
void init_buffers(shared_buffers *s)
|
||||
{
|
||||
|
||||
int subframe;
|
||||
|
||||
memset(s, 0, sizeof(*s));
|
||||
|
||||
for (subframe = 0; subframe < 10; subframe++) {
|
||||
if (pthread_mutex_init(&s->m[subframe], NULL) != 0 ||
|
||||
pthread_cond_init(&s->c[subframe], NULL) != 0) {
|
||||
printf("%s: error initializing mutex/cond\n", __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/* in FDD the eNB's first transmitted DL subframe is 4 but the device
|
||||
* needs to have subframes 1, 2 and 3 ready. Let's pretend there are ready.
|
||||
*/
|
||||
s->dl_busy[1] = 0x3fff;
|
||||
s->dl_busy[2] = 0x3fff;
|
||||
s->dl_busy[3] = 0x3fff;
|
||||
|
||||
}
|
||||
|
||||
void lock_buffers(shared_buffers *s, int subframe)
|
||||
{
|
||||
if (pthread_mutex_lock(&s->m[subframe]) != 0) {
|
||||
printf("%s: fatal: lock fails\n", __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void unlock_buffers(shared_buffers *s, int subframe)
|
||||
{
|
||||
if (pthread_mutex_unlock(&s->m[subframe]) != 0) {
|
||||
printf("%s: fatal: unlock fails\n", __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void wait_buffers(shared_buffers *s, int subframe)
|
||||
{
|
||||
if (pthread_cond_wait(&s->c[subframe], &s->m[subframe]) != 0) {
|
||||
printf("%s: fatal: cond_wait fails\n", __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void signal_buffers(shared_buffers *s, int subframe)
|
||||
{
|
||||
if (pthread_cond_broadcast(&s->c[subframe]) != 0) {
|
||||
printf("%s: fatal: cond_broadcast fails\n", __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void init_buffers(shared_buffers *s)
|
||||
{
|
||||
int subframe;
|
||||
|
||||
memset(s, 0, sizeof(*s));
|
||||
|
||||
for (subframe = 0; subframe < 10; subframe++) {
|
||||
if (pthread_mutex_init(&s->m_dl[subframe], NULL) != 0 ||
|
||||
pthread_cond_init(&s->c_dl[subframe], NULL) != 0 ||
|
||||
pthread_mutex_init(&s->m_ul[subframe], NULL) != 0 ||
|
||||
pthread_cond_init(&s->c_ul[subframe], NULL) != 0) {
|
||||
printf("%s: error initializing mutex/cond\n", __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/* in FDD the eNB's first transmitted DL subframe is 4 but the device
|
||||
* * needs to have subframes 1, 2 and 3 ready. Let's pretend there are ready.
|
||||
* */
|
||||
s->dl_busy[0][1] = 0x3fff;
|
||||
s->dl_busy[0][2] = 0x3fff;
|
||||
s->dl_busy[0][3] = 0x3fff;
|
||||
s->dl_busy[1][1] = 0x3fff;
|
||||
s->dl_busy[1][2] = 0x3fff;
|
||||
s->dl_busy[1][3] = 0x3fff;
|
||||
}
|
||||
|
||||
void lock_dl_buffer(shared_buffers *s, int subframe)
|
||||
{
|
||||
if (pthread_mutex_lock(&s->m_dl[subframe]) != 0) {
|
||||
printf("%s: fatal: lock fails\n", __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void unlock_dl_buffer(shared_buffers *s, int subframe)
|
||||
{
|
||||
if (pthread_mutex_unlock(&s->m_dl[subframe]) != 0) {
|
||||
printf("%s: fatal: unlock fails\n", __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void wait_dl_buffer(shared_buffers *s, int subframe)
|
||||
{
|
||||
if (pthread_cond_wait(&s->c_dl[subframe], &s->m_dl[subframe]) != 0) {
|
||||
printf("%s: fatal: cond_wait fails\n", __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void signal_dl_buffer(shared_buffers *s, int subframe)
|
||||
{
|
||||
if (pthread_cond_broadcast(&s->c_dl[subframe]) != 0) {
|
||||
printf("%s: fatal: cond_broadcast fails\n", __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void lock_ul_buffer(shared_buffers *s, int subframe)
|
||||
{
|
||||
if (pthread_mutex_lock(&s->m_ul[subframe]) != 0) {
|
||||
printf("%s: fatal: lock fails\n", __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void unlock_ul_buffer(shared_buffers *s, int subframe)
|
||||
{
|
||||
if (pthread_mutex_unlock(&s->m_ul[subframe]) != 0) {
|
||||
printf("%s: fatal: unlock fails\n", __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void wait_ul_buffer(shared_buffers *s, int subframe)
|
||||
{
|
||||
if (pthread_cond_wait(&s->c_ul[subframe], &s->m_ul[subframe]) != 0) {
|
||||
printf("%s: fatal: cond_wait fails\n", __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void signal_ul_buffer(shared_buffers *s, int subframe)
|
||||
{
|
||||
if (pthread_cond_broadcast(&s->c_ul[subframe]) != 0) {
|
||||
printf("%s: fatal: cond_broadcast fails\n", __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
124
targets/ARCH/ETHERNET/oran/4g/shared_buffers.h
Normal file
@@ -0,0 +1,124 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
#ifndef _SHARED_BUFFERS_H_
|
||||
#define _SHARED_BUFFERS_H_
|
||||
|
||||
#include <pthread.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#if 0
|
||||
typedef struct {
|
||||
unsigned char dl[10][14*1200*4];
|
||||
unsigned char ul[10][14*1200*4];
|
||||
uint16_t dl_busy[10];
|
||||
uint16_t ul_busy[10];
|
||||
|
||||
pthread_mutex_t m[10];
|
||||
pthread_cond_t c[10];
|
||||
|
||||
unsigned char prach[10][849*4];
|
||||
unsigned char prach_busy[10];
|
||||
|
||||
/* statistics/error counting */
|
||||
int ul_overflow;
|
||||
int dl_underflow;
|
||||
} shared_buffers;
|
||||
|
||||
void init_buffers(shared_buffers *s);
|
||||
void lock_buffers(shared_buffers *s, int subframe);
|
||||
void unlock_buffers(shared_buffers *s, int subframe);
|
||||
void wait_buffers(shared_buffers *s, int subframe);
|
||||
void signal_buffers(shared_buffers *s, int subframe);
|
||||
|
||||
|
||||
|
||||
typedef struct {
|
||||
/* [2] is for two antennas */
|
||||
unsigned char dl[2][10][14*1200*4];
|
||||
unsigned char ul[2][10][14*1200*4];
|
||||
uint16_t dl_busy[2][10];
|
||||
uint16_t ul_busy[2][10];
|
||||
|
||||
pthread_mutex_t m_ul[10];
|
||||
pthread_cond_t c_ul[10];
|
||||
|
||||
pthread_mutex_t m_dl[10];
|
||||
pthread_cond_t c_dl[10];
|
||||
|
||||
unsigned char prach[10][849*4];
|
||||
unsigned char prach_busy[10];
|
||||
|
||||
/* statistics/error counting */
|
||||
int ul_overflow;
|
||||
int dl_underflow;
|
||||
} shared_buffers;
|
||||
|
||||
void init_buffers(shared_buffers *s);
|
||||
|
||||
void lock_dl_buffer(shared_buffers *s, int subframe);
|
||||
void unlock_dl_buffer(shared_buffers *s, int subframe);
|
||||
void wait_dl_buffer(shared_buffers *s, int subframe);
|
||||
void signal_dl_buffer(shared_buffers *s, int subframe);
|
||||
|
||||
void lock_ul_buffer(shared_buffers *s, int subframe);
|
||||
void unlock_ul_buffer(shared_buffers *s, int subframe);
|
||||
void wait_ul_buffer(shared_buffers *s, int subframe);
|
||||
void signal_ul_buffer(shared_buffers *s, int subframe);
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
/* [2] is for two antennas */
|
||||
unsigned char dl[2][10][14*1200*4];
|
||||
unsigned char ul[2][10][14*1200*4];
|
||||
uint16_t dl_busy[2][10];
|
||||
uint16_t ul_busy[2][10];
|
||||
|
||||
pthread_mutex_t m_ul[10];
|
||||
pthread_cond_t c_ul[10];
|
||||
|
||||
pthread_mutex_t m_dl[10];
|
||||
pthread_cond_t c_dl[10];
|
||||
|
||||
unsigned char prach[10][849*4];
|
||||
unsigned char prach_busy[10];
|
||||
|
||||
/* statistics/error counting */
|
||||
int ul_overflow;
|
||||
int dl_underflow;
|
||||
} shared_buffers;
|
||||
|
||||
void init_buffers(shared_buffers *s);
|
||||
|
||||
void lock_dl_buffer(shared_buffers *s, int subframe);
|
||||
void unlock_dl_buffer(shared_buffers *s, int subframe);
|
||||
void wait_dl_buffer(shared_buffers *s, int subframe);
|
||||
void signal_dl_buffer(shared_buffers *s, int subframe);
|
||||
|
||||
void lock_ul_buffer(shared_buffers *s, int subframe);
|
||||
void unlock_ul_buffer(shared_buffers *s, int subframe);
|
||||
void wait_ul_buffer(shared_buffers *s, int subframe);
|
||||
void signal_ul_buffer(shared_buffers *s, int subframe);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif /* _SHARED_BUFFERS_H_ */
|
||||
937
targets/ARCH/ETHERNET/oran/5g/oran.cpp
Normal file
@@ -0,0 +1,937 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include "oran_isolate.h"
|
||||
#include "xran_lib_wrap.hpp"
|
||||
#include "common.hpp"
|
||||
#include "xran_compression.h"
|
||||
#include "xran_sync_api.h"
|
||||
|
||||
// Declare variable useful for the send buffer function
|
||||
struct xran_device_ctx *p_xran_dev_ctx_2;
|
||||
|
||||
// Variable declaration useful for fill IQ samples from file
|
||||
#define IQ_PLAYBACK_BUFFER_BYTES (XRAN_NUM_OF_SLOT_IN_TDD_LOOP*N_SYM_PER_SLOT*XRAN_MAX_PRBS*N_SC_PER_PRB*4L)
|
||||
int16_t *p_tx_play_buffer[MAX_ANT_CARRIER_SUPPORTED];
|
||||
int iq_playback_buffer_size_dl = IQ_PLAYBACK_BUFFER_BYTES;
|
||||
int32_t tx_play_buffer_size[MAX_ANT_CARRIER_SUPPORTED];
|
||||
int32_t tx_play_buffer_position[MAX_ANT_CARRIER_SUPPORTED];
|
||||
|
||||
// Declare the function useful to load IQs from file
|
||||
int sys_load_file_to_buff(char *filename, char *bufname, unsigned char *pBuffer, unsigned int size, unsigned int buffers_num)
|
||||
{
|
||||
unsigned int file_size = 0;
|
||||
int num= 0;
|
||||
|
||||
if (size)
|
||||
{
|
||||
if (filename && bufname)
|
||||
{
|
||||
FILE *file;
|
||||
printf("Loading file %s to %s: ", filename, bufname);
|
||||
file = fopen(filename, "rb");
|
||||
|
||||
|
||||
if (file == NULL)
|
||||
{
|
||||
printf("can't open file %s!!!", filename);
|
||||
exit(-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
fseek(file, 0, SEEK_END);
|
||||
file_size = ftell(file);
|
||||
fseek(file, 0, SEEK_SET);
|
||||
|
||||
if ((file_size > size) || (file_size == 0))
|
||||
file_size = size;
|
||||
|
||||
printf("Reading IQ samples from file: File Size: %d [Buffer Size: %d]\n", file_size, size);
|
||||
|
||||
num = fread(pBuffer, buffers_num, size, file);
|
||||
fflush(file);
|
||||
fclose(file);
|
||||
printf("from addr (0x%lx) size (%d) bytes num (%d)", (uint64_t)pBuffer, file_size, num);
|
||||
}
|
||||
printf(" \n");
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
printf(" the file name, buffer name are not set!!!");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf(" the %s is free: size = %d bytes!!!", bufname, size);
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
void xran_fh_rx_callback(void *pCallbackTag, xran_status_t status){
|
||||
rte_pause();
|
||||
#if 0
|
||||
xran_cb_tag *callback_tag = (xran_cb_tag *)pCallbackTag;
|
||||
printf(" xran_fh_RX_callback::: cellId=%d\tslotiId=%d\tsymbol=%d\n",callback_tag->cellId,callback_tag->slotiId,callback_tag->symbol);
|
||||
uint32_t frame,subFrame,slot;
|
||||
int32_t tti;
|
||||
uint64_t second;
|
||||
tti = xran_get_slot_idx(&frame,&subFrame,&slot,&second);
|
||||
printf(" tti=%d\tframe=%d\tsubFrame=%d\tslot=%d\tsecond=%ld\n",tti,frame,subFrame,slot,second);
|
||||
if(callback_tag->slotiId==10){
|
||||
exit(0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
void xran_fh_srs_callback(void *pCallbackTag, xran_status_t status){
|
||||
rte_pause();
|
||||
#if 0
|
||||
xran_cb_tag *callback_tag = (xran_cb_tag *)pCallbackTag;
|
||||
printf(" xran_fh_SRS_callback::: cellId=%d\tslotiId=%d\tsymbol=%d\n",callback_tag->cellId,callback_tag->slotiId,callback_tag->symbol);
|
||||
#endif
|
||||
}
|
||||
void xran_fh_rx_prach_callback(void *pCallbackTag, xran_status_t status){
|
||||
rte_pause();
|
||||
#if 0
|
||||
xran_cb_tag *callback_tag = (xran_cb_tag *)pCallbackTag;
|
||||
printf(" xran_fh_rx_PRACH_callback::: cellId=%d\tslotiId=%d\tsymbol=%d\n",callback_tag->cellId,callback_tag->slotiId,callback_tag->symbol);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
int physide_dl_tti_call_back(void * param)
|
||||
{
|
||||
rte_pause();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int physide_ul_half_slot_call_back(void * param)
|
||||
{
|
||||
rte_pause();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int physide_ul_full_slot_call_back(void * param)
|
||||
{
|
||||
rte_pause();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
void* define_oran_pointer(){
|
||||
xranLibWraper *xranlib;
|
||||
xranlib = new xranLibWraper;
|
||||
//xranLibWraper *xranlib = (xranLibWraper*) calloc(1,sizeof(xranLibWraper));
|
||||
|
||||
return xranlib;
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
void dump_oran_config(void *xranlib_){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
int numerology = xranlib->get_numerology();
|
||||
int duplex_type = xranlib->get_duplextype();
|
||||
int num_cc = xranlib->get_num_cc();
|
||||
int num_eaxc = xranlib->get_num_eaxc();
|
||||
int num_eaxc_ul = xranlib->get_num_eaxc_ul();
|
||||
int ndlrbs = xranlib->get_num_dlrbs();
|
||||
int nulrbs = xranlib->get_num_ulrbs();
|
||||
|
||||
printf("**--**--**--**--**--**--**--**--**--**--**--**\n");
|
||||
printf("Dump ORAN Configuration\n");
|
||||
printf("* Numerology = %d\n", numerology);
|
||||
printf("* Duplex Type = %d\n", duplex_type);
|
||||
printf("* Number CC = %d\n", num_cc);
|
||||
printf("* Number eAxc = %d\n", num_eaxc);
|
||||
printf("* Number eAxc UL = %d\n", num_eaxc_ul);
|
||||
printf("* Number RBs DL = %d\n", ndlrbs);
|
||||
printf("* Number RBs UL = %d\n", nulrbs);
|
||||
printf("**--**--**--**--**--**--**--**--**--**--**--**\n");
|
||||
|
||||
#if 0
|
||||
printf("dump_oran_config exit program ...\n");
|
||||
exit(-1);
|
||||
#endif
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int setup_oran( void *xranlib_ ){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
if(xranlib->SetUp() < 0) {
|
||||
return (-1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int open_oran_callback(void *xranlib_){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
xranlib->Open(nullptr,
|
||||
nullptr,
|
||||
(void *)xran_fh_rx_callback,
|
||||
(void *)xran_fh_rx_prach_callback,
|
||||
(void *)xran_fh_srs_callback);
|
||||
|
||||
return(0);
|
||||
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int open_oran(void *xranlib_){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
struct xran_fh_config *pCfg = (struct xran_fh_config*) malloc(sizeof(struct xran_fh_config));
|
||||
assert(pCfg != NULL);
|
||||
xranlib->get_cfg_fh(pCfg);
|
||||
xran_open(xranlib->get_xranhandle(),pCfg);
|
||||
|
||||
return(0);
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int initialize_oran(void *xranlib_){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
|
||||
xranlib->Init();
|
||||
|
||||
return(0);
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int start_oran(void *xranlib_){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
xranlib->Start();
|
||||
|
||||
return (0);
|
||||
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int stop_oran(void *xranlib_){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
xranlib->Stop();
|
||||
|
||||
return (0);
|
||||
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int close_oran(void *xranlib_){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
xranlib->Close();
|
||||
|
||||
return (0);
|
||||
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int register_physide_callbacks(void *xranlib_){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
|
||||
xran_reg_physide_cb(xranlib->get_xranhandle(), physide_dl_tti_call_back, NULL, 10, XRAN_CB_TTI);
|
||||
xran_reg_physide_cb(xranlib->get_xranhandle(), physide_ul_half_slot_call_back, NULL, 10, XRAN_CB_HALF_SLOT_RX);
|
||||
xran_reg_physide_cb(xranlib->get_xranhandle(), physide_ul_full_slot_call_back, NULL, 10, XRAN_CB_FULL_SLOT_RX);
|
||||
|
||||
return (0);
|
||||
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int load_iq_from_file(void *xranlib_){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
|
||||
int numCCPorts_ = xranlib->get_num_cc();
|
||||
int num_eAxc_ = xranlib->get_num_eaxc();
|
||||
|
||||
printf("numCCPorts_ =%d, num_eAxc_=%d, MAX_ANT_CARRIER_SUPPORTED =%d\n",numCCPorts_,num_eAxc_,MAX_ANT_CARRIER_SUPPORTED);
|
||||
|
||||
int i;
|
||||
const char *IQ_filename[MAX_ANT_CARRIER_SUPPORTED];
|
||||
for(i=0; i<MAX_ANT_CARRIER_SUPPORTED; i++){
|
||||
if( (i==0) || (i==1) || (i==2) || (i==3) ){
|
||||
IQ_filename[0] = "/home/oba/PISONS/phy/fhi_lib/app/usecase/mu0_5mhz/ant_0.bin";
|
||||
IQ_filename[1] = "/home/oba/PISONS/phy/fhi_lib/app/usecase/mu0_5mhz/ant_1.bin";
|
||||
IQ_filename[2] = "/home/oba/PISONS/phy/fhi_lib/app/usecase/mu0_5mhz/ant_2.bin";
|
||||
IQ_filename[3] = "/home/oba/PISONS/phy/fhi_lib/app/usecase/mu0_5mhz/ant_3.bin";
|
||||
}else{
|
||||
IQ_filename[i] = "/0";
|
||||
}
|
||||
}
|
||||
|
||||
int32_t number_slots = 40; // According to wrapper.hpp uint32_t m_nSlots = 10; but for the file 5MHz is set to 40
|
||||
uint32_t numerology = xranlib->get_numerology(); // According to the conf file is mu number
|
||||
uint32_t bandwidth = 5; // According to the wrapper.hpp since we are reading the 5MHz files
|
||||
uint32_t sub6 = xranlib->get_sub6();
|
||||
iq_playback_buffer_size_dl = (number_slots * N_SYM_PER_SLOT * N_SC_PER_PRB * xranlib->get_num_rbs(numerology,bandwidth,sub6)*4L);
|
||||
const char *string_msg = "DL IFFT IN IQ Samples in binary format";
|
||||
|
||||
for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (int32_t)(numCCPorts_ * num_eAxc_); i++) {
|
||||
char *name = const_cast<char*>(IQ_filename[i]);
|
||||
char *string = const_cast<char*>(string_msg);
|
||||
if(((uint8_t *)IQ_filename[i])[0]!=0){
|
||||
|
||||
p_tx_play_buffer[i] = (int16_t*)malloc(iq_playback_buffer_size_dl);
|
||||
assert (NULL != (p_tx_play_buffer[i]));
|
||||
tx_play_buffer_size[i] = (int32_t)iq_playback_buffer_size_dl;
|
||||
|
||||
printf("Loading file [%d] %s \n",i,IQ_filename[i]);
|
||||
tx_play_buffer_size[i] = sys_load_file_to_buff( name,
|
||||
string,
|
||||
(uint8_t*) p_tx_play_buffer[i],
|
||||
tx_play_buffer_size[i],
|
||||
1);
|
||||
tx_play_buffer_position[i] = 0;
|
||||
} else {
|
||||
|
||||
p_tx_play_buffer[i]=(int16_t*)malloc(iq_playback_buffer_size_dl);
|
||||
tx_play_buffer_size[i]=0;
|
||||
tx_play_buffer_position[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return(0);
|
||||
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int xran_fh_tx_send_buffer(void *xranlib_){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
|
||||
int32_t flowId;
|
||||
void *ptr = NULL;
|
||||
char *pos = NULL;
|
||||
|
||||
p_xran_dev_ctx_2 = xran_dev_get_ctx();
|
||||
if (p_xran_dev_ctx_2 != NULL){
|
||||
printf("p_xran_dev_ctx_2=%p\n",p_xran_dev_ctx_2);
|
||||
}
|
||||
|
||||
int num_eaxc = xranlib->get_num_eaxc();
|
||||
int num_eaxc_ul = xranlib->get_num_eaxc_ul();
|
||||
uint32_t xran_max_antenna_nr = RTE_MAX(num_eaxc, num_eaxc_ul);
|
||||
//uint32_t ant_el_trx = xranlib->get_num_antelmtrx();
|
||||
//uint32_t xran_max_ant_array_elm_nr = RTE_MAX(ant_el_trx, xran_max_antenna_nr);
|
||||
|
||||
//int32_t nSectorIndex[XRAN_MAX_SECTOR_NR];
|
||||
int32_t nSectorNum;
|
||||
|
||||
/*
|
||||
for (nSectorNum = 0; nSectorNum < XRAN_MAX_SECTOR_NR; nSectorNum++)
|
||||
{
|
||||
nSectorIndex[nSectorNum] = nSectorNum;
|
||||
}
|
||||
*/
|
||||
nSectorNum = xranlib->get_num_cc();
|
||||
|
||||
int maxflowid = num_eaxc * (nSectorNum-1) + (xran_max_antenna_nr-1);
|
||||
printf("the maximum flowID will be=%d\n",maxflowid);
|
||||
|
||||
for(uint16_t cc_id=0; cc_id<nSectorNum; cc_id++){
|
||||
for(int32_t tti = 0; tti < XRAN_N_FE_BUF_LEN; tti++) {
|
||||
for(uint8_t ant_id = 0; ant_id < xran_max_antenna_nr; ant_id++){
|
||||
for(int32_t sym_idx = 0; sym_idx < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_idx++) {
|
||||
|
||||
flowId = num_eaxc * cc_id + ant_id;
|
||||
uint8_t *pData = p_xran_dev_ctx_2->sFrontHaulTxBbuIoBufCtrl[tti % XRAN_N_FE_BUF_LEN][cc_id][ant_id].sBufferList.pBuffers[sym_idx%XRAN_NUM_OF_SYMBOL_PER_SLOT].pData;
|
||||
uint8_t *pPrbMapData = p_xran_dev_ctx_2->sFrontHaulTxPrbMapBbuIoBufCtrl[tti % XRAN_N_FE_BUF_LEN][cc_id][ant_id].sBufferList.pBuffers->pData;
|
||||
struct xran_prb_map *pPrbMap = (struct xran_prb_map *)pPrbMapData;
|
||||
ptr = pData;
|
||||
pos = ((char*)p_tx_play_buffer[flowId]) + tx_play_buffer_position[flowId];
|
||||
|
||||
uint8_t *u8dptr;
|
||||
struct xran_prb_map *pRbMap = pPrbMap;
|
||||
int32_t sym_id = sym_idx%XRAN_NUM_OF_SYMBOL_PER_SLOT;
|
||||
if(ptr && pos){
|
||||
uint32_t idxElm = 0;
|
||||
u8dptr = (uint8_t*)ptr;
|
||||
int16_t payload_len = 0;
|
||||
|
||||
uint8_t *dst = (uint8_t *)u8dptr;
|
||||
uint8_t *src = (uint8_t *)pos;
|
||||
struct xran_prb_elm* p_prbMapElm = &pRbMap->prbMap[idxElm];
|
||||
|
||||
dst = xran_add_hdr_offset(dst, p_prbMapElm->compMethod);
|
||||
for (idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++) {
|
||||
struct xran_section_desc *p_sec_desc = NULL;
|
||||
p_prbMapElm = &pRbMap->prbMap[idxElm];
|
||||
p_sec_desc = p_prbMapElm->p_sec_desc[sym_id];
|
||||
|
||||
if(p_sec_desc == NULL){
|
||||
printf ("p_sec_desc == NULL\n");
|
||||
exit(-1);
|
||||
}
|
||||
src = (uint8_t *)(pos + p_prbMapElm->nRBStart*N_SC_PER_PRB*4L);
|
||||
|
||||
if(p_prbMapElm->compMethod == XRAN_COMPMETHOD_NONE) {
|
||||
payload_len = p_prbMapElm->nRBSize*N_SC_PER_PRB*4L;
|
||||
rte_memcpy(dst, src, payload_len);
|
||||
} else if (p_prbMapElm->compMethod == XRAN_COMPMETHOD_BLKFLOAT) {
|
||||
printf("idxElm=%d, compMeth==BLKFLOAT\n",idxElm);
|
||||
struct xranlib_compress_request bfp_com_req;
|
||||
struct xranlib_compress_response bfp_com_rsp;
|
||||
|
||||
memset(&bfp_com_req, 0, sizeof(struct xranlib_compress_request));
|
||||
memset(&bfp_com_rsp, 0, sizeof(struct xranlib_compress_response));
|
||||
|
||||
bfp_com_req.data_in = (int16_t*)src;
|
||||
bfp_com_req.numRBs = p_prbMapElm->nRBSize;
|
||||
bfp_com_req.len = p_prbMapElm->nRBSize*N_SC_PER_PRB*4L;
|
||||
bfp_com_req.compMethod = p_prbMapElm->compMethod;
|
||||
bfp_com_req.iqWidth = p_prbMapElm->iqWidth;
|
||||
|
||||
bfp_com_rsp.data_out = (int8_t*)dst;
|
||||
bfp_com_rsp.len = 0;
|
||||
|
||||
xranlib_compress_avx512(&bfp_com_req, &bfp_com_rsp);
|
||||
payload_len = bfp_com_rsp.len;
|
||||
}else {
|
||||
printf ("p_prbMapElm->compMethod == %d is not supported\n",
|
||||
p_prbMapElm->compMethod);
|
||||
exit(-1);
|
||||
}
|
||||
p_sec_desc->iq_buffer_offset = RTE_PTR_DIFF(dst, u8dptr);
|
||||
p_sec_desc->iq_buffer_len = payload_len;
|
||||
|
||||
dst += payload_len;
|
||||
dst = xran_add_hdr_offset(dst, p_prbMapElm->compMethod);
|
||||
}
|
||||
} else {
|
||||
exit(-1);
|
||||
printf("ptr ==NULL\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return(0);
|
||||
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int xran_fh_rx_read_slot(void *xranlib_, ru_info_t *ru, int frame, int slot){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
|
||||
|
||||
int tti = /*frame*SUBFRAMES_PER_SYSTEMFRAME*SLOTNUM_PER_SUBFRAME+*/10*frame+slot; //commented out temporarily to check that compilation of oran 5g is working.
|
||||
|
||||
//int32_t flowId;
|
||||
void *ptr = NULL;
|
||||
int32_t *pos = NULL;
|
||||
|
||||
p_xran_dev_ctx_2 = xran_dev_get_ctx();
|
||||
#if 0
|
||||
if (p_xran_dev_ctx_2 != NULL){
|
||||
printf("p_xran_dev_ctx_2=%d\n",p_xran_dev_ctx_2);
|
||||
}
|
||||
#endif
|
||||
|
||||
int num_eaxc = xranlib->get_num_eaxc();
|
||||
int num_eaxc_ul = xranlib->get_num_eaxc_ul();
|
||||
uint32_t xran_max_antenna_nr = RTE_MAX(num_eaxc, num_eaxc_ul);
|
||||
//uint32_t ant_el_trx = xranlib->get_num_antelmtrx();
|
||||
//uint32_t xran_max_ant_array_elm_nr = RTE_MAX(ant_el_trx, xran_max_antenna_nr);
|
||||
|
||||
//int32_t nSectorIndex[XRAN_MAX_SECTOR_NR];
|
||||
//int32_t nSectorNum;
|
||||
|
||||
/*
|
||||
for (nSectorNum = 0; nSectorNum < XRAN_MAX_SECTOR_NR; nSectorNum++)
|
||||
{
|
||||
nSectorIndex[nSectorNum] = nSectorNum;
|
||||
}
|
||||
*/
|
||||
//nSectorNum = xranlib->get_num_cc();
|
||||
|
||||
//int maxflowid = num_eaxc * (nSectorNum-1) + (xran_max_antenna_nr-1);
|
||||
|
||||
|
||||
for(uint16_t cc_id=0; cc_id<1/*nSectorNum*/; cc_id++){ // OAI does not support multiple CC yet.
|
||||
for(uint8_t ant_id = 0; ant_id < xran_max_antenna_nr && ant_id<ru->nb_rx; ant_id++){
|
||||
// This loop would better be more inner to avoid confusion and maybe also errors.
|
||||
for(int32_t sym_idx = 0; sym_idx < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_idx++) {
|
||||
|
||||
//flowId = num_eaxc * cc_id + ant_id;
|
||||
uint8_t *pData = p_xran_dev_ctx_2->sFrontHaulRxBbuIoBufCtrl[tti % XRAN_N_FE_BUF_LEN][cc_id][ant_id].sBufferList.pBuffers[sym_idx%XRAN_NUM_OF_SYMBOL_PER_SLOT].pData;
|
||||
uint8_t *pPrbMapData = p_xran_dev_ctx_2->sFrontHaulRxPrbMapBbuIoBufCtrl[tti % XRAN_N_FE_BUF_LEN][cc_id][ant_id].sBufferList.pBuffers->pData;
|
||||
struct xran_prb_map *pPrbMap = (struct xran_prb_map *)pPrbMapData;
|
||||
ptr = pData;
|
||||
pos = &ru->rxdataF[ant_id][sym_idx * 2048 /*fp->ofdm_symbol_size*/]; // We had to use a different ru structure than benetel so the access to the buffer is not the same.
|
||||
|
||||
uint8_t *u8dptr;
|
||||
struct xran_prb_map *pRbMap = pPrbMap;
|
||||
int32_t sym_id = sym_idx%XRAN_NUM_OF_SYMBOL_PER_SLOT;
|
||||
if(ptr && pos){
|
||||
uint32_t idxElm = 0;
|
||||
u8dptr = (uint8_t*)ptr;
|
||||
int16_t payload_len = 0;
|
||||
|
||||
uint8_t *src = (uint8_t *)u8dptr;
|
||||
//uint8_t *dst = (uint8_t *)pos;
|
||||
// first half
|
||||
uint8_t *src1 = (uint8_t *)u8dptr;
|
||||
uint8_t *dst1 = (uint8_t *)pos;
|
||||
// second half
|
||||
uint8_t *src2 = (uint8_t *)u8dptr;
|
||||
uint8_t *dst2 = (uint8_t *)pos;
|
||||
|
||||
struct xran_prb_elm* p_prbMapElm = &pRbMap->prbMap[idxElm];
|
||||
|
||||
for (idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++) {
|
||||
struct xran_section_desc *p_sec_desc = NULL;
|
||||
p_prbMapElm = &pRbMap->prbMap[idxElm];
|
||||
p_sec_desc = p_prbMapElm->p_sec_desc[sym_id];
|
||||
|
||||
if(pRbMap->nPrbElm==1 && idxElm==0){
|
||||
src = pData;
|
||||
}
|
||||
else if(p_sec_desc->pData==NULL){
|
||||
return -1;
|
||||
}else{
|
||||
src = p_sec_desc->pData;
|
||||
}
|
||||
|
||||
src2 = src;
|
||||
|
||||
if(p_sec_desc == NULL){
|
||||
printf ("p_sec_desc == NULL\n");
|
||||
exit(-1);
|
||||
}
|
||||
// Calculation of the pointer for the section in the buffer.
|
||||
// first half
|
||||
dst1 = (uint8_t *)(pos + p_prbMapElm->nRBStart*N_SC_PER_PRB);
|
||||
// second half
|
||||
dst2 = (uint8_t *)(pos + (p_prbMapElm->nRBStart*N_SC_PER_PRB + 1272/2) + 2048 - 1272);
|
||||
//printf("RRR: idxElm=%d\tcompMethod=%d\tiqWidth=%d\n",idxElm,p_prbMapElm->compMethod,p_prbMapElm->iqWidth);
|
||||
if(p_prbMapElm->compMethod == XRAN_COMPMETHOD_NONE) {
|
||||
payload_len = p_prbMapElm->nRBSize*N_SC_PER_PRB*4L;
|
||||
src1 = src2 + payload_len/2;
|
||||
rte_memcpy(dst1, src1, payload_len/2);
|
||||
rte_memcpy(dst2, src2, payload_len/2);
|
||||
} else if (p_prbMapElm->compMethod == XRAN_COMPMETHOD_BLKFLOAT) {
|
||||
struct xranlib_decompress_request bfp_decom_req_2;
|
||||
struct xranlib_decompress_response bfp_decom_rsp_2;
|
||||
struct xranlib_decompress_request bfp_decom_req_1;
|
||||
struct xranlib_decompress_response bfp_decom_rsp_1;
|
||||
|
||||
|
||||
payload_len = (3* p_prbMapElm->iqWidth + 1)*p_prbMapElm->nRBSize;
|
||||
|
||||
memset(&bfp_decom_req_2, 0, sizeof(struct xranlib_decompress_request));
|
||||
memset(&bfp_decom_rsp_2, 0, sizeof(struct xranlib_decompress_response));
|
||||
memset(&bfp_decom_req_1, 0, sizeof(struct xranlib_decompress_request));
|
||||
memset(&bfp_decom_rsp_1, 0, sizeof(struct xranlib_decompress_response));
|
||||
|
||||
bfp_decom_req_2.data_in = (int8_t*)src2;
|
||||
bfp_decom_req_2.numRBs = p_prbMapElm->nRBSize/2;
|
||||
bfp_decom_req_2.len = payload_len/2;
|
||||
bfp_decom_req_2.compMethod = p_prbMapElm->compMethod;
|
||||
bfp_decom_req_2.iqWidth = p_prbMapElm->iqWidth;
|
||||
|
||||
bfp_decom_rsp_2.data_out = (int16_t*)dst2;
|
||||
bfp_decom_rsp_2.len = 0;
|
||||
|
||||
xranlib_decompress_avx512(&bfp_decom_req_2, &bfp_decom_rsp_2);
|
||||
|
||||
int16_t first_half_len = bfp_decom_rsp_2.len;
|
||||
src1 = src2+(payload_len/2);
|
||||
|
||||
bfp_decom_req_1.data_in = (int8_t*)src1;
|
||||
bfp_decom_req_1.numRBs = p_prbMapElm->nRBSize/2;
|
||||
bfp_decom_req_1.len = payload_len/2;
|
||||
bfp_decom_req_1.compMethod = p_prbMapElm->compMethod;
|
||||
bfp_decom_req_1.iqWidth = p_prbMapElm->iqWidth;
|
||||
|
||||
bfp_decom_rsp_1.data_out = (int16_t*)dst1;
|
||||
bfp_decom_rsp_1.len = 0;
|
||||
|
||||
xranlib_decompress_avx512(&bfp_decom_req_1, &bfp_decom_rsp_1);
|
||||
payload_len = bfp_decom_rsp_1.len+first_half_len;
|
||||
}else {
|
||||
printf ("p_prbMapElm->compMethod == %d is not supported\n",
|
||||
p_prbMapElm->compMethod);
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
exit(-1);
|
||||
printf("ptr ==NULL\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return(0);
|
||||
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int xran_fh_tx_send_slot(void *xranlib_, ru_info_t *ru, int frame, int slot, uint64_t timestamp){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
|
||||
|
||||
int tti = /*frame*SUBFRAMES_PER_SYSTEMFRAME*SLOTNUM_PER_SUBFRAME+*/10*frame+slot; //commented out temporarily to check that compilation of oran 5g is working.
|
||||
|
||||
//int32_t flowId;
|
||||
void *ptr = NULL;
|
||||
int32_t *pos = NULL;
|
||||
|
||||
p_xran_dev_ctx_2 = xran_dev_get_ctx();
|
||||
#if 0
|
||||
if (p_xran_dev_ctx_2 != NULL){
|
||||
printf("p_xran_dev_ctx_2=%d\n",p_xran_dev_ctx_2);
|
||||
}
|
||||
#endif
|
||||
|
||||
int num_eaxc = xranlib->get_num_eaxc();
|
||||
int num_eaxc_ul = xranlib->get_num_eaxc_ul();
|
||||
uint32_t xran_max_antenna_nr = RTE_MAX(num_eaxc, num_eaxc_ul);
|
||||
//uint32_t ant_el_trx = xranlib->get_num_antelmtrx();
|
||||
//uint32_t xran_max_ant_array_elm_nr = RTE_MAX(ant_el_trx, xran_max_antenna_nr);
|
||||
|
||||
//int32_t nSectorIndex[XRAN_MAX_SECTOR_NR];
|
||||
//int32_t nSectorNum;
|
||||
|
||||
/*
|
||||
for (nSectorNum = 0; nSectorNum < XRAN_MAX_SECTOR_NR; nSectorNum++)
|
||||
{
|
||||
nSectorIndex[nSectorNum] = nSectorNum;
|
||||
}
|
||||
*/
|
||||
//nSectorNum = xranlib->get_num_cc();
|
||||
|
||||
//int maxflowid = num_eaxc * (nSectorNum-1) + (xran_max_antenna_nr-1);
|
||||
|
||||
for(uint16_t cc_id=0; cc_id<1/*nSectorNum*/; cc_id++){ // OAI does not support multiple CC yet.
|
||||
for(uint8_t ant_id = 0; ant_id < xran_max_antenna_nr && ant_id<ru->nb_tx; ant_id++){
|
||||
// This loop would better be more inner to avoid confusion and maybe also errors.
|
||||
for(int32_t sym_idx = 0; sym_idx < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_idx++) {
|
||||
|
||||
//flowId = num_eaxc * cc_id + ant_id;
|
||||
uint8_t *pData = p_xran_dev_ctx_2->sFrontHaulTxBbuIoBufCtrl[tti % XRAN_N_FE_BUF_LEN][cc_id][ant_id].sBufferList.pBuffers[sym_idx%XRAN_NUM_OF_SYMBOL_PER_SLOT].pData;
|
||||
uint8_t *pPrbMapData = p_xran_dev_ctx_2->sFrontHaulTxPrbMapBbuIoBufCtrl[tti % XRAN_N_FE_BUF_LEN][cc_id][ant_id].sBufferList.pBuffers->pData;
|
||||
struct xran_prb_map *pPrbMap = (struct xran_prb_map *)pPrbMapData;
|
||||
ptr = pData;
|
||||
pos = &ru->txdataF_BF[ant_id][sym_idx * 2048 /*fp->ofdm_symbol_size*/]; // We had to use a different ru structure than benetel so the access to the buffer is not the same.
|
||||
|
||||
uint8_t *u8dptr;
|
||||
struct xran_prb_map *pRbMap = pPrbMap;
|
||||
int32_t sym_id = sym_idx%XRAN_NUM_OF_SYMBOL_PER_SLOT;
|
||||
if(ptr && pos){
|
||||
uint32_t idxElm = 0;
|
||||
u8dptr = (uint8_t*)ptr;
|
||||
int16_t payload_len = 0;
|
||||
|
||||
uint8_t *dst = (uint8_t *)u8dptr;
|
||||
//uint8_t *src = (uint8_t *)pos;
|
||||
// first half
|
||||
uint8_t *dst1 = (uint8_t *)u8dptr;
|
||||
uint8_t *src1 = (uint8_t *)pos;
|
||||
// second half
|
||||
uint8_t *dst2 = (uint8_t *)u8dptr;
|
||||
uint8_t *src2 = (uint8_t *)pos;
|
||||
|
||||
struct xran_prb_elm* p_prbMapElm = &pRbMap->prbMap[idxElm];
|
||||
|
||||
//printf("RRR : nPrbElm=%d\n",pRbMap->nPrbElm);
|
||||
for (idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++) {
|
||||
struct xran_section_desc *p_sec_desc = NULL;
|
||||
p_prbMapElm = &pRbMap->prbMap[idxElm];
|
||||
p_sec_desc = p_prbMapElm->p_sec_desc[sym_id];
|
||||
|
||||
payload_len = p_prbMapElm->nRBSize*N_SC_PER_PRB*4L;
|
||||
dst = xran_add_hdr_offset(dst, p_prbMapElm->compMethod);
|
||||
dst2 = dst;
|
||||
dst1 = dst2 + payload_len/2;
|
||||
|
||||
if(p_sec_desc == NULL){
|
||||
printf ("p_sec_desc == NULL\n");
|
||||
exit(-1);
|
||||
}
|
||||
// Calculation of the pointer for the section in the buffer.
|
||||
// first half
|
||||
src1 = (uint8_t *)(pos + p_prbMapElm->nRBStart*N_SC_PER_PRB);
|
||||
// second half
|
||||
src2 = (uint8_t *)(pos + (p_prbMapElm->nRBStart*N_SC_PER_PRB + 1272/2) + 2048 - 1272);
|
||||
if(p_prbMapElm->compMethod == XRAN_COMPMETHOD_NONE) {
|
||||
rte_memcpy(dst1, src1, payload_len/2);
|
||||
rte_memcpy(dst2, src2, payload_len/2);
|
||||
} else if (p_prbMapElm->compMethod == XRAN_COMPMETHOD_BLKFLOAT) {
|
||||
printf("idxElm=%d, compMeth==BLKFLOAT\n",idxElm);
|
||||
struct xranlib_compress_request bfp_com_req;
|
||||
struct xranlib_compress_response bfp_com_rsp;
|
||||
|
||||
memset(&bfp_com_req, 0, sizeof(struct xranlib_compress_request));
|
||||
memset(&bfp_com_rsp, 0, sizeof(struct xranlib_compress_response));
|
||||
|
||||
bfp_com_req.data_in = (int16_t*)src2;
|
||||
bfp_com_req.numRBs = p_prbMapElm->nRBSize/2;
|
||||
bfp_com_req.len = payload_len/2;
|
||||
bfp_com_req.compMethod = p_prbMapElm->compMethod;
|
||||
bfp_com_req.iqWidth = p_prbMapElm->iqWidth;
|
||||
|
||||
bfp_com_rsp.data_out = (int8_t*)dst2;
|
||||
bfp_com_rsp.len = 0;
|
||||
|
||||
xranlib_compress_avx512(&bfp_com_req, &bfp_com_rsp);
|
||||
|
||||
int16_t first_half_len = bfp_com_rsp.len;
|
||||
|
||||
dst1 = dst2 + first_half_len;
|
||||
|
||||
bfp_com_req.data_in = (int16_t*)src1;
|
||||
bfp_com_req.numRBs = p_prbMapElm->nRBSize/2;
|
||||
bfp_com_req.len = payload_len/2;
|
||||
bfp_com_req.compMethod = p_prbMapElm->compMethod;
|
||||
bfp_com_req.iqWidth = p_prbMapElm->iqWidth;
|
||||
|
||||
bfp_com_rsp.data_out = (int8_t*)dst1;
|
||||
bfp_com_rsp.len = 0;
|
||||
|
||||
xranlib_compress_avx512(&bfp_com_req, &bfp_com_rsp);
|
||||
payload_len = bfp_com_rsp.len+first_half_len;
|
||||
}else {
|
||||
printf ("p_prbMapElm->compMethod == %d is not supported\n",
|
||||
p_prbMapElm->compMethod);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
p_sec_desc->iq_buffer_offset = RTE_PTR_DIFF(dst, u8dptr);
|
||||
p_sec_desc->iq_buffer_len = payload_len;
|
||||
|
||||
dst += payload_len;
|
||||
dst = xran_add_hdr_offset(dst, p_prbMapElm->compMethod);
|
||||
}
|
||||
|
||||
// The tti should be updated as it increased.
|
||||
pRbMap->tti_id = tti;
|
||||
|
||||
} else {
|
||||
exit(-1);
|
||||
printf("ptr ==NULL\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return(0);
|
||||
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
int64_t count_sec =0;
|
||||
struct xran_common_counters x_counters;
|
||||
uint64_t nTotalTime;
|
||||
uint64_t nUsedTime;
|
||||
uint32_t nCoreUsed;
|
||||
float nUsedPercent;
|
||||
uint64_t old_rx_counter = 0;
|
||||
uint64_t old_tx_counter = 0;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int compute_xran_statistics(void *xranlib_){
|
||||
xranLibWraper *xranlib = ((xranLibWraper *) xranlib_);
|
||||
|
||||
if(xran_get_common_counters(xranlib->get_xranhandle(), &x_counters) == XRAN_STATUS_SUCCESS) {
|
||||
xran_get_time_stats(&nTotalTime, &nUsedTime, &nCoreUsed, 1);
|
||||
nUsedPercent = ((float)nUsedTime * 100.0) / (float)nTotalTime;
|
||||
|
||||
printf("[rx %7ld pps %7ld kbps %7ld][tx %7ld pps %7ld kbps %7ld] [on_time %ld early %ld late %ld corrupt %ld pkt_dupl %ld Total %ld] IO Util: %5.2f %%\n",
|
||||
x_counters.rx_counter,
|
||||
x_counters.rx_counter-old_rx_counter,
|
||||
x_counters.rx_bytes_per_sec*8/1000L,
|
||||
x_counters.tx_counter,
|
||||
x_counters.tx_counter-old_tx_counter,
|
||||
x_counters.tx_bytes_per_sec*8/1000L,
|
||||
x_counters.Rx_on_time,
|
||||
x_counters.Rx_early,
|
||||
x_counters.Rx_late,
|
||||
x_counters.Rx_corrupt,
|
||||
x_counters.Rx_pkt_dupl,
|
||||
x_counters.Total_msgs_rcvd,
|
||||
nUsedPercent);
|
||||
|
||||
if(x_counters.rx_counter > old_rx_counter)
|
||||
old_rx_counter = x_counters.rx_counter;
|
||||
if(x_counters.tx_counter > old_tx_counter)
|
||||
old_tx_counter = x_counters.tx_counter;
|
||||
} else {
|
||||
printf("error xran_get_common_counters\n");
|
||||
return(1);
|
||||
}
|
||||
|
||||
return (0);
|
||||
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
void check_xran_ptp_sync(){
|
||||
|
||||
if (xran_is_synchronized() != 0)
|
||||
printf("Machine is not synchronized using PTP!\n");
|
||||
else
|
||||
printf("Machine is synchronized using PTP!\n");
|
||||
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
48
targets/ARCH/ETHERNET/oran/5g/oran.h
Normal file
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* * contributor license agreements. See the NOTICE file distributed with
|
||||
* * this work for additional information regarding copyright ownership.
|
||||
* * The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* * the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* * except in compliance with the License.
|
||||
* * You may obtain a copy of the License at
|
||||
* *
|
||||
* * http://www.openairinterface.org/?page_id=698
|
||||
* *
|
||||
* * Unless required by applicable law or agreed to in writing, software
|
||||
* * distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* * See the License for the specific language governing permissions and
|
||||
* * limitations under the License.
|
||||
* *-------------------------------------------------------------------------------
|
||||
* * For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* * contact@openairinterface.org
|
||||
* */
|
||||
|
||||
#ifndef _ORAN_H_
|
||||
#define _ORAN_H_
|
||||
|
||||
#include "shared_buffers.h"
|
||||
#include "common_lib.h"
|
||||
void oran_fh_if4p5_south_out(RU_t *ru,
|
||||
int frame,
|
||||
int slot,
|
||||
uint64_t timestamp);
|
||||
|
||||
void oran_fh_if4p5_south_in(RU_t *ru,
|
||||
int *frame,
|
||||
int *slot);
|
||||
|
||||
int transport_init(openair0_device *device,
|
||||
openair0_config_t *openair0_cfg,
|
||||
eth_params_t * eth_params );
|
||||
|
||||
|
||||
typedef struct {
|
||||
eth_state_t e;
|
||||
shared_buffers buffers;
|
||||
rru_config_msg_type_t last_msg;
|
||||
int capabilities_sent;
|
||||
void *oran_priv;
|
||||
} oran_eth_state_t;
|
||||
#endif /* _ORAN_H_ */
|
||||
567
targets/ARCH/ETHERNET/oran/5g/oran_isolate.c
Normal file
@@ -0,0 +1,567 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include "common_lib.h"
|
||||
#include "ethernet_lib.h"
|
||||
#include "oran_isolate.h"
|
||||
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "openair1/PHY/defs_gNB.h"
|
||||
|
||||
typedef struct {
|
||||
eth_state_t e;
|
||||
rru_config_msg_type_t last_msg;
|
||||
int capabilities_sent;
|
||||
void *oran_priv;
|
||||
} oran_eth_state_t;
|
||||
|
||||
|
||||
int trx_oran_start(openair0_device *device)
|
||||
{
|
||||
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
|
||||
#if 1
|
||||
|
||||
oran_eth_state_t *s = device->priv;
|
||||
|
||||
// Start ORAN
|
||||
if ( start_oran(s->oran_priv) !=0 ){
|
||||
printf("%s:%d:%s: Start ORAN failed ... Exit\n",
|
||||
__FILE__, __LINE__, __FUNCTION__);
|
||||
exit(1);
|
||||
}else{
|
||||
printf("Start ORAN. Done\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void trx_oran_end(openair0_device *device)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
oran_eth_state_t *s = device->priv;
|
||||
stop_oran(s->oran_priv);
|
||||
close_oran(s->oran_priv);
|
||||
}
|
||||
|
||||
|
||||
int trx_oran_stop(openair0_device *device)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
oran_eth_state_t *s = device->priv;
|
||||
stop_oran(s->oran_priv);
|
||||
return(0);
|
||||
}
|
||||
|
||||
int trx_oran_set_freq(openair0_device* device,
|
||||
openair0_config_t *openair0_cfg,
|
||||
int exmimo_dump_config)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
return(0);
|
||||
}
|
||||
|
||||
int trx_oran_set_gains(openair0_device* device,
|
||||
openair0_config_t *openair0_cfg)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
return(0);
|
||||
}
|
||||
|
||||
int trx_oran_get_stats(openair0_device* device)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
int trx_oran_reset_stats(openair0_device* device)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
return(0);
|
||||
}
|
||||
|
||||
int ethernet_tune(openair0_device *device,
|
||||
unsigned int option,
|
||||
int value)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int trx_oran_write_raw(openair0_device *device,
|
||||
openair0_timestamp timestamp,
|
||||
void **buff, int nsamps, int cc, int flags)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int trx_oran_read_raw(openair0_device *device,
|
||||
openair0_timestamp *timestamp,
|
||||
void **buff, int nsamps, int cc)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *msg_type(int t)
|
||||
{
|
||||
static char *s[12] = {
|
||||
"RAU_tick",
|
||||
"RRU_capabilities",
|
||||
"RRU_config",
|
||||
"RRU_config_ok",
|
||||
"RRU_start",
|
||||
"RRU_stop",
|
||||
"RRU_sync_ok",
|
||||
"RRU_frame_resynch",
|
||||
"RRU_MSG_max_num",
|
||||
"RRU_check_sync",
|
||||
"RRU_config_update",
|
||||
"RRU_config_update_ok",
|
||||
};
|
||||
|
||||
if (t < 0 || t > 11) return "UNKNOWN";
|
||||
return s[t];
|
||||
}
|
||||
|
||||
int trx_oran_ctlsend(openair0_device *device, void *msg, ssize_t msg_len)
|
||||
{
|
||||
RRU_CONFIG_msg_t *rru_config_msg = msg;
|
||||
oran_eth_state_t *s = device->priv;
|
||||
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
|
||||
printf(" rru_config_msg->type %d [%s]\n", rru_config_msg->type,
|
||||
msg_type(rru_config_msg->type));
|
||||
|
||||
s->last_msg = rru_config_msg->type;
|
||||
|
||||
return msg_len;
|
||||
}
|
||||
|
||||
int trx_oran_ctlrecv(openair0_device *device, void *msg, ssize_t msg_len)
|
||||
{
|
||||
RRU_CONFIG_msg_t *rru_config_msg = msg;
|
||||
oran_eth_state_t *s = device->priv;
|
||||
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
|
||||
if (s->last_msg == RAU_tick && s->capabilities_sent == 0) {
|
||||
printf("CCCCC ORAN ctrlrcv RRU_tick received and send capabilities hard coded\n");
|
||||
RRU_capabilities_t *cap;
|
||||
rru_config_msg->type = RRU_capabilities;
|
||||
rru_config_msg->len = sizeof(RRU_CONFIG_msg_t)-MAX_RRU_CONFIG_SIZE+sizeof(RRU_capabilities_t);
|
||||
// Fill RRU capabilities (see openair1/PHY/defs_RU.h)
|
||||
// For now they are hard coded - try to retreive the params from openari device
|
||||
|
||||
cap = (RRU_capabilities_t*)&rru_config_msg->msg[0];
|
||||
cap->FH_fmt = OAI_IF4p5_only;
|
||||
cap->num_bands = 1;
|
||||
cap->band_list[0] = 78;
|
||||
// cap->num_concurrent_bands = 1; component carriers
|
||||
cap->nb_rx[0] = 1; //device->openair0_cfg->rx_num_channels;
|
||||
cap->nb_tx[0] = 1; //device->openair0_cfg->tx_num_channels;
|
||||
cap->max_pdschReferenceSignalPower[0] = -27;
|
||||
cap->max_rxgain[0] = 90;
|
||||
cap->N_RB_DL[0] = 106;
|
||||
cap->N_RB_UL[0] = 106;
|
||||
|
||||
|
||||
s->capabilities_sent = 1;
|
||||
|
||||
return rru_config_msg->len;
|
||||
}
|
||||
if (s->last_msg == RRU_config) {
|
||||
printf("Oran RRU_config\n");
|
||||
rru_config_msg->type = RRU_config_ok;
|
||||
//return 0;
|
||||
}
|
||||
#if 0
|
||||
if (s->last_msg == RRU_start) {
|
||||
// Folllow the same steps as in the wrapper
|
||||
printf("Oran RRU_start\n");
|
||||
|
||||
// Check if the machine is PTP sync
|
||||
check_xran_ptp_sync();
|
||||
|
||||
// SetUp
|
||||
if ( setup_oran(s->oran_priv) !=0 ){
|
||||
printf("%s:%d:%s: SetUp ORAN failed ... Exit\n",
|
||||
__FILE__, __LINE__, __FUNCTION__);
|
||||
exit(1);
|
||||
}else{
|
||||
printf("SetUp ORAN. Done\n");
|
||||
}
|
||||
|
||||
// Load the IQ samples from file
|
||||
load_iq_from_file(s->oran_priv);
|
||||
printf("Load IQ from file. Done\n");
|
||||
|
||||
// Register physide callbacks
|
||||
register_physide_callbacks(s->oran_priv);
|
||||
printf("Register physide callbacks. Done\n");
|
||||
|
||||
// Open callbacks
|
||||
open_oran_callback(s->oran_priv);
|
||||
printf("Open Oran callbacks. Done\n");
|
||||
|
||||
// Init ORAN
|
||||
initialize_oran(s->oran_priv);
|
||||
printf("Init Oran. Done\n");
|
||||
|
||||
// Copy the loaded IQ to the xran buffer fro the tx
|
||||
xran_fh_tx_send_buffer(s->oran_priv);
|
||||
printf("ORAN FH send tx buffer filled in with loaded IQs. Done\n");
|
||||
|
||||
// Open ORAN
|
||||
open_oran(s->oran_priv);
|
||||
printf("xran_open. Done\n");
|
||||
|
||||
// Start ORAN
|
||||
if ( start_oran(s->oran_priv) !=0 ){
|
||||
printf("%s:%d:%s: Start ORAN failed ... Exit\n",
|
||||
__FILE__, __LINE__, __FUNCTION__);
|
||||
exit(1);
|
||||
}else{
|
||||
printf("Start ORAN. Done\n");
|
||||
}
|
||||
|
||||
#if 0
|
||||
// Once xran library and thread started compute the statistics
|
||||
while(1){
|
||||
sleep(1);
|
||||
compute_xran_statistics(s->oran_priv);
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
void oran_fh_if4p5_south_in(RU_t *ru,
|
||||
int *frame,
|
||||
int *slot)
|
||||
{
|
||||
/*
|
||||
if(*frame==0 && *slot==0){
|
||||
printf("XXX oran_fh_if4p5_south_in %d %d\n", *frame, *slot);
|
||||
// sleep(1);
|
||||
}
|
||||
*/
|
||||
|
||||
oran_eth_state_t *s = ru->ifdevice.priv;
|
||||
NR_DL_FRAME_PARMS *fp;
|
||||
int symbol;
|
||||
int32_t *rxdata;
|
||||
int antenna;
|
||||
|
||||
//printf("XXX ORAN_fh_if4p5_south_in %d %d\n", *frame, *slot);
|
||||
|
||||
ru_info_t ru_info;
|
||||
ru_info.nb_rx = ru->nb_rx;
|
||||
ru_info.rxdataF = ru->common.rxdataF;
|
||||
|
||||
int ret = xran_fh_rx_read_slot(s->oran_priv, &ru_info, *frame, *slot);
|
||||
|
||||
if (ret != 0){
|
||||
printf("ORAN: ORAN_fh_if4p5_south_in ERROR in RX function \n");
|
||||
}
|
||||
#if 0
|
||||
for (antenna = 0; antenna < ru->nb_rx; antenna++) {
|
||||
for (symbol = 0; symbol < 14; symbol++) {
|
||||
printf("\nantenna:%d\tsymbol=%d\n",antenna,symbol);
|
||||
for(int sample = 0; sample < 2048; sample++){
|
||||
printf("%x ",ru->common.rxdataF[antenna][symbol*2048+sample]);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
next:
|
||||
while (!((s->buffers.ul_busy[0][*slot] == 0x3fff &&
|
||||
s->buffers.ul_busy[1][*slot] == 0x3fff) ||
|
||||
s->buffers.prach_busy[*slot] == 1))
|
||||
wait_ul_buffer(&s->buffers, *slot);
|
||||
if (s->buffers.prach_busy[*slot] == 1) {
|
||||
int i;
|
||||
int antenna = 0;
|
||||
uint16_t *in;
|
||||
uint16_t *out;
|
||||
in = (uint16_t *)s->buffers.prach[*slot];
|
||||
out = (uint16_t *)ru->prach_rxsigF[0][antenna];
|
||||
for (i = 0; i < 839*2; i++)
|
||||
out[i] = ntohs(in[i]);
|
||||
s->buffers.prach_busy[*slot] = 0;
|
||||
//printf("prach for f.sl %d.%d\n", *frame, *slot);
|
||||
//ru->wakeup_prach_gNB(ru->gNB_list[0], ru, *frame, *slot);
|
||||
goto next;
|
||||
}
|
||||
#endif
|
||||
#if 1
|
||||
fp = ru->nr_frame_parms;
|
||||
for (antenna = 0; antenna < ru->nb_rx; antenna++) {
|
||||
for (symbol = 0; symbol < 14; symbol++) {
|
||||
/*
|
||||
int i;
|
||||
int16_t *p = (int16_t *)(&s->buffers.ul[antenna][*slot][symbol*1272*4]);
|
||||
for (i = 0; i < 1272*2; i++) {
|
||||
p[i] = (int16_t)(ntohs(p[i])) / 16;
|
||||
}
|
||||
*/
|
||||
rxdata = &ru->common.rxdataF[antenna][symbol * fp->ofdm_symbol_size];
|
||||
}
|
||||
}
|
||||
#endif
|
||||
RU_proc_t *proc = &ru->proc;
|
||||
int f = *frame;
|
||||
int sl = *slot;
|
||||
|
||||
//calculate timestamp_rx, timestamp_tx based on frame and slot
|
||||
proc->tti_rx = sl;
|
||||
proc->frame_rx = f;
|
||||
/* TODO: be sure of samples_per_slot0
|
||||
FK: should use get_samples_per_slot(slot)
|
||||
but for mu=1 its ok
|
||||
*/
|
||||
proc->timestamp_rx = ((proc->frame_rx * 20) + proc->tti_rx ) * fp->samples_per_slot0;
|
||||
|
||||
if (get_nprocs()<=4) {
|
||||
// why? what if there are more?
|
||||
proc->tti_tx = (sl+ru->sl_ahead)%20;
|
||||
proc->frame_tx = (sl>(19-ru->sl_ahead)) ? (f+1)&1023 : f;
|
||||
}
|
||||
#if 0
|
||||
printf("south_in:\ttimestamp_rx=%d{frame_rx=%d,tti_rx=%d}\ttti_tx=%d\tframe_tx=%d\n\n",proc->timestamp_rx,proc->frame_rx,proc->tti_rx,proc->tti_tx,proc->frame_tx);
|
||||
if(proc->frame_rx ==20){
|
||||
exit(-1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void oran_fh_if4p5_south_out(RU_t *ru,
|
||||
int frame,
|
||||
int slot,
|
||||
uint64_t timestamp)
|
||||
{
|
||||
openair0_device *device = &ru->ifdevice;
|
||||
oran_eth_state_t *s = device->priv;
|
||||
|
||||
ru_info_t ru_info;
|
||||
ru_info.nb_tx = ru->nb_tx;
|
||||
ru_info.txdataF_BF = ru->common.txdataF_BF;
|
||||
//printf("south_out:\tframe=%d\tslot=%d\ttimestamp=%ld\n",frame,slot,timestamp);
|
||||
#if 0
|
||||
//printf("\n ORAN south out frame:%d, slot:%d. ru->common.txdataF_BF and ru_info.txdataF_BF \n",frame,slot);
|
||||
for(int hhh=0; hhh<(14); hhh++ ){
|
||||
for(int jjj=0; jjj<2048; jjj++){
|
||||
/// Try to set all the values of the buffer to 1
|
||||
ru->common.txdataF_BF[0][hhh*2048+jjj] = 256;
|
||||
/* if(ru->common.txdataF_BF[0][hhh*2048+jjj] > 0){
|
||||
printf(" %d:%d:%d ",hhh*2048+jjj,ru->common.txdataF_BF[0][hhh*2048+jjj],ru_info.txdataF_BF[0][hhh*2048+jjj]);
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
//printf(" \n");
|
||||
//exit(-1);
|
||||
#endif
|
||||
|
||||
int ret = xran_fh_tx_send_slot(s->oran_priv, &ru_info, frame, slot, timestamp);
|
||||
if (ret != 0){
|
||||
printf("ORAN: ORAN_fh_if4p5_south_out ERROR in TX function \n");
|
||||
}
|
||||
|
||||
#if 0
|
||||
if(frame==0 && slot<100){
|
||||
printf("XXX oran_fh_if4p5_south_out %d %d %ld\n", frame, slot, timestamp);
|
||||
}
|
||||
#endif
|
||||
#if 0
|
||||
//printf("Sofia-Romain exit south out\n");
|
||||
//exit(-1);
|
||||
oran_eth_state_t *s = ru->ifdevice.priv;
|
||||
NR_DL_FRAME_PARMS *fp;
|
||||
int symbol;
|
||||
int32_t *txdata;
|
||||
int aa;
|
||||
|
||||
//printf("BENETEL: %s (f.sf %d.%d ts %ld)\n", __FUNCTION__, frame, slot, timestamp);
|
||||
|
||||
lock_dl_buffer(&s->buffers, slot);
|
||||
if (s->buffers.dl_busy[0][slot] ||
|
||||
s->buffers.dl_busy[1][slot]) {
|
||||
printf("%s: fatal: DL buffer busy for subframe %d\n", __FUNCTION__, slot);
|
||||
unlock_dl_buffer(&s->buffers, slot);
|
||||
return;
|
||||
}
|
||||
|
||||
fp = ru->nr_frame_parms;
|
||||
if (ru->num_gNB != 1 || fp->ofdm_symbol_size != 2048 ||
|
||||
fp->Ncp != NORMAL || fp->symbols_per_slot != 14) {
|
||||
printf("%s:%d:%s: unsupported configuration\n",
|
||||
__FILE__, __LINE__, __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
for (aa = 0; aa < ru->nb_tx; aa++) {
|
||||
for (symbol = 0; symbol < 14; symbol++) {
|
||||
txdata = &ru->common.txdataF_BF[aa][symbol * fp->ofdm_symbol_size];
|
||||
#if 1
|
||||
memcpy(&s->buffers.dl[aa][slot][symbol*1272*4],
|
||||
txdata + 2048 - (1272/2),
|
||||
(1272/2) * 4);
|
||||
memcpy(&s->buffers.dl[aa][slot][symbol*1272*4] + (1272/2)*4,
|
||||
txdata,
|
||||
(1272/2) * 4);
|
||||
#endif
|
||||
int i;
|
||||
uint16_t *p = (uint16_t *)(&s->buffers.dl[aa][slot][symbol*1272*4]);
|
||||
for (i = 0; i < 1272*2; i++) {
|
||||
p[i] = htons(p[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
s->buffers.dl_busy[0][slot] = 0x3fff;
|
||||
s->buffers.dl_busy[1][slot] = 0x3fff;
|
||||
unlock_dl_buffer(&s->buffers, slot);
|
||||
#endif
|
||||
}
|
||||
|
||||
void *get_internal_parameter(char *name)
|
||||
{
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
|
||||
if (!strcmp(name, "fh_if4p5_south_in"))
|
||||
return (void *) oran_fh_if4p5_south_in;
|
||||
if (!strcmp(name, "fh_if4p5_south_out"))
|
||||
return (void *) oran_fh_if4p5_south_out;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
__attribute__((__visibility__("default")))
|
||||
int transport_init(openair0_device *device,
|
||||
openair0_config_t *openair0_cfg,
|
||||
eth_params_t * eth_params )
|
||||
{
|
||||
oran_eth_state_t *eth;
|
||||
|
||||
|
||||
device->Mod_id = 0;
|
||||
device->transp_type = ETHERNET_TP;
|
||||
device->trx_start_func = trx_oran_start;
|
||||
device->trx_get_stats_func = trx_oran_get_stats;
|
||||
device->trx_reset_stats_func = trx_oran_reset_stats;
|
||||
device->trx_end_func = trx_oran_end;
|
||||
device->trx_stop_func = trx_oran_stop;
|
||||
device->trx_set_freq_func = trx_oran_set_freq;
|
||||
device->trx_set_gains_func = trx_oran_set_gains;
|
||||
|
||||
device->trx_write_func = trx_oran_write_raw;
|
||||
device->trx_read_func = trx_oran_read_raw;
|
||||
|
||||
device->trx_ctlsend_func = trx_oran_ctlsend;
|
||||
device->trx_ctlrecv_func = trx_oran_ctlrecv;
|
||||
|
||||
|
||||
device->get_internal_parameter = get_internal_parameter;
|
||||
|
||||
eth = (oran_eth_state_t *)calloc(1, sizeof(oran_eth_state_t));
|
||||
if (eth == NULL) {
|
||||
AssertFatal(0==1, "out of memory\n");
|
||||
}
|
||||
|
||||
eth->e.flags = ETH_RAW_IF4p5_MODE;
|
||||
eth->e.compression = NO_COMPRESS;
|
||||
eth->e.if_name = eth_params->local_if_name;
|
||||
eth->oran_priv = define_oran_pointer();
|
||||
device->priv = eth;
|
||||
device->openair0_cfg=&openair0_cfg[0];
|
||||
|
||||
eth->last_msg = (rru_config_msg_type_t)-1;
|
||||
|
||||
#if 0
|
||||
init_buffers(ð->buffers);
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
oran_eth_state_t *s = eth;
|
||||
|
||||
printf("ORAN: %s\n", __FUNCTION__);
|
||||
|
||||
// Check if the machine is PTP sync
|
||||
check_xran_ptp_sync();
|
||||
|
||||
// SetUp
|
||||
if ( setup_oran(s->oran_priv) !=0 ){
|
||||
printf("%s:%d:%s: SetUp ORAN failed ... Exit\n",
|
||||
__FILE__, __LINE__, __FUNCTION__);
|
||||
exit(1);
|
||||
}else{
|
||||
printf("SetUp ORAN. Done\n");
|
||||
}
|
||||
|
||||
// Dump ORAN config
|
||||
dump_oran_config(s->oran_priv);
|
||||
|
||||
// Load the IQ samples from file
|
||||
// load_iq_from_file(s->oran_priv);
|
||||
// printf("Load IQ from file. Done\n");
|
||||
|
||||
// Register physide callbacks
|
||||
register_physide_callbacks(s->oran_priv);
|
||||
printf("Register physide callbacks. Done\n");
|
||||
|
||||
// Open callbacks
|
||||
open_oran_callback(s->oran_priv);
|
||||
printf("Open Oran callbacks. Done\n");
|
||||
|
||||
// Init ORAN
|
||||
initialize_oran(s->oran_priv);
|
||||
printf("Init Oran. Done\n");
|
||||
|
||||
// Copy the loaded IQ to the xran buffer fro the tx
|
||||
// xran_fh_tx_send_buffer(s->oran_priv);
|
||||
// printf("ORAN FH send tx buffer filled in with loaded IQs. Done\n");
|
||||
|
||||
// Open ORAN
|
||||
open_oran(s->oran_priv);
|
||||
printf("xran_open. Done\n");
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
208
targets/ARCH/ETHERNET/oran/5g/oran_isolate.h
Normal file
@@ -0,0 +1,208 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
#ifndef _ORAN_ISOLATE_H_
|
||||
#define _ORAN_ISOLATE_H_
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <pthread.h>
|
||||
#include <stdint.h>
|
||||
|
||||
//#include "shared_buffers.h"
|
||||
//#include "low_oran.h"
|
||||
|
||||
/*
|
||||
* Structure added to bear the information needed from OAI RU
|
||||
*/
|
||||
typedef struct ru_info_s{
|
||||
|
||||
// Needed for UL
|
||||
int nb_rx;
|
||||
int32_t **rxdataF;
|
||||
|
||||
// Needed for DL
|
||||
int nb_tx;
|
||||
int32_t **txdataF_BF;
|
||||
|
||||
} ru_info_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
void* define_oran_pointer();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
void dump_oran_config( void *xranlib_ );
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int setup_oran( void *xranlib_ );
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int open_oran_callback( void *xranlib_ );
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int open_oran( void *xranlib_ );
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int initialize_oran( void *xranlib_ );
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int start_oran( void *xranlib_ );
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int stop_oran( void *xranlib_ );
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int close_oran( void *xranlib_ );
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int register_physide_callbacks(void *xranlib_);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int load_iq_from_file(void *xranlib_);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int xran_fh_rx_read_slot(void *xranlib_, ru_info_t *ru, int frame, int slot);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int xran_fh_tx_send_buffer(void *xranlib_);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int xran_fh_tx_send_slot(void *xranlib_, ru_info_t *ru, int frame, int slot, uint64_t timestamp);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int compute_xran_statistics(void *xranlib_);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
void check_xran_ptp_sync();
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#endif /* _ORAN_ISOLATE_H_ */
|
||||
1210
targets/ARCH/ETHERNET/oran/5g/xran_lib_wrap.cpp
Normal file
271
targets/ARCH/ETHERNET/oran/5g/xran_lib_wrap.hpp
Normal file
@@ -0,0 +1,271 @@
|
||||
/*******************************************************************************
|
||||
*
|
||||
* <COPYRIGHT_TAG>
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef XRAN_LIB_WRAP_HPP
|
||||
#define XRAN_LIB_WRAP_HPP
|
||||
|
||||
#include <exception>
|
||||
#include <random>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include <malloc.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "common.hpp"
|
||||
#include "xran_fh_o_du.h"
|
||||
#include "xran_common.h"
|
||||
#include "xran_frame_struct.h"
|
||||
|
||||
|
||||
#define XRAN_UT_CFG_FILENAME "conf.json"
|
||||
|
||||
#define XRAN_UT_KEY_GLOBALCFG "GLOBAL"
|
||||
#define XRAN_UT_KEY_GLOBALCFG_IO "io_cfg"
|
||||
#define XRAN_UT_KEY_GLOBALCFG_EAXCID "eAxCId_cfg"
|
||||
#define XRAN_UT_KEY_GLOBALCFG_PRACH "prach_cfg"
|
||||
#define XRAN_UT_KEY_GLOBALCFG_RU "ru_cfg"
|
||||
#define XRAN_UT_KEY_GLOBALCFG_SLOT "slotcfg_"
|
||||
|
||||
#define MAX_NUM_OF_XRAN_CTX (2)
|
||||
|
||||
#define SW_FPGA_TOTAL_BUFFER_LEN (4*1024*1024*1024)
|
||||
#define SW_FPGA_SEGMENT_BUFFER_LEN (1*1024*1024*1024)
|
||||
#define SW_FPGA_FH_TOTAL_BUFFER_LEN (1*1024*1024*1024)
|
||||
#define FPGA_TO_SW_PRACH_RX_BUFFER_LEN (8192)
|
||||
|
||||
#define MAX_ANT_CARRIER_SUPPORTED (XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR)
|
||||
|
||||
extern "C"
|
||||
{
|
||||
extern uint32_t xran_lib_ota_tti;
|
||||
extern uint32_t xran_lib_ota_sym;
|
||||
extern uint32_t xran_lib_ota_sym_idx;
|
||||
|
||||
void sym_ota_cb(struct rte_timer *tim, void *arg);
|
||||
void tti_ota_cb(struct rte_timer *tim, void *arg);
|
||||
}
|
||||
|
||||
class xranLibWraper
|
||||
{
|
||||
public:
|
||||
typedef enum
|
||||
{
|
||||
XRANFTHTX_OUT = 0,
|
||||
XRANFTHTX_PRB_MAP_OUT,
|
||||
XRANFTHTX_SEC_DESC_OUT,
|
||||
XRANFTHRX_IN,
|
||||
XRANFTHRX_PRB_MAP_IN,
|
||||
XRANFTHTX_SEC_DESC_IN,
|
||||
XRANFTHRACH_IN,
|
||||
#if 1
|
||||
XRANSRS_IN, // Added this entry as in sample app
|
||||
#endif
|
||||
MAX_SW_XRAN_INTERFACE_NUM
|
||||
} SWXRANInterfaceTypeEnum;
|
||||
|
||||
enum nChBw
|
||||
{
|
||||
PHY_BW_5MHZ = 5, PHY_BW_10MHZ = 10, PHY_BW_15MHZ = 15,
|
||||
PHY_BW_20MHZ = 20, PHY_BW_25MHZ = 25, PHY_BW_30MHZ = 30,
|
||||
PHY_BW_40MHZ = 40, PHY_BW_50MHZ = 50, PHY_BW_60MHZ = 60,
|
||||
PHY_BW_70MHZ = 70, PHY_BW_80MHZ = 80, PHY_BW_90MHZ = 90,
|
||||
PHY_BW_100MHZ = 100, PHY_BW_200MHZ = 200, PHY_BW_400MHZ = 400
|
||||
};
|
||||
|
||||
// F1 Tables 38.101-1 Table 5.3.2-1. Maximum transmission bandwidth configuration NRB
|
||||
const uint16_t nNumRbsPerSymF1[3][13] =
|
||||
{
|
||||
// 5MHz 10MHz 15MHz 20MHz 25MHz 30MHz 40MHz 50MHz 60MHz 70MHz 80MHz 90MHz 100MHz
|
||||
{ 25, 52, 79, 106, 133, 160, 216, 270, 0, 0, 0, 0, 0 }, // Numerology 0 (15KHz)
|
||||
{ 11, 24, 38, 51, 65, 78, 106, 133, 162, 0, 217, 245, 273 }, // Numerology 1 (30KHz)
|
||||
{ 0, 11, 18, 24, 31, 38, 51, 65, 79, 0, 107, 121, 135 } // Numerology 2 (60KHz)
|
||||
};
|
||||
|
||||
// F2 Tables 38.101-2 Table 5.3.2-1. Maximum transmission bandwidth configuration NRB
|
||||
const uint16_t nNumRbsPerSymF2[2][4] =
|
||||
{
|
||||
// 50MHz 100MHz 200MHz 400MHz
|
||||
{ 66, 132, 264, 0 }, // Numerology 2 (60KHz)
|
||||
{ 32, 66, 132, 264 } // Numerology 3 (120KHz)
|
||||
};
|
||||
|
||||
|
||||
protected:
|
||||
char argv[25] = {'u','n','i','t','t','e','s','t','\0'};
|
||||
//char argv[25] = "unittest";
|
||||
|
||||
std::string m_dpdk_dev_up, m_dpdk_dev_cp, m_dpdk_bbdev;
|
||||
|
||||
void *m_xranhandle;
|
||||
|
||||
uint8_t m_du_mac[6]; // = { 0x00,0x11, 0x22, 0x33, 0x44, 0x55 }; // Sofia: this is hard coded here and then it is read from the conf file
|
||||
uint8_t m_ru_mac[6]; //= { 0x00,0x11, 0x22, 0x33, 0x44, 0x66 }; // Sofia: this is hard coded here and then it is read from the conf file
|
||||
bool m_bSub6;
|
||||
uint32_t m_nSlots; // = 20;
|
||||
|
||||
struct xran_fh_config m_xranConf;
|
||||
struct xran_fh_init m_xranInit;
|
||||
|
||||
struct xran_timer_ctx {
|
||||
uint32_t tti_to_process;
|
||||
} m_timer_ctx[MAX_NUM_OF_XRAN_CTX];
|
||||
|
||||
/* io struct */
|
||||
BbuIoBufCtrlStruct m_sFrontHaulTxBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR];
|
||||
BbuIoBufCtrlStruct m_sFrontHaulTxPrbMapBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR];
|
||||
BbuIoBufCtrlStruct m_sFrontHaulRxBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR];
|
||||
BbuIoBufCtrlStruct m_sFrontHaulRxPrbMapBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR];
|
||||
BbuIoBufCtrlStruct m_sFHPrachRxBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR];
|
||||
|
||||
|
||||
/* Cat B */
|
||||
BbuIoBufCtrlStruct m_sFHSrsRxBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANT_ARRAY_ELM_NR];
|
||||
|
||||
/* buffers lists */
|
||||
struct xran_flat_buffer m_sFrontHaulTxBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT];
|
||||
struct xran_flat_buffer m_sFrontHaulTxPrbMapBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR];
|
||||
struct xran_flat_buffer m_sFrontHaulRxBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT];
|
||||
struct xran_flat_buffer m_sFrontHaulRxPrbMapBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR];
|
||||
struct xran_flat_buffer m_sFHPrachRxBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT];
|
||||
|
||||
/* Cat B SRS buffers */
|
||||
struct xran_flat_buffer m_sFHSrsRxBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANT_ARRAY_ELM_NR][XRAN_MAX_NUM_OF_SRS_SYMBOL_PER_SLOT];
|
||||
|
||||
void *m_nInstanceHandle[XRAN_PORTS_NUM][XRAN_MAX_SECTOR_NR]; // instance per sector
|
||||
uint32_t m_nBufPoolIndex[XRAN_MAX_SECTOR_NR][MAX_SW_XRAN_INTERFACE_NUM]; // every api owns unique buffer pool
|
||||
|
||||
uint32_t m_nSW_ToFpga_FTH_TxBufferLen;
|
||||
uint32_t m_nFpgaToSW_FTH_RxBufferLen;
|
||||
|
||||
int32_t m_nSectorIndex[XRAN_MAX_SECTOR_NR];
|
||||
|
||||
int iq_bfw_buffer_size_dl = 0;
|
||||
int iq_bfw_buffer_size_ul = 0;
|
||||
|
||||
/* beamforming weights for UL (O-DU) */
|
||||
int16_t *p_tx_dl_bfw_buffer[MAX_ANT_CARRIER_SUPPORTED];
|
||||
int32_t tx_dl_bfw_buffer_size[MAX_ANT_CARRIER_SUPPORTED];
|
||||
int32_t tx_dl_bfw_buffer_position[MAX_ANT_CARRIER_SUPPORTED];
|
||||
|
||||
/* beamforming weights for UL (O-DU) */
|
||||
int16_t *p_tx_ul_bfw_buffer[MAX_ANT_CARRIER_SUPPORTED];
|
||||
int32_t tx_ul_bfw_buffer_size[MAX_ANT_CARRIER_SUPPORTED];
|
||||
int32_t tx_ul_bfw_buffer_position[MAX_ANT_CARRIER_SUPPORTED];
|
||||
|
||||
|
||||
private:
|
||||
json m_global_cfg;
|
||||
|
||||
template<typename T>
|
||||
T get_globalcfg(const std::string &type, const std::string ¶meter_name)
|
||||
{
|
||||
return m_global_cfg[XRAN_UT_KEY_GLOBALCFG][type][parameter_name];
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
std::vector<T> get_globalcfg_array(const std::string &type, const std::string ¶meter_name)
|
||||
{
|
||||
auto array_size = m_global_cfg[XRAN_UT_KEY_GLOBALCFG][type][parameter_name].size();
|
||||
|
||||
std::vector<T> result(array_size);
|
||||
|
||||
for(unsigned number = 0; number < array_size; number++)
|
||||
result.at(number) = m_global_cfg[XRAN_UT_KEY_GLOBALCFG][type][parameter_name][number];
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
uint16_t get_eaxcid_mask(int numbit, int shift);
|
||||
|
||||
int init_memory();
|
||||
|
||||
public:
|
||||
// Class constructor
|
||||
xranLibWraper();
|
||||
|
||||
// Class Distructor
|
||||
~xranLibWraper();
|
||||
|
||||
int SetUp();
|
||||
|
||||
void TearDown();
|
||||
|
||||
int Init(struct xran_fh_config *pCfg = nullptr);
|
||||
|
||||
void Cleanup();
|
||||
|
||||
void Open(xran_ethdi_mbuf_send_fn send_cp, xran_ethdi_mbuf_send_fn send_up,
|
||||
void *fh_rx_callback, void *fh_rx_prach_callback, void *fh_srs_callback);
|
||||
|
||||
void Close();
|
||||
|
||||
int Start();
|
||||
|
||||
int Stop();
|
||||
|
||||
/* emulation of timer */
|
||||
void update_tti();
|
||||
|
||||
void update_symbol_index();
|
||||
|
||||
int apply_cpenable(bool flag);
|
||||
|
||||
int get_slot_config(const std::string &cfgname, struct xran_frame_config *pCfg);
|
||||
|
||||
int get_num_rbs(uint32_t nNumerology, uint32_t nBandwidth, bool nSub6);
|
||||
|
||||
void *get_xranhandle();
|
||||
|
||||
void *get_timer_ctx();
|
||||
|
||||
int get_symbol_index();
|
||||
|
||||
bool is_running();
|
||||
|
||||
enum xran_category get_rucategory();
|
||||
|
||||
int get_numerology();
|
||||
|
||||
int get_duplextype();
|
||||
|
||||
uint32_t get_num_cc();
|
||||
|
||||
uint32_t get_num_eaxc();
|
||||
|
||||
uint32_t get_num_eaxc_ul();
|
||||
|
||||
uint32_t get_num_dlrbs();
|
||||
|
||||
uint32_t get_num_ulrbs();
|
||||
|
||||
uint32_t get_num_antelmtrx();
|
||||
|
||||
bool is_cpenable();
|
||||
|
||||
bool is_prachenable();
|
||||
|
||||
bool is_dynamicsection();
|
||||
|
||||
bool get_sub6();
|
||||
|
||||
void get_cfg_prach(struct xran_prach_config *pCfg);
|
||||
|
||||
void get_cfg_frame(struct xran_frame_config *pCfg);
|
||||
|
||||
void get_cfg_ru(struct xran_ru_config *pCfg);
|
||||
|
||||
void get_cfg_fh(struct xran_fh_config *pCfg);
|
||||
|
||||
};
|
||||
|
||||
|
||||
/* external declaration for the instance */
|
||||
extern xranLibWraper *xranlib;
|
||||
|
||||
|
||||
#endif //XRAN_LIB_WRAP_HPP
|
||||
833
targets/ARCH/ORAN_FHI/lib/common.hpp
Normal file
@@ -0,0 +1,833 @@
|
||||
/*******************************************************************************
|
||||
*
|
||||
* <COPYRIGHT_TAG>
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/* This is the new utility file for all tests, all new common functionality has to go here.
|
||||
When contributing to the common.hpp please focus on readability and maintainability rather than
|
||||
execution time. */
|
||||
#ifndef XRANLIB_COMMON_HPP
|
||||
#define XRANLIB_COMMON_HPP
|
||||
|
||||
/* Disable warnings generated by JSON parser */
|
||||
#pragma warning(disable : 191)
|
||||
#pragma warning(disable : 186)
|
||||
#pragma warning(disable : 192)
|
||||
|
||||
#include <exception>
|
||||
#include <random>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include <immintrin.h>
|
||||
#include <malloc.h>
|
||||
|
||||
#define _BBLIB_DPDK_
|
||||
|
||||
#ifdef _BBLIB_DPDK_
|
||||
#include <rte_config.h>
|
||||
#include <rte_malloc.h>
|
||||
#endif
|
||||
|
||||
//#include "gtest/gtest.h"
|
||||
|
||||
#include "common_typedef_xran.h"
|
||||
|
||||
#include "json.hpp"
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
#define ASSERT_ARRAY_NEAR(reference, actual, size, precision) \
|
||||
assert_array_near(reference, actual, size, precision)
|
||||
|
||||
#define ASSERT_ARRAY_EQ(reference, actual, size) \
|
||||
assert_array_eq(reference, actual, size)
|
||||
|
||||
#define ASSERT_AVG_GREATER_COMPLEX(reference, actual, size, precision) \
|
||||
assert_avg_greater_complex(reference, actual, size, precision)
|
||||
|
||||
struct BenchmarkParameters
|
||||
{
|
||||
static long repetition;
|
||||
static long loop;
|
||||
static unsigned cpu_id;
|
||||
};
|
||||
|
||||
struct missing_config_file_exception : public std::exception
|
||||
{
|
||||
const char * what () const throw () override {
|
||||
return "JSON file cannot be opened!";
|
||||
}
|
||||
};
|
||||
|
||||
struct reading_input_file_exception : public std::exception
|
||||
{
|
||||
const char * what () const throw () override {
|
||||
return "Input file cannot be read!";
|
||||
}
|
||||
};
|
||||
|
||||
/*!
|
||||
\brief Attach current process to the selected core.
|
||||
\param [in] cpu Core number.
|
||||
\return 0 on success, -1 otherwise.
|
||||
*/
|
||||
int bind_to_cpu(const unsigned cpu);
|
||||
|
||||
/*!
|
||||
\brief Calculate the mean and variance from the result of the run_benchmark.
|
||||
\param [in] values Vector with result values.
|
||||
\return std::pair where the first element is mean and the second one is standard deviation.
|
||||
\note It's not a general mean/stddev function it only works properly when feed with data from
|
||||
the benchmark function.
|
||||
*/
|
||||
std::pair<double, double> calculate_statistics(const std::vector<long> values);
|
||||
|
||||
/*!
|
||||
\brief For a given number return sequence of number from 0 to number - 1.
|
||||
\param [in] number Positive integer value.
|
||||
\return Vector with the sorted integer numbers between 0 and number - 1.
|
||||
*/
|
||||
std::vector<unsigned> get_sequence(const unsigned number);
|
||||
|
||||
/*!
|
||||
\brief Read JSON from the given file.
|
||||
\param [in] filename name of the .json file.
|
||||
\return JSON object with data.
|
||||
\throws missing_config_file_exception when file cannot be opened.
|
||||
*/
|
||||
json read_json_from_file(const std::string &filename);
|
||||
|
||||
/*!
|
||||
\brief Read binary data from the file.
|
||||
\param [in] filename name of the binary file.
|
||||
\return Pointer to the allocated memory with data from the file.
|
||||
\throws std::runtime_error when memory cannot be allocated.
|
||||
*/
|
||||
//char* read_data_to_aligned_array(const std::string &filename);
|
||||
|
||||
/*!
|
||||
\brief Measure the TSC on the machine
|
||||
\return Number of ticks per us
|
||||
*/
|
||||
unsigned long tsc_recovery();
|
||||
|
||||
/*!
|
||||
\brief Return the current value of the TSC
|
||||
\return Current TSC value
|
||||
*/
|
||||
unsigned long tsc_tick();
|
||||
|
||||
/*!
|
||||
\class KernelTests
|
||||
|
||||
Each test class has to inherit from KernelTests class as it provides GTest support and does a lot
|
||||
of setup (including JSON) an provides useful methods to operate on loaded JSON file.
|
||||
Unfortunately GTest is limited in the way that all TEST_P within the class are called for all
|
||||
cases/parameters, but we usually want two different data sets for functional and performance
|
||||
tests (or maybe other types of tests). Because of that to use different data sets we need to
|
||||
create separate classes, hence performance and functional test are in separate classes. it adds
|
||||
an extra overhead, but adds much more flexibility. init_test(...) is used to select data set from
|
||||
the JSON file.
|
||||
|
||||
Important note on the JSON file structure. Top JSON object can have as many section (JSON
|
||||
objects) as needed, but each have to have a distinct name that is used by init_test. Then
|
||||
each section must contain an array of objects (test cases) where each object has a name,
|
||||
parameters and references. Everything inside parameters and references can be completely custom
|
||||
as it's loaded by get_input/reference_parameter function. JSON values can be either literal
|
||||
values, e.g. 1, 0.001, 5e-05, etc. or filename. Depends on the get type test framework can either
|
||||
read the value or load data from the file - and it happens automatically (*pff* MAGIC!).
|
||||
*/
|
||||
#if 0 //Ann: we don't need this test in OAI, so we comment out all GTest dependencies to include xran_lib_wrap.hpp
|
||||
class KernelTests : public testing::TestWithParam<unsigned>
|
||||
{
|
||||
public:
|
||||
static json conf;
|
||||
static std::string test_type;
|
||||
|
||||
static void SetUpTestCase()
|
||||
{
|
||||
test_type = "None";
|
||||
|
||||
try
|
||||
{
|
||||
conf = read_json_from_file("conf.json");
|
||||
}
|
||||
catch(missing_config_file_exception &e)
|
||||
{
|
||||
std::cout << "[----------] SetUpTestCase failed: " << e.what() << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
tsc = tsc_recovery();
|
||||
|
||||
if(!tsc)
|
||||
{
|
||||
std::cout << "[----------] SetUpTestCase failed: TSC recovery failed" << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
static void TearDownTestCase()
|
||||
{
|
||||
/* Free resources - nothing to free at the moment */
|
||||
}
|
||||
|
||||
static unsigned get_number_of_cases(const std::string &type)
|
||||
{
|
||||
try
|
||||
{
|
||||
json json_data = read_json_from_file("conf.json");
|
||||
|
||||
return json_data[type].size();
|
||||
}
|
||||
catch(missing_config_file_exception &e)
|
||||
{
|
||||
std::cout << "[----------] get_number_of_cases failed: " << e.what() << std::endl;
|
||||
|
||||
exit(-1);
|
||||
}
|
||||
catch(std::domain_error &e)
|
||||
{
|
||||
std::cout << "[----------] get_number_of_cases failed: " << e.what() << std::endl;
|
||||
std::cout << "[----------] Use a default value: 0" << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
double division_factor = 1.0;
|
||||
std::string result_units = "None";
|
||||
int parallelization_factor = 1;
|
||||
|
||||
/*!
|
||||
\brief Set division factor
|
||||
\param [in] factor Division factor that divides mean and standard deviation.
|
||||
*/
|
||||
void set_division_factor(const double factor)
|
||||
{
|
||||
division_factor = factor;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Set reults units
|
||||
\param [in] units Units that are displayed in the report.
|
||||
*/
|
||||
void set_results_units(const std::string &units)
|
||||
{
|
||||
result_units = units;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Set size of processed data
|
||||
\param [in] size Size of processed data used to calculate module throughput.
|
||||
*/
|
||||
void set_parallelization_factor(const int factor)
|
||||
{
|
||||
parallelization_factor = factor;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Run performance test case for a given function.
|
||||
\param [in] isa Used Instruction Set.
|
||||
\param [in] module_name name of the tested kernel.
|
||||
\param [in] function function to be tested.
|
||||
\param [in] args function's arguments.
|
||||
*/
|
||||
template <typename F, typename ... Args>
|
||||
void performance(const std::string &isa, const std::string &module_name, F function,
|
||||
Args ... args) {
|
||||
ASSERT_EQ(0, bind_to_cpu(BenchmarkParameters::cpu_id)) << "Failed to bind to cpu!";
|
||||
|
||||
const auto result = run_benchmark(function, args ...);
|
||||
const auto scaled_mean = result.first / division_factor / tsc;
|
||||
const auto scaled_stddev = result.second / division_factor / tsc;
|
||||
|
||||
print_and_store_results(isa, get_case_name(), module_name, get_case_name(), result_units,
|
||||
parallelization_factor, scaled_mean, scaled_stddev);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Print unique test description to the results xml file
|
||||
\param [in] isa Used Instruction Set.
|
||||
\param [in] module_name name of the tested kernel.
|
||||
\param [in] function function to be tested.
|
||||
*/
|
||||
void print_test_description(const std::string &isa, const std::string &module_name) {
|
||||
print_and_store_results(isa, get_case_name(), module_name, get_case_name(), result_units,
|
||||
parallelization_factor, 0, 0);
|
||||
}
|
||||
|
||||
//! @{
|
||||
/*!
|
||||
\brief Load selected data from a JSON object.
|
||||
get_input_parameter loads data from parameters section of the test case in JSON file and
|
||||
get_reference_parameter does the same thing for references section.
|
||||
|
||||
Get parameter function uses template type to figure out how to load parameters. If type
|
||||
is NOT a pointer it'll load value directly from the JSON. Otherwise path to the test
|
||||
vector is expected and function will allocate memory, load data from the binary file to
|
||||
this memory location and return pointer to it. For example in here we request to load
|
||||
pointer to float so llrs filed is expected to be
|
||||
a path to the binary file.
|
||||
*/
|
||||
template <typename T>
|
||||
T get_input_parameter(const std::string ¶meter_name)
|
||||
{
|
||||
try
|
||||
{
|
||||
return get_parameter<T>("parameters", parameter_name);
|
||||
}
|
||||
catch (std::domain_error &e)
|
||||
{
|
||||
std::cout << "[----------] get_input_parameter (" << parameter_name
|
||||
<< ") failed: " << e.what()
|
||||
<< ". Did you mispell the parameter name?" << std::endl;
|
||||
throw;
|
||||
}
|
||||
catch(reading_input_file_exception &e)
|
||||
{
|
||||
std::cout << "[----------] get_input_parameter (" << parameter_name
|
||||
<< ") failed: " << e.what() << std::endl;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T get_input_parameter(const std::string &subsection_name, const std::string ¶meter_name)
|
||||
{
|
||||
try
|
||||
{
|
||||
return get_parameter<T>("parameters", subsection_name, parameter_name);
|
||||
}
|
||||
catch (std::domain_error &e)
|
||||
{
|
||||
std::cout << "[----------] get_input_parameter (" << subsection_name << "." << parameter_name
|
||||
<< ") failed: " << e.what()
|
||||
<< ". Did you mispell the parameter name?" << std::endl;
|
||||
throw;
|
||||
}
|
||||
catch(reading_input_file_exception &e)
|
||||
{
|
||||
std::cout << "[----------] get_input_parameter (" << subsection_name << "." << parameter_name
|
||||
<< ") failed: " << e.what() << std::endl;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T get_input_parameter(const std::string &subsection_name, const int index, const std::string ¶meter_name)
|
||||
{
|
||||
try
|
||||
{
|
||||
return get_parameter<T>("parameters", subsection_name, index, parameter_name);
|
||||
}
|
||||
catch (std::domain_error &e)
|
||||
{
|
||||
std::cout << "[----------] get_input_parameter (" << subsection_name << "[" << index << "]." << parameter_name
|
||||
<< ") failed: " << e.what()
|
||||
<< ". Did you mispell the parameter name?" << std::endl;
|
||||
throw;
|
||||
}
|
||||
catch(reading_input_file_exception &e)
|
||||
{
|
||||
std::cout << "[----------] get_input_parameter (" << subsection_name << "[" << index << "]." << parameter_name
|
||||
<< ") failed: " << e.what() << std::endl;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
int get_input_parameter_size(const std::string &subsection_name, const std::string ¶meter_name)
|
||||
{
|
||||
try
|
||||
{
|
||||
auto array_size = conf[test_type][GetParam()]["parameters"][subsection_name][parameter_name].size();
|
||||
return (array_size);
|
||||
}
|
||||
catch (std::domain_error &e)
|
||||
{
|
||||
std::cout << "[----------] get_input_parameter_size (" << subsection_name << "." << parameter_name
|
||||
<< ") failed: " << e.what()
|
||||
<< ". Did you mispell the parameter name?" << std::endl;
|
||||
return (-1);
|
||||
}
|
||||
catch(reading_input_file_exception &e)
|
||||
{
|
||||
std::cout << "[----------] get_input_parameter_size (" << subsection_name << "." << parameter_name
|
||||
<< ") failed: " << e.what() << std::endl;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
int get_input_subsection_size(const std::string &subsection_name)
|
||||
{
|
||||
try
|
||||
{
|
||||
auto array_size = conf[test_type][GetParam()]["parameters"][subsection_name].size();
|
||||
return (array_size);
|
||||
}
|
||||
catch (std::domain_error &e)
|
||||
{
|
||||
std::cout << "[----------] get_input_subsection_size (" << subsection_name
|
||||
<< ") failed: " << e.what()
|
||||
<< ". Did you mispell the subsection name?" << std::endl;
|
||||
return (-1);
|
||||
}
|
||||
catch(reading_input_file_exception &e)
|
||||
{
|
||||
std::cout << "[----------] get_input_subsection_size (" << subsection_name
|
||||
<< ") failed: " << e.what() << std::endl;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T get_reference_parameter(const std::string ¶meter_name)
|
||||
{
|
||||
try
|
||||
{
|
||||
return get_parameter<T>("references", parameter_name);
|
||||
}
|
||||
catch (std::domain_error &e)
|
||||
{
|
||||
std::cout << "[----------] get_reference_parameter (" << parameter_name
|
||||
<< ") failed: " << e.what()
|
||||
<< ". Did you mispell the parameter name?" << std::endl;
|
||||
throw;
|
||||
}
|
||||
catch(reading_input_file_exception &e)
|
||||
{
|
||||
std::cout << "[----------] get_reference_parameter (" << parameter_name
|
||||
<< ") failed: " << e.what() << std::endl;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
//! @}
|
||||
|
||||
/*!
|
||||
\brief Get name of the test case from JSON file.
|
||||
\return Test'ss case name or a default name if name field is missing.
|
||||
*/
|
||||
const std::string get_case_name()
|
||||
{
|
||||
try
|
||||
{
|
||||
return conf[test_type][GetParam()]["name"];
|
||||
}
|
||||
catch (std::domain_error &e)
|
||||
{
|
||||
std::cout << "[----------] get_case_name failed: " << e.what()
|
||||
<< ". Did you specify a test name in JSON?" << std::endl;
|
||||
std::cout << "[----------] Using a default name instead" << std::endl;
|
||||
|
||||
return "Default test name";
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Defines section in the conf.json that is used to load parameters from.
|
||||
\param [in] type Name of the section in the JSON file.
|
||||
*/
|
||||
void init_test(const std::string &type)
|
||||
{
|
||||
test_type = type;
|
||||
const std::string name = get_case_name();
|
||||
std::cout << "[----------] Test case: " << name << std::endl;
|
||||
}
|
||||
|
||||
private:
|
||||
static unsigned long tsc;
|
||||
|
||||
template<typename T>
|
||||
struct data_reader {
|
||||
static T read_parameter(const int index, const std::string &type,
|
||||
const std::string ¶meter_name)
|
||||
{
|
||||
return conf[test_type][index][type][parameter_name];
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct data_reader<std::vector<T>> {
|
||||
static std::vector<T> read_parameter(const int index, const std::string &type,
|
||||
const std::string ¶meter_name)
|
||||
{
|
||||
auto array_size = conf[test_type][index][type][parameter_name].size();
|
||||
|
||||
std::vector<T> result(array_size);
|
||||
|
||||
for(unsigned number = 0; number < array_size; number++)
|
||||
result.at(number) = conf[test_type][index][type][parameter_name][number];
|
||||
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct data_reader<T*> {
|
||||
static T* read_parameter(const int index, const std::string &type,
|
||||
const std::string ¶meter_name)
|
||||
{
|
||||
return (T*) read_data_to_aligned_array(conf[test_type][index][type][parameter_name]);
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
T get_parameter(const std::string &type, const std::string ¶meter_name)
|
||||
{
|
||||
return data_reader<T>::read_parameter(GetParam(), type, parameter_name);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
struct data_reader2 {
|
||||
static T read_parameter(const int index, const std::string &type,
|
||||
const std::string &subsection_name,
|
||||
const std::string ¶meter_name)
|
||||
{
|
||||
return conf[test_type][index][type][subsection_name][parameter_name];
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct data_reader2<std::vector<T>> {
|
||||
static std::vector<T> read_parameter(const int index, const std::string &type,
|
||||
const std::string &subsection_name,
|
||||
const std::string ¶meter_name)
|
||||
{
|
||||
auto array_size = conf[test_type][index][type][subsection_name][parameter_name].size();
|
||||
|
||||
std::vector<T> result(array_size);
|
||||
|
||||
for(unsigned number = 0; number < array_size; number++)
|
||||
result.at(number) = conf[test_type][index][type][subsection_name][parameter_name][number];
|
||||
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct data_reader2<T*> {
|
||||
static T* read_parameter(const int index, const std::string &type,
|
||||
const std::string &subsection_name,
|
||||
const std::string ¶meter_name)
|
||||
{
|
||||
return (T*) read_data_to_aligned_array(conf[test_type][index][type][subsection_name][parameter_name]);
|
||||
}
|
||||
};
|
||||
template <typename T>
|
||||
T get_parameter(const std::string &type, const std::string &subsection_name, const std::string ¶meter_name)
|
||||
{
|
||||
return data_reader2<T>::read_parameter(GetParam(), type, subsection_name, parameter_name);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
struct data_reader3 {
|
||||
static T read_parameter(const int index, const std::string &type,
|
||||
const std::string &subsection_name,
|
||||
const int subindex,
|
||||
const std::string ¶meter_name)
|
||||
{
|
||||
return conf[test_type][index][type][subsection_name][subindex][parameter_name];
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct data_reader3<std::vector<T>> {
|
||||
static std::vector<T> read_parameter(const int index, const std::string &type,
|
||||
const std::string &subsection_name,
|
||||
const int subindex,
|
||||
const std::string ¶meter_name)
|
||||
{
|
||||
auto array_size = conf[test_type][index][type][subsection_name][subindex][parameter_name].size();
|
||||
|
||||
std::vector<T> result(array_size);
|
||||
|
||||
for(unsigned number = 0; number < array_size; number++)
|
||||
result.at(number) = conf[test_type][index][type][subsection_name][subindex][parameter_name][number];
|
||||
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct data_reader3<T*> {
|
||||
static T* read_parameter(const int index, const std::string &type,
|
||||
const std::string &subsection_name,
|
||||
const int subindex,
|
||||
const std::string ¶meter_name)
|
||||
{
|
||||
return (T*) read_data_to_aligned_array(conf[test_type][index][type][subsection_name][subindex][parameter_name]);
|
||||
}
|
||||
};
|
||||
template <typename T>
|
||||
T get_parameter(const std::string &type, const std::string &subsection_name, const int subindex, const std::string ¶meter_name)
|
||||
{
|
||||
return data_reader3<T>::read_parameter(GetParam(), type, subsection_name, subindex, parameter_name);
|
||||
}
|
||||
|
||||
void print_and_store_results(const std::string &isa,
|
||||
const std::string ¶meters,
|
||||
const std::string &module_name,
|
||||
const std::string &test_name,
|
||||
const std::string &unit,
|
||||
const int para_factor,
|
||||
const double mean,
|
||||
const double stddev);
|
||||
};
|
||||
|
||||
/*!
|
||||
\brief Run the given function and return the mean run time and stddev.
|
||||
\param [in] function Function to benchmark.
|
||||
\param [in] args Function's arguments.
|
||||
\return std::pair where the first element is mean and the second one is standard deviation.
|
||||
*/
|
||||
template <typename F, typename ... Args>
|
||||
std::pair<double, double> run_benchmark(F function, Args ... args)
|
||||
{
|
||||
std::vector<long> results((unsigned long) BenchmarkParameters::repetition);
|
||||
|
||||
for(unsigned int outer_loop = 0; outer_loop < BenchmarkParameters::repetition; outer_loop++) {
|
||||
const auto start_time = __rdtsc();
|
||||
for (unsigned int inner_loop = 0; inner_loop < BenchmarkParameters::loop; inner_loop++) {
|
||||
function(args ...);
|
||||
}
|
||||
const auto end_time = __rdtsc();
|
||||
results.push_back(end_time - start_time);
|
||||
}
|
||||
|
||||
return calculate_statistics(results);
|
||||
};
|
||||
|
||||
/*!
|
||||
\brief Assert elements of two arrays. It calls ASSERT_EQ for each element of the array.
|
||||
\param [in] reference Array with reference values.
|
||||
\param [in] actual Array with the actual output.
|
||||
\param [in] size Size of the array.
|
||||
*/
|
||||
template <typename T>
|
||||
void assert_array_eq(const T* reference, const T* actual, const int size)
|
||||
{
|
||||
for(int index = 0; index < size ; index++)
|
||||
{
|
||||
ASSERT_EQ(reference[index], actual[index])
|
||||
<<"The wrong number is index: "<< index;
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Assert elements of two arrays. It calls ASSERT_NEAR for each element of the array.
|
||||
\param [in] reference Array with reference values.
|
||||
\param [in] actual Array with the actual output.
|
||||
\param [in] size Size of the array.
|
||||
\param [in] precision Precision fo the comparision used by ASSERT_NEAR.
|
||||
*/
|
||||
template <typename T>
|
||||
void assert_array_near(const T* reference, const T* actual, const int size, const double precision)
|
||||
{
|
||||
for(int index = 0; index < size ; index++)
|
||||
{
|
||||
ASSERT_NEAR(reference[index], actual[index], precision)
|
||||
<<"The wrong number is index: "<< index;
|
||||
}
|
||||
}
|
||||
|
||||
template <>
|
||||
void assert_array_near<complex_float>(const complex_float* reference, const complex_float* actual, const int size, const double precision)
|
||||
{
|
||||
for(int index = 0; index < size ; index++)
|
||||
{
|
||||
ASSERT_NEAR(reference[index].re, actual[index].re, precision)
|
||||
<<"The wrong number is RE, index: "<< index;
|
||||
ASSERT_NEAR(reference[index].im, actual[index].im, precision)
|
||||
<<"The wrong number is IM, index: "<< index;
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Assert average diff of two arrays. It calls ASSERT_GT to check the average.
|
||||
\param [in] reference Array with reference values, interleaved IQ inputs.
|
||||
\param [in] actual Array with the actual output, interleaved IQ inputs.
|
||||
\param [in] size Size of the array, based on complex inputs.
|
||||
\param [in] precision Precision for the comparison used by ASSERT_GT.
|
||||
*/
|
||||
template<typename T>
|
||||
void assert_avg_greater_complex(const T* reference, const T* actual, const int size, const double precision)
|
||||
{
|
||||
float mseDB, MSE;
|
||||
double avgMSEDB = 0.0;
|
||||
for (int index = 0; index < size; index++) {
|
||||
T refReal = reference[2*index];
|
||||
T refImag = reference[(2*index)+1];
|
||||
T resReal = actual[2*index];
|
||||
T resImag = actual[(2*index)+1];
|
||||
|
||||
T errReal = resReal - refReal;
|
||||
T errIm = resImag - refImag;
|
||||
|
||||
For some unit tests, e.g. PUCCH deomdulation, the expected output is 0. To avoid a
|
||||
divide by zero error, check the reference results to determine if the expected result
|
||||
is 0 and, if so, add a 1 to the division.
|
||||
if (refReal == 0 && refImag == 0)
|
||||
MSE = (float)(errReal*errReal + errIm*errIm)/(float)(refReal*refReal + refImag*refImag + 1);
|
||||
else
|
||||
MSE = (float)(errReal*errReal + errIm*errIm)/(float)(refReal*refReal + refImag*refImag);
|
||||
|
||||
if(MSE == 0)
|
||||
mseDB = (float)(-100.0);
|
||||
else
|
||||
mseDB = (float)(10.0) * (float)log10(MSE);
|
||||
|
||||
avgMSEDB += (double)mseDB;
|
||||
}
|
||||
|
||||
avgMSEDB /= size;
|
||||
|
||||
ASSERT_GT(precision, avgMSEDB);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Allocates memory of the given size.
|
||||
|
||||
aligned_malloc is wrapper to functions that allocate memory:
|
||||
'rte_malloc' from DPDK if hugepages are defined, 'memalign' otherwise.
|
||||
Size is defined as a number of variables of given type e.g. floats, rather than bytes.
|
||||
It hides sizeof(T) multiplication and cast hence makes things cleaner.
|
||||
|
||||
\param [in] size Size of the memory to allocate.
|
||||
\param [in] alignment Bytes alignment of the allocated memory. If 0, the return is a pointer
|
||||
that is suitably aligned for any kind of variable (in the same manner as malloc()).
|
||||
Otherwise, the return is a pointer that is a multiple of align. In this case,
|
||||
it must be a power of two. (Minimum alignment is the cacheline size, i.e. 64-bytes)
|
||||
\return Pointer to the allocated memory.
|
||||
*/
|
||||
template <typename T>
|
||||
T* aligned_malloc(const int size, const unsigned alignment)
|
||||
{
|
||||
#ifdef _BBLIB_DPDK_
|
||||
return (T*) rte_malloc(NULL, sizeof(T) * size, alignment);
|
||||
#else
|
||||
#ifndef _WIN64
|
||||
return (T*) memalign(alignment, sizeof(T) * size);
|
||||
#else
|
||||
return (T*)_aligned_malloc(sizeof(T)*size, alignment);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Frees memory pointed by the given pointer.
|
||||
|
||||
aligned_free is a wrapper for functions that free memory allocated by
|
||||
aligned_malloc: 'rte_free' from DPDK if hugepages are defined and 'free' otherwise.
|
||||
|
||||
\param [in] ptr Pointer to the allocated memory.
|
||||
*/
|
||||
template <typename T>
|
||||
void aligned_free(T* ptr)
|
||||
{
|
||||
#ifdef _BBLIB_DPDK_
|
||||
rte_free((void*)ptr);
|
||||
#else
|
||||
|
||||
#ifndef _WIN64
|
||||
free((void*)ptr);
|
||||
#else
|
||||
_aligned_free((void *)ptr);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief generate random numbers.
|
||||
|
||||
It allocates memory and populate it with random numbers using C++11 default engine and
|
||||
uniform real / int distribution (where lo_range <= x <up_range). Don't forget to free
|
||||
allocated memory!
|
||||
|
||||
\param [in] size Size of the memory to be filled with random data.
|
||||
\param [in] alignment Bytes alignment of the memory.
|
||||
\param [in] distribution Distribuiton for random generator.
|
||||
\return Pointer to the allocated memory with random data.
|
||||
*/
|
||||
template <typename T, typename U>
|
||||
T* generate_random_numbers(const long size, const unsigned alignment, U& distribution)
|
||||
{
|
||||
auto array = (T*) aligned_malloc<char>(size * sizeof(T), alignment);
|
||||
|
||||
std::random_device random_device;
|
||||
std::default_random_engine generator(random_device());
|
||||
|
||||
for(long i = 0; i < size; i++)
|
||||
array[i] = (T)distribution(generator);
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief generate random data.
|
||||
|
||||
It allocates memory and populate it with random data using C++11 default engine and
|
||||
uniform integer distribution (bytes not floats are uniformly distributed). Don't forget
|
||||
to free allocated memory!
|
||||
|
||||
\param [in] size Size of the memory to be filled with random data.
|
||||
\param [in] alignment Bytes alignment of the memory.
|
||||
\return Pointer to the allocated memory with random data.
|
||||
*/
|
||||
template <typename T>
|
||||
T* generate_random_data(const long size, const unsigned alignment)
|
||||
{
|
||||
std::uniform_int_distribution<> random(0, 255);
|
||||
|
||||
return (T*)generate_random_numbers<char, std::uniform_int_distribution<>>(size * sizeof(T), alignment, random);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief generate integer random numbers.
|
||||
|
||||
It allocates memory and populate it with random numbers using C++11 default engine and
|
||||
uniform integer distribution (where lo_range <= x < up_range). Don't forget
|
||||
to free allocated memory! The result type generated by the generator should be one of
|
||||
int types.
|
||||
|
||||
\param [in] size Size of the memory to be filled with random data.
|
||||
\param [in] alignment Bytes alignment of the memory.
|
||||
\param [in] lo_range Lower bound of range of values returned by random generator.
|
||||
\param [in] up_range Upper bound of range of values returned by random generator.
|
||||
\return Pointer to the allocated memory with random data.
|
||||
*/
|
||||
template <typename T>
|
||||
T* generate_random_int_numbers(const long size, const unsigned alignment, const T lo_range,
|
||||
const T up_range)
|
||||
{
|
||||
std::uniform_int_distribution<T> random(lo_range, up_range);
|
||||
|
||||
return generate_random_numbers<T, std::uniform_int_distribution<T>>(size, alignment, random);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief generate real random numbers.
|
||||
|
||||
It allocates memory and populate it with random numbers using C++11 default engine and
|
||||
uniform real distribution (where lo_range <= x <up_range). Don't forget to free
|
||||
allocated memory! The result type generated by the generator should be one of
|
||||
real types: float, double or long double.
|
||||
|
||||
\param [in] size Size of the memory to be filled with random data.
|
||||
\param [in] alignment Bytes alignment of the memory.
|
||||
\param [in] lo_range Lower bound of range of values returned by random generator.
|
||||
\param [in] up_range Upper bound of range of values returned by random generator.
|
||||
\return Pointer to the allocated memory with random data.
|
||||
*/
|
||||
template <typename T>
|
||||
T* generate_random_real_numbers(const long size, const unsigned alignment, const T lo_range,
|
||||
const T up_range)
|
||||
{
|
||||
std::uniform_real_distribution<T> distribution(lo_range, up_range);
|
||||
|
||||
return generate_random_numbers<T, std::uniform_real_distribution<T>>(size, alignment, distribution);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //XRANLIB_COMMON_HPP
|
||||
123
targets/ARCH/ORAN_FHI/lib/common_typedef_xran.h
Normal file
@@ -0,0 +1,123 @@
|
||||
/*******************************************************************************
|
||||
*
|
||||
* <COPYRIGHT_TAG>
|
||||
*
|
||||
*******************************************************************************/
|
||||
/*! \file common_typedef_xran.h
|
||||
\brief This header file defines those data type both used by eNB and UE.
|
||||
*/
|
||||
|
||||
#ifndef _COMMON_TYPEDEF_XRAN_H_
|
||||
#define _COMMON_TYPEDEF_XRAN_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
/*!
|
||||
\struct COMPLEX32
|
||||
\brief Defines 64-bit complex structure; both real part and image part have 32 bit width.
|
||||
*/
|
||||
typedef struct {
|
||||
float re; /*!< 32-bit real part */
|
||||
float im; /*!< 32-bit image part */
|
||||
} COMPLEX32;
|
||||
|
||||
//! @{
|
||||
/*!
|
||||
\struct complex_int16_t
|
||||
\brief Defines 32-bit complex structure; both real part and image part have 16 bit width.
|
||||
\brief Same defines as COMPLEX16
|
||||
*/
|
||||
typedef struct {
|
||||
int16_t re; /*!< 16-bit real part */
|
||||
int16_t im; /*!< 16-bit image part */
|
||||
}complex_int16_t,COMPLEX16;
|
||||
//! @}
|
||||
|
||||
/*!
|
||||
\struct complex_int32_t
|
||||
\brief Defines 64-bit complex structure; both real part and image part have 32 bit width.
|
||||
*/
|
||||
typedef struct {
|
||||
int32_t re; /*!< 32-bit real part */
|
||||
int32_t im; /*!< 32-bit image part */
|
||||
}complex_int32_t;
|
||||
|
||||
/*!
|
||||
\struct complex_float
|
||||
\brief Defines 64-bit complex structure; both real part and image part have 32 bit width.
|
||||
*/
|
||||
typedef struct {
|
||||
float re; /*!< 32-bit real part */
|
||||
float im; /*!< 32-bit image part */
|
||||
}complex_float;
|
||||
|
||||
/*!
|
||||
\struct complex_double
|
||||
\brief Defines 128-bit complex structure; both real part and image part have 64 bit width.
|
||||
*/
|
||||
typedef struct {
|
||||
double re; /*!< 64-bit real part */
|
||||
double im; /*!< 64-bit image part */
|
||||
}complex_double;
|
||||
|
||||
/*!
|
||||
\typedef half
|
||||
\brief half is a 16-bit IEEE floating-point standard number format.
|
||||
\note In future this will be known as `short float' or `__fp16'.
|
||||
\note Older compilers must provide proxy support for it as a plain 16-bit integer
|
||||
*/
|
||||
typedef int16_t half;
|
||||
|
||||
/*!
|
||||
\struct complex_half
|
||||
\brief Defines 32-bit complex structure; both real part and image part have 16 bit width.
|
||||
*/
|
||||
typedef struct {
|
||||
half re; /*!< 16-bit real part */
|
||||
half im; /*!< 16-bit image part */
|
||||
}complex_half;
|
||||
|
||||
/*!
|
||||
\enum instruction_cpu_support
|
||||
\brief Define instruction the CPU can support.
|
||||
*/
|
||||
typedef enum{
|
||||
CPU_GENERIC, /*!< C */
|
||||
SSE4_2, /*!< SSE4_2 */
|
||||
AVX, /*!< AVX */
|
||||
AVX2, /*!< AVX2 */
|
||||
AVX_512, /*!< AVX512 */
|
||||
}instruction_cpu_support;
|
||||
|
||||
/*!
|
||||
\enum bblib_modulation_order
|
||||
\brief Common enums for modulation order.
|
||||
*/
|
||||
enum bblib_modulation_order {
|
||||
BBLIB_BPSK = 1, /*!< BPSK */
|
||||
BBLIB_QPSK = 2, /*!< QPSK */
|
||||
BBLIB_PAM4 = 3, /*!< PAM4 */
|
||||
BBLIB_QAM16 = 4, /*!< QAM16 */
|
||||
BBLIB_PAM8 = 5, /*!< PAM8 */
|
||||
BBLIB_QAM64 = 6, /*!< QAM64 */
|
||||
BBLIB_PAM16 = 7, /*!< PAM16 */
|
||||
BBLIB_QAM256 = 8 /*!< QAM256 */
|
||||
};
|
||||
|
||||
|
||||
#ifdef _WIN64
|
||||
#define __align(x) __declspec(align(x))
|
||||
#else
|
||||
#define __align(x) __attribute__((aligned(x)))
|
||||
#define _aligned_malloc(x,y) memalign(y,x)
|
||||
#endif
|
||||
|
||||
/* Test time and loops for unit test */
|
||||
#define TIME 40
|
||||
#define LOOP 30
|
||||
|
||||
#endif /* #ifndef _COMMON_TYPEDEF_H_ */
|
||||
|
||||
148
targets/ARCH/ORAN_FHI/lib/config.h
Normal file
@@ -0,0 +1,148 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2020 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* @file
|
||||
* @ingroup
|
||||
* @author Intel Corporation
|
||||
**/
|
||||
|
||||
#ifndef _SAMPLEAPP__CONFIG_H_
|
||||
#define _SAMPLEAPP__CONFIG_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include <rte_ether.h>
|
||||
#include "xran_fh_o_du.h"
|
||||
|
||||
/** Run time configuration of application */
|
||||
typedef struct _RuntimeConfig
|
||||
{
|
||||
uint8_t appMode; /**< Application mode: lls-CU or RU */
|
||||
uint8_t xranTech; /**< Radio Access Technology (NR or LTE) */
|
||||
uint8_t xranCat; /**< xran mode: NR Categoty A, NR Category B, LTE Cat A, LTE Cat B */
|
||||
uint8_t numCC; /**< Number of CC per ports supported by RU */
|
||||
uint8_t numAxc; /**< Number of Antenna Carriers per CC */
|
||||
uint8_t numUlAxc; /**< Number of Antenna Carriers per CC for UL (Cat B) */
|
||||
uint32_t antElmTRx; /**< Number of antenna elements for TX and RX */
|
||||
uint32_t muMimoUEs; /**< Number of UEs (with 1 RX ant)/beams */
|
||||
|
||||
uint32_t DlLayersPerUe; /**< Number of DL layer per UE */
|
||||
uint32_t UlLayersPerUe; /**< Number of UL layer per UE */
|
||||
|
||||
uint32_t ttiPeriod; /**< TTI period */
|
||||
uint32_t testVect; /**< Test Signal to send */
|
||||
struct rte_ether_addr o_du_addr[XRAN_VF_MAX]; /**< O-DU Ethernet Mac Address */
|
||||
struct rte_ether_addr o_ru_addr[XRAN_VF_MAX]; /**< O-RU Ethernet Mac Address */
|
||||
struct rte_ether_addr tmp_addr; /**< Temp Ethernet Mac Address */
|
||||
|
||||
uint32_t instance_id; /**< Instance ID of application */
|
||||
uint32_t io_core; /**< Core used for IO */
|
||||
uint64_t io_worker; /**< Mask for worker cores */
|
||||
int32_t io_sleep; /**< enable sleep on PMD cores */
|
||||
uint32_t system_core; /* house keeping core */
|
||||
int iova_mode; /**< DPDK IOVA Mode */
|
||||
|
||||
uint32_t mtu; /**< maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single
|
||||
xRAN network layer transaction. supported 1500 bytes and 9600 bytes (Jumbo Frame) */
|
||||
int numSlots; /**< number of slots in IQ vector */
|
||||
char ant_file[XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR][512]; /**< file to use for test vector */
|
||||
char prach_file[XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR][512]; /**< file to use for test vector */
|
||||
|
||||
char dl_bfw_file [XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR][512]; /**< file with beamforming weights for DL streams */
|
||||
char ul_bfw_file [XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR][512]; /**< file with beamforming weights for UL streams */
|
||||
|
||||
char ul_srs_file [XRAN_MAX_SECTOR_NR*XRAN_MAX_ANT_ARRAY_ELM_NR][512]; /**< file with SRS content for UL antenna elements */
|
||||
|
||||
/* prach config */
|
||||
uint8_t enablePrach; /**< enable PRACH */
|
||||
uint8_t prachOffset; /**< Sets the PRACH position in frequency / subcarrier position, n_PRBoffset^RA and is expressed as a physical resource block number.
|
||||
Set by SIB2, prach-FreqOffset in E-UTRA. */
|
||||
|
||||
uint8_t prachConfigIndex;/**< TS36.211 - Table 5.7.1-2 : PRACH Configuration Index */
|
||||
uint8_t iqswap; /**< do swap of IQ before send to ETH */
|
||||
uint8_t nebyteorderswap; /**< do swap of byte order from host byte order to network byte order. ETH */
|
||||
uint8_t compression; /**< enable use case with compression */
|
||||
uint8_t CompHdrType; /**< dynamic or static compression header */
|
||||
|
||||
uint16_t totalBfWeights; /**< The total number of beamforming weights on RU */
|
||||
|
||||
uint8_t enableSrs; /**< enable SRS (valid for Cat B only) */
|
||||
uint16_t srsSymMask; /**< SRS symbol mask [014] within S/U slot [0-13] def is 13 */
|
||||
|
||||
uint16_t maxFrameId; /**< max value of frame id */
|
||||
|
||||
uint16_t Tadv_cp_dl;
|
||||
uint16_t T2a_min_cp_dl;
|
||||
uint16_t T2a_max_cp_dl;
|
||||
uint16_t T2a_min_cp_ul;
|
||||
uint16_t T2a_max_cp_ul;
|
||||
uint16_t T2a_min_up;
|
||||
uint16_t T2a_max_up;
|
||||
uint16_t Ta3_min;
|
||||
uint16_t Ta3_max;
|
||||
uint16_t T1a_min_cp_dl;
|
||||
uint16_t T1a_max_cp_dl;
|
||||
uint16_t T1a_min_cp_ul;
|
||||
uint16_t T1a_max_cp_ul;
|
||||
uint16_t T1a_min_up;
|
||||
uint16_t T1a_max_up;
|
||||
uint16_t Ta4_min;
|
||||
uint16_t Ta4_max;
|
||||
|
||||
uint8_t enableCP; /**< enable C-plane */
|
||||
uint8_t cp_vlan_tag; /**< C-plane vlan tag */
|
||||
uint8_t up_vlan_tag; /**< U-plane vlan tag */
|
||||
|
||||
int32_t debugStop;
|
||||
int32_t debugStopCount;
|
||||
int32_t bbdevMode;
|
||||
int32_t DynamicSectionEna;
|
||||
int32_t GPS_Alpha;
|
||||
int32_t GPS_Beta;
|
||||
|
||||
uint8_t mu_number; /**< Mu numner as per 3GPP */
|
||||
uint32_t nDLAbsFrePointA; /**< Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 */
|
||||
uint32_t nULAbsFrePointA; /**< Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000 */
|
||||
uint32_t nDLBandwidth; /**< Carrier bandwidth for in MHz. Value: 5->400 */
|
||||
uint32_t nULBandwidth; /**< Carrier bandwidth for in MHz. Value: 5->400 */
|
||||
uint32_t nDLFftSize; /**< DL FFT size */
|
||||
uint32_t nULFftSize; /**< UL FFT size */
|
||||
|
||||
|
||||
uint8_t nFrameDuplexType;
|
||||
uint8_t nTddPeriod;
|
||||
struct xran_slot_config sSlotConfig[XRAN_MAX_TDD_PERIODICITY];
|
||||
struct xran_prb_map PrbMapDl;
|
||||
struct xran_prb_map PrbMapUl;
|
||||
|
||||
int32_t DU_Port_ID_bitwidth;
|
||||
int32_t BandSector_ID_bitwidth;
|
||||
int32_t CC_ID_bitwidth;
|
||||
int32_t RU_Port_ID_bitwidth;
|
||||
|
||||
} RuntimeConfig;
|
||||
|
||||
/**
|
||||
* Parse application configuration file.
|
||||
*
|
||||
* @param filename The name of the configuration file to be parsed.
|
||||
* @param config The configuration structure to be filled with parsed data. */
|
||||
int parseConfigFile(char *filename, RuntimeConfig *config);
|
||||
|
||||
#endif /* _SAMPLEAPP__CONFIG_H_ */
|
||||
81
targets/ARCH/ORAN_FHI/lib/debug_oran.h
Normal file
@@ -0,0 +1,81 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2020 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* @file
|
||||
* @ingroup
|
||||
* @author Intel Corporation
|
||||
**/
|
||||
|
||||
#ifndef _SAMPLEAPP__DEBUG_H_
|
||||
#define _SAMPLEAPP__DEBUG_H_
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#define MAX_FILE_NAME_LEN (512)
|
||||
#define MAX_PATH_NAME_LEN (1024)
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define log_dbg(fmt, ...) \
|
||||
fprintf(stderr, \
|
||||
"DEBUG: %s(%d): " fmt "\n", \
|
||||
__FILE__, \
|
||||
__LINE__, ##__VA_ARGS__)
|
||||
#else
|
||||
#define log_dbg(fmt, ...)
|
||||
#endif
|
||||
|
||||
#if defined(_DEBUG) || defined(_VERBOSE)
|
||||
#define log_wrn(fmt, ...) \
|
||||
fprintf( \
|
||||
stderr, \
|
||||
"WARNING: %s(%d): " fmt "\n", \
|
||||
__FILE__, \
|
||||
__LINE__, ##__VA_ARGS__)
|
||||
#else
|
||||
#define log_dbg(fmt, ...)
|
||||
#define log_wrn(fmt, ...)
|
||||
#endif
|
||||
|
||||
|
||||
#define log_err(fmt, ...) \
|
||||
fprintf(stderr, \
|
||||
"ERROR: %s(%d): " fmt "\n", \
|
||||
__FILE__, \
|
||||
__LINE__, ##__VA_ARGS__)
|
||||
|
||||
|
||||
inline void ShowData(void* ptr, unsigned int size)
|
||||
{
|
||||
uint8_t *d = (uint8_t *)ptr;
|
||||
unsigned int i;
|
||||
|
||||
for(i = 0; i < size; i++)
|
||||
{
|
||||
if ( !(i & 0xf) )
|
||||
printf("\n");
|
||||
printf("%02x ", d[i]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
|
||||
#endif /* _SAMPLEAPP__DEBUG_H_ */
|
||||
140
targets/ARCH/ORAN_FHI/lib/ethdi.h
Normal file
@@ -0,0 +1,140 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2019 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This file has all definitions for the Ethernet Data Interface Layer
|
||||
* @file ethdi.h
|
||||
* @ingroup group_lte_source_auxlib
|
||||
* @author Intel Corporation
|
||||
**/
|
||||
|
||||
|
||||
#ifndef _ETHDI_H_
|
||||
#define _ETHDI_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <rte_config.h>
|
||||
#include <rte_mbuf.h>
|
||||
#include <rte_timer.h>
|
||||
|
||||
/* comment this to enable PDUMP
|
||||
* DPDK has to be compiled with
|
||||
* CONFIG_RTE_LIBRTE_PMD_PCAP=y
|
||||
* CONFIG_RTE_LIBRTE_PDUMP=y
|
||||
*/
|
||||
#undef RTE_LIBRTE_PDUMP
|
||||
|
||||
#ifdef RTE_LIBRTE_PDUMP
|
||||
#include <rte_pdump.h>
|
||||
#endif
|
||||
|
||||
#include "ethernet.h"
|
||||
#include "xran_fh_o_du.h"
|
||||
|
||||
#define XRAN_THREAD_DEFAULT_PRIO (98)
|
||||
|
||||
/* If we're not receiving packets for more then this threshold... */
|
||||
//#define SLEEP_THRESHOLD (rte_get_tsc_hz() / 30) /* = 33.3(3)ms */
|
||||
/* we go to sleep for this long (usleep). Undef SLEEP_TRESHOLD to disable. */
|
||||
#define SLEEP_TIME 200 /* (us) */
|
||||
#define BCAST {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
|
||||
|
||||
#define TX_TIMER_INTERVAL ((rte_get_timer_hz() / 1000000000L)*interval_us*1000) /* nanosec */
|
||||
#define TX_RX_LOOP_TIME rte_get_timer_hz() / 1
|
||||
|
||||
/* CAUTION: Keep in sync with the string table below. */
|
||||
enum xran_entities_id
|
||||
{
|
||||
ID_O_DU,
|
||||
ID_O_RU,
|
||||
ID_BROADCAST,
|
||||
ID_MAX
|
||||
};
|
||||
|
||||
static char *const entity_names[] = {
|
||||
"ORAN O-DU sim app",
|
||||
"ORAN O-RU sim app",
|
||||
};
|
||||
|
||||
typedef int (*PROCESS_CB)(void * arg);
|
||||
|
||||
/**
|
||||
* Structure storing internal configuration of workers
|
||||
*/
|
||||
struct xran_worker_config {
|
||||
lcore_function_t *f;
|
||||
void *arg;
|
||||
int32_t state;
|
||||
};
|
||||
|
||||
struct xran_ethdi_ctx
|
||||
{
|
||||
struct xran_io_cfg io_cfg;
|
||||
struct rte_ether_addr entities[XRAN_VF_MAX][ID_BROADCAST + 1];
|
||||
|
||||
struct rte_ring *tx_ring[XRAN_VF_MAX];
|
||||
struct rte_ring *rx_ring[XRAN_VF_MAX];
|
||||
struct rte_ring *pkt_dump_ring[XRAN_VF_MAX];
|
||||
struct rte_timer timer_autodetect;
|
||||
struct rte_timer timer_ping;
|
||||
struct rte_timer timer_sync;
|
||||
struct rte_timer timer_tx;
|
||||
|
||||
struct xran_worker_config pkt_wrk_cfg[RTE_MAX_LCORE];
|
||||
|
||||
unsigned pkt_stats[PKT_LAST + 1];
|
||||
};
|
||||
|
||||
enum {
|
||||
MBUF_KEEP,
|
||||
MBUF_FREE
|
||||
};
|
||||
|
||||
extern enum xran_if_state xran_if_current_state;
|
||||
|
||||
static inline struct xran_ethdi_ctx *xran_ethdi_get_ctx(void)
|
||||
{
|
||||
extern struct xran_ethdi_ctx g_ethdi_ctx;
|
||||
|
||||
return &g_ethdi_ctx;
|
||||
}
|
||||
typedef int (*xran_ethdi_handler)(struct rte_mbuf *, int sender, uint64_t rx_time);
|
||||
|
||||
typedef int (*ethertype_handler)(struct rte_mbuf *, uint64_t rx_time);
|
||||
typedef int (*xran_ethdi_handler)(struct rte_mbuf *, int sender, uint64_t rx_time);
|
||||
|
||||
int xran_register_ethertype_handler(uint16_t ethertype, ethertype_handler callback);
|
||||
|
||||
int32_t xran_ethdi_init_dpdk_io(char *name, const struct xran_io_cfg *io_cfg,
|
||||
int *lcore_id, struct rte_ether_addr *p_o_du_addr,
|
||||
struct rte_ether_addr *p_ru_addr);
|
||||
|
||||
struct rte_mbuf *xran_ethdi_mbuf_alloc(void);
|
||||
int32_t xran_ethdi_mbuf_send(struct rte_mbuf *mb, uint16_t ethertype, uint16_t vf_id);
|
||||
int32_t xran_ethdi_mbuf_send_cp(struct rte_mbuf *mb, uint16_t ethertype, uint16_t vf_id);
|
||||
int32_t xran_ethdi_filter_packet(struct rte_mbuf *pkt, uint64_t rx_time);
|
||||
int32_t process_dpdk_io(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* #ifndef _ETHDI_H_ */
|
||||
168
targets/ARCH/ORAN_FHI/lib/ethernet.h
Normal file
@@ -0,0 +1,168 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2019 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This file has all definitions for the Ethernet Data Interface Layer
|
||||
* @file ethernet.h
|
||||
* @ingroup group_lte_source_auxlib
|
||||
* @author Intel Corporation
|
||||
**/
|
||||
|
||||
#ifndef AUXLIB_ETHERNET_H
|
||||
#define AUXLIB_ETHERNET_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <rte_config.h>
|
||||
#include <rte_ether.h>
|
||||
#include <rte_mbuf.h>
|
||||
|
||||
#define BURST_SIZE 4096
|
||||
|
||||
#define ETHER_TYPE_ETHDI RTE_ETHER_TYPE_IPV4 /* hack needed for jumbo frames */
|
||||
#define ETHER_TYPE_ECPRI 0xAEFE
|
||||
#define ETHER_TYPE_SYNC 0xBEFE
|
||||
#define ETHER_TYPE_START_TX 0xCEFE
|
||||
|
||||
#define NUM_MBUFS 65535/*16383*/ /*65535*/ /** optimal is n = (2^q - 1) */
|
||||
#define NUM_MBUFS_RING NUM_MBUFS+1 /** The size of the ring (must be a power of 2) */
|
||||
|
||||
#define MBUF_CACHE 256
|
||||
|
||||
#define MBUF_POOL_ELM_SMALL (1500 + RTE_PKTMBUF_HEADROOM )/* regular ethernet MTU, most compatible */
|
||||
#define MBUF_POOL_ELEMENT (MAX_RX_LEN + RTE_PKTMBUF_HEADROOM)
|
||||
|
||||
#define MAX_RX_LEN 9600
|
||||
#define MAX_TX_LEN (MAX_RX_LEN - 14) /* headroom for rx driver */
|
||||
#define MAX_DATA_SIZE (MAX_TX_LEN - sizeof(struct ether_hdr) - \
|
||||
sizeof(struct ethdi_hdr) - sizeof(struct burst_hdr))
|
||||
|
||||
/* Looks like mbuf size is limited to 16 bits - see the buf_len field. */
|
||||
#define MBUF_POOL_ELM_BIG USHRT_MAX
|
||||
#define NUM_MBUFS_BIG 64
|
||||
|
||||
#define DEFAULT_DUMP_LENGTH 96
|
||||
|
||||
extern struct rte_mempool *_eth_mbuf_pool;
|
||||
extern struct rte_mempool *_eth_mbuf_pool_small;
|
||||
extern struct rte_mempool *_eth_mbuf_pool_big;
|
||||
extern struct rte_mempool *socket_direct_pool;
|
||||
extern struct rte_mempool *socket_indirect_pool;
|
||||
|
||||
/* Do NOT change the order of this enum and below
|
||||
* - need to be in sync with the table of handlers in testue.c */
|
||||
enum pkt_type
|
||||
{
|
||||
PKT_ZERO,
|
||||
PKT_EMPTY,
|
||||
PKT_DISCOVER_REQUEST,
|
||||
PKT_PING,
|
||||
PKT_PONG,
|
||||
PKT_DISCOVER_REPLY,
|
||||
PKT_LTE_DATA,
|
||||
PKT_LTE_CONTROL,
|
||||
PKT_BURST,
|
||||
PKT_DATATEST,
|
||||
PKT_ADD_ETHDEV,
|
||||
PKT_SYNC_START,
|
||||
PKT_LAST,
|
||||
};
|
||||
|
||||
/* Do NOT change the order. */
|
||||
static char * const xran_pkt_descriptions[PKT_LAST + 1] = {
|
||||
"ZERO",
|
||||
"empty packet",
|
||||
"discovery request packet",
|
||||
"ping packet",
|
||||
"pong packet",
|
||||
"discovery reply packet",
|
||||
"LTE data packet",
|
||||
"LTE control packet",
|
||||
"BURST packet",
|
||||
"DATATEST packet",
|
||||
"Add ethernet port command packet",
|
||||
"SYNC-START packet",
|
||||
"LAST packet",
|
||||
};
|
||||
|
||||
struct burst_hdr {
|
||||
int8_t pkt_idx;
|
||||
int8_t total_pkts;
|
||||
int8_t original_type;
|
||||
int8_t data[];
|
||||
};
|
||||
|
||||
struct ethdi_hdr {
|
||||
uint8_t pkt_type;
|
||||
uint8_t source_id;
|
||||
uint8_t dest_id;
|
||||
int8_t data[]; /* original raw data starts here! */
|
||||
};
|
||||
|
||||
|
||||
void xran_init_mbuf_pool(void);
|
||||
|
||||
void xran_init_port(int port);
|
||||
|
||||
void xran_add_eth_hdr_vlan(struct rte_ether_addr *dst, uint16_t ethertype, struct rte_mbuf *mb);
|
||||
|
||||
#if 0
|
||||
void xran_memdump(void *addr, int len);
|
||||
void xran_add_eth_hdr(struct ether_addr *dst, uint16_t ethertype, struct rte_mbuf *);
|
||||
int xran_send_mbuf(struct ether_addr *dst, struct rte_mbuf *mb);
|
||||
int xran_send_message_burst(int dst_id, int pkt_type, void *body, int len);
|
||||
int xran_show_delayed_message(void);
|
||||
#endif
|
||||
/*
|
||||
* Print a message after all critical processing done.
|
||||
* Mt-safe. 4 variants - normal, warning, error and debug log.
|
||||
*/
|
||||
int __xran_delayed_msg(const char *fmt, ...);
|
||||
#define nlog(m, ...) __xran_delayed_msg("%s(): " m "\n", __FUNCTION__, ##__VA_ARGS__)
|
||||
#define delayed_message nlog /* this is the old alias for this function */
|
||||
#define wlog(m, ...) nlog("WARNING: " m, ##__VA_ARGS__)
|
||||
#define elog(m, ...) nlog("ERROR: " m, ##__VA_ARGS__)
|
||||
#ifdef DEBUG
|
||||
# define dlog(m, ...) nlog("DEBUG: " m, ##__VA_ARGS__)
|
||||
#else
|
||||
# define dlog(m, ...)
|
||||
#endif
|
||||
|
||||
#define PANIC_ON(x, m, ...) do { if (unlikely(x)) \
|
||||
rte_panic("%s: " m "\n", #x, ##__VA_ARGS__); } while (0)
|
||||
|
||||
/* Add mbuf to the TX ring. */
|
||||
static inline int xran_enqueue_mbuf(struct rte_mbuf *mb, struct rte_ring *r)
|
||||
{
|
||||
if (rte_ring_enqueue(r, mb) == 0) {
|
||||
return 1; /* success */
|
||||
}
|
||||
|
||||
rte_pktmbuf_free(mb);
|
||||
wlog("failed to enqueue packet on port %d (ring full)", mb->port);
|
||||
|
||||
return 0; /* fail */
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* AUXLIB_ETHERNET_H */
|
||||
12975
targets/ARCH/ORAN_FHI/lib/json.hpp
Normal file
61
targets/ARCH/ORAN_FHI/lib/xran_app_frag.h
Normal file
@@ -0,0 +1,61 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2019 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
/**
|
||||
* @brief Header file for functions to perform application level fragmentation
|
||||
*
|
||||
* @file xran_app_frag.h
|
||||
* @ingroup group_source_xran
|
||||
* @author Intel Corporation
|
||||
**/
|
||||
|
||||
#ifndef _XRAN_APP_FRAG_
|
||||
#define _XRAN_APP_FRAG_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <rte_config.h>
|
||||
#include <rte_malloc.h>
|
||||
#include <rte_memory.h>
|
||||
#include <rte_mempool.h>
|
||||
#include <rte_byteorder.h>
|
||||
|
||||
#include "xran_fh_o_du.h"
|
||||
#include "xran_cp_api.h"
|
||||
|
||||
int32_t xran_app_fragment_packet(struct rte_mbuf *pkt_in, /* eth hdr is prepended */
|
||||
struct rte_mbuf **pkts_out,
|
||||
uint16_t nb_pkts_out,
|
||||
uint16_t mtu_size,
|
||||
struct rte_mempool *pool_direct,
|
||||
struct rte_mempool *pool_indirect,
|
||||
struct xran_section_info *sectinfo,
|
||||
uint8_t *seqid);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _XRAN_APP_FRAG_ */
|
||||
|
||||
363
targets/ARCH/ORAN_FHI/lib/xran_bfp_utils.hpp
Normal file
@@ -0,0 +1,363 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2019 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief xRAN BFP compression/decompression utilities functions
|
||||
*
|
||||
* @file xran_bfp_utils.hpp
|
||||
* @ingroup group_source_xran
|
||||
* @author Intel Corporation
|
||||
**/
|
||||
|
||||
#pragma once
|
||||
#include <immintrin.h>
|
||||
|
||||
namespace BlockFloatCompander
|
||||
{
|
||||
/// Define function signatures for byte packing functions
|
||||
typedef __m512i(*PackFunction)(const __m512i);
|
||||
typedef __m512i(*UnpackFunction)(const uint8_t*);
|
||||
typedef __m256i(*UnpackFunction256)(const uint8_t*);
|
||||
|
||||
/// Calculate exponent based on 16 max abs values using leading zero count.
|
||||
inline __m512i
|
||||
maskUpperWord(const __m512i inData)
|
||||
{
|
||||
const auto k_upperWordMask = _mm512_set_epi64(0x0000FFFF0000FFFF, 0x0000FFFF0000FFFF,
|
||||
0x0000FFFF0000FFFF, 0x0000FFFF0000FFFF,
|
||||
0x0000FFFF0000FFFF, 0x0000FFFF0000FFFF,
|
||||
0x0000FFFF0000FFFF, 0x0000FFFF0000FFFF);
|
||||
return _mm512_and_epi64(inData, k_upperWordMask);
|
||||
}
|
||||
|
||||
/// Calculate exponent based on 16 max abs values using leading zero count.
|
||||
inline __m512i
|
||||
expLzCnt(const __m512i maxAbs, const __m512i totShiftBits)
|
||||
{
|
||||
/// Compute exponent
|
||||
const auto lzCount = _mm512_lzcnt_epi32(maxAbs);
|
||||
return _mm512_subs_epu16(totShiftBits, lzCount);
|
||||
}
|
||||
|
||||
inline int
|
||||
horizontalMax1x32(const __m512i maxAbsReg)
|
||||
{
|
||||
/// Swap each IQ pair in each lane (via 32b rotation) and compute max of
|
||||
/// each pair.
|
||||
const auto maxRot16 = _mm512_rol_epi32(maxAbsReg, BlockFloatCompander::k_numBitsIQ);
|
||||
const auto maxAbsIQ = _mm512_max_epi16(maxAbsReg, maxRot16);
|
||||
/// Convert to 32b by removing repeated values in maxAbs
|
||||
const auto maxAbs32 = maskUpperWord(maxAbsIQ);
|
||||
/// Return reduced max
|
||||
return _mm512_reduce_max_epi32(maxAbs32);
|
||||
}
|
||||
|
||||
/// Pack compressed 9 bit data in network byte order
|
||||
/// See https://soco.intel.com/docs/DOC-2665619
|
||||
inline __m512i
|
||||
networkBytePack9b(const __m512i compData)
|
||||
{
|
||||
/// Logical shift left to align network order byte parts
|
||||
const __m512i k_shiftLeft = _mm512_set_epi64(0x0000000100020003, 0x0004000500060007,
|
||||
0x0000000100020003, 0x0004000500060007,
|
||||
0x0000000100020003, 0x0004000500060007,
|
||||
0x0000000100020003, 0x0004000500060007);
|
||||
const auto compDataPacked = _mm512_sllv_epi16(compData, k_shiftLeft);
|
||||
|
||||
/// First epi8 shuffle of even indexed samples
|
||||
const __m512i k_byteShuffleMask1 = _mm512_set_epi64(0x0000000000000000, 0x0C0D080904050001,
|
||||
0x0000000000000000, 0x0C0D080904050001,
|
||||
0x0000000000000000, 0x0C0D080904050001,
|
||||
0x0000000000000000, 0x0C0D080904050001);
|
||||
constexpr uint64_t k_byteMask1 = 0x00FF00FF00FF00FF;
|
||||
const auto compDataShuff1 = _mm512_maskz_shuffle_epi8(k_byteMask1, compDataPacked, k_byteShuffleMask1);
|
||||
|
||||
/// Second epi8 shuffle of odd indexed samples
|
||||
const __m512i k_byteShuffleMask2 = _mm512_set_epi64(0x000000000000000E, 0x0F0A0B0607020300,
|
||||
0x000000000000000E, 0x0F0A0B0607020300,
|
||||
0x000000000000000E, 0x0F0A0B0607020300,
|
||||
0x000000000000000E, 0x0F0A0B0607020300);
|
||||
constexpr uint64_t k_byteMask2 = 0x01FE01FE01FE01FE;
|
||||
const auto compDataShuff2 = _mm512_maskz_shuffle_epi8(k_byteMask2, compDataPacked, k_byteShuffleMask2);
|
||||
|
||||
/// Ternary blend of the two shuffled results
|
||||
const __m512i k_ternLogSelect = _mm512_set_epi64(0x00000000000000FF, 0x01FC07F01FC07F00,
|
||||
0x00000000000000FF, 0x01FC07F01FC07F00,
|
||||
0x00000000000000FF, 0x01FC07F01FC07F00,
|
||||
0x00000000000000FF, 0x01FC07F01FC07F00);
|
||||
return _mm512_ternarylogic_epi64(compDataShuff1, compDataShuff2, k_ternLogSelect, 0xd8);
|
||||
}
|
||||
|
||||
|
||||
/// Pack compressed 10 bit data in network byte order
|
||||
/// See https://soco.intel.com/docs/DOC-2665619
|
||||
inline __m512i
|
||||
networkBytePack10b(const __m512i compData)
|
||||
{
|
||||
/// Logical shift left to align network order byte parts
|
||||
const __m512i k_shiftLeft = _mm512_set_epi64(0x0000000200040006, 0x0000000200040006,
|
||||
0x0000000200040006, 0x0000000200040006,
|
||||
0x0000000200040006, 0x0000000200040006,
|
||||
0x0000000200040006, 0x0000000200040006);
|
||||
const auto compDataPacked = _mm512_sllv_epi16(compData, k_shiftLeft);
|
||||
|
||||
/// First epi8 shuffle of even indexed samples
|
||||
const __m512i k_byteShuffleMask1 = _mm512_set_epi64(0x000000000000000C, 0x0D08090004050001,
|
||||
0x000000000000000C, 0x0D08090004050001,
|
||||
0x000000000000000C, 0x0D08090004050001,
|
||||
0x000000000000000C, 0x0D08090004050001);
|
||||
constexpr uint64_t k_byteMask1 = 0x01EF01EF01EF01EF;
|
||||
const auto compDataShuff1 = _mm512_maskz_shuffle_epi8(k_byteMask1, compDataPacked, k_byteShuffleMask1);
|
||||
|
||||
/// Second epi8 shuffle of odd indexed samples
|
||||
const __m512i k_byteShuffleMask2 = _mm512_set_epi64(0x0000000000000E0F, 0x0A0B000607020300,
|
||||
0x0000000000000E0F, 0x0A0B000607020300,
|
||||
0x0000000000000E0F, 0x0A0B000607020300,
|
||||
0x0000000000000E0F, 0x0A0B000607020300);
|
||||
constexpr uint64_t k_byteMask2 = 0x03DE03DE03DE03DE;
|
||||
const auto compDataShuff2 = _mm512_maskz_shuffle_epi8(k_byteMask2, compDataPacked, k_byteShuffleMask2);
|
||||
|
||||
/// Ternary blend of the two shuffled results
|
||||
const __m512i k_ternLogSelect = _mm512_set_epi64(0x000000000000FF03, 0xF03F00FF03F03F00,
|
||||
0x000000000000FF03, 0xF03F00FF03F03F00,
|
||||
0x000000000000FF03, 0xF03F00FF03F03F00,
|
||||
0x000000000000FF03, 0xF03F00FF03F03F00);
|
||||
return _mm512_ternarylogic_epi64(compDataShuff1, compDataShuff2, k_ternLogSelect, 0xd8);
|
||||
}
|
||||
|
||||
|
||||
/// Pack compressed 12 bit data in network byte order
|
||||
/// See https://soco.intel.com/docs/DOC-2665619
|
||||
inline __m512i
|
||||
networkBytePack12b(const __m512i compData)
|
||||
{
|
||||
/// Logical shift left to align network order byte parts
|
||||
const __m512i k_shiftLeft = _mm512_set_epi64(0x0000000400000004, 0x0000000400000004,
|
||||
0x0000000400000004, 0x0000000400000004,
|
||||
0x0000000400000004, 0x0000000400000004,
|
||||
0x0000000400000004, 0x0000000400000004);
|
||||
const auto compDataPacked = _mm512_sllv_epi16(compData, k_shiftLeft);
|
||||
|
||||
/// First epi8 shuffle of even indexed samples
|
||||
const __m512i k_byteShuffleMask1 = _mm512_set_epi64(0x00000000000C0D00, 0x0809000405000001,
|
||||
0x00000000000C0D00, 0x0809000405000001,
|
||||
0x00000000000C0D00, 0x0809000405000001,
|
||||
0x00000000000C0D00, 0x0809000405000001);
|
||||
constexpr uint64_t k_byteMask1 = 0x06DB06DB06DB06DB;
|
||||
const auto compDataShuff1 = _mm512_maskz_shuffle_epi8(k_byteMask1, compDataPacked, k_byteShuffleMask1);
|
||||
|
||||
/// Second epi8 shuffle of odd indexed samples
|
||||
const __m512i k_byteShuffleMask2 = _mm512_set_epi64(0x000000000E0F000A, 0x0B00060700020300,
|
||||
0x000000000E0F000A, 0x0B00060700020300,
|
||||
0x000000000E0F000A, 0x0B00060700020300,
|
||||
0x000000000E0F000A, 0x0B00060700020300);
|
||||
constexpr uint64_t k_byteMask2 = 0x0DB60DB60DB60DB6;
|
||||
const auto compDataShuff2 = _mm512_maskz_shuffle_epi8(k_byteMask2, compDataPacked, k_byteShuffleMask2);
|
||||
|
||||
/// Ternary blend of the two shuffled results
|
||||
const __m512i k_ternLogSelect = _mm512_set_epi64(0x00000000FF0F00FF, 0x0F00FF0F00FF0F00,
|
||||
0x00000000FF0F00FF, 0x0F00FF0F00FF0F00,
|
||||
0x00000000FF0F00FF, 0x0F00FF0F00FF0F00,
|
||||
0x00000000FF0F00FF, 0x0F00FF0F00FF0F00);
|
||||
return _mm512_ternarylogic_epi64(compDataShuff1, compDataShuff2, k_ternLogSelect, 0xd8);
|
||||
}
|
||||
|
||||
|
||||
/// Unpack compressed 9 bit data in network byte order
|
||||
/// See https://soco.intel.com/docs/DOC-2665619
|
||||
inline __m512i
|
||||
networkByteUnpack9b(const uint8_t* inData)
|
||||
{
|
||||
/// Align chunks of compressed bytes into lanes to allow for expansion
|
||||
const __m512i* rawDataIn = reinterpret_cast<const __m512i*>(inData);
|
||||
const auto k_expPerm = _mm512_set_epi32(9, 8, 7, 6, 7, 6, 5, 4,
|
||||
5, 4, 3, 2, 3, 2, 1, 0);
|
||||
const auto inLaneAlign = _mm512_permutexvar_epi32(k_expPerm, *rawDataIn);
|
||||
|
||||
/// Byte shuffle to get all bits for each sample into 16b chunks
|
||||
/// Due to previous permute to get chunks of bytes into each lane, there is
|
||||
/// a different shuffle offset in each lane
|
||||
const __m512i k_byteShuffleMask = _mm512_set_epi64(0x0A0B090A08090708, 0x0607050604050304,
|
||||
0x090A080907080607, 0x0506040503040203,
|
||||
0x0809070806070506, 0x0405030402030102,
|
||||
0x0708060705060405, 0x0304020301020001);
|
||||
const auto inDatContig = _mm512_shuffle_epi8(inLaneAlign, k_byteShuffleMask);
|
||||
|
||||
/// Logical shift left to set sign bit
|
||||
const __m512i k_slBits = _mm512_set_epi64(0x0007000600050004, 0x0003000200010000,
|
||||
0x0007000600050004, 0x0003000200010000,
|
||||
0x0007000600050004, 0x0003000200010000,
|
||||
0x0007000600050004, 0x0003000200010000);
|
||||
const auto inSetSign = _mm512_sllv_epi16(inDatContig, k_slBits);
|
||||
|
||||
/// Mask to zero unwanted bits
|
||||
const __m512i k_expMask = _mm512_set1_epi16(0xFF80);
|
||||
return _mm512_and_epi64(inSetSign, k_expMask);
|
||||
}
|
||||
|
||||
|
||||
/// Unpack compressed 10 bit data in network byte order
|
||||
/// See https://soco.intel.com/docs/DOC-2665619
|
||||
inline __m512i
|
||||
networkByteUnpack10b(const uint8_t* inData)
|
||||
{
|
||||
/// Align chunks of compressed bytes into lanes to allow for expansion
|
||||
const __m512i* rawDataIn = reinterpret_cast<const __m512i*>(inData);
|
||||
const auto k_expPerm = _mm512_set_epi32(10, 9, 8, 7, 8, 7, 6, 5,
|
||||
5, 4, 3, 2, 3, 2, 1, 0);
|
||||
const auto inLaneAlign = _mm512_permutexvar_epi32(k_expPerm, *rawDataIn);
|
||||
|
||||
/// Byte shuffle to get all bits for each sample into 16b chunks
|
||||
/// Due to previous permute to get chunks of bytes into each lane, lanes
|
||||
/// 0 and 2 happen to be aligned, but lane 1 is offset by 2 bytes
|
||||
const __m512i k_byteShuffleMask = _mm512_set_epi64(0x0A0B090A08090708, 0x0506040503040203,
|
||||
0x0809070806070506, 0x0304020301020001,
|
||||
0x0A0B090A08090708, 0x0506040503040203,
|
||||
0x0809070806070506, 0x0304020301020001);
|
||||
const auto inDatContig = _mm512_shuffle_epi8(inLaneAlign, k_byteShuffleMask);
|
||||
|
||||
/// Logical shift left to set sign bit
|
||||
const __m512i k_slBits = _mm512_set_epi64(0x0006000400020000, 0x0006000400020000,
|
||||
0x0006000400020000, 0x0006000400020000,
|
||||
0x0006000400020000, 0x0006000400020000,
|
||||
0x0006000400020000, 0x0006000400020000);
|
||||
const auto inSetSign = _mm512_sllv_epi16(inDatContig, k_slBits);
|
||||
|
||||
/// Mask to zero unwanted bits
|
||||
const __m512i k_expMask = _mm512_set1_epi16(0xFFC0);
|
||||
return _mm512_and_epi64(inSetSign, k_expMask);
|
||||
}
|
||||
|
||||
|
||||
/// Unpack compressed 12 bit data in network byte order
|
||||
/// See https://soco.intel.com/docs/DOC-2665619
|
||||
inline __m512i
|
||||
networkByteUnpack12b(const uint8_t* inData)
|
||||
{
|
||||
/// Align chunks of compressed bytes into lanes to allow for expansion
|
||||
const __m512i* rawDataIn = reinterpret_cast<const __m512i*>(inData);
|
||||
const auto k_expPerm = _mm512_set_epi32(12, 11, 10, 9, 9, 8, 7, 6,
|
||||
6, 5, 4, 3, 3, 2, 1, 0);
|
||||
const auto inLaneAlign = _mm512_permutexvar_epi32(k_expPerm, *rawDataIn);
|
||||
|
||||
/// Byte shuffle to get all bits for each sample into 16b chunks
|
||||
/// For 12b mantissa all lanes post-permute are aligned and require same shuffle offset
|
||||
const __m512i k_byteShuffleMask = _mm512_set_epi64(0x0A0B090A07080607, 0x0405030401020001,
|
||||
0x0A0B090A07080607, 0x0405030401020001,
|
||||
0x0A0B090A07080607, 0x0405030401020001,
|
||||
0x0A0B090A07080607, 0x0405030401020001);
|
||||
const auto inDatContig = _mm512_shuffle_epi8(inLaneAlign, k_byteShuffleMask);
|
||||
|
||||
/// Logical shift left to set sign bit
|
||||
const __m512i k_slBits = _mm512_set_epi64(0x0004000000040000, 0x0004000000040000,
|
||||
0x0004000000040000, 0x0004000000040000,
|
||||
0x0004000000040000, 0x0004000000040000,
|
||||
0x0004000000040000, 0x0004000000040000);
|
||||
const auto inSetSign = _mm512_sllv_epi16(inDatContig, k_slBits);
|
||||
|
||||
/// Mask to zero unwanted bits
|
||||
const __m512i k_expMask = _mm512_set1_epi16(0xFFF0);
|
||||
return _mm512_and_epi64(inSetSign, k_expMask);
|
||||
}
|
||||
|
||||
|
||||
/// Unpack compressed 9 bit data in network byte order
|
||||
/// See https://soco.intel.com/docs/DOC-2665619
|
||||
/// This unpacking function is for 256b registers
|
||||
inline __m256i
|
||||
networkByteUnpack9b256(const uint8_t* inData)
|
||||
{
|
||||
/// Align chunks of compressed bytes into lanes to allow for expansion
|
||||
const __m256i* rawDataIn = reinterpret_cast<const __m256i*>(inData);
|
||||
const auto k_expPerm = _mm256_set_epi32(5, 4, 3, 2, 3, 2, 1, 0);
|
||||
const auto inLaneAlign = _mm256_permutexvar_epi32(k_expPerm, *rawDataIn);
|
||||
|
||||
/// Byte shuffle to get all bits for each sample into 16b chunks
|
||||
/// Due to previous permute to get chunks of bytes into each lane, there is
|
||||
/// a different shuffle offset in each lane
|
||||
const __m256i k_byteShuffleMask = _mm256_set_epi64x(0x0809070806070506, 0x0405030402030102,
|
||||
0x0708060705060405, 0x0304020301020001);
|
||||
const auto inDatContig = _mm256_shuffle_epi8(inLaneAlign, k_byteShuffleMask);
|
||||
|
||||
/// Logical shift left to set sign bit
|
||||
const __m256i k_slBits = _mm256_set_epi64x(0x0007000600050004, 0x0003000200010000,
|
||||
0x0007000600050004, 0x0003000200010000);
|
||||
const auto inSetSign = _mm256_sllv_epi16(inDatContig, k_slBits);
|
||||
|
||||
/// Mask to zero unwanted bits
|
||||
const __m256i k_expMask = _mm256_set1_epi16(0xFF80);
|
||||
return _mm256_and_si256(inSetSign, k_expMask);
|
||||
}
|
||||
|
||||
|
||||
/// Unpack compressed 10 bit data in network byte order
|
||||
/// See https://soco.intel.com/docs/DOC-2665619
|
||||
/// This unpacking function is for 256b registers
|
||||
inline __m256i
|
||||
networkByteUnpack10b256(const uint8_t* inData)
|
||||
{
|
||||
/// Align chunks of compressed bytes into lanes to allow for expansion
|
||||
const __m256i* rawDataIn = reinterpret_cast<const __m256i*>(inData);
|
||||
const auto k_expPerm = _mm256_set_epi32(5, 4, 3, 2, 3, 2, 1, 0);
|
||||
const auto inLaneAlign = _mm256_permutexvar_epi32(k_expPerm, *rawDataIn);
|
||||
|
||||
/// Byte shuffle to get all bits for each sample into 16b chunks
|
||||
/// Due to previous permute to get chunks of bytes into each lane, lanes
|
||||
/// 0 and 2 happen to be aligned, but lane 1 is offset by 2 bytes
|
||||
const __m256i k_byteShuffleMask = _mm256_set_epi64x(0x0A0B090A08090708, 0x0506040503040203,
|
||||
0x0809070806070506, 0x0304020301020001);
|
||||
const auto inDatContig = _mm256_shuffle_epi8(inLaneAlign, k_byteShuffleMask);
|
||||
|
||||
/// Logical shift left to set sign bit
|
||||
const __m256i k_slBits = _mm256_set_epi64x(0x0006000400020000, 0x0006000400020000,
|
||||
0x0006000400020000, 0x0006000400020000);
|
||||
const auto inSetSign = _mm256_sllv_epi16(inDatContig, k_slBits);
|
||||
|
||||
/// Mask to zero unwanted bits
|
||||
const __m256i k_expMask = _mm256_set1_epi16(0xFFC0);
|
||||
return _mm256_and_si256(inSetSign, k_expMask);
|
||||
}
|
||||
|
||||
|
||||
/// Unpack compressed 12 bit data in network byte order
|
||||
/// See https://soco.intel.com/docs/DOC-2665619
|
||||
/// This unpacking function is for 256b registers
|
||||
inline __m256i
|
||||
networkByteUnpack12b256(const uint8_t* inData)
|
||||
{
|
||||
/// Align chunks of compressed bytes into lanes to allow for expansion
|
||||
const __m256i* rawDataIn = reinterpret_cast<const __m256i*>(inData);
|
||||
const auto k_expPerm = _mm256_set_epi32(6, 5, 4, 3, 3, 2, 1, 0);
|
||||
const auto inLaneAlign = _mm256_permutexvar_epi32(k_expPerm, *rawDataIn);
|
||||
|
||||
/// Byte shuffle to get all bits for each sample into 16b chunks
|
||||
/// For 12b mantissa all lanes post-permute are aligned and require same shuffle offset
|
||||
const __m256i k_byteShuffleMask = _mm256_set_epi64x(0x0A0B090A07080607, 0x0405030401020001,
|
||||
0x0A0B090A07080607, 0x0405030401020001);
|
||||
const auto inDatContig = _mm256_shuffle_epi8(inLaneAlign, k_byteShuffleMask);
|
||||
|
||||
/// Logical shift left to set sign bit
|
||||
const __m256i k_slBits = _mm256_set_epi64x(0x0004000000040000, 0x0004000000040000,
|
||||
0x0004000000040000, 0x0004000000040000);
|
||||
const auto inSetSign = _mm256_sllv_epi16(inDatContig, k_slBits);
|
||||
|
||||
/// Mask to zero unwanted bits
|
||||
const __m256i k_expMask = _mm256_set1_epi16(0xFFF0);
|
||||
return _mm256_and_si256(inSetSign, k_expMask);
|
||||
}
|
||||
}
|
||||
371
targets/ARCH/ORAN_FHI/lib/xran_common.h
Normal file
@@ -0,0 +1,371 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2019 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief XRAN layer common functionality for both lls-CU and RU as well as C-plane and
|
||||
* U-plane
|
||||
* @file xran_common.h
|
||||
* @ingroup group_source_xran
|
||||
* @author Intel Corporation
|
||||
**/
|
||||
|
||||
#ifndef _XRAN_COMMON_H_
|
||||
#define _XRAN_COMMON_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/queue.h>
|
||||
|
||||
#include <rte_common.h>
|
||||
#include <rte_mbuf.h>
|
||||
#include <rte_timer.h>
|
||||
|
||||
#include "xran_fh_o_du.h"
|
||||
#include "xran_pkt_up.h"
|
||||
#include "xran_cp_api.h"
|
||||
|
||||
#define O_DU 0
|
||||
#define O_RU 1
|
||||
|
||||
#define N_SC_PER_PRB 12
|
||||
#define MAX_N_FULLBAND_SC 273
|
||||
#define N_SYM_PER_SLOT 14
|
||||
#define SUBFRAME_DURATION_US 1000
|
||||
#define SLOTNUM_PER_SUBFRAME (SUBFRAME_DURATION_US/interval_us)
|
||||
#define SUBFRAMES_PER_SYSTEMFRAME 10
|
||||
#define SLOTS_PER_SYSTEMFRAME (SLOTNUM_PER_SUBFRAME*SUBFRAMES_PER_SYSTEMFRAME)
|
||||
|
||||
/* PRACH data samples are 32 bits wide, 16bits for I and 16bits for Q. Each packet contains 839 samples for long sequence or 144*14 (max) for short sequence. The payload length is 3356 octets.*/
|
||||
#define PRACH_PLAYBACK_BUFFER_BYTES (144*14*4L)
|
||||
|
||||
#define PRACH_SRS_BUFFER_BYTES (144*14*4L)
|
||||
|
||||
/**< this is the configuration of M-plane */
|
||||
#define XRAN_MAX_NUM_SECTIONS (N_SYM_PER_SLOT* (XRAN_MAX_ANTENNA_NR*2) + XRAN_MAX_ANT_ARRAY_ELM_NR)
|
||||
|
||||
#define XRAN_MAX_MBUF_LEN 9600 /**< jumbo frame */
|
||||
#define NSEC_PER_SEC 1000000000L
|
||||
#define TIMER_RESOLUTION_CYCLES 1596*1 /* 1us */
|
||||
#define XRAN_RING_SIZE 512 /*4*14*8 pow of 2 */
|
||||
#define XRAN_NAME_MAX_LEN (64)
|
||||
#define XRAN_RING_NUM (3)
|
||||
|
||||
#define XranDiffSymIdx(prevSymIdx, currSymIdx, numTotalSymIdx) ((prevSymIdx > currSymIdx) ? ((currSymIdx + numTotalSymIdx) - prevSymIdx) : (currSymIdx - prevSymIdx))
|
||||
|
||||
#define XRAN_MLOG_VAR 0 /**< enable debug variables to mlog */
|
||||
|
||||
/* PRACH configuration table defines */
|
||||
#define XRAN_PRACH_CANDIDATE_PREAMBLE (2)
|
||||
#define XRAN_PRACH_CANDIDATE_Y (2)
|
||||
#define XRAN_PRACH_CANDIDATE_SLOT (40)
|
||||
#define XRAN_PRACH_CONFIG_TABLE_SIZE (256)
|
||||
#define XRAN_PRACH_PREAMBLE_FORMAT_OF_ABC (9)
|
||||
typedef enum
|
||||
{
|
||||
FORMAT_0 = 0,
|
||||
FORMAT_1,
|
||||
FORMAT_2,
|
||||
FORMAT_3,
|
||||
FORMAT_A1,
|
||||
FORMAT_A2,
|
||||
FORMAT_A3,
|
||||
FORMAT_B1,
|
||||
FORMAT_B2,
|
||||
FORMAT_B3,
|
||||
FORMAT_B4,
|
||||
FORMAT_C0,
|
||||
FORMAT_C2,
|
||||
FORMAT_LAST
|
||||
}PreambleFormatEnum;
|
||||
|
||||
/* add PRACH used config table, same structure as used in refPHY */
|
||||
typedef struct
|
||||
{
|
||||
uint8_t prachConfigIdx;
|
||||
uint8_t preambleFmrt[XRAN_PRACH_CANDIDATE_PREAMBLE];
|
||||
uint8_t x;
|
||||
uint8_t y[XRAN_PRACH_CANDIDATE_Y];
|
||||
uint8_t slotNr[XRAN_PRACH_CANDIDATE_SLOT];
|
||||
uint8_t slotNrNum;
|
||||
uint8_t startingSym;
|
||||
uint8_t nrofPrachInSlot;
|
||||
uint8_t occassionsInPrachSlot;
|
||||
uint8_t duration;
|
||||
} xRANPrachConfigTableStruct;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t preambleFmrt;
|
||||
uint16_t lRALen;
|
||||
uint8_t fRA;
|
||||
uint32_t nu;
|
||||
uint16_t nRaCp;
|
||||
}xRANPrachPreambleLRAStruct;
|
||||
|
||||
struct xran_prach_cp_config
|
||||
{
|
||||
uint8_t filterIdx;
|
||||
uint8_t startSymId;
|
||||
uint16_t startPrbc;
|
||||
uint8_t numPrbc;
|
||||
uint8_t numSymbol;
|
||||
uint16_t timeOffset;
|
||||
int32_t freqOffset;
|
||||
uint8_t nrofPrachInSlot;
|
||||
uint8_t occassionsInPrachSlot;
|
||||
uint8_t x;
|
||||
uint8_t y[XRAN_PRACH_CANDIDATE_Y];
|
||||
uint8_t isPRACHslot[XRAN_PRACH_CANDIDATE_SLOT];
|
||||
uint8_t eAxC_offset; /**< starting eAxC for PRACH stream */
|
||||
};
|
||||
|
||||
#define XRAN_MAX_POOLS_PER_SECTOR_NR 8 /**< 2x(TX_OUT, RX_IN, PRACH_IN, SRS_IN) with C-plane */
|
||||
|
||||
typedef struct sectorHandleInfo
|
||||
{
|
||||
/**< Structure that contains the information to describe the
|
||||
* instance i.e service type, virtual function, package Id etc..*/
|
||||
uint16_t nIndex;
|
||||
uint16_t nXranPort;
|
||||
/* Unique ID of an handle shared between phy layer and library */
|
||||
/**< number of antennas supported per link*/
|
||||
uint32_t nBufferPoolIndex;
|
||||
/**< Buffer poolIndex*/
|
||||
struct rte_mempool * p_bufferPool[XRAN_MAX_POOLS_PER_SECTOR_NR];
|
||||
uint32_t bufferPoolElmSz[XRAN_MAX_POOLS_PER_SECTOR_NR];
|
||||
uint32_t bufferPoolNumElm[XRAN_MAX_POOLS_PER_SECTOR_NR];
|
||||
|
||||
}XranSectorHandleInfo, *PXranSectorHandleInfo;
|
||||
|
||||
typedef void (*XranSymCallbackFn)(struct rte_timer *tim, void* arg);
|
||||
|
||||
struct cb_elem_entry{
|
||||
XranSymCallbackFn pSymCallback;
|
||||
void *pSymCallbackTag;
|
||||
LIST_ENTRY(cb_elem_entry) pointers;
|
||||
};
|
||||
|
||||
/* Callback function to send mbuf to the ring */
|
||||
typedef int (*xran_ethdi_mbuf_send_fn)(struct rte_mbuf *mb, uint16_t ethertype, uint16_t vf_id);
|
||||
|
||||
/*
|
||||
* manage one cell's all Ethernet frames for one DL or UL LTE subframe
|
||||
*/
|
||||
typedef struct {
|
||||
/* -1-this subframe is not used in current frame format
|
||||
0-this subframe can be transmitted, i.e., data is ready
|
||||
1-this subframe is waiting transmission, i.e., data is not ready
|
||||
10 - DL transmission missing deadline. When FE needs this subframe data but bValid is still 1,
|
||||
set bValid to 10.
|
||||
*/
|
||||
int32_t bValid ; // when UL rx, it is subframe index.
|
||||
int32_t nSegToBeGen;
|
||||
int32_t nSegGenerated; // how many date segment are generated by DL LTE processing or received from FE
|
||||
// -1 means that DL packet to be transmitted is not ready in BS
|
||||
int32_t nSegTransferred; // number of data segments has been transmitted or received
|
||||
struct rte_mbuf *pData[XRAN_N_MAX_BUFFER_SEGMENT]; // point to DPDK allocated memory pool
|
||||
struct xran_buffer_list sBufferList;
|
||||
} BbuIoBufCtrlStruct;
|
||||
|
||||
|
||||
#define XranIncrementJob(i) ((i >= (XRAN_SYM_JOB_SIZE-1)) ? 0 : (i+1))
|
||||
|
||||
#define XRAN_MAX_PKT_BURST_PER_SYM 32
|
||||
#define XRAN_MAX_PACKET_FRAG 9
|
||||
|
||||
#define MBUF_TABLE_SIZE (2 * MAX(XRAN_MAX_PKT_BURST_PER_SYM, XRAN_MAX_PACKET_FRAG))
|
||||
|
||||
struct mbuf_table {
|
||||
uint16_t len;
|
||||
struct rte_mbuf *m_table[MBUF_TABLE_SIZE];
|
||||
};
|
||||
|
||||
struct xran_device_ctx
|
||||
{
|
||||
uint8_t sector_id;
|
||||
uint8_t xran_port_id;
|
||||
struct xran_eaxcid_config eAxc_id_cfg;
|
||||
struct xran_fh_init fh_init;
|
||||
struct xran_fh_config fh_cfg;
|
||||
struct xran_prach_cp_config PrachCPConfig;
|
||||
|
||||
uint32_t enablePrach;
|
||||
uint32_t enableCP;
|
||||
|
||||
int32_t DynamicSectionEna;
|
||||
int64_t offset_sec;
|
||||
int64_t offset_nsec; //offset to GPS time calcuated based on alpha and beta
|
||||
|
||||
uint32_t enableSrs;
|
||||
struct xran_srs_config srs_cfg; /** configuration of SRS */
|
||||
|
||||
BbuIoBufCtrlStruct sFrontHaulTxBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR];
|
||||
BbuIoBufCtrlStruct sFrontHaulTxPrbMapBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR];
|
||||
BbuIoBufCtrlStruct sFrontHaulRxBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR];
|
||||
BbuIoBufCtrlStruct sFrontHaulRxPrbMapBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR];
|
||||
BbuIoBufCtrlStruct sFHPrachRxBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR];
|
||||
BbuIoBufCtrlStruct sFHSrsRxBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANT_ARRAY_ELM_NR];
|
||||
|
||||
/* buffers lists */
|
||||
struct xran_flat_buffer sFrontHaulTxBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT];
|
||||
struct xran_flat_buffer sFrontHaulTxPrbMapBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT];
|
||||
struct xran_flat_buffer sFrontHaulRxBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT];
|
||||
struct xran_flat_buffer sFrontHaulRxPrbMapBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT];
|
||||
struct xran_flat_buffer sFHPrachRxBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT];
|
||||
|
||||
struct xran_flat_buffer sFHSrsRxBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANT_ARRAY_ELM_NR][XRAN_MAX_NUM_OF_SRS_SYMBOL_PER_SLOT];
|
||||
|
||||
xran_transport_callback_fn pCallback[XRAN_MAX_SECTOR_NR];
|
||||
void *pCallbackTag[XRAN_MAX_SECTOR_NR];
|
||||
|
||||
xran_transport_callback_fn pPrachCallback[XRAN_MAX_SECTOR_NR];
|
||||
void *pPrachCallbackTag[XRAN_MAX_SECTOR_NR];
|
||||
|
||||
xran_transport_callback_fn pSrsCallback[XRAN_MAX_SECTOR_NR];
|
||||
void *pSrsCallbackTag[XRAN_MAX_SECTOR_NR];
|
||||
|
||||
LIST_HEAD(sym_cb_elem_list, cb_elem_entry) sym_cb_list_head[XRAN_MAX_SECTOR_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT];
|
||||
|
||||
int32_t sym_up; /**< when we start sym 0 of up with respect to OTA time as measured in symbols */
|
||||
int32_t sym_up_ul;
|
||||
|
||||
xran_fh_tti_callback_fn ttiCb[XRAN_CB_MAX];
|
||||
void *TtiCbParam[XRAN_CB_MAX];
|
||||
uint32_t SkipTti[XRAN_CB_MAX];
|
||||
|
||||
int xran2phy_mem_ready;
|
||||
|
||||
int rx_packet_symb_tracker[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT];
|
||||
int rx_packet_prach_tracker[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT];
|
||||
int rx_packet_callback_tracker[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR];
|
||||
int rx_packet_prach_callback_tracker[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR];
|
||||
int prach_start_symbol[XRAN_MAX_SECTOR_NR];
|
||||
int prach_last_symbol[XRAN_MAX_SECTOR_NR];
|
||||
|
||||
int phy_tti_cb_done;
|
||||
|
||||
struct rte_mempool *direct_pool;
|
||||
struct rte_mempool *indirect_pool;
|
||||
struct mbuf_table tx_mbufs[RTE_MAX_ETHPORTS];
|
||||
|
||||
struct xran_common_counters fh_counters;
|
||||
|
||||
phy_encoder_poll_fn bbdev_enc; /**< call back to poll BBDev encoder */
|
||||
phy_decoder_poll_fn bbdev_dec; /**< call back to poll BBDev decoder */
|
||||
|
||||
xran_ethdi_mbuf_send_fn send_cpmbuf2ring; /**< callback to send mbufs of C-Plane packets to the ring */
|
||||
xran_ethdi_mbuf_send_fn send_upmbuf2ring; /**< callback to send mbufs of U-Plane packets to the ring */
|
||||
uint32_t pkt_proc_core_id; /**< core used for processing DPDK timer cb */
|
||||
};
|
||||
|
||||
extern const xRANPrachConfigTableStruct gxranPrachDataTable_sub6_fdd[XRAN_PRACH_CONFIG_TABLE_SIZE];
|
||||
extern const xRANPrachConfigTableStruct gxranPrachDataTable_sub6_tdd[XRAN_PRACH_CONFIG_TABLE_SIZE];
|
||||
extern const xRANPrachConfigTableStruct gxranPrachDataTable_mmw[XRAN_PRACH_CONFIG_TABLE_SIZE];
|
||||
extern const xRANPrachPreambleLRAStruct gxranPreambleforLRA[13];
|
||||
|
||||
int process_mbuf(struct rte_mbuf *pkt);
|
||||
int process_ring(struct rte_ring *r);
|
||||
int ring_processing_thread(void *args);
|
||||
int packets_dump_thread(void *args);
|
||||
|
||||
int send_symbol_ex(enum xran_pkt_dir direction,
|
||||
uint16_t section_id,
|
||||
struct rte_mbuf *mb,
|
||||
struct rb_map *data,
|
||||
const enum xran_input_byte_order iq_buf_byte_order,
|
||||
uint8_t frame_id,
|
||||
uint8_t subframe_id,
|
||||
uint8_t slot_id,
|
||||
uint8_t symbol_no,
|
||||
int prb_start,
|
||||
int prb_num,
|
||||
uint8_t CC_ID,
|
||||
uint8_t RU_Port_ID,
|
||||
uint8_t seq_id);
|
||||
|
||||
int32_t prepare_symbol_ex(enum xran_pkt_dir direction,
|
||||
uint16_t section_id,
|
||||
struct rte_mbuf *mb,
|
||||
struct rb_map *data,
|
||||
uint8_t compMeth,
|
||||
uint8_t iqWidth,
|
||||
const enum xran_input_byte_order iq_buf_byte_order,
|
||||
uint8_t frame_id,
|
||||
uint8_t subframe_id,
|
||||
uint8_t slot_id,
|
||||
uint8_t symbol_no,
|
||||
int prb_start,
|
||||
int prb_num,
|
||||
uint8_t CC_ID,
|
||||
uint8_t RU_Port_ID,
|
||||
uint8_t seq_id,
|
||||
uint32_t do_copy);
|
||||
|
||||
int send_cpmsg(void *pHandle, struct rte_mbuf *mbuf,struct xran_cp_gen_params *params,
|
||||
struct xran_section_gen_info *sect_geninfo, uint8_t cc_id, uint8_t ru_port_id, uint8_t seq_id);
|
||||
|
||||
int32_t generate_cpmsg_dlul(void *pHandle, struct xran_cp_gen_params *params, struct xran_section_gen_info *sect_geninfo, struct rte_mbuf *mbuf,
|
||||
enum xran_pkt_dir dir, uint8_t frame_id, uint8_t subframe_id, uint8_t slot_id,
|
||||
uint8_t startsym, uint8_t numsym, uint16_t prb_start, uint16_t prb_num,int16_t iq_buffer_offset, int16_t iq_buffer_len,
|
||||
uint16_t beam_id, uint8_t cc_id, uint8_t ru_port_id, uint8_t comp_method, uint8_t iqWidth, uint8_t seq_id, uint8_t symInc);
|
||||
|
||||
int generate_cpmsg_prach(void *pHandle, struct xran_cp_gen_params *params, struct xran_section_gen_info *sect_geninfo, struct rte_mbuf *mbuf, struct xran_device_ctx *pxran_lib_ctx,
|
||||
uint8_t frame_id, uint8_t subframe_id, uint8_t slot_id,
|
||||
uint16_t beam_id, uint8_t cc_id, uint8_t prach_port_id, uint8_t seq_id);
|
||||
|
||||
struct xran_eaxcid_config *xran_get_conf_eAxC(void *pHandle);
|
||||
uint8_t xran_get_conf_prach_scs(void *pHandle);
|
||||
uint8_t xran_get_conf_fftsize(void *pHandle);
|
||||
uint8_t xran_get_conf_numerology(void *pHandle);
|
||||
uint8_t xran_get_conf_iqwidth(void *pHandle);
|
||||
uint8_t xran_get_conf_compmethod(void *pHandle);
|
||||
uint8_t xran_get_conf_num_bfweights(void *pHandle);
|
||||
|
||||
uint8_t xran_get_num_cc(void *pHandle);
|
||||
uint8_t xran_get_num_eAxc(void *pHandle);
|
||||
uint8_t xran_get_num_eAxcUl(void *pHandle);
|
||||
uint8_t xran_get_num_ant_elm(void *pHandle);
|
||||
enum xran_category xran_get_ru_category(void *pHandle);
|
||||
|
||||
struct xran_device_ctx *xran_dev_get_ctx(void);
|
||||
|
||||
int xran_register_cb_mbuf2ring(xran_ethdi_mbuf_send_fn mbuf_send_cp, xran_ethdi_mbuf_send_fn mbuf_send_up);
|
||||
|
||||
uint16_t xran_alloc_sectionid(void *pHandle, uint8_t dir, uint8_t cc_id, uint8_t ant_id, uint8_t slot_id);
|
||||
uint8_t xran_get_seqid(void *pHandle, uint8_t dir, uint8_t cc_id, uint8_t ant_id, uint8_t slot_id);
|
||||
int32_t ring_processing_func(void);
|
||||
int xran_init_prach(struct xran_fh_config* pConf, struct xran_device_ctx * p_xran_dev_ctx);
|
||||
void xran_updateSfnSecStart(void);
|
||||
uint32_t xran_slotid_convert(uint16_t slot_id, uint16_t dir);
|
||||
struct cb_elem_entry *xran_create_cb(XranSymCallbackFn cb_fn, void *cb_data);
|
||||
int xran_destroy_cb(struct cb_elem_entry * cb_elm);
|
||||
|
||||
uint16_t xran_map_ecpriRtcid_to_vf(int32_t dir, int32_t cc_id, int32_t ru_port_id);
|
||||
uint16_t xran_map_ecpriPcid_to_vf(int32_t dir, int32_t cc_id, int32_t ru_port_id);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
144
targets/ARCH/ORAN_FHI/lib/xran_compression.h
Normal file
@@ -0,0 +1,144 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2019 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/*!
|
||||
\file xran_compression.h
|
||||
\brief External API for compading with the use BFP algorithm.
|
||||
*/
|
||||
|
||||
#ifndef _XRAN_COMPRESSION_H_
|
||||
#define _XRAN_COMPRESSION_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*!
|
||||
\struct xranlib_compress_request
|
||||
\brief Request structure containing pointer to data and its length.
|
||||
*/
|
||||
struct xranlib_compress_request {
|
||||
int16_t *data_in; /*!< Pointer to data to compress. */
|
||||
int16_t numRBs; /*!< numRBs */
|
||||
int16_t numDataElements; /*!< number of elements in block process [UP: 24 i.e 12RE*2; CP: 16,32,64,128. i.e AntElm*2] */
|
||||
int16_t compMethod; /*!< Compression method */
|
||||
int16_t iqWidth; /*!< Bit size */
|
||||
int32_t len; /*!< Length of input buffer in bytes */
|
||||
};
|
||||
|
||||
/*!
|
||||
\struct xranlib_compress_response
|
||||
\brief Response structure containing pointer to data and its length.
|
||||
*/
|
||||
struct xranlib_compress_response {
|
||||
int8_t *data_out; /*!< Pointer to data after compression. */
|
||||
|
||||
int32_t len; /*!< Length of output data. */
|
||||
};
|
||||
|
||||
/*!
|
||||
\struct xranlib_decompress_request
|
||||
\brief Request structure containing pointer to data and its length.
|
||||
*/
|
||||
struct xranlib_decompress_request {
|
||||
int8_t *data_in; /*!< Pointer to data to decompress. */
|
||||
int16_t numRBs; /*!< numRBs */
|
||||
int16_t numDataElements; /*!< number of elements in block process [UP: 24 i.e 12RE*2; CP: 16,32,64,128. i.e AntElm*2] */
|
||||
int16_t compMethod; /*!< Compression method */
|
||||
int16_t iqWidth; /*!< Bit size */
|
||||
|
||||
int32_t len; /*!< Length of input data. */
|
||||
};
|
||||
|
||||
/*!
|
||||
\struct xranlib_decompress_response
|
||||
\brief Response structure containing pointer to data and its length.
|
||||
*/
|
||||
struct xranlib_decompress_response {
|
||||
int16_t *data_out; /*!< Pointer to data after decompression. */
|
||||
|
||||
int32_t len; /*!< Length of output data. */
|
||||
};
|
||||
|
||||
/*!
|
||||
\brief Report the version number for the xranlib_companding library.
|
||||
\param [in] version Pointer to a char buffer where the version string should be copied.
|
||||
\param [in] buffer_size The length of the string buffer, must be at least
|
||||
xranlib_SDK_VERSION_STRING_MAX_LEN characters.
|
||||
\return 0 if the version string was populated, otherwise -1.
|
||||
*/
|
||||
int16_t
|
||||
xranlib_companding_version(char *version, int buffer_size);
|
||||
|
||||
//! @{
|
||||
/*!
|
||||
\brief Compress functions - it converts a 16-bit linear PCM value to 8-bt A-law.
|
||||
\param [in] request Structure containing the input data and data length.
|
||||
\param [out] response Structure containing the output data and data length.
|
||||
\return 0 for success, -1 for error
|
||||
*/
|
||||
int32_t
|
||||
xranlib_compress(const struct xranlib_compress_request *request,
|
||||
struct xranlib_compress_response *response);
|
||||
int32_t
|
||||
xranlib_compress_sse(const struct xranlib_compress_request *request,
|
||||
struct xranlib_compress_response *response);
|
||||
int32_t
|
||||
xranlib_compress_avx2(const struct xranlib_compress_request *request,
|
||||
struct xranlib_compress_response *response);
|
||||
int32_t
|
||||
xranlib_compress_avx512(const struct xranlib_compress_request *request,
|
||||
struct xranlib_compress_response *response);
|
||||
int32_t
|
||||
xranlib_compress_avx512_bfw(const struct xranlib_compress_request *request,
|
||||
struct xranlib_compress_response *response);
|
||||
//! @}
|
||||
|
||||
//! @{
|
||||
/*!
|
||||
\brief Decompress function - it converts an A-law value to 16-bit linear PCM.
|
||||
\param [in] request Structure containing the input data and data length.
|
||||
\param [out] response Structure containing the output data and data length.
|
||||
\return 0 for success, -1 for error.
|
||||
**/
|
||||
int32_t
|
||||
xranlib_decompress(const struct xranlib_decompress_request *request,
|
||||
struct xranlib_decompress_response *response);
|
||||
|
||||
int32_t
|
||||
xranlib_decompress_sse(const struct xranlib_decompress_request *request,
|
||||
struct xranlib_decompress_response *response);
|
||||
int32_t
|
||||
xranlib_decompress_avx2(const struct xranlib_decompress_request *request,
|
||||
struct xranlib_decompress_response *response);
|
||||
int32_t
|
||||
xranlib_decompress_avx512(const struct xranlib_decompress_request *request,
|
||||
struct xranlib_decompress_response *response);
|
||||
int32_t
|
||||
xranlib_decompress_avx512_bfw(const struct xranlib_decompress_request *request,
|
||||
struct xranlib_decompress_response *response);
|
||||
|
||||
//! @}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _XRAN_COMPRESSION_H_ */
|
||||
117
targets/ARCH/ORAN_FHI/lib/xran_compression.hpp
Normal file
@@ -0,0 +1,117 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2019 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#pragma once
|
||||
#include <stdint.h>
|
||||
#include <immintrin.h>
|
||||
|
||||
// This configuration file sets global constants and macros which are
|
||||
// of general use throughout the project.
|
||||
|
||||
// All current IA processors of interest align their cache lines on
|
||||
// this boundary. If the cache alignment for future processors changes
|
||||
// then the most restrictive alignment should be set.
|
||||
constexpr unsigned k_cacheByteAlignment = 64;
|
||||
|
||||
// Force the data to which this macro is applied to be aligned on a cache line.
|
||||
// For example:
|
||||
//
|
||||
// CACHE_ALIGNED float data[64];
|
||||
#define CACHE_ALIGNED alignas(k_cacheByteAlignment)
|
||||
|
||||
// Hint to the compiler that the data to which this macro is applied
|
||||
// can be assumed to be aligned to a cache line. This allows the
|
||||
// compiler to generate improved code by using aligned reads and
|
||||
// writes.
|
||||
#define ASSUME_CACHE_ALIGNED(data)
|
||||
// __assume_aligned(data, k_cacheByteAlignment);
|
||||
|
||||
/// Intel compiler frequently complains about templates not being declared in an external
|
||||
/// header. Templates are used throughout this project's source files to define local type-specific
|
||||
/// versions of functions. Defining every one of these in a header is unnecessary, so the warnings
|
||||
/// about this are turned off globally.
|
||||
#pragma warning(disable:1418)
|
||||
#pragma warning(disable:1419)
|
||||
|
||||
|
||||
namespace BlockFloatCompander
|
||||
{
|
||||
/// Compute 32 RB at a time
|
||||
static constexpr int k_numBitsIQ = 16;
|
||||
static constexpr int k_numBitsIQPair = 2 * k_numBitsIQ;
|
||||
static constexpr int k_maxNumBlocks = 16;
|
||||
static constexpr int k_maxNumElements = 128;
|
||||
static constexpr int k_numSampsExpanded = k_maxNumBlocks * k_maxNumElements;
|
||||
static constexpr int k_numSampsCompressed = (k_numSampsExpanded * 2) + k_maxNumBlocks;
|
||||
|
||||
struct CompressedData
|
||||
{
|
||||
/// Compressed data
|
||||
CACHE_ALIGNED uint8_t dataCompressedDataOut[k_numSampsCompressed];
|
||||
CACHE_ALIGNED uint8_t *dataCompressed;
|
||||
/// Size of mantissa including sign bit
|
||||
int iqWidth;
|
||||
|
||||
/// Number of BFP blocks in message
|
||||
int numBlocks;
|
||||
|
||||
/// Number of data elements per compression block (only required for reference function)
|
||||
int numDataElements;
|
||||
};
|
||||
|
||||
struct ExpandedData
|
||||
{
|
||||
/// Expanded data or input data to compressor
|
||||
CACHE_ALIGNED int16_t dataExpandedIn[k_numSampsExpanded];
|
||||
CACHE_ALIGNED int16_t *dataExpanded;
|
||||
|
||||
/// Size of mantissa including sign bit
|
||||
int iqWidth;
|
||||
|
||||
/// Number of BFP blocks in message
|
||||
int numBlocks;
|
||||
|
||||
/// Number of data elements per compression block (only required for reference function)
|
||||
int numDataElements;
|
||||
};
|
||||
|
||||
/// Reference compression and expansion functions
|
||||
void BFPCompressRef(const ExpandedData& dataIn, CompressedData* dataOut);
|
||||
void BFPExpandRef(const CompressedData& dataIn, ExpandedData* dataOut);
|
||||
|
||||
/// User-Plane specific compression and expansion functions
|
||||
void BFPCompressUserPlaneAvx512(const ExpandedData& dataIn, CompressedData* dataOut);
|
||||
void BFPExpandUserPlaneAvx512(const CompressedData& dataIn, ExpandedData* dataOut);
|
||||
|
||||
/// Control-Plane specific compression and expansion functions for 8 antennas
|
||||
void BFPCompressCtrlPlane8Avx512(const ExpandedData& dataIn, CompressedData* dataOut);
|
||||
void BFPExpandCtrlPlane8Avx512(const CompressedData& dataIn, ExpandedData* dataOut);
|
||||
|
||||
/// Control-Plane specific compression and expansion functions for 16 antennas
|
||||
void BFPCompressCtrlPlane16Avx512(const ExpandedData& dataIn, CompressedData* dataOut);
|
||||
void BFPExpandCtrlPlane16Avx512(const CompressedData& dataIn, ExpandedData* dataOut);
|
||||
|
||||
/// Control-Plane specific compression and expansion functions for 32 antennas
|
||||
void BFPCompressCtrlPlane32Avx512(const ExpandedData& dataIn, CompressedData* dataOut);
|
||||
void BFPExpandCtrlPlane32Avx512(const CompressedData& dataIn, ExpandedData* dataOut);
|
||||
|
||||
/// Control-Plane specific compression and expansion functions for 64 antennas
|
||||
void BFPCompressCtrlPlane64Avx512(const ExpandedData& dataIn, CompressedData* dataOut);
|
||||
void BFPExpandCtrlPlane64Avx512(const CompressedData& dataIn, ExpandedData* dataOut);
|
||||
}
|
||||
|
||||
408
targets/ARCH/ORAN_FHI/lib/xran_cp_api.h
Normal file
@@ -0,0 +1,408 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2019 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This file provides the definitions for Control Plane Messages APIs.
|
||||
*
|
||||
* @file xran_cp_api.h
|
||||
* @ingroup group_lte_source_xran
|
||||
* @author Intel Corporation
|
||||
*
|
||||
**/
|
||||
|
||||
#ifndef _XRAN_CP_API_H_
|
||||
#define _XRAN_CP_API_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include "xran_fh_o_du.h"
|
||||
#include "xran_pkt_cp.h"
|
||||
#include "xran_transport.h"
|
||||
|
||||
#define XRAN_MAX_SECTIONDB_CTX 2
|
||||
|
||||
#define XRAN_MAX_NUM_EXTENSIONS XRAN_MAX_PRBS /* Maximum number of extensions in a section [up to 1 ext section per RB]*/
|
||||
#define XRAN_MAX_NUM_UE 16 /* Maximum number of UEs/Lyaers */
|
||||
#define XRAN_MAX_NUM_ANT_BF 64 /* Maximum number of beamforming antenna,
|
||||
* could be defined as XRAN_MAX_ANTENNA_NR */
|
||||
/* Maximum total number of beamforming weights (5.4.7.1.2) */
|
||||
#define XRAN_MAX_BFW_N (XRAN_MAX_NUM_ANT_BF*XRAN_MAX_NUM_UE)
|
||||
#define XRAN_MAX_MODCOMP_ADDPARMS 6 /* max should be even number */
|
||||
|
||||
#define XRAN_SECTIONEXT_ALIGN 4 /* alignment size in byte for section extension */
|
||||
|
||||
|
||||
/** Control Plane section types, defined in 5.4 Table 5.1 */
|
||||
enum xran_cp_sectiontype {
|
||||
XRAN_CP_SECTIONTYPE_0 = 0, /**< Unused RB or Symbols in DL or UL, not supported */
|
||||
XRAN_CP_SECTIONTYPE_1 = 1, /**< Most DL/UL Radio Channels */
|
||||
XRAN_CP_SECTIONTYPE_3 = 3, /**< PRACH and Mixed-numerology Channels */
|
||||
XRAN_CP_SECTIONTYPE_5 = 5, /**< UE scheduling information, not supported */
|
||||
XRAN_CP_SECTIONTYPE_6 = 6, /**< Channel Information, not supported */
|
||||
XRAN_CP_SECTIONTYPE_7 = 7, /**< LAA, not supported */
|
||||
XRAN_CP_SECTIONTYPE_MAX
|
||||
};
|
||||
|
||||
/** Filter index, defined in 5.4.4.3 */
|
||||
enum xran_cp_filterindex {
|
||||
XRAN_FILTERINDEX_STANDARD = 0, /**< UL filter for standard channel */
|
||||
XRAN_FILTERINDEX_PRACH_012 = 1, /**< UL filter for PRACH preamble format 0, 1, 2 */
|
||||
XRAN_FILTERINDEX_PRACH_3 = 2, /**< UL filter for PRACH preamble format 3 */
|
||||
XRAN_FILTERINDEX_PRACH_ABC = 3, /**< UL filter for PRACH preamble format A1~3, B1~4, C0, C2 */
|
||||
XRAN_FILTERINDEX_NPRACH = 4, /**< UL filter for NPRACH */
|
||||
XRAN_FILTERINDEX_MAX
|
||||
};
|
||||
|
||||
/** Maximum Slot Index, defined in 5.4.4.6 */
|
||||
#define XRAN_SLOTID_MAX 16
|
||||
|
||||
/** FFT size in frame structure, defined in 5.4.4.13 Table 5.9 */
|
||||
enum xran_cp_fftsize {
|
||||
XRAN_FFTSIZE_128 = 7, /* 128 */
|
||||
XRAN_FFTSIZE_256 = 8, /* 256 */
|
||||
XRAN_FFTSIZE_512 = 9, /* 512 */
|
||||
XRAN_FFTSIZE_1024 = 10, /* 1024 */
|
||||
XRAN_FFTSIZE_2048 = 11, /* 2048 */
|
||||
XRAN_FFTSIZE_4096 = 12, /* 4096 */
|
||||
XRAN_FFTSIZE_1536 = 13, /* 1536 */
|
||||
XRAN_FFTSIZE_MAX
|
||||
};
|
||||
|
||||
/** Sub-carrier spacing, defined in 5.4.4.13 Table 5.10 */
|
||||
enum xran_cp_subcarrierspacing { /*3GPP u, SCS, Nslot, Slot len */
|
||||
XRAN_SCS_15KHZ = 0, /* 0, 15kHz, 1, 1ms */
|
||||
XRAN_SCS_30KHZ = 1, /* 1, 30kHz, 2, 500us */
|
||||
XRAN_SCS_60KHZ = 2, /* 2, 60kHz, 4, 250us */
|
||||
XRAN_SCS_120KHZ = 3, /* 3, 120kHz, 8, 125us */
|
||||
XRAN_SCS_240KHZ = 4, /* 4, 240kHz, 16, 62.5us */
|
||||
XRAN_SCS_1P25KHZ = 12, /* NA, 1.25kHz, 1, 1ms */
|
||||
XRAN_SCS_3P75KHZ = 13, /* NA, 3.75kHz, 1, 1ms */
|
||||
XRAN_SCS_5KHZ = 14, /* NA, 5kHz, 1, 1ms */
|
||||
XRAN_SCS_7P5KHZ = 15, /* NA, 7.5kHz, 1, 1ms */
|
||||
XRAN_SCS_MAX
|
||||
};
|
||||
|
||||
/** Resource block indicator, defined in 5.4.5.2 */
|
||||
enum xran_cp_rbindicator {
|
||||
XRAN_RBIND_EVERY = 0, /**< every RB used */
|
||||
XRAN_RBIND_EVERYOTHER = 1, /**< every other RB used */
|
||||
XRAN_RBIND_MAX
|
||||
};
|
||||
|
||||
/** Symbol number increment command, defined in 5.4.5.3 */
|
||||
enum xran_cp_symbolnuminc {
|
||||
XRAN_SYMBOLNUMBER_NOTINC = 0, /**< do not increment the current symbol number */
|
||||
XRAN_SYMBOLNUMBER_INC = 1, /**< increment the current symbol number and use that */
|
||||
XRAN_SYMBOLNUMBER_INC_MAX
|
||||
};
|
||||
|
||||
/** Macro to convert the number of PRBs as defined in 5.4.5.6 */
|
||||
#define XRAN_CONVERT_NUMPRBC(x) ((x) > 255 ? 0 : (x))
|
||||
|
||||
#define XRAN_CONVERT_IQWIDTH(x) ((x) > 15 ? 0 : (x))
|
||||
|
||||
/** Minimum number of symbols, defined in 5.4.5.7 */
|
||||
#define XRAN_SYMBOLNUMBER_MIN 1
|
||||
/** Maximum number of symbols, defined in 5.4.5.7 */
|
||||
#define XRAN_SYMBOLNUMBER_MAX 14
|
||||
|
||||
/* LAA message type 5.4.5.14 Table 5.11, not supported */
|
||||
#define XRAN_LAAMSGTYPE_LBT_PDSCH_REQ 0
|
||||
#define XRAN_LAAMSGTYPE_LBT_DRS_REQ 1
|
||||
#define XRAN_LAAMSGTYPE_LBT_PDSCH_RSP 2
|
||||
#define XRAN_LAAMSGTYPE_LBT_DRS_RSP 3
|
||||
#define XRAN_LAAMSGTYPE_LBT_BUFFER_ERROR 4
|
||||
#define XRAN_LAAMSGTYPE_LBT_CWCONFIG_REQ 5
|
||||
#define XRAN_LAAMSGTYPE_LBT_CWCONFIG_RSP 6
|
||||
|
||||
#define XRAN_LBTMODE_FULL 0
|
||||
#define XRAN_LBTMODE_PARTIAL25 1
|
||||
#define XRAN_LBTMODE_PARTIAL34 2
|
||||
#define XRAN_LBTMODE_FULLSTOP 3
|
||||
|
||||
|
||||
#define XRAN_EF_F_LAST 0
|
||||
#define XRAN_EF_F_ANOTHER_ONE 1
|
||||
|
||||
/** Control Plane section extension commands, defined in 5.4.6 Table 5.13 */
|
||||
enum xran_cp_sectionextcmd {
|
||||
XRAN_CP_SECTIONEXTCMD_0 = 0, /**< Reserved, for future use */
|
||||
XRAN_CP_SECTIONEXTCMD_1 = 1, /**< Beamforming weights */
|
||||
XRAN_CP_SECTIONEXTCMD_2 = 2, /**< Beamforming attributes */
|
||||
XRAN_CP_SECTIONEXTCMD_3 = 3, /**< DL Precoding configuration parameters and indications, not supported */
|
||||
XRAN_CP_SECTIONEXTCMD_4 = 4, /**< Modulation compression parameter */
|
||||
XRAN_CP_SECTIONEXTCMD_5 = 5, /**< Modulation compression additional scaling parameters */
|
||||
XRAN_CP_SECTIONEXTCMD_MAX /* 6~127 reserved for future use */
|
||||
};
|
||||
|
||||
/** Macro to convert bfwIqWidth defined in 5.4.7.1.1, Table 5-15 */
|
||||
#define XRAN_CONVERT_BFWIQWIDTH(x) ((x) > 15 ? 0 : (x))
|
||||
|
||||
/** Beamforming Weights Compression Method 5.4.7.1.1, Table 5-16 */
|
||||
enum xran_cp_bfw_compression_method {
|
||||
XRAN_BFWCOMPMETHOD_NONE = 0, /**< Uncopressed I/Q value */
|
||||
XRAN_BFWCOMPMETHOD_BLKFLOAT = 1, /**< I/Q mantissa value */
|
||||
XRAN_BFWCOMPMETHOD_BLKSCALE = 2, /**< I/Q scaled value */
|
||||
XRAN_BFWCOMPMETHOD_ULAW = 3, /**< compressed I/Q value */
|
||||
XRAN_BFWCOMPMETHOD_BEAMSPACE = 4, /**< beamspace I/Q coefficient */
|
||||
XRAN_BFWCOMPMETHOD_MAX /* reserved for future methods */
|
||||
};
|
||||
|
||||
/** Beamforming Attributes Bitwidth 5.4.7.2.1 */
|
||||
enum xran_cp_bfa_bitwidth {
|
||||
XRAN_BFABITWIDTH_NO = 0, /**< the filed is no applicable or the default value shall be used */
|
||||
XRAN_BFABITWIDTH_2BIT = 1, /**< the filed is 2-bit bitwidth */
|
||||
XRAN_BFABITWIDTH_3BIT = 2, /**< the filed is 3-bit bitwidth */
|
||||
XRAN_BFABITWIDTH_4BIT = 3, /**< the filed is 4-bit bitwidth */
|
||||
XRAN_BFABITWIDTH_5BIT = 4, /**< the filed is 5-bit bitwidth */
|
||||
XRAN_BFABITWIDTH_6BIT = 5, /**< the filed is 6-bit bitwidth */
|
||||
XRAN_BFABITWIDTH_7BIT = 6, /**< the filed is 7-bit bitwidth */
|
||||
XRAN_BFABITWIDTH_8BIT = 7, /**< the filed is 8-bit bitwidth */
|
||||
};
|
||||
|
||||
/** Layer ID for DL transmission in TM1-TM4 5.4.7.3.2 */
|
||||
#define XRAN_LAYERID_0 0 /**< Layer 0 */
|
||||
#define XRAN_LAYERID_1 1 /**< Layer 1 */
|
||||
#define XRAN_LAYERID_2 2 /**< Layer 2 */
|
||||
#define XRAN_LAYERID_3 3 /**< Layer 3 */
|
||||
#define XRAN_LAYERID_TXD 0xf /**< TxD */
|
||||
|
||||
/** LTE Transmission Scheme for section extension type 3 5.4.7.3.3 */
|
||||
#define XRAN_TXS_SMUXCDD 0 /**< Spatial Multiplexing (CDD) */
|
||||
#define XRAN_TXS_SMUXNOCDD 1 /**< Spatial Multiplexing (no CDD) */
|
||||
#define XRAN_TXS_TXDIV 2 /**< Transmit diversity */
|
||||
|
||||
|
||||
/**
|
||||
* This structure contains the information to generate the section body of C-Plane message */
|
||||
struct xran_section_info {
|
||||
uint8_t type; /* type of this section */
|
||||
/* section type bit- */
|
||||
/* 0 1 3 5 6 7 length */
|
||||
uint8_t startSymId; /* X X X X X X 4bits */
|
||||
uint8_t numSymbol; /* X X X X 4bits */
|
||||
uint8_t symInc; /* X X X X X 1bit */
|
||||
uint16_t id; /* X X X X X 12bits */
|
||||
uint16_t reMask; /* X X X X 12bits */
|
||||
uint16_t startPrbc; /* X X X X X 10bits */
|
||||
uint16_t numPrbc; /* X X X X X 8bits */ /* will be converted to zero if >255 */
|
||||
uint8_t rb; /* X X X X X 1bit */
|
||||
uint8_t compMeth; /* X X X 4bits */
|
||||
uint8_t iqWidth; /* X X X 4bits */
|
||||
uint8_t ef; /* X X X X 1bit */
|
||||
int32_t freqOffset; /* X 24bits */
|
||||
uint16_t beamId; /* X X 15bits */
|
||||
uint16_t ueId; /* X X 15bits */
|
||||
uint16_t regFactor; /* X 16bits */
|
||||
uint16_t pad0;
|
||||
/** for U-plane */
|
||||
struct xran_section_desc sec_desc[XRAN_NUM_OF_SYMBOL_PER_SLOT];
|
||||
};
|
||||
|
||||
|
||||
struct xran_sectionext1_info {
|
||||
uint16_t rbNumber; /**< number RBs to ext1 chain */
|
||||
uint16_t bfwNumber; /**< number of bf weights in this section */
|
||||
uint8_t bfwiqWidth;
|
||||
uint8_t bfwCompMeth;
|
||||
int16_t *p_bfwIQ; /**< pointer to formed section extention */
|
||||
int16_t bfwIQ_sz; /**< size of buffer with section extention information */
|
||||
union {
|
||||
uint8_t exponent;
|
||||
uint8_t blockScaler;
|
||||
uint8_t compBitWidthShift;
|
||||
uint8_t activeBeamspaceCoeffMask[XRAN_MAX_BFW_N]; /* ceil(N/8)*8, should be multiple of 8 */
|
||||
} bfwCompParam;
|
||||
};
|
||||
|
||||
struct xran_sectionext2_info {
|
||||
uint8_t bfAzPtWidth; /* beamforming zenith beamwidth parameter */
|
||||
uint8_t bfAzPt;
|
||||
uint8_t bfZePtWidth; /* beamforming azimuth beamwidth parameter */
|
||||
uint8_t bfZePt;
|
||||
uint8_t bfAz3ddWidth; /* beamforming zenith pointing parameter */
|
||||
uint8_t bfAz3dd;
|
||||
uint8_t bfZe3ddWidth; /* beamforming azimuth pointing parameter */
|
||||
uint8_t bfZe3dd;
|
||||
|
||||
uint8_t bfAzSI;
|
||||
uint8_t bfZeSI;
|
||||
};
|
||||
|
||||
struct xran_sectionext3_info {
|
||||
uint8_t codebookIdx;
|
||||
uint8_t layerId;
|
||||
uint8_t numLayers;
|
||||
uint8_t txScheme;
|
||||
uint16_t crsReMask;
|
||||
uint8_t crsShift;
|
||||
uint8_t crsSymNum;
|
||||
uint16_t numAntPort; /* number of antenna port - 2 or 4 */
|
||||
uint16_t beamIdAP1;
|
||||
uint16_t beamIdAP2;
|
||||
uint16_t beamIdAP3;
|
||||
};
|
||||
|
||||
struct xran_sectionext4_info {
|
||||
uint8_t csf;
|
||||
uint8_t pad0;
|
||||
uint16_t modCompScaler;
|
||||
};
|
||||
|
||||
struct xran_sectionext5_info {
|
||||
uint8_t num_sets;
|
||||
struct {
|
||||
uint16_t csf;
|
||||
uint16_t mcScaleReMask;
|
||||
uint16_t mcScaleOffset;
|
||||
} mc[XRAN_MAX_MODCOMP_ADDPARMS];
|
||||
};
|
||||
|
||||
struct xran_sectionext_info {
|
||||
uint16_t type;
|
||||
uint16_t len;
|
||||
void *data;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* This structure contains the information to generate the section header of C-Plane message */
|
||||
struct xran_cp_header_params {
|
||||
// common parameters
|
||||
uint8_t filterIdx;
|
||||
uint8_t frameId;
|
||||
uint8_t subframeId;
|
||||
uint8_t slotId;
|
||||
uint8_t startSymId;
|
||||
/* section type bit- */
|
||||
/* 0 1 3 5 6 7 length */
|
||||
uint8_t fftSize; /* X X 4bits */
|
||||
uint8_t scs; /* X X 4bits */
|
||||
uint8_t iqWidth; /* X X X 4bits */
|
||||
uint8_t compMeth; /* X X X 4bits */
|
||||
uint8_t numUEs; /* X 8bits */
|
||||
uint16_t timeOffset; /* X X 16bits */
|
||||
uint16_t cpLength; /* X X 16bits */
|
||||
};
|
||||
|
||||
/** The structure for the generation of section extension */
|
||||
struct xran_section_ext_gen_info {
|
||||
uint16_t type; /**< the type of section extension */
|
||||
uint16_t len; /**< length of extension data */
|
||||
void *data; /**< pointer to extension data */
|
||||
};
|
||||
|
||||
/**
|
||||
* This structure to hold the information to generate the sections of C-Plane message */
|
||||
struct xran_section_gen_info {
|
||||
struct xran_section_info info; /**< The information for section */
|
||||
|
||||
uint32_t exDataSize; /**< The number of Extensions or type 6/7 data */
|
||||
/** the array to store section extension */
|
||||
struct xran_section_ext_gen_info exData[XRAN_MAX_NUM_EXTENSIONS];
|
||||
|
||||
struct xran_sectionext1_info m_ext1[XRAN_MAX_NUM_EXTENSIONS];
|
||||
struct xran_sectionext2_info m_ext2[XRAN_MAX_NUM_EXTENSIONS];
|
||||
struct xran_sectionext3_info m_ext3[XRAN_MAX_NUM_EXTENSIONS];
|
||||
struct xran_sectionext4_info m_ext4[XRAN_MAX_NUM_EXTENSIONS];
|
||||
struct xran_sectionext5_info m_ext5[XRAN_MAX_NUM_EXTENSIONS];
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* This structure to hold the information to generate a C-Plane message */
|
||||
struct xran_cp_gen_params {
|
||||
uint8_t dir; /**< UL or DL */
|
||||
uint8_t sectionType; /**< each section must have same type with this */
|
||||
uint16_t numSections; /**< the number of sections to generate */
|
||||
|
||||
struct xran_cp_header_params hdr;
|
||||
/**< The information for C-Plane message header */
|
||||
struct xran_section_gen_info *sections;
|
||||
/**< Array of the section information */
|
||||
};
|
||||
|
||||
/**
|
||||
* This structure to hold the information of RB allocation from PHY
|
||||
* to send data for allocated RBs only. */
|
||||
struct xran_cp_rbmap_list {
|
||||
uint16_t grp_id; /**< group id for this entry, reserved for future use */
|
||||
|
||||
uint8_t sym_start; /**< Start symbol ID */
|
||||
uint8_t sym_num; /**< Number of symbols */
|
||||
|
||||
uint16_t rb_start; /**< Start RB position */
|
||||
uint16_t rb_num; /**< Number of RBs */
|
||||
|
||||
int16_t iq_buff_offset; /**< Offset within Sym for start of IQs */
|
||||
int16_t iq_buff_len; /**< length IQs */
|
||||
|
||||
uint16_t beam_id; /**< Bean Index */
|
||||
uint8_t iqWidth; /**< I and Q width in bits */
|
||||
uint8_t comp_meth; /**< Compression method */
|
||||
uint8_t pad0;
|
||||
};
|
||||
|
||||
|
||||
uint16_t xran_get_cplength(int cpLength);
|
||||
int32_t xran_get_freqoffset(int freqOffset, int scs);
|
||||
|
||||
int32_t xran_prepare_ctrl_pkt(struct rte_mbuf *mbuf,
|
||||
struct xran_cp_gen_params *params,
|
||||
uint8_t CC_ID, uint8_t Ant_ID,
|
||||
uint8_t seq_id);
|
||||
|
||||
int32_t xran_parse_cp_pkt(struct rte_mbuf *mbuf,
|
||||
struct xran_cp_gen_params *result,
|
||||
struct xran_recv_packet_info *pkt_info);
|
||||
|
||||
int32_t xran_cp_init_sectiondb(void *pHandle);
|
||||
int32_t xran_cp_free_sectiondb(void *pHandle);
|
||||
int32_t xran_cp_add_section_info(void *pHandle,
|
||||
uint8_t dir, uint8_t cc_id, uint8_t ruport_id,
|
||||
uint8_t ctx_id, struct xran_section_info *info);
|
||||
int32_t xran_cp_add_multisection_info(void *pHandle,
|
||||
uint8_t cc_id, uint8_t ruport_id, uint8_t ctx_id,
|
||||
struct xran_cp_gen_params *gen_info);
|
||||
struct xran_section_info *xran_cp_find_section_info(void *pHandle,
|
||||
uint8_t dir, uint8_t cc_id, uint8_t ruport_id,
|
||||
uint8_t ctx_id, uint16_t section_id);
|
||||
struct xran_section_info *xran_cp_iterate_section_info(void *pHandle,
|
||||
uint8_t dir, uint8_t cc_id, uint8_t ruport_id,
|
||||
uint8_t ctx_id, uint32_t *next);
|
||||
|
||||
int xran_cp_getsize_section_info(void *pHandle, uint8_t dir, uint8_t cc_id, uint8_t ruport_id, uint8_t ctx_id);
|
||||
int xran_cp_reset_section_info(void *pHandle, uint8_t dir, uint8_t cc_id, uint8_t ruport_id, uint8_t ctx_id);
|
||||
int32_t xran_cp_populate_section_ext_1(int8_t *p_ext1_dst, /**< destination buffer */
|
||||
uint16_t ext1_dst_len, /**< dest buffer size */
|
||||
int16_t *p_bfw_iq_src, /**< source buffer of IQs */
|
||||
uint16_t rbNumber, /**< number RBs to ext1 chain */
|
||||
uint16_t bfwNumber, /**< number of bf weights in this set of sections */
|
||||
uint8_t bfwiqWidth, /**< bit size of IQs */
|
||||
uint8_t bfwCompMeth); /**< compression method */
|
||||
struct rte_mbuf *xran_attach_cp_ext_buf(int8_t* p_ext_buff_start, int8_t* p_ext_buff, uint16_t ext_buff_len,
|
||||
struct rte_mbuf_ext_shared_info * p_share_data);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _XRAN_CP_API_H_ */
|
||||
1096
targets/ARCH/ORAN_FHI/lib/xran_fh_o_du.h
Normal file
84
targets/ARCH/ORAN_FHI/lib/xran_frame_struct.h
Normal file
@@ -0,0 +1,84 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2019 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
/**
|
||||
* @brief Header file for function to work with 5G NR frame structure and related
|
||||
* routines
|
||||
* @file xran_frame_struct.h
|
||||
* @ingroup group_source_xran
|
||||
* @author Intel Corporation
|
||||
**/
|
||||
|
||||
#ifndef _XRAN_FRAME_STRUCT_
|
||||
#define _XRAN_FRAME_STRUCT_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include "xran_fh_o_du.h"
|
||||
|
||||
uint32_t xran_fs_get_tti_interval(uint8_t nMu);
|
||||
uint32_t xran_fs_get_scs(uint8_t nMu);
|
||||
|
||||
//-------------------------------------------------------------------------------------------
|
||||
/** @ingroup group_nr5g_source_phy_common
|
||||
*
|
||||
* @param[in] nNumerology - Numerology determine sub carrier spacing, Value: 0->4 0: 15khz, 1: 30khz, 2: 60khz 3: 120khz, 4: 240khz
|
||||
* @param[in] nBandwidth - Carrier bandwidth for in MHz. Value: 5->400
|
||||
* @param[in] nAbsFrePointA - Abs Freq Point A of the Carrier Center Frequency for in KHz Value: 450000->52600000
|
||||
*
|
||||
* @return Number of RBs in cell
|
||||
*
|
||||
* @description
|
||||
* Returns number of RBs based on 38.101-1 and 38.101-2 for the cell
|
||||
*
|
||||
**/
|
||||
//-------------------------------------------------------------------------------------------
|
||||
uint16_t xran_fs_get_num_rbs(uint32_t nNumerology, uint32_t nBandwidth, uint32_t nAbsFrePointA);
|
||||
|
||||
//-------------------------------------------------------------------------------------------
|
||||
/** @ingroup phy_cal_nrarfcn
|
||||
*
|
||||
* @param[in] center frequency
|
||||
*
|
||||
* @return NR-ARFCN
|
||||
*
|
||||
* @description
|
||||
* This calculates NR-ARFCN value according to center frequency
|
||||
*
|
||||
**/
|
||||
//-------------------------------------------------------------------------------------------
|
||||
uint32_t xran_fs_cal_nrarfcn(uint32_t nCenterFreq);
|
||||
int32_t xran_fs_slot_limit(int32_t nSlotIdx);
|
||||
void xran_fs_clear_slot_type(uint32_t nCcId);
|
||||
int32_t xran_fs_set_slot_type(uint32_t nCcId, uint32_t nFrameDuplexType, uint32_t nTddPeriod, struct xran_slot_config* psSlotConfig);
|
||||
int32_t xran_fs_get_slot_type(int32_t nCcId, int32_t nSlotIdx, int32_t nType);
|
||||
uint32_t xran_fs_slot_limit_init(int32_t tti_interval_us);
|
||||
uint32_t xran_fs_get_max_slot(void);
|
||||
uint32_t xran_fs_get_max_slot_SFN(void);
|
||||
int32_t xran_fs_get_symbol_type(int32_t nCellIdx, int32_t nSlotdx, int32_t nSymbIdx);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _XRAN_FRAME_STRUCT_ */
|
||||
|
||||
119
targets/ARCH/ORAN_FHI/lib/xran_lib_mlog_tasks_id.h
Normal file
@@ -0,0 +1,119 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2019 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This file has the System Debug Trace Logger (Mlog) Task IDs used by XRAN library
|
||||
* @file mlog_task_id.h
|
||||
* @ingroup group_lte_source_common
|
||||
* @author Intel Corporation
|
||||
**/
|
||||
|
||||
#ifndef _XRAN_TASK_ID_H_
|
||||
#define _XRAN_TASK_ID_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define RESOURCE_CORE_0 0
|
||||
#define RESOURCE_CORE_1 1
|
||||
#define RESOURCE_CORE_2 2
|
||||
#define RESOURCE_CORE_3 3
|
||||
#define RESOURCE_CORE_4 4
|
||||
#define RESOURCE_CORE_5 5
|
||||
#define RESOURCE_CORE_6 6
|
||||
#define RESOURCE_CORE_7 7
|
||||
#define RESOURCE_CORE_8 8
|
||||
#define RESOURCE_CORE_9 9
|
||||
#define RESOURCE_CORE_10 10
|
||||
#define RESOURCE_CORE_11 11
|
||||
#define RESOURCE_CORE_12 12
|
||||
#define RESOURCE_CORE_13 13
|
||||
#define RESOURCE_CORE_14 14
|
||||
#define RESOURCE_CORE_15 15
|
||||
#define RESOURCE_CORE_16 16
|
||||
|
||||
#define RESOURCE_IA_CORE 100
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// XRAN
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// POLLING
|
||||
//--------------------------------------------------------------------
|
||||
#define PID_XRAN_BBDEV_DL_POLL 51
|
||||
#define PID_XRAN_BBDEV_DL_POLL_DISPATCH 52
|
||||
#define PID_XRAN_BBDEV_UL_POLL 53
|
||||
#define PID_XRAN_BBDEV_UL_POLL_DISPATCH 54
|
||||
|
||||
#define PID_TTI_TIMER 2100
|
||||
#define PID_TTI_CB 2101
|
||||
|
||||
#define PID_SYM_TIMER 2102
|
||||
#define PID_GNB_PROC_TIMING_TIMEOUT 2103
|
||||
|
||||
#define PID_TIME_SYSTIME_POLL 2104
|
||||
#define PID_TIME_SYSTIME_STOP 2105
|
||||
#define PID_TIME_ARM_TIMER 2106
|
||||
#define PID_TIME_ARM_TIMER_DEADLINE 2107
|
||||
|
||||
|
||||
|
||||
#define PID_RADIO_FREQ_RX_PKT 2400
|
||||
#define PID_RADIO_RX_STOP 2401
|
||||
#define PID_RADIO_RX_UL_IQ 2402
|
||||
#define PID_RADIO_PRACH_PKT 2403
|
||||
#define PID_RADIO_FE_COMPRESS 2404
|
||||
#define PID_RADIO_FE_DECOMPRESS 2405
|
||||
#define PID_RADIO_TX_BYPASS_PROC 2406
|
||||
#define PID_RADIO_ETH_TX_BURST 2407
|
||||
#define PID_RADIO_TX_DL_IQ 2408
|
||||
#define PID_RADIO_RX_VALIDATE 2409
|
||||
|
||||
#define PID_RADIO_RX_IRQ_ON 2410
|
||||
#define PID_RADIO_RX_IRQ_OFF 2411
|
||||
#define PID_RADIO_RX_EPOLL_WAIT 2412
|
||||
|
||||
#define PID_RADIO_TX_LTEMODE_PROC 2413
|
||||
#define PID_RADIO_RX_LTEMODE_PROC 2414
|
||||
|
||||
#define PID_RADIO_TX_PLAY_BACK_IQ 2415
|
||||
|
||||
#define PID_PROCESS_TX_SYM 2416
|
||||
|
||||
#define PID_CP_DL_CB 2500
|
||||
#define PID_CP_UL_CB 2501
|
||||
#define PID_UP_DL_CB 2502
|
||||
#define PID_SYM_OTA_CB 2503
|
||||
#define PID_TTI_CB_TO_PHY 2504
|
||||
#define PID_HALF_SLOT_CB_TO_PHY 2505
|
||||
#define PID_FULL_SLOT_CB_TO_PHY 2506
|
||||
#define PID_UP_UL_HALF_DEAD_LINE_CB 2507
|
||||
#define PID_UP_UL_FULL_DEAD_LINE_CB 2508
|
||||
|
||||
#define PID_PROCESS_UP_PKT 2600
|
||||
#define PID_PROCESS_CP_PKT 2700
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _XRAN_TASK_ID_H_ */
|
||||
|
||||
62
targets/ARCH/ORAN_FHI/lib/xran_mlog_lnx.h
Normal file
@@ -0,0 +1,62 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2019 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef _XRAN_MLOG_LNX_H_
|
||||
#define _XRAN_MLOG_LNX_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#ifdef MLOG_ENABLED
|
||||
#include <mlog_lnx.h>
|
||||
#else
|
||||
|
||||
/* stubs for MLOG functions */
|
||||
#define MLOG_FALSE ( 0 )
|
||||
|
||||
#define MLogOpen(a, b, c, d, e) MLOG_FALSE
|
||||
#define MLogRestart(a) MLOG_FALSE
|
||||
#define MLogPrint(a) MLOG_FALSE
|
||||
#define MLogGetFileLocation() NULL
|
||||
#define MLogGetFileSize() 0
|
||||
#define MLogSetMask(a) MLOG_FALSE
|
||||
#define MLogGetMask()
|
||||
#define MLogRegisterTick()
|
||||
#define MLogTick() 0
|
||||
#define MLogIncrementCounter() 0
|
||||
#define MLogTask(w,x,y) 0
|
||||
#define MLogTaskCore(w,x,y,z) 0
|
||||
#define MLogMark(x,y)
|
||||
#define MLogDevInfo(x)
|
||||
#define MLogRegisterFrameSubframe(x,y)
|
||||
#define MLogAddVariables(x,y,z)
|
||||
#define MLogGetStats(a, b, c, d, e) MLOG_FALSE
|
||||
#define MLogGetAvgStats(a, b, c, d) MLOG_FALSE
|
||||
#define MLogAddTestCase(a, b) MLOG_FALSE
|
||||
#define MLogAddPowerStats(a, b, c, d, e) MLOG_FALSE
|
||||
|
||||
#endif /* MLOG_ENABLED */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* #ifdef __cplusplus */
|
||||
|
||||
#endif /* #ifndef _XRAN_MLOG_LNX_H_ */
|
||||
|
||||
69
targets/ARCH/ORAN_FHI/lib/xran_mlog_task_id.h
Normal file
@@ -0,0 +1,69 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2020 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This file has the System Debug Trace Logger (Mlog) Task IDs used by PHY
|
||||
* @file mlog_task_id.h
|
||||
* @ingroup group_source_xran
|
||||
* @author Intel Corporation
|
||||
**/
|
||||
|
||||
#ifndef _XRAN_TASK_ID_H_
|
||||
#define _XRAN_TASK_ID_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define RESOURCE_CORE_0 0
|
||||
#define RESOURCE_CORE_1 1
|
||||
#define RESOURCE_CORE_2 2
|
||||
#define RESOURCE_CORE_3 3
|
||||
#define RESOURCE_CORE_4 4
|
||||
#define RESOURCE_CORE_5 5
|
||||
#define RESOURCE_CORE_6 6
|
||||
#define RESOURCE_CORE_7 7
|
||||
#define RESOURCE_CORE_8 8
|
||||
#define RESOURCE_CORE_9 9
|
||||
#define RESOURCE_CORE_10 10
|
||||
#define RESOURCE_CORE_11 11
|
||||
#define RESOURCE_CORE_12 12
|
||||
#define RESOURCE_CORE_13 13
|
||||
#define RESOURCE_CORE_14 14
|
||||
#define RESOURCE_CORE_15 15
|
||||
#define RESOURCE_CORE_16 16
|
||||
|
||||
#define RESOURCE_IA_CORE 100
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// XRAN APP
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
#define PID_GNB_PROC_TIMING 70
|
||||
#define PID_GNB_PROC_TIMING_TIMEOUT 71
|
||||
#define PID_GNB_SYM_CB 72
|
||||
#define PID_GNB_PRACH_CB 73
|
||||
#define PID_GNB_SRS_CB 74
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _XRAN_TASK_ID_H_ */
|
||||
|
||||
243
targets/ARCH/ORAN_FHI/lib/xran_pkt.h
Normal file
@@ -0,0 +1,243 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2019 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief Definitions and support functions to process XRAN packet
|
||||
* @file xran_pkt.h
|
||||
* @ingroup group_source_xran
|
||||
* @author Intel Corporation
|
||||
**/
|
||||
|
||||
/* ORAN-WG4.CUS.0-v01.00 O-RAN Fronthaul Working Group
|
||||
Control, User and Synchronization Plane Specification
|
||||
*/
|
||||
|
||||
/*
|
||||
* Layer common to data and control packets
|
||||
*/
|
||||
|
||||
#ifndef _XRAN_PKT_H_
|
||||
#define _XRAN_PKT_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <rte_common.h>
|
||||
#include <rte_ether.h>
|
||||
#include <rte_byteorder.h>
|
||||
|
||||
/**
|
||||
*****************************************************************************
|
||||
* @file xran_pkt.h
|
||||
*
|
||||
* @defgroup xran_common_pkt XRAN Packet definitions and functions
|
||||
* @ingroup xran
|
||||
*
|
||||
* @description
|
||||
* Definitions and support functions to process XRAN packet
|
||||
*****************************************************************************/
|
||||
|
||||
#define ECPRI_MAX_PAYLOAD_SIZE 65535 /**< Max packet size taken in this implementation */
|
||||
|
||||
/* XRAN spec: For this encapsulation, either the eCPRI Ethertype or the IEEE 1914.3 Ethertype shall be use */
|
||||
#define XRAN_ETHER_TYPE 0xAEFE /**< defined by eCPRI Specification V1.1 */
|
||||
|
||||
#define XRAN_ECPRI_VER 0x0001 /**< eCPRI protocol revision 3.1.3.1.1 */
|
||||
#define XRAN_PAYLOAD_VER 0x0001 /**< Payload version 5.4.4.2 */
|
||||
|
||||
#define VLAN_ID 0 /**< Default Tag protocol identifier (TPID)*/
|
||||
#define VLAN_PCP 7 /**< U-Plane and C-Plane only see Table 3 5 : Quality of service classes */
|
||||
|
||||
/**
|
||||
******************************************************************************
|
||||
* @ingroup xran_common_pkt
|
||||
*
|
||||
* @description
|
||||
* eCPRI message types
|
||||
* as per eCPRI spec 3.2.4. Message Types
|
||||
*****************************************************************************/
|
||||
enum ecpri_msg_type
|
||||
{
|
||||
ECPRI_IQ_DATA = 0x00, /**< U-plane: IQ data */
|
||||
ECPRI_BIT_SEQUENCE = 0x01, /* msg type is not supported */
|
||||
ECPRI_RT_CONTROL_DATA = 0x02, /**< C-plane: Control */
|
||||
|
||||
/* Below msg types are not supported */
|
||||
ECPRI_GEN_DATA_TRANSFER = 0x03,
|
||||
ECPRI_REMOTE_MEM_ACCESS = 0x04,
|
||||
ECPRI_DELAY_MEASUREMENT = 0x05,
|
||||
ECPRI_REMOTE_RESET = 0x06,
|
||||
ECPRI_EVENT_INDICATION = 0x07,
|
||||
ECPRI_MSG_TYPE_MAX
|
||||
};
|
||||
|
||||
/**
|
||||
******************************************************************************
|
||||
* @ingroup xran_common_pkt
|
||||
*
|
||||
* @description
|
||||
* see 3.1.3.1.7 ecpriSeqid (message identifier)
|
||||
*****************************************************************************/
|
||||
struct ecpri_seq_id
|
||||
{
|
||||
uint8_t seq_id:8; /**< Sequence ID */
|
||||
uint8_t sub_seq_id:7; /**< Subsequence ID */
|
||||
uint8_t e_bit:1; /**< E bit */
|
||||
} __rte_packed;
|
||||
|
||||
|
||||
/**
|
||||
******************************************************************************
|
||||
* @ingroup xran_common_pkt
|
||||
*
|
||||
* @description
|
||||
* Structure holds common eCPRI header as per
|
||||
* Table 3 1 : eCPRI Transport Header Field Definitions
|
||||
*****************************************************************************/
|
||||
struct xran_ecpri_cmn_hdr
|
||||
{
|
||||
uint8_t ecpri_concat:1; /**< 3.1.3.1.3 eCPRI concatenation indicator */
|
||||
uint8_t ecpri_resv:3; /**< 3.1.3.1.2 eCPRI reserved */
|
||||
uint8_t ecpri_ver:4; /**< 3.1.3.1.1 eCPRI protocol revision, defined in XRAN_ECPRI_VER */
|
||||
uint8_t ecpri_mesg_type; /**< 3.1.3.1.4 eCPRI message type, defined in ecpri_msg_type */
|
||||
uint16_t ecpri_payl_size; /**< 3.1.3.1.5 eCPRI payload size, without common header and any padding bytes */
|
||||
} __rte_packed;
|
||||
|
||||
/**
|
||||
******************************************************************************
|
||||
* @ingroup xran_common_pkt
|
||||
*
|
||||
* @description
|
||||
* Structure holds eCPRI transport header as per
|
||||
* Table 3 1 : eCPRI Transport Header Field Definitions
|
||||
*****************************************************************************/
|
||||
struct xran_ecpri_hdr
|
||||
{
|
||||
struct xran_ecpri_cmn_hdr cmnhdr;
|
||||
rte_be16_t ecpri_xtc_id; /**< 3.1.3.1.6 real time control data / IQ data transfer message series identifier */
|
||||
struct ecpri_seq_id ecpri_seq_id; /**< 3.1.3.1.7 message identifier */
|
||||
} __rte_packed;
|
||||
|
||||
|
||||
/**
|
||||
******************************************************************************
|
||||
* @ingroup xran_common_pkt
|
||||
*
|
||||
* @description
|
||||
* Enum used to set xRAN packet data direction (gNB Tx/Rx 5.4.4.1)
|
||||
* uplink or downlink
|
||||
*****************************************************************************/
|
||||
enum xran_pkt_dir
|
||||
{
|
||||
XRAN_DIR_UL = 0, /**< UL direction */
|
||||
XRAN_DIR_DL = 1, /**< DL direction */
|
||||
XRAN_DIR_MAX
|
||||
};
|
||||
|
||||
/**
|
||||
******************************************************************************
|
||||
* @ingroup xran_common_pkt
|
||||
*
|
||||
* @description
|
||||
* Structure holds components of radio application header
|
||||
* 5.4.4 Coding of Information Elements - Application Layer, Common
|
||||
* for U-plane as per 6.3.2 DL/UL Data
|
||||
*****************************************************************************/
|
||||
struct radio_app_common_hdr
|
||||
{
|
||||
/* Octet 9 */
|
||||
uint8_t filter_id:4; /**< This parameter defines an index to the channel filter to be
|
||||
used between IQ data and air interface, both in DL and UL.
|
||||
For most physical channels filterIndex =0000b is used which
|
||||
indexes the standard channel filter, e.g. 100MHz channel filter
|
||||
for 100MHz nominal carrier bandwidth. (see 5.4.4.3 for more) */
|
||||
uint8_t payl_ver:3; /**< This parameter defines the payload protocol version valid
|
||||
for the following IEs in the application layer. In this version of
|
||||
the specification payloadVersion=001b shall be used. */
|
||||
uint8_t data_direction:1; /**< This parameter indicates the gNB data direction. */
|
||||
|
||||
/* Octet 10 */
|
||||
uint8_t frame_id:8; /**< This parameter is a counter for 10 ms frames (wrapping period 2.56 seconds) */
|
||||
|
||||
/* Octet 11 */
|
||||
/* Octet 12 */
|
||||
union {
|
||||
uint16_t value;
|
||||
struct {
|
||||
uint16_t symb_id:6; /**< This parameter identifies the first symbol number within slot,
|
||||
to which the information of this message is applies. */
|
||||
uint16_t slot_id:6; /**< This parameter is the slot number within a 1ms sub-frame. All slots in
|
||||
one sub-frame are counted by this parameter, slotId running from 0 to Nslot-1.
|
||||
In this version of the specification the maximum Nslot=16, All
|
||||
other values of the 6 bits are reserved for future use. */
|
||||
uint16_t subframe_id:4; /**< This parameter is a counter for 1 ms sub-frames within 10ms frame. */
|
||||
};
|
||||
}sf_slot_sym;
|
||||
|
||||
} __rte_packed;
|
||||
|
||||
/**
|
||||
******************************************************************************
|
||||
* @ingroup xran_common_pkt
|
||||
*
|
||||
* @description
|
||||
* This parameter defines the compression method and IQ bit width for the
|
||||
* user data in the data section. This field is absent from U-Plane messages
|
||||
* when the static IQ format and compression method is configured via the M-Plane.
|
||||
* In this way a single compression method and IQ bit width is provided
|
||||
* (per UL and DL, per LTE and NR) without adding more overhead to U-Plane messages.
|
||||
*****************************************************************************/
|
||||
struct compression_hdr
|
||||
{
|
||||
uint8_t ud_comp_meth:4;
|
||||
/**< udCompMeth| compression method |udIqWidth meaning
|
||||
---------------+-----------------------------+--------------------------------------------
|
||||
0000b | no compression |bitwidth of each uncompressed I and Q value
|
||||
0001b | block floating point |bitwidth of each I and Q mantissa value
|
||||
0010b | block scaling |bitwidth of each I and Q scaled value
|
||||
0011b | mu-law |bitwidth of each compressed I and Q value
|
||||
0100b | modulation compression |bitwidth of each compressed I and Q value
|
||||
0100b - 1111b | reserved for future methods |depends on the specific compression method
|
||||
*/
|
||||
uint8_t ud_iq_width:4; /**< Bit width of each I and each Q
|
||||
16 for udIqWidth=0, otherwise equals udIqWidth e.g. udIqWidth = 0000b means I and Q are each 16 bits wide;
|
||||
e.g. udIQWidth = 0001b means I and Q are each 1 bit wide;
|
||||
e.g. udIqWidth = 1111b means I and Q are each 15 bits wide
|
||||
*/
|
||||
} __rte_packed;
|
||||
|
||||
/**
|
||||
******************************************************************************
|
||||
* @ingroup xran_common_pkt
|
||||
*
|
||||
* @description
|
||||
* Structure holds common xran packet header
|
||||
* 3.1.1 Ethernet Encapsulation
|
||||
*****************************************************************************/
|
||||
struct xran_pkt_comm_hdr
|
||||
{
|
||||
struct rte_ether_hdr eth_hdr; /**< Ethernet Header */
|
||||
struct xran_ecpri_hdr ecpri_hdr; /**< eCPRI Transport Header */
|
||||
} __rte_packed;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
452
targets/ARCH/ORAN_FHI/lib/xran_pkt_cp.h
Normal file
@@ -0,0 +1,452 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2019 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This file provides the definition of Control Plane Messages
|
||||
* for XRAN Front Haul layer as defined in XRAN-FH.CUS.0-v02.01.
|
||||
*
|
||||
* @file xran_pkt_cp.h
|
||||
* @ingroup group_lte_source_xran
|
||||
* @author Intel Corporation
|
||||
*
|
||||
**/
|
||||
|
||||
#ifndef _XRAN_PKT_CP_H_
|
||||
#define _XRAN_PKT_CP_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* Common structures for C/U-plane
|
||||
**********************************************************************/
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* user data compression header defined in 5.4.4.10 / 6.3.3.13
|
||||
*/
|
||||
struct xran_radioapp_udComp_header {
|
||||
uint8_t udCompMeth:4; /**< Compression method, XRAN_COMPMETHOD_xxxx */
|
||||
uint8_t udIqWidth:4; /**< IQ bit width, 1 ~ 16 */
|
||||
} __attribute__((__packed__));
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* Definition of C-Plane Protocol 5.4
|
||||
**********************************************************************/
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* Common Radio Application Header for C-Plane
|
||||
*/
|
||||
struct xran_cp_radioapp_common_header { /* 6bytes, first 4bytes need the conversion for byte order */
|
||||
uint32_t startSymbolId:6; /**< 5.4.4.7 start symbol identifier */
|
||||
uint32_t slotId:6; /**< 5.4.4.6 slot identifier */
|
||||
uint32_t subframeId:4; /**< 5.4.4.5 subframe identifier */
|
||||
uint32_t frameId:8; /**< 5.4.4.4 frame identifier */
|
||||
uint32_t filterIndex:4; /**< 5.4.4.3 filter index, XRAN_FILTERINDEX_xxxx */
|
||||
uint32_t payloadVer:3; /**< 5.4.4.2 payload version, should be 1 */
|
||||
uint32_t dataDirection:1; /**< 5.4.4.1 data direction (gNB Tx/Rx) */
|
||||
uint8_t numOfSections; /**< 5.4.4.8 number of sections */
|
||||
uint8_t sectionType; /**< 5.4.4.9 section type */
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* frame structure defined in 5.4.4.13
|
||||
*/
|
||||
struct xran_cp_radioapp_frameStructure {
|
||||
uint8_t uScs:4; /**< sub-carrier spacing, XRAN_SCS_xxx */
|
||||
uint8_t fftSize:4; /**< FFT size, XRAN_FFTSIZE_xxx */
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* Section headers definition for C-Plane.
|
||||
* Section type 6 and 7 are not present since those have different fields.
|
||||
*/
|
||||
struct xran_cp_radioapp_section_header { /* 8bytes, need the conversion for byte order */
|
||||
union {
|
||||
struct {
|
||||
uint32_t reserved:16;
|
||||
uint32_t numSymbol:4; /**< 5.4.5.7 number of symbols */
|
||||
uint32_t reMask:12; /**< 5.4.5.5 resource element mask */
|
||||
} s0;
|
||||
struct {
|
||||
uint32_t beamId:15; /**< 5.4.5.9 beam identifier */
|
||||
uint32_t ef:1; /**< 5.4.5.8 extension flag */
|
||||
uint32_t numSymbol:4; /**< 5.4.5.7 number of symbols */
|
||||
uint32_t reMask:12; /**< 5.4.5.5 resource element mask */
|
||||
} s1;
|
||||
struct {
|
||||
uint32_t beamId:15; /**< 5.4.5.9 beam identifier */
|
||||
uint32_t ef:1; /**< 5.4.5.8 extension flag */
|
||||
uint32_t numSymbol:4; /**< 5.4.5.7 number of symbols */
|
||||
uint32_t reMask:12; /**< 5.4.5.5 resource element mask */
|
||||
} s3;
|
||||
struct {
|
||||
uint32_t ueId:15; /**< 5.4.5.10 UE identifier */
|
||||
uint32_t ef:1; /**< 5.4.5.8 extension flag */
|
||||
uint32_t numSymbol:4; /**< 5.4.5.7 number of symbols */
|
||||
uint32_t reMask:12; /**< 5.4.5.5 resource element mask */
|
||||
} s5;
|
||||
} u;
|
||||
|
||||
uint32_t numPrbc:8; /**< 5.4.5.6 number of contiguous PRBs per control section 0000 0000b = all PRBs */
|
||||
uint32_t startPrbc:10; /**< 5.4.5.4 starting PRB of control section */
|
||||
uint32_t symInc:1; /**< 5.4.5.3 symbol number increment command XRAN_SYMBOLNUMBER_xxxx */
|
||||
uint32_t rb:1; /**< 5.4.5.2 resource block indicator, XRAN_RBIND_xxx */
|
||||
uint32_t sectionId:12; /**< 5.4.5.1 section identifier */
|
||||
} __attribute__((__packed__));
|
||||
|
||||
|
||||
struct xran_cp_radioapp_section_ext_hdr {
|
||||
/* 12 bytes, need to convert byte order for two parts respectively
|
||||
* - 2 and 8 bytes, reserved1 would be OK if it is zero
|
||||
*/
|
||||
uint16_t extLen:8; /**< 5.4.6.3 extension length, in 32bits words */
|
||||
uint16_t extType:7; /**< 5.4.6.1 extension type */
|
||||
uint16_t ef:1; /**< 5.4.6.2 extension flag */
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* Beamforming Weights Extension Type(ExtType 1) defined in 5.4.7.1
|
||||
* The structure is reordered for byte order conversion.
|
||||
*/
|
||||
struct xran_cp_radioapp_section_ext1 {
|
||||
/* variable length, need to be careful to convert byte order
|
||||
* - does not need to convert first 3 bytes */
|
||||
uint8_t extType:7; /**< 5.4.6.1 extension type */
|
||||
uint8_t ef:1; /**< 5.4.6.2 extension flag */
|
||||
uint8_t extLen; /**< 5.4.6.3 extension length, in 32bits words */
|
||||
/* bfwCompHdr */
|
||||
uint8_t bfwCompMeth:4; /**< 5.4.7.1.1 Beamforming weight Compression method */
|
||||
uint8_t bfwIqWidth:4; /**< 5.4.7.1.1 Beamforming weight IQ bit width */
|
||||
|
||||
/*
|
||||
*
|
||||
*
|
||||
* bfwCompParam
|
||||
* (bfwI, bfwQ)+
|
||||
* ......
|
||||
* zero padding for 4-byte alignment
|
||||
*/
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* Beamforming Attributes Extension Type(ExtType 2) defined in 5.4.7.2
|
||||
* The structure is reordered for byte order conversion.
|
||||
*/
|
||||
struct xran_cp_radioapp_section_ext2 {
|
||||
/* variable length, need to be careful to convert byte order
|
||||
* - first 4 bytes can be converted at once
|
||||
*/
|
||||
uint32_t bfZe3ddWidth:3; /**< 5.4.7.2.1 beamforming zenith beamwidth parameter bitwidth, Table 5-21 */
|
||||
uint32_t bfAz3ddWidth:3; /**< 5.4.7.2.1 beamforming azimuth beamwidth parameter bitwidth, Table 5-20 */
|
||||
uint32_t bfaCompResv1:2;
|
||||
uint32_t bfZePtWidth:3; /**< 5.4.7.2.1 beamforming zenith pointing parameter bitwidth, Table 5-19 */
|
||||
uint32_t bfAzPtWidth:3; /**< 5.4.7.2.1 beamforming azimuth pointing parameter bitwidth, Table 5-18 */
|
||||
uint32_t bfaCompResv0:2;
|
||||
uint32_t extLen:8; /**< 5.4.6.3 extension length, in 32bits words */
|
||||
uint32_t extType:7; /**< 5.4.6.1 extension type */
|
||||
uint32_t ef:1; /**< 5.4.6.2 extension flag */
|
||||
|
||||
/*
|
||||
* would be better to use bit manipulation directly to add these parameters
|
||||
*
|
||||
* bfAzPt: var by bfAzPtWidth
|
||||
* bfZePt: var by bfZePtWidth
|
||||
* bfAz3dd: var by bfAz3ddWidth
|
||||
* bfZe3dd: var by bfZe3ddWidth
|
||||
* bfAzSI:5 (including zero-padding for unused bits)
|
||||
* bfZeSI:3
|
||||
* padding for 4-byte alignment
|
||||
*
|
||||
*/
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* DL Precoding Extension Type(ExtType 3) for first data layer.
|
||||
* Defined in 5.4.7.3 Table 5-22.
|
||||
* Only be used for LTE TM2-4 and not for other LTE TMs nor NR.
|
||||
* The structure is reordered for byte order conversion.
|
||||
*/
|
||||
struct xran_cp_radioapp_section_ext3_first {
|
||||
/* 16 bytes, need to convert byte order for two parts - 8/8 bytes */
|
||||
uint64_t reserved1:8;
|
||||
uint64_t crsSymNum:4; /**< 5.4.7.3.6 CRS symbol number indication */
|
||||
uint64_t reserved0:3;
|
||||
uint64_t crsShift:1; /**< 5.4.7.3.7 CRS shift used for DL transmission */
|
||||
uint64_t crsReMask:12; /**< 5.4.7.3.5 CRS resource element mask */
|
||||
uint64_t txScheme:4; /**< 5.4.7.3.3 transmission scheme */
|
||||
uint64_t numLayers:4; /**< 5.4.7.3.4 number of layers used for DL transmission */
|
||||
uint64_t layerId:4; /**< 5.4.7.3.2 Layer ID for DL transmission */
|
||||
uint64_t codebookIndex:8; /**< 5.4.7.3.1 precoder codebook used for transmission */
|
||||
uint64_t extLen:8; /**< 5.4.6.3 extension length, in 32bits words */
|
||||
uint64_t extType:7; /**< 5.4.6.1 extension type */
|
||||
uint64_t ef:1; /**< 5.4.6.2 extension flag */
|
||||
|
||||
uint64_t beamIdAP1:16; /**< 5.4.7.3.8 beam id to be used for antenna port 1 */
|
||||
uint64_t beamIdAP2:16; /**< 5.4.7.3.9 beam id to be used for antenna port 2 */
|
||||
uint64_t beamIdAP3:16; /**< 5.4.7.3.10 beam id to be used for antenna port 3 */
|
||||
uint64_t reserved2:16;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* DL Precoding Extension Type(ExtType 3) for non-first data layer.
|
||||
* Defined in 5.4.7.3 Table 5-23.
|
||||
* Only be used for LTE TM2-4 and not for other LTE TMs nor NR.
|
||||
* The structure is reordered for byte order conversion.
|
||||
*/
|
||||
struct xran_cp_radioapp_section_ext3_non_first {
|
||||
/* 4 bytes, need to convert byte order at once */
|
||||
uint32_t numLayers:4; /**< 5.4.7.3.4 number of layers used for DL transmission */
|
||||
uint32_t layerId:4; /**< 5.4.7.3.2 Layer ID for DL transmission */
|
||||
uint32_t codebookIndex:8; /**< 5.4.7.3.1 precoder codebook used for transmission */
|
||||
|
||||
uint32_t extLen:8; /**< 5.4.6.3 extension length, in 32bits words */
|
||||
uint32_t extType:7; /**< 5.4.6.1 extension type */
|
||||
uint32_t ef:1; /**< 5.4.6.2 extension flag */
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* Modulation Compression Parameter Extension Type(ExtType 4), 5.4.7.4
|
||||
* Only applies to section type 1 and 3.
|
||||
* The structure is reordered for byte order conversion.
|
||||
*/
|
||||
struct xran_cp_radioapp_section_ext4 {
|
||||
/* 4 bytes, need to convert byte order at once */
|
||||
uint32_t modCompScaler:15; /**< 5.4.7.4.2 modulation compression scaler value */
|
||||
uint32_t csf:1; /**< 5.4.7.4.1 constellation shift flag */
|
||||
|
||||
uint32_t extLen:8; /**< 5.4.6.3 extension length, in 32bits words */
|
||||
uint32_t extType:7; /**< 5.4.6.1 extension type */
|
||||
uint32_t ef:1; /**< 5.4.6.2 extension flag */
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* Modulation Compression Additional Parameter Extension Type(ExtType 5) for one scaler value.
|
||||
* Defined in 5.4.7.5 Table 5-26 and Table 5-27.
|
||||
* Only applies to section type 1 3, and 5.
|
||||
* The structure is reordered for byte order conversion.
|
||||
*/
|
||||
struct xran_cp_radioapp_section_ext5 {
|
||||
uint32_t reserved0:8;
|
||||
uint32_t mcScaleOffset2:15; /**< 5.4.7.5.3 scaling value for modulation compression */
|
||||
uint32_t csf2:1; /**< 5.4.7.5.2 constellation shift flag */
|
||||
uint32_t mcScaleReMask2:12; /**< 5.4.7.5.1 modulation compression power scale RE mask */
|
||||
uint32_t mcScaleOffset1:15; /**< 5.4.7.5.3 scaling value for modulation compression */
|
||||
uint32_t csf1:1; /**< 5.4.7.5.2 constellation shift flag */
|
||||
uint32_t mcScaleReMask1:12; /**< 5.4.7.5.1 modulation compression power scale RE mask */
|
||||
} __attribute__((__packed__));
|
||||
|
||||
|
||||
/**********************************************************
|
||||
* Scheduling and Beam-forming Commands 5.4.2
|
||||
**********************************************************/
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* Section header definition for type 0
|
||||
*/
|
||||
struct xran_cp_radioapp_section0_header { // 12bytes (6+2+1+2+1)
|
||||
struct xran_cp_radioapp_common_header cmnhdr;
|
||||
uint16_t timeOffset; /**< 5.4.4.12 time offset */
|
||||
|
||||
struct xran_cp_radioapp_frameStructure frameStructure;
|
||||
uint16_t cpLength; /**< 5.4.4.14 cyclic prefix length */
|
||||
uint8_t reserved;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* Section definition for type 0: Unused RB or Symbols in DL or UL (Table 5-2)
|
||||
* Not supported in this release
|
||||
*/
|
||||
struct xran_cp_radioapp_section0 { // 8bytes (4+4)
|
||||
struct xran_cp_radioapp_section_header hdr;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* Section header definition for type 1
|
||||
*/
|
||||
struct xran_cp_radioapp_section1_header { // 8bytes (6+1+1)
|
||||
struct xran_cp_radioapp_common_header cmnhdr;
|
||||
struct xran_radioapp_udComp_header udComp;
|
||||
uint8_t reserved;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* Section definition for type 1: Most DL/UL Radio Channels (Table 5-3)
|
||||
*/
|
||||
struct xran_cp_radioapp_section1 { // 8bytes (4+4)
|
||||
struct xran_cp_radioapp_section_header hdr;
|
||||
|
||||
// section extensions // 5.4.6 & 5.4.7
|
||||
// .........
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* Section header definition for type 3
|
||||
*/
|
||||
struct xran_cp_radioapp_section3_header { // 12bytes (6+2+1+2+1)
|
||||
struct xran_cp_radioapp_common_header cmnhdr;
|
||||
uint16_t timeOffset; /**< 5.4.4.12 time offset */
|
||||
|
||||
struct xran_cp_radioapp_frameStructure frameStructure;
|
||||
uint16_t cpLength; /**< 5.4.4.14 cyclic prefix length */
|
||||
struct xran_radioapp_udComp_header udComp;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* Section definition for type 3: PRACH and Mixed-numerology Channels (Table 5-4)
|
||||
*/
|
||||
struct xran_cp_radioapp_section3 { // 12bytes (4+4+4)
|
||||
struct xran_cp_radioapp_section_header hdr;
|
||||
uint32_t freqOffset:24; /**< 5.4.5.11 frequency offset */
|
||||
uint32_t reserved:8;
|
||||
|
||||
// section extensions // 5.4.6 & 5.4.7
|
||||
// .........
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* Section header definition for type 5
|
||||
*/
|
||||
struct xran_cp_radioapp_section5_header { // 8bytes (6+1+1)
|
||||
struct xran_cp_radioapp_common_header cmnhdr;
|
||||
struct xran_radioapp_udComp_header udComp;
|
||||
uint8_t reserved;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* Section definition for type 5: UE scheduling information (Table 5-5)
|
||||
* Not supported in this release
|
||||
*/
|
||||
struct xran_cp_radioapp_section5 {
|
||||
struct xran_cp_radioapp_section_header hdr;
|
||||
|
||||
// section extensions // 5.4.6 & 5.4.7
|
||||
// .........
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* Section header definition for type 6
|
||||
*/
|
||||
struct xran_cp_radioapp_section6_header { // 8bytes (6+1+1)
|
||||
struct xran_cp_radioapp_common_header cmnhdr;
|
||||
uint8_t numberOfUEs; /**< 5.4.4.11 number of UEs */
|
||||
uint8_t reserved;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* Section definition for type 6: Channel Information (Table 5-6)
|
||||
* Not supported in this release
|
||||
*/
|
||||
struct xran_cp_radioapp_section6 {
|
||||
uint32_t regularizationFactor:16;/**< 5.4.5.12 regularization Factor */
|
||||
uint32_t ueId:15; /**< 5.4.5.10 UE identifier */
|
||||
uint32_t ef:1; /**< 5.4.5.8 extension flag */
|
||||
uint8_t startPrbch:2; /**< 5.4.5.4 starting PRB of control section */
|
||||
uint8_t symInc:1; /**< 5.4.5.3 symbol number increment command XRAN_SYMBOLNUMBER_xxxx */
|
||||
uint8_t rb:1; /**< 5.4.5.2 resource block indicator, XRAN_RBIND_xxx */
|
||||
uint8_t reserved:4;
|
||||
uint8_t startPrbcl:8; /**< 5.4.5.4 starting PRB of control section */
|
||||
uint8_t numPrbc:8; /**< 5.4.5.6 number of contiguous PRBs per control section */
|
||||
|
||||
// ciIQsamples start from here // 5.4.5.13 channel information I and Q values
|
||||
// .........
|
||||
//
|
||||
// section extensions // 5.4.6 & 5.4.7
|
||||
// .........
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/**
|
||||
* @ingroup xran_cp_pkt
|
||||
*
|
||||
* @description
|
||||
* Section header definition for type 7: LAA
|
||||
* Not supported in this release
|
||||
*/
|
||||
struct xran_cp_radioapp_section7_header {
|
||||
struct xran_cp_radioapp_common_header cmnhdr;
|
||||
uint16_t reserved;
|
||||
uint8_t laaMsgLen:4; /**< 5.4.5.15 LAA message length */
|
||||
uint8_t laaMsgType:4; /**< 5.4.5.14 LAA message type */
|
||||
|
||||
// Payload start from here // 5.4.5.16 ~ 5.4.5.32
|
||||
} __attribute__((__packed__));
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _XRAN_PKT_CP_H_ */
|
||||
179
targets/ARCH/ORAN_FHI/lib/xran_pkt_up.h
Normal file
@@ -0,0 +1,179 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2019 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief Definitions and support functions to process XRAN packet
|
||||
* @file xran_pkt_up.h
|
||||
* @ingroup group_source_xran
|
||||
* @author Intel Corporation
|
||||
**/
|
||||
|
||||
/**
|
||||
*****************************************************************************
|
||||
* @file xran_pkt_up.h
|
||||
*
|
||||
* @defgroup xran_up_pkt U-Plane XRAN Packet definitions and functions
|
||||
* @ingroup xran
|
||||
*
|
||||
* @description
|
||||
* Structures relevant to U-plane packets only (data now only)
|
||||
*****************************************************************************/
|
||||
#ifndef _XRAN_PKT_UP_H_
|
||||
#define _XRAN_PKT_UP_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "xran_pkt.h"
|
||||
|
||||
#define IQ_PAIR_NUM_IN_RB 12
|
||||
#define MAX_DATA_SECTIONS_NUM 273
|
||||
#define MAX_IQ_BIT_WIDTH 16
|
||||
|
||||
/* currently library supports I and Q sizes of 8 and 16 bits each */
|
||||
#define IQ_BITS MAX_IQ_BIT_WIDTH
|
||||
|
||||
/*
|
||||
* Structure holding data section header fields
|
||||
* It is repeated for every section ID in xRAN packet
|
||||
*/
|
||||
|
||||
/**
|
||||
******************************************************************************
|
||||
* @ingroup xran_up_pkt
|
||||
*
|
||||
* @description
|
||||
* Structure holding data section header fields
|
||||
* It is repeated for every section ID in xRAN packet
|
||||
* 5.4.5 Coding of Information Elements - Application Layer, Sections
|
||||
* for U-plane as per 6.3.2 DL/UL Data
|
||||
*****************************************************************************/
|
||||
struct data_section_hdr {
|
||||
union {
|
||||
uint32_t all_bits;
|
||||
struct {
|
||||
uint32_t num_prbu:8; /**< 5.4.5.6 number of contiguous PRBs per control section */
|
||||
uint32_t start_prbu:10; /**< 5.4.5.4 starting PRB of control section */
|
||||
uint32_t sym_inc:1; /**< 5.4.5.3 symbol number increment command XRAN_SYMBOLNUMBER_xxxx */
|
||||
uint32_t rb:1; /**< 5.4.5.2 resource block indicator, XRAN_RBIND_xxx */
|
||||
uint32_t sect_id:12; /**< 5.4.5.1 section identifier */
|
||||
};
|
||||
}fields;
|
||||
#ifdef FCN_ADAPT
|
||||
uint8_t udCompHdr;
|
||||
uint8_t reserved;
|
||||
#endif
|
||||
} __rte_packed;
|
||||
|
||||
|
||||
/*
|
||||
******************************************************************************
|
||||
* @ingroup xran_up_pkt
|
||||
*
|
||||
* @description
|
||||
* Structure holds compression header structure and field reserved for future use.
|
||||
* reserved goes always with udCompHdr in u-plane pkt
|
||||
* U-plane as per 6.3.2 DL/UL Data
|
||||
*****************************************************************************/
|
||||
struct data_section_compression_hdr
|
||||
{
|
||||
struct compression_hdr ud_comp_hdr;
|
||||
uint8_t rsrvd; /**< This parameter provides 1 byte for future definition,
|
||||
should be set to all zeros by the sender and ignored by the receiver.
|
||||
This field is only present when udCompHdr is present, and is absent when
|
||||
the static IQ format and compression method is configured via the M-Plane */
|
||||
|
||||
/* TODO: support for Block Floating Point compression */
|
||||
/* udCompMeth 0000b = no compression absent*/
|
||||
};
|
||||
|
||||
/*
|
||||
******************************************************************************
|
||||
* @ingroup xran_up_pkt
|
||||
*
|
||||
* @description
|
||||
* Structure holds the compression parameters by the compression header.
|
||||
* may not be present by udCompMeth in 6.3.3.13
|
||||
*****************************************************************************/
|
||||
union compression_params {
|
||||
struct block_fl_point {
|
||||
uint8_t exponent:4;
|
||||
uint8_t reserved:4;
|
||||
} blockFlPoint;
|
||||
struct block_scaling {
|
||||
uint8_t sblockScaler;
|
||||
} blockScaling;
|
||||
struct u_law {
|
||||
uint8_t compShift:4;
|
||||
uint8_t compBitWidth:4;
|
||||
} uLaw;
|
||||
} __rte_packed;
|
||||
|
||||
|
||||
/*
|
||||
******************************************************************************
|
||||
* @ingroup xran_up_pkt
|
||||
*
|
||||
* @description
|
||||
* Structure holds an IQ sample pair
|
||||
* U-plane as per 6.3.2 DL/UL Data
|
||||
* Each bit field size is defined with IQ_BITS macro
|
||||
* Currently supported I and Q sizes are 8 and 16 bits
|
||||
*****************************************************************************/
|
||||
struct rb_map
|
||||
{
|
||||
int16_t i_sample:IQ_BITS; /**< This parameter is the In-phase sample value */
|
||||
int16_t q_sample:IQ_BITS; /**< This parameter is the Quadrature sample value */
|
||||
} __rte_packed;
|
||||
|
||||
/**
|
||||
******************************************************************************
|
||||
* @ingroup xran_common_pkt
|
||||
*
|
||||
* @description
|
||||
* Structure holds complete xran u-plane packet header
|
||||
* 3.1.1 Ethernet Encapsulation
|
||||
*****************************************************************************/
|
||||
struct xran_up_pkt_hdr
|
||||
{
|
||||
struct xran_ecpri_hdr ecpri_hdr; /**< eCPRI Transport Header */
|
||||
struct radio_app_common_hdr app_hdr; /**< eCPRI Transport Header */
|
||||
struct data_section_hdr data_sec_hdr;
|
||||
} __rte_packed;
|
||||
|
||||
|
||||
/**
|
||||
******************************************************************************
|
||||
* @ingroup xran_common_pkt
|
||||
*
|
||||
* @description
|
||||
* Structure holds complete ethernet and xran u-plane packet header
|
||||
* 3.1.1 Ethernet Encapsulation
|
||||
*****************************************************************************/
|
||||
struct eth_xran_up_pkt_hdr
|
||||
{
|
||||
struct rte_ether_hdr eth_hdr;
|
||||
struct xran_up_pkt_hdr xran_hdr;
|
||||
}__rte_packed;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
118
targets/ARCH/ORAN_FHI/lib/xran_printf.h
Normal file
@@ -0,0 +1,118 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2019 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief Modules provide debug prints and utility functions
|
||||
* @file xran_printf.h
|
||||
* @ingroup group_source_xran
|
||||
* @author Intel Corporation
|
||||
**/
|
||||
|
||||
#ifndef XRAN_PRINTF_H
|
||||
#define XRAN_PRINTF_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define PRINTF_LOG_OK
|
||||
#define PRINTF_INF_OK
|
||||
#define PRINTF_ERR_OK
|
||||
//#define PRINTF_DBG_OK
|
||||
|
||||
#ifndef WIN32
|
||||
#ifdef PRINTF_LOG_OK
|
||||
#define print_log(fmt, args...) printf("%s:" fmt "\n", __FUNCTION__, ## args)
|
||||
#else /* PRINTF_LOG_OK */
|
||||
#define print_log(fmt, args...)
|
||||
#endif /* PRINTF_LOG_OK */
|
||||
#else
|
||||
#define print_log(fmt, ...) printf("%s:" fmt "\n", __FUNCTION__, __VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#ifndef WIN32
|
||||
#ifdef PRINTF_DBG_OK
|
||||
#define print_dbg(fmt, args...) printf("%s:[dbg] " fmt "\n", __FUNCTION__, ## args)
|
||||
#else /* PRINTF_LOG_OK */
|
||||
#define print_dbg(fmt, args...)
|
||||
#endif /* PRINTF_LOG_OK */
|
||||
#else
|
||||
#define print_dbg(fmt, ...) printf("%s:[dbg] " fmt "\n", __FUNCTION__, __VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#ifndef WIN32
|
||||
#ifdef PRINTF_ERR_OK
|
||||
#define print_err(fmt, args...) printf("%s:[err] " fmt "\n", __FUNCTION__, ## args)
|
||||
#else /* PRINTF_LOG_OK */
|
||||
#define print_err(fmt, args...)
|
||||
#endif /* PRINTF_LOG_OK */
|
||||
#else
|
||||
#define print_err(fmt, ...) printf("%s:[err] " fmt "\n", __FUNCTION__, __VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#ifndef WIN32
|
||||
#ifdef PRINTF_INF_OK
|
||||
#define print_inf printf
|
||||
#else /* PRINTF_LOG_OK */
|
||||
#define print_inf
|
||||
#endif /* PRINTF_LOG_OK */
|
||||
#else
|
||||
#define print_inf printf
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef _IASSERT_
|
||||
#define _IASSERT_
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define iAssert(p) if(!(p)){fprintf(stderr,\
|
||||
"Assertion failed: %s, file %s, line %d, val %d\n",\
|
||||
#p, __FILE__, __LINE__, p);exit(-1);}
|
||||
#else /* _DEBUG */
|
||||
#define iAssert(p)
|
||||
#endif /* _DEBUG */
|
||||
|
||||
#ifndef PHY_APP
|
||||
#ifndef _assert
|
||||
#define _assert(x)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /* _IASSERT_*/
|
||||
|
||||
#ifdef CHECK_PARAMS
|
||||
#define CHECK_NOT_NULL(param, returnValue) \
|
||||
if (param == NULL) \
|
||||
{ \
|
||||
print_err("%s is NULL!\n", #param); \
|
||||
return returnValue; \
|
||||
}
|
||||
#else
|
||||
#define CHECK_NOT_NULL(param, returnValue)
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // PHY_PRINTF_H
|
||||
48
targets/ARCH/ORAN_FHI/lib/xran_sync_api.h
Normal file
@@ -0,0 +1,48 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2019 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This file provides interface to synchronization related APIs (PTP/1588)
|
||||
* for XRAN.
|
||||
*
|
||||
* @file xran_sync_api.h
|
||||
* @ingroup group_lte_source_xran
|
||||
* @author Intel Corporation
|
||||
*
|
||||
**/
|
||||
|
||||
#ifndef _XRAN_SYNC_API_H_
|
||||
#define _XRAN_SYNC_API_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Function checks if machine is synchronized using PTP for Linux
|
||||
* software.
|
||||
*
|
||||
* @return int Returns 0 if synchronized, otherwise positive.
|
||||
*/
|
||||
int xran_is_synchronized(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _XRAN_SYNC_API_H_ */
|
||||
58
targets/ARCH/ORAN_FHI/lib/xran_timer.h
Normal file
@@ -0,0 +1,58 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2019 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This file provides interface to Timing for XRAN.
|
||||
*
|
||||
* @file xran_timer.h
|
||||
* @ingroup group_lte_source_xran
|
||||
* @author Intel Corporation
|
||||
*
|
||||
**/
|
||||
|
||||
#ifndef _XRAN_TIMER_H
|
||||
#define _XRAN_TIMER_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#define MSEC_PER_SEC 1000L
|
||||
|
||||
#define XranIncrementSymIdx(sym_idx, numSymPerMs) (((uint32_t)sym_idx >= (((uint32_t)numSymPerMs * MSEC_PER_SEC) - 1)) ? 0 : (uint32_t)sym_idx+1)
|
||||
#define XranDecrementSymIdx(sym_idx, numSymPerMs) (((uint32_t)sym_idx == 0) ? (((uint32_t)numSymPerMs * MSEC_PER_SEC)) - 1) : (uint32_t)sym_idx-1)
|
||||
|
||||
uint64_t xran_tick(void);
|
||||
unsigned long get_ticks_diff(unsigned long curr_tick, unsigned long last_tick);
|
||||
long poll_next_tick(long interval_ns, unsigned long *used_tick);
|
||||
long sleep_next_tick(long interval);
|
||||
int timing_set_debug_stop(int value, int count);
|
||||
int timing_get_debug_stop(void);
|
||||
inline uint64_t timing_get_current_second(void);
|
||||
int timing_set_numerology(uint8_t value);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
78
targets/ARCH/ORAN_FHI/lib/xran_transport.h
Normal file
@@ -0,0 +1,78 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2019 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This file provides the definitions for Transport layer (eCPRI) API.
|
||||
*
|
||||
* @file xran_transport.h
|
||||
* @ingroup group_lte_source_xran
|
||||
* @author Intel Corporation
|
||||
*
|
||||
**/
|
||||
|
||||
#ifndef _XRAN_TRANSPORT_H_
|
||||
#define _XRAN_TRANSPORT_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <rte_common.h>
|
||||
#include <rte_mbuf.h>
|
||||
|
||||
#include "xran_pkt.h"
|
||||
|
||||
struct xran_eaxc_info {
|
||||
uint8_t cuPortId;
|
||||
uint8_t bandSectorId;
|
||||
uint8_t ccId;
|
||||
uint8_t ruPortId;
|
||||
};
|
||||
|
||||
struct xran_recv_packet_info {
|
||||
int ecpri_version;
|
||||
enum ecpri_msg_type msg_type;
|
||||
int payload_len;
|
||||
struct xran_eaxc_info eaxc;
|
||||
int seq_id;
|
||||
int subseq_id;
|
||||
int ebit;
|
||||
};
|
||||
|
||||
|
||||
int xran_get_ecpri_hdr_size(void);
|
||||
void xran_update_ecpri_payload_size(struct rte_mbuf *mbuf, int size);
|
||||
|
||||
uint16_t xran_compose_cid(uint8_t CU_Port_ID, uint8_t BandSector_ID, uint8_t CC_ID, uint8_t Ant_ID);
|
||||
void xran_decompose_cid(uint16_t cid, struct xran_eaxc_info *result);
|
||||
|
||||
int xran_build_ecpri_hdr(struct rte_mbuf *mbuf,
|
||||
uint8_t CC_ID, uint8_t Ant_ID,
|
||||
uint8_t seq_id,
|
||||
struct xran_ecpri_hdr **ecpri_hdr);
|
||||
|
||||
int xran_parse_ecpri_hdr(struct rte_mbuf *mbuf,
|
||||
struct xran_ecpri_hdr **ecpri_hdr,
|
||||
struct xran_recv_packet_info *pkt_info);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
108
targets/ARCH/ORAN_FHI/lib/xran_up_api.h
Normal file
@@ -0,0 +1,108 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2019 Intel.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This file provides the definitions for User Plane Messages APIs.
|
||||
*
|
||||
* @file xran_up_api.h
|
||||
* @ingroup group_lte_source_xran
|
||||
* @author Intel Corporation
|
||||
*
|
||||
**/
|
||||
|
||||
#ifndef _XRAN_UP_API_H_
|
||||
#define _XRAN_UP_API_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <rte_common.h>
|
||||
#include <rte_mbuf.h>
|
||||
|
||||
#include "xran_pkt.h"
|
||||
#include "xran_pkt_up.h"
|
||||
|
||||
/*
|
||||
* structure used for storing packet parameters needed for generating
|
||||
* a data packet
|
||||
*/
|
||||
struct xran_up_pkt_gen_params
|
||||
{
|
||||
struct radio_app_common_hdr app_params;
|
||||
struct data_section_hdr sec_hdr;
|
||||
struct data_section_compression_hdr compr_hdr_param;
|
||||
union compression_params compr_param;
|
||||
};
|
||||
|
||||
/*
|
||||
* structure used for storing packet parameters needed for generating
|
||||
* a data packet without compression
|
||||
* Next fields are omitted:
|
||||
* udCompHdr (not always present)
|
||||
* reserved (not always present)
|
||||
* udCompParam (not always present)
|
||||
*/
|
||||
struct xran_up_pkt_gen_no_compression_params
|
||||
{
|
||||
struct radio_app_common_hdr app_params;
|
||||
struct data_section_hdr sec_hdr;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Function extracts IQ samples from received mbuf packet.
|
||||
*
|
||||
* @param mbuf Packet with received data.
|
||||
* @param iq_data_start Address of the first IQ sample in mbuf will be returned
|
||||
* here
|
||||
* @return int Bytes of IQ samples that have been extracted from mbuf.
|
||||
*/
|
||||
int32_t xran_extract_iq_samples(struct rte_mbuf *mbuf,
|
||||
void **iq_data_start,
|
||||
uint8_t *CC_ID,
|
||||
uint8_t *Ant_ID,
|
||||
uint8_t *frame_id,
|
||||
uint8_t *subframe_id,
|
||||
uint8_t *slot_id,
|
||||
uint8_t *symb_id,
|
||||
struct ecpri_seq_id *seq_id,
|
||||
uint16_t *num_prbu,
|
||||
uint16_t *start_prbu,
|
||||
uint16_t *sym_inc,
|
||||
uint16_t *rb,
|
||||
uint16_t *sect_id,
|
||||
int8_t expect_comp,
|
||||
uint8_t *compMeth,
|
||||
uint8_t *iqWidth);
|
||||
|
||||
int xran_prepare_iq_symbol_portion(
|
||||
struct rte_mbuf *mbuf,
|
||||
const void *iq_data_start,
|
||||
const enum xran_input_byte_order iq_buf_byte_order,
|
||||
const uint32_t iq_data_num_bytes,
|
||||
struct xran_up_pkt_gen_params *params,
|
||||
uint8_t CC_ID,
|
||||
uint8_t Ant_ID,
|
||||
uint8_t seq_id,
|
||||
uint32_t do_copy);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _XRAN_UP_API_H_ */
|
||||
135
targets/DOCS/html/annotated.html
Normal file
@@ -0,0 +1,135 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.5"/>
|
||||
<title>OpenAirInterface: Data Structures</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="oai_logo.png"/></td>
|
||||
<td style="padding-left: 0.5em;">
|
||||
<div id="projectname">OpenAirInterface
|
||||
</div>
|
||||
<div id="projectbrief">Full experimental OpenSource LTE implementation (Rel 8, partial Rel 10)</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.5 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li><a href="functions.html"><span>Data Fields</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('annotated.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Data Structures</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
|
||||
<table class="directory">
|
||||
<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structbrf__state__t.html" target="_self">brf_state_t</a></td><td class="desc">BladeRF specific data structure </td></tr>
|
||||
<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structeth__params__t.html" target="_self">eth_params_t</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_2_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structif__buffer__t.html" target="_self">if_buffer_t</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_3_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structopenair0__config__t.html" target="_self">openair0_config_t</a></td><td class="desc">RF frontend parameters set by application </td></tr>
|
||||
<tr id="row_4_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structopenair0__device__t.html" target="_self">openair0_device_t</a></td><td class="desc">Structure holds the parameters to configure USRP devices </td></tr>
|
||||
<tr id="row_5_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structopenair0__rf__map.html" target="_self">openair0_rf_map</a></td><td class="desc">RF mapping </td></tr>
|
||||
<tr id="row_6_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structopenair0__thread__t.html" target="_self">openair0_thread_t</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_7_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structopenair0__write__package__t.html" target="_self">openair0_write_package_t</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_8_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structrx__gain__calib__table__t.html" target="_self">rx_gain_calib_table_t</a></td><td class="desc">RF Gain clibration </td></tr>
|
||||
<tr id="row_9_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsamplesBlockHeader__t.html" target="_self">samplesBlockHeader_t</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_10_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structusrp__state__t.html" target="_self">usrp_state_t</a></td><td class="desc"></td></tr>
|
||||
</table>
|
||||
</div><!-- directory -->
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated on Tue Sep 14 2021 15:56:44 for OpenAirInterface by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.5 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
14
targets/DOCS/html/annotated.js
Normal file
@@ -0,0 +1,14 @@
|
||||
var annotated =
|
||||
[
|
||||
[ "brf_state_t", "structbrf__state__t.html", "structbrf__state__t" ],
|
||||
[ "eth_params_t", "structeth__params__t.html", "structeth__params__t" ],
|
||||
[ "if_buffer_t", "structif__buffer__t.html", "structif__buffer__t" ],
|
||||
[ "openair0_config_t", "structopenair0__config__t.html", "structopenair0__config__t" ],
|
||||
[ "openair0_device_t", "structopenair0__device__t.html", "structopenair0__device__t" ],
|
||||
[ "openair0_rf_map", "structopenair0__rf__map.html", "structopenair0__rf__map" ],
|
||||
[ "openair0_thread_t", "structopenair0__thread__t.html", "structopenair0__thread__t" ],
|
||||
[ "openair0_write_package_t", "structopenair0__write__package__t.html", "structopenair0__write__package__t" ],
|
||||
[ "rx_gain_calib_table_t", "structrx__gain__calib__table__t.html", "structrx__gain__calib__table__t" ],
|
||||
[ "samplesBlockHeader_t", "structsamplesBlockHeader__t.html", "structsamplesBlockHeader__t" ],
|
||||
[ "usrp_state_t", "structusrp__state__t.html", "structusrp__state__t" ]
|
||||
];
|
||||
BIN
targets/DOCS/html/bc_s.png
Normal file
|
After Width: | Height: | Size: 676 B |
BIN
targets/DOCS/html/bdwn.png
Normal file
|
After Width: | Height: | Size: 147 B |
1344
targets/DOCS/html/bladerf__lib_8c_source.html
Normal file
217
targets/DOCS/html/bladerf__lib_8h_source.html
Normal file
@@ -0,0 +1,217 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.5"/>
|
||||
<title>OpenAirInterface: bladerf_lib.h Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="oai_logo.png"/></td>
|
||||
<td style="padding-left: 0.5em;">
|
||||
<div id="projectname">OpenAirInterface
|
||||
</div>
|
||||
<div id="projectbrief">Full experimental OpenSource LTE implementation (Rel 8, partial Rel 10)</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.5 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('bladerf__lib_8h_source.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">bladerf_lib.h</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
|
||||
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more</span></div>
|
||||
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * contributor license agreements. See the NOTICE file distributed with</span></div>
|
||||
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * this work for additional information regarding copyright ownership.</span></div>
|
||||
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * The OpenAirInterface Software Alliance licenses this file to You under</span></div>
|
||||
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * the OAI Public License, Version 1.1 (the "License"); you may not use this file</span></div>
|
||||
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * except in compliance with the License.</span></div>
|
||||
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * You may obtain a copy of the License at</span></div>
|
||||
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
|
||||
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * http://www.openairinterface.org/?page_id=698</span></div>
|
||||
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
|
||||
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div>
|
||||
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div>
|
||||
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div>
|
||||
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div>
|
||||
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * limitations under the License.</span></div>
|
||||
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> *-------------------------------------------------------------------------------</span></div>
|
||||
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * For more information about the OpenAirInterface (OAI) Software Alliance:</span></div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * contact@openairinterface.org</span></div>
|
||||
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> */</span></div>
|
||||
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
|
||||
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <libbladeRF.h></span></div>
|
||||
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
|
||||
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "common_lib.h"</span></div>
|
||||
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "LOG/log.h"</span></div>
|
||||
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
|
||||
<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="structbrf__state__t.html"> 37</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
|
||||
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
|
||||
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#a836fa27c6f15033e5718092383e7f736"> 40</a></span>  <span class="keyword">struct </span>bladerf *<a class="code" href="structbrf__state__t.html#a836fa27c6f15033e5718092383e7f736">dev</a>;</div>
|
||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  </div>
|
||||
<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#acc181d520431fef40205e6b3ade6df89"> 43</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structbrf__state__t.html#acc181d520431fef40205e6b3ade6df89">num_buffers</a>;</div>
|
||||
<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#a94a4dfe352de99d40662872fd3f18991"> 45</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structbrf__state__t.html#a94a4dfe352de99d40662872fd3f18991">buffer_size</a>;</div>
|
||||
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#a28ab555ba98ee3a5cb9b4f8b4c9ac488"> 47</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structbrf__state__t.html#a28ab555ba98ee3a5cb9b4f8b4c9ac488">num_transfers</a>;</div>
|
||||
<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#aa41420f268b9543eed1286038a917624"> 49</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structbrf__state__t.html#aa41420f268b9543eed1286038a917624">rx_timeout_ms</a>;</div>
|
||||
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#a07c0610d6bbc25388105c2265a0fb215"> 51</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structbrf__state__t.html#a07c0610d6bbc25388105c2265a0fb215">tx_timeout_ms</a>;</div>
|
||||
<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#a0da54c96ce6b3e370a0af2e6e0b126ac"> 53</a></span>  <span class="keyword">struct </span>bladerf_metadata meta_rx;</div>
|
||||
<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#ab6b8b5b8a767ac0f63a3cc237a0ebe57"> 55</a></span>  <span class="keyword">struct </span>bladerf_metadata meta_tx;</div>
|
||||
<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#ae520095a0bf54e1f5b5c81394c08fe7a"> 57</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structbrf__state__t.html#ae520095a0bf54e1f5b5c81394c08fe7a">sample_rate</a>;</div>
|
||||
<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#ae4fdc71c7a351a8b416b874743b35d9a"> 59</a></span>  <span class="keywordtype">double</span> <a class="code" href="structbrf__state__t.html#ae4fdc71c7a351a8b416b874743b35d9a">tdiff</a>;</div>
|
||||
<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#a836d5de48ea914ce97131d2b883b146c"> 61</a></span>  <span class="keywordtype">int</span> <a class="code" href="structbrf__state__t.html#a836d5de48ea914ce97131d2b883b146c">tx_forward_nsamps</a>; <span class="comment">//166 for 20Mhz</span></div>
|
||||
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
|
||||
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
|
||||
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="comment">// --------------------------------</span></div>
|
||||
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="comment">// Debug and output control</span></div>
|
||||
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="comment">// --------------------------------</span></div>
|
||||
<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#a32d948ff2b5ccb90426414f0d43561cf"> 68</a></span> <span class="comment"></span> <span class="keywordtype">int</span> <a class="code" href="structbrf__state__t.html#a32d948ff2b5ccb90426414f0d43561cf">num_underflows</a>;</div>
|
||||
<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#af446187faddf588c9f48945416d7bfef"> 70</a></span>  <span class="keywordtype">int</span> <a class="code" href="structbrf__state__t.html#af446187faddf588c9f48945416d7bfef">num_overflows</a>;</div>
|
||||
<div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#aa878f3f5e78e7ca7adf74136f0c645ca"> 72</a></span>  <span class="keywordtype">int</span> <a class="code" href="structbrf__state__t.html#aa878f3f5e78e7ca7adf74136f0c645ca">num_seq_errors</a>;</div>
|
||||
<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#a77c4db96b0b2b07e9401f06e97041643"> 74</a></span>  <span class="keywordtype">int</span> <a class="code" href="structbrf__state__t.html#a77c4db96b0b2b07e9401f06e97041643">num_rx_errors</a>;</div>
|
||||
<div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#ab74d12377c74ff3eb4be0bbd5e4b5a3b"> 76</a></span>  <span class="keywordtype">int</span> <a class="code" href="structbrf__state__t.html#ab74d12377c74ff3eb4be0bbd5e4b5a3b">num_tx_errors</a>;</div>
|
||||
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
|
||||
<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#a107010dc90853b1373164ee9be124f0a"> 79</a></span>  uint64_t <a class="code" href="structbrf__state__t.html#a107010dc90853b1373164ee9be124f0a">tx_current_ts</a>;</div>
|
||||
<div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#ada8cf98b7ac2d2cb10cee03ab1494eab"> 81</a></span>  uint64_t <a class="code" href="structbrf__state__t.html#ada8cf98b7ac2d2cb10cee03ab1494eab">rx_current_ts</a>;</div>
|
||||
<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#a188dc90a84fa838dc0bb15744ab77b89"> 83</a></span>  uint64_t <a class="code" href="structbrf__state__t.html#a188dc90a84fa838dc0bb15744ab77b89">tx_actual_nsamps</a>;</div>
|
||||
<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#a33fe94f323f1cc5bab3acafcb2c6ca5a"> 85</a></span>  uint64_t <a class="code" href="structbrf__state__t.html#a33fe94f323f1cc5bab3acafcb2c6ca5a">rx_actual_nsamps</a>;</div>
|
||||
<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#a7120d955244caabe03bba64d5060d08a"> 87</a></span>  uint64_t <a class="code" href="structbrf__state__t.html#a7120d955244caabe03bba64d5060d08a">tx_nsamps</a>;</div>
|
||||
<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#a6a58927f8f3ccf715950ab65c2b6b277"> 89</a></span>  uint64_t <a class="code" href="structbrf__state__t.html#a6a58927f8f3ccf715950ab65c2b6b277">rx_nsamps</a>;</div>
|
||||
<div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#a06b59cb19636e64d4eabb714508ba621"> 91</a></span>  uint64_t <a class="code" href="structbrf__state__t.html#a06b59cb19636e64d4eabb714508ba621">tx_count</a>;</div>
|
||||
<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#a8ac92c1b2095a4d4def3ecbc0e80b11f"> 93</a></span>  uint64_t <a class="code" href="structbrf__state__t.html#a8ac92c1b2095a4d4def3ecbc0e80b11f">rx_count</a>;</div>
|
||||
<div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="structbrf__state__t.html#a872fdca56e9ff4c009821acbe7f47cb9"> 95</a></span>  openair0_timestamp <a class="code" href="structbrf__state__t.html#a872fdca56e9ff4c009821acbe7f47cb9">rx_timestamp</a>;</div>
|
||||
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
|
||||
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> } <a class="code" href="structbrf__state__t.html">brf_state_t</a>;</div>
|
||||
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment">/*</span></div>
|
||||
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment"> * func prototypes </span></div>
|
||||
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="comment"> */</span></div>
|
||||
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">int</span> <a class="code" href="group____BLADERF__PHY__RF__INTERFACE__.html#gabcb074642fa0859cc8f239d459a4b5b9">trx_brf_init</a>(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device);</div>
|
||||
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
|
||||
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> openair0_timestamp <a class="code" href="group____BLADERF__PHY__RF__INTERFACE__.html#ga8ba70b63eb37de53dd1ce5a27408037e">trx_get_timestamp</a>(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device, bladerf_module module);</div>
|
||||
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
|
||||
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">int</span> <a class="code" href="group____BLADERF__PHY__RF__INTERFACE__.html#ga437a357941e20ad4b3c1f345f4872fc1">get_brf_log_level</a>(<span class="keywordtype">int</span> log_level);</div>
|
||||
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
|
||||
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordtype">int</span> <a class="code" href="group____BLADERF__PHY__RF__INTERFACE__.html#ga7a9bb4437de1bd6839d3c752635c4bcf">brf_error</a>(<span class="keywordtype">int</span> status);</div>
|
||||
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
|
||||
<div class="ttc" id="structbrf__state__t_html_aa41420f268b9543eed1286038a917624"><div class="ttname"><a href="structbrf__state__t.html#aa41420f268b9543eed1286038a917624">brf_state_t::rx_timeout_ms</a></div><div class="ttdeci">unsigned int rx_timeout_ms</div><div class="ttdoc">RX timeout. </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00049">bladerf_lib.h:49</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_a94a4dfe352de99d40662872fd3f18991"><div class="ttname"><a href="structbrf__state__t.html#a94a4dfe352de99d40662872fd3f18991">brf_state_t::buffer_size</a></div><div class="ttdeci">unsigned int buffer_size</div><div class="ttdoc">Buffer size. </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00045">bladerf_lib.h:45</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_ada8cf98b7ac2d2cb10cee03ab1494eab"><div class="ttname"><a href="structbrf__state__t.html#ada8cf98b7ac2d2cb10cee03ab1494eab">brf_state_t::rx_current_ts</a></div><div class="ttdeci">uint64_t rx_current_ts</div><div class="ttdoc">timestamp of current RX </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00081">bladerf_lib.h:81</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_a8ac92c1b2095a4d4def3ecbc0e80b11f"><div class="ttname"><a href="structbrf__state__t.html#a8ac92c1b2095a4d4def3ecbc0e80b11f">brf_state_t::rx_count</a></div><div class="ttdeci">uint64_t rx_count</div><div class="ttdoc">number of RX count </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00093">bladerf_lib.h:93</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html"><div class="ttname"><a href="structopenair0__device__t.html">openair0_device_t</a></div><div class="ttdoc">structure holds the parameters to configure USRP devices </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00309">common_lib.h:309</a></div></div>
|
||||
<div class="ttc" id="group____BLADERF__PHY__RF__INTERFACE___html_ga437a357941e20ad4b3c1f345f4872fc1"><div class="ttname"><a href="group____BLADERF__PHY__RF__INTERFACE__.html#ga437a357941e20ad4b3c1f345f4872fc1">get_brf_log_level</a></div><div class="ttdeci">int get_brf_log_level(int log_level)</div><div class="ttdoc">Get BladeRF log level. </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8c_source.html#l01220">bladerf_lib.c:1220</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_a33fe94f323f1cc5bab3acafcb2c6ca5a"><div class="ttname"><a href="structbrf__state__t.html#a33fe94f323f1cc5bab3acafcb2c6ca5a">brf_state_t::rx_actual_nsamps</a></div><div class="ttdeci">uint64_t rx_actual_nsamps</div><div class="ttdoc">number of actual samples received </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00085">bladerf_lib.h:85</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_a6a58927f8f3ccf715950ab65c2b6b277"><div class="ttname"><a href="structbrf__state__t.html#a6a58927f8f3ccf715950ab65c2b6b277">brf_state_t::rx_nsamps</a></div><div class="ttdeci">uint64_t rx_nsamps</div><div class="ttdoc">number of RX samples </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00089">bladerf_lib.h:89</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_ae520095a0bf54e1f5b5c81394c08fe7a"><div class="ttname"><a href="structbrf__state__t.html#ae520095a0bf54e1f5b5c81394c08fe7a">brf_state_t::sample_rate</a></div><div class="ttdeci">unsigned int sample_rate</div><div class="ttdoc">Sample rate. </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00057">bladerf_lib.h:57</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_aa878f3f5e78e7ca7adf74136f0c645ca"><div class="ttname"><a href="structbrf__state__t.html#aa878f3f5e78e7ca7adf74136f0c645ca">brf_state_t::num_seq_errors</a></div><div class="ttdeci">int num_seq_errors</div><div class="ttdoc">number of sequential errors </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00072">bladerf_lib.h:72</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_a872fdca56e9ff4c009821acbe7f47cb9"><div class="ttname"><a href="structbrf__state__t.html#a872fdca56e9ff4c009821acbe7f47cb9">brf_state_t::rx_timestamp</a></div><div class="ttdeci">openair0_timestamp rx_timestamp</div><div class="ttdoc">timestamp of RX packet </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00095">bladerf_lib.h:95</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_a107010dc90853b1373164ee9be124f0a"><div class="ttname"><a href="structbrf__state__t.html#a107010dc90853b1373164ee9be124f0a">brf_state_t::tx_current_ts</a></div><div class="ttdeci">uint64_t tx_current_ts</div><div class="ttdoc">timestamp of current TX </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00079">bladerf_lib.h:79</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_acc181d520431fef40205e6b3ade6df89"><div class="ttname"><a href="structbrf__state__t.html#acc181d520431fef40205e6b3ade6df89">brf_state_t::num_buffers</a></div><div class="ttdeci">unsigned int num_buffers</div><div class="ttdoc">Number of buffers. </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00043">bladerf_lib.h:43</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_a32d948ff2b5ccb90426414f0d43561cf"><div class="ttname"><a href="structbrf__state__t.html#a32d948ff2b5ccb90426414f0d43561cf">brf_state_t::num_underflows</a></div><div class="ttdeci">int num_underflows</div><div class="ttdoc">Number of underflows. </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00068">bladerf_lib.h:68</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_a28ab555ba98ee3a5cb9b4f8b4c9ac488"><div class="ttname"><a href="structbrf__state__t.html#a28ab555ba98ee3a5cb9b4f8b4c9ac488">brf_state_t::num_transfers</a></div><div class="ttdeci">unsigned int num_transfers</div><div class="ttdoc">Number of transfers. </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00047">bladerf_lib.h:47</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html"><div class="ttname"><a href="structbrf__state__t.html">brf_state_t</a></div><div class="ttdoc">BladeRF specific data structure. </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00037">bladerf_lib.h:37</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_a836fa27c6f15033e5718092383e7f736"><div class="ttname"><a href="structbrf__state__t.html#a836fa27c6f15033e5718092383e7f736">brf_state_t::dev</a></div><div class="ttdeci">struct bladerf * dev</div><div class="ttdoc">opaque BladeRF device struct. An empty (&quot;&quot;) or NULL device identifier will result in the first encoun...</div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00040">bladerf_lib.h:40</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_a06b59cb19636e64d4eabb714508ba621"><div class="ttname"><a href="structbrf__state__t.html#a06b59cb19636e64d4eabb714508ba621">brf_state_t::tx_count</a></div><div class="ttdeci">uint64_t tx_count</div><div class="ttdoc">number of TX count </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00091">bladerf_lib.h:91</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_a77c4db96b0b2b07e9401f06e97041643"><div class="ttname"><a href="structbrf__state__t.html#a77c4db96b0b2b07e9401f06e97041643">brf_state_t::num_rx_errors</a></div><div class="ttdeci">int num_rx_errors</div><div class="ttdoc">number of RX errors </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00074">bladerf_lib.h:74</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_a836d5de48ea914ce97131d2b883b146c"><div class="ttname"><a href="structbrf__state__t.html#a836d5de48ea914ce97131d2b883b146c">brf_state_t::tx_forward_nsamps</a></div><div class="ttdeci">int tx_forward_nsamps</div><div class="ttdoc">TX number of forward samples use brf_time_offset to get this value. </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00061">bladerf_lib.h:61</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_ae4fdc71c7a351a8b416b874743b35d9a"><div class="ttname"><a href="structbrf__state__t.html#ae4fdc71c7a351a8b416b874743b35d9a">brf_state_t::tdiff</a></div><div class="ttdeci">double tdiff</div><div class="ttdoc">time offset between transmiter timestamp and receiver timestamp; </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00059">bladerf_lib.h:59</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_ab74d12377c74ff3eb4be0bbd5e4b5a3b"><div class="ttname"><a href="structbrf__state__t.html#ab74d12377c74ff3eb4be0bbd5e4b5a3b">brf_state_t::num_tx_errors</a></div><div class="ttdeci">int num_tx_errors</div><div class="ttdoc">Number of TX errors. </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00076">bladerf_lib.h:76</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_af446187faddf588c9f48945416d7bfef"><div class="ttname"><a href="structbrf__state__t.html#af446187faddf588c9f48945416d7bfef">brf_state_t::num_overflows</a></div><div class="ttdeci">int num_overflows</div><div class="ttdoc">Number of overflows. </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00070">bladerf_lib.h:70</a></div></div>
|
||||
<div class="ttc" id="group____BLADERF__PHY__RF__INTERFACE___html_ga8ba70b63eb37de53dd1ce5a27408037e"><div class="ttname"><a href="group____BLADERF__PHY__RF__INTERFACE__.html#ga8ba70b63eb37de53dd1ce5a27408037e">trx_get_timestamp</a></div><div class="ttdeci">openair0_timestamp trx_get_timestamp(openair0_device *device, bladerf_module module)</div><div class="ttdoc">get current timestamp </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8c_source.html#l00067">bladerf_lib.c:67</a></div></div>
|
||||
<div class="ttc" id="group____BLADERF__PHY__RF__INTERFACE___html_ga7a9bb4437de1bd6839d3c752635c4bcf"><div class="ttname"><a href="group____BLADERF__PHY__RF__INTERFACE__.html#ga7a9bb4437de1bd6839d3c752635c4bcf">brf_error</a></div><div class="ttdeci">int brf_error(int status)</div><div class="ttdoc">bladeRF error report </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8c_source.html#l01176">bladerf_lib.c:1176</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_a7120d955244caabe03bba64d5060d08a"><div class="ttname"><a href="structbrf__state__t.html#a7120d955244caabe03bba64d5060d08a">brf_state_t::tx_nsamps</a></div><div class="ttdeci">uint64_t tx_nsamps</div><div class="ttdoc">number of TX samples </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00087">bladerf_lib.h:87</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_a07c0610d6bbc25388105c2265a0fb215"><div class="ttname"><a href="structbrf__state__t.html#a07c0610d6bbc25388105c2265a0fb215">brf_state_t::tx_timeout_ms</a></div><div class="ttdeci">unsigned int tx_timeout_ms</div><div class="ttdoc">TX timeout. </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00051">bladerf_lib.h:51</a></div></div>
|
||||
<div class="ttc" id="group____BLADERF__PHY__RF__INTERFACE___html_gabcb074642fa0859cc8f239d459a4b5b9"><div class="ttname"><a href="group____BLADERF__PHY__RF__INTERFACE__.html#gabcb074642fa0859cc8f239d459a4b5b9">trx_brf_init</a></div><div class="ttdeci">int trx_brf_init(openair0_device *device)</div><div class="ttdoc">BladeRF Init function (not used at the moment) </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8c_source.html#l00056">bladerf_lib.c:56</a></div></div>
|
||||
<div class="ttc" id="structbrf__state__t_html_a188dc90a84fa838dc0bb15744ab77b89"><div class="ttname"><a href="structbrf__state__t.html#a188dc90a84fa838dc0bb15744ab77b89">brf_state_t::tx_actual_nsamps</a></div><div class="ttdeci">uint64_t tx_actual_nsamps</div><div class="ttdoc">number of actual samples transmitted </div><div class="ttdef"><b>Definition:</b> <a href="bladerf__lib_8h_source.html#l00083">bladerf_lib.h:83</a></div></div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html">ARCH</a></li><li class="navelem"><a class="el" href="dir_53a38f7b91caabdebd78263cee115e31.html">BLADERF</a></li><li class="navelem"><a class="el" href="dir_31fe4f88196f07d47da88c3165f9b109.html">USERSPACE</a></li><li class="navelem"><a class="el" href="dir_7dbc7ac1b70501c722463688f01c3543.html">LIB</a></li><li class="navelem"><b>bladerf_lib.h</b></li>
|
||||
<li class="footer">Generated on Tue Sep 14 2021 15:56:44 for OpenAirInterface by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.5 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
139
targets/DOCS/html/classes.html
Normal file
@@ -0,0 +1,139 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.5"/>
|
||||
<title>OpenAirInterface: Data Structure Index</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="oai_logo.png"/></td>
|
||||
<td style="padding-left: 0.5em;">
|
||||
<div id="projectname">OpenAirInterface
|
||||
</div>
|
||||
<div id="projectbrief">Full experimental OpenSource LTE implementation (Rel 8, partial Rel 10)</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.5 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li><a href="functions.html"><span>Data Fields</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('classes.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Data Structure Index</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="qindex"><a class="qindex" href="#letter_B">B</a> | <a class="qindex" href="#letter_E">E</a> | <a class="qindex" href="#letter_I">I</a> | <a class="qindex" href="#letter_O">O</a> | <a class="qindex" href="#letter_R">R</a> | <a class="qindex" href="#letter_S">S</a> | <a class="qindex" href="#letter_U">U</a></div>
|
||||
<table style="margin: 10px; white-space: nowrap;" align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr><td rowspan="2" valign="bottom"><a name="letter_B"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  B  </div></td></tr></table>
|
||||
</td><td rowspan="2" valign="bottom"><a name="letter_I"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  I  </div></td></tr></table>
|
||||
</td><td valign="top"><a class="el" href="structopenair0__device__t.html">openair0_device_t</a>   </td><td rowspan="2" valign="bottom"><a name="letter_S"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  S  </div></td></tr></table>
|
||||
</td><td></td></tr>
|
||||
<tr><td valign="top"><a class="el" href="structopenair0__rf__map.html">openair0_rf_map</a>   </td><td></td></tr>
|
||||
<tr><td valign="top"><a class="el" href="structbrf__state__t.html">brf_state_t</a>   </td><td valign="top"><a class="el" href="structif__buffer__t.html">if_buffer_t</a>   </td><td valign="top"><a class="el" href="structopenair0__thread__t.html">openair0_thread_t</a>   </td><td valign="top"><a class="el" href="structsamplesBlockHeader__t.html">samplesBlockHeader_t</a>   </td><td></td></tr>
|
||||
<tr><td rowspan="2" valign="bottom"><a name="letter_E"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  E  </div></td></tr></table>
|
||||
</td><td rowspan="2" valign="bottom"><a name="letter_O"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  O  </div></td></tr></table>
|
||||
</td><td valign="top"><a class="el" href="structopenair0__write__package__t.html">openair0_write_package_t</a>   </td><td rowspan="2" valign="bottom"><a name="letter_U"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  U  </div></td></tr></table>
|
||||
</td><td></td></tr>
|
||||
<tr><td rowspan="2" valign="bottom"><a name="letter_R"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  R  </div></td></tr></table>
|
||||
</td><td></td></tr>
|
||||
<tr><td valign="top"><a class="el" href="structeth__params__t.html">eth_params_t</a>   </td><td valign="top"><a class="el" href="structopenair0__config__t.html">openair0_config_t</a>   </td><td valign="top"><a class="el" href="structusrp__state__t.html">usrp_state_t</a>   </td><td></td></tr>
|
||||
<tr><td></td><td></td><td valign="top"><a class="el" href="structrx__gain__calib__table__t.html">rx_gain_calib_table_t</a>   </td><td></td><td></td></tr>
|
||||
<tr><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
</table>
|
||||
<div class="qindex"><a class="qindex" href="#letter_B">B</a> | <a class="qindex" href="#letter_E">E</a> | <a class="qindex" href="#letter_I">I</a> | <a class="qindex" href="#letter_O">O</a> | <a class="qindex" href="#letter_R">R</a> | <a class="qindex" href="#letter_S">S</a> | <a class="qindex" href="#letter_U">U</a></div>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated on Tue Sep 14 2021 15:56:44 for OpenAirInterface by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.5 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
BIN
targets/DOCS/html/closed.png
Normal file
|
After Width: | Height: | Size: 132 B |
603
targets/DOCS/html/common__lib_8h_source.html
Normal file
@@ -0,0 +1,603 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.5"/>
|
||||
<title>OpenAirInterface: common_lib.h Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="oai_logo.png"/></td>
|
||||
<td style="padding-left: 0.5em;">
|
||||
<div id="projectname">OpenAirInterface
|
||||
</div>
|
||||
<div id="projectbrief">Full experimental OpenSource LTE implementation (Rel 8, partial Rel 10)</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.5 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('common__lib_8h_source.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">common_lib.h</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
|
||||
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more</span></div>
|
||||
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * contributor license agreements. See the NOTICE file distributed with</span></div>
|
||||
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * this work for additional information regarding copyright ownership.</span></div>
|
||||
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * The OpenAirInterface Software Alliance licenses this file to You under</span></div>
|
||||
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * the OAI Public License, Version 1.1 (the "License"); you may not use this file</span></div>
|
||||
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * except in compliance with the License.</span></div>
|
||||
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * You may obtain a copy of the License at</span></div>
|
||||
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
|
||||
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * http://www.openairinterface.org/?page_id=698</span></div>
|
||||
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div>
|
||||
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div>
|
||||
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div>
|
||||
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div>
|
||||
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div>
|
||||
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * limitations under the License.</span></div>
|
||||
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> *-------------------------------------------------------------------------------</span></div>
|
||||
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * For more information about the OpenAirInterface (OAI) Software Alliance:</span></div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * contact@openairinterface.org</span></div>
|
||||
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> */</span></div>
|
||||
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
|
||||
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#ifndef COMMON_LIB_H</span></div>
|
||||
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span><span class="preprocessor">#define COMMON_LIB_H</span></div>
|
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"></span><span class="preprocessor">#include <stdint.h></span></div>
|
||||
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include <stdio.h></span></div>
|
||||
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include <sys/types.h></span></div>
|
||||
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include <openair1/PHY/TOOLS/tools_defs.h></span></div>
|
||||
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "record_player.h"</span></div>
|
||||
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
|
||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">/* default name of shared library implementing the radio front end */</span></div>
|
||||
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#define OAI_RF_LIBNAME "oai_device"</span></div>
|
||||
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor"></span><span class="comment">/* name of shared library implementing the transport */</span></div>
|
||||
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#define OAI_TP_LIBNAME "oai_transpro"</span></div>
|
||||
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor"></span><span class="comment">/* name of shared library implementing a third-party transport */</span></div>
|
||||
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#define OAI_THIRDPARTY_TP_LIBNAME "thirdparty_transpro"</span></div>
|
||||
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor"></span><span class="comment">/* name of shared library implementing the rf simulator */</span></div>
|
||||
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#define OAI_RFSIM_LIBNAME "rfsimulator"</span></div>
|
||||
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor"></span><span class="comment">/* name of shared library implementing the basic simulator */</span></div>
|
||||
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#define OAI_BASICSIM_LIBNAME "tcp_bridge_oai"</span></div>
|
||||
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor"></span><span class="comment">/* name of shared library implementing the iq player */</span></div>
|
||||
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#define OAI_IQPLAYER_LIBNAME "oai_iqplayer"</span></div>
|
||||
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor"></span></div>
|
||||
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment">/* flags for BBU to determine whether the attached radio head is local or remote */</span></div>
|
||||
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">#define RAU_LOCAL_RADIO_HEAD 0</span></div>
|
||||
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor"></span><span class="preprocessor">#define RAU_REMOTE_RADIO_HEAD 1</span></div>
|
||||
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor"></span><span class="preprocessor">#define RAU_REMOTE_THIRDPARTY_RADIO_HEAD 2</span></div>
|
||||
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor"></span><span class="preprocessor">#define MAX_WRITE_THREAD_PACKAGE 10</span></div>
|
||||
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor"></span><span class="preprocessor">#define MAX_WRITE_THREAD_BUFFER_SIZE 8</span></div>
|
||||
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"></span><span class="preprocessor">#ifndef MAX_CARDS</span></div>
|
||||
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"></span><span class="preprocessor"> #define MAX_CARDS 8</span></div>
|
||||
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
|
||||
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor"></span></div>
|
||||
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">typedef</span> int64_t openair0_timestamp;</div>
|
||||
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">typedef</span> <span class="keyword">volatile</span> int64_t openair0_vtimestamp;</div>
|
||||
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
|
||||
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
|
||||
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopenair0__device__t.html">openair0_device_t</a> <a class="code" href="structopenair0__device__t.html">openair0_device</a>;</div>
|
||||
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
|
||||
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment">//#define USRP_GAIN_OFFSET (56.0) // 86 calibrated for USRP B210 @ 2.6 GHz to get equivalent RS EPRE in OAI to SMBV100 output</span></div>
|
||||
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
|
||||
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
|
||||
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  max_gain=0,med_gain,byp_gain</div>
|
||||
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> } rx_gain_t;</div>
|
||||
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
|
||||
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
|
||||
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  duplex_mode_TDD=1,duplex_mode_FDD=0</div>
|
||||
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> } duplex_mode_t;</div>
|
||||
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
|
||||
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
|
||||
<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#gaaa5808d4b389abd0ffaa5a6bf8979b95"> 87</a></span> <span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
|
||||
<div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a5679adeb284555f47da34938e83238bc"> 88</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a5679adeb284555f47da34938e83238bc">MIN_RF_DEV_TYPE</a> = 0,</div>
|
||||
<div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a81f2c35e30895729c96f88e44269c61c"> 90</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a81f2c35e30895729c96f88e44269c61c">EXMIMO_DEV</a>,</div>
|
||||
<div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95aba5e4e19cdc634e2cdd0a45c2cbfb64d"> 92</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95aba5e4e19cdc634e2cdd0a45c2cbfb64d">USRP_B200_DEV</a>,</div>
|
||||
<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a9fcafa0a8b21be18eb3da34f21eca235"> 94</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a9fcafa0a8b21be18eb3da34f21eca235">USRP_X300_DEV</a>,</div>
|
||||
<div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a6f20ecc6f7a6fc885b2c4c33428a360f"> 96</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a6f20ecc6f7a6fc885b2c4c33428a360f">USRP_N300_DEV</a>,</div>
|
||||
<div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a426d2c2d06777d36f61a596180ba2bdb"> 98</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a426d2c2d06777d36f61a596180ba2bdb">BLADERF_DEV</a>,</div>
|
||||
<div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95ab0ccbf44555ba24374a291bc6bcc2169"> 100</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95ab0ccbf44555ba24374a291bc6bcc2169">LMSSDR_DEV</a>,</div>
|
||||
<div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a49c770758ffd580c1407ed4837d1b8de"> 102</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a49c770758ffd580c1407ed4837d1b8de">IRIS_DEV</a>,</div>
|
||||
<div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a148c86a8baed1ac3ce6cb488670b5b4f"> 104</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a148c86a8baed1ac3ce6cb488670b5b4f">NONE_DEV</a>,</div>
|
||||
<div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95af767170db03446f909b630f652852a67"> 106</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95af767170db03446f909b630f652852a67">ADRV9371_ZC706_DEV</a>,</div>
|
||||
<div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95ae4577ef9d478874f2f41b0b936822717"> 108</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95ae4577ef9d478874f2f41b0b936822717">UEDv2_DEV</a>,</div>
|
||||
<div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a869fbe11c32e1915a55fa98b4057efc1"> 109</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a869fbe11c32e1915a55fa98b4057efc1">RFSIMULATOR</a>,</div>
|
||||
<div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a76289f688c5fc6574cfd86372e456c1d"> 110</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a76289f688c5fc6574cfd86372e456c1d">MAX_RF_DEV_TYPE</a></div>
|
||||
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> } <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#gaaa5808d4b389abd0ffaa5a6bf8979b95">dev_type_t</a>;</div>
|
||||
<div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga33d6c35c4484405707d457a52e354681"> 112</a></span> <span class="preprocessor">#define DEVTYPE_NAMES {"","EXMIMO","USRP B200","USRP X300","USRP N300","BLADERF","LMSSDR","IRIS","No HW","ADRV9371_ZC706","UEDv2", "RFSIMULATOR"} </span></div>
|
||||
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="preprocessor"></span></div>
|
||||
<div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#gab69560ebc82af819611d037a0121cc98"> 115</a></span> <span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
|
||||
<div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggab69560ebc82af819611d037a0121cc98a3f26f2223f4b3ca902685677ab696b01"> 116</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggab69560ebc82af819611d037a0121cc98a3f26f2223f4b3ca902685677ab696b01">MIN_TRANSP_TYPE</a> = 0,</div>
|
||||
<div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggab69560ebc82af819611d037a0121cc98ad07d016205c095e107a8dbfbe0d14e98"> 118</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggab69560ebc82af819611d037a0121cc98ad07d016205c095e107a8dbfbe0d14e98">ETHERNET_TP</a>,</div>
|
||||
<div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggab69560ebc82af819611d037a0121cc98a607502d097a12a8ee01fe4480cc00125"> 120</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggab69560ebc82af819611d037a0121cc98a607502d097a12a8ee01fe4480cc00125">NONE_TP</a>,</div>
|
||||
<div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggab69560ebc82af819611d037a0121cc98aeec61428a26c9848938dff090c39800c"> 121</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ggab69560ebc82af819611d037a0121cc98aeec61428a26c9848938dff090c39800c">MAX_TRANSP_TYPE</a></div>
|
||||
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> } <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#gab69560ebc82af819611d037a0121cc98">transport_type_t</a>;</div>
|
||||
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
|
||||
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
|
||||
<div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga2eaca82b72e3dce80fa4bc6f00405430"> 126</a></span> <span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
|
||||
<div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#gga2eaca82b72e3dce80fa4bc6f00405430a56fbb3ffdd6a54939bbf35358afec214"> 127</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#gga2eaca82b72e3dce80fa4bc6f00405430a56fbb3ffdd6a54939bbf35358afec214">MIN_HOST_TYPE</a> = 0,</div>
|
||||
<div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#gga2eaca82b72e3dce80fa4bc6f00405430a95f66476b12559b0c2a27430b8eb47e9"> 129</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#gga2eaca82b72e3dce80fa4bc6f00405430a95f66476b12559b0c2a27430b8eb47e9">RAU_HOST</a>,</div>
|
||||
<div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#gga2eaca82b72e3dce80fa4bc6f00405430aa091d53cb7c8ea5fe12a63d6072c8625"> 131</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#gga2eaca82b72e3dce80fa4bc6f00405430aa091d53cb7c8ea5fe12a63d6072c8625">RRU_HOST</a>,</div>
|
||||
<div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#gga2eaca82b72e3dce80fa4bc6f00405430ab9881c2b3691fe35a8c4da225b86edf3"> 132</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#gga2eaca82b72e3dce80fa4bc6f00405430ab9881c2b3691fe35a8c4da225b86edf3">MAX_HOST_TYPE</a></div>
|
||||
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> } <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga2eaca82b72e3dce80fa4bc6f00405430">host_type_t</a>;</div>
|
||||
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
|
||||
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
|
||||
<div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="structrx__gain__calib__table__t.html"> 137</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
|
||||
<div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="structrx__gain__calib__table__t.html#ad573e88571a699ddf5b63efbdf01ae01"> 139</a></span>  <span class="keywordtype">double</span> <a class="code" href="structrx__gain__calib__table__t.html#ad573e88571a699ddf5b63efbdf01ae01">freq</a>;</div>
|
||||
<div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="structrx__gain__calib__table__t.html#acf2c89713a349fc21f822443a0f00774"> 141</a></span>  <span class="keywordtype">double</span> <a class="code" href="structrx__gain__calib__table__t.html#acf2c89713a349fc21f822443a0f00774">offset</a>;</div>
|
||||
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> } <a class="code" href="structrx__gain__calib__table__t.html">rx_gain_calib_table_t</a>;</div>
|
||||
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
|
||||
<div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga306537444209dc91972f17fc71473ff5"> 145</a></span> <span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
|
||||
<div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#gga306537444209dc91972f17fc71473ff5ae027bc2a3779820d0ea9730b38850537"> 147</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#gga306537444209dc91972f17fc71473ff5ae027bc2a3779820d0ea9730b38850537">unset</a>=-1,</div>
|
||||
<div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#gga306537444209dc91972f17fc71473ff5a8bbf5f5c3547f618366c4d293c6a3a8a"> 149</a></span>  <span class="keyword">internal</span>=0,</div>
|
||||
<div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#gga306537444209dc91972f17fc71473ff5a6aef01ed9b1c198e6944f87e370f00b2"> 151</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#gga306537444209dc91972f17fc71473ff5a6aef01ed9b1c198e6944f87e370f00b2">external</a>=1,</div>
|
||||
<div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#gga306537444209dc91972f17fc71473ff5ae2e00f1f847192ece7d24256cf9505b1"> 153</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#gga306537444209dc91972f17fc71473ff5ae2e00f1f847192ece7d24256cf9505b1">gpsdo</a>=2</div>
|
||||
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> } <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga306537444209dc91972f17fc71473ff5">clock_source_t</a>;</div>
|
||||
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div>
|
||||
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
|
||||
<div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html"> 158</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
|
||||
<div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a4f136a8b50b705ca17ce2e22b56ca809"> 160</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__config__t.html#a4f136a8b50b705ca17ce2e22b56ca809">Mod_id</a>;</div>
|
||||
<div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a45f7767d29c7ce903670581a7713eb3f"> 162</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__config__t.html#a45f7767d29c7ce903670581a7713eb3f">log_level</a>;</div>
|
||||
<div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#af2a7bfacbf1df9d5570d1dbc37687584"> 164</a></span>  duplex_mode_t <a class="code" href="structopenair0__config__t.html#af2a7bfacbf1df9d5570d1dbc37687584">duplex_mode</a>;</div>
|
||||
<div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a4a4e352be4ed03dc991e9b4fcd328014"> 166</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__config__t.html#a4a4e352be4ed03dc991e9b4fcd328014">num_rb_dl</a>;</div>
|
||||
<div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a493b219ffa776236a0ef44166898a5a6"> 168</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structopenair0__config__t.html#a493b219ffa776236a0ef44166898a5a6">samples_per_frame</a>;</div>
|
||||
<div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a4f84f7346865903d5279f6ff11bc17ed"> 170</a></span>  <span class="keywordtype">double</span> <a class="code" href="structopenair0__config__t.html#a4f84f7346865903d5279f6ff11bc17ed">sample_rate</a>;</div>
|
||||
<div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a5c3b1f69d2e8ce2d25ceb4c61ea05fed"> 172</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__config__t.html#a5c3b1f69d2e8ce2d25ceb4c61ea05fed">mmapped_dma</a>;</div>
|
||||
<div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#ac27d61589f6c306fb2041dc5ac6b0001"> 174</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__config__t.html#ac27d61589f6c306fb2041dc5ac6b0001">tx_sample_advance</a>;</div>
|
||||
<div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#ab3b3593cfaa56b87b5d8e970d9ff98d6"> 176</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__config__t.html#ab3b3593cfaa56b87b5d8e970d9ff98d6">samples_per_packet</a>;</div>
|
||||
<div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#aa9ecfb675c8232b8390f18c6cf42d93f"> 178</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__config__t.html#aa9ecfb675c8232b8390f18c6cf42d93f">rx_num_channels</a>;</div>
|
||||
<div class="line"><a name="l00180"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a23f0d9ffa88c0f68cd22b76a6a9e0e11"> 180</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__config__t.html#a23f0d9ffa88c0f68cd22b76a6a9e0e11">tx_num_channels</a>;</div>
|
||||
<div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a751a669ffe99c678e9ef178a196b4fe8"> 182</a></span>  int32_t *rxbase[4];</div>
|
||||
<div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a130b67aa2519d907ad3b3e92e461ca50"> 184</a></span>  int32_t *txbase[4];</div>
|
||||
<div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a33bc6fed66f352d3866d65eba5af7e10"> 187</a></span>  <span class="keywordtype">double</span> rx_freq[4];</div>
|
||||
<div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a26ec880b2d9c96da24e1dd98144121ca"> 190</a></span>  <span class="keywordtype">double</span> tx_freq[4];</div>
|
||||
<div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a36ca375b9b136199ab4385b27f95fccb"> 193</a></span>  <a class="code" href="structrx__gain__calib__table__t.html">rx_gain_calib_table_t</a> *<a class="code" href="structopenair0__config__t.html#a36ca375b9b136199ab4385b27f95fccb">rx_gain_calib_table</a>;</div>
|
||||
<div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a4eb1fd1e5aa91b30533565c8e0beb793"> 195</a></span>  rx_gain_t rxg_mode[4];</div>
|
||||
<div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#af98936ed96027d70e62f2eefcc3617d8"> 198</a></span>  <span class="keywordtype">double</span> rx_gain[4];</div>
|
||||
<div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a68c6c550053dbbe3e589c385219c0150"> 201</a></span>  <span class="keywordtype">double</span> rx_gain_offset[4];</div>
|
||||
<div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#af77d1f82e905783aaa3b71e8c1754432"> 203</a></span>  <span class="keywordtype">double</span> tx_gain[4];</div>
|
||||
<div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#ad6e124f006c1cf095930a902214ea054"> 205</a></span>  <span class="keywordtype">double</span> <a class="code" href="structopenair0__config__t.html#ad6e124f006c1cf095930a902214ea054">rx_bw</a>;</div>
|
||||
<div class="line"><a name="l00207"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#ab8c6d50adff71da2060f106112ebda88"> 207</a></span>  <span class="keywordtype">double</span> <a class="code" href="structopenair0__config__t.html#ab8c6d50adff71da2060f106112ebda88">tx_bw</a>;</div>
|
||||
<div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#aa90e61595a7f79ec50afb926c6612664"> 209</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga306537444209dc91972f17fc71473ff5">clock_source_t</a> <a class="code" href="structopenair0__config__t.html#aa90e61595a7f79ec50afb926c6612664">clock_source</a>;</div>
|
||||
<div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a0aa51a114c5b62c53156ba4659b3447e"> 211</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga306537444209dc91972f17fc71473ff5">clock_source_t</a> <a class="code" href="structopenair0__config__t.html#a0aa51a114c5b62c53156ba4659b3447e">time_source</a>;</div>
|
||||
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="comment">//#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)</span></div>
|
||||
<div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a4360e61f7658a21efafc3b2ca75eb33c"> 214</a></span>  <span class="keywordtype">char</span> *<a class="code" href="structopenair0__config__t.html#a4360e61f7658a21efafc3b2ca75eb33c">sdr_addrs</a>;</div>
|
||||
<div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a87d6ddac5743ff50869fd760936ee6ac"> 216</a></span>  <span class="keywordtype">int</span> autocal[4];</div>
|
||||
<div class="line"><a name="l00219"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#acb5f4a44bc209245a53c12a749541101"> 219</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__config__t.html#acb5f4a44bc209245a53c12a749541101">iq_txshift</a>;</div>
|
||||
<div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a309204c5cef2f024a413502b9053203d"> 220</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__config__t.html#a309204c5cef2f024a413502b9053203d">iq_rxrescale</a>;</div>
|
||||
<div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#ad88c6a2684faa259c74515df4e5688b9"> 222</a></span>  <span class="keywordtype">char</span> *<a class="code" href="structopenair0__config__t.html#ad88c6a2684faa259c74515df4e5688b9">configFilename</a>;</div>
|
||||
<div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#af96c0d5571a1d2514ea0ab28e2e978ae"> 224</a></span>  <span class="keywordtype">char</span> *<a class="code" href="structopenair0__config__t.html#af96c0d5571a1d2514ea0ab28e2e978ae">remote_addr</a>;</div>
|
||||
<div class="line"><a name="l00226"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#ae00e0de09582b48b20c16c5f2c062c38"> 226</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structopenair0__config__t.html#ae00e0de09582b48b20c16c5f2c062c38">remote_port</a>;</div>
|
||||
<div class="line"><a name="l00228"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#ae9b75daa2808da83e5fcd76c714454ee"> 228</a></span>  <span class="keywordtype">char</span> *<a class="code" href="structopenair0__config__t.html#ae9b75daa2808da83e5fcd76c714454ee">my_addr</a>;</div>
|
||||
<div class="line"><a name="l00230"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a172d0e6c28acf03a69b4ca2a7cef1725"> 230</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structopenair0__config__t.html#a172d0e6c28acf03a69b4ca2a7cef1725">my_port</a>;</div>
|
||||
<div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a79af2dda514d36fbc3264fd5724795ae"> 232</a></span>  uint32_t <a class="code" href="structopenair0__config__t.html#a79af2dda514d36fbc3264fd5724795ae">recplay_mode</a>;</div>
|
||||
<div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a95b1ab3fbef072586d640cdcbe84554a"> 233</a></span>  recplay_conf_t *<a class="code" href="structopenair0__config__t.html#a95b1ab3fbef072586d640cdcbe84554a">recplay_conf</a>;</div>
|
||||
<div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#ac691df2b1dacb97e28e5a531043fccc8"> 235</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structopenair0__config__t.html#ac691df2b1dacb97e28e5a531043fccc8">samples_per_tti</a>;</div>
|
||||
<div class="line"><a name="l00237"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#ab1abed061a06f6fcd79bed1f914b68b5"> 237</a></span>  <span class="keywordtype">double</span> <a class="code" href="structopenair0__config__t.html#ab1abed061a06f6fcd79bed1f914b68b5">rx_sample_rate</a>;</div>
|
||||
<div class="line"><a name="l00239"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#a0c479543c8998390076751412aace631"> 239</a></span>  <span class="keywordtype">double</span> <a class="code" href="structopenair0__config__t.html#a0c479543c8998390076751412aace631">tx_sample_rate</a>;</div>
|
||||
<div class="line"><a name="l00241"></a><span class="lineno"><a class="line" href="structopenair0__config__t.html#ac723300aef5ada036a69bcd30bd54c8f"> 241</a></span>  int8_t <a class="code" href="structopenair0__config__t.html#ac723300aef5ada036a69bcd30bd54c8f">threequarter_fs</a>;</div>
|
||||
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> } <a class="code" href="structopenair0__config__t.html">openair0_config_t</a>;</div>
|
||||
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div>
|
||||
<div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="structopenair0__rf__map.html"> 245</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
|
||||
<div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="structopenair0__rf__map.html#ae2842aac50ccd52cfb010413f45a1196"> 247</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__rf__map.html#ae2842aac50ccd52cfb010413f45a1196">card</a>;</div>
|
||||
<div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="structopenair0__rf__map.html#a58606d900e601316a537bf35ddc744ef"> 249</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__rf__map.html#a58606d900e601316a537bf35ddc744ef">chain</a>;</div>
|
||||
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> } <a class="code" href="structopenair0__rf__map.html">openair0_rf_map</a>;</div>
|
||||
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div>
|
||||
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
|
||||
<div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="structeth__params__t.html"> 253</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
|
||||
<div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="structeth__params__t.html#a28c524821470015a8508fd03cb2235c1"> 254</a></span>  <span class="keywordtype">char</span> *<a class="code" href="structeth__params__t.html#a28c524821470015a8508fd03cb2235c1">remote_addr</a>;</div>
|
||||
<div class="line"><a name="l00256"></a><span class="lineno"><a class="line" href="structeth__params__t.html#a986ad1aa4233de6ef8db939a7d3d1b83"> 256</a></span>  uint16_t <a class="code" href="structeth__params__t.html#a986ad1aa4233de6ef8db939a7d3d1b83">remote_portc</a>;</div>
|
||||
<div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="structeth__params__t.html#a6f884345f641384b8585bb3e0f8e8000"> 258</a></span>  uint16_t <a class="code" href="structeth__params__t.html#a6f884345f641384b8585bb3e0f8e8000">remote_portd</a>;</div>
|
||||
<div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="structeth__params__t.html#ad8098226503aa2e2ab27768c06a4def1"> 260</a></span>  <span class="keywordtype">char</span> *<a class="code" href="structeth__params__t.html#ad8098226503aa2e2ab27768c06a4def1">my_addr</a>;</div>
|
||||
<div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="structeth__params__t.html#a460c6aa8e7ac6ac7274c7352493e507d"> 262</a></span>  uint16_t <a class="code" href="structeth__params__t.html#a460c6aa8e7ac6ac7274c7352493e507d">my_portc</a>;</div>
|
||||
<div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="structeth__params__t.html#a44c3418e5aa10e5809d3a26830ce4c96"> 264</a></span>  uint16_t <a class="code" href="structeth__params__t.html#a44c3418e5aa10e5809d3a26830ce4c96">my_portd</a>;</div>
|
||||
<div class="line"><a name="l00266"></a><span class="lineno"><a class="line" href="structeth__params__t.html#af9c9cc896817467607bddb69045fae7c"> 266</a></span>  <span class="keywordtype">char</span> *<a class="code" href="structeth__params__t.html#af9c9cc896817467607bddb69045fae7c">local_if_name</a>;</div>
|
||||
<div class="line"><a name="l00268"></a><span class="lineno"><a class="line" href="structeth__params__t.html#a265c4ee5b215fbd4c4c4a4c47394c20f"> 268</a></span>  uint8_t <a class="code" href="structeth__params__t.html#a265c4ee5b215fbd4c4c4a4c47394c20f">transp_preference</a>;</div>
|
||||
<div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="structeth__params__t.html#a13deb519ea5f11320b3694cc1a20694f"> 270</a></span>  uint8_t <a class="code" href="structeth__params__t.html#a13deb519ea5f11320b3694cc1a20694f">if_compress</a>;</div>
|
||||
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> } <a class="code" href="structeth__params__t.html">eth_params_t</a>;</div>
|
||||
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div>
|
||||
<div class="line"><a name="l00273"></a><span class="lineno"><a class="line" href="structif__buffer__t.html"> 273</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
|
||||
<div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="structif__buffer__t.html#ac450848eb036d004553f9da5335b7b0c"> 275</a></span>  <span class="keywordtype">void</span> *tx[10];</div>
|
||||
<div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="structif__buffer__t.html#a2547ae9b87c2defff57faf96a7640f36"> 277</a></span>  <span class="keywordtype">void</span> *<a class="code" href="structif__buffer__t.html#a2547ae9b87c2defff57faf96a7640f36">tx_prach</a>;</div>
|
||||
<div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="structif__buffer__t.html#afce30aa05ce77e0eb22d91a148e23233"> 279</a></span>  <span class="keywordtype">void</span> *<a class="code" href="structif__buffer__t.html#afce30aa05ce77e0eb22d91a148e23233">rx</a>;</div>
|
||||
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> } <a class="code" href="structif__buffer__t.html">if_buffer_t</a>;</div>
|
||||
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div>
|
||||
<div class="line"><a name="l00282"></a><span class="lineno"><a class="line" href="structopenair0__write__package__t.html"> 282</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
|
||||
<div class="line"><a name="l00283"></a><span class="lineno"><a class="line" href="structopenair0__write__package__t.html#af754d0ce3e74bdaab788817fccd51c4b"> 283</a></span>  openair0_timestamp <a class="code" href="structopenair0__write__package__t.html#af754d0ce3e74bdaab788817fccd51c4b">timestamp</a>;</div>
|
||||
<div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="structopenair0__write__package__t.html#a89e50f347889b77f4041ff8ac3805778"> 284</a></span>  <span class="keywordtype">void</span> *buff[MAX_WRITE_THREAD_BUFFER_SIZE];<span class="comment">// buffer to be write;</span></div>
|
||||
<div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="structopenair0__write__package__t.html#ac5544809ab8750a746c4cec1c8a1ad8c"> 285</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__write__package__t.html#ac5544809ab8750a746c4cec1c8a1ad8c">nsamps</a>;</div>
|
||||
<div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="structopenair0__write__package__t.html#a8cae5e7322eae32a710c66383ad38034"> 286</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__write__package__t.html#a8cae5e7322eae32a710c66383ad38034">cc</a>;</div>
|
||||
<div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="structopenair0__write__package__t.html#a4ee00eecec7b5d7c898805e0abfee9cd"> 287</a></span>  <span class="keywordtype">signed</span> <span class="keywordtype">char</span> <a class="code" href="structopenair0__write__package__t.html#a4ee00eecec7b5d7c898805e0abfee9cd">first_packet</a>;</div>
|
||||
<div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="structopenair0__write__package__t.html#a0473807080beeaf26ce63b94e38d470d"> 288</a></span>  <span class="keywordtype">signed</span> <span class="keywordtype">char</span> <a class="code" href="structopenair0__write__package__t.html#a0473807080beeaf26ce63b94e38d470d">last_packet</a>;</div>
|
||||
<div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="structopenair0__write__package__t.html#a3b165b430763a3a13e184e86e3f75418"> 289</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__write__package__t.html#a3b165b430763a3a13e184e86e3f75418">flags_msb</a>;</div>
|
||||
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> } <a class="code" href="structopenair0__write__package__t.html">openair0_write_package_t</a>;</div>
|
||||
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div>
|
||||
<div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="structopenair0__thread__t.html"> 292</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
|
||||
<div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="structopenair0__thread__t.html#a13134e3b25221c5f1ecdad80cfad6570"> 293</a></span>  <a class="code" href="structopenair0__write__package__t.html">openair0_write_package_t</a> write_package[MAX_WRITE_THREAD_PACKAGE];</div>
|
||||
<div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="structopenair0__thread__t.html#a5c95792bc9ab981daffd94762b941c09"> 294</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__thread__t.html#a5c95792bc9ab981daffd94762b941c09">start</a>;</div>
|
||||
<div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="structopenair0__thread__t.html#ae9612307d1e4bbfb38886dd60a2cd8ed"> 295</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__thread__t.html#ae9612307d1e4bbfb38886dd60a2cd8ed">end</a>;</div>
|
||||
<div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="structopenair0__thread__t.html#abefca45c14975b7c330afc3fb8bf28a3"> 297</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__thread__t.html#abefca45c14975b7c330afc3fb8bf28a3">count_write</a>;</div>
|
||||
<div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="structopenair0__thread__t.html#aa6078d75f5ca8457dc79360a2f83287e"> 299</a></span>  pthread_t <a class="code" href="structopenair0__thread__t.html#aa6078d75f5ca8457dc79360a2f83287e">pthread_write</a>;</div>
|
||||
<div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="structopenair0__thread__t.html#a4c3a935f1ecfe59a3788d36e4134d67f"> 301</a></span>  pthread_attr_t <a class="code" href="structopenair0__thread__t.html#a4c3a935f1ecfe59a3788d36e4134d67f">attr_write</a>;</div>
|
||||
<div class="line"><a name="l00303"></a><span class="lineno"><a class="line" href="structopenair0__thread__t.html#a844baf6d1fd5d8e6b308270c9f82c051"> 303</a></span>  pthread_cond_t <a class="code" href="structopenair0__thread__t.html#a844baf6d1fd5d8e6b308270c9f82c051">cond_write</a>;</div>
|
||||
<div class="line"><a name="l00305"></a><span class="lineno"><a class="line" href="structopenair0__thread__t.html#aeb4c7b74a599f1625e03ff5ad9ab8f54"> 305</a></span>  pthread_mutex_t <a class="code" href="structopenair0__thread__t.html#aeb4c7b74a599f1625e03ff5ad9ab8f54">mutex_write</a>;</div>
|
||||
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> } <a class="code" href="structopenair0__thread__t.html">openair0_thread_t</a>;</div>
|
||||
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div>
|
||||
<div class="line"><a name="l00309"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html"> 309</a></span> <span class="keyword">struct </span><a class="code" href="structopenair0__device__t.html">openair0_device_t</a> {</div>
|
||||
<div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#ac8c89901a17211bc9fc6726eeab7c6d5"> 311</a></span>  <a class="code" href="structopenair0__thread__t.html">openair0_thread_t</a> <a class="code" href="structopenair0__device__t.html#ac8c89901a17211bc9fc6726eeab7c6d5">write_thread</a>;</div>
|
||||
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div>
|
||||
<div class="line"><a name="l00314"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#afd3417564d89c5940326c51b3f367ec2"> 314</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__device__t.html#afd3417564d89c5940326c51b3f367ec2">Mod_id</a>;</div>
|
||||
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div>
|
||||
<div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#a9058b8d7018f07f95fd09609689f0b44"> 317</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__device__t.html#a9058b8d7018f07f95fd09609689f0b44">CC_id</a>;</div>
|
||||
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div>
|
||||
<div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#af6d3431966004aabb2dea1d5d44ceda0"> 320</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#gaaa5808d4b389abd0ffaa5a6bf8979b95">dev_type_t</a> <a class="code" href="structopenair0__device__t.html#af6d3431966004aabb2dea1d5d44ceda0">type</a>;</div>
|
||||
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
|
||||
<div class="line"><a name="l00323"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#aca56a70c10571b830ef148ff0ddddc59"> 323</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#gab69560ebc82af819611d037a0121cc98">transport_type_t</a> <a class="code" href="structopenair0__device__t.html#aca56a70c10571b830ef148ff0ddddc59">transp_type</a>;</div>
|
||||
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div>
|
||||
<div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#a27b16daa24a6dd438ded9c9fbce19a27"> 326</a></span>  <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga2eaca82b72e3dce80fa4bc6f00405430">host_type_t</a> <a class="code" href="structopenair0__device__t.html#a27b16daa24a6dd438ded9c9fbce19a27">host_type</a>;</div>
|
||||
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> </div>
|
||||
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="comment">/* !brief RF frontend parameters set by application */</span></div>
|
||||
<div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#af31d194f4688283fa7e1dac964b20b5e"> 329</a></span>  <a class="code" href="structopenair0__config__t.html">openair0_config_t</a> *<a class="code" href="structopenair0__device__t.html#af31d194f4688283fa7e1dac964b20b5e">openair0_cfg</a>;</div>
|
||||
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div>
|
||||
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <span class="comment">/* !brief ETH params set by application */</span></div>
|
||||
<div class="line"><a name="l00332"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#aae425138eefc6ed6d6205c6e942e2e3e"> 332</a></span>  <a class="code" href="structeth__params__t.html">eth_params_t</a> *<a class="code" href="structopenair0__device__t.html#aae425138eefc6ed6d6205c6e942e2e3e">eth_params</a>;</div>
|
||||
<div class="line"><a name="l00334"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#aec43dbef661454499203121bba63b043"> 334</a></span>  recplay_state_t *<a class="code" href="structopenair0__device__t.html#aec43dbef661454499203121bba63b043">recplay_state</a>;</div>
|
||||
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="comment">/* !brief Indicates if device already initialized */</span></div>
|
||||
<div class="line"><a name="l00336"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#a5d01fbd97c3f4f7cae0945ab1d1c52aa"> 336</a></span>  <span class="keywordtype">int</span> <a class="code" href="structopenair0__device__t.html#a5d01fbd97c3f4f7cae0945ab1d1c52aa">is_init</a>;</div>
|
||||
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div>
|
||||
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div>
|
||||
<div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#a8561d9c34df9b5d74b974466721e6929"> 340</a></span>  <span class="keywordtype">void</span> *<a class="code" href="structopenair0__device__t.html#a8561d9c34df9b5d74b974466721e6929">priv</a>;</div>
|
||||
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div>
|
||||
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="comment">/* Functions API, which are called by the application*/</span></div>
|
||||
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div>
|
||||
<div class="line"><a name="l00347"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#a2a3ad75f1ee39fba38aee3a2b9a0822a"> 347</a></span>  int (*<a class="code" href="structopenair0__device__t.html#a2a3ad75f1ee39fba38aee3a2b9a0822a">trx_start_func</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device);</div>
|
||||
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div>
|
||||
<div class="line"><a name="l00354"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#ab12a26c3776e8a9b09bca0a507f43493"> 354</a></span>  int (*<a class="code" href="structopenair0__device__t.html#ab12a26c3776e8a9b09bca0a507f43493">trx_config_func</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a>* device, <a class="code" href="structopenair0__config__t.html">openair0_config_t</a> *<a class="code" href="structopenair0__device__t.html#af31d194f4688283fa7e1dac964b20b5e">openair0_cfg</a>);</div>
|
||||
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div>
|
||||
<div class="line"><a name="l00361"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#acc3a7d85604cb01ae1b5c2fd06d5977a"> 361</a></span>  int (*<a class="code" href="structopenair0__device__t.html#acc3a7d85604cb01ae1b5c2fd06d5977a">trx_ctlsend_func</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device, <span class="keywordtype">void</span> *msg, ssize_t msg_len);</div>
|
||||
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div>
|
||||
<div class="line"><a name="l00368"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#a45b4e2287bfd6532cf5c1aebfa38dacf"> 368</a></span>  int (*<a class="code" href="structopenair0__device__t.html#a45b4e2287bfd6532cf5c1aebfa38dacf">trx_ctlrecv_func</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device, <span class="keywordtype">void</span> *msg, ssize_t msg_len);</div>
|
||||
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div>
|
||||
<div class="line"><a name="l00378"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#ac36b80527a9850cc1a021f4f825c49d1"> 378</a></span>  int (*<a class="code" href="structopenair0__device__t.html#ac36b80527a9850cc1a021f4f825c49d1">trx_write_func</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device, openair0_timestamp timestamp, <span class="keywordtype">void</span> **buff, <span class="keywordtype">int</span> nsamps,<span class="keywordtype">int</span> antenna_id, <span class="keywordtype">int</span> flags);</div>
|
||||
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div>
|
||||
<div class="line"><a name="l00388"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#a8ab0f07a3564d6de48302ffcae7f3537"> 388</a></span>  int (*<a class="code" href="structopenair0__device__t.html#a8ab0f07a3564d6de48302ffcae7f3537">trx_write_func2</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device, openair0_timestamp timestamp, <span class="keywordtype">void</span> *buff, <span class="keywordtype">int</span> nsamps,<span class="keywordtype">int</span> antenna_id, <span class="keywordtype">int</span> flags);</div>
|
||||
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div>
|
||||
<div class="line"><a name="l00402"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#ae108d08f894211745ef8da1d6b3c8276"> 402</a></span>  int (*<a class="code" href="structopenair0__device__t.html#ae108d08f894211745ef8da1d6b3c8276">trx_read_func</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device, openair0_timestamp *ptimestamp, <span class="keywordtype">void</span> **buff, <span class="keywordtype">int</span> nsamps,<span class="keywordtype">int</span> num_antennas);</div>
|
||||
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div>
|
||||
<div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#afec2fbe0d81987e2093c3daf8fc4355a"> 415</a></span>  int (*<a class="code" href="structopenair0__device__t.html#afec2fbe0d81987e2093c3daf8fc4355a">trx_read_func2</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device, openair0_timestamp *ptimestamp, <span class="keywordtype">void</span> *buff, <span class="keywordtype">int</span> nsamps,<span class="keywordtype">int</span> *antenna_id);</div>
|
||||
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> </div>
|
||||
<div class="line"><a name="l00421"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#a1561d90fd09b7a80f2491abcbf3b1356"> 421</a></span>  int (*<a class="code" href="structopenair0__device__t.html#a1561d90fd09b7a80f2491abcbf3b1356">trx_get_stats_func</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device);</div>
|
||||
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div>
|
||||
<div class="line"><a name="l00427"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#a259a8bb97c4750a6424ae41fa3c5c2ca"> 427</a></span>  int (*<a class="code" href="structopenair0__device__t.html#a259a8bb97c4750a6424ae41fa3c5c2ca">trx_reset_stats_func</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device);</div>
|
||||
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> </div>
|
||||
<div class="line"><a name="l00432"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#a838459a1803d7aef9c17c48a3597149c"> 432</a></span>  void (*<a class="code" href="structopenair0__device__t.html#a838459a1803d7aef9c17c48a3597149c">trx_end_func</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device);</div>
|
||||
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> </div>
|
||||
<div class="line"><a name="l00436"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#a14f2c5c56d3bfb67d360910c0b5a1abb"> 436</a></span>  int (*<a class="code" href="structopenair0__device__t.html#a14f2c5c56d3bfb67d360910c0b5a1abb">trx_stop_func</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device);</div>
|
||||
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> </div>
|
||||
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="comment">/* Functions API related to UE*/</span></div>
|
||||
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> </div>
|
||||
<div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#a82b2a6b2961e16cf4266c701e6ff5562"> 446</a></span>  int (*<a class="code" href="structopenair0__device__t.html#a82b2a6b2961e16cf4266c701e6ff5562">trx_set_freq_func</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device, <a class="code" href="structopenair0__config__t.html">openair0_config_t</a> *<a class="code" href="structopenair0__device__t.html#af31d194f4688283fa7e1dac964b20b5e">openair0_cfg</a>,<span class="keywordtype">int</span> exmimo_dump_config);</div>
|
||||
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div>
|
||||
<div class="line"><a name="l00453"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#a4f97ba8d1ae444a5392bb367909ba330"> 453</a></span>  int (*<a class="code" href="structopenair0__device__t.html#a4f97ba8d1ae444a5392bb367909ba330">trx_set_gains_func</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device, <a class="code" href="structopenair0__config__t.html">openair0_config_t</a> *<a class="code" href="structopenair0__device__t.html#af31d194f4688283fa7e1dac964b20b5e">openair0_cfg</a>);</div>
|
||||
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> </div>
|
||||
<div class="line"><a name="l00459"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#afdb71036a18e7982ad077c235b28f1c7"> 459</a></span>  void (*<a class="code" href="structopenair0__device__t.html#afdb71036a18e7982ad077c235b28f1c7">configure_rru</a>)(<span class="keywordtype">int</span> idx, <span class="keywordtype">void</span> *arg);</div>
|
||||
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> </div>
|
||||
<div class="line"><a name="l00464"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#a4e5d9334a5257be49bf8e50121094ea7"> 464</a></span>  <span class="keywordtype">void</span> *<a class="code" href="structopenair0__device__t.html#a4e5d9334a5257be49bf8e50121094ea7">thirdparty_priv</a>;</div>
|
||||
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> </div>
|
||||
<div class="line"><a name="l00469"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#aa60512fadf8756ca8b6750fb37287ec2"> 469</a></span>  int (*<a class="code" href="structopenair0__device__t.html#aa60512fadf8756ca8b6750fb37287ec2">thirdparty_init</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device);</div>
|
||||
<div class="line"><a name="l00473"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#a2859ae1bcad26ea7c5c1829c36f3afaf"> 473</a></span>  int (*<a class="code" href="structopenair0__device__t.html#a2859ae1bcad26ea7c5c1829c36f3afaf">thirdparty_cleanup</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device);</div>
|
||||
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div>
|
||||
<div class="line"><a name="l00478"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#a015023e826283e3de27ea20163187221"> 478</a></span>  int (*<a class="code" href="structopenair0__device__t.html#a015023e826283e3de27ea20163187221">thirdparty_startstreaming</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device);</div>
|
||||
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div>
|
||||
<div class="line"><a name="l00484"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#accbaf10907905da0fb039af8908535d7"> 484</a></span>  int (*<a class="code" href="structopenair0__device__t.html#accbaf10907905da0fb039af8908535d7">trx_write_init</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device);</div>
|
||||
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="comment">/* \brief Get internal parameter</span></div>
|
||||
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="comment"> * \param id parameter to get</span></div>
|
||||
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="comment"> * \return a pointer to the parameter</span></div>
|
||||
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="comment"> */</span></div>
|
||||
<div class="line"><a name="l00489"></a><span class="lineno"><a class="line" href="structopenair0__device__t.html#a4a263d9326882818c7c833148a0b4792"> 489</a></span>  <span class="keywordtype">void</span> *(*get_internal_parameter)(<span class="keywordtype">char</span> *id);</div>
|
||||
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> };</div>
|
||||
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> </div>
|
||||
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="comment">/* type of device init function, implemented in shared lib */</span></div>
|
||||
<div class="line"><a name="l00493"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#gab546721d68ab48e07707dc3b0620d412"> 493</a></span> <span class="keyword">typedef</span> int(*<a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#gab546721d68ab48e07707dc3b0620d412">oai_device_initfunc_t</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device, <a class="code" href="structopenair0__config__t.html">openair0_config_t</a> *openair0_cfg);</div>
|
||||
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="comment">/* type of transport init function, implemented in shared lib */</span></div>
|
||||
<div class="line"><a name="l00495"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga5cd5ca6e07ca455ac31c2d8ded78385a"> 495</a></span> <span class="keyword">typedef</span> int(*<a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga5cd5ca6e07ca455ac31c2d8ded78385a">oai_transport_initfunc_t</a>)(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device, <a class="code" href="structopenair0__config__t.html">openair0_config_t</a> *openair0_cfg, <a class="code" href="structeth__params__t.html">eth_params_t</a> *eth_params);</div>
|
||||
<div class="line"><a name="l00496"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga022ce7ddc9050e3c7baed6d96473aa4a"> 496</a></span> <span class="preprocessor">#define UE_MAGICDL 0xA5A5A5A5A5A5A5A5 // UE DL FDD record</span></div>
|
||||
<div class="line"><a name="l00497"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga38e28ba9589c01b3a92b8ff93ec5f6af"> 497</a></span> <span class="preprocessor"></span><span class="preprocessor">#define UE_MAGICUL 0x5A5A5A5A5A5A5A5A // UE UL FDD record</span></div>
|
||||
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="preprocessor"></span></div>
|
||||
<div class="line"><a name="l00499"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga4139a42c4d7e44cf899d9c6f18108f18"> 499</a></span> <span class="preprocessor">#define ENB_MAGICDL 0xB5B5B5B5B5B5B5B5 // eNB DL FDD record</span></div>
|
||||
<div class="line"><a name="l00500"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#gaaf8339dffb26da7639ae8650651593b3"> 500</a></span> <span class="preprocessor"></span><span class="preprocessor">#define ENB_MAGICUL 0x5B5B5B5B5B5B5B5B // eNB UL FDD record</span></div>
|
||||
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="preprocessor"></span></div>
|
||||
<div class="line"><a name="l00502"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga6c47321d0813193ce34b1d2de04de068"> 502</a></span> <span class="preprocessor">#define OPTION_LZ4 0x00000001 // LZ4 compression (option_value is set to compressed size)</span></div>
|
||||
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="preprocessor"></span></div>
|
||||
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div>
|
||||
<div class="line"><a name="l00505"></a><span class="lineno"><a class="line" href="structsamplesBlockHeader__t.html"> 505</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
|
||||
<div class="line"><a name="l00506"></a><span class="lineno"><a class="line" href="structsamplesBlockHeader__t.html#a9d6ff00928256884c753d8d1d6e5d242"> 506</a></span>  uint64_t <a class="code" href="structsamplesBlockHeader__t.html#a9d6ff00928256884c753d8d1d6e5d242">magic</a>; <span class="comment">// Magic value (see defines above)</span></div>
|
||||
<div class="line"><a name="l00507"></a><span class="lineno"><a class="line" href="structsamplesBlockHeader__t.html#a30015904d801460b2185c394ef6f4fab"> 507</a></span>  uint32_t <a class="code" href="structsamplesBlockHeader__t.html#a30015904d801460b2185c394ef6f4fab">size</a>; <span class="comment">// Number of samples per antenna to follow this header</span></div>
|
||||
<div class="line"><a name="l00508"></a><span class="lineno"><a class="line" href="structsamplesBlockHeader__t.html#aef4e02898cfb6b11cdf8d6b375ec7133"> 508</a></span>  uint32_t <a class="code" href="structsamplesBlockHeader__t.html#aef4e02898cfb6b11cdf8d6b375ec7133">nbAnt</a>; <span class="comment">// Total number of antennas following this header</span></div>
|
||||
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="comment">// Samples per antenna follow this header,</span></div>
|
||||
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="comment">// i.e. nbAnt = 2 => this header+samples_antenna_0+samples_antenna_1</span></div>
|
||||
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <span class="comment">// data following this header in bytes is nbAnt*size*sizeof(sample_t)</span></div>
|
||||
<div class="line"><a name="l00512"></a><span class="lineno"><a class="line" href="structsamplesBlockHeader__t.html#a8f4c789a1a4f7594c48f4e8653828dd5"> 512</a></span>  uint64_t <a class="code" href="structsamplesBlockHeader__t.html#a8f4c789a1a4f7594c48f4e8653828dd5">timestamp</a>; <span class="comment">// Timestamp value of first sample</span></div>
|
||||
<div class="line"><a name="l00513"></a><span class="lineno"><a class="line" href="structsamplesBlockHeader__t.html#a7ab7d7500a3de2cbf4cad56d9551a6c1"> 513</a></span>  uint32_t <a class="code" href="structsamplesBlockHeader__t.html#a7ab7d7500a3de2cbf4cad56d9551a6c1">option_value</a>; <span class="comment">// Option value</span></div>
|
||||
<div class="line"><a name="l00514"></a><span class="lineno"><a class="line" href="structsamplesBlockHeader__t.html#a868352b7fea04360892e1074fff65610"> 514</a></span>  uint32_t <a class="code" href="structsamplesBlockHeader__t.html#a868352b7fea04360892e1074fff65610">option_flag</a>; <span class="comment">// Option flag</span></div>
|
||||
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> } <a class="code" href="structsamplesBlockHeader__t.html">samplesBlockHeader_t</a>;</div>
|
||||
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> </div>
|
||||
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
|
||||
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span></div>
|
||||
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> {</div>
|
||||
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="preprocessor">#endif</span></div>
|
||||
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="preprocessor"></span></div>
|
||||
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> </div>
|
||||
<div class="line"><a name="l00523"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga76f2a4a93510cb1c139688780bba9087"> 523</a></span> <span class="preprocessor">#define DEVICE_SECTION "device"</span></div>
|
||||
<div class="line"><a name="l00524"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga4b4bf05f0ed33f257069e771d67bc242"> 524</a></span> <span class="preprocessor"></span><span class="preprocessor">#define CONFIG_HLP_DEVICE "Identifies the oai device (the interface to RF) to use, the shared lib \"lib_<name>.so\" will be loaded"</span></div>
|
||||
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="preprocessor"></span></div>
|
||||
<div class="line"><a name="l00526"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga31bf6093e54db87ecf87c1b77934de5b"> 526</a></span> <span class="preprocessor">#define CONFIG_DEVICEOPT_NAME "name"</span></div>
|
||||
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="preprocessor"></span></div>
|
||||
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="comment">/* inclusion for device configuration */</span></div>
|
||||
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="comment">/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/</span></div>
|
||||
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="comment">/* config parameters for oai device */</span></div>
|
||||
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="comment">/* optname helpstr paramflags XXXptr defXXXval type numelt */</span></div>
|
||||
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="comment">/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/</span></div>
|
||||
<div class="line"><a name="l00533"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#gaf86e69cd28ad0a370753a72b0105564e"> 533</a></span> <span class="preprocessor">#define DEVICE_PARAMS_DESC {\</span></div>
|
||||
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="preprocessor"> { CONFIG_DEVICEOPT_NAME, CONFIG_HLP_DEVICE, 0, strptr:&devname, defstrval:NULL, TYPE_STRING, 0}\</span></div>
|
||||
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="preprocessor">}</span></div>
|
||||
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="preprocessor"></span></div>
|
||||
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div>
|
||||
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> </div>
|
||||
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="keywordtype">char</span> *<a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga1e5e97f01057673ab3efeb075b865852">get_devname</a>(<span class="keywordtype">int</span> devtype);</div>
|
||||
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="keywordtype">int</span> <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga87add269f0f03ffb0e503c207cd3a32e">openair0_device_load</a>(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device, <a class="code" href="structopenair0__config__t.html">openair0_config_t</a> *openair0_cfg);</div>
|
||||
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="keywordtype">int</span> <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga609a4ed6e49fa887fd5e5e54f9088c04">openair0_transport_load</a>(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device, <a class="code" href="structopenair0__config__t.html">openair0_config_t</a> *openair0_cfg, <a class="code" href="structeth__params__t.html">eth_params_t</a> *eth_params);</div>
|
||||
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> </div>
|
||||
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> </div>
|
||||
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> openair0_timestamp <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga724be0de49ec67daba90f24750c9f193">get_usrp_time</a>(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device);</div>
|
||||
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> </div>
|
||||
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="keywordtype">int</span> <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga20a4c133c9e66fe5f391a7766b710cad">openair0_set_rx_frequencies</a>(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device, <a class="code" href="structopenair0__config__t.html">openair0_config_t</a> *openair0_cfg);</div>
|
||||
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga5ef2a931dcd1fc7244a0011a55064548">read_recplayconfig</a>(recplay_conf_t **recplay_conf, recplay_state_t **recplay_state);</div>
|
||||
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="group____GENERIC__PHY__RF__INTERFACE__.html#ga1f06faff3079fd4bdd085f76ffde0c8b">iqrecorder_end</a>(<a class="code" href="structopenair0__device__t.html">openair0_device</a> *device);</div>
|
||||
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> </div>
|
||||
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> </div>
|
||||
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="preprocessor">#include <unistd.h></span></div>
|
||||
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="preprocessor">#ifndef gettid</span></div>
|
||||
<div class="line"><a name="l00566"></a><span class="lineno"><a class="line" href="group____GENERIC__PHY__RF__INTERFACE__.html#gaca759c5726c3d893725d485fbdd63048"> 566</a></span> <span class="preprocessor"></span><span class="preprocessor">#define gettid() syscall(__NR_gettid)</span></div>
|
||||
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
|
||||
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="preprocessor"></span></div>
|
||||
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
|
||||
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="preprocessor"></span>}</div>
|
||||
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="preprocessor">#endif</span></div>
|
||||
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="preprocessor"></span></div>
|
||||
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="preprocessor">#endif // COMMON_LIB_H</span></div>
|
||||
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="preprocessor"></span></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_a95b1ab3fbef072586d640cdcbe84554a"><div class="ttname"><a href="structopenair0__config__t.html#a95b1ab3fbef072586d640cdcbe84554a">openair0_config_t::recplay_conf</a></div><div class="ttdeci">recplay_conf_t * recplay_conf</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00233">common_lib.h:233</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ga87add269f0f03ffb0e503c207cd3a32e"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ga87add269f0f03ffb0e503c207cd3a32e">openair0_device_load</a></div><div class="ttdeci">int openair0_device_load(openair0_device *device, openair0_config_t *openair0_cfg)</div><div class="ttdoc">Initialize openair RF target. It returns 0 if OK. </div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_a0aa51a114c5b62c53156ba4659b3447e"><div class="ttname"><a href="structopenair0__config__t.html#a0aa51a114c5b62c53156ba4659b3447e">openair0_config_t::time_source</a></div><div class="ttdeci">clock_source_t time_source</div><div class="ttdoc">timing_source </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00211">common_lib.h:211</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_afdb71036a18e7982ad077c235b28f1c7"><div class="ttname"><a href="structopenair0__device__t.html#afdb71036a18e7982ad077c235b28f1c7">openair0_device_t::configure_rru</a></div><div class="ttdeci">void(* configure_rru)(int idx, void *arg)</div><div class="ttdoc">RRU Configuration callback. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00459">common_lib.h:459</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_a9058b8d7018f07f95fd09609689f0b44"><div class="ttname"><a href="structopenair0__device__t.html#a9058b8d7018f07f95fd09609689f0b44">openair0_device_t::CC_id</a></div><div class="ttdeci">int CC_id</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00317">common_lib.h:317</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_ab1abed061a06f6fcd79bed1f914b68b5"><div class="ttname"><a href="structopenair0__config__t.html#ab1abed061a06f6fcd79bed1f914b68b5">openair0_config_t::rx_sample_rate</a></div><div class="ttdeci">double rx_sample_rate</div><div class="ttdoc">the sample rate for receive. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00237">common_lib.h:237</a></div></div>
|
||||
<div class="ttc" id="structopenair0__thread__t_html"><div class="ttname"><a href="structopenair0__thread__t.html">openair0_thread_t</a></div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00292">common_lib.h:292</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_a45f7767d29c7ce903670581a7713eb3f"><div class="ttname"><a href="structopenair0__config__t.html#a45f7767d29c7ce903670581a7713eb3f">openair0_config_t::log_level</a></div><div class="ttdeci">int log_level</div><div class="ttdoc">device log level </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00162">common_lib.h:162</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_gaaa5808d4b389abd0ffaa5a6bf8979b95"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#gaaa5808d4b389abd0ffaa5a6bf8979b95">dev_type_t</a></div><div class="ttdeci">dev_type_t</div><div class="ttdoc">RF device types. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00087">common_lib.h:87</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html"><div class="ttname"><a href="structopenair0__config__t.html">openair0_config_t</a></div><div class="ttdoc">RF frontend parameters set by application. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00158">common_lib.h:158</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_a8ab0f07a3564d6de48302ffcae7f3537"><div class="ttname"><a href="structopenair0__device__t.html#a8ab0f07a3564d6de48302ffcae7f3537">openair0_device_t::trx_write_func2</a></div><div class="ttdeci">int(* trx_write_func2)(openair0_device *device, openair0_timestamp timestamp, void *buff, int nsamps, int antenna_id, int flags)</div><div class="ttdoc">Called to send samples to the RF target. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00388">common_lib.h:388</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_gga2eaca82b72e3dce80fa4bc6f00405430a56fbb3ffdd6a54939bbf35358afec214"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#gga2eaca82b72e3dce80fa4bc6f00405430a56fbb3ffdd6a54939bbf35358afec214">MIN_HOST_TYPE</a></div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00127">common_lib.h:127</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ggaaa5808d4b389abd0ffaa5a6bf8979b95a49c770758ffd580c1407ed4837d1b8de"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a49c770758ffd580c1407ed4837d1b8de">IRIS_DEV</a></div><div class="ttdoc">device is Iris </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00102">common_lib.h:102</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_a4e5d9334a5257be49bf8e50121094ea7"><div class="ttname"><a href="structopenair0__device__t.html#a4e5d9334a5257be49bf8e50121094ea7">openair0_device_t::thirdparty_priv</a></div><div class="ttdeci">void * thirdparty_priv</div><div class="ttdoc">Pointer to generic RRU private information. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00464">common_lib.h:464</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html"><div class="ttname"><a href="structopenair0__device__t.html">openair0_device_t</a></div><div class="ttdoc">structure holds the parameters to configure USRP devices </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00309">common_lib.h:309</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_a14f2c5c56d3bfb67d360910c0b5a1abb"><div class="ttname"><a href="structopenair0__device__t.html#a14f2c5c56d3bfb67d360910c0b5a1abb">openair0_device_t::trx_stop_func</a></div><div class="ttdeci">int(* trx_stop_func)(openair0_device *device)</div><div class="ttdoc">Stop operation of the transceiver. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00436">common_lib.h:436</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ggaaa5808d4b389abd0ffaa5a6bf8979b95a9fcafa0a8b21be18eb3da34f21eca235"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a9fcafa0a8b21be18eb3da34f21eca235">USRP_X300_DEV</a></div><div class="ttdoc">device is USRP X300/X310 </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00094">common_lib.h:94</a></div></div>
|
||||
<div class="ttc" id="structeth__params__t_html_a28c524821470015a8508fd03cb2235c1"><div class="ttname"><a href="structeth__params__t.html#a28c524821470015a8508fd03cb2235c1">eth_params_t::remote_addr</a></div><div class="ttdeci">char * remote_addr</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00254">common_lib.h:254</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_gga306537444209dc91972f17fc71473ff5a6aef01ed9b1c198e6944f87e370f00b2"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#gga306537444209dc91972f17fc71473ff5a6aef01ed9b1c198e6944f87e370f00b2">external</a></div><div class="ttdoc">This tells the underlying hardware to use the external reference. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00151">common_lib.h:151</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ga609a4ed6e49fa887fd5e5e54f9088c04"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ga609a4ed6e49fa887fd5e5e54f9088c04">openair0_transport_load</a></div><div class="ttdeci">int openair0_transport_load(openair0_device *device, openair0_config_t *openair0_cfg, eth_params_t *eth_params)</div><div class="ttdoc">Initialize transport protocol . It returns 0 if OK. </div></div>
|
||||
<div class="ttc" id="structeth__params__t_html_a13deb519ea5f11320b3694cc1a20694f"><div class="ttname"><a href="structeth__params__t.html#a13deb519ea5f11320b3694cc1a20694f">eth_params_t::if_compress</a></div><div class="ttdeci">uint8_t if_compress</div><div class="ttdoc">compression enable (0: No comp/ 1: A-LAW) </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00270">common_lib.h:270</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_a2a3ad75f1ee39fba38aee3a2b9a0822a"><div class="ttname"><a href="structopenair0__device__t.html#a2a3ad75f1ee39fba38aee3a2b9a0822a">openair0_device_t::trx_start_func</a></div><div class="ttdeci">int(* trx_start_func)(openair0_device *device)</div><div class="ttdoc">Called to start the transceiver. Return 0 if OK, &lt; 0 if error. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00347">common_lib.h:347</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_a259a8bb97c4750a6424ae41fa3c5c2ca"><div class="ttname"><a href="structopenair0__device__t.html#a259a8bb97c4750a6424ae41fa3c5c2ca">openair0_device_t::trx_reset_stats_func</a></div><div class="ttdeci">int(* trx_reset_stats_func)(openair0_device *device)</div><div class="ttdoc">Reset device statistics. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00427">common_lib.h:427</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_a4f84f7346865903d5279f6ff11bc17ed"><div class="ttname"><a href="structopenair0__config__t.html#a4f84f7346865903d5279f6ff11bc17ed">openair0_config_t::sample_rate</a></div><div class="ttdeci">double sample_rate</div><div class="ttdoc">the sample rate for both transmit and receive. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00170">common_lib.h:170</a></div></div>
|
||||
<div class="ttc" id="structopenair0__thread__t_html_a844baf6d1fd5d8e6b308270c9f82c051"><div class="ttname"><a href="structopenair0__thread__t.html#a844baf6d1fd5d8e6b308270c9f82c051">openair0_thread_t::cond_write</a></div><div class="ttdeci">pthread_cond_t cond_write</div><div class="ttdoc">condition varible for trx write thread </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00303">common_lib.h:303</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_ad88c6a2684faa259c74515df4e5688b9"><div class="ttname"><a href="structopenair0__config__t.html#ad88c6a2684faa259c74515df4e5688b9">openair0_config_t::configFilename</a></div><div class="ttdeci">char * configFilename</div><div class="ttdoc">Configuration file for LMS7002M. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00222">common_lib.h:222</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ga5ef2a931dcd1fc7244a0011a55064548"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ga5ef2a931dcd1fc7244a0011a55064548">read_recplayconfig</a></div><div class="ttdeci">int read_recplayconfig(recplay_conf_t **recplay_conf, recplay_state_t **recplay_state)</div><div class="ttdoc">read the iq record/player configuration </div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_a45b4e2287bfd6532cf5c1aebfa38dacf"><div class="ttname"><a href="structopenair0__device__t.html#a45b4e2287bfd6532cf5c1aebfa38dacf">openair0_device_t::trx_ctlrecv_func</a></div><div class="ttdeci">int(* trx_ctlrecv_func)(openair0_device *device, void *msg, ssize_t msg_len)</div><div class="ttdoc">Called to receive a reply message between RAU-RRU on control port. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00368">common_lib.h:368</a></div></div>
|
||||
<div class="ttc" id="structopenair0__write__package__t_html_ac5544809ab8750a746c4cec1c8a1ad8c"><div class="ttname"><a href="structopenair0__write__package__t.html#ac5544809ab8750a746c4cec1c8a1ad8c">openair0_write_package_t::nsamps</a></div><div class="ttdeci">int nsamps</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00285">common_lib.h:285</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_a4f97ba8d1ae444a5392bb367909ba330"><div class="ttname"><a href="structopenair0__device__t.html#a4f97ba8d1ae444a5392bb367909ba330">openair0_device_t::trx_set_gains_func</a></div><div class="ttdeci">int(* trx_set_gains_func)(openair0_device *device, openair0_config_t *openair0_cfg)</div><div class="ttdoc">Set gains. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00453">common_lib.h:453</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_a36ca375b9b136199ab4385b27f95fccb"><div class="ttname"><a href="structopenair0__config__t.html#a36ca375b9b136199ab4385b27f95fccb">openair0_config_t::rx_gain_calib_table</a></div><div class="ttdeci">rx_gain_calib_table_t * rx_gain_calib_table</div><div class="ttdoc">memory </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00193">common_lib.h:193</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_ae108d08f894211745ef8da1d6b3c8276"><div class="ttname"><a href="structopenair0__device__t.html#ae108d08f894211745ef8da1d6b3c8276">openair0_device_t::trx_read_func</a></div><div class="ttdeci">int(* trx_read_func)(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps, int num_antennas)</div><div class="ttdoc">Receive samples from hardware. Read nsamps samples from each channel to buffers. buff[0] is the array...</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00402">common_lib.h:402</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_a79af2dda514d36fbc3264fd5724795ae"><div class="ttname"><a href="structopenair0__config__t.html#a79af2dda514d36fbc3264fd5724795ae">openair0_config_t::recplay_mode</a></div><div class="ttdeci">uint32_t recplay_mode</div><div class="ttdoc">record player configuration, definition in record_player.h </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00232">common_lib.h:232</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_gab69560ebc82af819611d037a0121cc98"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#gab69560ebc82af819611d037a0121cc98">transport_type_t</a></div><div class="ttdeci">transport_type_t</div><div class="ttdoc">transport protocol types </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00115">common_lib.h:115</a></div></div>
|
||||
<div class="ttc" id="structsamplesBlockHeader__t_html_a30015904d801460b2185c394ef6f4fab"><div class="ttname"><a href="structsamplesBlockHeader__t.html#a30015904d801460b2185c394ef6f4fab">samplesBlockHeader_t::size</a></div><div class="ttdeci">uint32_t size</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00507">common_lib.h:507</a></div></div>
|
||||
<div class="ttc" id="structopenair0__thread__t_html_a5c95792bc9ab981daffd94762b941c09"><div class="ttname"><a href="structopenair0__thread__t.html#a5c95792bc9ab981daffd94762b941c09">openair0_thread_t::start</a></div><div class="ttdeci">int start</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00294">common_lib.h:294</a></div></div>
|
||||
<div class="ttc" id="structopenair0__write__package__t_html_a3b165b430763a3a13e184e86e3f75418"><div class="ttname"><a href="structopenair0__write__package__t.html#a3b165b430763a3a13e184e86e3f75418">openair0_write_package_t::flags_msb</a></div><div class="ttdeci">int flags_msb</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00289">common_lib.h:289</a></div></div>
|
||||
<div class="ttc" id="structopenair0__thread__t_html_aa6078d75f5ca8457dc79360a2f83287e"><div class="ttname"><a href="structopenair0__thread__t.html#aa6078d75f5ca8457dc79360a2f83287e">openair0_thread_t::pthread_write</a></div><div class="ttdeci">pthread_t pthread_write</div><div class="ttdoc">pthread struct for trx write thread </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00299">common_lib.h:299</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_ae00e0de09582b48b20c16c5f2c062c38"><div class="ttname"><a href="structopenair0__config__t.html#ae00e0de09582b48b20c16c5f2c062c38">openair0_config_t::remote_port</a></div><div class="ttdeci">unsigned int remote_port</div><div class="ttdoc">remote port number for Ethernet interface </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00226">common_lib.h:226</a></div></div>
|
||||
<div class="ttc" id="structopenair0__write__package__t_html_a4ee00eecec7b5d7c898805e0abfee9cd"><div class="ttname"><a href="structopenair0__write__package__t.html#a4ee00eecec7b5d7c898805e0abfee9cd">openair0_write_package_t::first_packet</a></div><div class="ttdeci">signed char first_packet</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00287">common_lib.h:287</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_gga2eaca82b72e3dce80fa4bc6f00405430a95f66476b12559b0c2a27430b8eb47e9"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#gga2eaca82b72e3dce80fa4bc6f00405430a95f66476b12559b0c2a27430b8eb47e9">RAU_HOST</a></div><div class="ttdoc">device functions within a RAU </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00129">common_lib.h:129</a></div></div>
|
||||
<div class="ttc" id="structsamplesBlockHeader__t_html_a7ab7d7500a3de2cbf4cad56d9551a6c1"><div class="ttname"><a href="structsamplesBlockHeader__t.html#a7ab7d7500a3de2cbf4cad56d9551a6c1">samplesBlockHeader_t::option_value</a></div><div class="ttdeci">uint32_t option_value</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00513">common_lib.h:513</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_a309204c5cef2f024a413502b9053203d"><div class="ttname"><a href="structopenair0__config__t.html#a309204c5cef2f024a413502b9053203d">openair0_config_t::iq_rxrescale</a></div><div class="ttdeci">int iq_rxrescale</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00220">common_lib.h:220</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ggaaa5808d4b389abd0ffaa5a6bf8979b95aba5e4e19cdc634e2cdd0a45c2cbfb64d"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95aba5e4e19cdc634e2cdd0a45c2cbfb64d">USRP_B200_DEV</a></div><div class="ttdoc">device is USRP B200/B210 </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00092">common_lib.h:92</a></div></div>
|
||||
<div class="ttc" id="structopenair0__rf__map_html_ae2842aac50ccd52cfb010413f45a1196"><div class="ttname"><a href="structopenair0__rf__map.html#ae2842aac50ccd52cfb010413f45a1196">openair0_rf_map::card</a></div><div class="ttdeci">int card</div><div class="ttdoc">card id </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00247">common_lib.h:247</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_a27b16daa24a6dd438ded9c9fbce19a27"><div class="ttname"><a href="structopenair0__device__t.html#a27b16daa24a6dd438ded9c9fbce19a27">openair0_device_t::host_type</a></div><div class="ttdeci">host_type_t host_type</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00326">common_lib.h:326</a></div></div>
|
||||
<div class="ttc" id="structif__buffer__t_html_afce30aa05ce77e0eb22d91a148e23233"><div class="ttname"><a href="structif__buffer__t.html#afce30aa05ce77e0eb22d91a148e23233">if_buffer_t::rx</a></div><div class="ttdeci">void * rx</div><div class="ttdoc">Rx buffer for if device. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00279">common_lib.h:279</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_ac691df2b1dacb97e28e5a531043fccc8"><div class="ttname"><a href="structopenair0__config__t.html#ac691df2b1dacb97e28e5a531043fccc8">openair0_config_t::samples_per_tti</a></div><div class="ttdeci">unsigned int samples_per_tti</div><div class="ttdoc">number of samples per tti </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00235">common_lib.h:235</a></div></div>
|
||||
<div class="ttc" id="structopenair0__write__package__t_html_af754d0ce3e74bdaab788817fccd51c4b"><div class="ttname"><a href="structopenair0__write__package__t.html#af754d0ce3e74bdaab788817fccd51c4b">openair0_write_package_t::timestamp</a></div><div class="ttdeci">openair0_timestamp timestamp</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00283">common_lib.h:283</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_af31d194f4688283fa7e1dac964b20b5e"><div class="ttname"><a href="structopenair0__device__t.html#af31d194f4688283fa7e1dac964b20b5e">openair0_device_t::openair0_cfg</a></div><div class="ttdeci">openair0_config_t * openair0_cfg</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00329">common_lib.h:329</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_acc3a7d85604cb01ae1b5c2fd06d5977a"><div class="ttname"><a href="structopenair0__device__t.html#acc3a7d85604cb01ae1b5c2fd06d5977a">openair0_device_t::trx_ctlsend_func</a></div><div class="ttdeci">int(* trx_ctlsend_func)(openair0_device *device, void *msg, ssize_t msg_len)</div><div class="ttdoc">Called to send a request message between RAU-RRU on control port. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00361">common_lib.h:361</a></div></div>
|
||||
<div class="ttc" id="structopenair0__thread__t_html_ae9612307d1e4bbfb38886dd60a2cd8ed"><div class="ttname"><a href="structopenair0__thread__t.html#ae9612307d1e4bbfb38886dd60a2cd8ed">openair0_thread_t::end</a></div><div class="ttdeci">int end</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00295">common_lib.h:295</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_gab546721d68ab48e07707dc3b0620d412"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#gab546721d68ab48e07707dc3b0620d412">oai_device_initfunc_t</a></div><div class="ttdeci">int(* oai_device_initfunc_t)(openair0_device *device, openair0_config_t *openair0_cfg)</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00493">common_lib.h:493</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ga20a4c133c9e66fe5f391a7766b710cad"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ga20a4c133c9e66fe5f391a7766b710cad">openair0_set_rx_frequencies</a></div><div class="ttdeci">int openair0_set_rx_frequencies(openair0_device *device, openair0_config_t *openair0_cfg)</div><div class="ttdoc">Set RX frequencies. </div><div class="ttdef"><b>Definition:</b> <a href="usrp__lib_8cpp_source.html#l00778">usrp_lib.cpp:778</a></div></div>
|
||||
<div class="ttc" id="structopenair0__rf__map_html_a58606d900e601316a537bf35ddc744ef"><div class="ttname"><a href="structopenair0__rf__map.html#a58606d900e601316a537bf35ddc744ef">openair0_rf_map::chain</a></div><div class="ttdeci">int chain</div><div class="ttdoc">rf chain id </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00249">common_lib.h:249</a></div></div>
|
||||
<div class="ttc" id="structsamplesBlockHeader__t_html"><div class="ttname"><a href="structsamplesBlockHeader__t.html">samplesBlockHeader_t</a></div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00505">common_lib.h:505</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_aae425138eefc6ed6d6205c6e942e2e3e"><div class="ttname"><a href="structopenair0__device__t.html#aae425138eefc6ed6d6205c6e942e2e3e">openair0_device_t::eth_params</a></div><div class="ttdeci">eth_params_t * eth_params</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00332">common_lib.h:332</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_ae9b75daa2808da83e5fcd76c714454ee"><div class="ttname"><a href="structopenair0__config__t.html#ae9b75daa2808da83e5fcd76c714454ee">openair0_config_t::my_addr</a></div><div class="ttdeci">char * my_addr</div><div class="ttdoc">local IP/MAC addr for Ethernet interface (eNB/BBU, UE) </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00228">common_lib.h:228</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ggab69560ebc82af819611d037a0121cc98aeec61428a26c9848938dff090c39800c"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ggab69560ebc82af819611d037a0121cc98aeec61428a26c9848938dff090c39800c">MAX_TRANSP_TYPE</a></div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00121">common_lib.h:121</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ggaaa5808d4b389abd0ffaa5a6bf8979b95a81f2c35e30895729c96f88e44269c61c"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a81f2c35e30895729c96f88e44269c61c">EXMIMO_DEV</a></div><div class="ttdoc">device is ExpressMIMO </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00090">common_lib.h:90</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_a0c479543c8998390076751412aace631"><div class="ttname"><a href="structopenair0__config__t.html#a0c479543c8998390076751412aace631">openair0_config_t::tx_sample_rate</a></div><div class="ttdeci">double tx_sample_rate</div><div class="ttdoc">the sample rate for transmit. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00239">common_lib.h:239</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_gga2eaca82b72e3dce80fa4bc6f00405430ab9881c2b3691fe35a8c4da225b86edf3"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#gga2eaca82b72e3dce80fa4bc6f00405430ab9881c2b3691fe35a8c4da225b86edf3">MAX_HOST_TYPE</a></div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00132">common_lib.h:132</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ggaaa5808d4b389abd0ffaa5a6bf8979b95a148c86a8baed1ac3ce6cb488670b5b4f"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a148c86a8baed1ac3ce6cb488670b5b4f">NONE_DEV</a></div><div class="ttdoc">device is NONE </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00104">common_lib.h:104</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_a82b2a6b2961e16cf4266c701e6ff5562"><div class="ttname"><a href="structopenair0__device__t.html#a82b2a6b2961e16cf4266c701e6ff5562">openair0_device_t::trx_set_freq_func</a></div><div class="ttdeci">int(* trx_set_freq_func)(openair0_device *device, openair0_config_t *openair0_cfg, int exmimo_dump_config)</div><div class="ttdoc">Set RX feaquencies. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00446">common_lib.h:446</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_ab3b3593cfaa56b87b5d8e970d9ff98d6"><div class="ttname"><a href="structopenair0__config__t.html#ab3b3593cfaa56b87b5d8e970d9ff98d6">openair0_config_t::samples_per_packet</a></div><div class="ttdeci">int samples_per_packet</div><div class="ttdoc">samples per packet on the fronthaul interface </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00176">common_lib.h:176</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_a4360e61f7658a21efafc3b2ca75eb33c"><div class="ttname"><a href="structopenair0__config__t.html#a4360e61f7658a21efafc3b2ca75eb33c">openair0_config_t::sdr_addrs</a></div><div class="ttdeci">char * sdr_addrs</div><div class="ttdoc">Manual SDR IP address. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00214">common_lib.h:214</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_af6d3431966004aabb2dea1d5d44ceda0"><div class="ttname"><a href="structopenair0__device__t.html#af6d3431966004aabb2dea1d5d44ceda0">openair0_device_t::type</a></div><div class="ttdeci">dev_type_t type</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00320">common_lib.h:320</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_aca56a70c10571b830ef148ff0ddddc59"><div class="ttname"><a href="structopenair0__device__t.html#aca56a70c10571b830ef148ff0ddddc59">openair0_device_t::transp_type</a></div><div class="ttdeci">transport_type_t transp_type</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00323">common_lib.h:323</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ggab69560ebc82af819611d037a0121cc98ad07d016205c095e107a8dbfbe0d14e98"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ggab69560ebc82af819611d037a0121cc98ad07d016205c095e107a8dbfbe0d14e98">ETHERNET_TP</a></div><div class="ttdoc">transport protocol ETHERNET </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00118">common_lib.h:118</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_ac723300aef5ada036a69bcd30bd54c8f"><div class="ttname"><a href="structopenair0__config__t.html#ac723300aef5ada036a69bcd30bd54c8f">openair0_config_t::threequarter_fs</a></div><div class="ttdeci">int8_t threequarter_fs</div><div class="ttdoc">check for threequarter sampling rate </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00241">common_lib.h:241</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ga1e5e97f01057673ab3efeb075b865852"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ga1e5e97f01057673ab3efeb075b865852">get_devname</a></div><div class="ttdeci">char * get_devname(int devtype)</div><div class="ttdoc">get device name from device type </div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_a172d0e6c28acf03a69b4ca2a7cef1725"><div class="ttname"><a href="structopenair0__config__t.html#a172d0e6c28acf03a69b4ca2a7cef1725">openair0_config_t::my_port</a></div><div class="ttdeci">unsigned int my_port</div><div class="ttdoc">local port number for Ethernet interface (eNB/BBU, UE) </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00230">common_lib.h:230</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_aec43dbef661454499203121bba63b043"><div class="ttname"><a href="structopenair0__device__t.html#aec43dbef661454499203121bba63b043">openair0_device_t::recplay_state</a></div><div class="ttdeci">recplay_state_t * recplay_state</div><div class="ttdoc">record player data, definition in record_player.h </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00334">common_lib.h:334</a></div></div>
|
||||
<div class="ttc" id="structeth__params__t_html_a6f884345f641384b8585bb3e0f8e8000"><div class="ttname"><a href="structeth__params__t.html#a6f884345f641384b8585bb3e0f8e8000">eth_params_t::remote_portd</a></div><div class="ttdeci">uint16_t remote_portd</div><div class="ttdoc">remote port number for Ethernet interface (user) </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00258">common_lib.h:258</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_afec2fbe0d81987e2093c3daf8fc4355a"><div class="ttname"><a href="structopenair0__device__t.html#afec2fbe0d81987e2093c3daf8fc4355a">openair0_device_t::trx_read_func2</a></div><div class="ttdeci">int(* trx_read_func2)(openair0_device *device, openair0_timestamp *ptimestamp, void *buff, int nsamps, int *antenna_id)</div><div class="ttdoc">Receive samples from hardware, this version provides a single antenna at a time and returns...</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00415">common_lib.h:415</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_ac36b80527a9850cc1a021f4f825c49d1"><div class="ttname"><a href="structopenair0__device__t.html#ac36b80527a9850cc1a021f4f825c49d1">openair0_device_t::trx_write_func</a></div><div class="ttdeci">int(* trx_write_func)(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps, int antenna_id, int flags)</div><div class="ttdoc">Called to send samples to the RF target. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00378">common_lib.h:378</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_a5d01fbd97c3f4f7cae0945ab1d1c52aa"><div class="ttname"><a href="structopenair0__device__t.html#a5d01fbd97c3f4f7cae0945ab1d1c52aa">openair0_device_t::is_init</a></div><div class="ttdeci">int is_init</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00336">common_lib.h:336</a></div></div>
|
||||
<div class="ttc" id="structif__buffer__t_html"><div class="ttname"><a href="structif__buffer__t.html">if_buffer_t</a></div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00273">common_lib.h:273</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_afd3417564d89c5940326c51b3f367ec2"><div class="ttname"><a href="structopenair0__device__t.html#afd3417564d89c5940326c51b3f367ec2">openair0_device_t::Mod_id</a></div><div class="ttdeci">int Mod_id</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00314">common_lib.h:314</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_accbaf10907905da0fb039af8908535d7"><div class="ttname"><a href="structopenair0__device__t.html#accbaf10907905da0fb039af8908535d7">openair0_device_t::trx_write_init</a></div><div class="ttdeci">int(* trx_write_init)(openair0_device *device)</div><div class="ttdoc">RRU Configuration callback. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00484">common_lib.h:484</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_a8561d9c34df9b5d74b974466721e6929"><div class="ttname"><a href="structopenair0__device__t.html#a8561d9c34df9b5d74b974466721e6929">openair0_device_t::priv</a></div><div class="ttdeci">void * priv</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00340">common_lib.h:340</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_gga306537444209dc91972f17fc71473ff5ae2e00f1f847192ece7d24256cf9505b1"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#gga306537444209dc91972f17fc71473ff5ae2e00f1f847192ece7d24256cf9505b1">gpsdo</a></div><div class="ttdoc">This tells the underlying hardware to use the gpsdo reference. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00153">common_lib.h:153</a></div></div>
|
||||
<div class="ttc" id="structeth__params__t_html_ad8098226503aa2e2ab27768c06a4def1"><div class="ttname"><a href="structeth__params__t.html#ad8098226503aa2e2ab27768c06a4def1">eth_params_t::my_addr</a></div><div class="ttdeci">char * my_addr</div><div class="ttdoc">local IP/MAC addr for Ethernet interface (eNB/RAU, UE) </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00260">common_lib.h:260</a></div></div>
|
||||
<div class="ttc" id="structif__buffer__t_html_a2547ae9b87c2defff57faf96a7640f36"><div class="ttname"><a href="structif__buffer__t.html#a2547ae9b87c2defff57faf96a7640f36">if_buffer_t::tx_prach</a></div><div class="ttdeci">void * tx_prach</div><div class="ttdoc">Tx buffer (PRACH) for if device. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00277">common_lib.h:277</a></div></div>
|
||||
<div class="ttc" id="structopenair0__thread__t_html_a4c3a935f1ecfe59a3788d36e4134d67f"><div class="ttname"><a href="structopenair0__thread__t.html#a4c3a935f1ecfe59a3788d36e4134d67f">openair0_thread_t::attr_write</a></div><div class="ttdeci">pthread_attr_t attr_write</div><div class="ttdoc">pthread attributes for trx write thread </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00301">common_lib.h:301</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_a838459a1803d7aef9c17c48a3597149c"><div class="ttname"><a href="structopenair0__device__t.html#a838459a1803d7aef9c17c48a3597149c">openair0_device_t::trx_end_func</a></div><div class="ttdeci">void(* trx_end_func)(openair0_device *device)</div><div class="ttdoc">Terminate operation of the transceiver – free all associated resources. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00432">common_lib.h:432</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_ab12a26c3776e8a9b09bca0a507f43493"><div class="ttname"><a href="structopenair0__device__t.html#ab12a26c3776e8a9b09bca0a507f43493">openair0_device_t::trx_config_func</a></div><div class="ttdeci">int(* trx_config_func)(openair0_device *device, openair0_config_t *openair0_cfg)</div><div class="ttdoc">Called to configure the device. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00354">common_lib.h:354</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ggaaa5808d4b389abd0ffaa5a6bf8979b95a426d2c2d06777d36f61a596180ba2bdb"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a426d2c2d06777d36f61a596180ba2bdb">BLADERF_DEV</a></div><div class="ttdoc">device is BLADE RF </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00098">common_lib.h:98</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ggaaa5808d4b389abd0ffaa5a6bf8979b95a5679adeb284555f47da34938e83238bc"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a5679adeb284555f47da34938e83238bc">MIN_RF_DEV_TYPE</a></div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00088">common_lib.h:88</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_gga2eaca82b72e3dce80fa4bc6f00405430aa091d53cb7c8ea5fe12a63d6072c8625"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#gga2eaca82b72e3dce80fa4bc6f00405430aa091d53cb7c8ea5fe12a63d6072c8625">RRU_HOST</a></div><div class="ttdoc">device functions within a RRU </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00131">common_lib.h:131</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ga724be0de49ec67daba90f24750c9f193"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ga724be0de49ec67daba90f24750c9f193">get_usrp_time</a></div><div class="ttdeci">openair0_timestamp get_usrp_time(openair0_device *device)</div><div class="ttdoc">Get current timestamp of USRP. </div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ga1f06faff3079fd4bdd085f76ffde0c8b"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ga1f06faff3079fd4bdd085f76ffde0c8b">iqrecorder_end</a></div><div class="ttdeci">void iqrecorder_end(openair0_device *device)</div><div class="ttdoc">store recorded iqs from memory to file. </div></div>
|
||||
<div class="ttc" id="structsamplesBlockHeader__t_html_a8f4c789a1a4f7594c48f4e8653828dd5"><div class="ttname"><a href="structsamplesBlockHeader__t.html#a8f4c789a1a4f7594c48f4e8653828dd5">samplesBlockHeader_t::timestamp</a></div><div class="ttdeci">uint64_t timestamp</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00512">common_lib.h:512</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_a1561d90fd09b7a80f2491abcbf3b1356"><div class="ttname"><a href="structopenair0__device__t.html#a1561d90fd09b7a80f2491abcbf3b1356">openair0_device_t::trx_get_stats_func</a></div><div class="ttdeci">int(* trx_get_stats_func)(openair0_device *device)</div><div class="ttdoc">print the device statistics </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00421">common_lib.h:421</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_acb5f4a44bc209245a53c12a749541101"><div class="ttname"><a href="structopenair0__config__t.html#acb5f4a44bc209245a53c12a749541101">openair0_config_t::iq_txshift</a></div><div class="ttdeci">int iq_txshift</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00219">common_lib.h:219</a></div></div>
|
||||
<div class="ttc" id="structopenair0__thread__t_html_abefca45c14975b7c330afc3fb8bf28a3"><div class="ttname"><a href="structopenair0__thread__t.html#abefca45c14975b7c330afc3fb8bf28a3">openair0_thread_t::count_write</a></div><div class="ttdeci">int count_write</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00297">common_lib.h:297</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_aa9ecfb675c8232b8390f18c6cf42d93f"><div class="ttname"><a href="structopenair0__config__t.html#aa9ecfb675c8232b8390f18c6cf42d93f">openair0_config_t::rx_num_channels</a></div><div class="ttdeci">int rx_num_channels</div><div class="ttdoc">number of RX channels (=RX antennas) </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00178">common_lib.h:178</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ggaaa5808d4b389abd0ffaa5a6bf8979b95ae4577ef9d478874f2f41b0b936822717"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95ae4577ef9d478874f2f41b0b936822717">UEDv2_DEV</a></div><div class="ttdoc">device is UEDv2 </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00108">common_lib.h:108</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_ad6e124f006c1cf095930a902214ea054"><div class="ttname"><a href="structopenair0__config__t.html#ad6e124f006c1cf095930a902214ea054">openair0_config_t::rx_bw</a></div><div class="ttdeci">double rx_bw</div><div class="ttdoc">RX bandwidth in Hz. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00205">common_lib.h:205</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_af2a7bfacbf1df9d5570d1dbc37687584"><div class="ttname"><a href="structopenair0__config__t.html#af2a7bfacbf1df9d5570d1dbc37687584">openair0_config_t::duplex_mode</a></div><div class="ttdeci">duplex_mode_t duplex_mode</div><div class="ttdoc">duplexing mode </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00164">common_lib.h:164</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_a2859ae1bcad26ea7c5c1829c36f3afaf"><div class="ttname"><a href="structopenair0__device__t.html#a2859ae1bcad26ea7c5c1829c36f3afaf">openair0_device_t::thirdparty_cleanup</a></div><div class="ttdeci">int(* thirdparty_cleanup)(openair0_device *device)</div><div class="ttdoc">Callback for Third-party RRU Cleanup routine. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00473">common_lib.h:473</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_a493b219ffa776236a0ef44166898a5a6"><div class="ttname"><a href="structopenair0__config__t.html#a493b219ffa776236a0ef44166898a5a6">openair0_config_t::samples_per_frame</a></div><div class="ttdeci">unsigned int samples_per_frame</div><div class="ttdoc">number of samples per frame </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00168">common_lib.h:168</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_af96c0d5571a1d2514ea0ab28e2e978ae"><div class="ttname"><a href="structopenair0__config__t.html#af96c0d5571a1d2514ea0ab28e2e978ae">openair0_config_t::remote_addr</a></div><div class="ttdeci">char * remote_addr</div><div class="ttdoc">remote IP/MAC addr for Ethernet interface </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00224">common_lib.h:224</a></div></div>
|
||||
<div class="ttc" id="structrx__gain__calib__table__t_html"><div class="ttname"><a href="structrx__gain__calib__table__t.html">rx_gain_calib_table_t</a></div><div class="ttdoc">RF Gain clibration. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00137">common_lib.h:137</a></div></div>
|
||||
<div class="ttc" id="structopenair0__write__package__t_html_a8cae5e7322eae32a710c66383ad38034"><div class="ttname"><a href="structopenair0__write__package__t.html#a8cae5e7322eae32a710c66383ad38034">openair0_write_package_t::cc</a></div><div class="ttdeci">int cc</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00286">common_lib.h:286</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ggaaa5808d4b389abd0ffaa5a6bf8979b95a869fbe11c32e1915a55fa98b4057efc1"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a869fbe11c32e1915a55fa98b4057efc1">RFSIMULATOR</a></div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00109">common_lib.h:109</a></div></div>
|
||||
<div class="ttc" id="structsamplesBlockHeader__t_html_a868352b7fea04360892e1074fff65610"><div class="ttname"><a href="structsamplesBlockHeader__t.html#a868352b7fea04360892e1074fff65610">samplesBlockHeader_t::option_flag</a></div><div class="ttdeci">uint32_t option_flag</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00514">common_lib.h:514</a></div></div>
|
||||
<div class="ttc" id="structrx__gain__calib__table__t_html_ad573e88571a699ddf5b63efbdf01ae01"><div class="ttname"><a href="structrx__gain__calib__table__t.html#ad573e88571a699ddf5b63efbdf01ae01">rx_gain_calib_table_t::freq</a></div><div class="ttdeci">double freq</div><div class="ttdoc">Frequency for which RX chain was calibrated. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00139">common_lib.h:139</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_ac27d61589f6c306fb2041dc5ac6b0001"><div class="ttname"><a href="structopenair0__config__t.html#ac27d61589f6c306fb2041dc5ac6b0001">openair0_config_t::tx_sample_advance</a></div><div class="ttdeci">int tx_sample_advance</div><div class="ttdoc">offset in samples between TX and RX paths </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00174">common_lib.h:174</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_a4a4e352be4ed03dc991e9b4fcd328014"><div class="ttname"><a href="structopenair0__config__t.html#a4a4e352be4ed03dc991e9b4fcd328014">openair0_config_t::num_rb_dl</a></div><div class="ttdeci">int num_rb_dl</div><div class="ttdoc">number of downlink resource blocks </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00166">common_lib.h:166</a></div></div>
|
||||
<div class="ttc" id="structopenair0__write__package__t_html_a0473807080beeaf26ce63b94e38d470d"><div class="ttname"><a href="structopenair0__write__package__t.html#a0473807080beeaf26ce63b94e38d470d">openair0_write_package_t::last_packet</a></div><div class="ttdeci">signed char last_packet</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00288">common_lib.h:288</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ga306537444209dc91972f17fc71473ff5"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ga306537444209dc91972f17fc71473ff5">clock_source_t</a></div><div class="ttdeci">clock_source_t</div><div class="ttdoc">Clock source types. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00145">common_lib.h:145</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_ac8c89901a17211bc9fc6726eeab7c6d5"><div class="ttname"><a href="structopenair0__device__t.html#ac8c89901a17211bc9fc6726eeab7c6d5">openair0_device_t::write_thread</a></div><div class="ttdeci">openair0_thread_t write_thread</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00311">common_lib.h:311</a></div></div>
|
||||
<div class="ttc" id="structeth__params__t_html_a265c4ee5b215fbd4c4c4a4c47394c20f"><div class="ttname"><a href="structeth__params__t.html#a265c4ee5b215fbd4c4c4a4c47394c20f">eth_params_t::transp_preference</a></div><div class="ttdeci">uint8_t transp_preference</div><div class="ttdoc">transport type preference (RAW/UDP) </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00268">common_lib.h:268</a></div></div>
|
||||
<div class="ttc" id="structeth__params__t_html_a460c6aa8e7ac6ac7274c7352493e507d"><div class="ttname"><a href="structeth__params__t.html#a460c6aa8e7ac6ac7274c7352493e507d">eth_params_t::my_portc</a></div><div class="ttdeci">uint16_t my_portc</div><div class="ttdoc">local port number (control) for Ethernet interface (eNB/RAU, UE) </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00262">common_lib.h:262</a></div></div>
|
||||
<div class="ttc" id="structeth__params__t_html_a44c3418e5aa10e5809d3a26830ce4c96"><div class="ttname"><a href="structeth__params__t.html#a44c3418e5aa10e5809d3a26830ce4c96">eth_params_t::my_portd</a></div><div class="ttdeci">uint16_t my_portd</div><div class="ttdoc">local port number (user) for Ethernet interface (eNB/RAU, UE) </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00264">common_lib.h:264</a></div></div>
|
||||
<div class="ttc" id="structsamplesBlockHeader__t_html_a9d6ff00928256884c753d8d1d6e5d242"><div class="ttname"><a href="structsamplesBlockHeader__t.html#a9d6ff00928256884c753d8d1d6e5d242">samplesBlockHeader_t::magic</a></div><div class="ttdeci">uint64_t magic</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00506">common_lib.h:506</a></div></div>
|
||||
<div class="ttc" id="structeth__params__t_html"><div class="ttname"><a href="structeth__params__t.html">eth_params_t</a></div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00253">common_lib.h:253</a></div></div>
|
||||
<div class="ttc" id="structopenair0__thread__t_html_aeb4c7b74a599f1625e03ff5ad9ab8f54"><div class="ttname"><a href="structopenair0__thread__t.html#aeb4c7b74a599f1625e03ff5ad9ab8f54">openair0_thread_t::mutex_write</a></div><div class="ttdeci">pthread_mutex_t mutex_write</div><div class="ttdoc">mutex for trx write thread </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00305">common_lib.h:305</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_a23f0d9ffa88c0f68cd22b76a6a9e0e11"><div class="ttname"><a href="structopenair0__config__t.html#a23f0d9ffa88c0f68cd22b76a6a9e0e11">openair0_config_t::tx_num_channels</a></div><div class="ttdeci">int tx_num_channels</div><div class="ttdoc">number of TX channels (=TX antennas) </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00180">common_lib.h:180</a></div></div>
|
||||
<div class="ttc" id="structsamplesBlockHeader__t_html_aef4e02898cfb6b11cdf8d6b375ec7133"><div class="ttname"><a href="structsamplesBlockHeader__t.html#aef4e02898cfb6b11cdf8d6b375ec7133">samplesBlockHeader_t::nbAnt</a></div><div class="ttdeci">uint32_t nbAnt</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00508">common_lib.h:508</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ga5cd5ca6e07ca455ac31c2d8ded78385a"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ga5cd5ca6e07ca455ac31c2d8ded78385a">oai_transport_initfunc_t</a></div><div class="ttdeci">int(* oai_transport_initfunc_t)(openair0_device *device, openair0_config_t *openair0_cfg, eth_params_t *eth_params)</div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00495">common_lib.h:495</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_a4f136a8b50b705ca17ce2e22b56ca809"><div class="ttname"><a href="structopenair0__config__t.html#a4f136a8b50b705ca17ce2e22b56ca809">openair0_config_t::Mod_id</a></div><div class="ttdeci">int Mod_id</div><div class="ttdoc">Module ID for this configuration. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00160">common_lib.h:160</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ggab69560ebc82af819611d037a0121cc98a607502d097a12a8ee01fe4480cc00125"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ggab69560ebc82af819611d037a0121cc98a607502d097a12a8ee01fe4480cc00125">NONE_TP</a></div><div class="ttdoc">no transport protocol </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00120">common_lib.h:120</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ggaaa5808d4b389abd0ffaa5a6bf8979b95ab0ccbf44555ba24374a291bc6bcc2169"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95ab0ccbf44555ba24374a291bc6bcc2169">LMSSDR_DEV</a></div><div class="ttdoc">device is LMSSDR (SoDeRa) </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00100">common_lib.h:100</a></div></div>
|
||||
<div class="ttc" id="structeth__params__t_html_a986ad1aa4233de6ef8db939a7d3d1b83"><div class="ttname"><a href="structeth__params__t.html#a986ad1aa4233de6ef8db939a7d3d1b83">eth_params_t::remote_portc</a></div><div class="ttdeci">uint16_t remote_portc</div><div class="ttdoc">remote port number for Ethernet interface (control) </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00256">common_lib.h:256</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ggaaa5808d4b389abd0ffaa5a6bf8979b95a6f20ecc6f7a6fc885b2c4c33428a360f"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a6f20ecc6f7a6fc885b2c4c33428a360f">USRP_N300_DEV</a></div><div class="ttdoc">device is USRP N300/N310 </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00096">common_lib.h:96</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_a015023e826283e3de27ea20163187221"><div class="ttname"><a href="structopenair0__device__t.html#a015023e826283e3de27ea20163187221">openair0_device_t::thirdparty_startstreaming</a></div><div class="ttdeci">int(* thirdparty_startstreaming)(openair0_device *device)</div><div class="ttdoc">Callback for Third-party start streaming routine. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00478">common_lib.h:478</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ggab69560ebc82af819611d037a0121cc98a3f26f2223f4b3ca902685677ab696b01"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ggab69560ebc82af819611d037a0121cc98a3f26f2223f4b3ca902685677ab696b01">MIN_TRANSP_TYPE</a></div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00116">common_lib.h:116</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ggaaa5808d4b389abd0ffaa5a6bf8979b95a76289f688c5fc6574cfd86372e456c1d"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95a76289f688c5fc6574cfd86372e456c1d">MAX_RF_DEV_TYPE</a></div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00110">common_lib.h:110</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_gga306537444209dc91972f17fc71473ff5ae027bc2a3779820d0ea9730b38850537"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#gga306537444209dc91972f17fc71473ff5ae027bc2a3779820d0ea9730b38850537">unset</a></div><div class="ttdoc">this means the paramter has not been set </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00147">common_lib.h:147</a></div></div>
|
||||
<div class="ttc" id="structrx__gain__calib__table__t_html_acf2c89713a349fc21f822443a0f00774"><div class="ttname"><a href="structrx__gain__calib__table__t.html#acf2c89713a349fc21f822443a0f00774">rx_gain_calib_table_t::offset</a></div><div class="ttdeci">double offset</div><div class="ttdoc">Offset to be applied to RX gain. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00141">common_lib.h:141</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_a5c3b1f69d2e8ce2d25ceb4c61ea05fed"><div class="ttname"><a href="structopenair0__config__t.html#a5c3b1f69d2e8ce2d25ceb4c61ea05fed">openair0_config_t::mmapped_dma</a></div><div class="ttdeci">int mmapped_dma</div><div class="ttdoc">flag to indicate that the device is doing mmapped DMA transfers </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00172">common_lib.h:172</a></div></div>
|
||||
<div class="ttc" id="structeth__params__t_html_af9c9cc896817467607bddb69045fae7c"><div class="ttname"><a href="structeth__params__t.html#af9c9cc896817467607bddb69045fae7c">eth_params_t::local_if_name</a></div><div class="ttdeci">char * local_if_name</div><div class="ttdoc">local Ethernet interface (eNB/RAU, UE) </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00266">common_lib.h:266</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_aa90e61595a7f79ec50afb926c6612664"><div class="ttname"><a href="structopenair0__config__t.html#aa90e61595a7f79ec50afb926c6612664">openair0_config_t::clock_source</a></div><div class="ttdeci">clock_source_t clock_source</div><div class="ttdoc">clock source </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00209">common_lib.h:209</a></div></div>
|
||||
<div class="ttc" id="structopenair0__write__package__t_html"><div class="ttname"><a href="structopenair0__write__package__t.html">openair0_write_package_t</a></div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00282">common_lib.h:282</a></div></div>
|
||||
<div class="ttc" id="structopenair0__device__t_html_aa60512fadf8756ca8b6750fb37287ec2"><div class="ttname"><a href="structopenair0__device__t.html#aa60512fadf8756ca8b6750fb37287ec2">openair0_device_t::thirdparty_init</a></div><div class="ttdeci">int(* thirdparty_init)(openair0_device *device)</div><div class="ttdoc">Callback for Third-party RRU Initialization routine. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00469">common_lib.h:469</a></div></div>
|
||||
<div class="ttc" id="structopenair0__rf__map_html"><div class="ttname"><a href="structopenair0__rf__map.html">openair0_rf_map</a></div><div class="ttdoc">RF mapping. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00245">common_lib.h:245</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ga2eaca82b72e3dce80fa4bc6f00405430"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ga2eaca82b72e3dce80fa4bc6f00405430">host_type_t</a></div><div class="ttdeci">host_type_t</div><div class="ttdoc">openair0 device host type </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00126">common_lib.h:126</a></div></div>
|
||||
<div class="ttc" id="group____GENERIC__PHY__RF__INTERFACE___html_ggaaa5808d4b389abd0ffaa5a6bf8979b95af767170db03446f909b630f652852a67"><div class="ttname"><a href="group____GENERIC__PHY__RF__INTERFACE__.html#ggaaa5808d4b389abd0ffaa5a6bf8979b95af767170db03446f909b630f652852a67">ADRV9371_ZC706_DEV</a></div><div class="ttdoc">device is ADRV9371_ZC706 </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00106">common_lib.h:106</a></div></div>
|
||||
<div class="ttc" id="structopenair0__config__t_html_ab8c6d50adff71da2060f106112ebda88"><div class="ttname"><a href="structopenair0__config__t.html#ab8c6d50adff71da2060f106112ebda88">openair0_config_t::tx_bw</a></div><div class="ttdeci">double tx_bw</div><div class="ttdoc">TX bandwidth in Hz. </div><div class="ttdef"><b>Definition:</b> <a href="common__lib_8h_source.html#l00207">common_lib.h:207</a></div></div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html">ARCH</a></li><li class="navelem"><a class="el" href="dir_6ef97c027e4c3715a348c26a4f7a7b29.html">COMMON</a></li><li class="navelem"><b>common_lib.h</b></li>
|
||||
<li class="footer">Generated on Tue Sep 14 2021 15:56:44 for OpenAirInterface by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.5 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
128
targets/DOCS/html/dir_098b04cc954c8c09de9a119a2ea1eb51.html
Normal file
@@ -0,0 +1,128 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.5"/>
|
||||
<title>OpenAirInterface: LMSSDR Directory Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="oai_logo.png"/></td>
|
||||
<td style="padding-left: 0.5em;">
|
||||
<div id="projectname">OpenAirInterface
|
||||
</div>
|
||||
<div id="projectbrief">Full experimental OpenSource LTE implementation (Rel 8, partial Rel 10)</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.5 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('dir_098b04cc954c8c09de9a119a2ea1eb51.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">LMSSDR Directory Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="dynheader">
|
||||
Directory dependency graph for LMSSDR:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><img src="dir_098b04cc954c8c09de9a119a2ea1eb51_dep.png" border="0" usemap="#dir__098b04cc954c8c09de9a119a2ea1eb51__dep" alt="LMSSDR"/></div>
|
||||
<map name="dir__098b04cc954c8c09de9a119a2ea1eb51__dep" id="dir__098b04cc954c8c09de9a119a2ea1eb51__dep">
|
||||
<area shape="rect" id="node2" href="dir_794236c285f66ea85b3b8f675a5dbe09.html" title="USERSPACE" alt="" coords="37,63,136,111"/><area shape="rect" id="clust2" href="dir_098b04cc954c8c09de9a119a2ea1eb51.html" alt="" coords="27,52,245,121"/><area shape="rect" id="clust1" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html" title="ARCH" alt="" coords="16,16,256,132"/></map>
|
||||
</div>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
|
||||
Directories</h2></td></tr>
|
||||
<tr class="memitem:dir_794236c285f66ea85b3b8f675a5dbe09"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_794236c285f66ea85b3b8f675a5dbe09.html">USERSPACE</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html">ARCH</a></li><li class="navelem"><a class="el" href="dir_098b04cc954c8c09de9a119a2ea1eb51.html">LMSSDR</a></li>
|
||||
<li class="footer">Generated on Tue Sep 14 2021 15:56:44 for OpenAirInterface by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.5 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,5 @@
|
||||
<map id="LMSSDR" name="LMSSDR">
|
||||
<area shape="rect" id="node2" href="dir_794236c285f66ea85b3b8f675a5dbe09.html" title="USERSPACE" alt="" coords="37,63,136,111"/>
|
||||
<area shape="rect" id="clust2" href="dir_098b04cc954c8c09de9a119a2ea1eb51.html" alt="" coords="27,52,245,121"/>
|
||||
<area shape="rect" id="clust1" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html" title="ARCH" alt="" coords="16,16,256,132"/>
|
||||
</map>
|
||||
@@ -0,0 +1 @@
|
||||
eab1705d3693f67ba4cf6e5ddfa5cc95
|
||||
BIN
targets/DOCS/html/dir_098b04cc954c8c09de9a119a2ea1eb51_dep.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
134
targets/DOCS/html/dir_25f5d8fa9a1ce4c0c4650678e0447e10.html
Normal file
@@ -0,0 +1,134 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.5"/>
|
||||
<title>OpenAirInterface: ARCH Directory Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="oai_logo.png"/></td>
|
||||
<td style="padding-left: 0.5em;">
|
||||
<div id="projectname">OpenAirInterface
|
||||
</div>
|
||||
<div id="projectbrief">Full experimental OpenSource LTE implementation (Rel 8, partial Rel 10)</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.5 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('dir_25f5d8fa9a1ce4c0c4650678e0447e10.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">ARCH Directory Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="dynheader">
|
||||
Directory dependency graph for ARCH:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><img src="dir_25f5d8fa9a1ce4c0c4650678e0447e10_dep.png" border="0" usemap="#dir__25f5d8fa9a1ce4c0c4650678e0447e10__dep" alt="ARCH"/></div>
|
||||
<map name="dir__25f5d8fa9a1ce4c0c4650678e0447e10__dep" id="dir__25f5d8fa9a1ce4c0c4650678e0447e10__dep">
|
||||
<area shape="rect" id="node2" href="dir_53a38f7b91caabdebd78263cee115e31.html" title="BLADERF" alt="" coords="329,27,409,75"/><area shape="rect" id="node3" href="dir_6ef97c027e4c3715a348c26a4f7a7b29.html" title="COMMON" alt="" coords="221,27,304,75"/><area shape="rect" id="node4" href="dir_098b04cc954c8c09de9a119a2ea1eb51.html" title="LMSSDR" alt="" coords="123,27,197,75"/><area shape="rect" id="node5" href="dir_fbb6f5609ed7ef16a1c0ea5756ca73b1.html" title="USRP" alt="" coords="27,27,99,75"/><area shape="rect" id="clust1" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html" alt="" coords="16,16,517,85"/></map>
|
||||
</div>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
|
||||
Directories</h2></td></tr>
|
||||
<tr class="memitem:dir_53a38f7b91caabdebd78263cee115e31"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_53a38f7b91caabdebd78263cee115e31.html">BLADERF</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:dir_6ef97c027e4c3715a348c26a4f7a7b29"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_6ef97c027e4c3715a348c26a4f7a7b29.html">COMMON</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:dir_098b04cc954c8c09de9a119a2ea1eb51"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_098b04cc954c8c09de9a119a2ea1eb51.html">LMSSDR</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:dir_fbb6f5609ed7ef16a1c0ea5756ca73b1"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_fbb6f5609ed7ef16a1c0ea5756ca73b1.html">USRP</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html">ARCH</a></li>
|
||||
<li class="footer">Generated on Tue Sep 14 2021 15:56:44 for OpenAirInterface by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.5 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,7 @@
|
||||
<map id="ARCH" name="ARCH">
|
||||
<area shape="rect" id="node2" href="dir_53a38f7b91caabdebd78263cee115e31.html" title="BLADERF" alt="" coords="329,27,409,75"/>
|
||||
<area shape="rect" id="node3" href="dir_6ef97c027e4c3715a348c26a4f7a7b29.html" title="COMMON" alt="" coords="221,27,304,75"/>
|
||||
<area shape="rect" id="node4" href="dir_098b04cc954c8c09de9a119a2ea1eb51.html" title="LMSSDR" alt="" coords="123,27,197,75"/>
|
||||
<area shape="rect" id="node5" href="dir_fbb6f5609ed7ef16a1c0ea5756ca73b1.html" title="USRP" alt="" coords="27,27,99,75"/>
|
||||
<area shape="rect" id="clust1" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html" alt="" coords="16,16,517,85"/>
|
||||
</map>
|
||||
@@ -0,0 +1 @@
|
||||
2ff4c3cc939e1206b370fe75b381304f
|
||||
BIN
targets/DOCS/html/dir_25f5d8fa9a1ce4c0c4650678e0447e10_dep.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
128
targets/DOCS/html/dir_296a02205c002c198de4197a119f6c27.html
Normal file
@@ -0,0 +1,128 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.5"/>
|
||||
<title>OpenAirInterface: LIB Directory Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="oai_logo.png"/></td>
|
||||
<td style="padding-left: 0.5em;">
|
||||
<div id="projectname">OpenAirInterface
|
||||
</div>
|
||||
<div id="projectbrief">Full experimental OpenSource LTE implementation (Rel 8, partial Rel 10)</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.5 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('dir_296a02205c002c198de4197a119f6c27.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">LIB Directory Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="dynheader">
|
||||
Directory dependency graph for LIB:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><img src="dir_296a02205c002c198de4197a119f6c27_dep.png" border="0" usemap="#dir__296a02205c002c198de4197a119f6c27__dep" alt="LIB"/></div>
|
||||
<map name="dir__296a02205c002c198de4197a119f6c27__dep" id="dir__296a02205c002c198de4197a119f6c27__dep">
|
||||
<area shape="rect" id="node1" href="dir_296a02205c002c198de4197a119f6c27.html" title="LIB" alt="" coords="29,52,101,100"/><area shape="rect" id="clust1" href="dir_5af472ecb62af5ad2ec90ab2e70223e1.html" title="USERSPACE" alt="" coords="16,16,115,111"/></map>
|
||||
</div>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
|
||||
Files</h2></td></tr>
|
||||
<tr class="memitem:usrp__lib_8cpp"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>usrp_lib.cpp</b> <a href="usrp__lib_8cpp_source.html">[code]</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html">ARCH</a></li><li class="navelem"><a class="el" href="dir_fbb6f5609ed7ef16a1c0ea5756ca73b1.html">USRP</a></li><li class="navelem"><a class="el" href="dir_5af472ecb62af5ad2ec90ab2e70223e1.html">USERSPACE</a></li><li class="navelem"><a class="el" href="dir_296a02205c002c198de4197a119f6c27.html">LIB</a></li>
|
||||
<li class="footer">Generated on Tue Sep 14 2021 15:56:44 for OpenAirInterface by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.5 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,4 @@
|
||||
<map id="LIB" name="LIB">
|
||||
<area shape="rect" id="node1" href="dir_296a02205c002c198de4197a119f6c27.html" title="LIB" alt="" coords="29,52,101,100"/>
|
||||
<area shape="rect" id="clust1" href="dir_5af472ecb62af5ad2ec90ab2e70223e1.html" title="USERSPACE" alt="" coords="16,16,115,111"/>
|
||||
</map>
|
||||
@@ -0,0 +1 @@
|
||||
f50bd1c094fef107092294f9097daf22
|
||||
BIN
targets/DOCS/html/dir_296a02205c002c198de4197a119f6c27_dep.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
128
targets/DOCS/html/dir_31fe4f88196f07d47da88c3165f9b109.html
Normal file
@@ -0,0 +1,128 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.5"/>
|
||||
<title>OpenAirInterface: USERSPACE Directory Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="oai_logo.png"/></td>
|
||||
<td style="padding-left: 0.5em;">
|
||||
<div id="projectname">OpenAirInterface
|
||||
</div>
|
||||
<div id="projectbrief">Full experimental OpenSource LTE implementation (Rel 8, partial Rel 10)</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.5 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('dir_31fe4f88196f07d47da88c3165f9b109.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">USERSPACE Directory Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="dynheader">
|
||||
Directory dependency graph for USERSPACE:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><img src="dir_31fe4f88196f07d47da88c3165f9b109_dep.png" border="0" usemap="#dir__31fe4f88196f07d47da88c3165f9b109__dep" alt="USERSPACE"/></div>
|
||||
<map name="dir__31fe4f88196f07d47da88c3165f9b109__dep" id="dir__31fe4f88196f07d47da88c3165f9b109__dep">
|
||||
<area shape="rect" id="node2" href="dir_7dbc7ac1b70501c722463688f01c3543.html" title="LIB" alt="" coords="37,63,109,111"/><area shape="rect" id="clust2" href="dir_31fe4f88196f07d47da88c3165f9b109.html" alt="" coords="27,52,243,121"/><area shape="rect" id="clust1" href="dir_53a38f7b91caabdebd78263cee115e31.html" title="BLADERF" alt="" coords="16,16,253,132"/></map>
|
||||
</div>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
|
||||
Directories</h2></td></tr>
|
||||
<tr class="memitem:dir_7dbc7ac1b70501c722463688f01c3543"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_7dbc7ac1b70501c722463688f01c3543.html">LIB</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html">ARCH</a></li><li class="navelem"><a class="el" href="dir_53a38f7b91caabdebd78263cee115e31.html">BLADERF</a></li><li class="navelem"><a class="el" href="dir_31fe4f88196f07d47da88c3165f9b109.html">USERSPACE</a></li>
|
||||
<li class="footer">Generated on Tue Sep 14 2021 15:56:44 for OpenAirInterface by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.5 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,5 @@
|
||||
<map id="USERSPACE" name="USERSPACE">
|
||||
<area shape="rect" id="node2" href="dir_7dbc7ac1b70501c722463688f01c3543.html" title="LIB" alt="" coords="37,63,109,111"/>
|
||||
<area shape="rect" id="clust2" href="dir_31fe4f88196f07d47da88c3165f9b109.html" alt="" coords="27,52,243,121"/>
|
||||
<area shape="rect" id="clust1" href="dir_53a38f7b91caabdebd78263cee115e31.html" title="BLADERF" alt="" coords="16,16,253,132"/>
|
||||
</map>
|
||||
@@ -0,0 +1 @@
|
||||
271279b977a61d04f958c1238f7e74c6
|
||||
BIN
targets/DOCS/html/dir_31fe4f88196f07d47da88c3165f9b109_dep.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
128
targets/DOCS/html/dir_53a38f7b91caabdebd78263cee115e31.html
Normal file
@@ -0,0 +1,128 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.5"/>
|
||||
<title>OpenAirInterface: BLADERF Directory Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="oai_logo.png"/></td>
|
||||
<td style="padding-left: 0.5em;">
|
||||
<div id="projectname">OpenAirInterface
|
||||
</div>
|
||||
<div id="projectbrief">Full experimental OpenSource LTE implementation (Rel 8, partial Rel 10)</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.5 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('dir_53a38f7b91caabdebd78263cee115e31.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">BLADERF Directory Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="dynheader">
|
||||
Directory dependency graph for BLADERF:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><img src="dir_53a38f7b91caabdebd78263cee115e31_dep.png" border="0" usemap="#dir__53a38f7b91caabdebd78263cee115e31__dep" alt="BLADERF"/></div>
|
||||
<map name="dir__53a38f7b91caabdebd78263cee115e31__dep" id="dir__53a38f7b91caabdebd78263cee115e31__dep">
|
||||
<area shape="rect" id="node2" href="dir_31fe4f88196f07d47da88c3165f9b109.html" title="USERSPACE" alt="" coords="37,63,136,111"/><area shape="rect" id="clust2" href="dir_53a38f7b91caabdebd78263cee115e31.html" alt="" coords="27,52,253,121"/><area shape="rect" id="clust1" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html" title="ARCH" alt="" coords="16,16,264,132"/></map>
|
||||
</div>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
|
||||
Directories</h2></td></tr>
|
||||
<tr class="memitem:dir_31fe4f88196f07d47da88c3165f9b109"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_31fe4f88196f07d47da88c3165f9b109.html">USERSPACE</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html">ARCH</a></li><li class="navelem"><a class="el" href="dir_53a38f7b91caabdebd78263cee115e31.html">BLADERF</a></li>
|
||||
<li class="footer">Generated on Tue Sep 14 2021 15:56:44 for OpenAirInterface by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.5 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,5 @@
|
||||
<map id="BLADERF" name="BLADERF">
|
||||
<area shape="rect" id="node2" href="dir_31fe4f88196f07d47da88c3165f9b109.html" title="USERSPACE" alt="" coords="37,63,136,111"/>
|
||||
<area shape="rect" id="clust2" href="dir_53a38f7b91caabdebd78263cee115e31.html" alt="" coords="27,52,253,121"/>
|
||||
<area shape="rect" id="clust1" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html" title="ARCH" alt="" coords="16,16,264,132"/>
|
||||
</map>
|
||||
@@ -0,0 +1 @@
|
||||
1e099e41ba5183a778874d202eeddc51
|
||||
BIN
targets/DOCS/html/dir_53a38f7b91caabdebd78263cee115e31_dep.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
128
targets/DOCS/html/dir_5af472ecb62af5ad2ec90ab2e70223e1.html
Normal file
@@ -0,0 +1,128 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.5"/>
|
||||
<title>OpenAirInterface: USERSPACE Directory Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="oai_logo.png"/></td>
|
||||
<td style="padding-left: 0.5em;">
|
||||
<div id="projectname">OpenAirInterface
|
||||
</div>
|
||||
<div id="projectbrief">Full experimental OpenSource LTE implementation (Rel 8, partial Rel 10)</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.5 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('dir_5af472ecb62af5ad2ec90ab2e70223e1.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">USERSPACE Directory Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="dynheader">
|
||||
Directory dependency graph for USERSPACE:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><img src="dir_5af472ecb62af5ad2ec90ab2e70223e1_dep.png" border="0" usemap="#dir__5af472ecb62af5ad2ec90ab2e70223e1__dep" alt="USERSPACE"/></div>
|
||||
<map name="dir__5af472ecb62af5ad2ec90ab2e70223e1__dep" id="dir__5af472ecb62af5ad2ec90ab2e70223e1__dep">
|
||||
<area shape="rect" id="node2" href="dir_296a02205c002c198de4197a119f6c27.html" title="LIB" alt="" coords="37,63,109,111"/><area shape="rect" id="clust2" href="dir_5af472ecb62af5ad2ec90ab2e70223e1.html" alt="" coords="27,52,243,121"/><area shape="rect" id="clust1" href="dir_fbb6f5609ed7ef16a1c0ea5756ca73b1.html" title="USRP" alt="" coords="16,16,253,132"/></map>
|
||||
</div>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
|
||||
Directories</h2></td></tr>
|
||||
<tr class="memitem:dir_296a02205c002c198de4197a119f6c27"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_296a02205c002c198de4197a119f6c27.html">LIB</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html">ARCH</a></li><li class="navelem"><a class="el" href="dir_fbb6f5609ed7ef16a1c0ea5756ca73b1.html">USRP</a></li><li class="navelem"><a class="el" href="dir_5af472ecb62af5ad2ec90ab2e70223e1.html">USERSPACE</a></li>
|
||||
<li class="footer">Generated on Tue Sep 14 2021 15:56:44 for OpenAirInterface by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.5 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,5 @@
|
||||
<map id="USERSPACE" name="USERSPACE">
|
||||
<area shape="rect" id="node2" href="dir_296a02205c002c198de4197a119f6c27.html" title="LIB" alt="" coords="37,63,109,111"/>
|
||||
<area shape="rect" id="clust2" href="dir_5af472ecb62af5ad2ec90ab2e70223e1.html" alt="" coords="27,52,243,121"/>
|
||||
<area shape="rect" id="clust1" href="dir_fbb6f5609ed7ef16a1c0ea5756ca73b1.html" title="USRP" alt="" coords="16,16,253,132"/>
|
||||
</map>
|
||||
@@ -0,0 +1 @@
|
||||
511fba4fadfbe97badae815a58edb387
|
||||
BIN
targets/DOCS/html/dir_5af472ecb62af5ad2ec90ab2e70223e1_dep.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
129
targets/DOCS/html/dir_6ef97c027e4c3715a348c26a4f7a7b29.html
Normal file
@@ -0,0 +1,129 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.5"/>
|
||||
<title>OpenAirInterface: COMMON Directory Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="oai_logo.png"/></td>
|
||||
<td style="padding-left: 0.5em;">
|
||||
<div id="projectname">OpenAirInterface
|
||||
</div>
|
||||
<div id="projectbrief">Full experimental OpenSource LTE implementation (Rel 8, partial Rel 10)</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.5 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('dir_6ef97c027e4c3715a348c26a4f7a7b29.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">COMMON Directory Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="dynheader">
|
||||
Directory dependency graph for COMMON:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><img src="dir_6ef97c027e4c3715a348c26a4f7a7b29_dep.png" border="0" usemap="#dir__6ef97c027e4c3715a348c26a4f7a7b29__dep" alt="COMMON"/></div>
|
||||
<map name="dir__6ef97c027e4c3715a348c26a4f7a7b29__dep" id="dir__6ef97c027e4c3715a348c26a4f7a7b29__dep">
|
||||
<area shape="rect" id="node1" href="dir_6ef97c027e4c3715a348c26a4f7a7b29.html" title="COMMON" alt="" coords="27,52,109,100"/><area shape="rect" id="clust1" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html" title="ARCH" alt="" coords="16,16,120,111"/></map>
|
||||
</div>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
|
||||
Files</h2></td></tr>
|
||||
<tr class="memitem:common__lib_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>common_lib.h</b> <a href="common__lib_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="memdesc:common__lib_8h"><td class="mdescLeft"> </td><td class="mdescRight">common APIs for different RF frontend device <br/></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html">ARCH</a></li><li class="navelem"><a class="el" href="dir_6ef97c027e4c3715a348c26a4f7a7b29.html">COMMON</a></li>
|
||||
<li class="footer">Generated on Tue Sep 14 2021 15:56:44 for OpenAirInterface by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.5 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,4 @@
|
||||
<map id="COMMON" name="COMMON">
|
||||
<area shape="rect" id="node1" href="dir_6ef97c027e4c3715a348c26a4f7a7b29.html" title="COMMON" alt="" coords="27,52,109,100"/>
|
||||
<area shape="rect" id="clust1" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html" title="ARCH" alt="" coords="16,16,120,111"/>
|
||||
</map>
|
||||
@@ -0,0 +1 @@
|
||||
fb7dca9c3acdff1d991aad4d8d99cdc8
|
||||
BIN
targets/DOCS/html/dir_6ef97c027e4c3715a348c26a4f7a7b29_dep.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
128
targets/DOCS/html/dir_794236c285f66ea85b3b8f675a5dbe09.html
Normal file
@@ -0,0 +1,128 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.5"/>
|
||||
<title>OpenAirInterface: USERSPACE Directory Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="oai_logo.png"/></td>
|
||||
<td style="padding-left: 0.5em;">
|
||||
<div id="projectname">OpenAirInterface
|
||||
</div>
|
||||
<div id="projectbrief">Full experimental OpenSource LTE implementation (Rel 8, partial Rel 10)</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.5 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('dir_794236c285f66ea85b3b8f675a5dbe09.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">USERSPACE Directory Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="dynheader">
|
||||
Directory dependency graph for USERSPACE:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><img src="dir_794236c285f66ea85b3b8f675a5dbe09_dep.png" border="0" usemap="#dir__794236c285f66ea85b3b8f675a5dbe09__dep" alt="USERSPACE"/></div>
|
||||
<map name="dir__794236c285f66ea85b3b8f675a5dbe09__dep" id="dir__794236c285f66ea85b3b8f675a5dbe09__dep">
|
||||
<area shape="rect" id="node2" href="dir_f426a0714932c70923effea88330c81e.html" title="LIB" alt="" coords="37,63,109,111"/><area shape="rect" id="clust2" href="dir_794236c285f66ea85b3b8f675a5dbe09.html" alt="" coords="27,52,243,121"/><area shape="rect" id="clust1" href="dir_098b04cc954c8c09de9a119a2ea1eb51.html" title="LMSSDR" alt="" coords="16,16,253,132"/></map>
|
||||
</div>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
|
||||
Directories</h2></td></tr>
|
||||
<tr class="memitem:dir_f426a0714932c70923effea88330c81e"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_f426a0714932c70923effea88330c81e.html">LIB</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html">ARCH</a></li><li class="navelem"><a class="el" href="dir_098b04cc954c8c09de9a119a2ea1eb51.html">LMSSDR</a></li><li class="navelem"><a class="el" href="dir_794236c285f66ea85b3b8f675a5dbe09.html">USERSPACE</a></li>
|
||||
<li class="footer">Generated on Tue Sep 14 2021 15:56:44 for OpenAirInterface by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.5 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,5 @@
|
||||
<map id="USERSPACE" name="USERSPACE">
|
||||
<area shape="rect" id="node2" href="dir_f426a0714932c70923effea88330c81e.html" title="LIB" alt="" coords="37,63,109,111"/>
|
||||
<area shape="rect" id="clust2" href="dir_794236c285f66ea85b3b8f675a5dbe09.html" alt="" coords="27,52,243,121"/>
|
||||
<area shape="rect" id="clust1" href="dir_098b04cc954c8c09de9a119a2ea1eb51.html" title="LMSSDR" alt="" coords="16,16,253,132"/>
|
||||
</map>
|
||||
@@ -0,0 +1 @@
|
||||
481447797c176c29b981d8ac7f0c2ab2
|
||||
BIN
targets/DOCS/html/dir_794236c285f66ea85b3b8f675a5dbe09_dep.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
130
targets/DOCS/html/dir_7dbc7ac1b70501c722463688f01c3543.html
Normal file
@@ -0,0 +1,130 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.5"/>
|
||||
<title>OpenAirInterface: LIB Directory Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="oai_logo.png"/></td>
|
||||
<td style="padding-left: 0.5em;">
|
||||
<div id="projectname">OpenAirInterface
|
||||
</div>
|
||||
<div id="projectbrief">Full experimental OpenSource LTE implementation (Rel 8, partial Rel 10)</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.5 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('dir_7dbc7ac1b70501c722463688f01c3543.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">LIB Directory Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="dynheader">
|
||||
Directory dependency graph for LIB:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><img src="dir_7dbc7ac1b70501c722463688f01c3543_dep.png" border="0" usemap="#dir__7dbc7ac1b70501c722463688f01c3543__dep" alt="LIB"/></div>
|
||||
<map name="dir__7dbc7ac1b70501c722463688f01c3543__dep" id="dir__7dbc7ac1b70501c722463688f01c3543__dep">
|
||||
<area shape="rect" id="node1" href="dir_7dbc7ac1b70501c722463688f01c3543.html" title="LIB" alt="" coords="29,52,101,100"/><area shape="rect" id="clust1" href="dir_31fe4f88196f07d47da88c3165f9b109.html" title="USERSPACE" alt="" coords="16,16,115,111"/></map>
|
||||
</div>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
|
||||
Files</h2></td></tr>
|
||||
<tr class="memitem:bladerf__lib_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>bladerf_lib.c</b> <a href="bladerf__lib_8c_source.html">[code]</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:bladerf__lib_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>bladerf_lib.h</b> <a href="bladerf__lib_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html">ARCH</a></li><li class="navelem"><a class="el" href="dir_53a38f7b91caabdebd78263cee115e31.html">BLADERF</a></li><li class="navelem"><a class="el" href="dir_31fe4f88196f07d47da88c3165f9b109.html">USERSPACE</a></li><li class="navelem"><a class="el" href="dir_7dbc7ac1b70501c722463688f01c3543.html">LIB</a></li>
|
||||
<li class="footer">Generated on Tue Sep 14 2021 15:56:44 for OpenAirInterface by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.5 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,4 @@
|
||||
<map id="LIB" name="LIB">
|
||||
<area shape="rect" id="node1" href="dir_7dbc7ac1b70501c722463688f01c3543.html" title="LIB" alt="" coords="29,52,101,100"/>
|
||||
<area shape="rect" id="clust1" href="dir_31fe4f88196f07d47da88c3165f9b109.html" title="USERSPACE" alt="" coords="16,16,115,111"/>
|
||||
</map>
|
||||
@@ -0,0 +1 @@
|
||||
8fce55fc71d02f529c27e4d070957325
|
||||
BIN
targets/DOCS/html/dir_7dbc7ac1b70501c722463688f01c3543_dep.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
128
targets/DOCS/html/dir_f426a0714932c70923effea88330c81e.html
Normal file
@@ -0,0 +1,128 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.5"/>
|
||||
<title>OpenAirInterface: LIB Directory Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="oai_logo.png"/></td>
|
||||
<td style="padding-left: 0.5em;">
|
||||
<div id="projectname">OpenAirInterface
|
||||
</div>
|
||||
<div id="projectbrief">Full experimental OpenSource LTE implementation (Rel 8, partial Rel 10)</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.5 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('dir_f426a0714932c70923effea88330c81e.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">LIB Directory Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="dynheader">
|
||||
Directory dependency graph for LIB:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><img src="dir_f426a0714932c70923effea88330c81e_dep.png" border="0" usemap="#dir__f426a0714932c70923effea88330c81e__dep" alt="LIB"/></div>
|
||||
<map name="dir__f426a0714932c70923effea88330c81e__dep" id="dir__f426a0714932c70923effea88330c81e__dep">
|
||||
<area shape="rect" id="node1" href="dir_f426a0714932c70923effea88330c81e.html" title="LIB" alt="" coords="29,52,101,100"/><area shape="rect" id="clust1" href="dir_794236c285f66ea85b3b8f675a5dbe09.html" title="USERSPACE" alt="" coords="16,16,115,111"/></map>
|
||||
</div>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
|
||||
Files</h2></td></tr>
|
||||
<tr class="memitem:lms__lib_8cpp"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>lms_lib.cpp</b> <a href="lms__lib_8cpp_source.html">[code]</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html">ARCH</a></li><li class="navelem"><a class="el" href="dir_098b04cc954c8c09de9a119a2ea1eb51.html">LMSSDR</a></li><li class="navelem"><a class="el" href="dir_794236c285f66ea85b3b8f675a5dbe09.html">USERSPACE</a></li><li class="navelem"><a class="el" href="dir_f426a0714932c70923effea88330c81e.html">LIB</a></li>
|
||||
<li class="footer">Generated on Tue Sep 14 2021 15:56:44 for OpenAirInterface by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.5 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,4 @@
|
||||
<map id="LIB" name="LIB">
|
||||
<area shape="rect" id="node1" href="dir_f426a0714932c70923effea88330c81e.html" title="LIB" alt="" coords="29,52,101,100"/>
|
||||
<area shape="rect" id="clust1" href="dir_794236c285f66ea85b3b8f675a5dbe09.html" title="USERSPACE" alt="" coords="16,16,115,111"/>
|
||||
</map>
|
||||
@@ -0,0 +1 @@
|
||||
743a28dbff8100c97c4a778a41761778
|
||||
BIN
targets/DOCS/html/dir_f426a0714932c70923effea88330c81e_dep.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
128
targets/DOCS/html/dir_fbb6f5609ed7ef16a1c0ea5756ca73b1.html
Normal file
@@ -0,0 +1,128 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.5"/>
|
||||
<title>OpenAirInterface: USRP Directory Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(initResizable);
|
||||
$(window).load(resizeHeight);
|
||||
</script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="oai_logo.png"/></td>
|
||||
<td style="padding-left: 0.5em;">
|
||||
<div id="projectname">OpenAirInterface
|
||||
</div>
|
||||
<div id="projectbrief">Full experimental OpenSource LTE implementation (Rel 8, partial Rel 10)</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.5 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){initNavTree('dir_fbb6f5609ed7ef16a1c0ea5756ca73b1.html','');});
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">USRP Directory Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="dynheader">
|
||||
Directory dependency graph for USRP:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><img src="dir_fbb6f5609ed7ef16a1c0ea5756ca73b1_dep.png" border="0" usemap="#dir__fbb6f5609ed7ef16a1c0ea5756ca73b1__dep" alt="USRP"/></div>
|
||||
<map name="dir__fbb6f5609ed7ef16a1c0ea5756ca73b1__dep" id="dir__fbb6f5609ed7ef16a1c0ea5756ca73b1__dep">
|
||||
<area shape="rect" id="node2" href="dir_5af472ecb62af5ad2ec90ab2e70223e1.html" title="USERSPACE" alt="" coords="37,63,136,111"/><area shape="rect" id="clust2" href="dir_fbb6f5609ed7ef16a1c0ea5756ca73b1.html" alt="" coords="27,52,243,121"/><area shape="rect" id="clust1" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html" title="ARCH" alt="" coords="16,16,253,132"/></map>
|
||||
</div>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
|
||||
Directories</h2></td></tr>
|
||||
<tr class="memitem:dir_5af472ecb62af5ad2ec90ab2e70223e1"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_5af472ecb62af5ad2ec90ab2e70223e1.html">USERSPACE</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html">ARCH</a></li><li class="navelem"><a class="el" href="dir_fbb6f5609ed7ef16a1c0ea5756ca73b1.html">USRP</a></li>
|
||||
<li class="footer">Generated on Tue Sep 14 2021 15:56:44 for OpenAirInterface by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.5 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,5 @@
|
||||
<map id="USRP" name="USRP">
|
||||
<area shape="rect" id="node2" href="dir_5af472ecb62af5ad2ec90ab2e70223e1.html" title="USERSPACE" alt="" coords="37,63,136,111"/>
|
||||
<area shape="rect" id="clust2" href="dir_fbb6f5609ed7ef16a1c0ea5756ca73b1.html" alt="" coords="27,52,243,121"/>
|
||||
<area shape="rect" id="clust1" href="dir_25f5d8fa9a1ce4c0c4650678e0447e10.html" title="ARCH" alt="" coords="16,16,253,132"/>
|
||||
</map>
|
||||
@@ -0,0 +1 @@
|
||||
5bbf4a6b224919eb218247e80385ea1d
|
||||
BIN
targets/DOCS/html/dir_fbb6f5609ed7ef16a1c0ea5756ca73b1_dep.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |