Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
OpenXG UE
Commits
1592738a
Commit
1592738a
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
c75a0469
a622f432
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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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 @
1592738a
...
...
@@ -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