Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
常顺宇
OpenXG-RAN
Commits
edce7881
Commit
edce7881
authored
Feb 07, 2019
by
Florian Kaltenberger
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/develop-nr' into nr-cfo-estimation
parents
5c1c45df
8f96cd50
Changes
22
Hide whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
173 additions
and
144 deletions
+173
-144
ci-scripts/Jenkinsfile-gitlab
ci-scripts/Jenkinsfile-gitlab
+2
-2
ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf
ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf
+3
-3
ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf
ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf
+4
-4
ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf
ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf
+4
-4
ci-scripts/conf_files/rcc.band7.tm1.if4p5.lo.100PRB.usrpb210.conf
...ts/conf_files/rcc.band7.tm1.if4p5.lo.100PRB.usrpb210.conf
+3
-3
ci-scripts/conf_files/rcc.band7.tm1.if4p5.lo.25PRB.usrpb210.conf
...pts/conf_files/rcc.band7.tm1.if4p5.lo.25PRB.usrpb210.conf
+3
-3
ci-scripts/conf_files/rcc.band7.tm1.if4p5.lo.50PRB.usrpb210.conf
...pts/conf_files/rcc.band7.tm1.if4p5.lo.50PRB.usrpb210.conf
+3
-3
ci-scripts/conf_files/rru.fdd.band7.conf
ci-scripts/conf_files/rru.fdd.band7.conf
+1
-1
ci-scripts/main.py
ci-scripts/main.py
+2
-1
ci-scripts/oai-ci-vm-tool
ci-scripts/oai-ci-vm-tool
+2
-2
ci-scripts/waitBuildOnVM.sh
ci-scripts/waitBuildOnVM.sh
+5
-1
cmake_targets/autotests/test_case_list.xml
cmake_targets/autotests/test_case_list.xml
+6
-6
cmake_targets/build_oai
cmake_targets/build_oai
+1
-1
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
+2
-1
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
+29
-34
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
+1
-0
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+7
-7
openair1/SIMULATION/NR_PHY/dlsim.c
openair1/SIMULATION/NR_PHY/dlsim.c
+2
-2
openair1/SIMULATION/NR_PHY/pbchsim.c
openair1/SIMULATION/NR_PHY/pbchsim.c
+3
-2
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
+55
-2
targets/RT/USER/nr-ru.c
targets/RT/USER/nr-ru.c
+2
-2
targets/RT/USER/nr-ue.c
targets/RT/USER/nr-ue.c
+33
-60
No files found.
ci-scripts/Jenkinsfile-gitlab
View file @
edce7881
...
...
@@ -212,7 +212,7 @@ pipeline {
steps
{
gitlabCommitStatus
(
name:
"Build eNb-ethernet"
)
{
timeout
(
time:
20
,
unit:
'MINUTES'
)
{
sh
"./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant enb-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID}
--keep-vm-alive
"
sh
"./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant enb-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
}
}
}
...
...
@@ -221,7 +221,7 @@ pipeline {
steps
{
gitlabCommitStatus
(
name:
"Build UE-ethernet"
)
{
timeout
(
time:
20
,
unit:
'MINUTES'
)
{
sh
"./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant ue-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID}
--keep-vm-alive
"
sh
"./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant ue-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
}
}
}
...
...
ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf
View file @
edce7881
...
...
@@ -197,8 +197,8 @@ MACRLCs = (
tr_s_preference
=
"local_L1"
;
tr_n_preference
=
"local_RRC"
;
phy_test_mode
=
0
;
puSch10xSnr
=
20
0
;
puCch10xSnr
=
20
0
;
puSch10xSnr
=
16
0
;
puCch10xSnr
=
16
0
;
}
);
...
...
@@ -227,7 +227,7 @@ RUs = (
THREAD_STRUCT
= (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config
=
"PARALLEL_
RU_L1_TRX_SPLIT
"
;
parallel_config
=
"PARALLEL_
SINGLE_THREAD
"
;
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config
=
"WORKER_ENABLE"
;
}
...
...
ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf
View file @
edce7881
...
...
@@ -197,8 +197,8 @@ MACRLCs = (
tr_s_preference
=
"local_L1"
;
tr_n_preference
=
"local_RRC"
;
phy_test_mode
=
0
;
puSch10xSnr
=
20
0
;
puCch10xSnr
=
20
0
;
puSch10xSnr
=
16
0
;
puCch10xSnr
=
16
0
;
}
);
...
...
@@ -218,7 +218,7 @@ RUs = (
att_rx
=
0
;
bands
= [
7
];
max_pdschReferenceSignalPower
= -
27
;
max_rxgain
=
1
1
5
;
max_rxgain
=
1
2
5
;
eNB_instances
= [
0
];
}
...
...
@@ -227,7 +227,7 @@ RUs = (
THREAD_STRUCT
= (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config
=
"PARALLEL_
RU_L1_TRX_SPLIT
"
;
parallel_config
=
"PARALLEL_
SINGLE_THREAD
"
;
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config
=
"WORKER_ENABLE"
;
}
...
...
ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf
View file @
edce7881
...
...
@@ -197,8 +197,8 @@ MACRLCs = (
tr_s_preference
=
"local_L1"
;
tr_n_preference
=
"local_RRC"
;
phy_test_mode
=
0
;
puSch10xSnr
=
20
0
;
puCch10xSnr
=
20
0
;
puSch10xSnr
=
16
0
;
puCch10xSnr
=
16
0
;
}
);
...
...
@@ -218,7 +218,7 @@ RUs = (
att_rx
=
0
;
bands
= [
7
];
max_pdschReferenceSignalPower
= -
27
;
max_rxgain
=
1
15
;
max_rxgain
=
1
20
;
eNB_instances
= [
0
];
}
...
...
@@ -227,7 +227,7 @@ RUs = (
THREAD_STRUCT
= (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config
=
"PARALLEL_
RU_L1_TRX_SPLIT
"
;
parallel_config
=
"PARALLEL_
SINGLE_THREAD
"
;
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config
=
"WORKER_ENABLE"
;
}
...
...
ci-scripts/conf_files/rcc.band7.tm1.if4p5.lo.100PRB.usrpb210.conf
View file @
edce7881
...
...
@@ -200,8 +200,8 @@ MACRLCs = (
tr_s_preference
=
"local_L1"
;
tr_n_preference
=
"local_RRC"
;
phy_test_mode
=
0
;
puSch10xSnr
=
20
0
;
puCch10xSnr
=
20
0
;
puSch10xSnr
=
16
0
;
puCch10xSnr
=
16
0
;
}
);
...
...
@@ -234,7 +234,7 @@ RUs = (
THREAD_STRUCT
= (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config
=
"PARALLEL_
RU_L1_TRX_SPLIT
"
;
parallel_config
=
"PARALLEL_
SINGLE_THREAD
"
;
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config
=
"WORKER_ENABLE"
;
}
...
...
ci-scripts/conf_files/rcc.band7.tm1.if4p5.lo.25PRB.usrpb210.conf
View file @
edce7881
...
...
@@ -200,8 +200,8 @@ MACRLCs = (
tr_s_preference
=
"local_L1"
;
tr_n_preference
=
"local_RRC"
;
phy_test_mode
=
0
;
puSch10xSnr
=
20
0
;
puCch10xSnr
=
20
0
;
puSch10xSnr
=
16
0
;
puCch10xSnr
=
16
0
;
}
);
...
...
@@ -234,7 +234,7 @@ RUs = (
THREAD_STRUCT
= (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config
=
"PARALLEL_
RU_L1_TRX_SPLIT
"
;
parallel_config
=
"PARALLEL_
SINGLE_THREAD
"
;
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config
=
"WORKER_ENABLE"
;
}
...
...
ci-scripts/conf_files/rcc.band7.tm1.if4p5.lo.50PRB.usrpb210.conf
View file @
edce7881
...
...
@@ -200,8 +200,8 @@ MACRLCs = (
tr_s_preference
=
"local_L1"
;
tr_n_preference
=
"local_RRC"
;
phy_test_mode
=
0
;
puSch10xSnr
=
20
0
;
puCch10xSnr
=
20
0
;
puSch10xSnr
=
16
0
;
puCch10xSnr
=
16
0
;
}
);
...
...
@@ -234,7 +234,7 @@ RUs = (
THREAD_STRUCT
= (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config
=
"PARALLEL_
RU_L1_TRX_SPLIT
"
;
parallel_config
=
"PARALLEL_
SINGLE_THREAD
"
;
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config
=
"WORKER_ENABLE"
;
}
...
...
ci-scripts/conf_files/rru.fdd.band7.conf
View file @
edce7881
...
...
@@ -20,7 +20,7 @@ RUs = (
THREAD_STRUCT
= (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config
=
"PARALLEL_
RU_L1_TRX_SPLIT
"
;
parallel_config
=
"PARALLEL_
SINGLE_THREAD
"
;
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config
=
"WORKER_ENABLE"
;
}
...
...
ci-scripts/main.py
View file @
edce7881
...
...
@@ -1504,7 +1504,8 @@ class SSHConnection():
return
ENB_PROCESS_ASSERTION
if
foundRealTimeIssue
:
logging
.
debug
(
'
\u001B
[1;37;41m eNB faced real time issues!
\u001B
[0m'
)
return
ENB_PROCESS_REALTIME_ISSUE
self
.
htmleNBFailureMsg
+=
'eNB faced real time issues!
\n
'
#return ENB_PROCESS_REALTIME_ISSUE
return
0
def
TerminateeNB
(
self
):
...
...
ci-scripts/oai-ci-vm-tool
View file @
edce7881
...
...
@@ -252,7 +252,7 @@ case $key in
VM_NAME
=
ci-phy-sim
ARCHIVES_LOC
=
phy_sim
LOG_PATTERN
=
.Rel15.txt
NB_PATTERN_FILES
=
7
NB_PATTERN_FILES
=
8
BUILD_OPTIONS
=
"--phy_simulators"
RUN_OPTIONS
=
"./run_exec_autotests.bash -g
\"
01510*
\"
-q -np -b"
NBARGS
=
$[$NBARGS
+256]
...
...
@@ -330,7 +330,7 @@ case $key in
VM_NAME
=
ci-phy-sim
ARCHIVES_LOC
=
phy_sim
LOG_PATTERN
=
.Rel15.txt
NB_PATTERN_FILES
=
7
NB_PATTERN_FILES
=
8
BUILD_OPTIONS
=
"--phy_simulators"
RUN_OPTIONS
=
"./run_exec_autotests.bash -g
\"
01510*
\"
-q -np -b"
NBARGS
=
$[$NBARGS
+256]
...
...
ci-scripts/waitBuildOnVM.sh
View file @
edce7881
...
...
@@ -165,6 +165,10 @@ function check_on_vm_build {
fi
done
if
[
$NB_PATTERN_FILES
-ne
$NB_FOUND_FILES
]
;
then
STATUS
=
-1
;
fi
if
[
$NB_PATTERN_FILES
-ne
$NB_FOUND_FILES
]
then
echo
"Expecting
$NB_PATTERN_FILES
log files and found
$NB_FOUND_FILES
"
STATUS
=
-1
fi
}
cmake_targets/autotests/test_case_list.xml
View file @
edce7881
...
...
@@ -1065,12 +1065,12 @@
<pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
</pre_exec>
<pre_exec_args></pre_exec_args>
<main_exec>
$OPENAIR_DIR/targets/bin/nr_pbchsim.Rel15
</main_exec>
<main_exec_args>
-s
-11 -S-10
-n1000 -R106
-s
-11 -S-10
-n10 -I -R106
-s
-11 -S-10
-n1000 -R217 -N10
-s
-11 -S-10
-n10 -I -R217 -N10
-s
-11 -S-10
-n1000 -R273 -N20
-s
-11 -S-10
-n10 -I -R273 -N20
</main_exec_args>
<main_exec_args>
-s
0 -S1
-n1000 -R106
-s
0 -S1
-n10 -I -R106
-s
0 -S1
-n1000 -R217 -N10
-s
0 -S1
-n10 -I -R217 -N10
-s
0 -S1
-n1000 -R273 -N20
-s
0 -S1
-n10 -I -R273 -N20
</main_exec_args>
<tags>
nr_pbchsim.test1 nr_pbchsim.test2
</tags>
<search_expr_true>
PBCH test OK
</search_expr_true>
<search_expr_false>
segmentation fault|assertion|exiting|fatal
</search_expr_false>
...
...
cmake_targets/build_oai
View file @
edce7881
...
...
@@ -696,7 +696,7 @@ function main() {
echo_info
"Compiling unitary tests simulators"
# TODO: fix: dlsim_tm4 pucchsim prachsim pdcchsim pbchsim mbmssim
#simlist="dlsim_tm4 dlsim ulsim pucchsim prachsim pdcchsim pbchsim mbmssim"
simlist
=
"dlsim ulsim polartest ldpctest nr_pbchsim nr_dlschsim"
simlist
=
"dlsim ulsim polartest ldpctest nr_pbchsim nr_dlschsim
nr_dlsim
"
for
f
in
$simlist
;
do
compilations
\
phy_simulators
$f
\
...
...
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
View file @
edce7881
...
...
@@ -197,10 +197,11 @@ typedef struct {
}
fapi_nr_rx_indication_body_t
;
///
#define NFAPI_RX_IND_MAX_PDU 100
typedef
struct
{
uint32_t
sfn_slot
;
uint16_t
number_pdus
;
fapi_nr_rx_indication_body_t
*
rx_indication_body
;
fapi_nr_rx_indication_body_t
rx_indication_body
[
NFAPI_RX_IND_MAX_PDU
]
;
}
fapi_nr_rx_indication_t
;
typedef
struct
{
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
View file @
edce7881
...
...
@@ -51,8 +51,8 @@ uint16_t nr_pbch_extract(int **rxdataF,
int
**
rxdataF_ext
,
int
**
dl_ch_estimates_ext
,
uint32_t
symbol
,
uint32_t
s_offset
,
uint32_t
high_speed_flag
,
int
is_synchronized
,
NR_DL_FRAME_PARMS
*
frame_parms
)
{
...
...
@@ -65,18 +65,15 @@ uint16_t nr_pbch_extract(int **rxdataF,
unsigned
int
rx_offset
=
frame_parms
->
first_carrier_offset
+
frame_parms
->
ssb_start_subcarrier
;
//and
if
(
rx_offset
>=
frame_parms
->
ofdm_symbol_size
)
rx_offset
-=
frame_parms
->
ofdm_symbol_size
;
int
s_offset
=
0
;
AssertFatal
(
symbol
>=
1
&&
symbol
<
5
,
"symbol %d illegal for PBCH extraction
\n
"
,
symbol
);
if
(
is_synchronized
==
1
)
s_offset
=
4
;
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
rxF
=
&
rxdataF
[
aarx
][(
symbol
+
s_offset
)
*
frame_parms
->
ofdm_symbol_size
];
rxF_ext
=
&
rxdataF_ext
[
aarx
][
(
symbol
+
s_offset
)
*
(
20
*
12
)
];
rxF_ext
=
&
rxdataF_ext
[
aarx
][
symbol
*
20
*
12
];
#ifdef DEBUG_PBCH
printf
(
"extract_rbs (nushift %d): rx_offset=%d, symbol %d
\n
"
,
frame_parms
->
nushift
,
(
rx_offset
+
((
symbol
+
s_offset
)
*
(
frame_parms
->
ofdm_symbol_size
))),
symbol
);
...
...
@@ -143,7 +140,7 @@ uint16_t nr_pbch_extract(int **rxdataF,
//printf("dl_ch0 addr %p\n",dl_ch0);
dl_ch0_ext
=
&
dl_ch_estimates_ext
[
aarx
][
(
symbol
+
s_offset
)
*
(
20
*
12
)
];
dl_ch0_ext
=
&
dl_ch_estimates_ext
[
aarx
][
symbol
*
20
*
12
];
for
(
rb
=
0
;
rb
<
20
;
rb
++
)
{
j
=
0
;
...
...
@@ -268,8 +265,7 @@ void nr_pbch_channel_compensation(int **rxdataF_ext,
int
**
dl_ch_estimates_ext
,
int
**
rxdataF_comp
,
NR_DL_FRAME_PARMS
*
frame_parms
,
uint8_t
symbol
,
int
is_synchronized
,
uint32_t
symbol
,
uint8_t
output_shift
)
{
...
...
@@ -290,14 +286,11 @@ void nr_pbch_channel_compensation(int **rxdataF_ext,
#endif
AssertFatal
((
symbol
>
0
&&
symbol
<
4
&&
is_synchronized
==
0
)
||
(
symbol
>
4
&&
symbol
<
8
&&
is_synchronized
==
1
),
"symbol %d is illegal for PBCH DM-RS (is_synchronized %d)
\n
"
,
symbol
,
is_synchronized
);
AssertFatal
((
symbol
>
0
&&
symbol
<
4
),
"symbol %d is illegal for PBCH DM-RS
\n
"
,
symbol
);
if
(
symbol
==
2
||
symbol
==
6
)
nb_re
=
72
;
if
(
symbol
==
2
)
nb_re
=
72
;
// printf("comp: symbol %d : nb_re %d\n",symbol,nb_re);
...
...
@@ -559,31 +552,35 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
// clear LLR buffer
memset
(
nr_ue_pbch_vars
->
llr
,
0
,
NR_POLAR_PBCH_E
);
int
first_symbol
=
1
;
if
(
ue
->
is_synchronized
>
0
)
first_symbol
+=
4
;
int
symbol_offset
=
1
;
if
(
ue
->
is_synchronized
>
0
)
symbol_offset
=
4
;
else
symbol_offset
=
0
;
#ifdef DEBUG_PBCH
//printf("address dataf %p",nr_ue_common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].rxdataF);
write_output
(
"rxdataF0_pbch.m"
,
"rxF0pbch"
,
&
nr_ue_common_vars
->
common_vars_rx_data_per_thread
[
ue
->
current_thread_id
[
subframe_rx
]].
rxdataF
[
0
][
first_symbol
*
frame_parms
->
ofdm_symbol_size
],
frame_parms
->
ofdm_symbol_size
*
3
,
1
,
1
);
&
nr_ue_common_vars
->
common_vars_rx_data_per_thread
[
ue
->
current_thread_id
[
subframe_rx
]].
rxdataF
[
0
][
(
symbol_offset
+
1
)
*
frame_parms
->
ofdm_symbol_size
],
frame_parms
->
ofdm_symbol_size
*
3
,
1
,
1
);
#endif
for
(
symbol
=
first_symbol
;
symbol
<
(
first_symbol
+
3
);
symbol
++
)
{
// symbol refers to symbol within SSB. symbol_offset is the offset of the SSB wrt start of slot
for
(
symbol
=
1
;
symbol
<
4
;
symbol
++
)
{
nr_pbch_extract
(
nr_ue_common_vars
->
common_vars_rx_data_per_thread
[
ue
->
current_thread_id
[
subframe_rx
]].
rxdataF
,
nr_ue_common_vars
->
common_vars_rx_data_per_thread
[
ue
->
current_thread_id
[
subframe_rx
]].
dl_ch_estimates
[
eNB_id
],
nr_ue_pbch_vars
->
rxdataF_ext
,
nr_ue_pbch_vars
->
dl_ch_estimates_ext
,
symbol
-
first_symbol
+
1
,
symbol
,
symbol_offset
,
high_speed_flag
,
ue
->
is_synchronized
,
frame_parms
);
#ifdef DEBUG_PBCH
LOG_I
(
PHY
,
"[PHY] PBCH Symbol %d ofdm size %d
\n
"
,
symbol
,
frame_parms
->
ofdm_symbol_size
);
LOG_I
(
PHY
,
"[PHY] PBCH starting channel_level
\n
"
);
#endif
if
(
symbol
==
1
||
symbol
==
5
)
{
if
(
symbol
==
1
)
{
max_h
=
nr_pbch_channel_level
(
nr_ue_pbch_vars
->
dl_ch_estimates_ext
,
frame_parms
,
symbol
);
...
...
@@ -599,7 +596,6 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
nr_ue_pbch_vars
->
rxdataF_comp
,
frame_parms
,
symbol
,
ue
->
is_synchronized
,
nr_ue_pbch_vars
->
log2_maxh
);
// log2_maxh+I0_shift
/*if (frame_parms->nb_antennas_rx > 1)
...
...
@@ -615,7 +611,7 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
return(-1);
}
*/
if
(
symbol
==
(
first_symbol
+
1
)
)
{
if
(
symbol
==
1
)
{
nr_pbch_quantize
(
pbch_e_rx
,
(
short
*
)
&
(
nr_ue_pbch_vars
->
rxdataF_comp
[
0
][
symbol
*
240
]),
144
);
...
...
@@ -633,7 +629,7 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
}
#ifdef DEBUG_PBCH
write_output
(
"rxdataF_comp.m"
,
"rxFcomp"
,
&
nr_ue_pbch_vars
->
rxdataF_comp
[
0
][
240
*
first_symbol
],
240
*
3
,
1
,
1
);
write_output
(
"rxdataF_comp.m"
,
"rxFcomp"
,
&
nr_ue_pbch_vars
->
rxdataF_comp
[
0
][
240
],
240
*
3
,
1
,
1
);
#endif
...
...
@@ -644,7 +640,7 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
#ifdef DEBUG_PBCH
//pbch_e_rx = &nr_ue_pbch_vars->llr[0];
short
*
p
=
(
short
*
)
&
(
nr_ue_pbch_vars
->
rxdataF_comp
[
0
][
first_symbol
*
20
*
12
]);
short
*
p
=
(
short
*
)
&
(
nr_ue_pbch_vars
->
rxdataF_comp
[
0
][
20
*
12
]);
for
(
int
cnt
=
0
;
cnt
<
864
;
cnt
++
)
printf
(
"pbch rx llr %d
\n
"
,
*
(
pbch_e_rx
+
cnt
));
...
...
@@ -720,14 +716,13 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
ue
->
dl_indication
.
rx_ind
=
&
ue
->
rx_ind
;
// hang on rx_ind instance
//ue->rx_ind.sfn_slot = 0; //should be set by higher-1-layer, i.e. clean_and_set_if_instance()
ue
->
rx_ind
.
number_pdus
=
ue
->
rx_ind
.
number_pdus
+
1
;
ue
->
rx_ind
.
rx_indication_body
=
(
fapi_nr_rx_indication_body_t
*
)
malloc
(
sizeof
(
fapi_nr_rx_indication_body_t
));
ue
->
rx_ind
.
rx_indication_body
->
pdu_type
=
FAPI_NR_RX_PDU_TYPE_MIB
;
ue
->
rx_ind
.
rx_indication_body
->
mib_pdu
.
pdu
=
&
decoded_output
[
0
];
ue
->
rx_ind
.
rx_indication_body
->
mib_pdu
.
additional_bits
=
xtra_byte
;
ue
->
rx_ind
.
rx_indication_body
->
mib_pdu
.
ssb_index
=
ssb_index
;
// confirm with TCL
ue
->
rx_ind
.
rx_indication_body
->
mib_pdu
.
ssb_length
=
Lmax
;
// confirm with TCL
ue
->
rx_ind
.
rx_indication_body
->
mib_pdu
.
cell_id
=
frame_parms
->
Nid_cell
;
// confirm with TCL
ue
->
rx_ind
.
rx_indication_body
[
0
].
pdu_type
=
FAPI_NR_RX_PDU_TYPE_MIB
;
ue
->
rx_ind
.
rx_indication_body
[
0
].
mib_pdu
.
pdu
=
&
decoded_output
[
0
];
ue
->
rx_ind
.
rx_indication_body
[
0
].
mib_pdu
.
additional_bits
=
xtra_byte
;
ue
->
rx_ind
.
rx_indication_body
[
0
].
mib_pdu
.
ssb_index
=
ssb_index
;
// confirm with TCL
ue
->
rx_ind
.
rx_indication_body
[
0
].
mib_pdu
.
ssb_length
=
Lmax
;
// confirm with TCL
ue
->
rx_ind
.
rx_indication_body
[
0
].
mib_pdu
.
cell_id
=
frame_parms
->
Nid_cell
;
// confirm with TCL
ue
->
rx_ind
.
number_pdus
=
1
;
if
(
ue
->
if_inst
&&
ue
->
if_inst
->
dl_indication
)
ue
->
if_inst
->
dl_indication
(
&
ue
->
dl_indication
);
...
...
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
View file @
edce7881
...
...
@@ -254,3 +254,4 @@ int8_t nr_ue_phy_config_request(nr_phy_config_t *phy_config){
return
0
;
}
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
edce7881
...
...
@@ -56,7 +56,7 @@
//#define DEBUG_PHY_PROC
#define NR_PDCCH_SCHED
//
#define NR_PDCCH_SCHED_DEBUG
#define NR_PDCCH_SCHED_DEBUG
//#define NR_PUCCH_SCHED
//#define NR_PUCCH_SCHED_DEBUG
...
...
@@ -3350,14 +3350,14 @@ int nr_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *
ue
->
dci_ind
.
dci_list
[
i
].
dci_format
=
dci_alloc_rx
[
i
].
format
;
ue
->
dci_ind
.
dci_list
[
i
].
n_CCE
=
dci_alloc_rx
[
i
].
firstCCE
;
ue
->
dci_ind
.
dci_list
[
i
].
N_CCE
=
(
int
)
dci_alloc_rx
[
i
].
L
;
ue
->
dci_ind
.
number_of_dcis
=
ue
->
dci_ind
.
number_of_dcis
+
1
;
memcpy
(
&
ue
->
dci_ind
.
dci_list
[
i
].
dci
,
&
nr_dci_info_extracted
,
sizeof
(
fapi_nr_dci_pdu_rel15_t
)
);
memcpy
(
&
ue
->
dci_ind
.
dci_list
[
i
].
dci
,
&
nr_dci_info_extracted
,
sizeof
(
fapi_nr_dci_pdu_rel15_t
)
);
// TODO: check where should we send up this message.
// ue->if_inst->dl_indication(&ue->dl_indication);
}
// end for loop dci_cnt
// TODO: check where should we send up this message.
ue
->
if_inst
->
dl_indication
(
&
ue
->
dl_indication
);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
dlsch_rx_pdcch_stats
);
#endif
...
...
@@ -5106,7 +5106,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t eN
}
//set active for testing, to be removed
ue
->
dlsch
[
ue
->
current_thread_id
[
nr_tti_rx
]][
eNB_id
][
0
]
->
active
=
1
;
ue
->
dlsch
[
ue
->
current_thread_id
[
nr_tti_rx
]][
eNB_id
][
0
]
->
active
=
0
;
}
else
ue
->
dlsch
[
ue
->
current_thread_id
[
nr_tti_rx
]][
eNB_id
][
0
]
->
active
=
0
;
...
...
openair1/SIMULATION/NR_PHY/dlsim.c
View file @
edce7881
...
...
@@ -395,7 +395,7 @@ int main(int argc, char **argv)
frame_parms
->
N_RB_UL
=
N_RB_DL
;
// stub to configure frame_parms
nr_phy_config_request_sim
(
gNB
,
N_RB_DL
,
N_RB_DL
,
mu
);
nr_phy_config_request_sim
(
gNB
,
N_RB_DL
,
N_RB_DL
,
mu
,
Nid_cell
);
// call MAC to configure common parameters
phy_init_nr_gNB
(
gNB
,
0
,
0
);
...
...
@@ -622,7 +622,7 @@ int main(int argc, char **argv)
uint32_t
number_of_search_space_per_slot
=
1
;
uint32_t
first_symbol_index
=
0
;
uint32_t
search_space_duration
;
// element of search space
uint32_t
search_space_duration
=
0
;
// element of search space
uint32_t
coreset_duration
;
// element of coreset
coreset_duration
=
num_symbols
*
number_of_search_space_per_slot
;
...
...
openair1/SIMULATION/NR_PHY/pbchsim.c
View file @
edce7881
...
...
@@ -364,6 +364,7 @@ int main(int argc, char **argv)
frame_parms
->
nb_antennas_rx
=
n_rx
;
frame_parms
->
N_RB_DL
=
N_RB_DL
;
frame_parms
->
N_RB_UL
=
N_RB_DL
;
frame_parms
->
Nid_cell
=
Nid_cell
;
nr_phy_config_request_sim
(
gNB
,
N_RB_DL
,
N_RB_DL
,
mu
,
Nid_cell
);
phy_init_nr_gNB
(
gNB
,
0
,
0
);
...
...
@@ -537,9 +538,9 @@ int main(int argc, char **argv)
//multipath_channel(gNB2UE,s_re,s_im,r_re,r_im,frame_length_complex_samples,0);
//AWGN
sigma2_dB
=
10
*
log10
((
double
)
txlev
)
-
SNR
;
sigma2_dB
=
20
*
log10
((
double
)
AMP
/
4
)
-
SNR
;
sigma2
=
pow
(
10
,
sigma2_dB
/
10
);
//
printf("sigma2 %f (%f dB)\n",sigma2,sigma2_dB
);
//
printf("sigma2 %f (%f dB), tx_lev %f (%f dB)\n",sigma2,sigma2_dB,txlev,10*log10((double)txlev)
);
if
(
eps
!=
0
.
0
)
rf_rx
(
r_re
,
// real part of txdata
...
...
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
View file @
edce7881
...
...
@@ -33,6 +33,7 @@
#include "NR_IF_Module.h"
#include "mac_proto.h"
#include "assertions.h"
#include "LAYER2/NR_MAC_UE/mac_extern.h"
#include <stdio.h>
...
...
@@ -134,7 +135,7 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info){
for
(
i
=
0
;
i
<
dl_info
->
dci_ind
->
number_of_dcis
;
++
i
){
printf
(
">>>NR_IF_Module i=%d, dl_info->dci_ind->number_of_dcis=%d
\n
"
,
i
,
dl_info
->
dci_ind
->
number_of_dcis
);
fapi_nr_dci_pdu_rel15_t
*
dci
=
&
dl_info
->
dci_ind
->
dci_list
[
i
].
dci
;
/*
ret_mask |= (handle_dci(
dl_info->module_id,
dl_info->cc_id,
...
...
@@ -142,7 +143,7 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info){
dci,
(dl_info->dci_ind->dci_list+i)->rnti,
(dl_info->dci_ind->dci_list+i)->dci_format)) << FAPI_NR_DCI_IND;
*/
/*switch((dl_info->dci_ind->dci_list+i)->dci_type){
case FAPI_NR_DCI_TYPE_0_0:
...
...
@@ -224,6 +225,9 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info){
}
}
//clean up nr_downlink_indication_t *dl_info
dl_info
->
rx_ind
=
NULL
;
dl_info
->
dci_ind
=
NULL
;
AssertFatal
(
nr_ue_if_module_inst
[
module_id
]
!=
NULL
,
"IF module is void!
\n
"
);
nr_ue_if_module_inst
[
module_id
]
->
scheduled_response
(
&
mac
->
scheduled_response
);
...
...
@@ -256,3 +260,52 @@ int nr_ue_if_module_kill(uint32_t module_id) {
}
return
0
;
}
int
nr_ue_dcireq
(
nr_dcireq_t
*
dcireq
)
{
fapi_nr_dl_config_request_t
*
dl_config
=&
dcireq
->
dl_config_req
;
// Type0 PDCCH search space
dl_config
->
number_pdus
=
1
;
dl_config
->
dl_config_list
[
0
].
pdu_type
=
FAPI_NR_DL_CONFIG_TYPE_DCI
;
dl_config
->
dl_config_list
[
0
].
dci_config_pdu
.
dci_config_rel15
.
rnti
=
0xaaaa
;
// to be set
uint64_t
mask
=
0x0
;
uint16_t
num_rbs
=
48
;
uint16_t
rb_offset
=
47
;
uint16_t
cell_id
=
0
;
uint16_t
num_symbols
=
2
;
for
(
int
i
=
0
;
i
<
(
num_rbs
/
6
);
++
i
){
// 38.331 Each bit corresponds a group of 6 RBs
mask
=
mask
>>
1
;
mask
=
mask
|
0x100000000000
;
}
dl_config
->
dl_config_list
[
0
].
dci_config_pdu
.
dci_config_rel15
.
coreset
.
frequency_domain_resource
=
mask
;
dl_config
->
dl_config_list
[
0
].
dci_config_pdu
.
dci_config_rel15
.
coreset
.
rb_offset
=
rb_offset
;
// additional parameter other than coreset
dl_config
->
dl_config_list
[
0
].
dci_config_pdu
.
dci_config_rel15
.
coreset
.
duration
=
num_symbols
;
dl_config
->
dl_config_list
[
0
].
dci_config_pdu
.
dci_config_rel15
.
coreset
.
cce_reg_mapping_type
=
CCE_REG_MAPPING_TYPE_INTERLEAVED
;
dl_config
->
dl_config_list
[
0
].
dci_config_pdu
.
dci_config_rel15
.
coreset
.
cce_reg_interleaved_reg_bundle_size
=
6
;
// L 38.211 7.3.2.2
dl_config
->
dl_config_list
[
0
].
dci_config_pdu
.
dci_config_rel15
.
coreset
.
cce_reg_interleaved_interleaver_size
=
2
;
// R 38.211 7.3.2.2
dl_config
->
dl_config_list
[
0
].
dci_config_pdu
.
dci_config_rel15
.
coreset
.
cce_reg_interleaved_shift_index
=
cell_id
;
dl_config
->
dl_config_list
[
0
].
dci_config_pdu
.
dci_config_rel15
.
coreset
.
precoder_granularity
=
PRECODER_GRANULARITY_SAME_AS_REG_BUNDLE
;
dl_config
->
dl_config_list
[
0
].
dci_config_pdu
.
dci_config_rel15
.
coreset
.
pdcch_dmrs_scrambling_id
=
cell_id
;
uint32_t
number_of_search_space_per_slot
=
1
;
uint32_t
first_symbol_index
=
0
;
uint32_t
search_space_duration
=
1
;
// element of search space
uint32_t
coreset_duration
;
// element of coreset
coreset_duration
=
num_symbols
*
number_of_search_space_per_slot
;
dl_config
->
dl_config_list
[
0
].
dci_config_pdu
.
dci_config_rel15
.
number_of_candidates
[
0
]
=
table_38213_10_1_1_c2
[
0
];
dl_config
->
dl_config_list
[
0
].
dci_config_pdu
.
dci_config_rel15
.
number_of_candidates
[
1
]
=
table_38213_10_1_1_c2
[
1
];
dl_config
->
dl_config_list
[
0
].
dci_config_pdu
.
dci_config_rel15
.
number_of_candidates
[
2
]
=
table_38213_10_1_1_c2
[
2
];
// CCE aggregation level = 4
dl_config
->
dl_config_list
[
0
].
dci_config_pdu
.
dci_config_rel15
.
number_of_candidates
[
3
]
=
table_38213_10_1_1_c2
[
3
];
// CCE aggregation level = 8
dl_config
->
dl_config_list
[
0
].
dci_config_pdu
.
dci_config_rel15
.
number_of_candidates
[
4
]
=
table_38213_10_1_1_c2
[
4
];
// CCE aggregation level = 16
dl_config
->
dl_config_list
[
0
].
dci_config_pdu
.
dci_config_rel15
.
duration
=
search_space_duration
;
dl_config
->
dl_config_list
[
0
].
dci_config_pdu
.
dci_config_rel15
.
monitoring_symbols_within_slot
=
(
0x3fff
<<
first_symbol_index
)
&
(
0x3fff
>>
(
14
-
coreset_duration
-
first_symbol_index
))
&
0x3fff
;
dl_config
->
dl_config_list
[
0
].
dci_config_pdu
.
dci_config_rel15
.
N_RB_BWP
=
106
;
}
targets/RT/USER/nr-ru.c
View file @
edce7881
...
...
@@ -1286,7 +1286,7 @@ static void* ru_thread_tx( void* param ) {
gNB_L1_rxtx_proc_t
*
L1_proc
;
NR_DL_FRAME_PARMS
*
fp
=
ru
->
nr_frame_parms
;
char
filename
[
40
];
int
print_frame
=
2
;
int
print_frame
=
8
;
int
i
=
0
;
cpu_set_t
cpuset
;
...
...
@@ -1403,7 +1403,7 @@ static void* ru_thread( void* param ) {
int
slot
=
fp
->
slots_per_frame
-
1
;
int
frame
=
1023
;
char
filename
[
40
],
threadname
[
40
];
int
print_frame
=
2
;
int
print_frame
=
8
;
int
i
=
0
;
// set default return value
...
...
targets/RT/USER/nr-ue.c
View file @
edce7881
...
...
@@ -671,6 +671,8 @@ static void *UE_thread_rxn_txnp4(void *arg) {
// pickTime(current);
// updateTimes(proc->gotIQs, &t2, 10000, "Delay to wake up UE_Thread_Rx (case 2)");
// Process Rx data for one sub-frame
if
(
slot_select_nr
(
&
UE
->
frame_parms
,
proc
->
frame_tx
,
proc
->
nr_tti_tx
)
&
NR_DOWNLINK_SLOT
)
{
...
...
@@ -685,8 +687,12 @@ static void *UE_thread_rxn_txnp4(void *arg) {
UE
->
dcireq
.
cc_id
=
0
;
UE
->
dcireq
.
frame
=
proc
->
frame_rx
;
UE
->
dcireq
.
slot
=
proc
->
nr_tti_rx
;
//UE->if_inst->dcireq(&UE->dcireq);
nr_ue_dcireq
(
&
UE
->
dcireq
);
//to be replaced with function pointer later
NR_UE_MAC_INST_t
*
UE_mac
=
get_mac_inst
(
0
);
UE_mac
->
scheduled_response
.
dl_config
=
&
UE
->
dcireq
.
dl_config_req
;
nr_ue_scheduled_response
(
&
UE_mac
->
scheduled_response
);
#ifdef UE_SLOT_PARALLELISATION
phy_procedures_slot_parallelization_nrUE_RX
(
UE
,
proc
,
0
,
0
,
1
,
UE
->
mode
,
no_relay
,
NULL
);
#else
...
...
@@ -705,68 +711,17 @@ static void *UE_thread_rxn_txnp4(void *arg) {
// trigger L2 to run ue_scheduler thru IF module
// [TODO] mapping right after NR initial sync
if
(
1
)
if
(
UE
->
if_inst
!=
NULL
&&
UE
->
if_inst
->
ul_indication
!=
NULL
){
UE
->
ul_indication
.
module_id
=
0
;
UE
->
ul_indication
.
gNB_index
=
0
;
UE
->
ul_indication
.
cc_id
=
0
;
UE
->
ul_indication
.
slot
=
0
;
// to be fill
UE
->
ul_indication
.
frame
=
0
;
// to be fill
// [TODO] mapping right after NR initial sync
UE
->
ul_indication
.
frame
=
proc
->
frame_rx
;
UE
->
ul_indication
.
slot
=
proc
->
nr_tti_rx
;
UE
->
if_inst
->
ul_indication
(
&
UE
->
ul_indication
);
}
#ifdef NEW_MAC
ret
=
mac_xface
->
ue_scheduler
(
UE
->
Mod_id
,
proc
->
frame_rx
,
proc
->
subframe_rx
,
proc
->
nr_tti_rx
,
proc
->
frame_tx
,
proc
->
subframe_tx
,
proc
->
nr_tti_tx
%
(
UE
->
frame_parms
.
ttis_per_subframe
),
#ifndef NO_RAT_NR
slot_select_nr
(
&
UE
->
frame_parms
,
proc
->
frame_tx
,
proc
->
nr_tti_tx
),
#else
subframe_select
(
&
UE
->
frame_parms
,
proc
->
subframe_tx
),
#endif
0
,
0
/*FIXME CC_id*/
);
#endif
/*#else
ret = mac_xface->ue_scheduler(UE->Mod_id,
proc->frame_rx,
proc->subframe_rx,
proc->frame_tx,
proc->subframe_tx,
subframe_select(&UE->frame_parms,proc->subframe_tx),
0, */
// 0/*FIXME CC_id*/);
//#endif
if
(
ret
!=
CONNECTION_OK
)
{
char
*
txt
;
switch
(
ret
)
{
case
CONNECTION_LOST
:
txt
=
"RRC Connection lost, returning to PRACH"
;
break
;
case
PHY_RESYNCH
:
txt
=
"RRC Connection lost, trying to resynch"
;
break
;
case
RESYNCH
:
txt
=
"return to PRACH and perform a contention-free access"
;
break
;
default:
txt
=
"UNKNOWN RETURN CODE"
;
};
LOG_E
(
PHY
,
"[UE %"
PRIu8
"] Frame %"
PRIu32
", subframe %u %s
\n
"
,
UE
->
Mod_id
,
proc
->
frame_rx
,
proc
->
subframe_tx
,
txt
);
}
}
}
#if UE_TIMING_TRACE
stop_meas
(
&
UE
->
generic_stat
);
#endif
...
...
@@ -1130,23 +1085,41 @@ void *UE_thread(void *arg) {
proc
->
nr_tti_tx
%=
NR_NUMBER_OF_SUBFRAMES_PER_FRAME
;
}
proc
->
subframe_tx
=
proc
->
nr_tti_tx
;
printf
(
"Processing subframe %d
\n
"
,
proc
->
subframe_rx
);
if
(
slot_select_nr
(
&
UE
->
frame_parms
,
proc
->
frame_tx
,
proc
->
nr_tti_tx
)
&
NR_DOWNLINK_SLOT
)
{
//clean previous FAPI MESSAGE
UE
->
rx_ind
.
number_pdus
=
0
;
UE
->
dci_ind
.
number_of_dcis
=
0
;
//clean previous FAPI MESSAGE
// call L2 for DL_CONFIG (DCI)
UE
->
dcireq
.
module_id
=
UE
->
Mod_id
;
UE
->
dcireq
.
gNB_index
=
0
;
UE
->
dcireq
.
cc_id
=
0
;
UE
->
dcireq
.
frame
=
proc
->
frame_rx
;
UE
->
dcireq
.
slot
=
proc
->
nr_tti_rx
;
nr_ue_dcireq
(
&
UE
->
dcireq
);
//to be replaced with function pointer later
NR_UE_MAC_INST_t
*
UE_mac
=
get_mac_inst
(
0
);
UE_mac
->
scheduled_response
.
dl_config
=
&
UE
->
dcireq
.
dl_config_req
;
nr_ue_scheduled_response
(
&
UE_mac
->
scheduled_response
);
printf
(
"Processing subframe %d
\n
"
,
proc
->
subframe_rx
);
phy_procedures_nrUE_RX
(
UE
,
proc
,
0
,
1
,
UE
->
mode
);
}
if
(
UE
->
if_inst
!=
NULL
&&
UE
->
if_inst
->
ul_indication
!=
NULL
){
UE
->
ul_indication
.
module_id
=
0
;
UE
->
ul_indication
.
gNB_index
=
0
;
UE
->
ul_indication
.
cc_id
=
0
;
UE
->
ul_indication
.
slot
=
0
;
// to be fill
UE
->
ul_indication
.
frame
=
0
;
// to be fill
// [TODO] mapping right after NR initial sync
UE
->
ul_indication
.
frame
=
proc
->
frame_rx
;
UE
->
ul_indication
.
slot
=
proc
->
nr_tti_rx
;
UE
->
if_inst
->
ul_indication
(
&
UE
->
ul_indication
);
}
phy_procedures_nrUE_RX
(
UE
,
proc
,
0
,
1
,
UE
->
mode
);
getchar
();
}
// else loop_through_memory
}
// start_rx_stream==1
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment