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
lizhongxiao
OpenXG-RAN
Commits
0dc49597
Commit
0dc49597
authored
Aug 29, 2022
by
francescomani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
CSI MIMO meas harmonization
parent
4856c177
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
214 additions
and
153 deletions
+214
-153
openair2/RRC/NR/MESSAGES/asn1_msg.c
openair2/RRC/NR/MESSAGES/asn1_msg.c
+13
-63
openair2/RRC/NR/nr_rrc_config.c
openair2/RRC/NR/nr_rrc_config.c
+182
-0
openair2/RRC/NR/nr_rrc_config.h
openair2/RRC/NR/nr_rrc_config.h
+8
-0
openair2/RRC/NR/nr_rrc_proto.h
openair2/RRC/NR/nr_rrc_proto.h
+2
-0
openair2/RRC/NR/rrc_gNB_reconfig.c
openair2/RRC/NR/rrc_gNB_reconfig.c
+9
-90
No files found.
openair2/RRC/NR/MESSAGES/asn1_msg.c
View file @
0dc49597
...
...
@@ -984,7 +984,8 @@ void fill_initial_SpCellConfig(int uid,
pucchcsires1
->
uplinkBandwidthPartId
=
bwp_id
;
pucchcsires1
->
pucch_Resource
=
2
;
if
(
configuration
->
do_CSIRS
&&
pdsch_AntennaPorts
>
1
)
{
if
(
configuration
->
do_CSIRS
)
{
NR_CSI_ResourceConfig_t
*
csires0
=
calloc
(
1
,
sizeof
(
*
csires0
));
csires0
->
csi_ResourceConfigId
=
bwp_id
;
csires0
->
csi_RS_ResourceSetList
.
present
=
NR_CSI_ResourceConfig__csi_RS_ResourceSetList_PR_nzp_CSI_RS_SSB
;
...
...
@@ -996,6 +997,9 @@ void fill_initial_SpCellConfig(int uid,
csires0
->
bwp_Id
=
bwp_id
;
csires0
->
resourceType
=
NR_CSI_ResourceConfig__resourceType_periodic
;
ASN_SEQUENCE_ADD
(
&
csi_MeasConfig
->
csi_ResourceConfigToAddModList
->
list
,
csires0
);
}
if
(
configuration
->
do_CSIRS
&&
pdsch_AntennaPorts
>
1
)
{
NR_CSI_ResourceConfig_t
*
csires2
=
calloc
(
1
,
sizeof
(
*
csires2
));
csires2
->
csi_ResourceConfigId
=
bwp_id
+
10
;
...
...
@@ -1008,68 +1012,14 @@ void fill_initial_SpCellConfig(int uid,
csires2
->
resourceType
=
NR_CSI_ResourceConfig__resourceType_periodic
;
ASN_SEQUENCE_ADD
(
&
csi_MeasConfig
->
csi_ResourceConfigToAddModList
->
list
,
csires2
);
if
(
pdsch_AntennaPorts
>
1
)
{
LOG_D
(
NR_RRC
,
"Filling CSI Report Config for RI_PMI_CQI
\n
"
);
NR_CSI_ReportConfig_t
*
csirep1
=
calloc
(
1
,
sizeof
(
*
csirep1
));
csirep1
->
reportConfigId
=
0
;
csirep1
->
carrier
=
NULL
;
csirep1
->
resourcesForChannelMeasurement
=
bwp_id
;
csirep1
->
csi_IM_ResourcesForInterference
=
calloc
(
1
,
sizeof
(
*
csirep1
->
csi_IM_ResourcesForInterference
));
*
csirep1
->
csi_IM_ResourcesForInterference
=
bwp_id
+
10
;
csirep1
->
nzp_CSI_RS_ResourcesForInterference
=
NULL
;
csirep1
->
reportConfigType
.
present
=
NR_CSI_ReportConfig__reportConfigType_PR_periodic
;
csirep1
->
reportConfigType
.
choice
.
periodic
=
calloc
(
1
,
sizeof
(
*
csirep1
->
reportConfigType
.
choice
.
periodic
));
csirep1
->
reportConfigType
.
choice
.
periodic
->
reportSlotConfig
.
present
=
NR_CSI_ReportPeriodicityAndOffset_PR_slots320
;
csirep1
->
reportConfigType
.
choice
.
periodic
->
reportSlotConfig
.
choice
.
slots320
=
(
7
+
(
20
*
uid
))
%
320
;
ASN_SEQUENCE_ADD
(
&
csirep1
->
reportConfigType
.
choice
.
periodic
->
pucch_CSI_ResourceList
.
list
,
pucchcsires1
);
csirep1
->
reportQuantity
.
present
=
NR_CSI_ReportConfig__reportQuantity_PR_cri_RI_PMI_CQI
;
csirep1
->
reportQuantity
.
choice
.
cri_RI_PMI_CQI
=
(
NULL_t
)
0
;
csirep1
->
reportFreqConfiguration
=
calloc
(
1
,
sizeof
(
*
csirep1
->
reportFreqConfiguration
));
csirep1
->
reportFreqConfiguration
->
cqi_FormatIndicator
=
calloc
(
1
,
sizeof
(
*
csirep1
->
reportFreqConfiguration
->
cqi_FormatIndicator
));
*
csirep1
->
reportFreqConfiguration
->
cqi_FormatIndicator
=
NR_CSI_ReportConfig__reportFreqConfiguration__cqi_FormatIndicator_widebandCQI
;
csirep1
->
reportFreqConfiguration
->
pmi_FormatIndicator
=
calloc
(
1
,
sizeof
(
*
csirep1
->
reportFreqConfiguration
->
pmi_FormatIndicator
));
*
csirep1
->
reportFreqConfiguration
->
pmi_FormatIndicator
=
NR_CSI_ReportConfig__reportFreqConfiguration__pmi_FormatIndicator_widebandPMI
;
csirep1
->
reportFreqConfiguration
->
csi_ReportingBand
=
NULL
;
/*calloc(1,sizeof(*csirep1->reportFreqConfiguration->csi_ReportingBand));
csirep1->reportFreqConfiguration->csi_ReportingBand->present = NR_CSI_ReportConfig__reportFreqConfiguration__csi_ReportingBand_PR_subbands7;
csirep1->reportFreqConfiguration->csi_ReportingBand->choice.subbands7.size=1;
csirep1->reportFreqConfiguration->csi_ReportingBand->choice.subbands7.bits_unused=1;
csirep1->reportFreqConfiguration->csi_ReportingBand->choice.subbands7.buf=malloc(1);
csirep1->reportFreqConfiguration->csi_ReportingBand->choice.subbands7.buf[0]=254;*/
csirep1
->
timeRestrictionForChannelMeasurements
=
NR_CSI_ReportConfig__timeRestrictionForChannelMeasurements_notConfigured
;
csirep1
->
timeRestrictionForInterferenceMeasurements
=
NR_CSI_ReportConfig__timeRestrictionForInterferenceMeasurements_notConfigured
;
csirep1
->
codebookConfig
=
calloc
(
1
,
sizeof
(
*
csirep1
->
codebookConfig
));
csirep1
->
codebookConfig
->
codebookType
.
present
=
NR_CodebookConfig__codebookType_PR_type1
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
=
calloc
(
1
,
sizeof
(
*
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
));
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
present
=
NR_CodebookConfig__codebookType__type1__subType_PR_typeI_SinglePanel
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
=
calloc
(
1
,
sizeof
(
*
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
));
struct
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel
*
singlePanelConfig
=
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
;
singlePanelConfig
->
nrOfAntennaPorts
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts_PR_two
;
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
=
calloc
(
1
,
sizeof
(
*
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
));
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
size
=
1
;
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
bits_unused
=
2
;
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
buf
=
malloc
(
1
);
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
buf
[
0
]
=
0xfc
;
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
size
=
1
;
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
bits_unused
=
0
;
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
buf
=
malloc
(
1
);
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
buf
[
0
]
=
0x03
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
codebookMode
=
1
;
csirep1
->
dummy
=
NULL
;
csirep1
->
groupBasedBeamReporting
.
present
=
NR_CSI_ReportConfig__groupBasedBeamReporting_PR_disabled
;
csirep1
->
groupBasedBeamReporting
.
choice
.
disabled
=
calloc
(
1
,
sizeof
(
*
csirep1
->
groupBasedBeamReporting
.
choice
.
disabled
));
//csirep1->groupBasedBeamReporting.choice.disabled->nrofReportedRS = calloc(1,sizeof(*csirep1->groupBasedBeamReporting.choice.disabled->nrofReportedRS));
//*csirep1->groupBasedBeamReporting.choice.disabled->nrofReportedRS=NR_CSI_ReportConfig__groupBasedBeamReporting__disabled__nrofReportedRS_n1;
csirep1
->
cqi_Table
=
calloc
(
1
,
sizeof
(
*
csirep1
->
cqi_Table
));
if
(
pdsch_Config
->
choice
.
setup
->
mcs_Table
!=
NULL
)
*
csirep1
->
cqi_Table
=
NR_CSI_ReportConfig__cqi_Table_table2
;
else
*
csirep1
->
cqi_Table
=
NR_CSI_ReportConfig__cqi_Table_table1
;
csirep1
->
subbandSize
=
NR_CSI_ReportConfig__subbandSize_value2
;
csirep1
->
non_PMI_PortIndication
=
NULL
;
csirep1
->
ext1
=
NULL
;
ASN_SEQUENCE_ADD
(
&
csi_MeasConfig
->
csi_ReportConfigToAddModList
->
list
,
csirep1
);
}
config_csi_meas_report
(
csi_MeasConfig
,
scc
,
pucchcsires1
,
pdsch_Config
,
&
configuration
->
pdsch_AntennaPorts
,
NR_MAX_SUPPORTED_DL_LAYERS
,
bwp_id
,
uid
);
}
conig_rsrp_meas_report
(
csi_MeasConfig
,
scc
,
...
...
openair2/RRC/NR/nr_rrc_config.c
View file @
0dc49597
...
...
@@ -1267,6 +1267,188 @@ void set_csi_meas_periodicity(const NR_ServingCellConfigCommon_t *scc,
}
}
void
config_csi_codebook
(
const
rrc_pdsch_AntennaPorts_t
*
antennaports
,
const
int
max_layers
,
struct
NR_CodebookConfig
*
codebookConfig
)
{
const
int
num_ant_ports
=
antennaports
->
N1
*
antennaports
->
N2
*
antennaports
->
XP
;
codebookConfig
->
codebookType
.
present
=
NR_CodebookConfig__codebookType_PR_type1
;
codebookConfig
->
codebookType
.
choice
.
type1
=
calloc
(
1
,
sizeof
(
*
codebookConfig
->
codebookType
.
choice
.
type1
));
// Single panel configuration
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
present
=
NR_CodebookConfig__codebookType__type1__subType_PR_typeI_SinglePanel
;
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
=
calloc
(
1
,
sizeof
(
*
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
));
struct
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel
*
singlePanelConfig
=
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
;
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
size
=
1
;
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
bits_unused
=
0
;
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
buf
=
malloc
(
1
);
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
buf
[
0
]
=
(
1
<<
max_layers
)
-
1
;
//max_layers bit set to 1
if
(
num_ant_ports
==
2
)
{
singlePanelConfig
->
nrOfAntennaPorts
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts_PR_two
;
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
=
calloc
(
1
,
sizeof
(
*
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
));
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
size
=
1
;
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
bits_unused
=
2
;
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
buf
=
calloc
(
1
,
sizeof
(
uint8_t
));
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
buf
[
0
]
=
0xfc
;
// no restriction (all 6 bits enabled)
}
else
{
singlePanelConfig
->
nrOfAntennaPorts
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts_PR_moreThanTwo
;
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
=
calloc
(
1
,
sizeof
(
*
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
));
struct
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo
*
moreThanTwo
=
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
;
switch
(
num_ant_ports
)
{
case
4
:
moreThanTwo
->
n1_n2
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_two_one_TypeI_SinglePanel_Restriction
;
moreThanTwo
->
n1_n2
.
choice
.
two_one_TypeI_SinglePanel_Restriction
.
size
=
1
;
moreThanTwo
->
n1_n2
.
choice
.
two_one_TypeI_SinglePanel_Restriction
.
bits_unused
=
0
;
moreThanTwo
->
n1_n2
.
choice
.
two_one_TypeI_SinglePanel_Restriction
.
buf
=
calloc
(
1
,
sizeof
(
uint8_t
));
moreThanTwo
->
n1_n2
.
choice
.
two_one_TypeI_SinglePanel_Restriction
.
buf
[
0
]
=
0xff
;
// TODO verify the meaning of this parameter
break
;
case
8
:
if
(
antennaports
->
N1
==
2
)
{
AssertFatal
(
antennaports
->
N2
==
2
,
"N1 and N2 not in accordace with the specifications
\n
"
);
moreThanTwo
->
n1_n2
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_two_two_TypeI_SinglePanel_Restriction
;
moreThanTwo
->
n1_n2
.
choice
.
two_two_TypeI_SinglePanel_Restriction
.
size
=
8
;
moreThanTwo
->
n1_n2
.
choice
.
two_two_TypeI_SinglePanel_Restriction
.
bits_unused
=
0
;
moreThanTwo
->
n1_n2
.
choice
.
two_two_TypeI_SinglePanel_Restriction
.
buf
=
calloc
(
8
,
sizeof
(
uint8_t
));
for
(
int
i
=
0
;
i
<
8
;
i
++
)
moreThanTwo
->
n1_n2
.
choice
.
two_two_TypeI_SinglePanel_Restriction
.
buf
[
i
]
=
0xff
;
// TODO verify the meaning of this parameter
}
else
if
(
antennaports
->
N1
==
4
)
{
AssertFatal
(
antennaports
->
N2
==
1
,
"N1 and N2 not in accordace with the specifications
\n
"
);
moreThanTwo
->
n1_n2
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_four_one_TypeI_SinglePanel_Restriction
;
moreThanTwo
->
n1_n2
.
choice
.
four_one_TypeI_SinglePanel_Restriction
.
size
=
2
;
moreThanTwo
->
n1_n2
.
choice
.
four_one_TypeI_SinglePanel_Restriction
.
bits_unused
=
0
;
moreThanTwo
->
n1_n2
.
choice
.
four_one_TypeI_SinglePanel_Restriction
.
buf
=
calloc
(
2
,
sizeof
(
uint8_t
));
for
(
int
i
=
0
;
i
<
2
;
i
++
)
moreThanTwo
->
n1_n2
.
choice
.
four_one_TypeI_SinglePanel_Restriction
.
buf
[
i
]
=
0xff
;
// TODO verify the meaning of this parameter
}
else
AssertFatal
(
1
==
0
,
"N1 %d and N2 %d not supported for %d antenna ports
\n
"
,
antennaports
->
N1
,
antennaports
->
N2
,
num_ant_ports
);
break
;
case
12
:
if
(
antennaports
->
N1
==
3
)
{
AssertFatal
(
antennaports
->
N2
==
2
,
"N1 and N2 not in accordace with the specifications
\n
"
);
moreThanTwo
->
n1_n2
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_three_two_TypeI_SinglePanel_Restriction
;
moreThanTwo
->
n1_n2
.
choice
.
three_two_TypeI_SinglePanel_Restriction
.
size
=
12
;
moreThanTwo
->
n1_n2
.
choice
.
three_two_TypeI_SinglePanel_Restriction
.
bits_unused
=
0
;
moreThanTwo
->
n1_n2
.
choice
.
three_two_TypeI_SinglePanel_Restriction
.
buf
=
calloc
(
12
,
sizeof
(
uint8_t
));
for
(
int
i
=
0
;
i
<
12
;
i
++
)
moreThanTwo
->
n1_n2
.
choice
.
three_two_TypeI_SinglePanel_Restriction
.
buf
[
i
]
=
0xff
;
// TODO verify the meaning of this parameter
}
else
if
(
antennaports
->
N1
==
6
)
{
AssertFatal
(
antennaports
->
N2
==
1
,
"N1 and N2 not in accordace with the specifications
\n
"
);
moreThanTwo
->
n1_n2
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_six_one_TypeI_SinglePanel_Restriction
;
moreThanTwo
->
n1_n2
.
choice
.
six_one_TypeI_SinglePanel_Restriction
.
size
=
3
;
moreThanTwo
->
n1_n2
.
choice
.
six_one_TypeI_SinglePanel_Restriction
.
bits_unused
=
0
;
moreThanTwo
->
n1_n2
.
choice
.
six_one_TypeI_SinglePanel_Restriction
.
buf
=
calloc
(
3
,
sizeof
(
uint8_t
));
for
(
int
i
=
0
;
i
<
3
;
i
++
)
moreThanTwo
->
n1_n2
.
choice
.
six_one_TypeI_SinglePanel_Restriction
.
buf
[
i
]
=
0xff
;
// TODO verify the meaning of this parameter
}
else
AssertFatal
(
1
==
0
,
"N1 %d and N2 %d not supported for %d antenna ports
\n
"
,
antennaports
->
N1
,
antennaports
->
N2
,
num_ant_ports
);
break
;
case
16
:
if
(
antennaports
->
N1
==
4
)
{
AssertFatal
(
antennaports
->
N2
==
2
,
"N1 and N2 not in accordace with the specifications
\n
"
);
moreThanTwo
->
n1_n2
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_four_two_TypeI_SinglePanel_Restriction
;
moreThanTwo
->
n1_n2
.
choice
.
four_two_TypeI_SinglePanel_Restriction
.
size
=
16
;
moreThanTwo
->
n1_n2
.
choice
.
four_two_TypeI_SinglePanel_Restriction
.
bits_unused
=
0
;
moreThanTwo
->
n1_n2
.
choice
.
four_two_TypeI_SinglePanel_Restriction
.
buf
=
calloc
(
16
,
sizeof
(
uint8_t
));
for
(
int
i
=
0
;
i
<
16
;
i
++
)
moreThanTwo
->
n1_n2
.
choice
.
four_two_TypeI_SinglePanel_Restriction
.
buf
[
i
]
=
0xff
;
// TODO verify the meaning of this parameter
}
else
if
(
antennaports
->
N1
==
8
)
{
AssertFatal
(
antennaports
->
N2
==
1
,
"N1 and N2 not in accordace with the specifications
\n
"
);
moreThanTwo
->
n1_n2
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_eight_one_TypeI_SinglePanel_Restriction
;
moreThanTwo
->
n1_n2
.
choice
.
eight_one_TypeI_SinglePanel_Restriction
.
size
=
4
;
moreThanTwo
->
n1_n2
.
choice
.
eight_one_TypeI_SinglePanel_Restriction
.
bits_unused
=
0
;
moreThanTwo
->
n1_n2
.
choice
.
eight_one_TypeI_SinglePanel_Restriction
.
buf
=
calloc
(
4
,
sizeof
(
uint8_t
));
for
(
int
i
=
0
;
i
<
4
;
i
++
)
moreThanTwo
->
n1_n2
.
choice
.
eight_one_TypeI_SinglePanel_Restriction
.
buf
[
i
]
=
0xff
;
// TODO verify the meaning of this parameter
}
else
AssertFatal
(
1
==
0
,
"N1 %d and N2 %d not supported for %d antenna ports
\n
"
,
antennaports
->
N1
,
antennaports
->
N2
,
num_ant_ports
);
break
;
default:
AssertFatal
(
1
==
0
,
"%d antenna ports not supported
\n
"
,
num_ant_ports
);
}
}
codebookConfig
->
codebookType
.
choice
.
type1
->
codebookMode
=
1
;
}
void
config_csi_meas_report
(
NR_CSI_MeasConfig_t
*
csi_MeasConfig
,
const
NR_ServingCellConfigCommon_t
*
servingcellconfigcommon
,
NR_PUCCH_CSI_Resource_t
*
pucchcsires
,
struct
NR_SetupRelease_PDSCH_Config
*
pdsch_Config
,
const
rrc_pdsch_AntennaPorts_t
*
antennaports
,
const
int
max_layers
,
int
rep_id
,
int
uid
)
{
NR_CSI_ReportConfig_t
*
csirep
=
calloc
(
1
,
sizeof
(
*
csirep
));
csirep
->
reportConfigId
=
rep_id
;
csirep
->
carrier
=
NULL
;
int
resource_id
=
-
1
;
int
im_id
=
-
1
;
for
(
int
csi_list
=
0
;
csi_list
<
csi_MeasConfig
->
csi_ResourceConfigToAddModList
->
list
.
count
;
csi_list
++
)
{
NR_CSI_ResourceConfig_t
*
csires
=
csi_MeasConfig
->
csi_ResourceConfigToAddModList
->
list
.
array
[
csi_list
];
if
(
csires
->
csi_RS_ResourceSetList
.
present
==
NR_CSI_ResourceConfig__csi_RS_ResourceSetList_PR_nzp_CSI_RS_SSB
)
{
if
(
csires
->
csi_RS_ResourceSetList
.
choice
.
nzp_CSI_RS_SSB
->
nzp_CSI_RS_ResourceSetList
)
{
resource_id
=
csires
->
csi_ResourceConfigId
;
}
}
if
(
csires
->
csi_RS_ResourceSetList
.
present
==
NR_CSI_ResourceConfig__csi_RS_ResourceSetList_PR_csi_IM_ResourceSetList
)
{
if
(
csires
->
csi_RS_ResourceSetList
.
choice
.
csi_IM_ResourceSetList
)
{
im_id
=
csires
->
csi_ResourceConfigId
;
}
}
}
AssertFatal
(
resource_id
>-
1
,
"No resource for CSI measurements found
\n
"
);
AssertFatal
(
im_id
>-
1
,
"No resource for IM measurements found
\n
"
);
csirep
->
resourcesForChannelMeasurement
=
resource_id
;
csirep
->
csi_IM_ResourcesForInterference
=
calloc
(
1
,
sizeof
(
*
csirep
->
csi_IM_ResourcesForInterference
));
*
csirep
->
csi_IM_ResourcesForInterference
=
im_id
;
csirep
->
nzp_CSI_RS_ResourcesForInterference
=
NULL
;
csirep
->
reportConfigType
.
present
=
NR_CSI_ReportConfig__reportConfigType_PR_periodic
;
csirep
->
reportConfigType
.
choice
.
periodic
=
calloc
(
1
,
sizeof
(
*
csirep
->
reportConfigType
.
choice
.
periodic
));
set_csi_meas_periodicity
(
servingcellconfigcommon
,
csirep
,
uid
,
false
);
ASN_SEQUENCE_ADD
(
&
csirep
->
reportConfigType
.
choice
.
periodic
->
pucch_CSI_ResourceList
.
list
,
pucchcsires
);
csirep
->
reportQuantity
.
present
=
NR_CSI_ReportConfig__reportQuantity_PR_cri_RI_PMI_CQI
;
csirep
->
reportQuantity
.
choice
.
cri_RI_PMI_CQI
=
(
NULL_t
)
0
;
csirep
->
reportFreqConfiguration
=
calloc
(
1
,
sizeof
(
*
csirep
->
reportFreqConfiguration
));
// Wideband configuration
csirep
->
reportFreqConfiguration
->
cqi_FormatIndicator
=
calloc
(
1
,
sizeof
(
*
csirep
->
reportFreqConfiguration
->
cqi_FormatIndicator
));
*
csirep
->
reportFreqConfiguration
->
cqi_FormatIndicator
=
NR_CSI_ReportConfig__reportFreqConfiguration__cqi_FormatIndicator_widebandCQI
;
csirep
->
reportFreqConfiguration
->
pmi_FormatIndicator
=
calloc
(
1
,
sizeof
(
*
csirep
->
reportFreqConfiguration
->
pmi_FormatIndicator
));
*
csirep
->
reportFreqConfiguration
->
pmi_FormatIndicator
=
NR_CSI_ReportConfig__reportFreqConfiguration__pmi_FormatIndicator_widebandPMI
;
csirep
->
reportFreqConfiguration
->
csi_ReportingBand
=
NULL
;
csirep
->
timeRestrictionForChannelMeasurements
=
NR_CSI_ReportConfig__timeRestrictionForChannelMeasurements_notConfigured
;
csirep
->
timeRestrictionForInterferenceMeasurements
=
NR_CSI_ReportConfig__timeRestrictionForInterferenceMeasurements_notConfigured
;
csirep
->
codebookConfig
=
calloc
(
1
,
sizeof
(
*
csirep
->
codebookConfig
));
config_csi_codebook
(
antennaports
,
max_layers
,
csirep
->
codebookConfig
);
csirep
->
dummy
=
NULL
;
csirep
->
groupBasedBeamReporting
.
present
=
NR_CSI_ReportConfig__groupBasedBeamReporting_PR_disabled
;
csirep
->
groupBasedBeamReporting
.
choice
.
disabled
=
calloc
(
1
,
sizeof
(
*
csirep
->
groupBasedBeamReporting
.
choice
.
disabled
));
csirep
->
cqi_Table
=
calloc
(
1
,
sizeof
(
*
csirep
->
cqi_Table
));
if
(
pdsch_Config
->
choice
.
setup
->
mcs_Table
!=
NULL
)
*
csirep
->
cqi_Table
=
NR_CSI_ReportConfig__cqi_Table_table2
;
else
*
csirep
->
cqi_Table
=
NR_CSI_ReportConfig__cqi_Table_table1
;
csirep
->
subbandSize
=
NR_CSI_ReportConfig__subbandSize_value2
;
csirep
->
non_PMI_PortIndication
=
NULL
;
csirep
->
ext1
=
NULL
;
ASN_SEQUENCE_ADD
(
&
csi_MeasConfig
->
csi_ReportConfigToAddModList
->
list
,
csirep
);
}
void
conig_rsrp_meas_report
(
NR_CSI_MeasConfig_t
*
csi_MeasConfig
,
const
NR_ServingCellConfigCommon_t
*
servingcellconfigcommon
,
NR_PUCCH_CSI_Resource_t
*
pucchcsires
,
...
...
openair2/RRC/NR/nr_rrc_config.h
View file @
0dc49597
...
...
@@ -64,6 +64,14 @@ void conig_rsrp_meas_report(NR_CSI_MeasConfig_t *csi_MeasConfig,
int
do_csi
,
int
rep_id
,
int
uid
);
void
config_csi_meas_report
(
NR_CSI_MeasConfig_t
*
csi_MeasConfig
,
const
NR_ServingCellConfigCommon_t
*
servingcellconfigcommon
,
NR_PUCCH_CSI_Resource_t
*
pucchcsires
,
struct
NR_SetupRelease_PDSCH_Config
*
pdsch_Config
,
const
rrc_pdsch_AntennaPorts_t
*
antennaports
,
const
int
max_layers
,
int
rep_id
,
int
uid
);
void
config_csirs
(
const
NR_ServingCellConfigCommon_t
*
servingcellconfigcommon
,
NR_CSI_MeasConfig_t
*
csi_MeasConfig
,
int
uid
,
...
...
openair2/RRC/NR/nr_rrc_proto.h
View file @
0dc49597
...
...
@@ -41,6 +41,8 @@
#include "NR_CG-ConfigInfo.h"
#include "NR_SecurityConfig.h"
#define NR_MAX_SUPPORTED_DL_LAYERS 2
int
rrc_init_nr_global_param
(
void
);
void
rrc_config_nr_buffer
(
NR_SRB_INFO
*
Srb_info
,
...
...
openair2/RRC/NR/rrc_gNB_reconfig.c
View file @
0dc49597
...
...
@@ -331,7 +331,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
pdsch_servingcellconfig
->
pucch_Cell
=
NULL
;
pdsch_servingcellconfig
->
ext1
=
calloc
(
1
,
sizeof
(
*
pdsch_servingcellconfig
->
ext1
));
pdsch_servingcellconfig
->
ext1
->
maxMIMO_Layers
=
calloc
(
1
,
sizeof
(
*
pdsch_servingcellconfig
->
ext1
->
maxMIMO_Layers
));
*
pdsch_servingcellconfig
->
ext1
->
maxMIMO_Layers
=
dl_antenna_ports
;
*
pdsch_servingcellconfig
->
ext1
->
maxMIMO_Layers
=
NR_MAX_SUPPORTED_DL_LAYERS
;
pdsch_servingcellconfig
->
ext1
->
processingType2Enabled
=
NULL
;
secondaryCellGroup
->
spCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
=
NULL
;
...
...
@@ -411,95 +411,14 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
pucchcsires1
->
uplinkBandwidthPartId
=
bwp
->
bwp_Id
;
pucchcsires1
->
pucch_Resource
=
2
;
if
(
do_csirs
&&
dl_antenna_ports
>
1
)
{
NR_CSI_ReportConfig_t
*
csirep1
=
calloc
(
1
,
sizeof
(
*
csirep1
));
csirep1
->
reportConfigId
=
bwp
->
bwp_Id
;
csirep1
->
carrier
=
NULL
;
csirep1
->
resourcesForChannelMeasurement
=
bwp
->
bwp_Id
;
csirep1
->
csi_IM_ResourcesForInterference
=
calloc
(
1
,
sizeof
(
*
csirep1
->
csi_IM_ResourcesForInterference
));
*
csirep1
->
csi_IM_ResourcesForInterference
=
bwp
->
bwp_Id
+
10
;
csirep1
->
nzp_CSI_RS_ResourcesForInterference
=
NULL
;
csirep1
->
reportConfigType
.
present
=
NR_CSI_ReportConfig__reportConfigType_PR_periodic
;
csirep1
->
reportConfigType
.
choice
.
periodic
=
calloc
(
1
,
sizeof
(
*
csirep1
->
reportConfigType
.
choice
.
periodic
));
csirep1
->
reportConfigType
.
choice
.
periodic
->
reportSlotConfig
.
present
=
NR_CSI_ReportPeriodicityAndOffset_PR_slots320
;
csirep1
->
reportConfigType
.
choice
.
periodic
->
reportSlotConfig
.
choice
.
slots320
=
9
+
(
20
*
uid
)
%
320
;
ASN_SEQUENCE_ADD
(
&
csirep1
->
reportConfigType
.
choice
.
periodic
->
pucch_CSI_ResourceList
.
list
,
pucchcsires1
);
csirep1
->
reportQuantity
.
present
=
NR_CSI_ReportConfig__reportQuantity_PR_cri_RI_PMI_CQI
;
csirep1
->
reportQuantity
.
choice
.
cri_RI_PMI_CQI
=
(
NULL_t
)
0
;
csirep1
->
reportFreqConfiguration
=
calloc
(
1
,
sizeof
(
*
csirep1
->
reportFreqConfiguration
));
csirep1
->
reportFreqConfiguration
->
cqi_FormatIndicator
=
calloc
(
1
,
sizeof
(
*
csirep1
->
reportFreqConfiguration
->
cqi_FormatIndicator
));
*
csirep1
->
reportFreqConfiguration
->
cqi_FormatIndicator
=
NR_CSI_ReportConfig__reportFreqConfiguration__cqi_FormatIndicator_widebandCQI
;
csirep1
->
reportFreqConfiguration
->
pmi_FormatIndicator
=
calloc
(
1
,
sizeof
(
*
csirep1
->
reportFreqConfiguration
->
pmi_FormatIndicator
));
*
csirep1
->
reportFreqConfiguration
->
pmi_FormatIndicator
=
NR_CSI_ReportConfig__reportFreqConfiguration__pmi_FormatIndicator_widebandPMI
;
csirep1
->
reportFreqConfiguration
->
csi_ReportingBand
=
calloc
(
1
,
sizeof
(
*
csirep1
->
reportFreqConfiguration
->
csi_ReportingBand
));
csirep1
->
reportFreqConfiguration
->
csi_ReportingBand
->
present
=
NR_CSI_ReportConfig__reportFreqConfiguration__csi_ReportingBand_PR_subbands7
;
csirep1
->
reportFreqConfiguration
->
csi_ReportingBand
->
choice
.
subbands7
.
size
=
1
;
csirep1
->
reportFreqConfiguration
->
csi_ReportingBand
->
choice
.
subbands7
.
bits_unused
=
1
;
csirep1
->
reportFreqConfiguration
->
csi_ReportingBand
->
choice
.
subbands7
.
buf
=
malloc
(
1
);
csirep1
->
reportFreqConfiguration
->
csi_ReportingBand
->
choice
.
subbands7
.
buf
[
0
]
=
254
;
csirep1
->
timeRestrictionForChannelMeasurements
=
NR_CSI_ReportConfig__timeRestrictionForChannelMeasurements_configured
;
csirep1
->
timeRestrictionForInterferenceMeasurements
=
NR_CSI_ReportConfig__timeRestrictionForInterferenceMeasurements_configured
;
csirep1
->
codebookConfig
=
calloc
(
1
,
sizeof
(
*
csirep1
->
codebookConfig
));
csirep1
->
codebookConfig
->
codebookType
.
present
=
NR_CodebookConfig__codebookType_PR_type1
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
=
calloc
(
1
,
sizeof
(
*
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
));
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
present
=
NR_CodebookConfig__codebookType__type1__subType_PR_typeI_SinglePanel
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
=
calloc
(
1
,
sizeof
(
*
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
));
struct
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel
*
singlePanelConfig
=
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
;
if
(
dl_antenna_ports
==
2
)
{
singlePanelConfig
->
nrOfAntennaPorts
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts_PR_two
;
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
=
calloc
(
1
,
sizeof
(
*
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
));
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
size
=
1
;
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
bits_unused
=
2
;
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
buf
=
malloc
(
1
);
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
buf
[
0
]
=
0xfc
;
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
size
=
1
;
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
bits_unused
=
0
;
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
buf
=
malloc
(
1
);
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
buf
[
0
]
=
0x03
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
codebookMode
=
1
;
}
else
if
(
dl_antenna_ports
<
16
)
{
singlePanelConfig
->
nrOfAntennaPorts
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts_PR_moreThanTwo
;
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
=
calloc
(
1
,
sizeof
(
*
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
));
if
(
dl_antenna_ports
==
4
)
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
->
n1_n2
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_two_one_TypeI_SinglePanel_Restriction
;
else
if
(
dl_antenna_ports
==
8
)
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
->
n1_n2
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_four_one_TypeI_SinglePanel_Restriction
;
else
if
(
dl_antenna_ports
==
12
)
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
->
n1_n2
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_six_one_TypeI_SinglePanel_Restriction
;
else
//default
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
->
n1_n2
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_two_one_TypeI_SinglePanel_Restriction
;
/*singlePanelConfig->nrOfAntennaPorts.choice.moreThanTwo->n1_n2.choice.two_one_TypeI_SinglePanel_Restriction.size=1;
singlePanelConfig->nrOfAntennaPorts.choice.moreThanTwo->n1_n2.choice.two_one_TypeI_SinglePanel_Restriction.bits_unused=1;
singlePanelConfig->nrOfAntennaPorts.choice.moreThanTwo->n1_n2.choice.two_one_TypeI_SinglePanel_Restriction.buf=malloc(1);
singlePanelConfig->nrOfAntennaPorts.choice.moreThanTwo->n1_n2.choice.two_one_TypeI_SinglePanel_Restriction.buf[0]=0xc0; //'00000011'B
singlePanelConfig->nrOfAntennaPorts.choice.moreThanTwo->typeI_SinglePanel_codebookSubsetRestriction_i2->size = 1;
singlePanelConfig->nrOfAntennaPorts.choice.moreThanTwo->typeI_SinglePanel_codebookSubsetRestriction_i2->bits_unused=1;
singlePanelConfig->nrOfAntennaPorts.choice.moreThanTwo->typeI_SinglePanel_codebookSubsetRestriction_i2->buf=malloc(1);
singlePanelConfig->nrOfAntennaPorts.choice.moreThanTwo->typeI_SinglePanel_codebookSubsetRestriction_i2->buf[0]=0xc0;*/
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
codebookMode
=
1
;
}
else
{
//32 antennas are Not implemented yet
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
codebookMode
=
2
;
}
csirep1
->
dummy
=
NULL
;
csirep1
->
groupBasedBeamReporting
.
present
=
NR_CSI_ReportConfig__groupBasedBeamReporting_PR_disabled
;
csirep1
->
groupBasedBeamReporting
.
choice
.
disabled
=
calloc
(
1
,
sizeof
(
*
csirep1
->
groupBasedBeamReporting
.
choice
.
disabled
));
//csirep1->groupBasedBeamReporting.choice.disabled->nrofReportedRS = calloc(1,sizeof(*csirep1->groupBasedBeamReporting.choice.disabled->nrofReportedRS));
//*csirep1->groupBasedBeamReporting.choice.disabled->nrofReportedRS=NR_CSI_ReportConfig__groupBasedBeamReporting__disabled__nrofReportedRS_n1;
csirep1
->
cqi_Table
=
calloc
(
1
,
sizeof
(
*
csirep1
->
cqi_Table
));
if
(
bwp
->
bwp_Dedicated
->
pdsch_Config
->
choice
.
setup
->
mcs_Table
!=
NULL
)
*
csirep1
->
cqi_Table
=
NR_CSI_ReportConfig__cqi_Table_table2
;
else
*
csirep1
->
cqi_Table
=
NR_CSI_ReportConfig__cqi_Table_table1
;
csirep1
->
subbandSize
=
NR_CSI_ReportConfig__subbandSize_value2
;
csirep1
->
non_PMI_PortIndication
=
NULL
;
csirep1
->
ext1
=
NULL
;
ASN_SEQUENCE_ADD
(
&
csi_MeasConfig
->
csi_ReportConfigToAddModList
->
list
,
csirep1
);
}
config_csi_meas_report
(
csi_MeasConfig
,
servingcellconfigcommon
,
pucchcsires1
,
bwp
->
bwp_Dedicated
->
pdsch_Config
,
pdschap
,
NR_MAX_SUPPORTED_DL_LAYERS
,
bwp
->
bwp_Id
,
uid
);
conig_rsrp_meas_report
(
csi_MeasConfig
,
servingcellconfigcommon
,
pucchcsires1
,
...
...
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