Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
常顺宇
OpenXG-RAN
Commits
7474b69c
Commit
7474b69c
authored
Nov 19, 2018
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added missing files. updates for testing in eMTC configuration after merge.
parent
6266d5c3
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
1689 additions
and
9 deletions
+1689
-9
openair1/SCHED/fapi_l1.c
openair1/SCHED/fapi_l1.c
+2
-2
openair2/ENB_APP/enb_config_SL.c
openair2/ENB_APP/enb_config_SL.c
+293
-0
openair2/ENB_APP/enb_config_eMTC.c
openair2/ENB_APP/enb_config_eMTC.c
+1210
-0
openair2/ENB_APP/enb_paramdef_sidelink.h
openair2/ENB_APP/enb_paramdef_sidelink.h
+183
-0
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+0
-5
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+1
-2
No files found.
openair1/SCHED/fapi_l1.c
View file @
7474b69c
...
...
@@ -98,9 +98,9 @@ void handle_nfapi_hi_dci0_mpdcch_dci_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc
nfapi_hi_dci0_request_pdu_t
*
hi_dci0_config_pdu
)
{
int
idx
=
proc
->
subframe_tx
&
1
;
LTE_eNB_
PDCCH
*
pdcch_vars
=
&
eNB
->
mpdcch_vars
[
idx
];
LTE_eNB_
MPDCCH
*
pdcch_vars
=
&
eNB
->
mpdcch_vars
[
idx
];
// copy dci configuration in to eNB structure
fill_mpdcch_dci0
(
eNB
,
proc
,
&
pdcch_vars
->
dci_alloc
[
pdcch_vars
->
num_dci
],
&
hi_dci0_config_pdu
->
dci_pdu
);
fill_mpdcch_dci0
(
eNB
,
proc
,
&
pdcch_vars
->
m
dci_alloc
[
pdcch_vars
->
num_dci
],
&
hi_dci0_config_pdu
->
dci_pdu
);
}
void
handle_nfapi_hi_dci0_hi_pdu
(
PHY_VARS_eNB
*
eNB
,
int
frame
,
int
subframe
,
eNB_rxtx_proc_t
*
proc
,
...
...
openair2/ENB_APP/enb_config_SL.c
0 → 100644
View file @
7474b69c
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*
enb_config_SL.c
-------------------
AUTHOR : T.T.Nguyen / R. Knopp
COMPANY : EURECOM
EMAIL : raymond.knopp@eurecom.fr
*/
#include <string.h>
#include <inttypes.h>
#include "common/utils/LOG/log.h"
#include "assertions.h"
#include "enb_config.h"
#include "intertask_interface.h"
#include "SystemInformationBlockType2.h"
#include "common/config/config_userapi.h"
#include "RRC_config_tools.h"
#include "enb_paramdef.h"
#include "enb_paramdef_sidelink.h"
void
fill_SL_configuration
(
MessageDef
*
msg_p
,
ccparams_sidelink_t
*
SLconfig
,
int
cell_idx
,
int
cc_idx
,
char
*
config_fname
)
{
printf
(
"Configuring SL
\n
"
);
//SIB18
if
(
strcmp
(
SLconfig
->
rxPool_sc_CP_Len
,
"normal"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_sc_CP_Len
[
cc_idx
]
=
LTE_SL_CP_Len_r12_normal
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_sc_CP_Len
,
"extended"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_sc_CP_Len
[
cc_idx
]
=
LTE_SL_CP_Len_r12_extended
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for rxPool_sc_CP_Len choice: normal,extended!
\n
"
,
config_fname
,
cell_idx
,
SLconfig
->
rxPool_sc_CP_Len
);
if
(
strcmp
(
SLconfig
->
rxPool_sc_Period
,
"sf40"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_sc_Period
[
cc_idx
]
=
LTE_SL_PeriodComm_r12_sf40
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_sc_Period
,
"sf60"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_sc_Period
[
cc_idx
]
=
LTE_SL_PeriodComm_r12_sf60
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_sc_Period
,
"sf70"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_sc_Period
[
cc_idx
]
=
LTE_SL_PeriodComm_r12_sf70
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_sc_Period
,
"sf80"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_sc_Period
[
cc_idx
]
=
LTE_SL_PeriodComm_r12_sf80
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_sc_Period
,
"sf120"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_sc_Period
[
cc_idx
]
=
LTE_SL_PeriodComm_r12_sf120
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_sc_Period
,
"sf140"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_sc_Period
[
cc_idx
]
=
LTE_SL_PeriodComm_r12_sf140
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_sc_Period
,
"sf160"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_sc_Period
[
cc_idx
]
=
LTE_SL_PeriodComm_r12_sf160
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_sc_Period
,
"sf240"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_sc_Period
[
cc_idx
]
=
LTE_SL_PeriodComm_r12_sf240
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_sc_Period
,
"sf280"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_sc_Period
[
cc_idx
]
=
LTE_SL_PeriodComm_r12_sf280
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_sc_Period
,
"sf320"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_sc_Period
[
cc_idx
]
=
LTE_SL_PeriodComm_r12_sf320
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_sc_Period
,
"spare6"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_sc_Period
[
cc_idx
]
=
LTE_SL_PeriodComm_r12_spare6
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_sc_Period
,
"spare5"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_sc_Period
[
cc_idx
]
=
LTE_SL_PeriodComm_r12_spare5
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_sc_Period
,
"spare4"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_sc_Period
[
cc_idx
]
=
LTE_SL_PeriodComm_r12_spare4
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_sc_Period
,
"spare3"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_sc_Period
[
cc_idx
]
=
LTE_SL_PeriodComm_r12_spare3
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_sc_Period
,
"spare2"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_sc_Period
[
cc_idx
]
=
LTE_SL_PeriodComm_r12_spare2
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_sc_Period
,
"spare"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_sc_Period
[
cc_idx
]
=
LTE_SL_PeriodComm_r12_spare
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for rxPool_sc_Period choice: sf40,sf60,sf70,sf80,sf120,sf140,sf160,sf240,sf280,sf320,spare6,spare5,spare4,spare3,spare2,spare!
\n
"
,
config_fname
,
cell_idx
,
SLconfig
->
rxPool_sc_Period
);
if
(
strcmp
(
SLconfig
->
rxPool_data_CP_Len
,
"normal"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_data_CP_Len
[
cc_idx
]
=
LTE_SL_CP_Len_r12_normal
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_data_CP_Len
,
"extended"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_data_CP_Len
[
cc_idx
]
=
LTE_SL_CP_Len_r12_extended
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for rxPool_data_CP_Len choice: normal,extended!
\n
"
,
config_fname
,
cell_idx
,
SLconfig
->
rxPool_data_CP_Len
);
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_ResourceConfig_prb_Num
[
cc_idx
]
=
SLconfig
->
rxPool_ResourceConfig_prb_Num
;
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_ResourceConfig_prb_Start
[
cc_idx
]
=
SLconfig
->
rxPool_ResourceConfig_prb_Start
;
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_ResourceConfig_prb_End
[
cc_idx
]
=
SLconfig
->
rxPool_ResourceConfig_prb_End
;
if
(
strcmp
(
SLconfig
->
rxPool_ResourceConfig_offsetIndicator_present
,
"prNothing"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_ResourceConfig_offsetIndicator_present
[
cc_idx
]
=
LTE_SL_OffsetIndicator_r12_PR_NOTHING
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_ResourceConfig_offsetIndicator_present
,
"prSmall"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_ResourceConfig_offsetIndicator_present
[
cc_idx
]
=
LTE_SL_OffsetIndicator_r12_PR_small_r12
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_ResourceConfig_offsetIndicator_present
,
"prLarge"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_ResourceConfig_offsetIndicator_present
[
cc_idx
]
=
LTE_SL_OffsetIndicator_r12_PR_large_r12
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for rxPool_ResourceConfig_offsetIndicator_present choice: prNothing,prSmal,prLarge!
\n
"
,
config_fname
,
cell_idx
,
SLconfig
->
rxPool_ResourceConfig_offsetIndicator_present
);
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_ResourceConfig_offsetIndicator_choice
[
cc_idx
]
=
SLconfig
->
rxPool_ResourceConfig_offsetIndicator_choice
;
if
(
strcmp
(
SLconfig
->
rxPool_ResourceConfig_subframeBitmap_present
,
"prNothing"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_NOTHING
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_ResourceConfig_subframeBitmap_present
,
"prBs4"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs4_r12
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_ResourceConfig_subframeBitmap_present
,
"prBs8"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs8_r12
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_ResourceConfig_subframeBitmap_present
,
"prBs12"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs12_r12
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_ResourceConfig_subframeBitmap_present
,
"prBs16"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs16_r12
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_ResourceConfig_subframeBitmap_present
,
"prBs30"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs30_r12
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_ResourceConfig_subframeBitmap_present
,
"prBs40"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs40_r12
;
}
else
if
(
strcmp
(
SLconfig
->
rxPool_ResourceConfig_subframeBitmap_present
,
"prBs42"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs42_r12
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for rxPool_ResourceConfig_subframeBitmap_present choice: prNothing,prBs4,prBs8,prBs12,prBs16,prBs30,prBs40,prBs42!
\n
"
,
config_fname
,
cell_idx
,
SLconfig
->
rxPool_ResourceConfig_subframeBitmap_present
);
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_ResourceConfig_subframeBitmap_choice_bs_buf
[
cc_idx
]
=
SLconfig
->
rxPool_ResourceConfig_subframeBitmap_choice_bs_buf
;
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_ResourceConfig_subframeBitmap_choice_bs_size
[
cc_idx
]
=
SLconfig
->
rxPool_ResourceConfig_subframeBitmap_choice_bs_size
;
RRC_CONFIGURATION_REQ
(
msg_p
).
rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused
[
cc_idx
]
=
SLconfig
->
rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused
;
//SIB19 - for discRxPool
if
(
strcmp
(
SLconfig
->
discRxPool_cp_Len
,
"normal"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_cp_Len
[
cc_idx
]
=
LTE_SL_CP_Len_r12_normal
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPool_cp_Len
,
"extended"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_cp_Len
[
cc_idx
]
=
LTE_SL_CP_Len_r12_extended
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for discRxPool_cp_Len choice: normal,extended!
\n
"
,
config_fname
,
cell_idx
,
SLconfig
->
discRxPool_cp_Len
);
if
(
strcmp
(
SLconfig
->
discRxPool_discPeriod
,
"rf32"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_discPeriod
[
cc_idx
]
=
LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf32
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPool_discPeriod
,
"rf64"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_discPeriod
[
cc_idx
]
=
LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf64
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPool_discPeriod
,
"rf128"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_discPeriod
[
cc_idx
]
=
LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf128
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPool_discPeriod
,
"rf256"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_discPeriod
[
cc_idx
]
=
LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf256
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPool_discPeriod
,
"rf512"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_discPeriod
[
cc_idx
]
=
LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf512
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPool_discPeriod
,
"rf1024"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_discPeriod
[
cc_idx
]
=
LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf1024
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPool_discPeriod
,
"rf16"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_discPeriod
[
cc_idx
]
=
LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf16_v1310
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPool_discPeriod
,
"spare"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_discPeriod
[
cc_idx
]
=
LTE_SL_DiscResourcePool_r12__discPeriod_r12_spare
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for discRxPool_discPeriod choice: rf32,rf64,rf128,rf512,rf1024,rf16,spare!
\n
"
,
config_fname
,
cell_idx
,
SLconfig
->
discRxPool_discPeriod
);
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_numRetx
[
cc_idx
]
=
SLconfig
->
discRxPool_numRetx
;
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_numRepetition
[
cc_idx
]
=
SLconfig
->
discRxPool_numRepetition
;
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_ResourceConfig_prb_Num
[
cc_idx
]
=
SLconfig
->
discRxPool_ResourceConfig_prb_Num
;
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_ResourceConfig_prb_Start
[
cc_idx
]
=
SLconfig
->
discRxPool_ResourceConfig_prb_Start
;
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_ResourceConfig_prb_End
[
cc_idx
]
=
SLconfig
->
discRxPool_ResourceConfig_prb_End
;
if
(
strcmp
(
SLconfig
->
discRxPool_ResourceConfig_offsetIndicator_present
,
"prNothing"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_ResourceConfig_offsetIndicator_present
[
cc_idx
]
=
LTE_SL_OffsetIndicator_r12_PR_NOTHING
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPool_ResourceConfig_offsetIndicator_present
,
"prSmall"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_ResourceConfig_offsetIndicator_present
[
cc_idx
]
=
LTE_SL_OffsetIndicator_r12_PR_small_r12
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPool_ResourceConfig_offsetIndicator_present
,
"prLarge"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_ResourceConfig_offsetIndicator_present
[
cc_idx
]
=
LTE_SL_OffsetIndicator_r12_PR_large_r12
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for discRxPool_ResourceConfig_offsetIndicator_present choice: prNothing,prSmal,prLarge!
\n
"
,
config_fname
,
cell_idx
,
SLconfig
->
discRxPool_ResourceConfig_offsetIndicator_present
);
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_ResourceConfig_offsetIndicator_choice
[
cc_idx
]
=
SLconfig
->
discRxPool_ResourceConfig_offsetIndicator_choice
;
if
(
strcmp
(
SLconfig
->
discRxPool_ResourceConfig_subframeBitmap_present
,
"prNothing"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_NOTHING
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPool_ResourceConfig_subframeBitmap_present
,
"prBs4"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs4_r12
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPool_ResourceConfig_subframeBitmap_present
,
"prBs8"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs8_r12
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPool_ResourceConfig_subframeBitmap_present
,
"prBs12"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs12_r12
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPool_ResourceConfig_subframeBitmap_present
,
"prBs16"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs16_r12
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPool_ResourceConfig_subframeBitmap_present
,
"prBs30"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs30_r12
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPool_ResourceConfig_subframeBitmap_present
,
"prBs40"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs40_r12
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPool_ResourceConfig_subframeBitmap_present
,
"prBs42"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs42_r12
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for discRxPool_ResourceConfig_subframeBitmap_present choice: prNothing,prBs4,prBs8,prBs12,prBs16,prBs30,prBs40,prBs42!
\n
"
,
config_fname
,
cell_idx
,
SLconfig
->
discRxPool_ResourceConfig_subframeBitmap_present
);
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf
[
cc_idx
]
=
SLconfig
->
discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf
;
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_ResourceConfig_subframeBitmap_choice_bs_size
[
cc_idx
]
=
SLconfig
->
discRxPool_ResourceConfig_subframeBitmap_choice_bs_size
;
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused
[
cc_idx
]
=
SLconfig
->
discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused
;
//SIB19 - For discRxPoolPS
if
(
strcmp
(
SLconfig
->
discRxPoolPS_cp_Len
,
"normal"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_cp_Len
[
cc_idx
]
=
LTE_SL_CP_Len_r12_normal
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPoolPS_cp_Len
,
"extended"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_cp_Len
[
cc_idx
]
=
LTE_SL_CP_Len_r12_extended
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for discRxPoolPS_cp_Len choice: normal,extended!
\n
"
,
config_fname
,
cell_idx
,
SLconfig
->
discRxPoolPS_cp_Len
);
if
(
strcmp
(
SLconfig
->
discRxPoolPS_discPeriod
,
"rf32"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_discPeriod
[
cc_idx
]
=
LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf32
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPoolPS_discPeriod
,
"rf64"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_discPeriod
[
cc_idx
]
=
LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf64
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPoolPS_discPeriod
,
"rf128"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_discPeriod
[
cc_idx
]
=
LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf128
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPoolPS_discPeriod
,
"rf256"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_discPeriod
[
cc_idx
]
=
LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf256
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPoolPS_discPeriod
,
"rf512"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_discPeriod
[
cc_idx
]
=
LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf512
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPoolPS_discPeriod
,
"rf1024"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_discPeriod
[
cc_idx
]
=
LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf1024
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPoolPS_discPeriod
,
"rf16"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_discPeriod
[
cc_idx
]
=
LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf16_v1310
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPoolPS_discPeriod
,
"spare"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_discPeriod
[
cc_idx
]
=
LTE_SL_DiscResourcePool_r12__discPeriod_r12_spare
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for discRxPoolPS_discPeriod choice: rf32,rf64,rf128,rf512,rf1024,rf16,spare!
\n
"
,
config_fname
,
cell_idx
,
SLconfig
->
discRxPoolPS_discPeriod
);
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_numRetx
[
cc_idx
]
=
SLconfig
->
discRxPoolPS_numRetx
;
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_numRepetition
[
cc_idx
]
=
SLconfig
->
discRxPoolPS_numRepetition
;
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_ResourceConfig_prb_Num
[
cc_idx
]
=
SLconfig
->
discRxPoolPS_ResourceConfig_prb_Num
;
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_ResourceConfig_prb_Start
[
cc_idx
]
=
SLconfig
->
discRxPoolPS_ResourceConfig_prb_Start
;
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_ResourceConfig_prb_End
[
cc_idx
]
=
SLconfig
->
discRxPoolPS_ResourceConfig_prb_End
;
if
(
strcmp
(
SLconfig
->
discRxPoolPS_ResourceConfig_offsetIndicator_present
,
"prNothing"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_ResourceConfig_offsetIndicator_present
[
cc_idx
]
=
LTE_SL_OffsetIndicator_r12_PR_NOTHING
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPoolPS_ResourceConfig_offsetIndicator_present
,
"prSmall"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_ResourceConfig_offsetIndicator_present
[
cc_idx
]
=
LTE_SL_OffsetIndicator_r12_PR_small_r12
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPoolPS_ResourceConfig_offsetIndicator_present
,
"prLarge"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_ResourceConfig_offsetIndicator_present
[
cc_idx
]
=
LTE_SL_OffsetIndicator_r12_PR_large_r12
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for discRxPoolPS_ResourceConfig_offsetIndicator_present choice: prNothing,prSmal,prLarge!
\n
"
,
config_fname
,
cell_idx
,
SLconfig
->
discRxPoolPS_ResourceConfig_offsetIndicator_present
);
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_ResourceConfig_offsetIndicator_choice
[
cc_idx
]
=
SLconfig
->
discRxPoolPS_ResourceConfig_offsetIndicator_choice
;
if
(
strcmp
(
SLconfig
->
discRxPoolPS_ResourceConfig_subframeBitmap_present
,
"prNothing"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_NOTHING
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPoolPS_ResourceConfig_subframeBitmap_present
,
"prBs4"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs4_r12
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPoolPS_ResourceConfig_subframeBitmap_present
,
"prBs8"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs8_r12
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPoolPS_ResourceConfig_subframeBitmap_present
,
"prBs12"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs12_r12
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPoolPS_ResourceConfig_subframeBitmap_present
,
"prBs16"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs16_r12
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPoolPS_ResourceConfig_subframeBitmap_present
,
"prBs30"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs30_r12
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPoolPS_ResourceConfig_subframeBitmap_present
,
"prBs40"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs40_r12
;
}
else
if
(
strcmp
(
SLconfig
->
discRxPoolPS_ResourceConfig_subframeBitmap_present
,
"prBs42"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_ResourceConfig_subframeBitmap_present
[
cc_idx
]
=
LTE_SubframeBitmapSL_r12_PR_bs42_r12
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for discRxPoolPS_ResourceConfig_subframeBitmap_present choice: prNothing,prBs4,prBs8,prBs12,prBs16,prBs30,prBs40,prBs42!
\n
"
,
config_fname
,
cell_idx
,
SLconfig
->
discRxPoolPS_ResourceConfig_subframeBitmap_present
);
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_buf
[
cc_idx
]
=
SLconfig
->
discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_buf
;
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_size
[
cc_idx
]
=
SLconfig
->
discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_size
;
RRC_CONFIGURATION_REQ
(
msg_p
).
discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_bits_unused
[
cc_idx
]
=
SLconfig
->
discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_bits_unused
;
}
// sidelink_configured==1
openair2/ENB_APP/enb_config_eMTC.c
0 → 100644
View file @
7474b69c
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*
enb_config_SL.c
-------------------
AUTHOR : R. Knopp
COMPANY : EURECOM
EMAIL : raymond.knopp@eurecom.fr
*/
#include <string.h>
#include <inttypes.h>
#include "common/utils/LOG/log.h"
#include "assertions.h"
#include "enb_config.h"
#include "intertask_interface.h"
#include "SystemInformationBlockType2.h"
#include "common/config/config_userapi.h"
#include "RRC_config_tools.h"
#include "enb_paramdef.h"
void
fill_eMTC_configuration
(
MessageDef
*
msg_p
,
ccparams_eMTC_t
*
eMTCconfig
,
int
cell_idx
,
int
cc_idx
,
char
*
config_fname
,
char
*
brparamspath
)
{
paramdef_t
schedulingInfoBrParams
[]
=
SI_INFO_BR_DESC
(
eMTCconfig
);
paramlist_def_t
schedulingInfoBrParamList
=
{
ENB_CONFIG_STRING_SCHEDULING_INFO_BR
,
NULL
,
0
};
paramdef_t
rachcelevelParams
[]
=
RACH_CE_LEVELINFOLIST_R13_DESC
(
eMTCconfig
);
paramlist_def_t
rachcelevellist
=
{
ENB_CONFIG_STRING_RACH_CE_LEVELINFOLIST_R13
,
NULL
,
0
};
paramdef_t
rsrprangeParams
[]
=
RSRP_RANGE_LIST_DESC
(
eMTCconfig
);
paramlist_def_t
rsrprangelist
=
{
ENB_CONFIG_STRING_RSRP_RANGE_LIST
,
NULL
,
0
};
paramdef_t
prachParams
[]
=
PRACH_PARAMS_CE_R13_DESC
(
eMTCconfig
);
paramlist_def_t
prachParamslist
=
{
ENB_CONFIG_STRING_PRACH_PARAMETERS_CE_R13
,
NULL
,
0
};
paramdef_t
n1PUCCH_ANR13Params
[]
=
N1PUCCH_AN_INFOLIST_R13_DESC
(
eMTCconfig
);
paramlist_def_t
n1PUCCHInfoList
=
{
ENB_CONFIG_STRING_N1PUCCH_AN_INFOLIST_R13
,
NULL
,
0
};
paramdef_t
pcchv1310Params
[]
=
PCCH_CONFIG_V1310_DESC
(
eMTCconfig
);
paramdef_t
sib2freqhoppingParams
[]
=
SIB2_FREQ_HOPPING_R13_DESC
(
eMTCconfig
);
printf
(
"Found parameters for eMTC from %s : %s
\n
"
,
config_fname
,
brparamspath
);
RRC_CONFIGURATION_REQ
(
msg_p
).
schedulingInfoSIB1_BR_r13
[
cc_idx
]
=
eMTCconfig
->
schedulingInfoSIB1_BR_r13
;
if
(
!
strcmp
(
eMTCconfig
->
cellSelectionInfoCE_r13
,
"ENABLE"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
cellSelectionInfoCE_r13
[
cc_idx
]
=
TRUE
;
RRC_CONFIGURATION_REQ
(
msg_p
).
q_RxLevMinCE_r13
[
cc_idx
]
=
eMTCconfig
->
q_RxLevMinCE_r13
;
// RRC_CONFIGURATION_REQ(msg_p).q_QualMinRSRQ_CE_r13[cc_idx]= calloc(1, sizeof(long));
// *RRC_CONFIGURATION_REQ(msg_p).q_QualMinRSRQ_CE_r13[cc_idx]= q_QualMinRSRQ_CE_r13;
}
else
{
RRC_CONFIGURATION_REQ
(
msg_p
).
cellSelectionInfoCE_r13
[
cc_idx
]
=
FALSE
;
}
if
(
!
strcmp
(
eMTCconfig
->
bandwidthReducedAccessRelatedInfo_r13
,
"ENABLE"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
bandwidthReducedAccessRelatedInfo_r13
[
cc_idx
]
=
TRUE
;
if
(
!
strcmp
(
eMTCconfig
->
si_WindowLength_BR_r13
,
"ms20"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
si_WindowLength_BR_r13
[
cc_idx
]
=
0
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
si_WindowLength_BR_r13
,
"ms40"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
si_WindowLength_BR_r13
[
cc_idx
]
=
1
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
si_WindowLength_BR_r13
,
"ms60"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
si_WindowLength_BR_r13
[
cc_idx
]
=
2
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
si_WindowLength_BR_r13
,
"ms80"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
si_WindowLength_BR_r13
[
cc_idx
]
=
3
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
si_WindowLength_BR_r13
,
"ms120"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
si_WindowLength_BR_r13
[
cc_idx
]
=
4
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
si_WindowLength_BR_r13
,
"ms160"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
si_WindowLength_BR_r13
[
cc_idx
]
=
5
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
si_WindowLength_BR_r13
,
"ms200"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
si_WindowLength_BR_r13
[
cc_idx
]
=
6
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
si_WindowLength_BR_r13
,
"spare"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
si_WindowLength_BR_r13
[
cc_idx
]
=
7
;
}
if
(
!
strcmp
(
eMTCconfig
->
si_RepetitionPattern_r13
,
"everyRF"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
si_RepetitionPattern_r13
[
cc_idx
]
=
0
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
si_RepetitionPattern_r13
,
"every2ndRF"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
si_RepetitionPattern_r13
[
cc_idx
]
=
1
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
si_RepetitionPattern_r13
,
"every4thRF"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
si_RepetitionPattern_r13
[
cc_idx
]
=
2
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
si_RepetitionPattern_r13
,
"every8thRF"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
si_RepetitionPattern_r13
[
cc_idx
]
=
3
;
}
}
else
{
RRC_CONFIGURATION_REQ
(
msg_p
).
bandwidthReducedAccessRelatedInfo_r13
[
cc_idx
]
=
FALSE
;
}
char
schedulingInfoBrPath
[
MAX_OPTNAME_SIZE
*
2
];
config_getlist
(
&
schedulingInfoBrParamList
,
NULL
,
0
,
brparamspath
);
RRC_CONFIGURATION_REQ
(
msg_p
).
scheduling_info_br_size
[
cc_idx
]
=
schedulingInfoBrParamList
.
numelt
;
int
siInfoindex
;
for
(
siInfoindex
=
0
;
siInfoindex
<
schedulingInfoBrParamList
.
numelt
;
siInfoindex
++
)
{
sprintf
(
schedulingInfoBrPath
,
"%s.%s.[%i]"
,
brparamspath
,
ENB_CONFIG_STRING_EMTC_PARAMETERS
,
siInfoindex
);
config_get
(
schedulingInfoBrParams
,
sizeof
(
schedulingInfoBrParams
)
/
sizeof
(
paramdef_t
),
schedulingInfoBrPath
);
RRC_CONFIGURATION_REQ
(
msg_p
).
si_Narrowband_r13
[
cc_idx
][
siInfoindex
]
=
eMTCconfig
->
si_Narrowband_r13
;
RRC_CONFIGURATION_REQ
(
msg_p
).
si_TBS_r13
[
cc_idx
][
siInfoindex
]
=
eMTCconfig
->
si_TBS_r13
;
}
// RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[cc_idx].system_info_value_tag_SI_size[cc_idx] = 0;
RRC_CONFIGURATION_REQ
(
msg_p
).
fdd_DownlinkOrTddSubframeBitmapBR_r13
[
cc_idx
]
=
CALLOC
(
1
,
sizeof
(
BOOLEAN_t
));
if
(
!
strcmp
(
eMTCconfig
->
fdd_DownlinkOrTddSubframeBitmapBR_r13
,
"subframePattern40-r13"
))
{
*
RRC_CONFIGURATION_REQ
(
msg_p
).
fdd_DownlinkOrTddSubframeBitmapBR_r13
[
cc_idx
]
=
FALSE
;
RRC_CONFIGURATION_REQ
(
msg_p
).
fdd_DownlinkOrTddSubframeBitmapBR_val_r13
[
cc_idx
]
=
eMTCconfig
->
fdd_DownlinkOrTddSubframeBitmapBR_val_r13
;
}
else
{
*
RRC_CONFIGURATION_REQ
(
msg_p
).
fdd_DownlinkOrTddSubframeBitmapBR_r13
[
cc_idx
]
=
TRUE
;
RRC_CONFIGURATION_REQ
(
msg_p
).
fdd_DownlinkOrTddSubframeBitmapBR_val_r13
[
cc_idx
]
=
eMTCconfig
->
fdd_DownlinkOrTddSubframeBitmapBR_val_r13
;
}
RRC_CONFIGURATION_REQ
(
msg_p
).
startSymbolBR_r13
[
cc_idx
]
=
eMTCconfig
->
startSymbolBR_r13
;
if
(
!
strcmp
(
eMTCconfig
->
si_HoppingConfigCommon_r13
,
"off"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
si_HoppingConfigCommon_r13
[
cc_idx
]
=
1
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
si_HoppingConfigCommon_r13
,
"on"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
si_HoppingConfigCommon_r13
[
cc_idx
]
=
0
;
}
RRC_CONFIGURATION_REQ
(
msg_p
).
si_ValidityTime_r13
[
cc_idx
]
=
calloc
(
1
,
sizeof
(
long
));
if
(
!
strcmp
(
eMTCconfig
->
si_ValidityTime_r13
,
"true"
))
{
*
RRC_CONFIGURATION_REQ
(
msg_p
).
si_ValidityTime_r13
[
cc_idx
]
=
0
;
}
else
{
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d si_ValidityTime_r13 unknown value!
\n
"
,
config_fname
,
cell_idx
);
}
if
(
!
strcmp
(
eMTCconfig
->
freqHoppingParametersDL_r13
,
"ENABLE"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
freqHoppingParametersDL_r13
[
cc_idx
]
=
TRUE
;
if
(
!
strcmp
(
eMTCconfig
->
interval_DLHoppingConfigCommonModeA_r13
,
"interval-TDD-r13"
))
RRC_CONFIGURATION_REQ
(
msg_p
).
interval_DLHoppingConfigCommonModeA_r13
[
cc_idx
]
=
FALSE
;
else
RRC_CONFIGURATION_REQ
(
msg_p
).
interval_DLHoppingConfigCommonModeA_r13
[
cc_idx
]
=
TRUE
;
RRC_CONFIGURATION_REQ
(
msg_p
).
interval_DLHoppingConfigCommonModeA_r13_val
[
cc_idx
]
=
eMTCconfig
->
interval_DLHoppingConfigCommonModeA_r13_val
;
if
(
!
strcmp
(
eMTCconfig
->
interval_DLHoppingConfigCommonModeB_r13
,
"interval-TDD-r13"
))
RRC_CONFIGURATION_REQ
(
msg_p
).
interval_DLHoppingConfigCommonModeB_r13
[
cc_idx
]
=
FALSE
;
else
RRC_CONFIGURATION_REQ
(
msg_p
).
interval_DLHoppingConfigCommonModeB_r13
[
cc_idx
]
=
TRUE
;
RRC_CONFIGURATION_REQ
(
msg_p
).
interval_DLHoppingConfigCommonModeB_r13_val
[
cc_idx
]
=
eMTCconfig
->
interval_DLHoppingConfigCommonModeB_r13_val
;
RRC_CONFIGURATION_REQ
(
msg_p
).
mpdcch_pdsch_HoppingNB_r13
[
cc_idx
]
=
calloc
(
1
,
sizeof
(
long
));
if
(
!
strcmp
(
eMTCconfig
->
mpdcch_pdsch_HoppingNB_r13
,
"nb2"
))
{
*
RRC_CONFIGURATION_REQ
(
msg_p
).
mpdcch_pdsch_HoppingNB_r13
[
cc_idx
]
=
0
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
mpdcch_pdsch_HoppingNB_r13
,
"nb4"
))
{
*
RRC_CONFIGURATION_REQ
(
msg_p
).
mpdcch_pdsch_HoppingNB_r13
[
cc_idx
]
=
1
;
}
else
{
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d mpdcch_pdsch_HoppingNB_r13 unknown value!
\n
"
,
config_fname
,
cell_idx
);
}
RRC_CONFIGURATION_REQ
(
msg_p
).
mpdcch_pdsch_HoppingOffset_r13
[
cc_idx
]
=
calloc
(
1
,
sizeof
(
long
));
*
RRC_CONFIGURATION_REQ
(
msg_p
).
mpdcch_pdsch_HoppingOffset_r13
[
cc_idx
]
=
eMTCconfig
->
mpdcch_pdsch_HoppingOffset_r13
;
}
else
{
RRC_CONFIGURATION_REQ
(
msg_p
).
freqHoppingParametersDL_r13
[
cc_idx
]
=
FALSE
;
}
/** ------------------------------SIB2/3 BR------------------------------------------ */
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
prach_root
=
eMTCconfig
->
ccparams
.
prach_root
;
if
((
eMTCconfig
->
ccparams
.
prach_root
<
0
)
||
(
eMTCconfig
->
ccparams
.
prach_root
>
1023
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for prach_root choice: 0..1023 !
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
prach_root
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
prach_config_index
=
eMTCconfig
->
ccparams
.
prach_config_index
;
if
((
eMTCconfig
->
ccparams
.
prach_config_index
<
0
)
||
(
eMTCconfig
->
ccparams
.
prach_config_index
>
63
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for prach_config_index choice: 0..1023 !
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
prach_config_index
);
if
(
!
eMTCconfig
->
ccparams
.
prach_high_speed
)
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d define %s: ENABLE,DISABLE!
\n
"
,
config_fname
,
cell_idx
,
ENB_CONFIG_STRING_PRACH_HIGH_SPEED
);
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
prach_high_speed
,
"ENABLE"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
prach_high_speed
=
TRUE
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
prach_high_speed
,
"DISABLE"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
prach_high_speed
=
FALSE
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for prach_config choice: ENABLE,DISABLE !
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
prach_high_speed
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
prach_zero_correlation
=
eMTCconfig
->
ccparams
.
prach_zero_correlation
;
if
((
eMTCconfig
->
ccparams
.
prach_zero_correlation
<
0
)
||
(
eMTCconfig
->
ccparams
.
prach_zero_correlation
>
15
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for prach_zero_correlation choice: 0..15!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
prach_zero_correlation
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
prach_freq_offset
=
eMTCconfig
->
ccparams
.
prach_freq_offset
;
if
((
eMTCconfig
->
ccparams
.
prach_freq_offset
<
0
)
||
(
eMTCconfig
->
ccparams
.
prach_freq_offset
>
94
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for prach_freq_offset choice: 0..94!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
prach_freq_offset
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_delta_shift
=
eMTCconfig
->
ccparams
.
pucch_delta_shift
-
1
;
if
((
eMTCconfig
->
ccparams
.
pucch_delta_shift
<
1
)
||
(
eMTCconfig
->
ccparams
.
pucch_delta_shift
>
3
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for pucch_delta_shift choice: 1..3!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pucch_delta_shift
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_nRB_CQI
=
eMTCconfig
->
ccparams
.
pucch_nRB_CQI
;
if
((
eMTCconfig
->
ccparams
.
pucch_nRB_CQI
<
0
)
||
(
eMTCconfig
->
ccparams
.
pucch_nRB_CQI
>
98
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for pucch_nRB_CQI choice: 0..98!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pucch_nRB_CQI
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_nCS_AN
=
eMTCconfig
->
ccparams
.
pucch_nCS_AN
;
if
((
eMTCconfig
->
ccparams
.
pucch_nCS_AN
<
0
)
||
(
eMTCconfig
->
ccparams
.
pucch_nCS_AN
>
7
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for pucch_nCS_AN choice: 0..7!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pucch_nCS_AN
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_n1_AN
=
eMTCconfig
->
ccparams
.
pucch_n1_AN
;
if
((
eMTCconfig
->
ccparams
.
pucch_n1_AN
<
0
)
||
(
eMTCconfig
->
ccparams
.
pucch_n1_AN
>
2047
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for pucch_n1_AN choice: 0..2047!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pucch_n1_AN
);
//#endif
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pdsch_referenceSignalPower
=
eMTCconfig
->
ccparams
.
pdsch_referenceSignalPower
;
if
((
eMTCconfig
->
ccparams
.
pdsch_referenceSignalPower
<-
60
)
||
(
eMTCconfig
->
ccparams
.
pdsch_referenceSignalPower
>
50
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for pdsch_referenceSignalPower choice:-60..50!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pdsch_referenceSignalPower
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pdsch_p_b
=
eMTCconfig
->
ccparams
.
pdsch_p_b
;
if
((
eMTCconfig
->
ccparams
.
pdsch_p_b
<
0
)
||
(
eMTCconfig
->
ccparams
.
pdsch_p_b
>
3
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for pdsch_p_b choice: 0..3!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pdsch_p_b
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_n_SB
=
eMTCconfig
->
ccparams
.
pusch_n_SB
;
if
((
eMTCconfig
->
ccparams
.
pusch_n_SB
<
1
)
||
(
eMTCconfig
->
ccparams
.
pusch_n_SB
>
4
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for pusch_n_SB choice: 1..4!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pusch_n_SB
);
if
(
!
eMTCconfig
->
ccparams
.
pusch_hoppingMode
)
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d define %s: interSubframe,intraAndInterSubframe!
\n
"
,
config_fname
,
cell_idx
,
ENB_CONFIG_STRING_PUSCH_HOPPINGMODE
);
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pusch_hoppingMode
,
"interSubFrame"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_hoppingMode
=
LTE_PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_interSubFrame
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pusch_hoppingMode
,
"intraAndInterSubFrame"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_hoppingMode
=
LTE_PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_intraAndInterSubFrame
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for pusch_hoppingMode choice: interSubframe,intraAndInterSubframe!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pusch_hoppingMode
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_hoppingOffset
=
eMTCconfig
->
ccparams
.
pusch_hoppingOffset
;
if
((
eMTCconfig
->
ccparams
.
pusch_hoppingOffset
<
0
)
||
(
eMTCconfig
->
ccparams
.
pusch_hoppingOffset
>
98
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for pusch_hoppingOffset choice: 0..98!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pusch_hoppingMode
);
if
(
!
eMTCconfig
->
ccparams
.
pusch_enable64QAM
)
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d define %s: ENABLE,DISABLE!
\n
"
,
config_fname
,
cell_idx
,
ENB_CONFIG_STRING_PUSCH_ENABLE64QAM
);
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pusch_enable64QAM
,
"ENABLE"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_enable64QAM
=
TRUE
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pusch_enable64QAM
,
"DISABLE"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_enable64QAM
=
FALSE
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for pusch_enable64QAM choice: ENABLE,DISABLE!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pusch_enable64QAM
);
if
(
!
eMTCconfig
->
ccparams
.
pusch_groupHoppingEnabled
)
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d define %s: ENABLE,DISABLE!
\n
"
,
config_fname
,
cell_idx
,
ENB_CONFIG_STRING_PUSCH_GROUP_HOPPING_EN
);
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pusch_groupHoppingEnabled
,
"ENABLE"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_groupHoppingEnabled
=
TRUE
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pusch_groupHoppingEnabled
,
"DISABLE"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_groupHoppingEnabled
=
FALSE
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for pusch_groupHoppingEnabled choice: ENABLE,DISABLE!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pusch_groupHoppingEnabled
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_groupAssignment
=
eMTCconfig
->
ccparams
.
pusch_groupAssignment
;
if
((
eMTCconfig
->
ccparams
.
pusch_groupAssignment
<
0
)
||
(
eMTCconfig
->
ccparams
.
pusch_groupAssignment
>
29
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for pusch_groupAssignment choice: 0..29!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pusch_groupAssignment
);
if
(
!
eMTCconfig
->
ccparams
.
pusch_sequenceHoppingEnabled
)
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d define %s: ENABLE,DISABLE!
\n
"
,
config_fname
,
cell_idx
,
ENB_CONFIG_STRING_PUSCH_SEQUENCE_HOPPING_EN
);
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pusch_sequenceHoppingEnabled
,
"ENABLE"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_sequenceHoppingEnabled
=
TRUE
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pusch_sequenceHoppingEnabled
,
"DISABLE"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_sequenceHoppingEnabled
=
FALSE
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for pusch_sequenceHoppingEnabled choice: ENABLE,DISABLE!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pusch_sequenceHoppingEnabled
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_nDMRS1
=
eMTCconfig
->
ccparams
.
pusch_nDMRS1
;
//cyclic_shift in RRC!
if
((
eMTCconfig
->
ccparams
.
pusch_nDMRS1
<
0
)
||
(
eMTCconfig
->
ccparams
.
pusch_nDMRS1
>
7
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for pusch_nDMRS1 choice: 0..7!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pusch_nDMRS1
);
if
(
strcmp
(
eMTCconfig
->
ccparams
.
phich_duration
,
"NORMAL"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
phich_duration
=
LTE_PHICH_Config__phich_Duration_normal
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
phich_duration
,
"EXTENDED"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
phich_duration
=
LTE_PHICH_Config__phich_Duration_extended
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for phich_duration choice: NORMAL,EXTENDED!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
phich_duration
);
if
(
strcmp
(
eMTCconfig
->
ccparams
.
phich_resource
,
"ONESIXTH"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
phich_resource
=
LTE_PHICH_Config__phich_Resource_oneSixth
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
phich_resource
,
"HALF"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
phich_resource
=
LTE_PHICH_Config__phich_Resource_half
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
phich_resource
,
"ONE"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
phich_resource
=
LTE_PHICH_Config__phich_Resource_one
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
phich_resource
,
"TWO"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
phich_resource
=
LTE_PHICH_Config__phich_Resource_two
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for phich_resource choice: ONESIXTH,HALF,ONE,TWO!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
phich_resource
);
printf
(
"phich.resource eMTC %ld (%s), phich.duration eMTC %ld (%s)
\n
"
,
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
phich_resource
,
eMTCconfig
->
ccparams
.
phich_resource
,
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
phich_duration
,
eMTCconfig
->
ccparams
.
phich_duration
);
if
(
strcmp
(
eMTCconfig
->
ccparams
.
srs_enable
,
"ENABLE"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
srs_enable
=
TRUE
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
srs_enable
,
"DISABLE"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
srs_enable
=
FALSE
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for srs_BandwidthConfig choice: ENABLE,DISABLE !
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
srs_enable
);
if
(
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
srs_enable
==
TRUE
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
srs_BandwidthConfig
=
eMTCconfig
->
ccparams
.
srs_BandwidthConfig
;
if
((
eMTCconfig
->
ccparams
.
srs_BandwidthConfig
<
0
)
||
(
eMTCconfig
->
ccparams
.
srs_BandwidthConfig
>
7
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value %d for srs_BandwidthConfig choice: 0...7
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
srs_BandwidthConfig
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
srs_SubframeConfig
=
eMTCconfig
->
ccparams
.
srs_SubframeConfig
;
if
((
eMTCconfig
->
ccparams
.
srs_SubframeConfig
<
0
)
||
(
eMTCconfig
->
ccparams
.
srs_SubframeConfig
>
15
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for srs_SubframeConfig choice: 0..15 !
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
srs_SubframeConfig
);
if
(
strcmp
(
eMTCconfig
->
ccparams
.
srs_ackNackST
,
"ENABLE"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
srs_ackNackST
=
TRUE
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
srs_ackNackST
,
"DISABLE"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
srs_ackNackST
=
FALSE
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for srs_BandwidthConfig choice: ENABLE,DISABLE !
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
srs_ackNackST
);
if
(
strcmp
(
eMTCconfig
->
ccparams
.
srs_MaxUpPts
,
"ENABLE"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
srs_MaxUpPts
=
TRUE
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
srs_MaxUpPts
,
"DISABLE"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
srs_MaxUpPts
=
FALSE
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for srs_MaxUpPts choice: ENABLE,DISABLE !
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
srs_MaxUpPts
);
}
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_p0_Nominal
=
eMTCconfig
->
ccparams
.
pusch_p0_Nominal
;
if
((
eMTCconfig
->
ccparams
.
pusch_p0_Nominal
<-
126
)
||
(
eMTCconfig
->
ccparams
.
pusch_p0_Nominal
>
24
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for pusch_p0_Nominal choice: -126..24 !
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pusch_p0_Nominal
);
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pusch_alpha
,
"AL0"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_alpha
=
LTE_Alpha_r12_al0
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pusch_alpha
,
"AL04"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_alpha
=
LTE_Alpha_r12_al04
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pusch_alpha
,
"AL05"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_alpha
=
LTE_Alpha_r12_al05
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pusch_alpha
,
"AL06"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_alpha
=
LTE_Alpha_r12_al06
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pusch_alpha
,
"AL07"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_alpha
=
LTE_Alpha_r12_al07
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pusch_alpha
,
"AL08"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_alpha
=
LTE_Alpha_r12_al08
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pusch_alpha
,
"AL09"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_alpha
=
LTE_Alpha_r12_al09
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pusch_alpha
,
"AL1"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pusch_alpha
=
LTE_Alpha_r12_al1
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for pucch_Alpha choice: AL0,AL04,AL05,AL06,AL07,AL08,AL09,AL1!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pusch_alpha
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_p0_Nominal
=
eMTCconfig
->
ccparams
.
pucch_p0_Nominal
;
if
((
eMTCconfig
->
ccparams
.
pucch_p0_Nominal
<-
127
)
||
(
eMTCconfig
->
ccparams
.
pucch_p0_Nominal
>-
96
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for pucch_p0_Nominal choice: -127..-96 !
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pucch_p0_Nominal
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
msg3_delta_Preamble
=
eMTCconfig
->
ccparams
.
msg3_delta_Preamble
;
if
((
eMTCconfig
->
ccparams
.
msg3_delta_Preamble
<-
1
)
||
(
eMTCconfig
->
ccparams
.
msg3_delta_Preamble
>
6
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for msg3_delta_Preamble choice: -1..6 !
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
msg3_delta_Preamble
);
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pucch_deltaF_Format1
,
"deltaF_2"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_deltaF_Format1
=
LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF_2
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pucch_deltaF_Format1
,
"deltaF0"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_deltaF_Format1
=
LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF0
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pucch_deltaF_Format1
,
"deltaF2"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_deltaF_Format1
=
LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF2
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for pucch_deltaF_Format1 choice: deltaF_2,dltaF0,deltaF2!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pucch_deltaF_Format1
);
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pucch_deltaF_Format1b
,
"deltaF1"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_deltaF_Format1b
=
LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF1
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pucch_deltaF_Format1b
,
"deltaF3"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_deltaF_Format1b
=
LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF3
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pucch_deltaF_Format1b
,
"deltaF5"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_deltaF_Format1b
=
LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF5
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for pucch_deltaF_Format1b choice: deltaF1,dltaF3,deltaF5!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pucch_deltaF_Format1b
);
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pucch_deltaF_Format2
,
"deltaF_2"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_deltaF_Format2
=
LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF_2
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pucch_deltaF_Format2
,
"deltaF0"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_deltaF_Format2
=
LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF0
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pucch_deltaF_Format2
,
"deltaF1"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_deltaF_Format2
=
LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF1
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pucch_deltaF_Format2
,
"deltaF2"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_deltaF_Format2
=
LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF2
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for pucch_deltaF_Format2 choice: deltaF_2,dltaF0,deltaF1,deltaF2!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pucch_deltaF_Format2
);
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pucch_deltaF_Format2a
,
"deltaF_2"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_deltaF_Format2a
=
LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF_2
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pucch_deltaF_Format2a
,
"deltaF0"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_deltaF_Format2a
=
LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF0
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pucch_deltaF_Format2a
,
"deltaF2"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_deltaF_Format2a
=
LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF2
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for pucch_deltaF_Format2a choice: deltaF_2,dltaF0,deltaF2!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pucch_deltaF_Format2a
);
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pucch_deltaF_Format2b
,
"deltaF_2"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_deltaF_Format2b
=
LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF_2
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pucch_deltaF_Format2b
,
"deltaF0"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_deltaF_Format2b
=
LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF0
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pucch_deltaF_Format2b
,
"deltaF2"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pucch_deltaF_Format2b
=
LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF2
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for pucch_deltaF_Format2b choice: deltaF_2,dltaF0,deltaF2!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pucch_deltaF_Format2b
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_numberOfRA_Preambles
=
(
eMTCconfig
->
ccparams
.
rach_numberOfRA_Preambles
/
4
)
-
1
;
if
((
eMTCconfig
->
ccparams
.
rach_numberOfRA_Preambles
<
4
)
||
(
eMTCconfig
->
ccparams
.
rach_numberOfRA_Preambles
>
64
)
||
((
eMTCconfig
->
ccparams
.
rach_numberOfRA_Preambles
&
3
)
!=
0
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for rach_numberOfRA_Preambles choice: 4,8,12,...,64!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
rach_numberOfRA_Preambles
);
if
(
strcmp
(
eMTCconfig
->
ccparams
.
rach_preamblesGroupAConfig
,
"ENABLE"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_preamblesGroupAConfig
=
TRUE
;
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_sizeOfRA_PreamblesGroupA
=
(
eMTCconfig
->
ccparams
.
rach_sizeOfRA_PreamblesGroupA
/
4
)
-
1
;
if
((
eMTCconfig
->
ccparams
.
rach_numberOfRA_Preambles
<
4
)
||
(
eMTCconfig
->
ccparams
.
rach_numberOfRA_Preambles
>
60
)
||
((
eMTCconfig
->
ccparams
.
rach_numberOfRA_Preambles
&
3
)
!=
0
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for rach_sizeOfRA_PreamblesGroupA choice: 4,8,12,...,60!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
rach_sizeOfRA_PreamblesGroupA
);
switch
(
eMTCconfig
->
ccparams
.
rach_messageSizeGroupA
)
{
case
56
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_messageSizeGroupA
=
LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b56
;
break
;
case
144
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_messageSizeGroupA
=
LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b144
;
break
;
case
208
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_messageSizeGroupA
=
LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b208
;
break
;
case
256
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_messageSizeGroupA
=
LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b256
;
break
;
default:
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for rach_messageSizeGroupA choice: 56,144,208,256!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
rach_messageSizeGroupA
);
break
;
}
if
(
strcmp
(
eMTCconfig
->
ccparams
.
rach_messagePowerOffsetGroupB
,
"minusinfinity"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_messagePowerOffsetGroupB
=
LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_minusinfinity
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
rach_messagePowerOffsetGroupB
,
"dB0"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_messagePowerOffsetGroupB
=
LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB0
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
rach_messagePowerOffsetGroupB
,
"dB5"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_messagePowerOffsetGroupB
=
LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB5
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
rach_messagePowerOffsetGroupB
,
"dB8"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_messagePowerOffsetGroupB
=
LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB8
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
rach_messagePowerOffsetGroupB
,
"dB10"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_messagePowerOffsetGroupB
=
LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB10
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
rach_messagePowerOffsetGroupB
,
"dB12"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_messagePowerOffsetGroupB
=
LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB12
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
rach_messagePowerOffsetGroupB
,
"dB15"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_messagePowerOffsetGroupB
=
LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB15
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
rach_messagePowerOffsetGroupB
,
"dB18"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_messagePowerOffsetGroupB
=
LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB18
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for rach_messagePowerOffsetGroupB choice: minusinfinity,dB0,dB5,dB8,dB10,dB12,dB15,dB18!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
rach_messagePowerOffsetGroupB
);
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
rach_preamblesGroupAConfig
,
"DISABLE"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_preamblesGroupAConfig
=
FALSE
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for rach_preamblesGroupAConfig choice: ENABLE,DISABLE !
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
rach_preamblesGroupAConfig
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_preambleInitialReceivedTargetPower
=
(
eMTCconfig
->
ccparams
.
rach_preambleInitialReceivedTargetPower
+
120
)
/
2
;
if
((
eMTCconfig
->
ccparams
.
rach_preambleInitialReceivedTargetPower
<-
120
)
||
(
eMTCconfig
->
ccparams
.
rach_preambleInitialReceivedTargetPower
>-
90
)
||
((
eMTCconfig
->
ccparams
.
rach_preambleInitialReceivedTargetPower
&
1
)
!=
0
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for rach_preambleInitialReceivedTargetPower choice: -120,-118,...,-90 !
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
rach_preambleInitialReceivedTargetPower
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_powerRampingStep
=
eMTCconfig
->
ccparams
.
rach_powerRampingStep
/
2
;
if
((
eMTCconfig
->
ccparams
.
rach_powerRampingStep
<
0
)
||
(
eMTCconfig
->
ccparams
.
rach_powerRampingStep
>
6
)
||
((
eMTCconfig
->
ccparams
.
rach_powerRampingStep
&
1
)
!=
0
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for rach_powerRampingStep choice: 0,2,4,6 !
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
rach_powerRampingStep
);
switch
(
eMTCconfig
->
ccparams
.
rach_preambleTransMax
)
{
case
3
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_preambleTransMax
=
LTE_PreambleTransMax_n3
;
break
;
case
4
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_preambleTransMax
=
LTE_PreambleTransMax_n4
;
break
;
case
5
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_preambleTransMax
=
LTE_PreambleTransMax_n5
;
break
;
case
6
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_preambleTransMax
=
LTE_PreambleTransMax_n6
;
break
;
case
7
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_preambleTransMax
=
LTE_PreambleTransMax_n7
;
break
;
case
8
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_preambleTransMax
=
LTE_PreambleTransMax_n8
;
break
;
case
10
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_preambleTransMax
=
LTE_PreambleTransMax_n10
;
break
;
case
20
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_preambleTransMax
=
LTE_PreambleTransMax_n20
;
break
;
case
50
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_preambleTransMax
=
LTE_PreambleTransMax_n50
;
break
;
case
100
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_preambleTransMax
=
LTE_PreambleTransMax_n100
;
break
;
case
200
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_preambleTransMax
=
LTE_PreambleTransMax_n200
;
break
;
default:
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for rach_preambleTransMax choice: 3,4,5,6,7,8,10,20,50,100,200!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
rach_preambleTransMax
);
break
;
}
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_raResponseWindowSize
=
(
eMTCconfig
->
ccparams
.
rach_raResponseWindowSize
==
10
)
?
7
:
eMTCconfig
->
ccparams
.
rach_raResponseWindowSize
-
2
;
if
((
eMTCconfig
->
ccparams
.
rach_raResponseWindowSize
<
0
)
||
(
eMTCconfig
->
ccparams
.
rach_raResponseWindowSize
==
9
)
||
(
eMTCconfig
->
ccparams
.
rach_raResponseWindowSize
>
10
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for rach_raResponseWindowSize choice: 2,3,4,5,6,7,8,10!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
rach_raResponseWindowSize
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_macContentionResolutionTimer
=
(
eMTCconfig
->
ccparams
.
rach_macContentionResolutionTimer
/
8
)
-
1
;
if
((
eMTCconfig
->
ccparams
.
rach_macContentionResolutionTimer
<
8
)
||
(
eMTCconfig
->
ccparams
.
rach_macContentionResolutionTimer
>
64
)
||
((
eMTCconfig
->
ccparams
.
rach_macContentionResolutionTimer
&
7
)
!=
0
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for rach_macContentionResolutionTimer choice: 8,16,...,56,64!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
rach_macContentionResolutionTimer
);
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
rach_maxHARQ_Msg3Tx
=
eMTCconfig
->
ccparams
.
rach_maxHARQ_Msg3Tx
;
if
((
eMTCconfig
->
ccparams
.
rach_maxHARQ_Msg3Tx
<
0
)
||
(
eMTCconfig
->
ccparams
.
rach_maxHARQ_Msg3Tx
>
8
))
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for rach_maxHARQ_Msg3Tx choice: 1..8!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
rach_maxHARQ_Msg3Tx
);
switch
(
eMTCconfig
->
ccparams
.
pcch_defaultPagingCycle
)
{
case
32
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pcch_defaultPagingCycle
=
LTE_PCCH_Config__defaultPagingCycle_rf32
;
break
;
case
64
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pcch_defaultPagingCycle
=
LTE_PCCH_Config__defaultPagingCycle_rf64
;
break
;
case
128
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pcch_defaultPagingCycle
=
LTE_PCCH_Config__defaultPagingCycle_rf128
;
break
;
case
256
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pcch_defaultPagingCycle
=
LTE_PCCH_Config__defaultPagingCycle_rf256
;
break
;
default:
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for pcch_defaultPagingCycle choice: 32,64,128,256!
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pcch_defaultPagingCycle
);
break
;
}
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pcch_nB
,
"fourT"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pcch_nB
=
LTE_PCCH_Config__nB_fourT
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pcch_nB
,
"twoT"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pcch_nB
=
LTE_PCCH_Config__nB_twoT
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pcch_nB
,
"oneT"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pcch_nB
=
LTE_PCCH_Config__nB_oneT
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pcch_nB
,
"halfT"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pcch_nB
=
LTE_PCCH_Config__nB_halfT
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pcch_nB
,
"quarterT"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pcch_nB
=
LTE_PCCH_Config__nB_quarterT
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pcch_nB
,
"oneEighthT"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pcch_nB
=
LTE_PCCH_Config__nB_oneEighthT
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pcch_nB
,
"oneSixteenthT"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pcch_nB
=
LTE_PCCH_Config__nB_oneSixteenthT
;
}
else
if
(
strcmp
(
eMTCconfig
->
ccparams
.
pcch_nB
,
"oneThirtySecondT"
)
==
0
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
pcch_nB
=
LTE_PCCH_Config__nB_oneThirtySecondT
;
}
else
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%s
\"
for pcch_nB choice: fourT,twoT,oneT,halfT,quarterT,oneighthT,oneSixteenthT,oneThirtySecondT !
\n
"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
pcch_nB
);
switch
(
eMTCconfig
->
ccparams
.
bcch_modificationPeriodCoeff
)
{
case
2
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
bcch_modificationPeriodCoeff
=
LTE_BCCH_Config__modificationPeriodCoeff_n2
;
break
;
case
4
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
bcch_modificationPeriodCoeff
=
LTE_BCCH_Config__modificationPeriodCoeff_n4
;
break
;
case
8
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
bcch_modificationPeriodCoeff
=
LTE_BCCH_Config__modificationPeriodCoeff_n8
;
break
;
case
16
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
bcch_modificationPeriodCoeff
=
LTE_BCCH_Config__modificationPeriodCoeff_n16
;
break
;
default:
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for bcch_modificationPeriodCoeff choice: 2,4,8,16"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
bcch_modificationPeriodCoeff
);
break
;
}
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
ue_TimersAndConstants_t300
=
eMTCconfig
->
ccparams
.
ue_TimersAndConstants_t300
;
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
ue_TimersAndConstants_t301
=
eMTCconfig
->
ccparams
.
ue_TimersAndConstants_t301
;
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
ue_TimersAndConstants_t310
=
eMTCconfig
->
ccparams
.
ue_TimersAndConstants_t310
;
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
ue_TimersAndConstants_t311
=
eMTCconfig
->
ccparams
.
ue_TimersAndConstants_t311
;
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
ue_TimersAndConstants_n310
=
eMTCconfig
->
ccparams
.
ue_TimersAndConstants_n310
;
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
ue_TimersAndConstants_n311
=
eMTCconfig
->
ccparams
.
ue_TimersAndConstants_n311
;
switch
(
eMTCconfig
->
ccparams
.
ue_TransmissionMode
)
{
case
1
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
ue_TransmissionMode
=
LTE_AntennaInfoDedicated__transmissionMode_tm1
;
break
;
case
2
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
ue_TransmissionMode
=
LTE_AntennaInfoDedicated__transmissionMode_tm2
;
break
;
case
3
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
ue_TransmissionMode
=
LTE_AntennaInfoDedicated__transmissionMode_tm3
;
break
;
case
4
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
ue_TransmissionMode
=
LTE_AntennaInfoDedicated__transmissionMode_tm4
;
break
;
case
5
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
ue_TransmissionMode
=
LTE_AntennaInfoDedicated__transmissionMode_tm5
;
break
;
case
6
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
ue_TransmissionMode
=
LTE_AntennaInfoDedicated__transmissionMode_tm6
;
break
;
case
7
:
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
ue_TransmissionMode
=
LTE_AntennaInfoDedicated__transmissionMode_tm7
;
break
;
default:
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d unknown value
\"
%d
\"
for ue_TransmissionMode choice: 1,2,3,4,5,6,7"
,
config_fname
,
cell_idx
,
eMTCconfig
->
ccparams
.
ue_TransmissionMode
);
break
;
}
if
(
!
strcmp
(
eMTCconfig
->
prach_ConfigCommon_v1310
,
"ENABLE"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
prach_ConfigCommon_v1310
=
TRUE
;
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
mpdcch_startSF_CSS_RA_r13
=
calloc
(
1
,
sizeof
(
BOOLEAN_t
));
if
(
!
strcmp
(
eMTCconfig
->
mpdcch_startSF_CSS_RA_r13
,
"tdd-r13"
))
{
*
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
mpdcch_startSF_CSS_RA_r13
=
FALSE
;
}
else
{
*
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
mpdcch_startSF_CSS_RA_r13
=
TRUE
;
}
if
(
!
strcmp
(
eMTCconfig
->
mpdcch_startSF_CSS_RA_r13_val
,
"v1"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
mpdcch_startSF_CSS_RA_r13_val
=
0
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
mpdcch_startSF_CSS_RA_r13_val
,
"v1dot5"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
mpdcch_startSF_CSS_RA_r13_val
=
1
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
mpdcch_startSF_CSS_RA_r13_val
,
"v2"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
mpdcch_startSF_CSS_RA_r13_val
=
2
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
mpdcch_startSF_CSS_RA_r13_val
,
"v2dot5"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
mpdcch_startSF_CSS_RA_r13_val
=
3
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
mpdcch_startSF_CSS_RA_r13_val
,
"v4"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
mpdcch_startSF_CSS_RA_r13_val
=
4
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
mpdcch_startSF_CSS_RA_r13_val
,
"v5"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
mpdcch_startSF_CSS_RA_r13_val
=
5
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
mpdcch_startSF_CSS_RA_r13_val
,
"v8"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
mpdcch_startSF_CSS_RA_r13_val
=
6
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
mpdcch_startSF_CSS_RA_r13_val
,
"10"
))
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
mpdcch_startSF_CSS_RA_r13_val
=
7
;
}
else
{
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, enb %d mpdcch_startSF_CSS_RA_r13_val! Unknown Value !!
\n
"
,
config_fname
,
cell_idx
);
}
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
prach_HoppingOffset_r13
=
calloc
(
1
,
sizeof
(
long
));
*
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
prach_HoppingOffset_r13
=
eMTCconfig
->
prach_HoppingOffset_r13
;
}
else
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig_BR
[
cc_idx
].
prach_ConfigCommon_v1310
=
FALSE
;
}
RRC_CONFIGURATION_REQ
(
msg_p
).
pdsch_maxNumRepetitionCEmodeA_r13
[
cc_idx
]
=
CALLOC
(
1
,
sizeof
(
long
));
if
(
!
strcmp
(
eMTCconfig
->
pdsch_maxNumRepetitionCEmodeA_r13
,
"r16"
))
{
*
RRC_CONFIGURATION_REQ
(
msg_p
).
pdsch_maxNumRepetitionCEmodeA_r13
[
cc_idx
]
=
0
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
pdsch_maxNumRepetitionCEmodeA_r13
,
"r32"
))
{
*
RRC_CONFIGURATION_REQ
(
msg_p
).
pdsch_maxNumRepetitionCEmodeA_r13
[
cc_idx
]
=
1
;
}
else
{
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, pdsch_maxNumRepetitionCEmodeA_r13 unknown value!
\n
"
,
config_fname
);
}
RRC_CONFIGURATION_REQ
(
msg_p
).
pusch_maxNumRepetitionCEmodeA_r13
[
cc_idx
]
=
CALLOC
(
1
,
sizeof
(
long
));
if
(
!
strcmp
(
eMTCconfig
->
pusch_maxNumRepetitionCEmodeA_r13
,
"r8"
))
{
*
RRC_CONFIGURATION_REQ
(
msg_p
).
pusch_maxNumRepetitionCEmodeA_r13
[
cc_idx
]
=
0
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
pusch_maxNumRepetitionCEmodeA_r13
,
"r16"
))
{
*
RRC_CONFIGURATION_REQ
(
msg_p
).
pusch_maxNumRepetitionCEmodeA_r13
[
cc_idx
]
=
1
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
pusch_maxNumRepetitionCEmodeA_r13
,
"r32"
))
{
*
RRC_CONFIGURATION_REQ
(
msg_p
).
pusch_maxNumRepetitionCEmodeA_r13
[
cc_idx
]
=
2
;
}
else
{
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, pusch_maxNumRepetitionCEmodeA_r13 unknown value!
\n
"
,
config_fname
);
}
char
rachCELevelInfoListPath
[
MAX_OPTNAME_SIZE
*
2
];
config_getlist
(
&
rachcelevellist
,
NULL
,
0
,
brparamspath
);
RRC_CONFIGURATION_REQ
(
msg_p
).
rach_CE_LevelInfoList_r13_size
[
cc_idx
]
=
rachcelevellist
.
numelt
;
int
rachCEInfoIndex
;
for
(
rachCEInfoIndex
=
0
;
rachCEInfoIndex
<
rachcelevellist
.
numelt
;
rachCEInfoIndex
++
)
{
sprintf
(
rachCELevelInfoListPath
,
"%s.%s.[%i]"
,
brparamspath
,
ENB_CONFIG_STRING_RACH_CE_LEVELINFOLIST_R13
,
rachCEInfoIndex
);
config_get
(
rachcelevelParams
,
sizeof
(
rachcelevelParams
)
/
sizeof
(
paramdef_t
),
rachCELevelInfoListPath
);
RRC_CONFIGURATION_REQ
(
msg_p
).
firstPreamble_r13
[
cc_idx
][
rachCEInfoIndex
]
=
eMTCconfig
->
firstPreamble_r13
;
RRC_CONFIGURATION_REQ
(
msg_p
).
lastPreamble_r13
[
cc_idx
][
rachCEInfoIndex
]
=
eMTCconfig
->
lastPreamble_r13
;
switch
(
eMTCconfig
->
ra_ResponseWindowSize_r13
)
{
case
20
:
RRC_CONFIGURATION_REQ
(
msg_p
).
ra_ResponseWindowSize_r13
[
cc_idx
][
rachCEInfoIndex
]
=
LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf20
;
break
;
case
50
:
RRC_CONFIGURATION_REQ
(
msg_p
).
ra_ResponseWindowSize_r13
[
cc_idx
][
rachCEInfoIndex
]
=
LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf50
;
break
;
case
80
:
RRC_CONFIGURATION_REQ
(
msg_p
).
ra_ResponseWindowSize_r13
[
cc_idx
][
rachCEInfoIndex
]
=
LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf80
;
break
;
case
120
:
RRC_CONFIGURATION_REQ
(
msg_p
).
ra_ResponseWindowSize_r13
[
cc_idx
][
rachCEInfoIndex
]
=
LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf120
;
break
;
case
180
:
RRC_CONFIGURATION_REQ
(
msg_p
).
ra_ResponseWindowSize_r13
[
cc_idx
][
rachCEInfoIndex
]
=
LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf180
;
break
;
case
240
:
RRC_CONFIGURATION_REQ
(
msg_p
).
ra_ResponseWindowSize_r13
[
cc_idx
][
rachCEInfoIndex
]
=
LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf240
;
break
;
case
320
:
RRC_CONFIGURATION_REQ
(
msg_p
).
ra_ResponseWindowSize_r13
[
cc_idx
][
rachCEInfoIndex
]
=
LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf320
;
break
;
case
400
:
RRC_CONFIGURATION_REQ
(
msg_p
).
ra_ResponseWindowSize_r13
[
cc_idx
][
rachCEInfoIndex
]
=
LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf400
;
break
;
default:
AssertFatal
(
1
==
0
,
"Illegal ra_ResponseWindowSize_r13 %d
\n
"
,
eMTCconfig
->
ra_ResponseWindowSize_r13
);
}
switch
(
eMTCconfig
->
mac_ContentionResolutionTimer_r13
)
{
case
80
:
RRC_CONFIGURATION_REQ
(
msg_p
).
mac_ContentionResolutionTimer_r13
[
cc_idx
][
rachCEInfoIndex
]
=
LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf80
;
break
;
case
100
:
RRC_CONFIGURATION_REQ
(
msg_p
).
mac_ContentionResolutionTimer_r13
[
cc_idx
][
rachCEInfoIndex
]
=
LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf100
;
break
;
case
120
:
RRC_CONFIGURATION_REQ
(
msg_p
).
mac_ContentionResolutionTimer_r13
[
cc_idx
][
rachCEInfoIndex
]
=
LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf120
;
break
;
case
160
:
RRC_CONFIGURATION_REQ
(
msg_p
).
mac_ContentionResolutionTimer_r13
[
cc_idx
][
rachCEInfoIndex
]
=
LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf160
;
break
;
case
200
:
RRC_CONFIGURATION_REQ
(
msg_p
).
mac_ContentionResolutionTimer_r13
[
cc_idx
][
rachCEInfoIndex
]
=
LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf200
;
break
;
case
240
:
RRC_CONFIGURATION_REQ
(
msg_p
).
mac_ContentionResolutionTimer_r13
[
cc_idx
][
rachCEInfoIndex
]
=
LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf240
;
break
;
case
480
:
RRC_CONFIGURATION_REQ
(
msg_p
).
mac_ContentionResolutionTimer_r13
[
cc_idx
][
rachCEInfoIndex
]
=
LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf480
;
break
;
case
960
:
RRC_CONFIGURATION_REQ
(
msg_p
).
mac_ContentionResolutionTimer_r13
[
cc_idx
][
rachCEInfoIndex
]
=
LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf960
;
break
;
default:
AssertFatal
(
1
==
0
,
"Illegal mac_ContentionResolutionTimer_r13 %d
\n
"
,
eMTCconfig
->
mac_ContentionResolutionTimer_r13
);
break
;
}
RRC_CONFIGURATION_REQ
(
msg_p
).
rar_HoppingConfig_r13
[
cc_idx
][
rachCEInfoIndex
]
=
eMTCconfig
->
rar_HoppingConfig_r13
;
AssertFatal
(
eMTCconfig
->
rar_HoppingConfig_r13
==
0
||
eMTCconfig
->
rar_HoppingConfig_r13
==
1
,
"illegal rar_HoppingConfig_r13 %d
\n
"
,
eMTCconfig
->
rar_HoppingConfig_r13
);
}
// end for loop (rach ce level info)
char
rsrpRangeListPath
[
MAX_OPTNAME_SIZE
*
2
];
config_getlist
(
&
rsrprangelist
,
NULL
,
0
,
brparamspath
);
RRC_CONFIGURATION_REQ
(
msg_p
).
rsrp_range_list_size
[
cc_idx
]
=
rsrprangelist
.
numelt
;
int
rsrprangeindex
;
for
(
rsrprangeindex
=
0
;
rsrprangeindex
<
rsrprangelist
.
numelt
;
rsrprangeindex
++
)
{
sprintf
(
rsrpRangeListPath
,
"%s.%s.[%i]"
,
brparamspath
,
ENB_CONFIG_STRING_RSRP_RANGE_LIST
,
rsrprangeindex
);
config_get
(
rsrprangeParams
,
sizeof
(
rsrprangeParams
)
/
sizeof
(
paramdef_t
),
rsrpRangeListPath
);
RRC_CONFIGURATION_REQ
(
msg_p
).
rsrp_range
[
cc_idx
][
rsrprangeindex
]
=
eMTCconfig
->
rsrp_range_br
;
}
char
prachparameterscePath
[
MAX_OPTNAME_SIZE
*
2
];
config_getlist
(
&
prachParamslist
,
NULL
,
0
,
brparamspath
);
RRC_CONFIGURATION_REQ
(
msg_p
).
prach_parameters_list_size
[
cc_idx
]
=
prachParamslist
.
numelt
;
int
prachparamsindex
;
for
(
prachparamsindex
=
0
;
prachparamsindex
<
prachParamslist
.
numelt
;
prachparamsindex
++
)
{
sprintf
(
prachparameterscePath
,
"%s.%s.[%i]"
,
brparamspath
,
ENB_CONFIG_STRING_PRACH_PARAMETERS_CE_R13
,
prachparamsindex
);
config_get
(
prachParams
,
sizeof
(
prachParams
)
/
sizeof
(
paramdef_t
),
prachparameterscePath
);
RRC_CONFIGURATION_REQ
(
msg_p
).
prach_config_index
[
cc_idx
][
prachparamsindex
]
=
eMTCconfig
->
prach_config_index_br
;
RRC_CONFIGURATION_REQ
(
msg_p
).
prach_freq_offset
[
cc_idx
][
prachparamsindex
]
=
eMTCconfig
->
prach_freq_offset_br
;
RRC_CONFIGURATION_REQ
(
msg_p
).
prach_StartingSubframe_r13
[
cc_idx
][
prachparamsindex
]
=
calloc
(
1
,
sizeof
(
long
));
switch
(
eMTCconfig
->
prach_StartingSubframe_r13
)
{
case
2
:
*
RRC_CONFIGURATION_REQ
(
msg_p
).
prach_StartingSubframe_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf2
;
break
;
case
4
:
*
RRC_CONFIGURATION_REQ
(
msg_p
).
prach_StartingSubframe_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf4
;
break
;
case
8
:
*
RRC_CONFIGURATION_REQ
(
msg_p
).
prach_StartingSubframe_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf8
;
break
;
case
16
:
*
RRC_CONFIGURATION_REQ
(
msg_p
).
prach_StartingSubframe_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf16
;
break
;
case
32
:
*
RRC_CONFIGURATION_REQ
(
msg_p
).
prach_StartingSubframe_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf32
;
break
;
case
64
:
*
RRC_CONFIGURATION_REQ
(
msg_p
).
prach_StartingSubframe_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf64
;
break
;
case
128
:
*
RRC_CONFIGURATION_REQ
(
msg_p
).
prach_StartingSubframe_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf128
;
break
;
case
256
:
*
RRC_CONFIGURATION_REQ
(
msg_p
).
prach_StartingSubframe_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf256
;
break
;
default:
AssertFatal
(
1
==
0
,
"prach_StartingSubframe_r13 %d is illegal
\n
"
,
eMTCconfig
->
prach_StartingSubframe_r13
);
break
;
}
RRC_CONFIGURATION_REQ
(
msg_p
).
maxNumPreambleAttemptCE_r13
[
cc_idx
][
prachparamsindex
]
=
calloc
(
1
,
sizeof
(
long
));
if
(
eMTCconfig
->
maxNumPreambleAttemptCE_r13
==
10
)
*
RRC_CONFIGURATION_REQ
(
msg_p
).
maxNumPreambleAttemptCE_r13
[
cc_idx
][
prachparamsindex
]
=
6
;
else
*
RRC_CONFIGURATION_REQ
(
msg_p
).
maxNumPreambleAttemptCE_r13
[
cc_idx
][
prachparamsindex
]
=
eMTCconfig
->
maxNumPreambleAttemptCE_r13
-
3
;
AssertFatal
(
eMTCconfig
->
maxNumPreambleAttemptCE_r13
>
2
&&
eMTCconfig
->
maxNumPreambleAttemptCE_r13
<
11
,
"prachparamsindex %d: Illegal maxNumPreambleAttemptCE_r13 %d
\n
"
,
prachparamsindex
,
eMTCconfig
->
maxNumPreambleAttemptCE_r13
);
switch
(
eMTCconfig
->
numRepetitionPerPreambleAttempt_r13
)
{
case
1
:
RRC_CONFIGURATION_REQ
(
msg_p
).
numRepetitionPerPreambleAttempt_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n1
;
break
;
case
2
:
RRC_CONFIGURATION_REQ
(
msg_p
).
numRepetitionPerPreambleAttempt_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n2
;
break
;
case
4
:
RRC_CONFIGURATION_REQ
(
msg_p
).
numRepetitionPerPreambleAttempt_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n4
;
break
;
case
8
:
RRC_CONFIGURATION_REQ
(
msg_p
).
numRepetitionPerPreambleAttempt_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n8
;
break
;
case
16
:
RRC_CONFIGURATION_REQ
(
msg_p
).
numRepetitionPerPreambleAttempt_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n16
;
break
;
case
32
:
RRC_CONFIGURATION_REQ
(
msg_p
).
numRepetitionPerPreambleAttempt_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n32
;
break
;
case
64
:
RRC_CONFIGURATION_REQ
(
msg_p
).
numRepetitionPerPreambleAttempt_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n64
;
break
;
case
128
:
RRC_CONFIGURATION_REQ
(
msg_p
).
numRepetitionPerPreambleAttempt_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n128
;
break
;
default:
AssertFatal
(
1
==
0
,
"illegal numReptitionPerPreambleAttempt %d
\n
"
,
eMTCconfig
->
numRepetitionPerPreambleAttempt_r13
);
break
;
}
switch
(
eMTCconfig
->
mpdcch_NumRepetition_RA_r13
)
{
case
1
:
RRC_CONFIGURATION_REQ
(
msg_p
).
mpdcch_NumRepetition_RA_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r1
;
break
;
case
2
:
RRC_CONFIGURATION_REQ
(
msg_p
).
mpdcch_NumRepetition_RA_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r2
;
break
;
case
4
:
RRC_CONFIGURATION_REQ
(
msg_p
).
mpdcch_NumRepetition_RA_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r4
;
break
;
case
8
:
RRC_CONFIGURATION_REQ
(
msg_p
).
mpdcch_NumRepetition_RA_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r8
;
break
;
case
16
:
RRC_CONFIGURATION_REQ
(
msg_p
).
mpdcch_NumRepetition_RA_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r16
;
break
;
case
32
:
RRC_CONFIGURATION_REQ
(
msg_p
).
mpdcch_NumRepetition_RA_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r32
;
break
;
case
64
:
RRC_CONFIGURATION_REQ
(
msg_p
).
mpdcch_NumRepetition_RA_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r64
;
break
;
case
128
:
RRC_CONFIGURATION_REQ
(
msg_p
).
mpdcch_NumRepetition_RA_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r128
;
break
;
case
256
:
RRC_CONFIGURATION_REQ
(
msg_p
).
mpdcch_NumRepetition_RA_r13
[
cc_idx
][
prachparamsindex
]
=
LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r256
;
break
;
default:
AssertFatal
(
1
==
0
,
"illegal mpdcch_NumRepeition_RA_r13 %d
\n
"
,
eMTCconfig
->
mpdcch_NumRepetition_RA_r13
);
break
;
}
RRC_CONFIGURATION_REQ
(
msg_p
).
prach_HoppingConfig_r13
[
cc_idx
][
prachparamsindex
]
=
eMTCconfig
->
prach_HoppingConfig_r13
;
AssertFatal
(
eMTCconfig
->
prach_HoppingConfig_r13
>=
0
&&
eMTCconfig
->
prach_HoppingConfig_r13
<
2
,
"Illegal prach_HoppingConfig_r13 %d
\n
"
,
eMTCconfig
->
prach_HoppingConfig_r13
);
int
maxavailablenarrowband_count
=
prachParams
[
7
].
numelt
;
RRC_CONFIGURATION_REQ
(
msg_p
).
max_available_narrow_band_size
[
cc_idx
][
prachparamsindex
]
=
maxavailablenarrowband_count
;
int
narrow_band_index
;
for
(
narrow_band_index
=
0
;
narrow_band_index
<
maxavailablenarrowband_count
;
narrow_band_index
++
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
max_available_narrow_band
[
cc_idx
][
prachparamsindex
][
narrow_band_index
]
=
prachParams
[
7
].
iptr
[
narrow_band_index
];
}
}
char
n1PUCCHInfoParamsPath
[
MAX_OPTNAME_SIZE
*
2
];
config_getlist
(
&
n1PUCCHInfoList
,
NULL
,
0
,
brparamspath
);
RRC_CONFIGURATION_REQ
(
msg_p
).
pucch_info_value_size
[
cc_idx
]
=
n1PUCCHInfoList
.
numelt
;
int
n1PUCCHinfolistindex
;
for
(
n1PUCCHinfolistindex
=
0
;
n1PUCCHinfolistindex
<
n1PUCCHInfoList
.
numelt
;
n1PUCCHinfolistindex
++
)
{
sprintf
(
n1PUCCHInfoParamsPath
,
"%s.%s.[%i]"
,
brparamspath
,
ENB_CONFIG_STRING_N1PUCCH_AN_INFOLIST_R13
,
n1PUCCHinfolistindex
);
config_get
(
n1PUCCH_ANR13Params
,
sizeof
(
n1PUCCH_ANR13Params
)
/
sizeof
(
paramdef_t
),
n1PUCCHInfoParamsPath
);
RRC_CONFIGURATION_REQ
(
msg_p
).
pucch_info_value
[
cc_idx
][
n1PUCCHinfolistindex
]
=
eMTCconfig
->
pucch_info_value
;
}
char
PCCHConfigv1310Path
[
MAX_OPTNAME_SIZE
*
2
+
16
];
sprintf
(
PCCHConfigv1310Path
,
"%s.%s"
,
brparamspath
,
ENB_CONFIG_STRING_PCCH_CONFIG_V1310
);
config_get
(
pcchv1310Params
,
sizeof
(
pcchv1310Params
)
/
sizeof
(
paramdef_t
),
PCCHConfigv1310Path
);
/** PCCH CONFIG V1310 */
RRC_CONFIGURATION_REQ
(
msg_p
).
pcch_config_v1310
[
cc_idx
]
=
TRUE
;
RRC_CONFIGURATION_REQ
(
msg_p
).
paging_narrowbands_r13
[
cc_idx
]
=
eMTCconfig
->
paging_narrowbands_r13
;
RRC_CONFIGURATION_REQ
(
msg_p
).
mpdcch_numrepetition_paging_r13
[
cc_idx
]
=
eMTCconfig
->
mpdcch_numrepetition_paging_r13
;
AssertFatal
(
eMTCconfig
->
mpdcch_numrepetition_paging_r13
==
1
||
eMTCconfig
->
mpdcch_numrepetition_paging_r13
==
2
||
eMTCconfig
->
mpdcch_numrepetition_paging_r13
==
4
||
eMTCconfig
->
mpdcch_numrepetition_paging_r13
==
8
||
eMTCconfig
->
mpdcch_numrepetition_paging_r13
==
16
||
eMTCconfig
->
mpdcch_numrepetition_paging_r13
==
32
||
eMTCconfig
->
mpdcch_numrepetition_paging_r13
==
64
||
eMTCconfig
->
mpdcch_numrepetition_paging_r13
==
128
||
eMTCconfig
->
mpdcch_numrepetition_paging_r13
==
256
,
"illegal mpdcch_numrepetition_paging_r13 %d
\n
"
,
eMTCconfig
->
mpdcch_numrepetition_paging_r13
);
// RRC_CONFIGURATION_REQ(msg_p).nb_v1310[cc_idx] = CALLOC(1, sizeof(long));
// if (!strcmp(nb_v1310, "one64thT")) {
// *RRC_CONFIGURATION_REQ(msg_p).nb_v1310[cc_idx] = 0;
// } else if (!strcmp(nb_v1310, "one128thT")) {
// *RRC_CONFIGURATION_REQ(msg_p).nb_v1310[cc_idx] = 1;
// } else if (!strcmp(nb_v1310, "one256thT")) {
// *RRC_CONFIGURATION_REQ(msg_p).nb_v1310[cc_idx] = 2;
// } else {
// AssertFatal(0,
// "Failed to parse eNB configuration file %s, nb_v1310, unknown value !\n",
// config_fname);
// }
RRC_CONFIGURATION_REQ
(
msg_p
).
pucch_NumRepetitionCE_Msg4_Level0_r13
[
cc_idx
]
=
CALLOC
(
1
,
sizeof
(
long
));
// ++cnt; // check this ,, the conter is up above
if
(
!
strcmp
(
eMTCconfig
->
pucch_NumRepetitionCE_Msg4_Level0_r13
,
"n1"
))
{
*
RRC_CONFIGURATION_REQ
(
msg_p
).
pucch_NumRepetitionCE_Msg4_Level0_r13
[
cc_idx
]
=
0
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
pucch_NumRepetitionCE_Msg4_Level0_r13
,
"n2"
))
{
*
RRC_CONFIGURATION_REQ
(
msg_p
).
pucch_NumRepetitionCE_Msg4_Level0_r13
[
cc_idx
]
=
1
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
pucch_NumRepetitionCE_Msg4_Level0_r13
,
"n4"
))
{
*
RRC_CONFIGURATION_REQ
(
msg_p
).
pucch_NumRepetitionCE_Msg4_Level0_r13
[
cc_idx
]
=
2
;
}
else
if
(
!
strcmp
(
eMTCconfig
->
pucch_NumRepetitionCE_Msg4_Level0_r13
,
"n8"
))
{
*
RRC_CONFIGURATION_REQ
(
msg_p
).
pucch_NumRepetitionCE_Msg4_Level0_r13
[
cc_idx
]
=
3
;
}
else
{
AssertFatal
(
0
,
"Failed to parse eNB configuration file %s, pucch_NumRepetitionCE_Msg4_Level0_r13 unknown value!
\n
"
,
config_fname
);
}
/** SIB2 FREQ HOPPING PARAMETERS R13 */
RRC_CONFIGURATION_REQ
(
msg_p
).
sib2_freq_hoppingParameters_r13_exists
[
cc_idx
]
=
TRUE
;
char
sib2FreqHoppingParametersR13Path
[
MAX_OPTNAME_SIZE
*
2
+
16
];
sprintf
(
sib2FreqHoppingParametersR13Path
,
"%s.%s"
,
brparamspath
,
ENB_CONFIG_STRING_SIB2_FREQ_HOPPINGPARAMETERS_R13
);
config_get
(
sib2freqhoppingParams
,
sizeof
(
sib2freqhoppingParams
)
/
sizeof
(
paramdef_t
),
sib2FreqHoppingParametersR13Path
);
RRC_CONFIGURATION_REQ
(
msg_p
).
sib2_interval_ULHoppingConfigCommonModeA_r13
[
cc_idx
]
=
CALLOC
(
1
,
sizeof
(
long
));
if
(
!
strcmp
(
eMTCconfig
->
sib2_interval_ULHoppingConfigCommonModeA_r13
,
"FDD"
))
{
*
RRC_CONFIGURATION_REQ
(
msg_p
).
sib2_interval_ULHoppingConfigCommonModeA_r13
[
cc_idx
]
=
0
;
switch
(
eMTCconfig
->
sib2_interval_ULHoppingConfigCommonModeA_r13_val
)
{
case
1
:
RRC_CONFIGURATION_REQ
(
msg_p
).
sib2_interval_ULHoppingConfigCommonModeA_r13_val
[
cc_idx
]
=
0
;
break
;
case
2
:
RRC_CONFIGURATION_REQ
(
msg_p
).
sib2_interval_ULHoppingConfigCommonModeA_r13_val
[
cc_idx
]
=
1
;
break
;
case
4
:
RRC_CONFIGURATION_REQ
(
msg_p
).
sib2_interval_ULHoppingConfigCommonModeA_r13_val
[
cc_idx
]
=
2
;
break
;
case
8
:
RRC_CONFIGURATION_REQ
(
msg_p
).
sib2_interval_ULHoppingConfigCommonModeA_r13_val
[
cc_idx
]
=
3
;
break
;
default:
AssertFatal
(
1
==
0
,
"illegal sib2_interval_ULHoppingConfigCommonModeA_r13_val %d
\n
"
,
eMTCconfig
->
sib2_interval_ULHoppingConfigCommonModeA_r13_val
);
}
}
else
if
(
!
strcmp
(
eMTCconfig
->
sib2_interval_ULHoppingConfigCommonModeA_r13
,
"TDD"
))
{
*
RRC_CONFIGURATION_REQ
(
msg_p
).
sib2_interval_ULHoppingConfigCommonModeA_r13
[
cc_idx
]
=
1
;
switch
(
eMTCconfig
->
sib2_interval_ULHoppingConfigCommonModeA_r13_val
)
{
case
1
:
RRC_CONFIGURATION_REQ
(
msg_p
).
sib2_interval_ULHoppingConfigCommonModeA_r13_val
[
cc_idx
]
=
0
;
break
;
case
5
:
RRC_CONFIGURATION_REQ
(
msg_p
).
sib2_interval_ULHoppingConfigCommonModeA_r13_val
[
cc_idx
]
=
1
;
break
;
case
10
:
RRC_CONFIGURATION_REQ
(
msg_p
).
sib2_interval_ULHoppingConfigCommonModeA_r13_val
[
cc_idx
]
=
2
;
break
;
case
20
:
RRC_CONFIGURATION_REQ
(
msg_p
).
sib2_interval_ULHoppingConfigCommonModeA_r13_val
[
cc_idx
]
=
3
;
break
;
default:
AssertFatal
(
1
==
0
,
"illegal sib2_interval_ULHoppingConfigCommonModeA_r13_val %d
\n
"
,
eMTCconfig
->
sib2_interval_ULHoppingConfigCommonModeA_r13_val
);
break
;
}
}
else
{
AssertFatal
(
1
==
0
,
"Failed to parse eNB configuration file %s, sib2_interval_ULHoppingConfigCommonModeA_r13 unknown value !!
\n
"
,
config_fname
);
}
}
openair2/ENB_APP/enb_paramdef_sidelink.h
0 → 100644
View file @
7474b69c
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file openair2/ENB_APP/enb_paramdef_sidelink.h
* \brief definition of configuration parameters for sidelink eNodeB modules
* \author Raymond KNOPP
* \date 2018
* \version 0.1
* \company EURECOM France
* \email: raymond.knopp@eurecom.fr
* \note
* \warning
*/
#ifndef ENB_PARAMDEF_SIDELINK_H_
#define ENB_PARAMDEF_SIDELINK_H_
#include "common/config/config_paramdesc.h"
#include "RRC_paramsvalues.h"
#include <libconfig.h>
#define ENB_CONFIG_STRING_SL_PARAMETERS "SLparameters"
//SIB18
#define ENB_CONFIG_STRING_RXPOOL_SC_CP_LEN "rxPool_sc_CP_Len"
#define ENB_CONFIG_STRING_RXPOOL_SC_PRIOD "rxPool_sc_Period"
#define ENB_CONFIG_STRING_RXPOOL_DATA_CP_LEN "rxPool_data_CP_Len"
#define ENB_CONFIG_STRING_RXPOOL_RC_PRB_NUM "rxPool_ResourceConfig_prb_Num"
#define ENB_CONFIG_STRING_RXPOOL_RC_PRB_START "rxPool_ResourceConfig_prb_Start"
#define ENB_CONFIG_STRING_RXPOOL_RC_PRB_END "rxPool_ResourceConfig_prb_End"
#define ENB_CONFIG_STRING_RXPOOL_RC_OFFSETIND_PRESENT "rxPool_ResourceConfig_offsetIndicator_present"
#define ENB_CONFIG_STRING_RXPOOL_RC_OFFSETIND_CHOICE "rxPool_ResourceConfig_offsetIndicator_choice"
#define ENB_CONFIG_STRING_RXPOOL_RC_SFBITMAP_PRESENT "rxPool_ResourceConfig_subframeBitmap_present"
#define ENB_CONFIG_STRING_RXPOOL_RC_SFBITMAP_CHOICE_BS_BUF "rxPool_ResourceConfig_subframeBitmap_choice_bs_buf"
#define ENB_CONFIG_STRING_RXPOOL_RC_SFBITMAP_CHOICE_BS_SIZE "rxPool_ResourceConfig_subframeBitmap_choice_bs_size"
#define ENB_CONFIG_STRING_RXPOOL_RC_SFBITMAP_CHOICE_BS_ASN_BITS_UNUSED "rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused"
//SIB19 for DiscRxPool
#define ENB_CONFIG_STRING_DISCRXPOOL_CP_LEN "discRxPool_cp_Len"
#define ENB_CONFIG_STRING_DISCRXPOOL_DISCPERIOD "discRxPool_discPeriod"
#define ENB_CONFIG_STRING_DISCRXPOOL_NUMRETX "discRxPool_numRetx"
#define ENB_CONFIG_STRING_DISCRXPOOL_NUMREPETITION "discRxPool_numRepetition"
#define ENB_CONFIG_STRING_DISCRXPOOL_RC_PRB_NUM "discRxPool_ResourceConfig_prb_Num"
#define ENB_CONFIG_STRING_DISCRXPOOL_RC_PRB_START "discRxPool_ResourceConfig_prb_Start"
#define ENB_CONFIG_STRING_DISCRXPOOL_RC_PRB_END "discRxPool_ResourceConfig_prb_End"
#define ENB_CONFIG_STRING_DISCRXPOOL_RC_OFFSETIND_PRESENT "discRxPool_ResourceConfig_offsetIndicator_present"
#define ENB_CONFIG_STRING_DISCRXPOOL_RC_OFFSETIND_CHOICE "discRxPool_ResourceConfig_offsetIndicator_choice"
#define ENB_CONFIG_STRING_DISCRXPOOL_RC_SFBITMAP_PRESENT "discRxPool_ResourceConfig_subframeBitmap_present"
#define ENB_CONFIG_STRING_DISCRXPOOL_RC_SFBITMAP_CHOICE_BS_BUF "discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf"
#define ENB_CONFIG_STRING_DISCRXPOOL_RC_SFBITMAP_CHOICE_BS_SIZE "discRxPool_ResourceConfig_subframeBitmap_choice_bs_size"
#define ENB_CONFIG_STRING_DISCRXPOOL_RC_SFBITMAP_CHOICE_BS_ASN_BITS_UNUSED "discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused"
//SIB19 for DiscRxPoolPS
#define ENB_CONFIG_STRING_DISCRXPOOLPS_CP_LEN "DISCRXPOOLPS_cp_Len"
#define ENB_CONFIG_STRING_DISCRXPOOLPS_DISCPERIOD "DISCRXPOOLPS_discPeriod"
#define ENB_CONFIG_STRING_DISCRXPOOLPS_NUMRETX "DISCRXPOOLPS_numRetx"
#define ENB_CONFIG_STRING_DISCRXPOOLPS_NUMREPETITION "DISCRXPOOLPS_numRepetition"
#define ENB_CONFIG_STRING_DISCRXPOOLPS_RC_PRB_NUM "DISCRXPOOLPS_ResourceConfig_prb_Num"
#define ENB_CONFIG_STRING_DISCRXPOOLPS_RC_PRB_START "DISCRXPOOLPS_ResourceConfig_prb_Start"
#define ENB_CONFIG_STRING_DISCRXPOOLPS_RC_PRB_END "DISCRXPOOLPS_ResourceConfig_prb_End"
#define ENB_CONFIG_STRING_DISCRXPOOLPS_RC_OFFSETIND_PRESENT "DISCRXPOOLPS_ResourceConfig_offsetIndicator_present"
#define ENB_CONFIG_STRING_DISCRXPOOLPS_RC_OFFSETIND_CHOICE "DISCRXPOOLPS_ResourceConfig_offsetIndicator_choice"
#define ENB_CONFIG_STRING_DISCRXPOOLPS_RC_SFBITMAP_PRESENT "DISCRXPOOLPS_ResourceConfig_subframeBitmap_present"
#define ENB_CONFIG_STRING_DISCRXPOOLPS_RC_SFBITMAP_CHOICE_BS_BUF "DISCRXPOOLPS_ResourceConfig_subframeBitmap_choice_bs_buf"
#define ENB_CONFIG_STRING_DISCRXPOOLPS_RC_SFBITMAP_CHOICE_BS_SIZE "DISCRXPOOLPS_ResourceConfig_subframeBitmap_choice_bs_size"
#define ENB_CONFIG_STRING_DISCRXPOOLPS_RC_SFBITMAP_CHOICE_BS_ASN_BITS_UNUSED "DISCRXPOOLPS_ResourceConfig_subframeBitmap_choice_bs_bits_unused"
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/* component carriers configuration parameters */
/* optname helpstr paramflags XXXptr defXXXval type numelt */
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/* init for checkedparam_t structure */
typedef
struct
ccparams_sidelink_s
{
int
sidelink_configured
;
//SIB18
char
*
rxPool_sc_CP_Len
;
char
*
rxPool_sc_Period
;
char
*
rxPool_data_CP_Len
;
libconfig_int
rxPool_ResourceConfig_prb_Num
;
libconfig_int
rxPool_ResourceConfig_prb_Start
;
libconfig_int
rxPool_ResourceConfig_prb_End
;
char
*
rxPool_ResourceConfig_offsetIndicator_present
;
libconfig_int
rxPool_ResourceConfig_offsetIndicator_choice
;
char
*
rxPool_ResourceConfig_subframeBitmap_present
;
char
*
rxPool_ResourceConfig_subframeBitmap_choice_bs_buf
;
libconfig_int
rxPool_ResourceConfig_subframeBitmap_choice_bs_size
;
libconfig_int
rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused
;
//SIB19
//For discRxPool
char
*
discRxPool_cp_Len
;
char
*
discRxPool_discPeriod
;
libconfig_int
discRxPool_numRetx
;
libconfig_int
discRxPool_numRepetition
;
libconfig_int
discRxPool_ResourceConfig_prb_Num
;
libconfig_int
discRxPool_ResourceConfig_prb_Start
;
libconfig_int
discRxPool_ResourceConfig_prb_End
;
char
*
discRxPool_ResourceConfig_offsetIndicator_present
;
libconfig_int
discRxPool_ResourceConfig_offsetIndicator_choice
;
char
*
discRxPool_ResourceConfig_subframeBitmap_present
;
char
*
discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf
;
libconfig_int
discRxPool_ResourceConfig_subframeBitmap_choice_bs_size
;
libconfig_int
discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused
;
//For discRxPoolPS
char
*
discRxPoolPS_cp_Len
;
const
char
*
discRxPoolPS_discPeriod
;
libconfig_int
discRxPoolPS_numRetx
;
libconfig_int
discRxPoolPS_numRepetition
;
libconfig_int
discRxPoolPS_ResourceConfig_prb_Num
;
libconfig_int
discRxPoolPS_ResourceConfig_prb_Start
;
libconfig_int
discRxPoolPS_ResourceConfig_prb_End
;
const
char
*
discRxPoolPS_ResourceConfig_offsetIndicator_present
;
libconfig_int
discRxPoolPS_ResourceConfig_offsetIndicator_choice
;
const
char
*
discRxPoolPS_ResourceConfig_subframeBitmap_present
;
char
*
discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_buf
;
libconfig_int
discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_size
;
libconfig_int
discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_bits_unused
;
}
ccparams_sidelink_t
;
/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/* component carriers configuration parameters */
/* optname helpstr paramflags XXXptr defXXXval type numelt checked_param */
/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
#define CCPARAMS_SIDELINK_DESC(SLparams) { \
{"sidelink_configured", NULL, 0, iptr:(int*)&SLparams.sidelink_configured, defintval:0, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_RXPOOL_SC_CP_LEN, NULL, 0, strptr:(char **)&SLparams.rxPool_sc_CP_Len, defstrval:"normal", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_RXPOOL_SC_PRIOD, NULL, 0, strptr:(char **)&SLparams.rxPool_sc_Period, defstrval:"sf40", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_RXPOOL_DATA_CP_LEN, NULL, 0, strptr:(char **)&SLparams.rxPool_data_CP_Len, defstrval:"normal", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_RXPOOL_RC_PRB_NUM, NULL, 0, iptr:(int32_t *)&SLparams.rxPool_ResourceConfig_prb_Num, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_RXPOOL_RC_PRB_START, NULL, 0, iptr:(int32_t *)&SLparams.rxPool_ResourceConfig_prb_Start, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_RXPOOL_RC_PRB_END, NULL, 0, iptr:(int32_t *)&SLparams.rxPool_ResourceConfig_prb_End, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_RXPOOL_RC_OFFSETIND_PRESENT, NULL, 0, strptr:(char **)&SLparams.rxPool_ResourceConfig_offsetIndicator_present, defstrval:"prNothing", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_RXPOOL_RC_OFFSETIND_CHOICE, NULL, 0, iptr:(int32_t *)&SLparams.rxPool_ResourceConfig_offsetIndicator_choice, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_RXPOOL_RC_SFBITMAP_PRESENT, NULL, 0, strptr:(char **)&SLparams.rxPool_ResourceConfig_subframeBitmap_present, defstrval:"prNothing", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_RXPOOL_RC_SFBITMAP_CHOICE_BS_BUF, NULL, 0, strptr:(char **)&SLparams.rxPool_ResourceConfig_subframeBitmap_choice_bs_buf, defstrval:"001001", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_RXPOOL_RC_SFBITMAP_CHOICE_BS_SIZE, NULL, 0, iptr:(int32_t *)&SLparams.rxPool_ResourceConfig_subframeBitmap_choice_bs_size, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_RXPOOL_RC_SFBITMAP_CHOICE_BS_ASN_BITS_UNUSED, NULL, 0, iptr:(int32_t *)&SLparams.rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOL_CP_LEN, NULL, 0, strptr:(char **)&SLparams.discRxPool_cp_Len, defstrval:"normal", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOL_DISCPERIOD, NULL, 0, strptr:(char **)&SLparams.discRxPool_discPeriod, defstrval:"rf32", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOL_NUMRETX, NULL, 0, iptr:(int32_t *)&SLparams.discRxPool_numRetx, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOL_NUMREPETITION, NULL, 0, iptr:(int32_t *)&SLparams.discRxPool_numRepetition, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOL_RC_PRB_NUM, NULL, 0, iptr:(int32_t *)&SLparams.discRxPool_ResourceConfig_prb_Num, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOL_RC_PRB_START, NULL, 0, iptr:(int32_t *)&SLparams.discRxPool_ResourceConfig_prb_Start, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOL_RC_PRB_END, NULL, 0, iptr:(int32_t *)&SLparams.discRxPool_ResourceConfig_prb_End, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOL_RC_OFFSETIND_PRESENT, NULL, 0, strptr:(char **)&SLparams.discRxPool_ResourceConfig_offsetIndicator_present, defstrval:"prNothing", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOL_RC_OFFSETIND_CHOICE, NULL, 0, iptr:(int32_t *)&SLparams.discRxPool_ResourceConfig_offsetIndicator_choice, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOL_RC_SFBITMAP_PRESENT, NULL, 0, strptr:(char **)&SLparams.discRxPool_ResourceConfig_subframeBitmap_present, defstrval:"prNothing", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOL_RC_SFBITMAP_CHOICE_BS_BUF, NULL, 0, strptr:(char **)&SLparams.discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf, defstrval:"001001", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOL_RC_SFBITMAP_CHOICE_BS_SIZE, NULL, 0, iptr:(int32_t *)&SLparams.discRxPool_ResourceConfig_subframeBitmap_choice_bs_size, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOL_RC_SFBITMAP_CHOICE_BS_ASN_BITS_UNUSED,NULL, 0, iptr:(int32_t *)&SLparams.discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOLPS_CP_LEN, NULL, 0, strptr:(char **)&SLparams.discRxPoolPS_cp_Len, defstrval:"normal", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOLPS_DISCPERIOD, NULL, 0, strptr:(char **)&SLparams.discRxPoolPS_discPeriod, defstrval:"rf32", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOLPS_NUMRETX, NULL, 0, iptr:(int32_t *)&SLparams.discRxPoolPS_numRetx, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOLPS_NUMREPETITION, NULL, 0, iptr:(int32_t *)&SLparams.discRxPoolPS_numRepetition, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOLPS_RC_PRB_NUM, NULL, 0, iptr:(int32_t *)&SLparams.discRxPoolPS_ResourceConfig_prb_Num, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOLPS_RC_PRB_START, NULL, 0, iptr:(int32_t *)&SLparams.discRxPoolPS_ResourceConfig_prb_Start, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOLPS_RC_PRB_END, NULL, 0, iptr:(int32_t *)&SLparams.discRxPoolPS_ResourceConfig_prb_End, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOLPS_RC_OFFSETIND_PRESENT, NULL, 0, strptr:(char **)&SLparams.discRxPoolPS_ResourceConfig_offsetIndicator_present, defstrval:"prNothing", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOLPS_RC_OFFSETIND_CHOICE, NULL, 0, iptr:(int32_t *)&SLparams.discRxPoolPS_ResourceConfig_offsetIndicator_choice, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOLPS_RC_SFBITMAP_PRESENT, NULL, 0, strptr:(char **)&SLparams.discRxPoolPS_ResourceConfig_subframeBitmap_present, defstrval:"prNothing", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOLPS_RC_SFBITMAP_CHOICE_BS_BUF, NULL, 0, strptr:(char **)&SLparams.discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_buf, defstrval:"001001", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOLPS_RC_SFBITMAP_CHOICE_BS_SIZE, NULL, 0, iptr:(int32_t *)&SLparams.discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_size, defintval:1, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_DISCRXPOOLPS_RC_SFBITMAP_CHOICE_BS_ASN_BITS_UNUSED,NULL, 0, iptr:(int32_t *)&SLparams.discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_bits_unused, defintval:1, TYPE_UINT, 0} \
}
#endif
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
View file @
7474b69c
...
...
@@ -2743,7 +2743,6 @@ schedule_ue_spec_br(
struct
LTE_PUCCH_ConfigCommon_v1310
*
ext4_pucch
;
LTE_PRACH_ParametersListCE_r13_t
*
prach_ParametersListCE_r13
;
struct
LTE_N1PUCCH_AN_InfoList_r13
*
pucch_N1PUCCH_AN_InfoList_r13
;
LTE_PRACH_ParametersCE_r13_t
*
p
[
4
]
=
{
NULL
,
NULL
,
NULL
,
NULL
};
int
pucchreps
[
4
]
=
{
1
,
1
,
1
,
1
};
int
n1pucchan
[
4
]
=
{
0
,
0
,
0
,
0
};
uint32_t
ackNAK_absSF
;
...
...
@@ -2769,23 +2768,19 @@ schedule_ue_spec_br(
switch
(
prach_ParametersListCE_r13
->
list
.
count
)
{
case
4
:
p
[
3
]
=
prach_ParametersListCE_r13
->
list
.
array
[
3
];
n1pucchan
[
3
]
=
*
pucch_N1PUCCH_AN_InfoList_r13
->
list
.
array
[
3
];
AssertFatal
(
ext4_pucch
->
pucch_NumRepetitionCE_Msg4_Level3_r13
!=
NULL
,
"pucch_NumRepetitionCE_Msg4_Level3 shouldn't be NULL
\n
"
);
pucchreps
[
3
]
=
(
int
)
(
4
<<
*
ext4_pucch
->
pucch_NumRepetitionCE_Msg4_Level3_r13
);
case
3
:
p
[
2
]
=
prach_ParametersListCE_r13
->
list
.
array
[
2
];
n1pucchan
[
2
]
=
*
pucch_N1PUCCH_AN_InfoList_r13
->
list
.
array
[
2
];
AssertFatal
(
ext4_pucch
->
pucch_NumRepetitionCE_Msg4_Level2_r13
!=
NULL
,
"pucch_NumRepetitionCE_Msg4_Level2 shouldn't be NULL
\n
"
);
pucchreps
[
2
]
=
(
int
)
(
4
<<
*
ext4_pucch
->
pucch_NumRepetitionCE_Msg4_Level2_r13
);
case
2
:
p
[
1
]
=
prach_ParametersListCE_r13
->
list
.
array
[
1
];
n1pucchan
[
1
]
=
*
pucch_N1PUCCH_AN_InfoList_r13
->
list
.
array
[
1
];
AssertFatal
(
ext4_pucch
->
pucch_NumRepetitionCE_Msg4_Level1_r13
!=
NULL
,
"pucch_NumRepetitionCE_Msg4_Level1 shouldn't be NULL
\n
"
);
pucchreps
[
1
]
=
(
int
)
(
1
<<
*
ext4_pucch
->
pucch_NumRepetitionCE_Msg4_Level1_r13
);
case
1
:
p
[
0
]
=
prach_ParametersListCE_r13
->
list
.
array
[
0
];
n1pucchan
[
0
]
=
*
pucch_N1PUCCH_AN_InfoList_r13
->
list
.
array
[
0
];
AssertFatal
(
ext4_pucch
->
pucch_NumRepetitionCE_Msg4_Level0_r13
!=
NULL
,
"pucch_NumRepetitionCE_Msg4_Level0 shouldn't be NULL
\n
"
);
pucchreps
[
0
]
=
(
int
)
(
1
<<
*
ext4_pucch
->
pucch_NumRepetitionCE_Msg4_Level0_r13
);
...
...
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
View file @
7474b69c
...
...
@@ -2272,8 +2272,7 @@ uint8_t get_tmode(module_id_t module_idP, int CC_idP, int UE_idP)
eNB_MAC_INST
*
eNB
=
RC
.
mac
[
module_idP
];
COMMON_channels_t
*
cc
=
&
eNB
->
common_channels
[
CC_idP
];
struct
LTE_PhysicalConfigDedicated
*
physicalConfigDedicated
=
eNB
->
UE_list
.
physicalConfigDedicated
[
CC_idP
][
UE_idP
];
struct
LTE_PhysicalConfigDedicated
*
physicalConfigDedicated
=
&
eNB
->
UE_list
.
physicalConfigDedicated
[
CC_idP
][
UE_idP
];
if
(
physicalConfigDedicated
==
NULL
)
{
// RRCConnectionSetup not received by UE yet
AssertFatal
(
cc
->
p_eNB
<=
2
,
"p_eNB is %d, should be <2
\n
"
,
...
...
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