Fixed issues to allow coexistence of CFRA and CBRA implementations
This commit is contained in:
@@ -146,17 +146,11 @@ int nr_get_Po_NOMINAL_PUSCH(NR_PRACH_RESOURCES_t *prach_resources, module_id_t m
|
|||||||
|
|
||||||
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
|
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
|
||||||
NR_ServingCellConfigCommon_t *scc = mac->scc;
|
NR_ServingCellConfigCommon_t *scc = mac->scc;
|
||||||
int8_t receivedTargerPower, delta_preamble;
|
int8_t receivedTargerPower;
|
||||||
long preambleReceivedTargetPower = 0;
|
int8_t delta_preamble;
|
||||||
|
|
||||||
if (prach_resources->RA_TYPE == RA_4STEP){
|
|
||||||
NR_RACH_ConfigCommon_t *nr_rach_ConfigCommon = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup;
|
|
||||||
preambleReceivedTargetPower = nr_rach_ConfigCommon->rach_ConfigGeneric.preambleReceivedTargetPower;
|
|
||||||
} else if (prach_resources->RA_TYPE == RA_2STEP){
|
|
||||||
// msgA-PreambleReceivedTargetPower
|
|
||||||
LOG_E(MAC, "In %s:%d: missing implementation for 2-step RA...\n", __FUNCTION__, __LINE__);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
NR_RACH_ConfigCommon_t *nr_rach_ConfigCommon = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup;
|
||||||
|
long preambleReceivedTargetPower = nr_rach_ConfigCommon->rach_ConfigGeneric.preambleReceivedTargetPower;
|
||||||
delta_preamble = nr_get_DELTA_PREAMBLE(mod_id, CC_id, prach_resources->prach_format);
|
delta_preamble = nr_get_DELTA_PREAMBLE(mod_id, CC_id, prach_resources->prach_format);
|
||||||
|
|
||||||
receivedTargerPower = preambleReceivedTargetPower + delta_preamble + (prach_resources->RA_PREAMBLE_POWER_RAMPING_COUNTER - 1) * prach_resources->RA_PREAMBLE_POWER_RAMPING_STEP + prach_resources->POWER_OFFSET_2STEP_RA;
|
receivedTargerPower = preambleReceivedTargetPower + delta_preamble + (prach_resources->RA_PREAMBLE_POWER_RAMPING_COUNTER - 1) * prach_resources->RA_PREAMBLE_POWER_RAMPING_STEP + prach_resources->POWER_OFFSET_2STEP_RA;
|
||||||
|
|||||||
@@ -103,150 +103,137 @@ void init_RA(module_id_t mod_id,
|
|||||||
LOG_E(MAC, "In %s: config not handled\n", __FUNCTION__);
|
LOG_E(MAC, "In %s: config not handled\n", __FUNCTION__);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prach_resources->RA_TYPE == RA_2STEP){
|
switch (rach_ConfigGeneric->powerRampingStep){ // in dB
|
||||||
LOG_E(MAC, "Missing implementation of initialization of 2-step RA specific variables...\n");
|
case 0:
|
||||||
} else if (prach_resources->RA_TYPE == RA_4STEP){
|
|
||||||
LOG_D(MAC, "Initialization of 4-step RA specific variables...\n");
|
|
||||||
switch (rach_ConfigGeneric->powerRampingStep){ // in dB
|
|
||||||
case 0:
|
|
||||||
prach_resources->RA_PREAMBLE_POWER_RAMPING_STEP = 0;
|
prach_resources->RA_PREAMBLE_POWER_RAMPING_STEP = 0;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
prach_resources->RA_PREAMBLE_POWER_RAMPING_STEP = 2;
|
prach_resources->RA_PREAMBLE_POWER_RAMPING_STEP = 2;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
prach_resources->RA_PREAMBLE_POWER_RAMPING_STEP = 4;
|
prach_resources->RA_PREAMBLE_POWER_RAMPING_STEP = 4;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
prach_resources->RA_PREAMBLE_POWER_RAMPING_STEP = 6;
|
prach_resources->RA_PREAMBLE_POWER_RAMPING_STEP = 6;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
switch (rach_ConfigGeneric->preambleTransMax) {
|
|
||||||
case 0:
|
|
||||||
ra->preambleTransMax = 3;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
ra->preambleTransMax = 4;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
ra->preambleTransMax = 5;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
ra->preambleTransMax = 6;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
ra->preambleTransMax = 7;
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
ra->preambleTransMax = 8;
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
ra->preambleTransMax = 10;
|
|
||||||
break;
|
|
||||||
case 7:
|
|
||||||
ra->preambleTransMax = 20;
|
|
||||||
break;
|
|
||||||
case 8:
|
|
||||||
ra->preambleTransMax = 50;
|
|
||||||
break;
|
|
||||||
case 9:
|
|
||||||
ra->preambleTransMax = 100;
|
|
||||||
break;
|
|
||||||
case 10:
|
|
||||||
ra->preambleTransMax = 200;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (nr_rach_ConfigCommon->ext1) {
|
|
||||||
if (nr_rach_ConfigCommon->ext1->ra_PrioritizationForAccessIdentity){
|
|
||||||
LOG_D(MAC, "In %s:%d: Missing implementation for Access Identity initialization procedures\n", __FUNCTION__, __LINE__);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
switch (rach_ConfigGeneric->preambleTransMax) {
|
||||||
|
case 0:
|
||||||
|
ra->preambleTransMax = 3;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
ra->preambleTransMax = 4;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ra->preambleTransMax = 5;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
ra->preambleTransMax = 6;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
ra->preambleTransMax = 7;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
ra->preambleTransMax = 8;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
ra->preambleTransMax = 10;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
ra->preambleTransMax = 20;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
ra->preambleTransMax = 50;
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
ra->preambleTransMax = 100;
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
ra->preambleTransMax = 200;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nr_rach_ConfigCommon->ext1) {
|
||||||
|
if (nr_rach_ConfigCommon->ext1->ra_PrioritizationForAccessIdentity){
|
||||||
|
LOG_D(MAC, "In %s:%d: Missing implementation for Access Identity initialization procedures\n", __FUNCTION__, __LINE__);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ssb_rach_config(RA_config_t *ra, NR_PRACH_RESOURCES_t *prach_resources, NR_RACH_ConfigCommon_t *nr_rach_ConfigCommon, fapi_nr_ul_config_prach_pdu *prach_pdu){
|
void ssb_rach_config(RA_config_t *ra, NR_PRACH_RESOURCES_t *prach_resources, NR_RACH_ConfigCommon_t *nr_rach_ConfigCommon, fapi_nr_ul_config_prach_pdu *prach_pdu){
|
||||||
|
|
||||||
// Determine the SSB to RACH mapping ratio
|
// Determine the SSB to RACH mapping ratio
|
||||||
// =======================================
|
// =======================================
|
||||||
if (prach_resources->RA_TYPE == RA_4STEP){
|
|
||||||
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR ssb_perRACH_config = nr_rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present;
|
|
||||||
boolean_t multiple_ssb_per_ro; // true if more than one or exactly one SSB per RACH occasion, false if more than one RO per SSB
|
|
||||||
uint8_t ssb_rach_ratio; // Nb of SSBs per RACH or RACHs per SSB
|
|
||||||
int total_preambles_per_ssb;
|
|
||||||
uint8_t ssb_nb_in_ro;
|
|
||||||
int numberOfRA_Preambles = 64;
|
|
||||||
|
|
||||||
switch (ssb_perRACH_config){
|
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR ssb_perRACH_config = nr_rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present;
|
||||||
case NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneEighth:
|
boolean_t multiple_ssb_per_ro; // true if more than one or exactly one SSB per RACH occasion, false if more than one RO per SSB
|
||||||
multiple_ssb_per_ro = false;
|
uint8_t ssb_rach_ratio; // Nb of SSBs per RACH or RACHs per SSB
|
||||||
ssb_rach_ratio = 8;
|
int total_preambles_per_ssb;
|
||||||
ra->cb_preambles_per_ssb = 4 * (nr_rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.oneEighth + 1);
|
uint8_t ssb_nb_in_ro;
|
||||||
break;
|
int numberOfRA_Preambles = 64;
|
||||||
case NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneFourth:
|
|
||||||
multiple_ssb_per_ro = false;
|
|
||||||
ssb_rach_ratio = 4;
|
|
||||||
ra->cb_preambles_per_ssb = 4 * (nr_rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.oneFourth + 1);
|
|
||||||
break;
|
|
||||||
case NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneHalf:
|
|
||||||
multiple_ssb_per_ro = false;
|
|
||||||
ssb_rach_ratio = 2;
|
|
||||||
ra->cb_preambles_per_ssb = 4 * (nr_rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.oneHalf + 1);
|
|
||||||
break;
|
|
||||||
case NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_one:
|
|
||||||
multiple_ssb_per_ro = true;
|
|
||||||
ssb_rach_ratio = 1;
|
|
||||||
ra->cb_preambles_per_ssb = 4 * (nr_rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.one + 1);
|
|
||||||
break;
|
|
||||||
case NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_two:
|
|
||||||
multiple_ssb_per_ro = true;
|
|
||||||
ssb_rach_ratio = 2;
|
|
||||||
ra->cb_preambles_per_ssb = 4 * (nr_rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.two + 1);
|
|
||||||
break;
|
|
||||||
case NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_four:
|
|
||||||
multiple_ssb_per_ro = true;
|
|
||||||
ssb_rach_ratio = 4;
|
|
||||||
ra->cb_preambles_per_ssb = nr_rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.four;
|
|
||||||
break;
|
|
||||||
case NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_eight:
|
|
||||||
multiple_ssb_per_ro = true;
|
|
||||||
ssb_rach_ratio = 8;
|
|
||||||
ra->cb_preambles_per_ssb = nr_rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.eight;
|
|
||||||
break;
|
|
||||||
case NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_sixteen:
|
|
||||||
multiple_ssb_per_ro = true;
|
|
||||||
ssb_rach_ratio = 16;
|
|
||||||
ra->cb_preambles_per_ssb = nr_rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.sixteen;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
AssertFatal(1 == 0, "Unsupported ssb_perRACH_config %d\n", ssb_perRACH_config);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nr_rach_ConfigCommon->totalNumberOfRA_Preambles)
|
switch (ssb_perRACH_config){
|
||||||
numberOfRA_Preambles = *(nr_rach_ConfigCommon->totalNumberOfRA_Preambles);
|
case NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneEighth:
|
||||||
|
multiple_ssb_per_ro = false;
|
||||||
|
ssb_rach_ratio = 8;
|
||||||
|
ra->cb_preambles_per_ssb = 4 * (nr_rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.oneEighth + 1);
|
||||||
|
break;
|
||||||
|
case NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneFourth:
|
||||||
|
multiple_ssb_per_ro = false;
|
||||||
|
ssb_rach_ratio = 4;
|
||||||
|
ra->cb_preambles_per_ssb = 4 * (nr_rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.oneFourth + 1);
|
||||||
|
break;
|
||||||
|
case NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneHalf:
|
||||||
|
multiple_ssb_per_ro = false;
|
||||||
|
ssb_rach_ratio = 2;
|
||||||
|
ra->cb_preambles_per_ssb = 4 * (nr_rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.oneHalf + 1);
|
||||||
|
break;
|
||||||
|
case NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_one:
|
||||||
|
multiple_ssb_per_ro = true;
|
||||||
|
ssb_rach_ratio = 1;
|
||||||
|
ra->cb_preambles_per_ssb = 4 * (nr_rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.one + 1);
|
||||||
|
break;
|
||||||
|
case NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_two:
|
||||||
|
multiple_ssb_per_ro = true;
|
||||||
|
ssb_rach_ratio = 2;
|
||||||
|
ra->cb_preambles_per_ssb = 4 * (nr_rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.two + 1);
|
||||||
|
break;
|
||||||
|
case NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_four:
|
||||||
|
multiple_ssb_per_ro = true;
|
||||||
|
ssb_rach_ratio = 4;
|
||||||
|
ra->cb_preambles_per_ssb = nr_rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.four;
|
||||||
|
break;
|
||||||
|
case NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_eight:
|
||||||
|
multiple_ssb_per_ro = true;
|
||||||
|
ssb_rach_ratio = 8;
|
||||||
|
ra->cb_preambles_per_ssb = nr_rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.eight;
|
||||||
|
break;
|
||||||
|
case NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_sixteen:
|
||||||
|
multiple_ssb_per_ro = true;
|
||||||
|
ssb_rach_ratio = 16;
|
||||||
|
ra->cb_preambles_per_ssb = nr_rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.sixteen;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
AssertFatal(1 == 0, "Unsupported ssb_perRACH_config %d\n", ssb_perRACH_config);
|
||||||
|
}
|
||||||
|
|
||||||
// Compute the proper Preamble selection params according to the selected SSB and the ssb_perRACH_OccasionAndCB_PreamblesPerSSB configuration
|
if (nr_rach_ConfigCommon->totalNumberOfRA_Preambles)
|
||||||
if ((true == multiple_ssb_per_ro) &&
|
numberOfRA_Preambles = *(nr_rach_ConfigCommon->totalNumberOfRA_Preambles);
|
||||||
(ssb_rach_ratio > 1)) {
|
|
||||||
total_preambles_per_ssb = numberOfRA_Preambles / ssb_rach_ratio;
|
|
||||||
|
|
||||||
ssb_nb_in_ro = prach_pdu->ssb_nb_in_ro;
|
// Compute the proper Preamble selection params according to the selected SSB and the ssb_perRACH_OccasionAndCB_PreamblesPerSSB configuration
|
||||||
ra->starting_preamble_nb = total_preambles_per_ssb * ssb_nb_in_ro;
|
if ((true == multiple_ssb_per_ro) && (ssb_rach_ratio > 1)) {
|
||||||
}
|
total_preambles_per_ssb = numberOfRA_Preambles / ssb_rach_ratio;
|
||||||
else {
|
|
||||||
total_preambles_per_ssb = numberOfRA_Preambles;
|
ssb_nb_in_ro = prach_pdu->ssb_nb_in_ro;
|
||||||
ra->starting_preamble_nb = 0;
|
ra->starting_preamble_nb = total_preambles_per_ssb * ssb_nb_in_ro;
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
LOG_E(MAC, "In %s:%d: missing implementation for 2-step RA...\n", __FUNCTION__, __LINE__);
|
total_preambles_per_ssb = numberOfRA_Preambles;
|
||||||
|
ra->starting_preamble_nb = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This routine implements RA premable configuration according to
|
// This routine implements RA preamble configuration according to
|
||||||
// section 5.1 (Random Access procedure) of 3GPP TS 38.321 version 16.2.1 Release 16
|
// section 5.1 (Random Access procedure) of 3GPP TS 38.321 version 16.2.1 Release 16
|
||||||
void ra_preambles_config(NR_PRACH_RESOURCES_t *prach_resources, NR_UE_MAC_INST_t *mac, int16_t dl_pathloss){
|
void ra_preambles_config(NR_PRACH_RESOURCES_t *prach_resources, NR_UE_MAC_INST_t *mac, int16_t dl_pathloss){
|
||||||
|
|
||||||
@@ -261,23 +248,21 @@ void ra_preambles_config(NR_PRACH_RESOURCES_t *prach_resources, NR_UE_MAC_INST_t
|
|||||||
NR_RACH_ConfigCommon_t *nr_rach_ConfigCommon = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup;
|
NR_RACH_ConfigCommon_t *nr_rach_ConfigCommon = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup;
|
||||||
NR_RACH_ConfigGeneric_t *rach_ConfigGeneric = &nr_rach_ConfigCommon->rach_ConfigGeneric;
|
NR_RACH_ConfigGeneric_t *rach_ConfigGeneric = &nr_rach_ConfigCommon->rach_ConfigGeneric;
|
||||||
|
|
||||||
if (prach_resources->RA_TYPE == RA_4STEP){
|
if (scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->msg3_DeltaPreamble){
|
||||||
|
deltaPreamble_Msg3 = (*scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->msg3_DeltaPreamble) * 2; // dB
|
||||||
|
LOG_D(MAC, "In %s: deltaPreamble_Msg3 set to %ld\n", __FUNCTION__, deltaPreamble_Msg3);
|
||||||
|
}
|
||||||
|
|
||||||
if (scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->msg3_DeltaPreamble){
|
if (!nr_rach_ConfigCommon->groupBconfigured) {
|
||||||
deltaPreamble_Msg3 = (*scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->msg3_DeltaPreamble) * 2; // dB
|
noGroupB = 1;
|
||||||
LOG_D(MAC, "In %s: deltaPreamble_Msg3 set to %ld\n", __FUNCTION__, deltaPreamble_Msg3);
|
LOG_D(MAC, "In %s:%d: preambles group B is not configured...\n", __FUNCTION__, __LINE__);
|
||||||
}
|
} else {
|
||||||
|
// RA preambles group B is configured
|
||||||
if (!nr_rach_ConfigCommon->groupBconfigured) {
|
// - Random Access Preambles group B is configured for 4-step RA type
|
||||||
noGroupB = 1;
|
// - Defining the number of RA preambles in RA Preamble Group A for each SSB
|
||||||
LOG_D(MAC, "In %s:%d: preambles group B is not configured...\n", __FUNCTION__, __LINE__);
|
LOG_D(MAC, "In %s:%d: preambles group B is configured...\n", __FUNCTION__, __LINE__);
|
||||||
} else {
|
sizeOfRA_PreamblesGroupA = nr_rach_ConfigCommon->groupBconfigured->numberOfRA_PreamblesGroupA;
|
||||||
// RA preambles group B is configured
|
switch (nr_rach_ConfigCommon->groupBconfigured->ra_Msg3SizeGroupA){
|
||||||
// - Random Access Preambles group B is configured for 4-step RA type
|
|
||||||
// - Defining the number of RA preambles in RA Preamble Group A for each SSB
|
|
||||||
LOG_D(MAC, "In %s:%d: preambles group B is configured...\n", __FUNCTION__, __LINE__);
|
|
||||||
sizeOfRA_PreamblesGroupA = nr_rach_ConfigCommon->groupBconfigured->numberOfRA_PreamblesGroupA;
|
|
||||||
switch (nr_rach_ConfigCommon->groupBconfigured->ra_Msg3SizeGroupA){
|
|
||||||
/* - Threshold to determine the groups of RA preambles */
|
/* - Threshold to determine the groups of RA preambles */
|
||||||
case 0:
|
case 0:
|
||||||
messageSizeGroupA = 56;
|
messageSizeGroupA = 56;
|
||||||
@@ -343,17 +328,12 @@ void ra_preambles_config(NR_PRACH_RESOURCES_t *prach_resources, NR_UE_MAC_INST_t
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
AssertFatal(1 == 0,"Unknown messagePowerOffsetGroupB %lu\n", nr_rach_ConfigCommon->groupBconfigured->messagePowerOffsetGroupB);
|
AssertFatal(1 == 0,"Unknown messagePowerOffsetGroupB %lu\n", nr_rach_ConfigCommon->groupBconfigured->messagePowerOffsetGroupB);
|
||||||
}
|
|
||||||
|
|
||||||
PLThreshold = prach_resources->RA_PCMAX - rach_ConfigGeneric->preambleReceivedTargetPower - deltaPreamble_Msg3 - messagePowerOffsetGroupB;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// todo:
|
PLThreshold = prach_resources->RA_PCMAX - rach_ConfigGeneric->preambleReceivedTargetPower - deltaPreamble_Msg3 - messagePowerOffsetGroupB;
|
||||||
// - groupB-ConfiguredTwoStepRA
|
|
||||||
// - msgA-DeltaPreamble
|
|
||||||
LOG_E(MAC, "In %s:%d: missing implementation for 2-step RA...\n", __FUNCTION__, __LINE__);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Msg3 has not been transmitted yet */
|
/* Msg3 has not been transmitted yet */
|
||||||
if (ra->first_Msg3) {
|
if (ra->first_Msg3) {
|
||||||
if(ra->ra_PreambleIndex < 0 || ra->ra_PreambleIndex > 63) {
|
if(ra->ra_PreambleIndex < 0 || ra->ra_PreambleIndex > 63) {
|
||||||
|
|||||||
@@ -891,13 +891,12 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
|
|||||||
|
|
||||||
uint16_t TBS_bytes = ulcfg_pdu->pusch_config_pdu.pusch_data.tb_size;
|
uint16_t TBS_bytes = ulcfg_pdu->pusch_config_pdu.pusch_data.tb_size;
|
||||||
|
|
||||||
if (ra->ra_state == WAIT_RAR){
|
if (ra->ra_state == WAIT_RAR && !ra->cfra){
|
||||||
memcpy(ulsch_input_buffer, mac->ulsch_pdu.payload, TBS_bytes);
|
memcpy(ulsch_input_buffer, mac->ulsch_pdu.payload, TBS_bytes);
|
||||||
LOG_D(NR_MAC,"[RAPROC] Msg3 to be transmitted:\n");
|
LOG_D(NR_MAC,"[RAPROC] Msg3 to be transmitted:\n");
|
||||||
for (int k = 0; k < TBS_bytes; k++) {
|
for (int k = 0; k < TBS_bytes; k++) {
|
||||||
LOG_D(NR_MAC,"(%i): 0x%x\n",k,mac->ulsch_pdu.payload[k]);
|
LOG_D(NR_MAC,"(%i): 0x%x\n",k,mac->ulsch_pdu.payload[k]);
|
||||||
}
|
}
|
||||||
LOG_I(NR_MAC,"[RAPROC] RA-Msg3 transmitted\n");
|
|
||||||
} else {
|
} else {
|
||||||
if (IS_SOFTMODEM_NOS1 && (mac->UL_ndi[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id] != ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator)){
|
if (IS_SOFTMODEM_NOS1 && (mac->UL_ndi[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id] != ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator)){
|
||||||
// Getting IP traffic to be transmitted
|
// Getting IP traffic to be transmitted
|
||||||
@@ -947,6 +946,7 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
|
|||||||
tx_req.tx_request_body[0].pdu = ulsch_input_buffer;
|
tx_req.tx_request_body[0].pdu = ulsch_input_buffer;
|
||||||
|
|
||||||
if (ra->ra_state != RA_SUCCEEDED && !ra->cfra){
|
if (ra->ra_state != RA_SUCCEEDED && !ra->cfra){
|
||||||
|
LOG_I(NR_MAC,"[RAPROC] RA-Msg3 transmitted\n");
|
||||||
nr_Msg3_transmitted(ul_info->module_id, ul_info->cc_id, ul_info->frame_tx, ul_info->gNB_index);
|
nr_Msg3_transmitted(ul_info->module_id, ul_info->cc_id, ul_info->frame_tx, ul_info->gNB_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1033,7 +1033,9 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
|
|||||||
nr_get_Msg3alloc(module_idP, CC_id, scc, ubwp, slotP, frameP, ra);
|
nr_get_Msg3alloc(module_idP, CC_id, scc, ubwp, slotP, frameP, ra);
|
||||||
nr_add_msg3(module_idP, CC_id, frameP, slotP, ra, (uint8_t *) &tx_req->TLVs[0].value.direct[0]);
|
nr_add_msg3(module_idP, CC_id, frameP, slotP, ra, (uint8_t *) &tx_req->TLVs[0].value.direct[0]);
|
||||||
|
|
||||||
LOG_I(MAC, "Frame %d, Subframe %d: Setting RA-Msg3 reception for Frame %d Subframe %d\n", frameP, slotP, ra->Msg3_frame, ra->Msg3_slot);
|
if(ra->cfra) {
|
||||||
|
LOG_I(MAC, "Frame %d, Subframe %d: Setting RA-Msg3 reception for Frame %d Subframe %d\n", frameP, slotP, ra->Msg3_frame, ra->Msg3_slot);
|
||||||
|
}
|
||||||
|
|
||||||
T(T_GNB_MAC_DL_RAR_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(ra->RA_rnti), T_INT(frameP),
|
T(T_GNB_MAC_DL_RAR_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(ra->RA_rnti), T_INT(frameP),
|
||||||
T_INT(slotP), T_INT(0), T_BUFFER(&tx_req->TLVs[0].value.direct[0], tx_req->TLVs[0].length));
|
T_INT(slotP), T_INT(0), T_BUFFER(&tx_req->TLVs[0].value.direct[0], tx_req->TLVs[0].length));
|
||||||
@@ -1364,7 +1366,7 @@ void nr_check_Msg4_Ack(module_id_t module_id, int CC_id, frame_t frame, sub_fram
|
|||||||
nr_clear_ra_proc(module_id, CC_id, frame, ra);
|
nr_clear_ra_proc(module_id, CC_id, frame, ra);
|
||||||
free(ra->preambles.preamble_list);
|
free(ra->preambles.preamble_list);
|
||||||
UE_info->active[UE_id] = true;
|
UE_info->active[UE_id] = true;
|
||||||
LOG_I(NR_MAC, "(ue %i, rnti 0x%04x) Received Ack of RA-Msg4. RA procedure succeeded!\n", UE_id, ra->rnti);
|
LOG_I(NR_MAC, "(ue %i, rnti 0x%04x) Received Ack of RA-Msg4. CBRA procedure succeeded!\n", UE_id, ra->rnti);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -513,26 +513,37 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
|
|||||||
UE_id,
|
UE_id,
|
||||||
ra->rnti);
|
ra->rnti);
|
||||||
|
|
||||||
LOG_I(NR_MAC,"[RAPROC] RA-Msg3 received\n");
|
if(ra->cfra) {
|
||||||
LOG_D(NR_MAC,"[RAPROC] Received Msg3:\n");
|
|
||||||
for (int k = 0; k < sdu_lenP; k++) {
|
LOG_I(NR_MAC, "(ue %i, rnti 0x%04x) CFRA procedure succeeded!\n", UE_id, ra->rnti);
|
||||||
LOG_D(NR_MAC,"(%i): 0x%x\n",k,sduP[k]);
|
nr_clear_ra_proc(gnb_mod_idP, CC_idP, frameP, ra);
|
||||||
|
free(ra->preambles.preamble_list);
|
||||||
|
UE_info->active[UE_id] = true;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
LOG_I(NR_MAC,"[RAPROC] RA-Msg3 received\n");
|
||||||
|
LOG_I(NR_MAC,"[RAPROC] Received Msg3:\n");
|
||||||
|
for (int k = 0; k < sdu_lenP; k++) {
|
||||||
|
LOG_I(NR_MAC,"(%i): 0x%x\n",k,sduP[k]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// UE Contention Resolution Identity
|
||||||
|
// Store the first 48 bits belonging to the uplink CCCH SDU within Msg3 to fill in Msg4
|
||||||
|
// First byte corresponds to R/LCID MAC sub-header
|
||||||
|
memcpy(ra->cont_res_id, &sduP[1], sizeof(uint8_t) * 6);
|
||||||
|
|
||||||
|
// re-initialize ta update variables afrer RA procedure completion
|
||||||
|
UE_info->UE_sched_ctrl[UE_id].ta_frame = frameP;
|
||||||
|
|
||||||
|
nr_process_mac_pdu(gnb_mod_idP, current_rnti, CC_idP, frameP, sduP, sdu_lenP);
|
||||||
|
|
||||||
|
ra->state = Msg4;
|
||||||
|
ra->Msg4_frame = ( frameP +2 ) % 1024;
|
||||||
|
ra->Msg4_slot = 1;
|
||||||
|
LOG_I(MAC, "Scheduling RA-Msg4 for TC-RNTI %04x (state %d, frame %d, slot %d)\n", ra->rnti, ra->state, ra->Msg4_frame, ra->Msg4_slot);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// UE Contention Resolution Identity
|
|
||||||
// Store the first 48 bits belonging to the uplink CCCH SDU within Msg3 to fill in Msg4
|
|
||||||
// First byte corresponds to R/LCID MAC sub-header
|
|
||||||
memcpy(ra->cont_res_id, &sduP[1], sizeof(uint8_t) * 6);
|
|
||||||
|
|
||||||
// re-initialize ta update variables afrer RA procedure completion
|
|
||||||
UE_info->UE_sched_ctrl[UE_id].ta_frame = frameP;
|
|
||||||
|
|
||||||
nr_process_mac_pdu(gnb_mod_idP, current_rnti, CC_idP, frameP, sduP, sdu_lenP);
|
|
||||||
|
|
||||||
ra->state = Msg4;
|
|
||||||
ra->Msg4_frame = ( frameP +2 ) % 1024;
|
|
||||||
ra->Msg4_slot = 1;
|
|
||||||
LOG_I(MAC, "Scheduling RA-Msg4 for TC-RNTI %04x (state %d, frame %d, slot %d)\n", ra->rnti, ra->state, ra->Msg4_frame, ra->Msg4_slot);
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -228,58 +228,58 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
|
|||||||
secondaryCellGroup->spCellConfig->reconfigurationWithSync->ext1 = NULL;
|
secondaryCellGroup->spCellConfig->reconfigurationWithSync->ext1 = NULL;
|
||||||
|
|
||||||
// For 2-step contention-free random access procedure
|
// For 2-step contention-free random access procedure
|
||||||
#if 0
|
if(get_softmodem_params()->sa == 0) {
|
||||||
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated = calloc(1,sizeof(struct NR_ReconfigurationWithSync__rach_ConfigDedicated));
|
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated = calloc(1,sizeof(struct NR_ReconfigurationWithSync__rach_ConfigDedicated));
|
||||||
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->present= NR_ReconfigurationWithSync__rach_ConfigDedicated_PR_uplink;
|
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->present= NR_ReconfigurationWithSync__rach_ConfigDedicated_PR_uplink;
|
||||||
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink= calloc(1,sizeof(struct NR_RACH_ConfigDedicated));
|
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink= calloc(1,sizeof(struct NR_RACH_ConfigDedicated));
|
||||||
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra= calloc(1,sizeof(struct NR_CFRA));
|
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra= calloc(1,sizeof(struct NR_CFRA));
|
||||||
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->ra_Prioritization= NULL;
|
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->ra_Prioritization= NULL;
|
||||||
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->occasions= calloc(1,sizeof(struct NR_CFRA__occasions));
|
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->occasions= calloc(1,sizeof(struct NR_CFRA__occasions));
|
||||||
memcpy(&secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->occasions->rach_ConfigGeneric,
|
memcpy(&secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->occasions->rach_ConfigGeneric,
|
||||||
&servingcellconfigcommon->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric, sizeof(NR_RACH_ConfigGeneric_t));
|
&servingcellconfigcommon->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric, sizeof(NR_RACH_ConfigGeneric_t));
|
||||||
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->occasions->ssb_perRACH_Occasion= calloc(1,sizeof(long));
|
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->occasions->ssb_perRACH_Occasion= calloc(1,sizeof(long));
|
||||||
*secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->occasions->ssb_perRACH_Occasion = NR_CFRA__occasions__ssb_perRACH_Occasion_one;
|
*secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->occasions->ssb_perRACH_Occasion = NR_CFRA__occasions__ssb_perRACH_Occasion_one;
|
||||||
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.present = NR_CFRA__resources_PR_ssb;
|
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.present = NR_CFRA__resources_PR_ssb;
|
||||||
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb = calloc(1,sizeof(struct NR_CFRA__resources__ssb));
|
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb = calloc(1,sizeof(struct NR_CFRA__resources__ssb));
|
||||||
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb->ra_ssb_OccasionMaskIndex = 0;
|
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb->ra_ssb_OccasionMaskIndex = 0;
|
||||||
|
|
||||||
struct NR_CFRA_SSB_Resource *ssbElem[8];
|
struct NR_CFRA_SSB_Resource *ssbElem[8];
|
||||||
|
|
||||||
ssbElem[0] = calloc(1,sizeof(struct NR_CFRA_SSB_Resource));
|
ssbElem[0] = calloc(1,sizeof(struct NR_CFRA_SSB_Resource));
|
||||||
ssbElem[0]->ssb = 0;
|
ssbElem[0]->ssb = 0;
|
||||||
ssbElem[0]->ra_PreambleIndex = 63;
|
ssbElem[0]->ra_PreambleIndex = 63;
|
||||||
ASN_SEQUENCE_ADD(&secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb->ssb_ResourceList.list,ssbElem[0]);
|
ASN_SEQUENCE_ADD(&secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb->ssb_ResourceList.list,ssbElem[0]);
|
||||||
ssbElem[1] = calloc(1,sizeof(struct NR_CFRA_SSB_Resource));
|
ssbElem[1] = calloc(1,sizeof(struct NR_CFRA_SSB_Resource));
|
||||||
ssbElem[1]->ssb = 1;
|
ssbElem[1]->ssb = 1;
|
||||||
ssbElem[1]->ra_PreambleIndex = 62;
|
ssbElem[1]->ra_PreambleIndex = 62;
|
||||||
ASN_SEQUENCE_ADD(&secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb->ssb_ResourceList.list,ssbElem[1]);
|
ASN_SEQUENCE_ADD(&secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb->ssb_ResourceList.list,ssbElem[1]);
|
||||||
ssbElem[2] = calloc(1,sizeof(struct NR_CFRA_SSB_Resource));
|
ssbElem[2] = calloc(1,sizeof(struct NR_CFRA_SSB_Resource));
|
||||||
ssbElem[2]->ssb = 2;
|
ssbElem[2]->ssb = 2;
|
||||||
ssbElem[2]->ra_PreambleIndex = 63;
|
ssbElem[2]->ra_PreambleIndex = 63;
|
||||||
ASN_SEQUENCE_ADD(&secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb->ssb_ResourceList.list,ssbElem[2]);
|
ASN_SEQUENCE_ADD(&secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb->ssb_ResourceList.list,ssbElem[2]);
|
||||||
ssbElem[3] = calloc(1,sizeof(struct NR_CFRA_SSB_Resource));
|
ssbElem[3] = calloc(1,sizeof(struct NR_CFRA_SSB_Resource));
|
||||||
ssbElem[3]->ssb = 3;
|
ssbElem[3]->ssb = 3;
|
||||||
ssbElem[3]->ra_PreambleIndex = 63;
|
ssbElem[3]->ra_PreambleIndex = 63;
|
||||||
ASN_SEQUENCE_ADD(&secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb->ssb_ResourceList.list,ssbElem[3]);
|
ASN_SEQUENCE_ADD(&secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb->ssb_ResourceList.list,ssbElem[3]);
|
||||||
ssbElem[4] = calloc(1,sizeof(struct NR_CFRA_SSB_Resource));
|
ssbElem[4] = calloc(1,sizeof(struct NR_CFRA_SSB_Resource));
|
||||||
ssbElem[4]->ssb = 4;
|
ssbElem[4]->ssb = 4;
|
||||||
ssbElem[4]->ra_PreambleIndex = 63;
|
ssbElem[4]->ra_PreambleIndex = 63;
|
||||||
ASN_SEQUENCE_ADD(&secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb->ssb_ResourceList.list,ssbElem[4]);
|
ASN_SEQUENCE_ADD(&secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb->ssb_ResourceList.list,ssbElem[4]);
|
||||||
ssbElem[5] = calloc(1,sizeof(struct NR_CFRA_SSB_Resource));
|
ssbElem[5] = calloc(1,sizeof(struct NR_CFRA_SSB_Resource));
|
||||||
ssbElem[5]->ssb = 5;
|
ssbElem[5]->ssb = 5;
|
||||||
ssbElem[5]->ra_PreambleIndex = 63;
|
ssbElem[5]->ra_PreambleIndex = 63;
|
||||||
ASN_SEQUENCE_ADD(&secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb->ssb_ResourceList.list,ssbElem[5]);
|
ASN_SEQUENCE_ADD(&secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb->ssb_ResourceList.list,ssbElem[5]);
|
||||||
ssbElem[6] = calloc(1,sizeof(struct NR_CFRA_SSB_Resource));
|
ssbElem[6] = calloc(1,sizeof(struct NR_CFRA_SSB_Resource));
|
||||||
ssbElem[6]->ssb = 6;
|
ssbElem[6]->ssb = 6;
|
||||||
ssbElem[6]->ra_PreambleIndex = 63;
|
ssbElem[6]->ra_PreambleIndex = 63;
|
||||||
ASN_SEQUENCE_ADD(&secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb->ssb_ResourceList.list,ssbElem[6]);
|
ASN_SEQUENCE_ADD(&secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb->ssb_ResourceList.list,ssbElem[6]);
|
||||||
ssbElem[7] = calloc(1,sizeof(struct NR_CFRA_SSB_Resource));
|
ssbElem[7] = calloc(1,sizeof(struct NR_CFRA_SSB_Resource));
|
||||||
ssbElem[7]->ssb = 7;
|
ssbElem[7]->ssb = 7;
|
||||||
ssbElem[7]->ra_PreambleIndex = 63;
|
ssbElem[7]->ra_PreambleIndex = 63;
|
||||||
ASN_SEQUENCE_ADD(&secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb->ssb_ResourceList.list,ssbElem[7]);
|
ASN_SEQUENCE_ADD(&secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb->ssb_ResourceList.list,ssbElem[7]);
|
||||||
|
|
||||||
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->ext1 = NULL;
|
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->ext1 = NULL;
|
||||||
#endif
|
}
|
||||||
|
|
||||||
secondaryCellGroup->spCellConfig->rlf_TimersAndConstants = calloc(1,sizeof(*secondaryCellGroup->spCellConfig->rlf_TimersAndConstants));
|
secondaryCellGroup->spCellConfig->rlf_TimersAndConstants = calloc(1,sizeof(*secondaryCellGroup->spCellConfig->rlf_TimersAndConstants));
|
||||||
secondaryCellGroup->spCellConfig->rlf_TimersAndConstants->present = NR_SetupRelease_RLF_TimersAndConstants_PR_setup;
|
secondaryCellGroup->spCellConfig->rlf_TimersAndConstants->present = NR_SetupRelease_RLF_TimersAndConstants_PR_setup;
|
||||||
|
|||||||
Reference in New Issue
Block a user