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
wangjie
OpenXG-RAN
Commits
a006b395
Commit
a006b395
authored
Dec 10, 2019
by
Sakthivel Velumani
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'bug-fix-channel-est' into runel
parents
b313006f
19289368
Changes
19
Show whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
773 additions
and
426 deletions
+773
-426
ci-scripts/Jenkinsfile-gitlab
ci-scripts/Jenkinsfile-gitlab
+20
-1
cmake_targets/autotests/test_case_list.xml
cmake_targets/autotests/test_case_list.xml
+2
-2
executables/nr-ru.c
executables/nr-ru.c
+6
-6
executables/nr-uesoftmodem.c
executables/nr-uesoftmodem.c
+13
-20
openair1/PHY/INIT/nr_parms.c
openair1/PHY/INIT/nr_parms.c
+25
-16
openair1/PHY/INIT/phy_init.h
openair1/PHY/INIT/phy_init.h
+1
-1
openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
+2
-2
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
+1
-1
openair1/SCHED_NR/nr_ru_procedures.c
openair1/SCHED_NR/nr_ru_procedures.c
+4
-4
openair1/SCHED_NR/phy_procedures_nr_common.c
openair1/SCHED_NR/phy_procedures_nr_common.c
+2
-3
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+5
-4
openair1/SCHED_NR/sched_nr.h
openair1/SCHED_NR/sched_nr.h
+1
-1
openair2/GNB_APP/gnb_config.c
openair2/GNB_APP/gnb_config.c
+1
-1
openair2/RRC/NR/MESSAGES/asn1_msg.c
openair2/RRC/NR/MESSAGES/asn1_msg.c
+380
-340
openair2/RRC/NR/MESSAGES/asn1_msg.h
openair2/RRC/NR/MESSAGES/asn1_msg.h
+15
-17
openair2/RRC/NR/nr_rrc_defs.h
openair2/RRC/NR/nr_rrc_defs.h
+7
-1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf
.../GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf
+1
-1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.273PRB.usrpn300.conf
.../GENERIC-LTE-EPC/CONF/gnb.band78.tm1.273PRB.usrpn300.conf
+287
-0
targets/RT/USER/lte-ru.c
targets/RT/USER/lte-ru.c
+0
-5
No files found.
ci-scripts/Jenkinsfile-gitlab
View file @
a006b395
...
...
@@ -44,7 +44,7 @@ pipeline {
disableConcurrentBuilds
()
timestamps
()
gitLabConnection
(
'OAI GitLab'
)
gitlabBuilds
(
builds:
[
"Build gNB-USRP"
,
"Build nr-UE-USRP"
,
"Build eNB-USRP"
,
"Build basic-sim"
,
"Build phy-sim"
,
"Build eNB-ethernet"
,
"Build UE-ethernet"
,
"Analysis with cppcheck"
,
"Test phy-sim"
,
"Test basic-sim"
,
"Test L2-sim"
,
"Test-Mono-FDD-Band7"
,
"Test-Mono-TDD-Band40"
,
"Test-IF4p5-FDD-Band7"
,
"Test-IF4p5-TDD-Band40"
,
"Test-Mono-FDD-Band13"
,
"Test-Mono-FDD-Band13-X2-HO"
,
"Test-TDD-Band78-gNB-NR-UE"
])
gitlabBuilds
(
builds:
[
"Build gNB-USRP"
,
"Build nr-UE-USRP"
,
"Build eNB-USRP"
,
"Build basic-sim"
,
"Build phy-sim"
,
"Build eNB-ethernet"
,
"Build UE-ethernet"
,
"Analysis with cppcheck"
,
"Test phy-sim"
,
"Test basic-sim"
,
"Test L2-sim"
,
"Test-Mono-FDD-Band7"
,
"Test-Mono-TDD-Band40"
,
"Test-IF4p5-FDD-Band7"
,
"Test-IF4p5-TDD-Band40"
,
"Test-Mono-FDD-Band13"
,
"Test-
IF4p5-TDD-Band38-Multi-RRU"
,
"Test-
Mono-FDD-Band13-X2-HO"
,
"Test-TDD-Band78-gNB-NR-UE"
])
ansiColor
(
'xterm'
)
}
...
...
@@ -578,6 +578,25 @@ pipeline {
}
}
}
stage
(
"Test IF4p5 - TDD - Band 38 - B210 - MultiRRU"
)
{
steps
{
script
{
triggerSlaveJob
(
'eNB-CI-IF4p5-TDD-Band38-MultiRRU-B210'
,
'Test-IF4p5-TDD-Band38-Multi-RRU'
)
}
}
post
{
always
{
script
{
finalizeSlaveJob
(
'eNB-CI-IF4p5-TDD-Band38-MultiRRU-B210'
)
}
}
failure
{
script
{
currentBuild
.
result
=
'FAILURE'
}
}
}
}
stage
(
"Test OAI UE - FDD - Band 20 - B200"
)
{
steps
{
script
{
...
...
cmake_targets/autotests/test_case_list.xml
View file @
a006b395
...
...
@@ -1088,7 +1088,7 @@
(Test7: 106 PRB 51 PDSCH-Offset),
(Test8: 217 PRB 100 PDSCH-PRBs),
(Test9: 217 PRB 80 PDSCH-Offset),
(Test10: 217 PRB 100 PDSCH-PRBs
8
0 PDSCH-Offset),
(Test10: 217 PRB 100 PDSCH-PRBs
11
0 PDSCH-Offset),
(Test11: 106 PRBs 50 PDSCH-PRBs MCS Index 28
</desc>
<pre_compile_prog></pre_compile_prog>
<compile_prog>
$OPENAIR_DIR/cmake_targets/build_oai
</compile_prog>
...
...
@@ -1105,7 +1105,7 @@
-n100 -R106 -a51
-n100 -R217 -b100
-n100 -R217 -a80
-n100 -R217 -a
8
0 -b100
-n100 -R217 -a
11
0 -b100
-n100 -e28
</main_exec_args>
<tags>
nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test6 nr_dlsim.test7
nr_dlsim.test8 nr_dlsim.test9 nr_dlsim.test10 nr_dlsim.test11
</tags>
...
...
executables/nr-ru.c
View file @
a006b395
...
...
@@ -321,7 +321,7 @@ static inline void fh_if4p5_south_out(RU_t *ru, int frame, int slot, uint64_t ti
LOG_D
(
PHY
,
"Sending IF4p5 for frame %d subframe %d
\n
"
,
ru
->
proc
.
frame_tx
,
ru
->
proc
.
tti_tx
);
if
(
nr_slot_select
(
&
ru
->
gNB_list
[
0
]
->
gNB_config
,
ru
->
proc
.
tti_tx
)
!=
SF_UL
)
send_IF4p5
(
ru
,
frame
,
slot
,
IF4p5_PDLFFT
);
if
(
nr_slot_select
(
&
ru
->
gNB_list
[
0
]
->
gNB_config
,
ru
->
proc
.
tti_tx
,
frame
)
!=
SF_UL
)
send_IF4p5
(
ru
,
frame
,
slot
,
IF4p5_PDLFFT
);
}
/*************************************************************/
...
...
@@ -536,10 +536,10 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *slot) {
do
{
recv_IF4p5
(
ru
,
&
frame_tx
,
&
slot_tx
,
&
packet_type
,
&
symbol_number
);
if
((
nr_slot_select
(
cfg
,
slot_tx
)
==
SF_DL
)
&&
(
symbol_number
==
0
))
start_meas
(
&
ru
->
rx_fhaul
);
if
((
nr_slot_select
(
cfg
,
slot_tx
,
frame_tx
)
==
SF_DL
)
&&
(
symbol_number
==
0
))
start_meas
(
&
ru
->
rx_fhaul
);
LOG_D
(
PHY
,
"subframe %d (%d): frame %d, subframe %d, symbol %d
\n
"
,
*
slot
,
nr_slot_select
(
cfg
,
*
slot
),
frame_tx
,
slot_tx
,
symbol_number
);
*
slot
,
nr_slot_select
(
cfg
,
*
slot
,
*
frame
),
frame_tx
,
slot_tx
,
symbol_number
);
if
(
proc
->
first_tx
!=
0
)
{
*
frame
=
frame_tx
;
...
...
@@ -558,7 +558,7 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *slot) {
}
else
AssertFatal
(
1
==
0
,
"Illegal IF4p5 packet type (should only be IF4p5_PDLFFT%d
\n
"
,
packet_type
);
}
while
(
symbol_mask
!=
symbol_mask_full
);
if
(
nr_slot_select
(
cfg
,
slot_tx
)
==
SF_DL
)
stop_meas
(
&
ru
->
rx_fhaul
);
if
(
nr_slot_select
(
cfg
,
slot_tx
,
frame_tx
)
==
SF_DL
)
stop_meas
(
&
ru
->
rx_fhaul
);
proc
->
tti_tx
=
slot_tx
;
proc
->
frame_tx
=
frame_tx
;
...
...
@@ -728,7 +728,7 @@ void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) {
T
(
T_ENB_PHY_OUTPUT_SIGNAL
,
T_INT
(
0
),
T_INT
(
0
),
T_INT
(
frame
),
T_INT
(
slot
),
T_INT
(
0
),
T_BUFFER
(
&
ru
->
common
.
txdata
[
0
][
slot
*
fp
->
samples_per_slot
],
fp
->
samples_per_slot
*
4
));
int
sf_extension
=
0
;
//nr_subframe_t SF_type = nr_slot_select(cfg,slot%fp->slots_per_frame);
//nr_subframe_t SF_type = nr_slot_select(cfg,slot%fp->slots_per_frame
,frame
);
if
((
slot
==
0
)
||
(
slot
==
1
)
||
IS_SOFTMODEM_RFSIM
)
{
...
...
@@ -819,7 +819,7 @@ static void *ru_thread_asynch_rxtx( void *param ) {
if
(
ru
->
fh_south_asynch_in
)
ru
->
fh_south_asynch_in
(
ru
,
&
frame
,
&
subframe
);
// asynchronous receive from north (RRU IF4/IF5)
else
if
(
ru
->
fh_north_asynch_in
)
{
if
(
nr_slot_select
(
&
ru
->
gNB_list
[
0
]
->
gNB_config
,
subframe
)
!=
SF_UL
)
if
(
nr_slot_select
(
&
ru
->
gNB_list
[
0
]
->
gNB_config
,
subframe
,
frame
)
!=
SF_UL
)
ru
->
fh_north_asynch_in
(
ru
,
&
frame
,
&
subframe
);
}
else
AssertFatal
(
1
==
0
,
"Unknown function in ru_thread_asynch_rxtx
\n
"
);
}
...
...
executables/nr-uesoftmodem.c
View file @
a006b395
...
...
@@ -539,14 +539,23 @@ void init_openair0(void) {
if
(
frame_parms
[
0
]
->
threequarter_fs
)
{
openair0_cfg
[
card
].
sample_rate
=
92.16e6
;
openair0_cfg
[
card
].
samples_per_frame
=
921600
;
openair0_cfg
[
card
].
tx_bw
=
40e6
;
openair0_cfg
[
card
].
rx_bw
=
40e6
;
}
else
{
openair0_cfg
[
card
].
sample_rate
=
122.88e6
;
openair0_cfg
[
card
].
samples_per_frame
=
1228800
;
openair0_cfg
[
card
].
tx_bw
=
40e6
;
openair0_cfg
[
card
].
rx_bw
=
40e6
;
}
}
else
{
LOG_E
(
PHY
,
"Unsupported numerology!
\n
"
);
exit
(
-
1
);
}
}
else
if
(
frame_parms
[
0
]
->
N_RB_DL
==
273
)
{
if
(
numerology
==
1
)
{
if
(
frame_parms
[
0
]
->
threequarter_fs
)
{
AssertFatal
(
0
==
1
,
"three quarter sampling not supported for N_RB 273
\n
"
);
}
else
{
openair0_cfg
[
card
].
sample_rate
=
122.88e6
;
openair0_cfg
[
card
].
samples_per_frame
=
1228800
;
}
}
else
{
LOG_E
(
PHY
,
"Unsupported numerology!
\n
"
);
...
...
@@ -557,32 +566,22 @@ void init_openair0(void) {
if
(
frame_parms
[
0
]
->
threequarter_fs
)
{
openair0_cfg
[
card
].
sample_rate
=
23.04e6
;
openair0_cfg
[
card
].
samples_per_frame
=
230400
;
openair0_cfg
[
card
].
tx_bw
=
10e6
;
openair0_cfg
[
card
].
rx_bw
=
10e6
;
}
else
{
openair0_cfg
[
card
].
sample_rate
=
30.72e6
;
openair0_cfg
[
card
].
samples_per_frame
=
307200
;
openair0_cfg
[
card
].
tx_bw
=
10e6
;
openair0_cfg
[
card
].
rx_bw
=
10e6
;
}
}
else
if
(
numerology
==
1
)
{
if
(
frame_parms
[
0
]
->
threequarter_fs
)
{
openair0_cfg
[
card
].
sample_rate
=
46.08e6
;
openair0_cfg
[
card
].
samples_per_frame
=
480800
;
openair0_cfg
[
card
].
tx_bw
=
20e6
;
openair0_cfg
[
card
].
rx_bw
=
20e6
;
}
else
{
openair0_cfg
[
card
].
sample_rate
=
61.44e6
;
openair0_cfg
[
card
].
samples_per_frame
=
614400
;
openair0_cfg
[
card
].
tx_bw
=
20e6
;
openair0_cfg
[
card
].
rx_bw
=
20e6
;
}
}
else
if
(
numerology
==
2
)
{
openair0_cfg
[
card
].
sample_rate
=
122.88e6
;
openair0_cfg
[
card
].
samples_per_frame
=
1228800
;
openair0_cfg
[
card
].
tx_bw
=
40e6
;
openair0_cfg
[
card
].
rx_bw
=
40e6
;
}
else
{
LOG_E
(
PHY
,
"Unsupported numerology!
\n
"
);
exit
(
-
1
);
...
...
@@ -590,18 +589,12 @@ void init_openair0(void) {
}
else
if
(
frame_parms
[
0
]
->
N_RB_DL
==
50
)
{
openair0_cfg
[
card
].
sample_rate
=
15.36e6
;
openair0_cfg
[
card
].
samples_per_frame
=
153600
;
openair0_cfg
[
card
].
tx_bw
=
5e6
;
openair0_cfg
[
card
].
rx_bw
=
5e6
;
}
else
if
(
frame_parms
[
0
]
->
N_RB_DL
==
25
)
{
openair0_cfg
[
card
].
sample_rate
=
7.68e6
;
openair0_cfg
[
card
].
samples_per_frame
=
76800
;
openair0_cfg
[
card
].
tx_bw
=
2.5e6
;
openair0_cfg
[
card
].
rx_bw
=
2.5e6
;
}
else
if
(
frame_parms
[
0
]
->
N_RB_DL
==
6
)
{
openair0_cfg
[
card
].
sample_rate
=
1.92e6
;
openair0_cfg
[
card
].
samples_per_frame
=
19200
;
openair0_cfg
[
card
].
tx_bw
=
1.5e6
;
openair0_cfg
[
card
].
rx_bw
=
1.5e6
;
}
else
{
LOG_E
(
PHY
,
"Unknown NB_RB %d!
\n
"
,
frame_parms
[
0
]
->
N_RB_DL
);
...
...
openair1/PHY/INIT/nr_parms.c
View file @
a006b395
...
...
@@ -79,30 +79,39 @@ int nr_get_ssb_start_symbol(NR_DL_FRAME_PARMS *fp, uint8_t i_ssb, uint8_t half_f
return
symbol
;
}
int
nr_is_ssb_slot
(
nfapi_nr_config_request_t
*
cfg
,
int
slot
)
int
nr_is_ssb_slot
(
nfapi_nr_config_request_t
*
cfg
,
int
slot
,
int
frame
)
{
uint8_t
n_hf
;
uint16_t
p
,
mu
,
hf_slots
;
uint64_t
ssb_map
;
int
rel_slot
;
mu
=
cfg
->
subframe_config
.
numerology_index_mu
.
value
;
ssb_map
=
cfg
->
sch_config
.
ssb_scg_position_in_burst
.
value
;
p
=
cfg
->
sch_config
.
ssb_periodicity
.
value
;
n_hf
=
cfg
->
sch_config
.
half_frame_index
.
value
;
// checking if the ssb is transmitted in given frame according to periodicity
if
(
(
p
>
10
)
&&
(
frame
%
(
p
/
10
))
)
return
0
;
else
{
hf_slots
=
(
10
<<
mu
)
>>
1
;
// number of slots per half frame
// if SSB periodicity is 5ms, they are transmitted in both half frames
if
(
cfg
->
sch_config
.
ssb_periodicity
.
value
==
5
)
{
if
(
slot
<
10
)
if
(
p
==
5
)
{
if
(
slot
<
hf_slots
)
n_hf
=
0
;
else
n_hf
=
1
;
}
// to set a effective slot number between 0 to 9 in the half frame where the SSB is supposed to be
rel_slot
=
(
n_hf
)
?
(
slot
-
10
)
:
slot
;
if
(
rel_slot
<
10
&&
rel_slot
>=
0
)
return
1
;
else
return
0
;
// to set a effective slot number between 0 to hf_slots-1 in the half frame where the SSB is supposed to be
rel_slot
=
(
n_hf
)
?
(
slot
-
hf_slots
)
:
slot
;
// there are two potential SSB per slot
return
(
((
ssb_map
>>
rel_slot
*
2
)
&
0x01
)
||
((
ssb_map
>>
(
1
+
rel_slot
*
2
))
&
0x01
)
);
}
}
...
...
openair1/PHY/INIT/phy_init.h
View file @
a006b395
...
...
@@ -378,7 +378,7 @@ void phy_config_request(PHY_Config_t *phy_config);
int
init_frame_parms
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint8_t
osf
);
void
dump_frame_parms
(
LTE_DL_FRAME_PARMS
*
frame_parms
);
int
nr_get_ssb_start_symbol
(
NR_DL_FRAME_PARMS
*
fp
,
uint8_t
i_ssb
,
uint8_t
half_frame_index
);
int
nr_is_ssb_slot
(
nfapi_nr_config_request_t
*
cfg
,
int
slot
);
int
nr_is_ssb_slot
(
nfapi_nr_config_request_t
*
cfg
,
int
slot
,
int
frame
);
int
nr_init_frame_parms
(
nfapi_nr_config_request_t
*
config
,
NR_DL_FRAME_PARMS
*
frame_parms
);
int
nr_init_frame_parms_ue
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int
mu
,
int
Ncp
,
int
N_RB_DL
,
int
n_ssb_crb
,
int
ssb_subcarrier_offset
);
int
init_nr_ue_signal
(
PHY_VARS_NR_UE
*
ue
,
int
nb_connected_eNB
,
uint8_t
abstraction_flag
);
...
...
openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
View file @
a006b395
...
...
@@ -45,7 +45,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
int16_t
*
fl
,
*
fm
,
*
fr
,
*
fml
,
*
fmr
,
*
fmm
,
*
fdcl
,
*
fdcr
,
*
fdclh
,
*
fdcrh
;
int
ch_offset
,
symbol_offset
,
length_dmrs
,
UE_id
=
0
;
unsigned
short
n_idDMRS
[
2
]
=
{
0
,
1
};
//to update from pusch config
int32_t
temp_in_ifft_0
[
8192
*
2
]
__attribute__
((
aligned
(
16
)));
int32_t
temp_in_ifft_0
[
8192
*
2
]
__attribute__
((
aligned
(
32
)));
int32_t
**
ul_ch_estimates_time
=
gNB
->
pusch_vars
[
UE_id
]
->
ul_ch_estimates_time
;
#ifdef DEBUG_CH
...
...
@@ -267,7 +267,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
// check if PRB crosses DC and improve estimates around DC
if
((
bwp_start_subcarrier
>=
gNB
->
frame_parms
.
ofdm_symbol_size
/
2
)
&&
(
bwp_start_subcarrier
+
nb_rb_pusch
*
12
>=
gNB
->
frame_parms
.
ofdm_symbol_size
))
{
if
((
bwp_start_subcarrier
<
gNB
->
frame_parms
.
ofdm_symbol_size
)
&&
(
bwp_start_subcarrier
+
nb_rb_pusch
*
12
>=
gNB
->
frame_parms
.
ofdm_symbol_size
))
{
ul_ch
=
(
int16_t
*
)
&
ul_ch_estimates
[
aarx
][
ch_offset
];
uint16_t
idxDC
=
2
*
(
gNB
->
frame_parms
.
ofdm_symbol_size
-
bwp_start_subcarrier
);
uint16_t
idxPil
=
idxDC
/
2
;
...
...
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
View file @
a006b395
...
...
@@ -874,7 +874,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
//}
// check if PRB crosses DC and improve estimates around DC
if
((
bwp_start_subcarrier
>=
ue
->
frame_parms
.
ofdm_symbol_size
/
2
)
&&
(
bwp_start_subcarrier
+
nb_rb_pdsch
*
12
>=
ue
->
frame_parms
.
ofdm_symbol_size
))
{
if
((
bwp_start_subcarrier
<
ue
->
frame_parms
.
ofdm_symbol_size
)
&&
(
bwp_start_subcarrier
+
nb_rb_pdsch
*
12
>=
ue
->
frame_parms
.
ofdm_symbol_size
))
{
dl_ch
=
(
int16_t
*
)
&
dl_ch_estimates
[
aarx
][
ch_offset
];
uint16_t
idxDC
=
2
*
(
ue
->
frame_parms
.
ofdm_symbol_size
-
bwp_start_subcarrier
);
uint16_t
idxPil
=
idxDC
/
2
;
...
...
openair1/SCHED_NR/nr_ru_procedures.c
View file @
a006b395
...
...
@@ -123,7 +123,7 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) {
start_meas
(
&
ru
->
ofdm_mod_stats
);
if
(
nr_slot_select
(
cfg
,
slot
)
==
SF_UL
)
return
;
if
(
nr_slot_select
(
cfg
,
slot
,
frame_tx
)
==
SF_UL
)
return
;
// this copy should be done in the precoding thread (currently inactive)
for
(
int
aa
=
0
;
aa
<
ru
->
nb_tx
;
aa
++
)
...
...
@@ -133,7 +133,7 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM
,
1
);
if
(
nr_slot_select
(
cfg
,
slot
)
==
SF_DL
)
{
if
(
nr_slot_select
(
cfg
,
slot
,
frame_tx
)
==
SF_DL
)
{
// If this is not an S-tti
if
(
pthread_mutex_timedlock
(
&
proc
->
mutex_feptx
,
&
wait
)
!=
0
)
{
printf
(
"[RU] ERROR pthread_mutex_lock for feptx thread (IC %d)
\n
"
,
proc
->
instance_cnt_feptx
);
...
...
@@ -232,8 +232,8 @@ void nr_feptx_ofdm(RU_t *ru,int frame_tx,int tti_tx) {
memcpy
((
void
*
)
ru
->
common
.
txdataF_BF
[
aa
],
(
void
*
)
ru
->
gNB_list
[
0
]
->
common_vars
.
txdataF
[
aa
],
fp
->
samples_per_slot_wCP
*
sizeof
(
int32_t
));
if
((
nr_slot_select
(
cfg
,
slot
)
==
SF_DL
)
||
((
nr_slot_select
(
cfg
,
slot
)
==
SF_S
)))
{
if
((
nr_slot_select
(
cfg
,
slot
,
frame_tx
)
==
SF_DL
)
||
((
nr_slot_select
(
cfg
,
slot
,
frame_tx
)
==
SF_S
)))
{
// LOG_D(HW,"Frame %d: Generating slot %d\n",frame,next_slot);
nr_feptx0
(
ru
,
slot
,
0
,
fp
->
symbols_per_slot
);
...
...
openair1/SCHED_NR/phy_procedures_nr_common.c
View file @
a006b395
...
...
@@ -33,10 +33,9 @@
#include "sched_nr.h"
#include "PHY/INIT/phy_init.h"
nr_subframe_t
nr_slot_select
(
nfapi_nr_config_request_t
*
cfg
,
unsigned
char
slot
)
nr_subframe_t
nr_slot_select
(
nfapi_nr_config_request_t
*
cfg
,
unsigned
char
slot
,
int
frame
)
{
if
(
cfg
->
subframe_config
.
duplex_mode
.
value
==
FDD
||
slot
==
NR_DOWNLINK_SLOT
)
if
(
cfg
->
subframe_config
.
duplex_mode
.
value
==
FDD
||
slot
==
NR_DOWNLINK_SLOT
||
nr_is_ssb_slot
(
cfg
,
slot
,
frame
)
==
1
)
return
(
SF_DL
);
else
if
(
slot
==
NR_UPLINK_SLOT
)
return
(
SF_UL
);
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
a006b395
...
...
@@ -96,23 +96,24 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame, int slot) {
uint8_t
*
pbch_pdu
=&
gNB
->
pbch_pdu
[
0
];
uint8_t
ssb_index
,
n_hf
;
int
ssb_start_symbol
,
rel_slot
;
uint16_t
slots_per_hf
=
fp
->
slots_per_frame
/
2
;
n_hf
=
cfg
->
sch_config
.
half_frame_index
.
value
;
// if SSB periodicity is 5ms, they are transmitted in both half frames
if
(
cfg
->
sch_config
.
ssb_periodicity
.
value
==
5
)
{
if
(
slot
<
10
)
if
(
slot
<
slots_per_hf
)
n_hf
=
0
;
else
n_hf
=
1
;
}
// to set a effective slot number between 0 to 9 in the half frame where the SSB is supposed to be
rel_slot
=
(
n_hf
)
?
(
slot
-
10
)
:
slot
;
rel_slot
=
(
n_hf
)
?
(
slot
-
slots_per_hf
)
:
slot
;
LOG_D
(
PHY
,
"common_signal_procedures: frame %d, slot %d
\n
"
,
frame
,
slot
);
if
(
rel_slot
<
10
&&
rel_slot
>=
0
)
{
if
(
rel_slot
<
slots_per_hf
&&
rel_slot
>=
0
)
{
for
(
int
i
=
0
;
i
<
2
;
i
++
)
{
// max two SSB per frame
ssb_index
=
i
+
2
*
rel_slot
;
// computing the ssb_index
...
...
@@ -160,7 +161,7 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
else
ssb_frame_periodicity
=
(
cfg
->
sch_config
.
ssb_periodicity
.
value
)
/
10
;
// 10ms is the frame length
if
((
cfg
->
subframe_config
.
duplex_mode
.
value
==
TDD
)
&&
(
nr_slot_select
(
cfg
,
slot
)
==
SF_UL
))
return
;
if
((
cfg
->
subframe_config
.
duplex_mode
.
value
==
TDD
)
&&
(
nr_slot_select
(
cfg
,
slot
,
frame
)
==
SF_UL
))
return
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_TX
+
offset
,
1
);
...
...
openair1/SCHED_NR/sched_nr.h
View file @
a006b395
...
...
@@ -34,7 +34,7 @@
#include "PHY/NR_TRANSPORT/nr_dci.h"
nr_slot_t
nr_slot_select
(
nfapi_nr_config_request_t
*
cfg
,
unsigned
char
slot
);
nr_slot_t
nr_slot_select
(
nfapi_nr_config_request_t
*
cfg
,
unsigned
char
slot
,
int
frame
);
void
nr_set_ssb_first_subcarrier
(
nfapi_nr_config_request_t
*
cfg
,
NR_DL_FRAME_PARMS
*
fp
);
void
phy_procedures_gNB_TX
(
PHY_VARS_gNB
*
gNB
,
int
frame_tx
,
int
slot_tx
,
int
do_meas
);
void
phy_procedures_gNB_common_RX
(
PHY_VARS_gNB
*
gNB
,
int
frame_rx
,
int
slot_rx
);
...
...
openair2/GNB_APP/gnb_config.c
View file @
a006b395
...
...
@@ -807,7 +807,7 @@ void RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
NRRRC_CONFIGURATION_REQ
(
msg_p
).
N_RB_DL
[
j
]
=
N_RB_DL
;
//if(N_RB_DL == 217) sf_ahead = 2;
//else if(N_RB_DL == 106) sf_ahead = 4;
if
((
N_RB_DL
!=
217
)
&&
(
N_RB_DL
!=
106
))
if
((
N_RB_DL
!=
2
73
)
&&
(
N_RB_DL
!=
2
17
)
&&
(
N_RB_DL
!=
106
))
AssertFatal
(
0
,
"Failed to parse gNB configuration file %s, gnb %d unknown value
\"
%d
\"
for N_RB_DL choice: 106, 217 !
\n
"
,
RC
.
config_file_name
,
i
,
N_RB_DL
);
/*
...
...
openair2/RRC/NR/MESSAGES/asn1_msg.c
View file @
a006b395
...
...
@@ -43,64 +43,64 @@
#include "asn1_msg.h"
#include "RRC/NR/nr_rrc_extern.h"
#if defined(NR_Rel15)
#include "NR_SCS-SpecificCarrier.h"
#include "NR_TDD-UL-DL-ConfigCommon.h"
#include "NR_FrequencyInfoUL.h"
#include "NR_FrequencyInfoDL.h"
#include "NR_RACH-ConfigGeneric.h"
#include "NR_RACH-ConfigCommon.h"
#include "NR_PUSCH-TimeDomainResourceAllocation.h"
#include "NR_PUSCH-ConfigCommon.h"
#include "NR_PUCCH-ConfigCommon.h"
#include "NR_PDSCH-TimeDomainResourceAllocation.h"
#include "NR_PDSCH-ConfigCommon.h"
#include "NR_RateMatchPattern.h"
#include "NR_RateMatchPatternLTE-CRS.h"
#include "NR_SearchSpace.h"
#include "NR_ControlResourceSet.h"
#include "NR_EUTRA-MBSFN-SubframeConfig.h"
#include "NR_BWP-DownlinkCommon.h"
#include "NR_BWP-DownlinkDedicated.h"
#include "NR_UplinkConfigCommon.h"
#include "NR_SetupRelease.h"
#include "NR_PDCCH-ConfigCommon.h"
#include "NR_BWP-UplinkCommon.h"
#include "assertions.h"
//#include "RRCConnectionRequest.h"
//#include "UL-CCCH-Message.h"
#include "NR_UL-DCCH-Message.h"
//#include "DL-CCCH-Message.h"
#include "NR_DL-DCCH-Message.h"
//#include "EstablishmentCause.h"
//#include "RRCConnectionSetup.h"
#include "NR_SRB-ToAddModList.h"
#include "NR_DRB-ToAddModList.h"
//#include "MCCH-Message.h"
//#define MRB1 1
//#include "RRCConnectionSetupComplete.h"
//#include "RRCConnectionReconfigurationComplete.h"
//#include "RRCConnectionReconfiguration.h"
#include "NR_MIB.h"
//#include "SystemInformation.h"
#include "NR_SIB1.h"
#include "NR_ServingCellConfigCommon.h"
//#include "SIB-Type.h"
//#include "BCCH-DL-SCH-Message.h"
//#include "PHY/defs.h"
#include "NR_MeasObjectToAddModList.h"
#include "NR_ReportConfigToAddModList.h"
#include "NR_MeasIdToAddModList.h"
#include "gnb_config.h"
#include "NR_SCS-SpecificCarrier.h"
#include "NR_TDD-UL-DL-ConfigCommon.h"
#include "NR_FrequencyInfoUL.h"
#include "NR_FrequencyInfoDL.h"
#include "NR_RACH-ConfigGeneric.h"
#include "NR_RACH-ConfigCommon.h"
#include "NR_PUSCH-TimeDomainResourceAllocation.h"
#include "NR_PUSCH-ConfigCommon.h"
#include "NR_PUCCH-ConfigCommon.h"
#include "NR_PDSCH-TimeDomainResourceAllocation.h"
#include "NR_PDSCH-ConfigCommon.h"
#include "NR_RateMatchPattern.h"
#include "NR_RateMatchPatternLTE-CRS.h"
#include "NR_SearchSpace.h"
#include "NR_ControlResourceSet.h"
#include "NR_EUTRA-MBSFN-SubframeConfig.h"
#include "NR_BWP-DownlinkCommon.h"
#include "NR_BWP-DownlinkDedicated.h"
#include "NR_UplinkConfigCommon.h"
#include "NR_SetupRelease.h"
#include "NR_PDCCH-ConfigCommon.h"
#include "NR_BWP-UplinkCommon.h"
#include "assertions.h"
//#include "RRCConnectionRequest.h"
//#include "UL-CCCH-Message.h"
#include "NR_UL-DCCH-Message.h"
//#include "DL-CCCH-Message.h"
#include "NR_DL-DCCH-Message.h"
//#include "EstablishmentCause.h"
//#include "RRCConnectionSetup.h"
#include "NR_SRB-ToAddModList.h"
#include "NR_DRB-ToAddModList.h"
//#include "MCCH-Message.h"
//#define MRB1 1
//#include "RRCConnectionSetupComplete.h"
//#include "RRCConnectionReconfigurationComplete.h"
//#include "RRCConnectionReconfiguration.h"
#include "NR_MIB.h"
//#include "SystemInformation.h"
#include "NR_SIB1.h"
#include "NR_ServingCellConfigCommon.h"
//#include "SIB-Type.h"
//#include "BCCH-DL-SCH-Message.h"
//#include "PHY/defs.h"
#include "NR_MeasObjectToAddModList.h"
#include "NR_ReportConfigToAddModList.h"
#include "NR_MeasIdToAddModList.h"
#include "gnb_config.h"
#endif
#if defined(ENABLE_ITTI)
#
include "intertask_interface.h"
#
include "intertask_interface.h"
#endif
#include "common/ran_context.h"
...
...
@@ -146,8 +146,7 @@ uint16_t two_tier_hexagonal_adjacent_nr_cellIds[7][6] = {{1,2,4,5,7,8}, // Ce
* This is a helper function for xer_sprint, which directs all incoming data
* into the provided string.
*/
static
int
xer__nr_print2s
(
const
void
*
buffer
,
size_t
size
,
void
*
app_key
)
{
static
int
xer__nr_print2s
(
const
void
*
buffer
,
size_t
size
,
void
*
app_key
)
{
xer_sprint_string_t
*
string_buffer
=
(
xer_sprint_string_t
*
)
app_key
;
size_t
string_remaining
=
string_buffer
->
string_size
-
string_buffer
->
string_index
;
...
...
@@ -163,15 +162,12 @@ static int xer__nr_print2s (const void *buffer, size_t size, void *app_key)
return
0
;
}
int
xer_nr_sprint
(
char
*
string
,
size_t
string_size
,
asn_TYPE_descriptor_t
*
td
,
void
*
sptr
)
{
int
xer_nr_sprint
(
char
*
string
,
size_t
string_size
,
asn_TYPE_descriptor_t
*
td
,
void
*
sptr
)
{
asn_enc_rval_t
er
;
xer_sprint_string_t
string_buffer
;
string_buffer
.
string
=
string
;
string_buffer
.
string_size
=
string_size
;
string_buffer
.
string_index
=
0
;
er
=
xer_encode
(
td
,
sptr
,
XER_F_BASIC
,
xer__nr_print2s
,
&
string_buffer
);
if
(
er
.
encoded
<
0
)
{
...
...
@@ -187,14 +183,12 @@ int xer_nr_sprint (char *string, size_t string_size, asn_TYPE_descriptor_t *td,
return
er
.
encoded
;
}
uint16_t
get_adjacent_cell_id_NR
(
uint8_t
Mod_id
,
uint8_t
index
)
{
uint16_t
get_adjacent_cell_id_NR
(
uint8_t
Mod_id
,
uint8_t
index
)
{
return
(
two_tier_hexagonal_adjacent_nr_cellIds
[
Mod_id
][
index
]);
}
/* This only works for the hexagonal topology...need a more general function for other topologies */
uint8_t
get_adjacent_cell_mod_id_NR
(
uint16_t
phyCellId
)
{
uint8_t
get_adjacent_cell_mod_id_NR
(
uint16_t
phyCellId
)
{
uint8_t
i
;
for
(
i
=
0
;
i
<
7
;
i
++
)
{
...
...
@@ -214,14 +208,11 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier,
uint32_t
ssb_SubcarrierOffset
,
uint32_t
pdcch_ConfigSIB1
,
uint32_t
subCarrierSpacingCommon
,
uint32_t
dmrs_TypeA_Position
)
{
uint32_t
dmrs_TypeA_Position
)
{
asn_enc_rval_t
enc_rval
;
NR_BCCH_BCH_Message_t
*
mib
=
&
carrier
->
mib
;
memset
(
mib
,
0
,
sizeof
(
NR_BCCH_BCH_Message_t
));
mib
->
message
.
present
=
NR_BCCH_BCH_MessageType_PR_mib
;
mib
->
message
.
choice
.
mib
=
CALLOC
(
1
,
sizeof
(
struct
NR_MIB
));
memset
(
mib
->
message
.
choice
.
mib
,
0
,
sizeof
(
struct
NR_MIB
));
//36.331 SFN BIT STRING (SIZE (8) , 38.331 SFN BIT STRING (SIZE (6))
...
...
@@ -230,17 +221,18 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier,
mib
->
message
.
choice
.
mib
->
systemFrameNumber
.
buf
[
0
]
=
sfn_msb
<<
2
;
mib
->
message
.
choice
.
mib
->
systemFrameNumber
.
size
=
1
;
mib
->
message
.
choice
.
mib
->
systemFrameNumber
.
bits_unused
=
2
;
//38.331 spare BIT STRING (SIZE (1))
uint16_t
*
spare
=
CALLOC
(
1
,
sizeof
(
uint16_t
));
if
(
spare
==
NULL
)
abort
();
mib
->
message
.
choice
.
mib
->
spare
.
buf
=
(
uint8_t
*
)
spare
;
mib
->
message
.
choice
.
mib
->
spare
.
size
=
1
;
mib
->
message
.
choice
.
mib
->
spare
.
bits_unused
=
7
;
// This makes a spare of 1 bits
mib
->
message
.
choice
.
mib
->
ssb_SubcarrierOffset
=
ssb_SubcarrierOffset
;
mib
->
message
.
choice
.
mib
->
pdcch_ConfigSIB1
.
controlResourceSetZero
=
(
pdcch_ConfigSIB1
/
16
);
mib
->
message
.
choice
.
mib
->
pdcch_ConfigSIB1
.
searchSpaceZero
=
(
pdcch_ConfigSIB1
%
16
);
switch
(
subCarrierSpacingCommon
)
{
case
15
:
mib
->
message
.
choice
.
mib
->
subCarrierSpacingCommon
=
NR_MIB__subCarrierSpacingCommon_scs15or60
;
...
...
@@ -263,6 +255,7 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier,
}
mib
->
message
.
choice
.
mib
->
subCarrierSpacingCommon
=
1
;
switch
(
dmrs_TypeA_Position
)
{
case
2
:
mib
->
message
.
choice
.
mib
->
dmrs_TypeA_Position
=
NR_MIB__dmrs_TypeA_Position_pos2
;
...
...
@@ -280,11 +273,10 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier,
mib
->
message
.
choice
.
mib
->
cellBarred
=
NR_MIB__cellBarred_notBarred
;
// assign_enum
mib
->
message
.
choice
.
mib
->
intraFreqReselection
=
NR_MIB__intraFreqReselection_notAllowed
;
//encode MIB to data
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_BCCH_BCH_Message
,
NULL
,
(
void
*
)
mib
,
(
void
*
)
mib
,
carrier
->
MIB
,
24
);
AssertFatal
(
enc_rval
.
encoded
>
0
,
"ASN1 message encoding failed (%s, %lu)!
\n
"
,
...
...
@@ -298,14 +290,132 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier,
}
uint8_t
do_SIB1_NR
(
rrc_gNB_carrier_data_t
*
carrier
#if defined(ENABLE_ITTI)
,
gNB_RrcConfigurationReq
*
configuration
#endif
)
{
asn_enc_rval_t
enc_rval
;
NR_BCCH_DL_SCH_Message_t
*
sib1_message
;
struct
NR_SIB1
*
sib1
;
int
i
;
struct
NR_PLMN_IdentityInfo
nr_plmn_info
;
#if defined(ENABLE_ITTI)
// TODO : Add support for more than one PLMN
//int num_plmn = configuration->num_plmn;
int
num_plmn
=
1
;
#else
int
num_plmn
=
1
;
#endif
struct
NR_PLMN_Identity
nr_plmn
[
num_plmn
];
NR_MCC_MNC_Digit_t
nr_mcc_digit
[
num_plmn
][
3
];
NR_MCC_MNC_Digit_t
nr_mnc_digit
[
num_plmn
][
3
];
// struct NR_UAC_BarringInfoSet nr_uac_BarringInfoSet;
sib1_message
=
CALLOC
(
1
,
sizeof
(
NR_BCCH_DL_SCH_Message_t
));
memset
(
sib1_message
,
0
,
sizeof
(
NR_BCCH_DL_SCH_Message_t
));
carrier
->
siblock1
=
sib1_message
;
sib1_message
->
message
.
present
=
NR_BCCH_DL_SCH_MessageType_PR_c1
;
sib1_message
->
message
.
choice
.
c1
=
CALLOC
(
1
,
sizeof
(
struct
NR_BCCH_DL_SCH_MessageType__c1
));
memset
(
sib1_message
->
message
.
choice
.
c1
,
0
,
sizeof
(
struct
NR_BCCH_DL_SCH_MessageType__c1
));
sib1_message
->
message
.
choice
.
c1
->
present
=
NR_BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1
;
sib1_message
->
message
.
choice
.
c1
->
choice
.
systemInformationBlockType1
=
CALLOC
(
1
,
sizeof
(
struct
NR_SIB1
));
sib1
=
sib1_message
->
message
.
choice
.
c1
->
choice
.
systemInformationBlockType1
;
memset
(
sib1
,
0
,
sizeof
(
struct
NR_SIB1
));
sib1
->
cellSelectionInfo
=
CALLOC
(
1
,
sizeof
(
struct
NR_SIB1__cellSelectionInfo
));
memset
(
sib1
->
cellSelectionInfo
,
0
,
sizeof
(
struct
NR_SIB1__cellSelectionInfo
));
sib1
->
cellSelectionInfo
->
q_RxLevMin
=
-
50
;
memset
(
&
nr_plmn_info
.
plmn_IdentityList
,
0
,
sizeof
(
struct
NR_PLMN_IdentityInfo__plmn_IdentityList
));
asn_set_empty
(
&
nr_plmn_info
.
plmn_IdentityList
.
list
);
memset
(
&
nr_plmn_info
,
0
,
sizeof
(
struct
NR_PLMN_IdentityInfo
));
memset
(
nr_plmn
,
0
,
num_plmn
*
sizeof
(
struct
NR_PLMN_Identity
));
for
(
i
=
0
;
i
<
num_plmn
;
++
i
)
{
#ifdef ENABLE_ITTI
nr_mcc_digit
[
i
][
0
]
=
(
configuration
->
mcc
[
i
]
/
100
)
%
10
;
nr_mcc_digit
[
i
][
1
]
=
(
configuration
->
mcc
[
i
]
/
10
)
%
10
;
nr_mcc_digit
[
i
][
2
]
=
(
configuration
->
mcc
[
i
])
%
10
;
#else
nr_mcc_digit
[
i
][
0
]
=
0
;
nr_mcc_digit
[
i
][
1
]
=
0
;
nr_mcc_digit
[
i
][
2
]
=
1
;
#endif
nr_plmn
[
i
].
mcc
=
CALLOC
(
1
,
sizeof
(
struct
NR_MCC
));
memset
(
nr_plmn
[
i
].
mcc
,
0
,
sizeof
(
struct
NR_MCC
));
asn_set_empty
(
&
nr_plmn
[
i
].
mcc
->
list
);
ASN_SEQUENCE_ADD
(
&
nr_plmn
[
i
].
mcc
->
list
,
&
nr_mcc_digit
[
i
][
0
]);
ASN_SEQUENCE_ADD
(
&
nr_plmn
[
i
].
mcc
->
list
,
&
nr_mcc_digit
[
i
][
1
]);
ASN_SEQUENCE_ADD
(
&
nr_plmn
[
i
].
mcc
->
list
,
&
nr_mcc_digit
[
i
][
2
]);
#ifdef ENABLE_ITTI
nr_mnc_digit
[
i
][
0
]
=
(
configuration
->
mnc
[
i
]
/
100
)
%
10
;
nr_mnc_digit
[
i
][
1
]
=
(
configuration
->
mnc
[
i
]
/
10
)
%
10
;
nr_mnc_digit
[
i
][
2
]
=
(
configuration
->
mnc
[
i
])
%
10
;
#else
nr_mnc_digit
[
i
][
0
]
=
0
;
nr_mnc_digit
[
i
][
1
]
=
0
;
nr_mnc_digit
[
i
][
2
]
=
1
;
#endif
memset
(
&
nr_plmn
[
i
].
mnc
,
0
,
sizeof
(
NR_MNC_t
));
nr_plmn
[
i
].
mnc
.
list
.
size
=
0
;
nr_plmn
[
i
].
mnc
.
list
.
count
=
0
;
ASN_SEQUENCE_ADD
(
&
nr_plmn
[
i
].
mnc
.
list
,
&
nr_mnc_digit
[
i
][
0
]);
ASN_SEQUENCE_ADD
(
&
nr_plmn
[
i
].
mnc
.
list
,
&
nr_mnc_digit
[
i
][
1
]);
ASN_SEQUENCE_ADD
(
&
nr_plmn
[
i
].
mnc
.
list
,
&
nr_mnc_digit
[
i
][
2
]);
ASN_SEQUENCE_ADD
(
&
nr_plmn_info
.
plmn_IdentityList
.
list
,
&
nr_plmn
[
i
]);
}
//end plmn loop
nr_plmn_info
.
cellIdentity
.
buf
=
MALLOC
(
8
);
memset
(
nr_plmn_info
.
cellIdentity
.
buf
,
0
,
8
);
#ifdef ENABLE_ITTI
nr_plmn_info
.
cellIdentity
.
buf
[
0
]
=
(
configuration
->
cell_identity
>>
20
)
&
0xff
;
nr_plmn_info
.
cellIdentity
.
buf
[
1
]
=
(
configuration
->
cell_identity
>>
12
)
&
0xff
;
nr_plmn_info
.
cellIdentity
.
buf
[
2
]
=
(
configuration
->
cell_identity
>>
4
)
&
0xff
;
nr_plmn_info
.
cellIdentity
.
buf
[
3
]
=
(
configuration
->
cell_identity
<<
4
)
&
0xff
;
#else
nr_plmn_info
.
cellIdentity
.
buf
[
0
]
=
0x00
;
nr_plmn_info
.
cellIdentity
.
buf
[
1
]
=
0x00
;
nr_plmn_info
.
cellIdentity
.
buf
[
2
]
=
0x00
;
nr_plmn_info
.
cellIdentity
.
buf
[
3
]
=
0x10
;
#endif
nr_plmn_info
.
cellIdentity
.
size
=
4
;
nr_plmn_info
.
cellIdentity
.
bits_unused
=
4
;
nr_plmn_info
.
cellReservedForOperatorUse
=
0
;
memset
(
&
sib1
->
cellAccessRelatedInfo
,
0
,
sizeof
(
NR_CellAccessRelatedInfo_t
));
ASN_SEQUENCE_ADD
(
&
sib1
->
cellAccessRelatedInfo
.
plmn_IdentityList
.
list
,
&
nr_plmn_info
);
#if 0
sib1->uac_BarringInfo = CALLOC(1, sizeof(struct NR_SIB1__uac_BarringInfo));
memset(sib1->uac_BarringInfo, 0, sizeof(struct NR_SIB1__uac_BarringInfo));
nr_uac_BarringInfoSet.uac_BarringFactor = NR_UAC_BarringInfoSet__uac_BarringFactor_p95;
nr_uac_BarringInfoSet.uac_BarringTime = NR_UAC_BarringInfoSet__uac_BarringTime_s4;
nr_uac_BarringInfoSet.uac_BarringForAccessIdentity.buf = MALLOC(1);
memset(nr_uac_BarringInfoSet.uac_BarringForAccessIdentity.buf,0,1);
nr_uac_BarringInfoSet.uac_BarringForAccessIdentity.size = 1;
nr_uac_BarringInfoSet.uac_BarringForAccessIdentity.bits_unused = 1;
ASN_SEQUENCE_ADD(&sib1->uac_BarringInfo->uac_BarringInfoSetList, &nr_uac_BarringInfoSet);
#endif
//encode SIB1 to data
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_BCCH_DL_SCH_Message
,
NULL
,
(
void
*
)
sib1_message
,
carrier
->
SIB1
,
100
);
AssertFatal
(
enc_rval
.
encoded
>
0
,
"ASN1 message encoding failed (%s, %lu)!
\n
"
,
enc_rval
.
failed_type
->
name
,
enc_rval
.
encoded
);
if
(
enc_rval
.
encoded
==-
1
)
{
return
(
-
1
);
}
return
((
enc_rval
.
encoded
+
7
)
/
8
);
}
void
do_SERVINGCELLCONFIGCOMMON
(
uint8_t
Mod_id
,
int
CC_id
,
#if defined(ENABLE_ITTI)
#if defined(ENABLE_ITTI)
gNB_RrcConfigurationReq
*
configuration
,
#endif
#endif
int
initial_flag
)
{
)
{
NR_ServingCellConfigCommon_t
**
servingcellconfigcommon
=
&
RC
.
nrrrc
[
Mod_id
]
->
carrier
[
CC_id
].
servingcellconfigcommon
;
NR_FreqBandIndicatorNR_t
*
dl_frequencyBandList
;
NR_SCS_SpecificCarrier_t
*
dl_scs_SpecificCarrierList
;
...
...
@@ -318,7 +428,6 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
NR_PUSCH_TimeDomainResourceAllocation_t
*
pusch_configcommontimedomainresourceallocation
;
NR_RateMatchPattern_t
*
ratematchpattern
;
NR_RateMatchPatternId_t
*
ratematchpatternid
;
dl_frequencyBandList
=
CALLOC
(
1
,
sizeof
(
NR_FreqBandIndicatorNR_t
));
ul_frequencyBandList
=
CALLOC
(
1
,
sizeof
(
NR_FreqBandIndicatorNR_t
));
dl_scs_SpecificCarrierList
=
CALLOC
(
1
,
sizeof
(
NR_SCS_SpecificCarrier_t
));
...
...
@@ -347,38 +456,36 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
(
*
servingcellconfigcommon
)
->
rateMatchPatternToReleaseList
=
CALLOC
(
1
,
sizeof
(
struct
NR_ServingCellConfigCommon__rateMatchPatternToReleaseList
));
(
*
servingcellconfigcommon
)
->
ssbSubcarrierSpacing
=
CALLOC
(
1
,
sizeof
(
NR_SubcarrierSpacing_t
));
(
*
servingcellconfigcommon
)
->
tdd_UL_DL_ConfigurationCommon
=
CALLOC
(
1
,
sizeof
(
struct
NR_TDD_UL_DL_ConfigCommon
));
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencySSB
=
CALLOC
(
1
,
sizeof
(
NR_ARFCN_ValueNR_t
));
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
genericParameters
.
cyclicPrefix
=
CALLOC
(
1
,
sizeof
(
long
));
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
=
CALLOC
(
1
,
sizeof
(
struct
NR_SetupRelease_PDCCH_ConfigCommon
));
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
choice
.
setup
=
CALLOC
(
1
,
sizeof
(
struct
NR_PDCCH_ConfigCommon
));
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
choice
.
setup
->
controlResourceSetZero
=
CALLOC
(
1
,
sizeof
(
long
));
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
choice
.
setup
->
searchSpaceZero
=
CALLOC
(
1
,
sizeof
(
long
));
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
choice
.
setup
->
commonControlResourceSet
=
CALLOC
(
1
,
sizeof
(
NR_ControlResourceSet_t
));
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
choice
.
setup
->
commonSearchSpaceList
=
CALLOC
(
1
,
sizeof
(
struct
NR_PDCCH_ConfigCommon__commonSearchSpaceList
));
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
choice
.
setup
->
commonSearchSpaceList
=
CALLOC
(
1
,
sizeof
(
struct
NR_PDCCH_ConfigCommon__commonSearchSpaceList
));
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
choice
.
setup
->
searchSpaceSIB1
=
CALLOC
(
1
,
sizeof
(
NR_SearchSpaceId_t
));
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
choice
.
setup
->
searchSpaceOtherSystemInformation
=
CALLOC
(
1
,
sizeof
(
NR_SearchSpaceId_t
));
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
choice
.
setup
->
pagingSearchSpace
=
CALLOC
(
1
,
sizeof
(
NR_SearchSpaceId_t
));
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
choice
.
setup
->
ra_SearchSpace
=
CALLOC
(
1
,
sizeof
(
NR_SearchSpaceId_t
));
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdsch_ConfigCommon
=
CALLOC
(
1
,
sizeof
(
struct
NR_SetupRelease_PDSCH_ConfigCommon
));
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdsch_ConfigCommon
->
choice
.
setup
=
CALLOC
(
1
,
sizeof
(
struct
NR_PDSCH_ConfigCommon
));
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdsch_ConfigCommon
->
choice
.
setup
->
pdsch_TimeDomainAllocationList
=
CALLOC
(
1
,
sizeof
(
struct
NR_PDSCH_TimeDomainResourceAllocationList
));
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdsch_ConfigCommon
->
choice
.
setup
->
pdsch_TimeDomainAllocationList
=
CALLOC
(
1
,
sizeof
(
struct
NR_PDSCH_TimeDomainResourceAllocationList
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
frequencyInfoUL
->
frequencyBandList
=
CALLOC
(
1
,
sizeof
(
NR_MultiFrequencyBandListNR_t
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
frequencyInfoUL
->
absoluteFrequencyPointA
=
CALLOC
(
1
,
sizeof
(
NR_ARFCN_ValueNR_t
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
frequencyInfoUL
->
additionalSpectrumEmission
=
CALLOC
(
1
,
sizeof
(
NR_AdditionalSpectrumEmission_t
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
frequencyInfoUL
->
p_Max
=
CALLOC
(
1
,
sizeof
(
NR_P_Max_t
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
frequencyInfoUL
->
frequencyShift7p5khz
=
CALLOC
(
1
,
sizeof
(
long
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
cyclicPrefix
=
CALLOC
(
1
,
sizeof
(
long
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
=
CALLOC
(
1
,
sizeof
(
NR_SetupRelease_RACH_ConfigCommon_t
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
=
CALLOC
(
1
,
sizeof
(
struct
NR_RACH_ConfigCommon
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
totalNumberOfRA_Preambles
=
CALLOC
(
1
,
sizeof
(
long
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
=
CALLOC
(
1
,
sizeof
(
struct
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
groupBconfigured
=
CALLOC
(
1
,
sizeof
(
struct
NR_RACH_ConfigCommon__groupBconfigured
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
=
CALLOC
(
1
,
sizeof
(
struct
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
groupBconfigured
=
CALLOC
(
1
,
sizeof
(
struct
NR_RACH_ConfigCommon__groupBconfigured
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rsrp_ThresholdSSB
=
CALLOC
(
1
,
sizeof
(
NR_RSRP_Range_t
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rsrp_ThresholdSSB_SUL
=
CALLOC
(
1
,
sizeof
(
NR_RSRP_Range_t
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
msg1_SubcarrierSpacing
=
CALLOC
(
1
,
sizeof
(
NR_SubcarrierSpacing_t
));
...
...
@@ -386,11 +493,9 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
=
CALLOC
(
1
,
sizeof
(
NR_SetupRelease_PUSCH_ConfigCommon_t
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
->
choice
.
setup
=
CALLOC
(
1
,
sizeof
(
struct
NR_PUSCH_ConfigCommon
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
->
choice
.
setup
->
groupHoppingEnabledTransformPrecoding
=
CALLOC
(
1
,
sizeof
(
long
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
->
choice
.
setup
->
pusch_TimeDomainAllocationList
=
CALLOC
(
1
,
sizeof
(
NR_PUSCH_TimeDomainResourceAllocationList_t
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
->
choice
.
setup
->
msg3_DeltaPreamble
=
CALLOC
(
1
,
sizeof
(
long
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
->
choice
.
setup
->
p0_NominalWithGrant
=
CALLOC
(
1
,
sizeof
(
long
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pucch_ConfigCommon
=
CALLOC
(
1
,
sizeof
(
struct
NR_SetupRelease_PUCCH_ConfigCommon
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pucch_ConfigCommon
->
choice
.
setup
=
CALLOC
(
1
,
sizeof
(
struct
NR_PUCCH_ConfigCommon
));
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pucch_ConfigCommon
->
choice
.
setup
->
pucch_ResourceCommon
=
CALLOC
(
1
,
sizeof
(
BIT_STRING_t
));
...
...
@@ -400,7 +505,6 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
(
*
servingcellconfigcommon
)
->
ssb_PositionsInBurst
->
choice
.
shortBitmap
.
buf
=
MALLOC
(
1
);
(
*
servingcellconfigcommon
)
->
ssb_PositionsInBurst
->
choice
.
mediumBitmap
.
buf
=
MALLOC
(
1
);
(
*
servingcellconfigcommon
)
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
buf
=
MALLOC
(
8
);
bwp_dl_controlresourceset
=
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
choice
.
setup
->
commonControlResourceSet
;
bwp_dl_controlresourceset
->
cce_REG_MappingType
.
choice
.
interleaved
=
CALLOC
(
1
,
sizeof
(
struct
NR_ControlResourceSet__cce_REG_MappingType__interleaved
));
bwp_dl_controlresourceset
->
frequencyDomainResources
.
buf
=
MALLOC
(
6
);
...
...
@@ -408,7 +512,6 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
bwp_dl_controlresourceset
->
tci_StatesPDCCH_ToAddList
=
CALLOC
(
1
,
sizeof
(
struct
NR_ControlResourceSet__tci_StatesPDCCH_ToAddList
));
bwp_dl_controlresourceset
->
tci_PresentInDCI
=
CALLOC
(
1
,
sizeof
(
long
));
bwp_dl_controlresourceset
->
pdcch_DMRS_ScramblingID
=
CALLOC
(
1
,
sizeof
(
long
));
bwp_dl_searchspace
->
controlResourceSetId
=
CALLOC
(
1
,
sizeof
(
NR_ControlResourceSetId_t
));
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
=
CALLOC
(
1
,
sizeof
(
struct
NR_SearchSpace__monitoringSlotPeriodicityAndOffset
));
bwp_dl_searchspace
->
duration
=
CALLOC
(
1
,
sizeof
(
long
));
...
...
@@ -418,11 +521,9 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
bwp_dl_searchspace
->
searchSpaceType
=
CALLOC
(
1
,
sizeof
(
struct
NR_SearchSpace__searchSpaceType
));
bwp_dl_searchspace
->
searchSpaceType
->
choice
.
common
=
CALLOC
(
1
,
sizeof
(
struct
NR_SearchSpace__searchSpaceType__common
));
bwp_dl_searchspace
->
searchSpaceType
->
choice
.
ue_Specific
=
CALLOC
(
1
,
sizeof
(
struct
NR_SearchSpace__searchSpaceType__ue_Specific
));
bwp_dl_timedomainresourceallocation
->
k0
=
CALLOC
(
1
,
sizeof
(
long
));
pusch_configcommontimedomainresourceallocation
=
CALLOC
(
1
,
sizeof
(
NR_PUSCH_TimeDomainResourceAllocation_t
));
pusch_configcommontimedomainresourceallocation
->
k2
=
CALLOC
(
1
,
sizeof
(
long
));
ratematchpattern
->
patternType
.
choice
.
bitmaps
=
CALLOC
(
1
,
sizeof
(
struct
NR_RateMatchPattern__patternType__bitmaps
));
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
resourceBlocks
.
buf
=
MALLOC
(
35
);
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
symbolsInResourceBlock
.
choice
.
oneSlot
.
buf
=
MALLOC
(
2
);
...
...
@@ -440,42 +541,32 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
bwp_dl_controlresourceset
=
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
choice
.
setup
->
commonControlResourceSet
;
}
//------------------------------------Start Fill ServingCellConfigCommon------------------------------------//
//physCellId
*
((
*
servingcellconfigcommon
)
->
physCellId
)
=
configuration
->
Nid_cell
[
CC_id
];
//NR_DownlinkConfigCommon
*
((
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencySSB
)
=
configuration
->
absoluteFrequencySSB
[
CC_id
];
*
(
dl_frequencyBandList
)
=
configuration
->
DL_FreqBandIndicatorNR
[
CC_id
];
ASN_SEQUENCE_ADD
(
&
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
frequencyInfoDL
->
frequencyBandList
.
list
,
&
dl_frequencyBandList
);
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
=
configuration
->
DL_absoluteFrequencyPointA
[
CC_id
];
dl_scs_SpecificCarrierList
->
offsetToCarrier
=
configuration
->
DL_offsetToCarrier
[
CC_id
];
dl_scs_SpecificCarrierList
->
subcarrierSpacing
=
configuration
->
DL_SCS_SubcarrierSpacing
[
CC_id
];
dl_scs_SpecificCarrierList
->
carrierBandwidth
=
configuration
->
DL_carrierBandwidth
[
CC_id
];
ASN_SEQUENCE_ADD
(
&
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
,
&
dl_scs_SpecificCarrierList
);
//initialDownlinkBWP
//initialDownlinkBWP ----- genericParameters
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
genericParameters
.
locationAndBandwidth
=
configuration
->
DL_locationAndBandwidth
[
CC_id
];
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
genericParameters
.
subcarrierSpacing
=
configuration
->
DL_BWP_SubcarrierSpacing
[
CC_id
];
if
(
configuration
->
DL_BWP_prefix_type
[
CC_id
]){
if
(
configuration
->
DL_BWP_prefix_type
[
CC_id
])
{
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
genericParameters
.
cyclicPrefix
=
NR_BWP__cyclicPrefix_extended
;
}
//initialDownlinkBWP ----- pdcch_ConfigCommon
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
present
=
NR_SetupRelease_PDCCH_ConfigCommon_PR_setup
;
//Fill initialDownlinkBWP -> pdcch_ConfigCommon -> ControlResourceSet list //
*
((
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
choice
.
setup
->
controlResourceSetZero
)
=
configuration
->
controlResourceSetZero
[
CC_id
];
*
((
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
choice
.
setup
->
searchSpaceZero
)
=
configuration
->
searchSpaceZero
[
CC_id
];
bwp_dl_controlresourceset
->
controlResourceSetId
=
configuration
->
PDCCH_common_controlResourceSetId
[
CC_id
];
//BIT STRING (SIZE (45))
bwp_dl_controlresourceset
->
frequencyDomainResources
.
size
=
6
;
...
...
@@ -486,83 +577,76 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
bwp_dl_controlresourceset
->
frequencyDomainResources
.
buf
[
3
]
=
0xff
;
bwp_dl_controlresourceset
->
frequencyDomainResources
.
buf
[
4
]
=
0xff
;
bwp_dl_controlresourceset
->
frequencyDomainResources
.
buf
[
5
]
=
0xff
;
bwp_dl_controlresourceset
->
duration
=
configuration
->
PDCCH_common_ControlResourceSet_duration
[
CC_id
];
bwp_dl_controlresourceset
->
cce_REG_MappingType
.
present
=
configuration
->
PDCCH_cce_REG_MappingType
[
CC_id
];
if
(
bwp_dl_controlresourceset
->
cce_REG_MappingType
.
present
==
NR_ControlResourceSet__cce_REG_MappingType_PR_interleaved
){
if
(
bwp_dl_controlresourceset
->
cce_REG_MappingType
.
present
==
NR_ControlResourceSet__cce_REG_MappingType_PR_interleaved
)
{
bwp_dl_controlresourceset
->
cce_REG_MappingType
.
choice
.
interleaved
->
reg_BundleSize
=
configuration
->
PDCCH_reg_BundleSize
[
CC_id
];
bwp_dl_controlresourceset
->
cce_REG_MappingType
.
choice
.
interleaved
->
interleaverSize
=
configuration
->
PDCCH_interleaverSize
[
CC_id
];
*
(
bwp_dl_controlresourceset
->
cce_REG_MappingType
.
choice
.
interleaved
->
shiftIndex
)
=
configuration
->
PDCCH_shiftIndex
[
CC_id
];
}
else
if
(
bwp_dl_controlresourceset
->
cce_REG_MappingType
.
present
==
NR_ControlResourceSet__cce_REG_MappingType_PR_nonInterleaved
)
{
}
else
if
(
bwp_dl_controlresourceset
->
cce_REG_MappingType
.
present
==
NR_ControlResourceSet__cce_REG_MappingType_PR_nonInterleaved
)
{
bwp_dl_controlresourceset
->
cce_REG_MappingType
.
choice
.
nonInterleaved
=
0
;
}
bwp_dl_controlresourceset
->
precoderGranularity
=
configuration
->
PDCCH_precoderGranularity
[
CC_id
];
*
(
TCI_StateId
)
=
configuration
->
PDCCH_TCI_StateId
[
CC_id
];
ASN_SEQUENCE_ADD
(
&
bwp_dl_controlresourceset
->
tci_StatesPDCCH_ToAddList
->
list
,
&
TCI_StateId
);
if
(
configuration
->
tci_PresentInDCI
[
CC_id
]){
if
(
configuration
->
tci_PresentInDCI
[
CC_id
])
{
bwp_dl_controlresourceset
->
tci_PresentInDCI
=
NR_ControlResourceSet__tci_PresentInDCI_enabled
;
}
*
(
bwp_dl_controlresourceset
->
pdcch_DMRS_ScramblingID
)
=
configuration
->
PDCCH_DMRS_ScramblingID
[
CC_id
];;
//Fill downlinkConfigCommon -> initialDownlinkBWP -> pdcch_ConfigCommon -> SearchSpace list //
bwp_dl_searchspace
->
searchSpaceId
=
configuration
->
SearchSpaceId
[
CC_id
];
*
(
bwp_dl_searchspace
->
controlResourceSetId
)
=
configuration
->
commonSearchSpaces_controlResourceSetId
[
CC_id
];
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
=
configuration
->
SearchSpace_monitoringSlotPeriodicityAndOffset_choice
[
CC_id
];
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1
){
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1
)
{
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
choice
.
sl1
=
configuration
->
SearchSpace_monitoringSlotPeriodicityAndOffset_value
[
CC_id
];
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2
)
{
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2
)
{
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
choice
.
sl2
=
configuration
->
SearchSpace_monitoringSlotPeriodicityAndOffset_value
[
CC_id
];
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl4
)
{
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl4
)
{
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
choice
.
sl4
=
configuration
->
SearchSpace_monitoringSlotPeriodicityAndOffset_value
[
CC_id
];
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl5
)
{
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl5
)
{
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
choice
.
sl5
=
configuration
->
SearchSpace_monitoringSlotPeriodicityAndOffset_value
[
CC_id
];
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl8
)
{
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl8
)
{
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
choice
.
sl8
=
configuration
->
SearchSpace_monitoringSlotPeriodicityAndOffset_value
[
CC_id
];
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl10
)
{
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl10
)
{
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
choice
.
sl10
=
configuration
->
SearchSpace_monitoringSlotPeriodicityAndOffset_value
[
CC_id
];
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl16
)
{
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl16
)
{
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
choice
.
sl16
=
configuration
->
SearchSpace_monitoringSlotPeriodicityAndOffset_value
[
CC_id
];
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl20
)
{
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl20
)
{
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
choice
.
sl20
=
configuration
->
SearchSpace_monitoringSlotPeriodicityAndOffset_value
[
CC_id
];
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl40
)
{
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl40
)
{
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
choice
.
sl40
=
configuration
->
SearchSpace_monitoringSlotPeriodicityAndOffset_value
[
CC_id
];
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl80
)
{
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl80
)
{
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
choice
.
sl80
=
configuration
->
SearchSpace_monitoringSlotPeriodicityAndOffset_value
[
CC_id
];
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl160
)
{
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl160
)
{
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
choice
.
sl160
=
configuration
->
SearchSpace_monitoringSlotPeriodicityAndOffset_value
[
CC_id
];
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl320
)
{
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl320
)
{
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
choice
.
sl320
=
configuration
->
SearchSpace_monitoringSlotPeriodicityAndOffset_value
[
CC_id
];
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl640
)
{
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl640
)
{
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
choice
.
sl640
=
configuration
->
SearchSpace_monitoringSlotPeriodicityAndOffset_value
[
CC_id
];
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1280
)
{
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1280
)
{
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
choice
.
sl1280
=
configuration
->
SearchSpace_monitoringSlotPeriodicityAndOffset_value
[
CC_id
];
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2560
)
{
}
else
if
(
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
present
==
NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2560
)
{
bwp_dl_searchspace
->
monitoringSlotPeriodicityAndOffset
->
choice
.
sl2560
=
configuration
->
SearchSpace_monitoringSlotPeriodicityAndOffset_value
[
CC_id
];
}
*
(
bwp_dl_searchspace
->
duration
)
=
configuration
->
SearchSpace_duration
[
CC_id
];
bwp_dl_searchspace
->
monitoringSymbolsWithinSlot
->
size
=
2
;
bwp_dl_searchspace
->
monitoringSymbolsWithinSlot
->
bits_unused
=
2
;
bwp_dl_searchspace
->
monitoringSymbolsWithinSlot
->
buf
[
0
]
=
0x3f
;
bwp_dl_searchspace
->
monitoringSymbolsWithinSlot
->
buf
[
1
]
=
0xff
;
bwp_dl_searchspace
->
nrofCandidates
->
aggregationLevel1
=
configuration
->
SearchSpace_nrofCandidates_aggregationLevel1
[
CC_id
];
bwp_dl_searchspace
->
nrofCandidates
->
aggregationLevel2
=
configuration
->
SearchSpace_nrofCandidates_aggregationLevel2
[
CC_id
];
bwp_dl_searchspace
->
nrofCandidates
->
aggregationLevel4
=
configuration
->
SearchSpace_nrofCandidates_aggregationLevel4
[
CC_id
];
bwp_dl_searchspace
->
nrofCandidates
->
aggregationLevel8
=
configuration
->
SearchSpace_nrofCandidates_aggregationLevel8
[
CC_id
];
bwp_dl_searchspace
->
nrofCandidates
->
aggregationLevel16
=
configuration
->
SearchSpace_nrofCandidates_aggregationLevel16
[
CC_id
];
bwp_dl_searchspace
->
searchSpaceType
->
present
=
configuration
->
SearchSpace_searchSpaceType
[
CC_id
];
if
(
bwp_dl_searchspace
->
searchSpaceType
->
present
==
NR_SearchSpace__searchSpaceType_PR_common
){
if
(
bwp_dl_searchspace
->
searchSpaceType
->
present
==
NR_SearchSpace__searchSpaceType_PR_common
)
{
bwp_dl_searchspace
->
searchSpaceType
->
choice
.
common
->
dci_Format2_0
=
CALLOC
(
1
,
sizeof
(
struct
NR_SearchSpace__searchSpaceType__common__dci_Format2_0
));
bwp_dl_searchspace
->
searchSpaceType
->
choice
.
common
->
dci_Format2_0
->
nrofCandidates_SFI
.
aggregationLevel1
=
CALLOC
(
1
,
sizeof
(
long
));
bwp_dl_searchspace
->
searchSpaceType
->
choice
.
common
->
dci_Format2_0
->
nrofCandidates_SFI
.
aggregationLevel2
=
CALLOC
(
1
,
sizeof
(
long
));
...
...
@@ -578,98 +662,105 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
*
(
bwp_dl_searchspace
->
searchSpaceType
->
choice
.
common
->
dci_Format2_0
->
nrofCandidates_SFI
.
aggregationLevel16
)
=
configuration
->
Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16
[
CC_id
];
*
(
bwp_dl_searchspace
->
searchSpaceType
->
choice
.
common
->
dci_Format2_3
->
dummy1
)
=
configuration
->
Common_dci_Format2_3_monitoringPeriodicity
[
CC_id
];
bwp_dl_searchspace
->
searchSpaceType
->
choice
.
common
->
dci_Format2_3
->
dummy2
=
configuration
->
Common_dci_Format2_3_nrofPDCCH_Candidates
[
CC_id
];
}
else
if
(
bwp_dl_searchspace
->
searchSpaceType
->
present
==
NR_SearchSpace__searchSpaceType_PR_ue_Specific
)
{
}
else
if
(
bwp_dl_searchspace
->
searchSpaceType
->
present
==
NR_SearchSpace__searchSpaceType_PR_ue_Specific
)
{
bwp_dl_searchspace
->
searchSpaceType
->
choice
.
ue_Specific
->
dci_Formats
=
configuration
->
ue_Specific__dci_Formats
[
CC_id
];
}
ASN_SEQUENCE_ADD
(
&
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
choice
.
setup
->
commonSearchSpaceList
->
list
,
&
bwp_dl_searchspace
);
*
((
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
choice
.
setup
->
searchSpaceSIB1
)
=
configuration
->
searchSpaceSIB1
[
CC_id
];
*
((
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
choice
.
setup
->
searchSpaceOtherSystemInformation
)
=
configuration
->
searchSpaceOtherSystemInformation
[
CC_id
];
*
((
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
choice
.
setup
->
pagingSearchSpace
)
=
configuration
->
pagingSearchSpace
[
CC_id
];
*
((
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdcch_ConfigCommon
->
choice
.
setup
->
ra_SearchSpace
)
=
configuration
->
ra_SearchSpace
[
CC_id
];
//initialDownlinkBWP ----- pdsch_ConfigCommon
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdsch_ConfigCommon
->
present
=
NR_SetupRelease_PDSCH_ConfigCommon_PR_setup
;
*
(
bwp_dl_timedomainresourceallocation
->
k0
)
=
configuration
->
PDSCH_TimeDomainResourceAllocation_k0
[
CC_id
];
bwp_dl_timedomainresourceallocation
->
mappingType
=
configuration
->
PDSCH_TimeDomainResourceAllocation_mappingType
[
CC_id
];
bwp_dl_timedomainresourceallocation
->
startSymbolAndLength
=
configuration
->
PDSCH_TimeDomainResourceAllocation_startSymbolAndLength
[
CC_id
];
ASN_SEQUENCE_ADD
(
&
(
*
servingcellconfigcommon
)
->
downlinkConfigCommon
->
initialDownlinkBWP
->
pdsch_ConfigCommon
->
choice
.
setup
->
pdsch_TimeDomainAllocationList
->
list
,
&
bwp_dl_timedomainresourceallocation
);
//uplinkConfigCommon
//uplinkConfigCommon frequencyInfoUL //
*
(
ul_frequencyBandList
)
=
configuration
->
UL_FreqBandIndicatorNR
[
CC_id
];
ASN_SEQUENCE_ADD
(
&
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
frequencyInfoUL
->
frequencyBandList
->
list
,
&
ul_frequencyBandList
);
*
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
frequencyInfoUL
->
absoluteFrequencyPointA
)
=
configuration
->
UL_absoluteFrequencyPointA
[
CC_id
];
ul_scs_SpecificCarrierList
->
offsetToCarrier
=
configuration
->
UL_offsetToCarrier
[
CC_id
];
ul_scs_SpecificCarrierList
->
subcarrierSpacing
=
configuration
->
UL_SCS_SubcarrierSpacing
[
CC_id
];
ul_scs_SpecificCarrierList
->
carrierBandwidth
=
configuration
->
UL_carrierBandwidth
[
CC_id
];
ASN_SEQUENCE_ADD
(
&
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
,
&
ul_scs_SpecificCarrierList
);
*
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
frequencyInfoUL
->
additionalSpectrumEmission
)
=
configuration
->
UL_additionalSpectrumEmission
[
CC_id
];
*
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
frequencyInfoUL
->
p_Max
)
=
configuration
->
UL_p_Max
[
CC_id
];
*
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
frequencyInfoUL
->
frequencyShift7p5khz
)
=
configuration
->
UL_frequencyShift7p5khz
[
CC_id
];
//uplinkConfigCommon initialUplinkBWP //
//Fill initialUplinkBWP -> BWP-UplinkCommon -> genericParameters//
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
locationAndBandwidth
=
configuration
->
UL_locationAndBandwidth
[
CC_id
];
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
subcarrierSpacing
=
configuration
->
UL_BWP_SubcarrierSpacing
[
CC_id
];
if
(
configuration
->
UL_BWP_prefix_type
[
CC_id
]){
if
(
configuration
->
UL_BWP_prefix_type
[
CC_id
])
{
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
cyclicPrefix
=
NR_BWP__cyclicPrefix_extended
;
}
//Fill initialUplinkBWP -> BWP-UplinkCommon -> rach_ConfigCommon//
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
present
=
NR_SetupRelease_RACH_ConfigCommon_PR_setup
;
*
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
totalNumberOfRA_Preambles
)
=
configuration
->
rach_totalNumberOfRA_Preambles
[
CC_id
];
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
=
configuration
->
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice
[
CC_id
];
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
==
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneEighth
){
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
oneEighth
=
configuration
->
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth
[
CC_id
];
}
else
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
==
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneFourth
){
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
oneFourth
=
configuration
->
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth
[
CC_id
];
}
else
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
==
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneHalf
){
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
oneHalf
=
configuration
->
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf
[
CC_id
];
}
else
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
==
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_one
){
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
one
=
configuration
->
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one
[
CC_id
];
}
else
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
==
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_two
){
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
two
=
configuration
->
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two
[
CC_id
];
}
else
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
==
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_four
){
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
four
=
configuration
->
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four
[
CC_id
];
}
else
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
==
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_eight
){
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
eight
=
configuration
->
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight
[
CC_id
];
}
else
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
==
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_sixteen
){
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
sixteen
=
configuration
->
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen
[
CC_id
];
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
=
configuration
->
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice
[
CC_id
];
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
==
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneEighth
)
{
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
oneEighth
=
configuration
->
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth
[
CC_id
];
}
else
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
==
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneFourth
)
{
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
oneFourth
=
configuration
->
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth
[
CC_id
];
}
else
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
==
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneHalf
)
{
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
oneHalf
=
configuration
->
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf
[
CC_id
];
}
else
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
==
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_one
)
{
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
one
=
configuration
->
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one
[
CC_id
];
}
else
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
==
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_two
)
{
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
two
=
configuration
->
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two
[
CC_id
];
}
else
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
==
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_four
)
{
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
four
=
configuration
->
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four
[
CC_id
];
}
else
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
==
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_eight
)
{
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
eight
=
configuration
->
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight
[
CC_id
];
}
else
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
==
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_sixteen
)
{
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
choice
.
sixteen
=
configuration
->
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen
[
CC_id
];
}
if
(
configuration
->
rach_groupBconfigured
[
CC_id
]){
if
(
configuration
->
rach_groupBconfigured
[
CC_id
])
{
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
groupBconfigured
->
ra_Msg3SizeGroupA
=
configuration
->
rach_ra_Msg3SizeGroupA
[
CC_id
];
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
groupBconfigured
->
messagePowerOffsetGroupB
=
configuration
->
rach_messagePowerOffsetGroupB
[
CC_id
];
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
groupBconfigured
->
numberOfRA_PreamblesGroupA
=
configuration
->
rach_numberOfRA_PreamblesGroupA
[
CC_id
];
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
groupBconfigured
->
numberOfRA_PreamblesGroupA
=
configuration
->
rach_numberOfRA_PreamblesGroupA
[
CC_id
];
}
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
ra_ContentionResolutionTimer
=
configuration
->
rach_ra_ContentionResolutionTimer
[
CC_id
];
*
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rsrp_ThresholdSSB
)
=
configuration
->
rsrp_ThresholdSSB
[
CC_id
];
*
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rsrp_ThresholdSSB_SUL
)
=
configuration
->
rsrp_ThresholdSSB_SUL
[
CC_id
];
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
prach_RootSequenceIndex
.
present
=
configuration
->
prach_RootSequenceIndex_choice
[
CC_id
];
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
prach_RootSequenceIndex
.
present
==
NR_RACH_ConfigCommon__prach_RootSequenceIndex_PR_l839
){
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
prach_RootSequenceIndex
.
present
==
NR_RACH_ConfigCommon__prach_RootSequenceIndex_PR_l839
)
{
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
prach_RootSequenceIndex
.
choice
.
l839
=
configuration
->
prach_RootSequenceIndex_l839
[
CC_id
];
}
else
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
prach_RootSequenceIndex
.
present
==
NR_RACH_ConfigCommon__prach_RootSequenceIndex_PR_l139
){
}
else
if
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
prach_RootSequenceIndex
.
present
==
NR_RACH_ConfigCommon__prach_RootSequenceIndex_PR_l139
)
{
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
prach_RootSequenceIndex
.
choice
.
l139
=
configuration
->
prach_RootSequenceIndex_l139
[
CC_id
];
}
*
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
msg1_SubcarrierSpacing
)
=
configuration
->
prach_msg1_SubcarrierSpacing
[
CC_id
];
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
restrictedSetConfig
=
configuration
->
restrictedSetConfig
[
CC_id
];
if
(
configuration
->
msg3_transformPrecoding
[
CC_id
]){
if
(
configuration
->
msg3_transformPrecoding
[
CC_id
])
{
*
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
msg3_transformPrecoder
)
=
NR_RACH_ConfigCommon__msg3_transformPrecoder_enabled
;
}
...
...
@@ -678,29 +769,28 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
msg1_FDM
=
configuration
->
prach_msg1_FDM
[
CC_id
];
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
msg1_FrequencyStart
=
configuration
->
prach_msg1_FrequencyStart
[
CC_id
];
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
zeroCorrelationZoneConfig
=
configuration
->
zeroCorrelationZoneConfig
[
CC_id
];
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
preambleReceivedTargetPower
=
configuration
->
preambleReceivedTargetPower
[
CC_id
];
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
preambleReceivedTargetPower
=
configuration
->
preambleReceivedTargetPower
[
CC_id
];
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
preambleTransMax
=
configuration
->
preambleTransMax
[
CC_id
];
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
powerRampingStep
=
configuration
->
powerRampingStep
[
CC_id
];
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
rach_ConfigGeneric
.
ra_ResponseWindow
=
configuration
->
ra_ResponseWindow
[
CC_id
];
//Fill initialUplinkBWP -> BWP-UplinkCommon -> pusch_ConfigCommon//
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
->
present
=
NR_SetupRelease_PUSCH_ConfigCommon_PR_setup
;
if
(
configuration
->
groupHoppingEnabledTransformPrecoding
[
CC_id
]){
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
->
choice
.
setup
->
groupHoppingEnabledTransformPrecoding
=
NR_PUSCH_ConfigCommon__groupHoppingEnabledTransformPrecoding_enabled
;
if
(
configuration
->
groupHoppingEnabledTransformPrecoding
[
CC_id
])
{
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
->
choice
.
setup
->
groupHoppingEnabledTransformPrecoding
=
NR_PUSCH_ConfigCommon__groupHoppingEnabledTransformPrecoding_enabled
;
}
*
(
pusch_configcommontimedomainresourceallocation
->
k2
)
=
configuration
->
PUSCH_TimeDomainResourceAllocation_k2
[
CC_id
];
pusch_configcommontimedomainresourceallocation
->
mappingType
=
configuration
->
PUSCH_TimeDomainResourceAllocation_mappingType
[
CC_id
];
pusch_configcommontimedomainresourceallocation
->
startSymbolAndLength
=
configuration
->
PUSCH_TimeDomainResourceAllocation_startSymbolAndLength
[
CC_id
];
ASN_SEQUENCE_ADD
(
&
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
->
choice
.
setup
->
pusch_TimeDomainAllocationList
->
list
,
&
pusch_configcommontimedomainresourceallocation
);
ASN_SEQUENCE_ADD
(
&
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
->
choice
.
setup
->
pusch_TimeDomainAllocationList
->
list
,
&
pusch_configcommontimedomainresourceallocation
);
*
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
->
choice
.
setup
->
msg3_DeltaPreamble
)
=
configuration
->
msg3_DeltaPreamble
[
CC_id
];
*
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
->
choice
.
setup
->
p0_NominalWithGrant
)
=
configuration
->
p0_NominalWithGrant
[
CC_id
];
//Fill initialUplinkBWP -> BWP-UplinkCommon -> pucch_ConfigCommon//
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pucch_ConfigCommon
->
present
=
NR_SetupRelease_PUCCH_ConfigCommon_PR_setup
;
(
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pucch_ConfigCommon
->
choice
.
setup
->
pucch_GroupHopping
=
configuration
->
pucch_GroupHopping
[
CC_id
];
*
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pucch_ConfigCommon
->
choice
.
setup
->
p0_nominal
)
=
configuration
->
p0_nominal
[
CC_id
];
*
((
*
servingcellconfigcommon
)
->
uplinkConfigCommon
->
initialUplinkBWP
->
pucch_ConfigCommon
->
choice
.
setup
->
pucch_ResourceCommon
)
=
configuration
->
pucch_ResourceCommon
[
CC_id
];
...
...
@@ -710,22 +800,22 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
*
((
*
servingcellconfigcommon
)
->
n_TimingAdvanceOffset
)
=
configuration
->
ServingCellConfigCommon_n_TimingAdvanceOffset
[
CC_id
];
//ssb_PositionsInBurst
(
*
servingcellconfigcommon
)
->
ssb_PositionsInBurst
->
present
=
configuration
->
ServingCellConfigCommon_ssb_PositionsInBurst_PR
[
CC_id
];
uint64_t
t_freq
;
if
(
configuration
->
nr_band
[
CC_id
]
==
41
||
(
configuration
->
nr_band
[
CC_id
]
>
76
&&
configuration
->
nr_band
[
CC_id
]
<
80
))
t_freq
=
2400000000
;
else
t_freq
=
3000000000
;
if
(
configuration
->
downlink_frequency
[
CC_id
]
<
t_freq
){
if
(
configuration
->
downlink_frequency
[
CC_id
]
<
t_freq
)
{
(
*
servingcellconfigcommon
)
->
ssb_PositionsInBurst
->
choice
.
shortBitmap
.
size
=
1
;
(
*
servingcellconfigcommon
)
->
ssb_PositionsInBurst
->
choice
.
shortBitmap
.
bits_unused
=
4
;
(
*
servingcellconfigcommon
)
->
ssb_PositionsInBurst
->
choice
.
shortBitmap
.
buf
[
0
]
=
configuration
->
ServingCellConfigCommon_ssb_PositionsInBurst_PR
[
CC_id
];
}
else
if
(
configuration
->
downlink_frequency
[
CC_id
]
<
6000000000
)
{
}
else
if
(
configuration
->
downlink_frequency
[
CC_id
]
<
6000000000
)
{
(
*
servingcellconfigcommon
)
->
ssb_PositionsInBurst
->
choice
.
mediumBitmap
.
size
=
1
;
(
*
servingcellconfigcommon
)
->
ssb_PositionsInBurst
->
choice
.
mediumBitmap
.
bits_unused
=
0
;
(
*
servingcellconfigcommon
)
->
ssb_PositionsInBurst
->
choice
.
mediumBitmap
.
buf
[
0
]
=
configuration
->
ServingCellConfigCommon_ssb_PositionsInBurst_PR
[
CC_id
];
}
else
{
}
else
{
(
*
servingcellconfigcommon
)
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
size
=
8
;
(
*
servingcellconfigcommon
)
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
bits_unused
=
0
;
(
*
servingcellconfigcommon
)
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
buf
[
0
]
=
0xff
;
...
...
@@ -738,36 +828,32 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
(
*
servingcellconfigcommon
)
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
buf
[
7
]
=
0xff
;
}
//ssb_periodicityServingCell
*
(
*
servingcellconfigcommon
)
->
ssb_periodicityServingCell
=
configuration
->
ServingCellConfigCommon_ssb_periodicityServingCell
[
CC_id
];
//dmrs_TypeA_Position
(
*
servingcellconfigcommon
)
->
dmrs_TypeA_Position
=
configuration
->
ServingCellConfigCommon_dmrs_TypeA_Position
[
CC_id
];
//lte_CRS_ToMatchAround
//rateMatchPatternToAddModList
ratematchpattern
->
rateMatchPatternId
=
configuration
->
rateMatchPatternId
[
CC_id
];
ratematchpattern
->
patternType
.
present
=
configuration
->
RateMatchPattern_patternType
[
CC_id
];
if
(
ratematchpattern
->
patternType
.
present
==
NR_RateMatchPattern__patternType_PR_bitmaps
){
if
(
ratematchpattern
->
patternType
.
present
==
NR_RateMatchPattern__patternType_PR_bitmaps
)
{
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
resourceBlocks
.
size
=
35
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
resourceBlocks
.
bits_unused
=
5
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
resourceBlocks
.
buf
[
0
]
=
0x07
;
for
(
int
i
=
1
;
i
<=
34
;
i
++
)
{
for
(
int
i
=
1
;
i
<=
34
;
i
++
)
{
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
resourceBlocks
.
buf
[
i
]
=
0xff
;
}
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
symbolsInResourceBlock
.
present
=
configuration
->
symbolsInResourceBlock
[
CC_id
];
if
(
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
symbolsInResourceBlock
.
present
==
NR_RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_oneSlot
){
if
(
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
symbolsInResourceBlock
.
present
==
NR_RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_oneSlot
)
{
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
symbolsInResourceBlock
.
choice
.
oneSlot
.
size
=
2
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
symbolsInResourceBlock
.
choice
.
oneSlot
.
bits_unused
=
2
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
symbolsInResourceBlock
.
choice
.
oneSlot
.
buf
[
0
]
=
0x3f
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
symbolsInResourceBlock
.
choice
.
oneSlot
.
buf
[
1
]
=
0xff
;
}
else
if
(
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
symbolsInResourceBlock
.
present
==
NR_RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_twoSlots
)
{
}
else
if
(
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
symbolsInResourceBlock
.
present
==
NR_RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_twoSlots
)
{
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
symbolsInResourceBlock
.
choice
.
twoSlots
.
size
=
4
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
symbolsInResourceBlock
.
choice
.
twoSlots
.
bits_unused
=
4
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
symbolsInResourceBlock
.
choice
.
twoSlots
.
buf
[
0
]
=
0x0f
;
...
...
@@ -776,36 +862,36 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
symbolsInResourceBlock
.
choice
.
twoSlots
.
buf
[
3
]
=
0xff
;
}
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
present
=
configuration
->
periodicityAndPattern
[
CC_id
];
if
(
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
present
==
NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n2
){
if
(
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
present
==
NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n2
)
{
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n2
.
size
=
1
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n2
.
bits_unused
=
6
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n2
.
buf
[
0
]
=
0x03
;
}
else
if
(
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
present
==
NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n4
)
{
}
else
if
(
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
present
==
NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n4
)
{
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n4
.
size
=
1
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n4
.
bits_unused
=
4
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n4
.
buf
[
0
]
=
0x0f
;
}
else
if
(
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
present
==
NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n5
)
{
}
else
if
(
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
present
==
NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n5
)
{
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n5
.
size
=
1
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n5
.
bits_unused
=
3
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n5
.
buf
[
0
]
=
0x1f
;
}
else
if
(
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
present
==
NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n8
)
{
}
else
if
(
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
present
==
NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n8
)
{
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n8
.
size
=
1
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n8
.
bits_unused
=
0
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n8
.
buf
[
0
]
=
0xff
;
}
else
if
(
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
present
==
NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n10
)
{
}
else
if
(
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
present
==
NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n10
)
{
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n10
.
size
=
2
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n10
.
bits_unused
=
6
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n10
.
buf
[
0
]
=
0x03
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n10
.
buf
[
1
]
=
0xff
;
}
else
if
(
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
present
==
NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n20
)
{
}
else
if
(
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
present
==
NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n20
)
{
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n20
.
size
=
3
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n20
.
bits_unused
=
4
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n20
.
buf
[
0
]
=
0x0f
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n20
.
buf
[
1
]
=
0xff
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n20
.
buf
[
2
]
=
0xff
;
}
else
if
(
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
present
==
NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n40
)
{
}
else
if
(
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
present
==
NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n40
)
{
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n40
.
size
=
5
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n40
.
bits_unused
=
0
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n40
.
buf
[
0
]
=
0xff
;
...
...
@@ -814,23 +900,18 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n40
.
buf
[
3
]
=
0xff
;
ratematchpattern
->
patternType
.
choice
.
bitmaps
->
periodicityAndPattern
->
choice
.
n40
.
buf
[
4
]
=
0xff
;
}
}
else
if
(
ratematchpattern
->
patternType
.
present
==
NR_RateMatchPattern__patternType_PR_controlResourceSet
){
}
else
if
(
ratematchpattern
->
patternType
.
present
==
NR_RateMatchPattern__patternType_PR_controlResourceSet
)
{
ratematchpattern
->
patternType
.
choice
.
controlResourceSet
=
configuration
->
RateMatchPattern_controlResourceSet
[
CC_id
];
}
*
(
ratematchpattern
->
subcarrierSpacing
)
=
configuration
->
RateMatchPattern_subcarrierSpacing
[
CC_id
];
ratematchpattern
->
dummy
=
configuration
->
RateMatchPattern_mode
[
CC_id
];
ASN_SEQUENCE_ADD
(
&
(
*
servingcellconfigcommon
)
->
rateMatchPatternToAddModList
->
list
,
&
ratematchpattern
);
//rateMatchPatternToReleaseList
*
(
ratematchpatternid
)
=
configuration
->
rateMatchPatternId
[
CC_id
];
ASN_SEQUENCE_ADD
(
&
(
*
servingcellconfigcommon
)
->
rateMatchPatternToReleaseList
->
list
,
&
ratematchpatternid
);
//subcarrierSpacing
*
(
*
servingcellconfigcommon
)
->
ssbSubcarrierSpacing
=
configuration
->
NIA_SubcarrierSpacing
[
CC_id
];
//tdd_UL_DL_ConfigurationCommon
(
*
servingcellconfigcommon
)
->
tdd_UL_DL_ConfigurationCommon
->
referenceSubcarrierSpacing
=
configuration
->
referenceSubcarrierSpacing
[
CC_id
];
(
*
servingcellconfigcommon
)
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
.
dl_UL_TransmissionPeriodicity
=
configuration
->
dl_UL_TransmissionPeriodicity
[
CC_id
];
...
...
@@ -838,73 +919,57 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id,
(
*
servingcellconfigcommon
)
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
.
nrofDownlinkSymbols
=
configuration
->
nrofDownlinkSymbols
[
CC_id
];
(
*
servingcellconfigcommon
)
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
.
nrofUplinkSlots
=
configuration
->
nrofUplinkSlots
[
CC_id
];
(
*
servingcellconfigcommon
)
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
.
nrofUplinkSymbols
=
configuration
->
nrofUplinkSymbols
[
CC_id
];
//ss_PBCH_BlockPower
(
*
servingcellconfigcommon
)
->
ss_PBCH_BlockPower
=
configuration
->
ServingCellConfigCommon_ss_PBCH_BlockPower
[
CC_id
];
}
void
do_RLC_BEARER
(
uint8_t
Mod_id
,
int
CC_id
,
struct
NR_CellGroupConfig__rlc_BearerToAddModList
*
rlc_BearerToAddModList
,
rlc_bearer_config_t
*
rlc_config
)
{
rlc_bearer_config_t
*
rlc_config
)
{
struct
NR_RLC_BearerConfig
*
rlc_bearer
;
rlc_bearer
=
CALLOC
(
1
,
sizeof
(
struct
NR_RLC_BearerConfig
));
rlc_bearer
->
logicalChannelIdentity
=
rlc_config
->
LogicalChannelIdentity
[
CC_id
];
rlc_bearer
->
servedRadioBearer
=
CALLOC
(
1
,
sizeof
(
struct
NR_RLC_BearerConfig__servedRadioBearer
));
rlc_bearer
->
servedRadioBearer
->
present
=
rlc_config
->
servedRadioBearer_present
[
CC_id
];
if
(
rlc_bearer
->
servedRadioBearer
->
present
==
NR_RLC_BearerConfig__servedRadioBearer_PR_srb_Identity
){
if
(
rlc_bearer
->
servedRadioBearer
->
present
==
NR_RLC_BearerConfig__servedRadioBearer_PR_srb_Identity
)
{
rlc_bearer
->
servedRadioBearer
->
choice
.
srb_Identity
=
rlc_config
->
srb_Identity
[
CC_id
];
}
else
if
(
rlc_bearer
->
servedRadioBearer
->
present
==
NR_RLC_BearerConfig__servedRadioBearer_PR_drb_Identity
)
{
}
else
if
(
rlc_bearer
->
servedRadioBearer
->
present
==
NR_RLC_BearerConfig__servedRadioBearer_PR_drb_Identity
)
{
rlc_bearer
->
servedRadioBearer
->
choice
.
drb_Identity
=
rlc_config
->
drb_Identity
[
CC_id
];
}
rlc_bearer
->
reestablishRLC
=
CALLOC
(
1
,
sizeof
(
long
));
*
(
rlc_bearer
->
reestablishRLC
)
=
rlc_config
->
reestablishRLC
[
CC_id
];
rlc_bearer
->
rlc_Config
=
CALLOC
(
1
,
sizeof
(
struct
NR_RLC_Config
));
rlc_bearer
->
rlc_Config
->
present
=
rlc_config
->
rlc_Config_present
[
CC_id
];
if
(
rlc_bearer
->
rlc_Config
->
present
==
NR_RLC_Config_PR_am
){
if
(
rlc_bearer
->
rlc_Config
->
present
==
NR_RLC_Config_PR_am
)
{
rlc_bearer
->
rlc_Config
->
choice
.
am
=
CALLOC
(
1
,
sizeof
(
struct
NR_RLC_Config__am
));
rlc_bearer
->
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
sn_FieldLength
=
CALLOC
(
1
,
sizeof
(
NR_SN_FieldLengthAM_t
));
*
(
rlc_bearer
->
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
sn_FieldLength
)
=
rlc_config
->
ul_AM_sn_FieldLength
[
CC_id
];
rlc_bearer
->
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
t_PollRetransmit
=
rlc_config
->
t_PollRetransmit
[
CC_id
];
rlc_bearer
->
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
pollPDU
=
rlc_config
->
pollPDU
[
CC_id
];
rlc_bearer
->
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
pollByte
=
rlc_config
->
pollByte
[
CC_id
];
rlc_bearer
->
rlc_Config
->
choice
.
am
->
ul_AM_RLC
.
maxRetxThreshold
=
rlc_config
->
maxRetxThreshold
[
CC_id
];
rlc_bearer
->
rlc_Config
->
choice
.
am
->
dl_AM_RLC
.
sn_FieldLength
=
CALLOC
(
1
,
sizeof
(
NR_SN_FieldLengthAM_t
));
*
(
rlc_bearer
->
rlc_Config
->
choice
.
am
->
dl_AM_RLC
.
sn_FieldLength
)
=
rlc_config
->
dl_AM_sn_FieldLength
[
CC_id
];
rlc_bearer
->
rlc_Config
->
choice
.
am
->
dl_AM_RLC
.
t_Reassembly
=
rlc_config
->
dl_AM_t_Reassembly
[
CC_id
];
rlc_bearer
->
rlc_Config
->
choice
.
am
->
dl_AM_RLC
.
t_StatusProhibit
=
rlc_config
->
t_StatusProhibit
[
CC_id
];
}
else
if
(
rlc_bearer
->
rlc_Config
->
present
==
NR_RLC_Config_PR_um_Bi_Directional
){
}
else
if
(
rlc_bearer
->
rlc_Config
->
present
==
NR_RLC_Config_PR_um_Bi_Directional
)
{
rlc_bearer
->
rlc_Config
->
choice
.
um_Bi_Directional
=
CALLOC
(
1
,
sizeof
(
struct
NR_RLC_Config__um_Bi_Directional
));
rlc_bearer
->
rlc_Config
->
choice
.
um_Bi_Directional
->
ul_UM_RLC
.
sn_FieldLength
=
CALLOC
(
1
,
sizeof
(
NR_SN_FieldLengthUM_t
));
*
(
rlc_bearer
->
rlc_Config
->
choice
.
um_Bi_Directional
->
ul_UM_RLC
.
sn_FieldLength
)
=
rlc_config
->
ul_UM_sn_FieldLength
[
CC_id
];
rlc_bearer
->
rlc_Config
->
choice
.
um_Bi_Directional
->
dl_UM_RLC
.
sn_FieldLength
=
CALLOC
(
1
,
sizeof
(
NR_SN_FieldLengthUM_t
));
*
(
rlc_bearer
->
rlc_Config
->
choice
.
um_Bi_Directional
->
dl_UM_RLC
.
sn_FieldLength
)
=
rlc_config
->
dl_UM_sn_FieldLength
[
CC_id
];
rlc_bearer
->
rlc_Config
->
choice
.
um_Bi_Directional
->
dl_UM_RLC
.
t_Reassembly
=
rlc_config
->
dl_UM_t_Reassembly
[
CC_id
];
}
else
if
(
rlc_bearer
->
rlc_Config
->
present
==
NR_RLC_Config_PR_um_Uni_Directional_UL
){
}
else
if
(
rlc_bearer
->
rlc_Config
->
present
==
NR_RLC_Config_PR_um_Uni_Directional_UL
)
{
rlc_bearer
->
rlc_Config
->
choice
.
um_Uni_Directional_UL
=
CALLOC
(
1
,
sizeof
(
struct
NR_RLC_Config__um_Uni_Directional_UL
));
rlc_bearer
->
rlc_Config
->
choice
.
um_Uni_Directional_UL
->
ul_UM_RLC
.
sn_FieldLength
=
CALLOC
(
1
,
sizeof
(
NR_SN_FieldLengthUM_t
));
*
(
rlc_bearer
->
rlc_Config
->
choice
.
um_Uni_Directional_UL
->
ul_UM_RLC
.
sn_FieldLength
)
=
rlc_config
->
ul_UM_sn_FieldLength
[
CC_id
];
}
else
if
(
rlc_bearer
->
rlc_Config
->
present
==
NR_RLC_Config_PR_um_Uni_Directional_DL
){
}
else
if
(
rlc_bearer
->
rlc_Config
->
present
==
NR_RLC_Config_PR_um_Uni_Directional_DL
)
{
rlc_bearer
->
rlc_Config
->
choice
.
um_Uni_Directional_DL
=
CALLOC
(
1
,
sizeof
(
struct
NR_RLC_Config__um_Uni_Directional_DL
));
rlc_bearer
->
rlc_Config
->
choice
.
um_Uni_Directional_DL
->
dl_UM_RLC
.
sn_FieldLength
=
CALLOC
(
1
,
sizeof
(
NR_SN_FieldLengthUM_t
));
*
(
rlc_bearer
->
rlc_Config
->
choice
.
um_Uni_Directional_DL
->
dl_UM_RLC
.
sn_FieldLength
)
=
rlc_config
->
dl_UM_sn_FieldLength
[
CC_id
];
rlc_bearer
->
rlc_Config
->
choice
.
um_Uni_Directional_DL
->
dl_UM_RLC
.
t_Reassembly
=
rlc_config
->
dl_UM_t_Reassembly
[
CC_id
];
...
...
@@ -915,32 +980,26 @@ void do_RLC_BEARER(uint8_t Mod_id,
rlc_bearer
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
priority
=
rlc_config
->
priority
[
CC_id
];
rlc_bearer
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
prioritisedBitRate
=
rlc_config
->
prioritisedBitRate
[
CC_id
];
rlc_bearer
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
bucketSizeDuration
=
rlc_config
->
bucketSizeDuration
[
CC_id
];
rlc_bearer
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
allowedServingCells
=
CALLOC
(
1
,
sizeof
(
struct
NR_LogicalChannelConfig__ul_SpecificParameters__allowedServingCells
));
rlc_bearer
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
allowedSCS_List
=
CALLOC
(
1
,
sizeof
(
struct
NR_LogicalChannelConfig__ul_SpecificParameters__allowedSCS_List
));
NR_ServCellIndex_t
*
servingcellindex
;
servingcellindex
=
CALLOC
(
1
,
sizeof
(
NR_ServCellIndex_t
));
*
servingcellindex
=
rlc_config
->
allowedServingCells
[
CC_id
];
ASN_SEQUENCE_ADD
(
&
(
rlc_bearer
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
allowedServingCells
->
list
),
&
servingcellindex
);
NR_SubcarrierSpacing_t
*
subcarrierspacing
;
subcarrierspacing
=
CALLOC
(
1
,
sizeof
(
NR_SubcarrierSpacing_t
));
*
subcarrierspacing
=
rlc_config
->
subcarrierspacing
[
CC_id
];
ASN_SEQUENCE_ADD
(
&
(
rlc_bearer
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
allowedSCS_List
->
list
),
&
subcarrierspacing
);
rlc_bearer
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
maxPUSCH_Duration
=
CALLOC
(
1
,
sizeof
(
long
));
rlc_bearer
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
configuredGrantType1Allowed
=
CALLOC
(
1
,
sizeof
(
long
));
rlc_bearer
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
logicalChannelGroup
=
CALLOC
(
1
,
sizeof
(
long
));
rlc_bearer
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
schedulingRequestID
=
CALLOC
(
1
,
sizeof
(
NR_SchedulingRequestId_t
));
*
(
rlc_bearer
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
maxPUSCH_Duration
)
=
rlc_config
->
maxPUSCH_Duration
[
CC_id
];
*
(
rlc_bearer
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
configuredGrantType1Allowed
)
=
rlc_config
->
configuredGrantType1Allowed
[
CC_id
];
*
(
rlc_bearer
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
logicalChannelGroup
)
=
rlc_config
->
logicalChannelGroup
[
CC_id
];
*
(
rlc_bearer
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
schedulingRequestID
)
=
rlc_config
->
schedulingRequestID
[
CC_id
];
rlc_bearer
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
logicalChannelSR_Mask
=
rlc_config
->
logicalChannelSR_Mask
[
CC_id
];
rlc_bearer
->
mac_LogicalChannelConfig
->
ul_SpecificParameters
->
logicalChannelSR_DelayTimerApplied
=
rlc_config
->
logicalChannelSR_DelayTimerApplied
[
CC_id
];
ASN_SEQUENCE_ADD
(
&
(
rlc_BearerToAddModList
->
list
),
&
rlc_bearer
);
}
...
...
@@ -948,21 +1007,19 @@ void do_RLC_BEARER(uint8_t Mod_id,
void
do_MAC_CELLGROUP
(
uint8_t
Mod_id
,
int
CC_id
,
NR_MAC_CellGroupConfig_t
*
mac_CellGroupConfig
,
mac_cellgroup_t
*
mac_cellgroup_config
)
{
mac_cellgroup_t
*
mac_cellgroup_config
)
{
mac_CellGroupConfig
->
drx_Config
=
CALLOC
(
1
,
sizeof
(
struct
NR_SetupRelease_DRX_Config
));
mac_CellGroupConfig
->
schedulingRequestConfig
=
CALLOC
(
1
,
sizeof
(
struct
NR_SchedulingRequestConfig
));
mac_CellGroupConfig
->
bsr_Config
=
CALLOC
(
1
,
sizeof
(
struct
NR_BSR_Config
));
mac_CellGroupConfig
->
tag_Config
=
CALLOC
(
1
,
sizeof
(
struct
NR_TAG_Config
));
mac_CellGroupConfig
->
phr_Config
=
CALLOC
(
1
,
sizeof
(
struct
NR_SetupRelease_PHR_Config
));
mac_CellGroupConfig
->
drx_Config
->
present
=
mac_cellgroup_config
->
DRX_Config_PR
[
CC_id
];
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
=
CALLOC
(
1
,
sizeof
(
struct
NR_DRX_Config
));
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_onDurationTimer
.
present
=
mac_cellgroup_config
->
drx_onDurationTimer_PR
[
CC_id
];
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_onDurationTimer
.
present
==
NR_DRX_Config__drx_onDurationTimer_PR_subMilliSeconds
){
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_onDurationTimer
.
present
==
NR_DRX_Config__drx_onDurationTimer_PR_subMilliSeconds
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_onDurationTimer
.
choice
.
subMilliSeconds
=
mac_cellgroup_config
->
subMilliSeconds
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_onDurationTimer
.
present
==
NR_DRX_Config__drx_onDurationTimer_PR_milliSeconds
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_onDurationTimer
.
present
==
NR_DRX_Config__drx_onDurationTimer_PR_milliSeconds
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_onDurationTimer
.
choice
.
milliSeconds
=
mac_cellgroup_config
->
milliSeconds
[
CC_id
];
}
...
...
@@ -971,48 +1028,47 @@ void do_MAC_CELLGROUP(uint8_t Mod_id,
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_HARQ_RTT_TimerUL
=
mac_cellgroup_config
->
drx_HARQ_RTT_TimerUL
[
CC_id
];
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_RetransmissionTimerDL
=
mac_cellgroup_config
->
drx_RetransmissionTimerDL
[
CC_id
];
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_RetransmissionTimerUL
=
mac_cellgroup_config
->
drx_RetransmissionTimerUL
[
CC_id
];
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
=
mac_cellgroup_config
->
drx_LongCycleStartOffset_PR
[
CC_id
];
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms10
){
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms10
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms10
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms20
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms20
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms20
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms32
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms32
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms32
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms40
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms40
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms40
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms60
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms60
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms60
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms64
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms64
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms64
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms70
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms70
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms70
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms80
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms80
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms80
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms128
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms128
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms128
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms160
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms160
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms160
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms256
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms256
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms256
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms320
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms320
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms320
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms512
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms512
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms512
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms640
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms640
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms640
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms1024
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms1024
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms1024
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms1280
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms1280
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms1280
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms2048
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms2048
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms2048
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms2560
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms2560
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms2560
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms5120
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms5120
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms5120
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms10240
)
{
}
else
if
(
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
present
==
NR_DRX_Config__drx_LongCycleStartOffset_PR_ms10240
)
{
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_LongCycleStartOffset
.
choice
.
ms10240
=
mac_cellgroup_config
->
drx_LongCycleStartOffset
[
CC_id
];
}
...
...
@@ -1020,31 +1076,24 @@ void do_MAC_CELLGROUP(uint8_t Mod_id,
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
shortDRX
->
drx_ShortCycle
=
mac_cellgroup_config
->
drx_ShortCycle
[
CC_id
];
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
shortDRX
->
drx_ShortCycleTimer
=
mac_cellgroup_config
->
drx_ShortCycleTimer
[
CC_id
];
mac_CellGroupConfig
->
drx_Config
->
choice
.
setup
->
drx_SlotOffset
=
mac_cellgroup_config
->
drx_SlotOffset
[
CC_id
];
mac_CellGroupConfig
->
schedulingRequestConfig
->
schedulingRequestToAddModList
=
CALLOC
(
1
,
sizeof
(
struct
NR_SchedulingRequestConfig__schedulingRequestToAddModList
));
struct
NR_SchedulingRequestToAddMod
*
schedulingrequestlist
;
schedulingrequestlist
=
CALLOC
(
1
,
sizeof
(
struct
NR_SchedulingRequestToAddMod
));
schedulingrequestlist
->
schedulingRequestId
=
mac_cellgroup_config
->
schedulingRequestId
[
CC_id
];
schedulingrequestlist
->
sr_ProhibitTimer
=
CALLOC
(
1
,
sizeof
(
long
));
*
(
schedulingrequestlist
->
sr_ProhibitTimer
)
=
mac_cellgroup_config
->
sr_ProhibitTimer
[
CC_id
];
schedulingrequestlist
->
sr_TransMax
=
mac_cellgroup_config
->
sr_TransMax
[
CC_id
];
ASN_SEQUENCE_ADD
(
&
(
mac_CellGroupConfig
->
schedulingRequestConfig
->
schedulingRequestToAddModList
->
list
),
&
schedulingrequestlist
);
mac_CellGroupConfig
->
bsr_Config
->
periodicBSR_Timer
=
mac_cellgroup_config
->
periodicBSR_Timer
[
CC_id
];
mac_CellGroupConfig
->
bsr_Config
->
retxBSR_Timer
=
mac_cellgroup_config
->
retxBSR_Timer
[
CC_id
];
mac_CellGroupConfig
->
bsr_Config
->
logicalChannelSR_DelayTimer
=
CALLOC
(
1
,
sizeof
(
long
));
*
(
mac_CellGroupConfig
->
bsr_Config
->
logicalChannelSR_DelayTimer
)
=
mac_cellgroup_config
->
logicalChannelSR_DelayTimer
[
CC_id
];
mac_CellGroupConfig
->
tag_Config
->
tag_ToAddModList
=
CALLOC
(
1
,
sizeof
(
struct
NR_TAG_Config__tag_ToAddModList
));
struct
NR_TAG
*
tag
;
tag
=
CALLOC
(
1
,
sizeof
(
struct
NR_TAG
));
tag
->
tag_Id
=
mac_cellgroup_config
->
tag_Id
[
CC_id
];
tag
->
timeAlignmentTimer
=
mac_cellgroup_config
->
timeAlignmentTimer
[
CC_id
];
ASN_SEQUENCE_ADD
(
&
(
mac_CellGroupConfig
->
tag_Config
->
tag_ToAddModList
->
list
),
&
tag
);
mac_CellGroupConfig
->
phr_Config
->
present
=
mac_cellgroup_config
->
PHR_Config_PR
[
CC_id
];
mac_CellGroupConfig
->
phr_Config
->
choice
.
setup
=
CALLOC
(
1
,
sizeof
(
struct
NR_PHR_Config
));
mac_CellGroupConfig
->
phr_Config
->
choice
.
setup
->
phr_PeriodicTimer
=
mac_cellgroup_config
->
phr_PeriodicTimer
[
CC_id
];
...
...
@@ -1054,17 +1103,14 @@ void do_MAC_CELLGROUP(uint8_t Mod_id,
mac_CellGroupConfig
->
phr_Config
->
choice
.
setup
->
dummy
=
mac_cellgroup_config
->
phr_Type2SpCell
[
CC_id
];
mac_CellGroupConfig
->
phr_Config
->
choice
.
setup
->
phr_Type2OtherCell
=
mac_cellgroup_config
->
phr_Type2OtherCell
[
CC_id
];
mac_CellGroupConfig
->
phr_Config
->
choice
.
setup
->
phr_ModeOtherCG
=
mac_cellgroup_config
->
phr_ModeOtherCG
[
CC_id
];
mac_CellGroupConfig
->
skipUplinkTxDynamic
=
mac_cellgroup_config
->
skipUplinkTxDynamic
[
CC_id
];
}
void
do_PHYSICALCELLGROUP
(
uint8_t
Mod_id
,
int
CC_id
,
NR_PhysicalCellGroupConfig_t
*
physicalCellGroupConfig
,
physicalcellgroup_t
*
physicalcellgroup_config
)
{
physicalcellgroup_t
*
physicalcellgroup_config
)
{
physicalCellGroupConfig
->
harq_ACK_SpatialBundlingPUCCH
=
CALLOC
(
1
,
sizeof
(
long
));
physicalCellGroupConfig
->
harq_ACK_SpatialBundlingPUSCH
=
CALLOC
(
1
,
sizeof
(
long
));
physicalCellGroupConfig
->
p_NR_FR1
=
CALLOC
(
1
,
sizeof
(
NR_P_Max_t
));
...
...
@@ -1072,7 +1118,6 @@ void do_PHYSICALCELLGROUP(uint8_t Mod_id,
physicalCellGroupConfig
->
tpc_PUCCH_RNTI
=
CALLOC
(
1
,
sizeof
(
NR_RNTI_Value_t
));
physicalCellGroupConfig
->
tpc_PUSCH_RNTI
=
CALLOC
(
1
,
sizeof
(
NR_RNTI_Value_t
));
physicalCellGroupConfig
->
sp_CSI_RNTI
=
CALLOC
(
1
,
sizeof
(
NR_RNTI_Value_t
));
*
(
physicalCellGroupConfig
->
harq_ACK_SpatialBundlingPUCCH
)
=
physicalcellgroup_config
->
harq_ACK_SpatialBundlingPUCCH
[
CC_id
];
*
(
physicalCellGroupConfig
->
harq_ACK_SpatialBundlingPUSCH
)
=
physicalcellgroup_config
->
harq_ACK_SpatialBundlingPUSCH
[
CC_id
];
*
(
physicalCellGroupConfig
->
p_NR_FR1
)
=
physicalcellgroup_config
->
p_NR
[
CC_id
];
...
...
@@ -1081,46 +1126,41 @@ void do_PHYSICALCELLGROUP(uint8_t Mod_id,
*
(
physicalCellGroupConfig
->
tpc_PUCCH_RNTI
)
=
physicalcellgroup_config
->
tpc_PUCCH_RNTI
[
CC_id
];
*
(
physicalCellGroupConfig
->
tpc_PUSCH_RNTI
)
=
physicalcellgroup_config
->
tpc_PUSCH_RNTI
[
CC_id
];
*
(
physicalCellGroupConfig
->
sp_CSI_RNTI
)
=
physicalcellgroup_config
->
sp_CSI_RNTI
[
CC_id
];
physicalCellGroupConfig
->
cs_RNTI
=
CALLOC
(
1
,
sizeof
(
struct
NR_SetupRelease_RNTI_Value
));
physicalCellGroupConfig
->
cs_RNTI
->
present
=
physicalcellgroup_config
->
RNTI_Value_PR
[
CC_id
];
if
(
physicalCellGroupConfig
->
cs_RNTI
->
present
==
NR_SetupRelease_RNTI_Value_PR_setup
){
if
(
physicalCellGroupConfig
->
cs_RNTI
->
present
==
NR_SetupRelease_RNTI_Value_PR_setup
)
{
physicalCellGroupConfig
->
cs_RNTI
->
choice
.
setup
=
physicalcellgroup_config
->
RNTI_Value
[
CC_id
];
}
}
void
do_SpCellConfig
(
uint8_t
Mod_id
,
int
CC_id
,
NR_SpCellConfig_t
*
spconfig
)
{
NR_SpCellConfig_t
*
spconfig
)
{
//spconfig->servCellIndex = CALLOC(1,sizeof(NR_ServCellIndex_t));
//*(spconfig->servCellIndex)=
gNB_RrcConfigurationReq
*
common_configuration
;
common_configuration
=
CALLOC
(
1
,
sizeof
(
gNB_RrcConfigurationReq
));
//Fill servingcellconfigcommon config value
rrc_config_servingcellconfigcommon
(
Mod_id
,
CC_id
#if defined(ENABLE_ITTI)
#if defined(ENABLE_ITTI)
,
common_configuration
#endif
#endif
);
//Fill common config to structure
do_SERVINGCELLCONFIGCOMMON
(
Mod_id
,
CC_id
,
#if defined(ENABLE_ITTI)
#if defined(ENABLE_ITTI)
common_configuration
,
#endif
#endif
0
);
spconfig
->
reconfigurationWithSync
=
CALLOC
(
1
,
sizeof
(
struct
NR_ReconfigurationWithSync
));
/*
/*
memcpy( spconfig->reconfigurationWithSync,
RC.nrrrc[Mod_id]->carrier[0].servingcellconfigcommon,
sizeof(struct NR_ServingCellConfigCommon));
*/
*/
}
openair2/RRC/NR/MESSAGES/asn1_msg.h
View file @
a006b395
...
...
@@ -72,23 +72,21 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier,
uint32_t
subCarrierSpacingCommon
,
uint32_t
dmrs_TypeA_Position
);
/**
\brief Generate configuration for SIB1 (
e
NB).
\brief Generate configuration for SIB1 (
g
NB).
@param carrier pointer to Carrier information
@param Mod_id Instance of eNB
@param Component carrier Component carrier to configure
@param configuration Pointer Configuration Request structure
@return size of encoded bit stream in bytes*/
uint8_t
do_SIB1_NR
(
rrc_gNB_carrier_data_t
*
carrier
,
int
Mod_id
,
int
CC_id
,
gNB_RrcConfigurationReq
*
configuration
);
uint8_t
do_SIB1_NR
(
rrc_gNB_carrier_data_t
*
carrier
#if defined(ENABLE_ITTI)
,
gNB_RrcConfigurationReq
*
configuration
#endif
);
void
do_SERVINGCELLCONFIGCOMMON
(
uint8_t
Mod_id
,
int
CC_id
,
#if defined(ENABLE_ITTI)
#if defined(ENABLE_ITTI)
gNB_RrcConfigurationReq
*
configuration
,
#endif
#endif
int
initial_flag
);
void
do_RLC_BEARER
(
uint8_t
Mod_id
,
...
...
openair2/RRC/NR/nr_rrc_defs.h
View file @
a006b395
...
...
@@ -56,8 +56,10 @@
//#include "RRCConnectionRequest.h"
//#include "RRCConnectionReestablishmentRequest.h"
#include "NR_RRCReestablishmentRequest.h"
//#include "
BCCH-DL-SCH-Message.h"
#include "NR_
BCCH-DL-SCH-Message.h"
#include "NR_BCCH-BCH-Message.h"
#include "NR_PLMN-IdentityInfo.h"
#include "NR_MCC-MNC-Digit.h"
//#include "MCCH-Message.h"
//#include "MBSFNAreaConfiguration-r9.h"
//#include "SCellToAddMod-r10.h"
...
...
@@ -374,6 +376,9 @@ typedef struct {
uint8_t
*
MIB
;
uint8_t
sizeof_MIB
;
uint8_t
*
SIB1
;
uint8_t
sizeof_SIB1
;
uint8_t
*
ServingCellConfigCommon
;
uint8_t
sizeof_servingcellconfigcommon
;
...
...
@@ -388,6 +393,7 @@ typedef struct {
//are the only static one (memory has been already allocated)
NR_BCCH_BCH_Message_t
mib
;
NR_BCCH_DL_SCH_Message_t
*
siblock1
;
NR_ServingCellConfigCommon_t
*
servingcellconfigcommon
;
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf
View file @
a006b395
...
...
@@ -262,7 +262,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_
SINGLE_THREAD
"
;
parallel_config
=
"PARALLEL_
RU_L1_TRX_SPLIT
"
;
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config
=
"WORKER_DISABLE"
;
}
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.273PRB.usrpn300.conf
0 → 100644
View file @
a006b395
Active_gNBs
= (
"gNB-Eurecom-5GNRBox"
);
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity
=
"none"
;
gNBs
=
(
{
//////////
Identification
parameters
:
gNB_ID
=
0
xe00
;
cell_type
=
"CELL_MACRO_GNB"
;
gNB_name
=
"gNB-Eurecom-5GNRBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
1
;
plmn_list
= ({
mcc
=
208
;
mnc
=
93
;
mnc_length
=
2
;});
tr_s_preference
=
"local_mac"
//////////
Physical
parameters
:
component_carriers
= (
{
node_function
=
"3GPP_gNODEB"
;
node_timing
=
"synch_to_ext_device"
;
node_synch_ref
=
0
;
frame_type
=
"TDD"
;
DL_prefix_type
=
"NORMAL"
;
UL_prefix_type
=
"NORMAL"
;
eutra_band
=
78
;
downlink_frequency
=
3510000000
L
;
uplink_frequency_offset
= -
120000000
;
Nid_cell
=
0
;
N_RB_DL
=
273
;
nb_antenna_ports
=
1
;
nb_antennas_tx
=
1
;
nb_antennas_rx
=
1
;
tx_gain
=
90
;
rx_gain
=
125
;
MIB_subCarrierSpacingCommon
=
30
;
MIB_ssb_SubcarrierOffset
=
0
;
MIB_dmrs_TypeA_Position
=
2
;
pdcch_ConfigSIB1
=
0
;
SIB1_frequencyOffsetSSB
=
"khz5"
;
SIB1_ssb_PeriodicityServingCell
=
5
;
SIB1_ss_PBCH_BlockPower
= -
60
;
absoluteFrequencySSB
=
0
;
DL_FreqBandIndicatorNR
=
15
;
DL_absoluteFrequencyPointA
=
15
;
DL_offsetToCarrier
=
15
;
DL_SCS_SubcarrierSpacing
=
"kHz30"
;
DL_SCS_SpecificCarrier_k0
=
0
;
DL_carrierBandwidth
=
15
;
DL_locationAndBandwidth
=
15
;
DL_BWP_SubcarrierSpacing
=
"kHz30"
;
DL_BWP_prefix_type
=
"NORMAL"
;
UL_FreqBandIndicatorNR
=
15
;
UL_absoluteFrequencyPointA
=
13
;
UL_additionalSpectrumEmission
=
3
;
UL_p_Max
= -
1
;
UL_frequencyShift7p5khz
=
"TRUE"
;
UL_offsetToCarrier
=
10
;
UL_SCS_SubcarrierSpacing
=
"kHz30"
;
UL_SCS_SpecificCarrier_k0
=
0
;
UL_carrierBandwidth
=
15
;
UL_locationAndBandwidth
=
15
;
UL_BWP_SubcarrierSpacing
=
"kHz30"
;
UL_BWP_prefix_type
=
"NORMAL"
;
UL_timeAlignmentTimerCommon
=
"infinity"
;
ServingCellConfigCommon_n_TimingAdvanceOffset
=
"n0"
ServingCellConfigCommon_ssb_PositionsInBurst_PR
=
0
x01
;
ServingCellConfigCommon_ssb_periodicityServingCell
=
10
;
ServingCellConfigCommon_dmrs_TypeA_Position
=
2
;
NIA_SubcarrierSpacing
=
"kHz15"
;
ServingCellConfigCommon_ss_PBCH_BlockPower
= -
60
;
referenceSubcarrierSpacing
=
"kHz15"
;
dl_UL_TransmissionPeriodicity
=
"ms0p5"
;
nrofDownlinkSlots
=
10
;
nrofDownlinkSymbols
=
10
;
nrofUplinkSlots
=
10
;
nrofUplinkSymbols
=
10
;
rach_totalNumberOfRA_Preambles
=
63
;
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice
=
"oneEighth"
;
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth
=
4
;
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth
=
8
;
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf
=
16
;
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one
=
24
;
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two
=
32
;
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four
=
8
;
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight
=
4
;
rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen
=
2
;
rach_groupBconfigured
=
"ENABLE"
;
rach_ra_Msg3SizeGroupA
=
56
;
rach_messagePowerOffsetGroupB
=
"dB0"
;
rach_numberOfRA_PreamblesGroupA
=
32
;
rach_ra_ContentionResolutionTimer
=
8
;
rsrp_ThresholdSSB
=
64
;
rsrp_ThresholdSSB_SUL
=
64
;
prach_RootSequenceIndex_choice
=
"l839"
;
prach_RootSequenceIndex_l839
=
0
;
prach_RootSequenceIndex_l139
=
0
;
prach_msg1_SubcarrierSpacing
=
"kHz30"
;
restrictedSetConfig
=
"unrestrictedSet"
;
msg3_transformPrecoding
=
"ENABLE"
;
prach_ConfigurationIndex
=
10
;
prach_msg1_FDM
=
"one"
;
prach_msg1_FrequencyStart
=
10
;
zeroCorrelationZoneConfig
=
10
;
preambleReceivedTargetPower
= -
150
;
preambleTransMax
=
6
;
powerRampingStep
=
"dB0"
;
ra_ResponseWindow
=
8
;
groupHoppingEnabledTransformPrecoding
=
"ENABLE"
;
msg3_DeltaPreamble
=
0
;
p0_NominalWithGrant
=
0
;
PUSCH_TimeDomainResourceAllocation_k2
=
0
;
PUSCH_TimeDomainResourceAllocation_mappingType
=
"typeA"
;
PUSCH_TimeDomainResourceAllocation_startSymbolAndLength
=
0
;
pucch_ResourceCommon
=
0
;
pucch_GroupHopping
=
"neither"
;
hoppingId
=
0
;
p0_nominal
= -
30
;
PDSCH_TimeDomainResourceAllocation_k0
=
2
;
PDSCH_TimeDomainResourceAllocation_mappingType
=
"typeA"
;
PDSCH_TimeDomainResourceAllocation_startSymbolAndLength
=
0
;
rateMatchPatternId
=
0
;
RateMatchPattern_patternType
=
"bitmaps"
;
symbolsInResourceBlock
=
"oneSlot"
;
periodicityAndPattern
=
2
;
RateMatchPattern_controlResourceSet
=
5
;
RateMatchPattern_subcarrierSpacing
=
"kHz30"
;
RateMatchPattern_mode
=
"dynamic"
;
controlResourceSetZero
=
0
;
searchSpaceZero
=
0
;
searchSpaceSIB1
=
10
;
searchSpaceOtherSystemInformation
=
10
;
pagingSearchSpace
=
10
;
ra_SearchSpace
=
10
;
PDCCH_common_controlResourceSetId
=
5
;
PDCCH_common_ControlResourceSet_duration
=
2
;
PDCCH_cce_REG_MappingType
=
"nonInterleaved"
;
PDCCH_reg_BundleSize
=
3
;
PDCCH_interleaverSize
=
3
;
PDCCH_shiftIndex
=
10
;
PDCCH_precoderGranularity
=
"sameAsREG-bundle"
;
PDCCH_TCI_StateId
=
32
;
tci_PresentInDCI
=
"ENABLE"
;
PDCCH_DMRS_ScramblingID
=
0
;
SearchSpaceId
=
10
;
commonSearchSpaces_controlResourceSetId
=
5
;
SearchSpace_monitoringSlotPeriodicityAndOffset_choice
=
"sl1"
;
SearchSpace_monitoringSlotPeriodicityAndOffset_value
=
0
;
SearchSpace_duration
=
2
;
SearchSpace_nrofCandidates_aggregationLevel1
=
0
;
SearchSpace_nrofCandidates_aggregationLevel2
=
0
;
SearchSpace_nrofCandidates_aggregationLevel4
=
0
;
SearchSpace_nrofCandidates_aggregationLevel8
=
0
;
SearchSpace_nrofCandidates_aggregationLevel16
=
0
;
SearchSpace_searchSpaceType
=
"common"
;
Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1
=
1
;
Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2
=
1
;
Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4
=
1
;
Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8
=
1
;
Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16
=
1
;
Common_dci_Format2_3_monitoringPeriodicity
=
1
;
Common_dci_Format2_3_nrofPDCCH_Candidates
=
1
;
ue_Specific__dci_Formats
=
"formats0-0-And-1-0"
;
RateMatchPatternLTE_CRS_carrierFreqDL
=
6
;
RateMatchPatternLTE_CRS_carrierBandwidthDL
=
6
;
RateMatchPatternLTE_CRS_nrofCRS_Ports
=
1
;
RateMatchPatternLTE_CRS_v_Shift
=
0
;
RateMatchPatternLTE_CRS_radioframeAllocationPeriod
=
1
;
RateMatchPatternLTE_CRS_radioframeAllocationOffset
=
0
;
RateMatchPatternLTE_CRS_subframeAllocation_choice
=
"oneFrame"
;
}
);
srb1_parameters
:
{
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
timer_poll_retransmit
=
80
;
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
timer_reordering
=
35
;
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
timer_status_prohibit
=
0
;
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
poll_pdu
=
4
;
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
poll_byte
=
99999
;
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
max_retx_threshold
=
4
;
}
# ------- SCTP definitions
SCTP
:
{
# Number of streams to use in input/output
SCTP_INSTREAMS
=
2
;
SCTP_OUTSTREAMS
=
2
;
};
//////////
MME
parameters
:
mme_ip_address
= ( {
ipv4
=
"192.168.12.26"
;
ipv6
=
"192:168:30::17"
;
active
=
"yes"
;
preference
=
"ipv4"
;
}
);
NETWORK_INTERFACES
:
{
GNB_INTERFACE_NAME_FOR_S1_MME
=
"eth0"
;
GNB_IPV4_ADDRESS_FOR_S1_MME
=
"192.168.12.111/24"
;
GNB_INTERFACE_NAME_FOR_S1U
=
"eth0"
;
GNB_IPV4_ADDRESS_FOR_S1U
=
"192.168.12.111/24"
;
GNB_PORT_FOR_S1U
=
2152
;
# Spec 2152
};
}
);
MACRLCs
= (
{
num_cc
=
1
;
tr_s_preference
=
"local_L1"
;
tr_n_preference
=
"local_RRC"
;
}
);
L1s
= (
{
num_cc
=
1
;
tr_n_preference
=
"local_mac"
;
}
);
RUs
= (
{
local_rf
=
"yes"
nb_tx
=
1
nb_rx
=
1
att_tx
=
0
att_rx
=
0
;
bands
= [
7
];
max_pdschReferenceSignalPower
= -
27
;
max_rxgain
=
114
;
eNB_instances
= [
0
];
sdr_addrs
=
"addr=192.168.10.2,second_addr=192.168.20.2,mgmt_addr=192.168.10.2,clock_source=external,time_source=external"
;
}
);
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"
;
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config
=
"WORKER_ENABLE"
;
}
);
log_config
:
{
global_log_level
=
"info"
;
global_log_verbosity
=
"medium"
;
hw_log_level
=
"info"
;
hw_log_verbosity
=
"medium"
;
phy_log_level
=
"info"
;
phy_log_verbosity
=
"medium"
;
mac_log_level
=
"info"
;
mac_log_verbosity
=
"high"
;
rlc_log_level
=
"info"
;
rlc_log_verbosity
=
"medium"
;
pdcp_log_level
=
"info"
;
pdcp_log_verbosity
=
"medium"
;
rrc_log_level
=
"info"
;
rrc_log_verbosity
=
"medium"
;
};
targets/RT/USER/lte-ru.c
View file @
a006b395
...
...
@@ -2731,11 +2731,6 @@ void init_RU(char *rf_config_file,
else
ru
->
generate_dmrs_sync
=
0
;
if
(
ru
->
generate_dmrs_sync
==
1
)
{
generate_ul_ref_sigs
();
ru
->
dmrssync
=
(
int16_t
*
)
malloc16_clear
(
ru
->
frame_parms
->
ofdm_symbol_size
*
2
*
sizeof
(
int16_t
));
}
ru
->
wakeup_L1_sleeptime
=
2000
;
ru
->
wakeup_L1_sleep_cnt_max
=
3
;
...
...
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