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
spbro
OpenXG-RAN
Commits
10b8e1b3
Commit
10b8e1b3
authored
Apr 18, 2022
by
francescomani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
harmonization of uplink BWPs configuration
parent
28f3997e
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
194 additions
and
591 deletions
+194
-591
openair2/RRC/NR/MESSAGES/asn1_msg.c
openair2/RRC/NR/MESSAGES/asn1_msg.c
+6
-288
openair2/RRC/NR/nr_rrc_config.c
openair2/RRC/NR/nr_rrc_config.c
+175
-0
openair2/RRC/NR/nr_rrc_config.h
openair2/RRC/NR/nr_rrc_config.h
+7
-0
openair2/RRC/NR/rrc_gNB_reconfig.c
openair2/RRC/NR/rrc_gNB_reconfig.c
+6
-303
No files found.
openair2/RRC/NR/MESSAGES/asn1_msg.c
View file @
10b8e1b3
...
...
@@ -1005,293 +1005,6 @@ long rrc_get_max_nr_csrs(uint8_t max_rbs, long b_SRS) {
return
c_srs
;
}
void
fill_default_uplinkBWP
(
NR_BWP_Uplink_t
*
ubwp
,
int
bwp_loop
,
NR_ServingCellConfig_t
*
servingcellconfigdedicated
,
NR_ServingCellConfigCommon_t
*
scc
,
const
gNB_RrcConfigurationReq
*
configuration
,
int
uid
)
{
/// BWP common configuration
ubwp
->
bwp_Common
=
calloc
(
1
,
sizeof
(
*
ubwp
->
bwp_Common
));
if
(
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
&&
bwp_loop
<
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
count
)
{
ubwp
->
bwp_Id
=
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
bwp_loop
]
->
bwp_Id
;
ubwp
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
=
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
bwp_loop
]
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
;
ubwp
->
bwp_Common
->
genericParameters
.
subcarrierSpacing
=
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
bwp_loop
]
->
bwp_Common
->
genericParameters
.
subcarrierSpacing
;
ubwp
->
bwp_Common
->
genericParameters
.
cyclicPrefix
=
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
bwp_loop
]
->
bwp_Common
->
genericParameters
.
cyclicPrefix
;
}
else
{
ubwp
->
bwp_Id
=
bwp_loop
+
1
;
ubwp
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
=
PRBalloc_to_locationandbandwidth
(
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
,
0
);
ubwp
->
bwp_Common
->
genericParameters
.
subcarrierSpacing
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
subcarrierSpacing
;
ubwp
->
bwp_Common
->
genericParameters
.
cyclicPrefix
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
cyclicPrefix
;
}
ubwp
->
bwp_Common
->
rach_ConfigCommon
=
NULL
;
ubwp
->
bwp_Common
->
pusch_ConfigCommon
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
;
ubwp
->
bwp_Common
->
pucch_ConfigCommon
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
pucch_ConfigCommon
;
/// BWP dedicated configuration
ubwp
->
bwp_Dedicated
=
calloc
(
1
,
sizeof
(
*
ubwp
->
bwp_Dedicated
));
// PUCCH config
ubwp
->
bwp_Dedicated
->
pucch_Config
=
calloc
(
1
,
sizeof
(
*
ubwp
->
bwp_Dedicated
->
pucch_Config
));
ubwp
->
bwp_Dedicated
->
pucch_Config
->
present
=
NR_SetupRelease_PUCCH_Config_PR_setup
;
NR_PUCCH_Config_t
*
pucch_Config
=
calloc
(
1
,
sizeof
(
*
pucch_Config
));
ubwp
->
bwp_Dedicated
->
pucch_Config
->
choice
.
setup
=
pucch_Config
;
pucch_Config
->
resourceSetToAddModList
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
resourceSetToAddModList
));
pucch_Config
->
resourceSetToReleaseList
=
NULL
;
NR_PUCCH_ResourceSet_t
*
pucchresset0
=
calloc
(
1
,
sizeof
(
*
pucchresset0
));
pucchresset0
->
pucch_ResourceSetId
=
0
;
NR_PUCCH_ResourceId_t
*
pucchres0id0
=
calloc
(
1
,
sizeof
(
*
pucchres0id0
));
*
pucchres0id0
=
ubwp
->
bwp_Id
;
// To uniquely identify each pucchresource lets derive it from the BWPId
ASN_SEQUENCE_ADD
(
&
pucchresset0
->
resourceList
.
list
,
pucchres0id0
);
pucchresset0
->
maxPayloadSize
=
NULL
;
ASN_SEQUENCE_ADD
(
&
pucch_Config
->
resourceSetToAddModList
->
list
,
pucchresset0
);
pucch_Config
->
resourceToAddModList
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
resourceToAddModList
));
pucch_Config
->
resourceToReleaseList
=
NULL
;
int
curr_bwp
=
NRRIV2BW
(
ubwp
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
,
MAX_BWP_SIZE
);
NR_PUCCH_Resource_t
*
pucchres0
=
calloc
(
1
,
sizeof
(
*
pucchres0
));
pucchres0
->
pucch_ResourceId
=*
pucchres0id0
;
pucchres0
->
startingPRB
=
(
8
+
uid
)
%
curr_bwp
;
pucchres0
->
intraSlotFrequencyHopping
=
NULL
;
pucchres0
->
secondHopPRB
=
NULL
;
pucchres0
->
format
.
present
=
NR_PUCCH_Resource__format_PR_format0
;
pucchres0
->
format
.
choice
.
format0
=
calloc
(
1
,
sizeof
(
*
pucchres0
->
format
.
choice
.
format0
));
pucchres0
->
format
.
choice
.
format0
->
initialCyclicShift
=
0
;
pucchres0
->
format
.
choice
.
format0
->
nrofSymbols
=
1
;
pucchres0
->
format
.
choice
.
format0
->
startingSymbolIndex
=
13
;
ASN_SEQUENCE_ADD
(
&
pucch_Config
->
resourceToAddModList
->
list
,
pucchres0
);
/*
pucch_Config->format2=calloc(1,sizeof(*pucch_Config->format2));
pucch_Config->format2->present=NR_SetupRelease_PUCCH_FormatConfig_PR_setup;
NR_PUCCH_FormatConfig_t *pucchfmt2 = calloc(1,sizeof(*pucchfmt2));
pucch_Config->format2->choice.setup = pucchfmt2;
pucchfmt2->interslotFrequencyHopping=NULL;
pucchfmt2->additionalDMRS=NULL;
pucchfmt2->maxCodeRate=calloc(1,sizeof(*pucchfmt2->maxCodeRate));
*pucchfmt2->maxCodeRate=NR_PUCCH_MaxCodeRate_zeroDot35;
pucchfmt2->nrofSlots=NULL;
pucchfmt2->pi2BPSK=NULL;
pucchfmt2->simultaneousHARQ_ACK_CSI=calloc(1,sizeof(*pucchfmt2->simultaneousHARQ_ACK_CSI));
*pucchfmt2->simultaneousHARQ_ACK_CSI=NR_PUCCH_FormatConfig__simultaneousHARQ_ACK_CSI_true;
*/
// PUCCH config - Scheduling request configuration
pucch_Config
->
schedulingRequestResourceToAddModList
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
schedulingRequestResourceToAddModList
));
NR_SchedulingRequestResourceConfig_t
*
schedulingRequestResourceConfig
=
calloc
(
1
,
sizeof
(
*
schedulingRequestResourceConfig
));
schedulingRequestResourceConfig
->
schedulingRequestResourceId
=
1
;
schedulingRequestResourceConfig
->
schedulingRequestID
=
0
;
schedulingRequestResourceConfig
->
periodicityAndOffset
=
calloc
(
1
,
sizeof
(
*
schedulingRequestResourceConfig
->
periodicityAndOffset
));
schedulingRequestResourceConfig
->
periodicityAndOffset
->
present
=
NR_SchedulingRequestResourceConfig__periodicityAndOffset_PR_sl40
;
// 40 slot period
// note: make sure that there is no issue here. Later choose the RNTI accordingly.
// Here we would be limited to 3 UEs on this resource (1 1/2 Frames 30 kHz SCS, 5 ms TDD periodicity => slots 7,8,9).
// This should be a temporary resource until the first RRCReconfiguration gives new pucch resources.
// Check for above configuration and exit for now if it is not the case
AssertFatal
(
scc
->
downlinkConfigCommon
->
initialDownlinkBWP
->
genericParameters
.
subcarrierSpacing
==
NR_SubcarrierSpacing_kHz30
,
"SCS != 30kHz
\n
"
);
AssertFatal
(
scc
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
.
dl_UL_TransmissionPeriodicity
==
NR_TDD_UL_DL_Pattern__dl_UL_TransmissionPeriodicity_ms5
,
"TDD period != 5ms : %ld
\n
"
,
scc
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
.
dl_UL_TransmissionPeriodicity
);
schedulingRequestResourceConfig
->
periodicityAndOffset
->
choice
.
sl40
=
8
;
schedulingRequestResourceConfig
->
resource
=
calloc
(
1
,
sizeof
(
*
schedulingRequestResourceConfig
->
resource
));
*
schedulingRequestResourceConfig
->
resource
=
*
pucchres0id0
;
ASN_SEQUENCE_ADD
(
&
pucch_Config
->
schedulingRequestResourceToAddModList
->
list
,
schedulingRequestResourceConfig
);
pucch_Config
->
schedulingRequestResourceToReleaseList
=
NULL
;
pucch_Config
->
multi_CSI_PUCCH_ResourceList
=
NULL
;
pucch_Config
->
dl_DataToUL_ACK
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
dl_DataToUL_ACK
));
long
*
delay
[
8
];
for
(
int
i
=
0
;
i
<
8
;
i
++
)
{
delay
[
i
]
=
calloc
(
1
,
sizeof
(
*
delay
[
i
]));
AssertFatal
(
configuration
->
minRXTXTIME
>=
2
&&
configuration
->
minRXTXTIME
<
7
,
"check minRXTXTIME %d
\n
"
,
configuration
->
minRXTXTIME
);
*
delay
[
i
]
=
i
+
configuration
->
minRXTXTIME
;
ASN_SEQUENCE_ADD
(
&
pucch_Config
->
dl_DataToUL_ACK
->
list
,
delay
[
i
]);
}
pucch_Config
->
spatialRelationInfoToAddModList
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
spatialRelationInfoToAddModList
));
NR_PUCCH_SpatialRelationInfo_t
*
pucchspatial
=
calloc
(
1
,
sizeof
(
*
pucchspatial
));
pucchspatial
->
pucch_SpatialRelationInfoId
=
1
;
pucchspatial
->
servingCellId
=
NULL
;
if
(
configuration
->
do_CSIRS
)
{
pucchspatial
->
referenceSignal
.
present
=
NR_PUCCH_SpatialRelationInfo__referenceSignal_PR_csi_RS_Index
;
pucchspatial
->
referenceSignal
.
choice
.
csi_RS_Index
=
0
;
}
else
{
pucchspatial
->
referenceSignal
.
present
=
NR_PUCCH_SpatialRelationInfo__referenceSignal_PR_ssb_Index
;
pucchspatial
->
referenceSignal
.
choice
.
ssb_Index
=
0
;
}
pucchspatial
->
pucch_PathlossReferenceRS_Id
=
0
;
pucchspatial
->
p0_PUCCH_Id
=
1
;
pucchspatial
->
closedLoopIndex
=
NR_PUCCH_SpatialRelationInfo__closedLoopIndex_i0
;
ASN_SEQUENCE_ADD
(
&
pucch_Config
->
spatialRelationInfoToAddModList
->
list
,
pucchspatial
);
pucch_Config
->
spatialRelationInfoToReleaseList
=
NULL
;
pucch_Config
->
pucch_PowerControl
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
pucch_PowerControl
));
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f0
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f0
));
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f0
=
0
;
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f1
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f1
));
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f1
=
0
;
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f2
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f2
));
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f2
=
0
;
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f3
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f3
));
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f3
=
0
;
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f4
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f4
));
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f4
=
0
;
pucch_Config
->
pucch_PowerControl
->
p0_Set
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
pucch_PowerControl
->
p0_Set
));
NR_P0_PUCCH_t
*
p00
=
calloc
(
1
,
sizeof
(
*
p00
));
p00
->
p0_PUCCH_Id
=
1
;
p00
->
p0_PUCCH_Value
=
0
;
ASN_SEQUENCE_ADD
(
&
pucch_Config
->
pucch_PowerControl
->
p0_Set
->
list
,
p00
);
pucch_Config
->
pucch_PowerControl
->
pathlossReferenceRSs
=
NULL
;
// PUSCH config
ubwp
->
bwp_Dedicated
->
pusch_Config
=
calloc
(
1
,
sizeof
(
*
ubwp
->
bwp_Dedicated
->
pusch_Config
));
ubwp
->
bwp_Dedicated
->
pusch_Config
->
present
=
NR_SetupRelease_PUSCH_Config_PR_setup
;
NR_PUSCH_Config_t
*
pusch_Config
=
calloc
(
1
,
sizeof
(
*
pusch_Config
));
ubwp
->
bwp_Dedicated
->
pusch_Config
->
choice
.
setup
=
pusch_Config
;
pusch_Config
->
txConfig
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
txConfig
));
*
pusch_Config
->
txConfig
=
NR_PUSCH_Config__txConfig_codebook
;
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeA
=
NULL
;
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
));
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
->
present
=
NR_SetupRelease_DMRS_UplinkConfig_PR_setup
;
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
->
choice
.
setup
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
->
choice
.
setup
));
NR_DMRS_UplinkConfig_t
*
NR_DMRS_UplinkConfig
=
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
->
choice
.
setup
;
NR_DMRS_UplinkConfig
->
dmrs_Type
=
NULL
;
NR_DMRS_UplinkConfig
->
dmrs_AdditionalPosition
=
calloc
(
1
,
sizeof
(
*
NR_DMRS_UplinkConfig
->
dmrs_AdditionalPosition
));
*
NR_DMRS_UplinkConfig
->
dmrs_AdditionalPosition
=
NR_DMRS_UplinkConfig__dmrs_AdditionalPosition_pos0
;
NR_DMRS_UplinkConfig
->
phaseTrackingRS
=
NULL
;
NR_DMRS_UplinkConfig
->
maxLength
=
NULL
;
NR_DMRS_UplinkConfig
->
transformPrecodingDisabled
=
calloc
(
1
,
sizeof
(
*
NR_DMRS_UplinkConfig
->
transformPrecodingDisabled
));
NR_DMRS_UplinkConfig
->
transformPrecodingDisabled
->
scramblingID0
=
NULL
;
NR_DMRS_UplinkConfig
->
transformPrecodingDisabled
->
scramblingID1
=
NULL
;
NR_DMRS_UplinkConfig
->
transformPrecodingEnabled
=
NULL
;
pusch_Config
->
pusch_PowerControl
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
pusch_PowerControl
));
pusch_Config
->
pusch_PowerControl
->
tpc_Accumulation
=
NULL
;
pusch_Config
->
pusch_PowerControl
->
msg3_Alpha
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
pusch_PowerControl
->
msg3_Alpha
));
*
pusch_Config
->
pusch_PowerControl
->
msg3_Alpha
=
NR_Alpha_alpha1
;
pusch_Config
->
pusch_PowerControl
->
p0_NominalWithoutGrant
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
pusch_PowerControl
->
p0_NominalWithoutGrant
));
*
pusch_Config
->
pusch_PowerControl
->
p0_NominalWithoutGrant
=
-
98
;
pusch_Config
->
pusch_PowerControl
->
p0_AlphaSets
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
pusch_PowerControl
->
p0_AlphaSets
));
NR_P0_PUSCH_AlphaSet_t
*
aset
=
calloc
(
1
,
sizeof
(
*
aset
));
aset
->
p0_PUSCH_AlphaSetId
=
0
;
aset
->
p0
=
calloc
(
1
,
sizeof
(
*
aset
->
p0
));
*
aset
->
p0
=
0
;
aset
->
alpha
=
calloc
(
1
,
sizeof
(
*
aset
->
alpha
));
*
aset
->
alpha
=
NR_Alpha_alpha1
;
ASN_SEQUENCE_ADD
(
&
pusch_Config
->
pusch_PowerControl
->
p0_AlphaSets
->
list
,
aset
);
pusch_Config
->
pusch_PowerControl
->
pathlossReferenceRSToAddModList
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
pusch_PowerControl
->
pathlossReferenceRSToAddModList
));
NR_PUSCH_PathlossReferenceRS_t
*
plrefRS
=
calloc
(
1
,
sizeof
(
*
plrefRS
));
plrefRS
->
pusch_PathlossReferenceRS_Id
=
0
;
plrefRS
->
referenceSignal
.
present
=
NR_PUSCH_PathlossReferenceRS__referenceSignal_PR_ssb_Index
;
plrefRS
->
referenceSignal
.
choice
.
ssb_Index
=
0
;
ASN_SEQUENCE_ADD
(
&
pusch_Config
->
pusch_PowerControl
->
pathlossReferenceRSToAddModList
->
list
,
plrefRS
);
pusch_Config
->
pusch_PowerControl
->
pathlossReferenceRSToReleaseList
=
NULL
;
pusch_Config
->
pusch_PowerControl
->
twoPUSCH_PC_AdjustmentStates
=
NULL
;
pusch_Config
->
pusch_PowerControl
->
deltaMCS
=
NULL
;
pusch_Config
->
pusch_PowerControl
->
sri_PUSCH_MappingToAddModList
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
pusch_PowerControl
->
sri_PUSCH_MappingToAddModList
));
NR_SRI_PUSCH_PowerControl_t
*
sriPUSCHPC
=
calloc
(
1
,
sizeof
(
*
sriPUSCHPC
));
sriPUSCHPC
->
sri_PUSCH_PowerControlId
=
0
;
sriPUSCHPC
->
sri_PUSCH_PathlossReferenceRS_Id
=
0
;
sriPUSCHPC
->
sri_P0_PUSCH_AlphaSetId
=
0
;
sriPUSCHPC
->
sri_PUSCH_ClosedLoopIndex
=
NR_SRI_PUSCH_PowerControl__sri_PUSCH_ClosedLoopIndex_i0
;
ASN_SEQUENCE_ADD
(
&
pusch_Config
->
pusch_PowerControl
->
sri_PUSCH_MappingToAddModList
->
list
,
sriPUSCHPC
);
pusch_Config
->
pusch_PowerControl
->
sri_PUSCH_MappingToReleaseList
=
NULL
;
pusch_Config
->
frequencyHopping
=
NULL
;
pusch_Config
->
frequencyHoppingOffsetLists
=
NULL
;
pusch_Config
->
resourceAllocation
=
NR_PUSCH_Config__resourceAllocation_resourceAllocationType1
;
pusch_Config
->
pusch_TimeDomainAllocationList
=
NULL
;
pusch_Config
->
pusch_AggregationFactor
=
NULL
;
pusch_Config
->
mcs_Table
=
NULL
;
pusch_Config
->
mcs_TableTransformPrecoder
=
NULL
;
pusch_Config
->
transformPrecoder
=
NULL
;
if
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
msg3_transformPrecoder
==
NULL
)
{
pusch_Config
->
transformPrecoder
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
transformPrecoder
));
*
pusch_Config
->
transformPrecoder
=
NR_PUSCH_Config__transformPrecoder_disabled
;
}
pusch_Config
->
codebookSubset
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
codebookSubset
));
*
pusch_Config
->
codebookSubset
=
NR_PUSCH_Config__codebookSubset_nonCoherent
;
pusch_Config
->
maxRank
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
maxRank
));
*
pusch_Config
->
maxRank
=
1
;
pusch_Config
->
rbg_Size
=
NULL
;
pusch_Config
->
uci_OnPUSCH
=
NULL
;
pusch_Config
->
tp_pi2BPSK
=
NULL
;
uint8_t
transform_precoding
=
NR_PUSCH_Config__transformPrecoder_disabled
;
if
(
pusch_Config
->
transformPrecoder
==
NULL
)
{
if
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
msg3_transformPrecoder
!=
NULL
)
transform_precoding
=
NR_PUSCH_Config__transformPrecoder_enabled
;
}
else
{
transform_precoding
=
*
pusch_Config
->
transformPrecoder
;
}
if
(
transform_precoding
==
NR_PUSCH_Config__transformPrecoder_enabled
)
{
// Enable DMRS uplink config for transform precoding enabled
NR_DMRS_UplinkConfig
->
transformPrecodingEnabled
=
calloc
(
1
,
sizeof
(
*
NR_DMRS_UplinkConfig
->
transformPrecodingEnabled
));
NR_DMRS_UplinkConfig
->
transformPrecodingEnabled
->
nPUSCH_Identity
=
NULL
;
NR_DMRS_UplinkConfig
->
transformPrecodingEnabled
->
sequenceGroupHopping
=
NULL
;
NR_DMRS_UplinkConfig
->
transformPrecodingEnabled
->
sequenceHopping
=
NULL
;
NR_DMRS_UplinkConfig
->
transformPrecodingEnabled
->
ext1
=
NULL
;
LOG_I
(
NR_RRC
,
"Transform precoding enabled
\n
"
);
}
// SRS config
ubwp
->
bwp_Dedicated
->
configuredGrantConfig
=
NULL
;
ubwp
->
bwp_Dedicated
->
srs_Config
=
calloc
(
1
,
sizeof
(
*
ubwp
->
bwp_Dedicated
->
srs_Config
));
ubwp
->
bwp_Dedicated
->
srs_Config
->
present
=
NR_SetupRelease_SRS_Config_PR_setup
;
NR_SRS_Config_t
*
srs_Config
=
calloc
(
1
,
sizeof
(
*
srs_Config
));
ubwp
->
bwp_Dedicated
->
srs_Config
->
choice
.
setup
=
srs_Config
;
srs_Config
->
srs_ResourceSetToReleaseList
=
NULL
;
srs_Config
->
srs_ResourceSetToAddModList
=
calloc
(
1
,
sizeof
(
*
srs_Config
->
srs_ResourceSetToAddModList
));
NR_SRS_ResourceSet_t
*
srs_resset0
=
calloc
(
1
,
sizeof
(
*
srs_resset0
));
srs_resset0
->
srs_ResourceSetId
=
0
;
srs_resset0
->
srs_ResourceIdList
=
calloc
(
1
,
sizeof
(
*
srs_resset0
->
srs_ResourceIdList
));
NR_SRS_ResourceId_t
*
srs_resset0_id
=
calloc
(
1
,
sizeof
(
*
srs_resset0_id
));
*
srs_resset0_id
=
0
;
ASN_SEQUENCE_ADD
(
&
srs_resset0
->
srs_ResourceIdList
->
list
,
srs_resset0_id
);
srs_Config
->
srs_ResourceToReleaseList
=
NULL
;
srs_resset0
->
resourceType
.
present
=
NR_SRS_ResourceSet__resourceType_PR_aperiodic
;
srs_resset0
->
resourceType
.
choice
.
aperiodic
=
calloc
(
1
,
sizeof
(
*
srs_resset0
->
resourceType
.
choice
.
aperiodic
));
srs_resset0
->
resourceType
.
choice
.
aperiodic
->
aperiodicSRS_ResourceTrigger
=
1
;
srs_resset0
->
resourceType
.
choice
.
aperiodic
->
csi_RS
=
NULL
;
srs_resset0
->
resourceType
.
choice
.
aperiodic
->
slotOffset
=
calloc
(
1
,
sizeof
(
*
srs_resset0
->
resourceType
.
choice
.
aperiodic
->
slotOffset
));
*
srs_resset0
->
resourceType
.
choice
.
aperiodic
->
slotOffset
=
2
;
srs_resset0
->
resourceType
.
choice
.
aperiodic
->
ext1
=
NULL
;
srs_resset0
->
usage
=
NR_SRS_ResourceSet__usage_codebook
;
srs_resset0
->
alpha
=
calloc
(
1
,
sizeof
(
*
srs_resset0
->
alpha
));
*
srs_resset0
->
alpha
=
NR_Alpha_alpha1
;
srs_resset0
->
p0
=
calloc
(
1
,
sizeof
(
*
srs_resset0
->
p0
));
*
srs_resset0
->
p0
=-
80
;
srs_resset0
->
pathlossReferenceRS
=
NULL
;
srs_resset0
->
srs_PowerControlAdjustmentStates
=
NULL
;
ASN_SEQUENCE_ADD
(
&
srs_Config
->
srs_ResourceSetToAddModList
->
list
,
srs_resset0
);
srs_Config
->
srs_ResourceToReleaseList
=
NULL
;
srs_Config
->
srs_ResourceToAddModList
=
calloc
(
1
,
sizeof
(
*
srs_Config
->
srs_ResourceToAddModList
));
NR_SRS_Resource_t
*
srs_res0
=
calloc
(
1
,
sizeof
(
*
srs_res0
));
srs_res0
->
srs_ResourceId
=
0
;
srs_res0
->
nrofSRS_Ports
=
NR_SRS_Resource__nrofSRS_Ports_port1
;
srs_res0
->
ptrs_PortIndex
=
NULL
;
srs_res0
->
transmissionComb
.
present
=
NR_SRS_Resource__transmissionComb_PR_n2
;
srs_res0
->
transmissionComb
.
choice
.
n2
=
calloc
(
1
,
sizeof
(
*
srs_res0
->
transmissionComb
.
choice
.
n2
));
srs_res0
->
transmissionComb
.
choice
.
n2
->
combOffset_n2
=
0
;
srs_res0
->
transmissionComb
.
choice
.
n2
->
cyclicShift_n2
=
0
;
srs_res0
->
resourceMapping
.
startPosition
=
2
;
srs_res0
->
resourceMapping
.
nrofSymbols
=
NR_SRS_Resource__resourceMapping__nrofSymbols_n1
;
srs_res0
->
resourceMapping
.
repetitionFactor
=
NR_SRS_Resource__resourceMapping__repetitionFactor_n1
;
srs_res0
->
freqDomainPosition
=
0
;
srs_res0
->
freqDomainShift
=
0
;
srs_res0
->
freqHopping
.
c_SRS
=
0
;
srs_res0
->
freqHopping
.
b_SRS
=
0
;
srs_res0
->
freqHopping
.
b_hop
=
0
;
srs_res0
->
groupOrSequenceHopping
=
NR_SRS_Resource__groupOrSequenceHopping_neither
;
srs_res0
->
resourceType
.
present
=
NR_SRS_Resource__resourceType_PR_aperiodic
;
srs_res0
->
resourceType
.
choice
.
aperiodic
=
calloc
(
1
,
sizeof
(
*
srs_res0
->
resourceType
.
choice
.
aperiodic
));
srs_res0
->
sequenceId
=
40
;
srs_res0
->
spatialRelationInfo
=
calloc
(
1
,
sizeof
(
*
srs_res0
->
spatialRelationInfo
));
srs_res0
->
spatialRelationInfo
->
servingCellId
=
NULL
;
srs_res0
->
spatialRelationInfo
->
referenceSignal
.
present
=
NR_SRS_SpatialRelationInfo__referenceSignal_PR_csi_RS_Index
;
srs_res0
->
spatialRelationInfo
->
referenceSignal
.
choice
.
csi_RS_Index
=
0
;
ASN_SEQUENCE_ADD
(
&
srs_Config
->
srs_ResourceToAddModList
->
list
,
srs_res0
);
ubwp
->
bwp_Dedicated
->
beamFailureRecoveryConfig
=
NULL
;
}
void
fill_initial_SpCellConfig
(
int
uid
,
NR_CellGroupConfig_t
*
cellGroupConfig
,
...
...
@@ -1608,7 +1321,12 @@ void fill_initial_SpCellConfig(int uid,
SpCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
=
calloc
(
1
,
sizeof
(
*
SpCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
));
for
(
int
bwp_loop
=
0
;
bwp_loop
<
n_ul_bwp
;
bwp_loop
++
)
{
NR_BWP_Uplink_t
*
ubwp
=
calloc
(
1
,
sizeof
(
*
ubwp
));
fill_default_uplinkBWP
(
ubwp
,
bwp_loop
,
servingcellconfigdedicated
,
scc
,
configuration
,
uid
);
config_uplinkBWP
(
ubwp
,
bwp_loop
,
true
,
uid
,
configuration
,
servingcellconfigdedicated
,
scc
,
cellGroupConfig
,
NULL
);
ASN_SEQUENCE_ADD
(
&
SpCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
,
ubwp
);
}
SpCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
firstActiveUplinkBWP_Id
=
calloc
(
1
,
sizeof
(
*
SpCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
firstActiveUplinkBWP_Id
));
...
...
openair2/RRC/NR/nr_rrc_config.c
View file @
10b8e1b3
...
...
@@ -781,3 +781,178 @@ void config_downlinkBWP(NR_BWP_Downlink_t *bwp,
}
}
void
config_uplinkBWP
(
NR_BWP_Uplink_t
*
ubwp
,
long
bwp_loop
,
bool
is_SA
,
int
uid
,
const
gNB_RrcConfigurationReq
*
configuration
,
NR_ServingCellConfig_t
*
servingcellconfigdedicated
,
NR_ServingCellConfigCommon_t
*
scc
,
NR_CellGroupConfig_t
*
cellGroupConfig
,
NR_UE_NR_Capability_t
*
uecap
)
{
ubwp
->
bwp_Common
=
calloc
(
1
,
sizeof
(
*
ubwp
->
bwp_Common
));
if
(
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
&&
bwp_loop
<
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
count
)
{
ubwp
->
bwp_Id
=
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
bwp_loop
]
->
bwp_Id
;
ubwp
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
=
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
bwp_loop
]
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
;
ubwp
->
bwp_Common
->
genericParameters
.
subcarrierSpacing
=
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
bwp_loop
]
->
bwp_Common
->
genericParameters
.
subcarrierSpacing
;
ubwp
->
bwp_Common
->
genericParameters
.
cyclicPrefix
=
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
bwp_loop
]
->
bwp_Common
->
genericParameters
.
cyclicPrefix
;
}
else
{
ubwp
->
bwp_Id
=
bwp_loop
+
1
;
ubwp
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
=
PRBalloc_to_locationandbandwidth
(
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
,
0
);
ubwp
->
bwp_Common
->
genericParameters
.
subcarrierSpacing
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
subcarrierSpacing
;
ubwp
->
bwp_Common
->
genericParameters
.
cyclicPrefix
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
cyclicPrefix
;
}
int
curr_bwp
=
NRRIV2BW
(
ubwp
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
,
MAX_BWP_SIZE
);
ubwp
->
bwp_Common
->
rach_ConfigCommon
=
is_SA
?
NULL
:
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
;
ubwp
->
bwp_Common
->
pusch_ConfigCommon
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
;
ubwp
->
bwp_Common
->
pucch_ConfigCommon
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
pucch_ConfigCommon
;
if
(
!
ubwp
->
bwp_Dedicated
)
{
ubwp
->
bwp_Dedicated
=
calloc
(
1
,
sizeof
(
*
ubwp
->
bwp_Dedicated
));
}
ubwp
->
bwp_Dedicated
->
pucch_Config
=
calloc
(
1
,
sizeof
(
*
ubwp
->
bwp_Dedicated
->
pucch_Config
));
ubwp
->
bwp_Dedicated
->
pucch_Config
->
present
=
NR_SetupRelease_PUCCH_Config_PR_setup
;
NR_PUCCH_Config_t
*
pucch_Config
=
calloc
(
1
,
sizeof
(
*
pucch_Config
));
ubwp
->
bwp_Dedicated
->
pucch_Config
->
choice
.
setup
=
pucch_Config
;
pucch_Config
->
resourceSetToAddModList
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
resourceSetToAddModList
));
pucch_Config
->
resourceSetToReleaseList
=
NULL
;
pucch_Config
->
resourceToAddModList
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
resourceToAddModList
));
pucch_Config
->
resourceToReleaseList
=
NULL
;
config_pucch_resset0
(
pucch_Config
,
uid
,
curr_bwp
,
uecap
);
config_pucch_resset1
(
pucch_Config
,
uecap
);
set_pucch_power_config
(
pucch_Config
,
configuration
->
do_CSIRS
);
scheduling_request_config
(
scc
,
cellGroupConfig
->
mac_CellGroupConfig
,
pucch_Config
);
set_dl_DataToUL_ACK
(
pucch_Config
,
configuration
->
minRXTXTIME
);
ubwp
->
bwp_Dedicated
->
pusch_Config
=
calloc
(
1
,
sizeof
(
*
ubwp
->
bwp_Dedicated
->
pusch_Config
));
ubwp
->
bwp_Dedicated
->
pusch_Config
->
present
=
NR_SetupRelease_PUSCH_Config_PR_setup
;
NR_PUSCH_Config_t
*
pusch_Config
=
NULL
;
if
(
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
&&
bwp_loop
<
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
count
)
{
pusch_Config
=
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
bwp_loop
]
->
bwp_Dedicated
->
pusch_Config
->
choice
.
setup
;
}
else
{
pusch_Config
=
calloc
(
1
,
sizeof
(
*
pusch_Config
));
}
ubwp
->
bwp_Dedicated
->
pusch_Config
->
choice
.
setup
=
pusch_Config
;
pusch_Config
->
txConfig
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
txConfig
));
*
pusch_Config
->
txConfig
=
NR_PUSCH_Config__txConfig_codebook
;
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeA
=
NULL
;
if
(
!
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
)
{
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
));
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
->
present
=
NR_SetupRelease_DMRS_UplinkConfig_PR_setup
;
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
->
choice
.
setup
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
->
choice
.
setup
));
}
NR_DMRS_UplinkConfig_t
*
NR_DMRS_UplinkConfig
=
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
->
choice
.
setup
;
NR_DMRS_UplinkConfig
->
dmrs_Type
=
NULL
;
NR_DMRS_UplinkConfig
->
dmrs_AdditionalPosition
=
calloc
(
1
,
sizeof
(
*
NR_DMRS_UplinkConfig
->
dmrs_AdditionalPosition
));
*
NR_DMRS_UplinkConfig
->
dmrs_AdditionalPosition
=
NR_DMRS_UplinkConfig__dmrs_AdditionalPosition_pos0
;
NR_DMRS_UplinkConfig
->
phaseTrackingRS
=
NULL
;
NR_DMRS_UplinkConfig
->
maxLength
=
NULL
;
NR_DMRS_UplinkConfig
->
transformPrecodingDisabled
=
calloc
(
1
,
sizeof
(
*
NR_DMRS_UplinkConfig
->
transformPrecodingDisabled
));
NR_DMRS_UplinkConfig
->
transformPrecodingDisabled
->
scramblingID0
=
NULL
;
NR_DMRS_UplinkConfig
->
transformPrecodingDisabled
->
scramblingID1
=
NULL
;
NR_DMRS_UplinkConfig
->
transformPrecodingEnabled
=
NULL
;
pusch_Config
->
pusch_PowerControl
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
pusch_PowerControl
));
pusch_Config
->
pusch_PowerControl
->
tpc_Accumulation
=
NULL
;
pusch_Config
->
pusch_PowerControl
->
msg3_Alpha
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
pusch_PowerControl
->
msg3_Alpha
));
*
pusch_Config
->
pusch_PowerControl
->
msg3_Alpha
=
NR_Alpha_alpha1
;
pusch_Config
->
pusch_PowerControl
->
p0_NominalWithoutGrant
=
NULL
;
pusch_Config
->
pusch_PowerControl
->
p0_AlphaSets
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
pusch_PowerControl
->
p0_AlphaSets
));
NR_P0_PUSCH_AlphaSet_t
*
aset
=
calloc
(
1
,
sizeof
(
*
aset
));
aset
->
p0_PUSCH_AlphaSetId
=
0
;
aset
->
p0
=
calloc
(
1
,
sizeof
(
*
aset
->
p0
));
*
aset
->
p0
=
0
;
aset
->
alpha
=
calloc
(
1
,
sizeof
(
*
aset
->
alpha
));
*
aset
->
alpha
=
NR_Alpha_alpha1
;
ASN_SEQUENCE_ADD
(
&
pusch_Config
->
pusch_PowerControl
->
p0_AlphaSets
->
list
,
aset
);
pusch_Config
->
pusch_PowerControl
->
pathlossReferenceRSToAddModList
=
NULL
;
pusch_Config
->
pusch_PowerControl
->
pathlossReferenceRSToReleaseList
=
NULL
;
pusch_Config
->
pusch_PowerControl
->
twoPUSCH_PC_AdjustmentStates
=
NULL
;
pusch_Config
->
pusch_PowerControl
->
deltaMCS
=
NULL
;
pusch_Config
->
pusch_PowerControl
->
sri_PUSCH_MappingToAddModList
=
NULL
;
pusch_Config
->
pusch_PowerControl
->
sri_PUSCH_MappingToReleaseList
=
NULL
;
pusch_Config
->
frequencyHopping
=
NULL
;
pusch_Config
->
frequencyHoppingOffsetLists
=
NULL
;
pusch_Config
->
resourceAllocation
=
NR_PUSCH_Config__resourceAllocation_resourceAllocationType1
;
pusch_Config
->
pusch_TimeDomainAllocationList
=
NULL
;
pusch_Config
->
pusch_AggregationFactor
=
NULL
;
pusch_Config
->
mcs_Table
=
NULL
;
pusch_Config
->
mcs_TableTransformPrecoder
=
NULL
;
pusch_Config
->
transformPrecoder
=
NULL
;
if
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
msg3_transformPrecoder
==
NULL
)
{
pusch_Config
->
transformPrecoder
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
transformPrecoder
));
*
pusch_Config
->
transformPrecoder
=
NR_PUSCH_Config__transformPrecoder_disabled
;
}
pusch_Config
->
codebookSubset
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
codebookSubset
));
*
pusch_Config
->
codebookSubset
=
NR_PUSCH_Config__codebookSubset_nonCoherent
;
pusch_Config
->
maxRank
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
maxRank
));
*
pusch_Config
->
maxRank
=
1
;
pusch_Config
->
rbg_Size
=
NULL
;
pusch_Config
->
uci_OnPUSCH
=
NULL
;
pusch_Config
->
tp_pi2BPSK
=
NULL
;
ubwp
->
bwp_Dedicated
->
srs_Config
=
calloc
(
1
,
sizeof
(
*
ubwp
->
bwp_Dedicated
->
srs_Config
));
ubwp
->
bwp_Dedicated
->
srs_Config
->
present
=
NR_SetupRelease_SRS_Config_PR_setup
;
if
(
configuration
->
do_SRS
)
{
NR_SRS_Config_t
*
srs_Config
=
calloc
(
1
,
sizeof
(
*
srs_Config
));
ubwp
->
bwp_Dedicated
->
srs_Config
->
choice
.
setup
=
srs_Config
;
srs_Config
->
srs_ResourceSetToReleaseList
=
NULL
;
srs_Config
->
srs_ResourceSetToAddModList
=
calloc
(
1
,
sizeof
(
*
srs_Config
->
srs_ResourceSetToAddModList
));
NR_SRS_ResourceSet_t
*
srs_resset0
=
calloc
(
1
,
sizeof
(
*
srs_resset0
));
srs_resset0
->
srs_ResourceSetId
=
0
;
srs_resset0
->
srs_ResourceIdList
=
calloc
(
1
,
sizeof
(
*
srs_resset0
->
srs_ResourceIdList
));
NR_SRS_ResourceId_t
*
srs_resset0_id
=
calloc
(
1
,
sizeof
(
*
srs_resset0_id
));
*
srs_resset0_id
=
0
;
ASN_SEQUENCE_ADD
(
&
srs_resset0
->
srs_ResourceIdList
->
list
,
srs_resset0_id
);
srs_Config
->
srs_ResourceToReleaseList
=
NULL
;
srs_resset0
->
resourceType
.
present
=
NR_SRS_ResourceSet__resourceType_PR_aperiodic
;
srs_resset0
->
resourceType
.
choice
.
aperiodic
=
calloc
(
1
,
sizeof
(
*
srs_resset0
->
resourceType
.
choice
.
aperiodic
));
srs_resset0
->
resourceType
.
choice
.
aperiodic
->
aperiodicSRS_ResourceTrigger
=
1
;
srs_resset0
->
resourceType
.
choice
.
aperiodic
->
csi_RS
=
NULL
;
srs_resset0
->
resourceType
.
choice
.
aperiodic
->
slotOffset
=
calloc
(
1
,
sizeof
(
*
srs_resset0
->
resourceType
.
choice
.
aperiodic
->
slotOffset
));
*
srs_resset0
->
resourceType
.
choice
.
aperiodic
->
slotOffset
=
2
;
srs_resset0
->
resourceType
.
choice
.
aperiodic
->
ext1
=
NULL
;
srs_resset0
->
usage
=
NR_SRS_ResourceSet__usage_codebook
;
srs_resset0
->
alpha
=
calloc
(
1
,
sizeof
(
*
srs_resset0
->
alpha
));
*
srs_resset0
->
alpha
=
NR_Alpha_alpha1
;
srs_resset0
->
p0
=
calloc
(
1
,
sizeof
(
*
srs_resset0
->
p0
));
*
srs_resset0
->
p0
=-
80
;
srs_resset0
->
pathlossReferenceRS
=
NULL
;
srs_resset0
->
srs_PowerControlAdjustmentStates
=
NULL
;
ASN_SEQUENCE_ADD
(
&
srs_Config
->
srs_ResourceSetToAddModList
->
list
,
srs_resset0
);
srs_Config
->
srs_ResourceToReleaseList
=
NULL
;
srs_Config
->
srs_ResourceToAddModList
=
calloc
(
1
,
sizeof
(
*
srs_Config
->
srs_ResourceToAddModList
));
NR_SRS_Resource_t
*
srs_res0
=
calloc
(
1
,
sizeof
(
*
srs_res0
));
srs_res0
->
srs_ResourceId
=
0
;
srs_res0
->
nrofSRS_Ports
=
NR_SRS_Resource__nrofSRS_Ports_port1
;
srs_res0
->
ptrs_PortIndex
=
NULL
;
srs_res0
->
transmissionComb
.
present
=
NR_SRS_Resource__transmissionComb_PR_n2
;
srs_res0
->
transmissionComb
.
choice
.
n2
=
calloc
(
1
,
sizeof
(
*
srs_res0
->
transmissionComb
.
choice
.
n2
));
srs_res0
->
transmissionComb
.
choice
.
n2
->
combOffset_n2
=
0
;
srs_res0
->
transmissionComb
.
choice
.
n2
->
cyclicShift_n2
=
0
;
srs_res0
->
resourceMapping
.
startPosition
=
2
;
srs_res0
->
resourceMapping
.
nrofSymbols
=
NR_SRS_Resource__resourceMapping__nrofSymbols_n1
;
srs_res0
->
resourceMapping
.
repetitionFactor
=
NR_SRS_Resource__resourceMapping__repetitionFactor_n1
;
srs_res0
->
freqDomainPosition
=
0
;
srs_res0
->
freqDomainShift
=
0
;
srs_res0
->
freqHopping
.
c_SRS
=
0
;
srs_res0
->
freqHopping
.
b_SRS
=
0
;
srs_res0
->
freqHopping
.
b_hop
=
0
;
srs_res0
->
groupOrSequenceHopping
=
NR_SRS_Resource__groupOrSequenceHopping_neither
;
srs_res0
->
resourceType
.
present
=
NR_SRS_Resource__resourceType_PR_aperiodic
;
srs_res0
->
resourceType
.
choice
.
aperiodic
=
calloc
(
1
,
sizeof
(
*
srs_res0
->
resourceType
.
choice
.
aperiodic
));
srs_res0
->
sequenceId
=
40
;
srs_res0
->
spatialRelationInfo
=
calloc
(
1
,
sizeof
(
*
srs_res0
->
spatialRelationInfo
));
srs_res0
->
spatialRelationInfo
->
servingCellId
=
NULL
;
srs_res0
->
spatialRelationInfo
->
referenceSignal
.
present
=
NR_SRS_SpatialRelationInfo__referenceSignal_PR_csi_RS_Index
;
srs_res0
->
spatialRelationInfo
->
referenceSignal
.
choice
.
csi_RS_Index
=
0
;
ASN_SEQUENCE_ADD
(
&
srs_Config
->
srs_ResourceToAddModList
->
list
,
srs_res0
);
}
ubwp
->
bwp_Dedicated
->
configuredGrantConfig
=
NULL
;
ubwp
->
bwp_Dedicated
->
beamFailureRecoveryConfig
=
NULL
;
}
openair2/RRC/NR/nr_rrc_config.h
View file @
10b8e1b3
...
...
@@ -148,5 +148,12 @@ void config_downlinkBWP(NR_BWP_Downlink_t *bwp,
int
dl_antenna_ports
,
bool
force_256qam_off
,
int
bwp_loop
,
bool
is_SA
);
void
config_uplinkBWP
(
NR_BWP_Uplink_t
*
ubwp
,
long
bwp_loop
,
bool
is_SA
,
int
uid
,
const
gNB_RrcConfigurationReq
*
configuration
,
NR_ServingCellConfig_t
*
servingcellconfigdedicated
,
NR_ServingCellConfigCommon_t
*
scc
,
NR_CellGroupConfig_t
*
cellGroupConfig
,
NR_UE_NR_Capability_t
*
uecap
);
#endif
openair2/RRC/NR/rrc_gNB_reconfig.c
View file @
10b8e1b3
...
...
@@ -83,308 +83,6 @@ void fix_servingcellconfigdedicated(NR_ServingCellConfig_t *scd) {
}
void
fill_default_nsa_uplinkBWP
(
NR_BWP_Uplink_t
*
ubwp
,
long
bwp_loop
,
NR_ServingCellConfig_t
*
servingcellconfigdedicated
,
NR_ServingCellConfigCommon_t
*
servingcellconfigcommon
,
const
gNB_RrcConfigurationReq
*
configuration
,
int
uid
)
{
/// BWP common configuration
ubwp
->
bwp_Common
=
calloc
(
1
,
sizeof
(
*
ubwp
->
bwp_Common
));
if
(
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
&&
bwp_loop
<
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
count
)
{
ubwp
->
bwp_Id
=
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
bwp_loop
]
->
bwp_Id
;
ubwp
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
=
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
bwp_loop
]
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
;
ubwp
->
bwp_Common
->
genericParameters
.
subcarrierSpacing
=
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
bwp_loop
]
->
bwp_Common
->
genericParameters
.
subcarrierSpacing
;
ubwp
->
bwp_Common
->
genericParameters
.
cyclicPrefix
=
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
bwp_loop
]
->
bwp_Common
->
genericParameters
.
cyclicPrefix
;
}
else
{
ubwp
->
bwp_Id
=
bwp_loop
+
1
;
ubwp
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
=
PRBalloc_to_locationandbandwidth
(
servingcellconfigcommon
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
carrierBandwidth
,
0
);
ubwp
->
bwp_Common
->
genericParameters
.
subcarrierSpacing
=
servingcellconfigcommon
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
subcarrierSpacing
;
ubwp
->
bwp_Common
->
genericParameters
.
cyclicPrefix
=
servingcellconfigcommon
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
cyclicPrefix
;
}
ubwp
->
bwp_Common
->
rach_ConfigCommon
=
servingcellconfigcommon
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
;
ubwp
->
bwp_Common
->
pusch_ConfigCommon
=
servingcellconfigcommon
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
;
ubwp
->
bwp_Common
->
pucch_ConfigCommon
=
servingcellconfigcommon
->
uplinkConfigCommon
->
initialUplinkBWP
->
pucch_ConfigCommon
;
/// BWP dedicated configuration
if
(
!
ubwp
->
bwp_Dedicated
)
{
ubwp
->
bwp_Dedicated
=
calloc
(
1
,
sizeof
(
*
ubwp
->
bwp_Dedicated
));
}
ubwp
->
bwp_Dedicated
->
pucch_Config
=
calloc
(
1
,
sizeof
(
*
ubwp
->
bwp_Dedicated
->
pucch_Config
));
ubwp
->
bwp_Dedicated
->
pucch_Config
->
present
=
NR_SetupRelease_PUCCH_Config_PR_setup
;
NR_PUCCH_Config_t
*
pucch_Config
=
calloc
(
1
,
sizeof
(
*
pucch_Config
));
ubwp
->
bwp_Dedicated
->
pucch_Config
->
choice
.
setup
=
pucch_Config
;
pucch_Config
->
resourceSetToAddModList
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
resourceSetToAddModList
));
pucch_Config
->
resourceSetToReleaseList
=
NULL
;
NR_PUCCH_ResourceSet_t
*
pucchresset0
=
calloc
(
1
,
sizeof
(
*
pucchresset0
));
NR_PUCCH_ResourceSet_t
*
pucchresset1
=
calloc
(
1
,
sizeof
(
*
pucchresset1
));
pucchresset0
->
pucch_ResourceSetId
=
0
;
NR_PUCCH_ResourceId_t
*
pucchresset0id0
=
calloc
(
1
,
sizeof
(
*
pucchresset0id0
));
*
pucchresset0id0
=
1
;
ASN_SEQUENCE_ADD
(
&
pucchresset0
->
resourceList
.
list
,
pucchresset0id0
);
pucchresset0
->
maxPayloadSize
=
NULL
;
ASN_SEQUENCE_ADD
(
&
pucch_Config
->
resourceSetToAddModList
->
list
,
pucchresset0
);
pucchresset1
->
pucch_ResourceSetId
=
1
;
NR_PUCCH_ResourceId_t
*
pucchresset1id0
=
calloc
(
1
,
sizeof
(
*
pucchresset1id0
));
*
pucchresset1id0
=
2
;
ASN_SEQUENCE_ADD
(
&
pucchresset1
->
resourceList
.
list
,
pucchresset1id0
);
pucchresset1
->
maxPayloadSize
=
NULL
;
ASN_SEQUENCE_ADD
(
&
pucch_Config
->
resourceSetToAddModList
->
list
,
pucchresset1
);
pucch_Config
->
resourceToAddModList
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
resourceToAddModList
));
pucch_Config
->
resourceToReleaseList
=
NULL
;
NR_PUCCH_Resource_t
*
pucchres0
=
calloc
(
1
,
sizeof
(
*
pucchres0
));
NR_PUCCH_Resource_t
*
pucchres2
=
calloc
(
1
,
sizeof
(
*
pucchres2
));
int
curr_bwp
=
NRRIV2BW
(
ubwp
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
,
275
);
pucchres0
->
pucch_ResourceId
=
1
;
pucchres0
->
startingPRB
=
(
8
+
uid
)
%
curr_bwp
;
pucchres0
->
intraSlotFrequencyHopping
=
NULL
;
pucchres0
->
secondHopPRB
=
NULL
;
pucchres0
->
format
.
present
=
NR_PUCCH_Resource__format_PR_format0
;
pucchres0
->
format
.
choice
.
format0
=
calloc
(
1
,
sizeof
(
*
pucchres0
->
format
.
choice
.
format0
));
pucchres0
->
format
.
choice
.
format0
->
initialCyclicShift
=
0
;
pucchres0
->
format
.
choice
.
format0
->
nrofSymbols
=
1
;
pucchres0
->
format
.
choice
.
format0
->
startingSymbolIndex
=
13
;
ASN_SEQUENCE_ADD
(
&
pucch_Config
->
resourceToAddModList
->
list
,
pucchres0
);
pucchres2
->
pucch_ResourceId
=
2
;
pucchres2
->
startingPRB
=
0
;
pucchres2
->
intraSlotFrequencyHopping
=
NULL
;
pucchres2
->
secondHopPRB
=
NULL
;
pucchres2
->
format
.
present
=
NR_PUCCH_Resource__format_PR_format2
;
pucchres2
->
format
.
choice
.
format2
=
calloc
(
1
,
sizeof
(
*
pucchres2
->
format
.
choice
.
format2
));
pucchres2
->
format
.
choice
.
format2
->
nrofPRBs
=
8
;
pucchres2
->
format
.
choice
.
format2
->
nrofSymbols
=
1
;
pucchres2
->
format
.
choice
.
format2
->
startingSymbolIndex
=
13
;
ASN_SEQUENCE_ADD
(
&
pucch_Config
->
resourceToAddModList
->
list
,
pucchres2
);
pucch_Config
->
format2
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
format2
));
pucch_Config
->
format2
->
present
=
NR_SetupRelease_PUCCH_FormatConfig_PR_setup
;
NR_PUCCH_FormatConfig_t
*
pucchfmt2
=
calloc
(
1
,
sizeof
(
*
pucchfmt2
));
pucch_Config
->
format2
->
choice
.
setup
=
pucchfmt2
;
pucchfmt2
->
interslotFrequencyHopping
=
NULL
;
pucchfmt2
->
additionalDMRS
=
NULL
;
pucchfmt2
->
maxCodeRate
=
calloc
(
1
,
sizeof
(
*
pucchfmt2
->
maxCodeRate
));
*
pucchfmt2
->
maxCodeRate
=
NR_PUCCH_MaxCodeRate_zeroDot35
;
pucchfmt2
->
nrofSlots
=
NULL
;
pucchfmt2
->
pi2BPSK
=
NULL
;
pucchfmt2
->
simultaneousHARQ_ACK_CSI
=
calloc
(
1
,
sizeof
(
*
pucchfmt2
->
simultaneousHARQ_ACK_CSI
));
*
pucchfmt2
->
simultaneousHARQ_ACK_CSI
=
NR_PUCCH_FormatConfig__simultaneousHARQ_ACK_CSI_true
;
// for scheduling requestresource
pucch_Config
->
schedulingRequestResourceToAddModList
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
schedulingRequestResourceToAddModList
));
NR_SchedulingRequestResourceConfig_t
*
schedulingRequestResourceConfig
=
calloc
(
1
,
sizeof
(
*
schedulingRequestResourceConfig
));
schedulingRequestResourceConfig
->
schedulingRequestResourceId
=
1
;
schedulingRequestResourceConfig
->
schedulingRequestID
=
0
;
schedulingRequestResourceConfig
->
periodicityAndOffset
=
calloc
(
1
,
sizeof
(
*
schedulingRequestResourceConfig
->
periodicityAndOffset
));
schedulingRequestResourceConfig
->
periodicityAndOffset
->
present
=
NR_SchedulingRequestResourceConfig__periodicityAndOffset_PR_sl10
;
schedulingRequestResourceConfig
->
periodicityAndOffset
->
choice
.
sl10
=
7
;
schedulingRequestResourceConfig
->
resource
=
calloc
(
1
,
sizeof
(
*
schedulingRequestResourceConfig
->
resource
));
*
schedulingRequestResourceConfig
->
resource
=
1
;
ASN_SEQUENCE_ADD
(
&
pucch_Config
->
schedulingRequestResourceToAddModList
->
list
,
schedulingRequestResourceConfig
);
pucch_Config
->
schedulingRequestResourceToReleaseList
=
NULL
;
pucch_Config
->
multi_CSI_PUCCH_ResourceList
=
NULL
;
pucch_Config
->
dl_DataToUL_ACK
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
dl_DataToUL_ACK
));
long
*
delay
[
8
];
for
(
int
i
=
0
;
i
<
8
;
i
++
)
{
delay
[
i
]
=
calloc
(
1
,
sizeof
(
*
delay
[
i
]));
*
delay
[
i
]
=
i
+
configuration
->
minRXTXTIME
;
ASN_SEQUENCE_ADD
(
&
pucch_Config
->
dl_DataToUL_ACK
->
list
,
delay
[
i
]);
}
pucch_Config
->
spatialRelationInfoToAddModList
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
spatialRelationInfoToAddModList
));
NR_PUCCH_SpatialRelationInfo_t
*
pucchspatial
=
calloc
(
1
,
sizeof
(
*
pucchspatial
));
pucchspatial
->
pucch_SpatialRelationInfoId
=
1
;
pucchspatial
->
servingCellId
=
NULL
;
if
(
configuration
->
do_CSIRS
)
{
pucchspatial
->
referenceSignal
.
present
=
NR_PUCCH_SpatialRelationInfo__referenceSignal_PR_csi_RS_Index
;
pucchspatial
->
referenceSignal
.
choice
.
csi_RS_Index
=
0
;
}
else
{
pucchspatial
->
referenceSignal
.
present
=
NR_PUCCH_SpatialRelationInfo__referenceSignal_PR_ssb_Index
;
pucchspatial
->
referenceSignal
.
choice
.
ssb_Index
=
0
;
}
pucchspatial
->
pucch_PathlossReferenceRS_Id
=
0
;
pucchspatial
->
p0_PUCCH_Id
=
1
;
pucchspatial
->
closedLoopIndex
=
NR_PUCCH_SpatialRelationInfo__closedLoopIndex_i0
;
ASN_SEQUENCE_ADD
(
&
pucch_Config
->
spatialRelationInfoToAddModList
->
list
,
pucchspatial
);
pucch_Config
->
spatialRelationInfoToReleaseList
=
NULL
;
pucch_Config
->
pucch_PowerControl
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
pucch_PowerControl
));
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f0
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f0
));
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f0
=
0
;
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f1
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f1
));
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f1
=
0
;
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f2
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f2
));
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f2
=
0
;
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f3
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f3
));
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f3
=
0
;
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f4
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f4
));
*
pucch_Config
->
pucch_PowerControl
->
deltaF_PUCCH_f4
=
0
;
pucch_Config
->
pucch_PowerControl
->
p0_Set
=
calloc
(
1
,
sizeof
(
*
pucch_Config
->
pucch_PowerControl
->
p0_Set
));
NR_P0_PUCCH_t
*
p00
=
calloc
(
1
,
sizeof
(
*
p00
));
p00
->
p0_PUCCH_Id
=
1
;
p00
->
p0_PUCCH_Value
=
0
;
ASN_SEQUENCE_ADD
(
&
pucch_Config
->
pucch_PowerControl
->
p0_Set
->
list
,
p00
);
pucch_Config
->
pucch_PowerControl
->
pathlossReferenceRSs
=
NULL
;
ubwp
->
bwp_Dedicated
->
pusch_Config
=
calloc
(
1
,
sizeof
(
*
ubwp
->
bwp_Dedicated
->
pusch_Config
));
ubwp
->
bwp_Dedicated
->
pusch_Config
->
present
=
NR_SetupRelease_PUSCH_Config_PR_setup
;
NR_PUSCH_Config_t
*
pusch_Config
=
NULL
;
if
(
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
&&
bwp_loop
<
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
count
)
{
pusch_Config
=
servingcellconfigdedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
bwp_loop
]
->
bwp_Dedicated
->
pusch_Config
->
choice
.
setup
;
}
else
{
pusch_Config
=
calloc
(
1
,
sizeof
(
*
pusch_Config
));
}
ubwp
->
bwp_Dedicated
->
pusch_Config
->
choice
.
setup
=
pusch_Config
;
pusch_Config
->
txConfig
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
txConfig
));
*
pusch_Config
->
txConfig
=
NR_PUSCH_Config__txConfig_codebook
;
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeA
=
NULL
;
if
(
!
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
)
{
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
));
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
->
present
=
NR_SetupRelease_DMRS_UplinkConfig_PR_setup
;
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
->
choice
.
setup
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
->
choice
.
setup
));
}
NR_DMRS_UplinkConfig_t
*
NR_DMRS_UplinkConfig
=
pusch_Config
->
dmrs_UplinkForPUSCH_MappingTypeB
->
choice
.
setup
;
NR_DMRS_UplinkConfig
->
dmrs_Type
=
NULL
;
NR_DMRS_UplinkConfig
->
dmrs_AdditionalPosition
=
calloc
(
1
,
sizeof
(
*
NR_DMRS_UplinkConfig
->
dmrs_AdditionalPosition
));
*
NR_DMRS_UplinkConfig
->
dmrs_AdditionalPosition
=
NR_DMRS_UplinkConfig__dmrs_AdditionalPosition_pos0
;
if
(
!
servingcellconfigdedicated
)
{
NR_DMRS_UplinkConfig
->
phaseTrackingRS
=
NULL
;
}
NR_DMRS_UplinkConfig
->
maxLength
=
NULL
;
NR_DMRS_UplinkConfig
->
transformPrecodingDisabled
=
calloc
(
1
,
sizeof
(
*
NR_DMRS_UplinkConfig
->
transformPrecodingDisabled
));
NR_DMRS_UplinkConfig
->
transformPrecodingDisabled
->
scramblingID0
=
NULL
;
NR_DMRS_UplinkConfig
->
transformPrecodingDisabled
->
scramblingID1
=
NULL
;
NR_DMRS_UplinkConfig
->
transformPrecodingEnabled
=
NULL
;
pusch_Config
->
pusch_PowerControl
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
pusch_PowerControl
));
pusch_Config
->
pusch_PowerControl
->
tpc_Accumulation
=
NULL
;
pusch_Config
->
pusch_PowerControl
->
msg3_Alpha
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
pusch_PowerControl
->
msg3_Alpha
));
*
pusch_Config
->
pusch_PowerControl
->
msg3_Alpha
=
NR_Alpha_alpha1
;
pusch_Config
->
pusch_PowerControl
->
p0_NominalWithoutGrant
=
NULL
;
pusch_Config
->
pusch_PowerControl
->
p0_AlphaSets
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
pusch_PowerControl
->
p0_AlphaSets
));
NR_P0_PUSCH_AlphaSet_t
*
aset
=
calloc
(
1
,
sizeof
(
*
aset
));
aset
->
p0_PUSCH_AlphaSetId
=
0
;
aset
->
p0
=
calloc
(
1
,
sizeof
(
*
aset
->
p0
));
*
aset
->
p0
=
0
;
aset
->
alpha
=
calloc
(
1
,
sizeof
(
*
aset
->
alpha
));
*
aset
->
alpha
=
NR_Alpha_alpha1
;
ASN_SEQUENCE_ADD
(
&
pusch_Config
->
pusch_PowerControl
->
p0_AlphaSets
->
list
,
aset
);
pusch_Config
->
pusch_PowerControl
->
pathlossReferenceRSToAddModList
=
NULL
;
pusch_Config
->
pusch_PowerControl
->
pathlossReferenceRSToReleaseList
=
NULL
;
pusch_Config
->
pusch_PowerControl
->
twoPUSCH_PC_AdjustmentStates
=
NULL
;
pusch_Config
->
pusch_PowerControl
->
deltaMCS
=
NULL
;
pusch_Config
->
pusch_PowerControl
->
sri_PUSCH_MappingToAddModList
=
NULL
;
pusch_Config
->
pusch_PowerControl
->
sri_PUSCH_MappingToReleaseList
=
NULL
;
pusch_Config
->
frequencyHopping
=
NULL
;
pusch_Config
->
frequencyHoppingOffsetLists
=
NULL
;
pusch_Config
->
resourceAllocation
=
NR_PUSCH_Config__resourceAllocation_resourceAllocationType1
;
pusch_Config
->
pusch_TimeDomainAllocationList
=
NULL
;
pusch_Config
->
pusch_AggregationFactor
=
NULL
;
pusch_Config
->
mcs_Table
=
NULL
;
pusch_Config
->
transformPrecoder
=
NULL
;
pusch_Config
->
mcs_TableTransformPrecoder
=
NULL
;
/* if msg3_transformprecoding is set in conf file - pusch config should not disable it */
if
(
servingcellconfigcommon
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
->
msg3_transformPrecoder
==
NULL
)
{
pusch_Config
->
transformPrecoder
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
transformPrecoder
));
*
pusch_Config
->
transformPrecoder
=
NR_PUSCH_Config__transformPrecoder_disabled
;
}
pusch_Config
->
codebookSubset
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
codebookSubset
));
*
pusch_Config
->
codebookSubset
=
NR_PUSCH_Config__codebookSubset_nonCoherent
;
pusch_Config
->
maxRank
=
calloc
(
1
,
sizeof
(
*
pusch_Config
->
maxRank
));
*
pusch_Config
->
maxRank
=
1
;
pusch_Config
->
rbg_Size
=
NULL
;
pusch_Config
->
uci_OnPUSCH
=
NULL
;
pusch_Config
->
tp_pi2BPSK
=
NULL
;
ubwp
->
bwp_Dedicated
->
srs_Config
=
calloc
(
1
,
sizeof
(
*
ubwp
->
bwp_Dedicated
->
srs_Config
));
ubwp
->
bwp_Dedicated
->
srs_Config
->
present
=
NR_SetupRelease_SRS_Config_PR_setup
;
NR_SRS_Config_t
*
srs_Config
=
calloc
(
1
,
sizeof
(
*
srs_Config
));
ubwp
->
bwp_Dedicated
->
srs_Config
->
choice
.
setup
=
srs_Config
;
srs_Config
->
srs_ResourceSetToReleaseList
=
NULL
;
srs_Config
->
srs_ResourceSetToAddModList
=
calloc
(
1
,
sizeof
(
*
srs_Config
->
srs_ResourceSetToAddModList
));
NR_SRS_ResourceSet_t
*
srs_resset0
=
calloc
(
1
,
sizeof
(
*
srs_resset0
));
srs_resset0
->
srs_ResourceSetId
=
0
;
srs_resset0
->
srs_ResourceIdList
=
calloc
(
1
,
sizeof
(
*
srs_resset0
->
srs_ResourceIdList
));
NR_SRS_ResourceId_t
*
srs_resset0_id
=
calloc
(
1
,
sizeof
(
*
srs_resset0_id
));
*
srs_resset0_id
=
0
;
ASN_SEQUENCE_ADD
(
&
srs_resset0
->
srs_ResourceIdList
->
list
,
srs_resset0_id
);
srs_Config
->
srs_ResourceToReleaseList
=
NULL
;
if
(
configuration
->
do_SRS
)
{
srs_resset0
->
resourceType
.
present
=
NR_SRS_ResourceSet__resourceType_PR_periodic
;
srs_resset0
->
resourceType
.
choice
.
periodic
=
calloc
(
1
,
sizeof
(
*
srs_resset0
->
resourceType
.
choice
.
periodic
));
srs_resset0
->
resourceType
.
choice
.
periodic
->
associatedCSI_RS
=
NULL
;
}
else
{
srs_resset0
->
resourceType
.
present
=
NR_SRS_ResourceSet__resourceType_PR_aperiodic
;
srs_resset0
->
resourceType
.
choice
.
aperiodic
=
calloc
(
1
,
sizeof
(
*
srs_resset0
->
resourceType
.
choice
.
aperiodic
));
srs_resset0
->
resourceType
.
choice
.
aperiodic
->
aperiodicSRS_ResourceTrigger
=
1
;
srs_resset0
->
resourceType
.
choice
.
aperiodic
->
csi_RS
=
NULL
;
srs_resset0
->
resourceType
.
choice
.
aperiodic
->
slotOffset
=
calloc
(
1
,
sizeof
(
*
srs_resset0
->
resourceType
.
choice
.
aperiodic
->
slotOffset
));
*
srs_resset0
->
resourceType
.
choice
.
aperiodic
->
slotOffset
=
2
;
srs_resset0
->
resourceType
.
choice
.
aperiodic
->
ext1
=
NULL
;
}
srs_resset0
->
usage
=
NR_SRS_ResourceSet__usage_codebook
;
srs_resset0
->
alpha
=
calloc
(
1
,
sizeof
(
*
srs_resset0
->
alpha
));
*
srs_resset0
->
alpha
=
NR_Alpha_alpha1
;
srs_resset0
->
p0
=
calloc
(
1
,
sizeof
(
*
srs_resset0
->
p0
));
*
srs_resset0
->
p0
=-
80
;
srs_resset0
->
pathlossReferenceRS
=
NULL
;
srs_resset0
->
srs_PowerControlAdjustmentStates
=
NULL
;
ASN_SEQUENCE_ADD
(
&
srs_Config
->
srs_ResourceSetToAddModList
->
list
,
srs_resset0
);
srs_Config
->
srs_ResourceToReleaseList
=
NULL
;
srs_Config
->
srs_ResourceToAddModList
=
calloc
(
1
,
sizeof
(
*
srs_Config
->
srs_ResourceToAddModList
));
NR_SRS_Resource_t
*
srs_res0
=
calloc
(
1
,
sizeof
(
*
srs_res0
));
srs_res0
->
srs_ResourceId
=
0
;
srs_res0
->
nrofSRS_Ports
=
NR_SRS_Resource__nrofSRS_Ports_port1
;
srs_res0
->
ptrs_PortIndex
=
NULL
;
srs_res0
->
transmissionComb
.
present
=
NR_SRS_Resource__transmissionComb_PR_n2
;
srs_res0
->
transmissionComb
.
choice
.
n2
=
calloc
(
1
,
sizeof
(
*
srs_res0
->
transmissionComb
.
choice
.
n2
));
srs_res0
->
transmissionComb
.
choice
.
n2
->
combOffset_n2
=
0
;
srs_res0
->
transmissionComb
.
choice
.
n2
->
cyclicShift_n2
=
0
;
srs_res0
->
resourceMapping
.
startPosition
=
2
+
uid
%
2
;
srs_res0
->
resourceMapping
.
nrofSymbols
=
NR_SRS_Resource__resourceMapping__nrofSymbols_n1
;
srs_res0
->
resourceMapping
.
repetitionFactor
=
NR_SRS_Resource__resourceMapping__repetitionFactor_n1
;
srs_res0
->
freqDomainPosition
=
0
;
srs_res0
->
freqDomainShift
=
0
;
srs_res0
->
freqHopping
.
b_SRS
=
0
;
srs_res0
->
freqHopping
.
b_hop
=
0
;
srs_res0
->
freqHopping
.
c_SRS
=
rrc_get_max_nr_csrs
(
NRRIV2BW
(
servingcellconfigcommon
->
uplinkConfigCommon
->
initialUplinkBWP
->
genericParameters
.
locationAndBandwidth
,
275
),
srs_res0
->
freqHopping
.
b_SRS
);
srs_res0
->
groupOrSequenceHopping
=
NR_SRS_Resource__groupOrSequenceHopping_neither
;
if
(
configuration
->
do_SRS
)
{
srs_res0
->
resourceType
.
present
=
NR_SRS_Resource__resourceType_PR_periodic
;
srs_res0
->
resourceType
.
choice
.
periodic
=
calloc
(
1
,
sizeof
(
*
srs_res0
->
resourceType
.
choice
.
periodic
));
srs_res0
->
resourceType
.
choice
.
periodic
->
periodicityAndOffset_p
.
present
=
NR_SRS_PeriodicityAndOffset_PR_sl160
;
srs_res0
->
resourceType
.
choice
.
periodic
->
periodicityAndOffset_p
.
choice
.
sl160
=
17
+
(
uid
>
1
)
*
10
;
// 17/17/.../147/157 are mixed slots
}
else
{
srs_res0
->
resourceType
.
present
=
NR_SRS_Resource__resourceType_PR_aperiodic
;
srs_res0
->
resourceType
.
choice
.
aperiodic
=
calloc
(
1
,
sizeof
(
*
srs_res0
->
resourceType
.
choice
.
aperiodic
));
}
srs_res0
->
sequenceId
=
40
;
srs_res0
->
spatialRelationInfo
=
calloc
(
1
,
sizeof
(
*
srs_res0
->
spatialRelationInfo
));
srs_res0
->
spatialRelationInfo
->
servingCellId
=
NULL
;
srs_res0
->
spatialRelationInfo
->
referenceSignal
.
present
=
NR_SRS_SpatialRelationInfo__referenceSignal_PR_csi_RS_Index
;
srs_res0
->
spatialRelationInfo
->
referenceSignal
.
choice
.
csi_RS_Index
=
0
;
ASN_SEQUENCE_ADD
(
&
srs_Config
->
srs_ResourceToAddModList
->
list
,
srs_res0
);
ubwp
->
bwp_Dedicated
->
configuredGrantConfig
=
NULL
;
ubwp
->
bwp_Dedicated
->
beamFailureRecoveryConfig
=
NULL
;
}
void
fill_default_secondaryCellGroup
(
NR_ServingCellConfigCommon_t
*
servingcellconfigcommon
,
NR_ServingCellConfig_t
*
servingcellconfigdedicated
,
...
...
@@ -900,7 +598,12 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
secondaryCellGroup
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
=
calloc
(
1
,
sizeof
(
*
secondaryCellGroup
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
));
for
(
int
bwp_loop
=
0
;
bwp_loop
<
n_ul_bwp
;
bwp_loop
++
)
{
NR_BWP_Uplink_t
*
ubwp
=
calloc
(
1
,
sizeof
(
*
ubwp
));
fill_default_nsa_uplinkBWP
(
ubwp
,
bwp_loop
,
servingcellconfigdedicated
,
servingcellconfigcommon
,
configuration
,
uid
);
config_uplinkBWP
(
ubwp
,
bwp_loop
,
false
,
uid
,
configuration
,
servingcellconfigdedicated
,
servingcellconfigcommon
,
secondaryCellGroup
,
uecap
);
ASN_SEQUENCE_ADD
(
&
secondaryCellGroup
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
,
ubwp
);
}
secondaryCellGroup
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
firstActiveUplinkBWP_Id
=
calloc
(
1
,
sizeof
(
*
secondaryCellGroup
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
firstActiveUplinkBWP_Id
));
...
...
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