diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml
index 3472b14efc..19421a97ab 100755
--- a/cmake_targets/autotests/test_case_list.xml
+++ b/cmake_targets/autotests/test_case_list.xml
@@ -1093,17 +1093,18 @@
(Test8: 217 PRB 100 PDSCH-PRBs 110 PDSCH-Offset),
(Test9: 106 PRBs 50 PDSCH-PRBs MCS Index 27),
(Test10: 106 PRBs 50 PDSCH-PRBs MCS Index 16),
- (Test11: HARQ test 25% TP (4 rounds),
- (Test12: HARQ test 33% TP (3 rounds),
- (Test13: HARQ test 50% TP (2 rounds),
- (Test14: 3 PTRS, 8 Interpolated Symbols),
- (Test15: 6 PTRS, 5 Interpolated Symbols),
- (Test16: 11 PTRS, 0 Interpolated Symbols),
- (Test17: Mapping type A, 2 DMRS Symbols),
- (Test18: Mapping type A, 3 DMRS Symbols),
- (Test19: Mapping type B, 4 DMRS Symbols),
- (Test20: 4x4 MIMO, 1 Layer),
- (Test21: 4x4 MIMO, 2 Layers)
+ (Test11: 106 MCS-TABLE 256 QAM MCS Index 26),
+ (Test12: HARQ test 25% TP (4 rounds),
+ (Test13: HARQ test 33% TP (3 rounds),
+ (Test14: HARQ test 50% TP (2 rounds),
+ (Test15: 3 PTRS, 8 Interpolated Symbols),
+ (Test16: 6 PTRS, 5 Interpolated Symbols),
+ (Test17: 11 PTRS, 0 Interpolated Symbols),
+ (Test18: Mapping type A, 2 DMRS Symbols),
+ (Test19: Mapping type A, 3 DMRS Symbols),
+ (Test20: Mapping type B, 4 DMRS Symbols),
+ (Test21: 4x4 MIMO, 1 Layer),
+ (Test22: 4x4 MIMO, 2 Layers)
$OPENAIR_DIR/cmake_targets/build_oai
--phy_simulators -c
@@ -1118,8 +1119,9 @@
-n100 -R217 -b100 -s5
-n100 -R217 -a80 -s5
-n100 -R217 -a110 -s5 -b100
- -n100 -e27 -s30
- -n100 -e16 -s10
+ -n100 -e27 -s30
+ -n100 -e16 -s10
+ -n100 -q1 -e26 -s30
-n100 -s1 -t25
-n100 -s1 -t33
-n100 -s1 -t50
@@ -1131,7 +1133,7 @@
-n100 -s2 -U 2 1 3
-n10 -s20 -U 3 0 0 2 -gR -x1 -y4 -z4
-n10 -s20 -U 3 0 0 2 -gR -x2 -y4 -z4
- nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test6 nr_dlsim.test7 nr_dlsim.test8 nr_dlsim.test9 nr_dlsim.test10 nr_dlsim.test11 nr_dlsim.test12 nr_dlsim.test13 nr_dlsim.test14 nr_dlsim.test15 nr_dlsim.test16 nr_dlsim.test17 nr_dlsim.test18 nr_dlsim.test19 nr_dlsim.test20 nr_dlsim.test21
+ nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test6 nr_dlsim.test7 nr_dlsim.test8 nr_dlsim.test9 nr_dlsim.test10 nr_dlsim.test11 nr_dlsim.test12 nr_dlsim.test13 nr_dlsim.test14 nr_dlsim.test15 nr_dlsim.test16 nr_dlsim.test17 nr_dlsim.test18 nr_dlsim.test19 nr_dlsim.test20 nr_dlsim.test21 nr_dlsim.test22
PDSCH test OK
segmentation fault|assertion|exiting|fatal
3
diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c
index 32a05f060a..c1c8e2894c 100644
--- a/openair1/SIMULATION/NR_PHY/dlsim.c
+++ b/openair1/SIMULATION/NR_PHY/dlsim.c
@@ -431,7 +431,7 @@ int main(int argc, char **argv)
FILE *scg_fd=NULL;
- while ((c = getopt (argc, argv, "f:hA:pf:g:in:s:S:t:x:y:z:M:N:F:GR:dPIL:Ea:b:D:e:m:w:T:U:q")) != -1) {
+ while ((c = getopt (argc, argv, "f:hA:pf:g:in:s:S:t:x:y:z:M:N:F:GR:dPIL:Ea:b:D:e:q:m:w:T:U")) != -1) {
switch (c) {
case 'f':
@@ -598,13 +598,19 @@ int main(int argc, char **argv)
case 'b':
g_rbSize = atoi(optarg);
break;
+
case 'D':
dlsch_threads = atoi(optarg);
- break;
+ break;
+
case 'e':
g_mcsIndex = atoi(optarg);
break;
+ case 'q':
+ g_mcsTableIdx = atoi(optarg);
+ break;
+
case 'm':
mu = atoi(optarg);
break;
@@ -660,6 +666,7 @@ int main(int argc, char **argv)
printf("-c Start symbol for PDSCH (fixed for now)\n");
printf("-j Number of symbols for PDSCH (fixed for now)\n");
printf("-e MSC index\n");
+ printf("-q MCS Table index\n");
printf("-t Acceptable effective throughput (in percentage)\n");
printf("-T Enable PTRS, arguments list L_PTRS{0,1,2} K_PTRS{2,4}, e.g. -T 2 0 2 \n");
printf("-U Change DMRS Config, arguments list DMRS TYPE{0=A,1=B} DMRS AddPos{0:2} DMRS ConfType{1:2}, e.g. -U 3 0 2 1 \n");
@@ -759,11 +766,14 @@ int main(int argc, char **argv)
fill_scc_sim(rrc.carrier.servingcellconfigcommon,&ssb_bitmap,N_RB_DL,N_RB_DL,mu,mu);
ssb_bitmap = 1;// Enable only first SSB with index ssb_indx=0
fix_scc(scc,ssb_bitmap);
-
prepare_scd(scd);
+ NR_UE_NR_Capability_t* UE_Capability_nr = CALLOC(1,sizeof(NR_UE_NR_Capability_t));
+ prepare_sim_uecap(UE_Capability_nr,scc,mu,
+ N_RB_DL,g_mcsTableIdx);
+
// TODO do a UECAP for phy-sim
- fill_default_secondaryCellGroup(scc, scd, secondaryCellGroup, NULL, 0, 1, n_tx, 6, 0, 0, 0);
+ fill_default_secondaryCellGroup(scc, scd, secondaryCellGroup, UE_Capability_nr, 0, 1, n_tx, 6, 0, 0, 0);
/* RRC parameter validation for secondaryCellGroup */
fix_scd(scd);
diff --git a/openair2/RRC/NR/nr_rrc_config.c b/openair2/RRC/NR/nr_rrc_config.c
index c77d245af3..97c801b352 100644
--- a/openair2/RRC/NR/nr_rrc_config.c
+++ b/openair2/RRC/NR/nr_rrc_config.c
@@ -31,6 +31,50 @@
#include "nr_rrc_config.h"
#include "common/utils/nr/nr_common.h"
+void prepare_sim_uecap(NR_UE_NR_Capability_t *cap,
+ NR_ServingCellConfigCommon_t *scc,
+ int numerology,
+ int rbsize,
+ int mcs_table) {
+
+ int band = *scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0];
+ NR_BandNR_t *nr_bandnr = CALLOC(1,sizeof(NR_BandNR_t));
+ nr_bandnr->bandNR = band;
+ ASN_SEQUENCE_ADD(&cap->rf_Parameters.supportedBandListNR.list,
+ nr_bandnr);
+ if (mcs_table == 1) {
+ int bw = get_supported_band_index(numerology, band, rbsize);
+ if (band>256) {
+ NR_BandNR_t *bandNRinfo = cap->rf_Parameters.supportedBandListNR.list.array[0];
+ bandNRinfo->pdsch_256QAM_FR2 = CALLOC(1,sizeof(*bandNRinfo->pdsch_256QAM_FR2));
+ *bandNRinfo->pdsch_256QAM_FR2 = NR_BandNR__pdsch_256QAM_FR2_supported;
+ }
+ else{
+ cap->phy_Parameters.phy_ParametersFR1 = CALLOC(1,sizeof(*cap->phy_Parameters.phy_ParametersFR1));
+ NR_Phy_ParametersFR1_t *phy_fr1 = cap->phy_Parameters.phy_ParametersFR1;
+ phy_fr1->pdsch_256QAM_FR1 = CALLOC(1,sizeof(*phy_fr1->pdsch_256QAM_FR1));
+ *phy_fr1->pdsch_256QAM_FR1 = NR_Phy_ParametersFR1__pdsch_256QAM_FR1_supported;
+ }
+ cap->featureSets = CALLOC(1,sizeof(*cap->featureSets));
+ NR_FeatureSets_t *fs=cap->featureSets;
+ fs->featureSetsDownlinkPerCC = CALLOC(1,sizeof(*fs->featureSetsDownlinkPerCC));
+ NR_FeatureSetDownlinkPerCC_t *fs_cc = CALLOC(1,sizeof(NR_FeatureSetDownlinkPerCC_t));
+ fs_cc->supportedSubcarrierSpacingDL = numerology;
+ if(band>256) {
+ fs_cc->supportedBandwidthDL.present = NR_SupportedBandwidth_PR_fr2;
+ fs_cc->supportedBandwidthDL.choice.fr2 = bw;
+ }
+ else{
+ fs_cc->supportedBandwidthDL.present = NR_SupportedBandwidth_PR_fr1;
+ fs_cc->supportedBandwidthDL.choice.fr1 = bw;
+ }
+ fs_cc->supportedModulationOrderDL = CALLOC(1,sizeof(*fs_cc->supportedModulationOrderDL));
+ *fs_cc->supportedModulationOrderDL = NR_ModulationOrder_qam256;
+ ASN_SEQUENCE_ADD(&fs->featureSetsDownlinkPerCC->list,
+ fs_cc);
+ }
+}
+
void nr_rrc_config_dl_tda(NR_ServingCellConfigCommon_t *scc){
lte_frame_type_t frame_type = get_frame_type(*scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0], *scc->ssbSubcarrierSpacing);
diff --git a/openair2/RRC/NR/nr_rrc_config.h b/openair2/RRC/NR/nr_rrc_config.h
index 7daf08b547..e8a2ab4518 100644
--- a/openair2/RRC/NR/nr_rrc_config.h
+++ b/openair2/RRC/NR/nr_rrc_config.h
@@ -114,6 +114,11 @@ typedef struct physicalcellgroup_s{
void nr_rrc_config_dl_tda(NR_ServingCellConfigCommon_t *scc);
void nr_rrc_config_ul_tda(NR_ServingCellConfigCommon_t *scc, int min_fb_delay);
void set_dl_mcs_table(NR_BWP_Downlink_t *bwp, NR_ServingCellConfigCommon_t *scc, NR_UE_NR_Capability_t *cap);
+void prepare_sim_uecap(NR_UE_NR_Capability_t *cap,
+ NR_ServingCellConfigCommon_t *scc,
+ int numerology,
+ int rbsize,
+ int mcs_table);
#endif