This commit breaks in RACH procedure
However, we are not properly calling the nr_ue_get_rach() function. The RA is being properly initialized. In the nr_ue_get_rach() the pRACH is not scheduled. Tried to add in the scheduling of this, but it crashes here. The other changes include revering the nr_ue_get_rach() changes from previous commit. Also, changed a few log levels and reverted a previous change in the NR UE RRC layer that was incorrect.
This commit is contained in:
+6
-7
@@ -147,7 +147,10 @@ void init_nrUE_standalone_thread(int ue_idx)
|
|||||||
|
|
||||||
static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
|
static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
|
||||||
{
|
{
|
||||||
sem_t sfn_slot_semaphore;
|
NR_PRACH_RESOURCES_t prach_resources;
|
||||||
|
memset(&prach_resources, 0, sizeof(prach_resources));
|
||||||
|
fapi_nr_ul_config_prach_pdu prach_pdu;
|
||||||
|
memset(&prach_pdu, 0, sizeof(prach_pdu));
|
||||||
int last_sfn_slot = -1;
|
int last_sfn_slot = -1;
|
||||||
while (!oai_exit)
|
while (!oai_exit)
|
||||||
{
|
{
|
||||||
@@ -160,7 +163,7 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
|
|||||||
int sfn_slot = current_sfn_slot;
|
int sfn_slot = current_sfn_slot;
|
||||||
if (sfn_slot == last_sfn_slot)
|
if (sfn_slot == last_sfn_slot)
|
||||||
{
|
{
|
||||||
LOG_W(NR_MAC, "repeated sfn_sf = %d.%d\n",
|
LOG_D(NR_MAC, "repeated sfn_sf = %d.%d\n",
|
||||||
sfn_slot >> 6, sfn_slot & 0x3F);
|
sfn_slot >> 6, sfn_slot & 0x3F);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -168,15 +171,11 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
|
|||||||
|
|
||||||
frame_t frame_tx = NFAPI_SFNSLOT2SFN(sfn_slot);
|
frame_t frame_tx = NFAPI_SFNSLOT2SFN(sfn_slot);
|
||||||
int nr_slot_tx = NFAPI_SFNSLOT2SLOT(sfn_slot);
|
int nr_slot_tx = NFAPI_SFNSLOT2SLOT(sfn_slot);
|
||||||
NR_PRACH_RESOURCES_t *prach_resources = NULL;
|
|
||||||
fapi_nr_ul_config_prach_pdu *prach_pdu = NULL;
|
|
||||||
module_id_t mod_id = 0;
|
module_id_t mod_id = 0;
|
||||||
int CC_id = 0;
|
int CC_id = 0;
|
||||||
uint8_t gNB_id = 0;
|
uint8_t gNB_id = 0;
|
||||||
|
|
||||||
LOG_I(NR_PHY, "Melissa In %s:[%d.%d] getting PRACH resources\n", __FUNCTION__, frame_tx, nr_slot_tx);
|
uint8_t nr_prach = nr_ue_get_rach(&prach_resources, &prach_pdu, mod_id, CC_id, frame_tx, gNB_id, nr_slot_tx);
|
||||||
uint8_t nr_prach = nr_ue_get_rach(prach_resources, prach_pdu, mod_id, CC_id, frame_tx, gNB_id, nr_slot_tx);
|
|
||||||
LOG_I(NR_PHY, "In %s: [UE %d] This is nr_prach: %d\n", __FUNCTION__, mod_id, nr_prach);
|
|
||||||
|
|
||||||
if (nr_prach == 1)
|
if (nr_prach == 1)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -500,32 +500,15 @@ uint8_t nr_ue_get_rach(NR_PRACH_RESOURCES_t *prach_resources,
|
|||||||
int nr_slot_tx){
|
int nr_slot_tx){
|
||||||
|
|
||||||
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
|
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
|
||||||
NR_CellGroupConfig_t *secondaryCellGroup = calloc(1, sizeof(*secondaryCellGroup));
|
RA_config_t *ra = &mac->ra;
|
||||||
//NR_ServingCellConfigCommon_t *scc = calloc(1, sizeof(*scc));
|
uint8_t mac_sdus[MAX_NR_ULSCH_PAYLOAD_BYTES];
|
||||||
|
uint8_t lcid = UL_SCH_LCID_CCCH_MSG3, *payload;
|
||||||
prepare_scc(mac->scc);
|
uint16_t size_sdu = 0;
|
||||||
|
unsigned short post_padding;
|
||||||
uint64_t ssb_bitmap;
|
NR_ServingCellConfigCommon_t *scc = mac->scc;
|
||||||
fill_scc(mac->scc, &ssb_bitmap, 106, 106, 1, 1);
|
if (scc == NULL) {
|
||||||
|
|
||||||
fix_scc(mac->scc, ssb_bitmap);
|
|
||||||
|
|
||||||
fill_default_secondaryCellGroup(mac->scc, secondaryCellGroup, 0, 1, 1, 0);
|
|
||||||
|
|
||||||
if (mac == NULL){
|
|
||||||
LOG_I(MAC, "Melissa mac is null\n");
|
|
||||||
}
|
|
||||||
if (&mac->ra == NULL){
|
|
||||||
LOG_I(MAC, "Melissa mac->ra is null\n");
|
|
||||||
}
|
|
||||||
if (mac->scc == NULL){
|
|
||||||
LOG_I(MAC, "Melissa scc is null\n");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_I(MAC, "Melissa got here %s: %d\n", __FUNCTION__, __LINE__);
|
|
||||||
RA_config_t *ra = &mac->ra;
|
|
||||||
NR_ServingCellConfigCommon_t *scc = mac->scc;
|
|
||||||
AssertFatal(scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup != NULL, "In %s: FATAL! nr_rach_ConfigCommon is NULL...\n", __FUNCTION__);
|
AssertFatal(scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup != NULL, "In %s: FATAL! nr_rach_ConfigCommon is NULL...\n", __FUNCTION__);
|
||||||
NR_RACH_ConfigCommon_t *setup = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup;
|
NR_RACH_ConfigCommon_t *setup = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup;
|
||||||
AssertFatal(&setup->rach_ConfigGeneric != NULL, "In %s: FATAL! rach_ConfigGeneric is NULL...\n", __FUNCTION__);
|
AssertFatal(&setup->rach_ConfigGeneric != NULL, "In %s: FATAL! rach_ConfigGeneric is NULL...\n", __FUNCTION__);
|
||||||
@@ -534,13 +517,8 @@ uint8_t nr_ue_get_rach(NR_PRACH_RESOURCES_t *prach_resources,
|
|||||||
|
|
||||||
uint8_t sdu_lcids[NB_RB_MAX] = {0};
|
uint8_t sdu_lcids[NB_RB_MAX] = {0};
|
||||||
uint16_t sdu_lengths[NB_RB_MAX] = {0};
|
uint16_t sdu_lengths[NB_RB_MAX] = {0};
|
||||||
|
int TBS_bytes = 848, header_length_total=0, num_sdus, offset, mac_ce_len;
|
||||||
|
|
||||||
int mac_ce_len = 0;
|
|
||||||
unsigned short post_padding = 1;
|
|
||||||
int header_length_total = 0;
|
|
||||||
uint16_t size_sdu = 0;
|
|
||||||
int TBS_bytes = 848;
|
|
||||||
uint8_t mac_sdus[MAX_NR_ULSCH_PAYLOAD_BYTES];
|
|
||||||
// Delay init RA procedure to allow the convergence of the IIR filter on PRACH noise measurements at gNB side
|
// Delay init RA procedure to allow the convergence of the IIR filter on PRACH noise measurements at gNB side
|
||||||
if (!prach_resources->init_msg1) {
|
if (!prach_resources->init_msg1) {
|
||||||
if (((MAX_FRAME_NUMBER + frame - prach_resources->sync_frame) % MAX_FRAME_NUMBER) > 150){
|
if (((MAX_FRAME_NUMBER + frame - prach_resources->sync_frame) % MAX_FRAME_NUMBER) > 150){
|
||||||
@@ -555,25 +533,45 @@ uint8_t nr_ue_get_rach(NR_PRACH_RESOURCES_t *prach_resources,
|
|||||||
if (ra->RA_active == 0) {
|
if (ra->RA_active == 0) {
|
||||||
/* RA not active - checking if RRC is ready to initiate the RA procedure */
|
/* RA not active - checking if RRC is ready to initiate the RA procedure */
|
||||||
|
|
||||||
LOG_I(MAC, "RA not active. Checking for data to transmit from upper layers...\n");
|
LOG_D(MAC, "RA not active. Checking for data to transmit from upper layers...\n");
|
||||||
|
|
||||||
for (int i = 0; i < TBS_bytes; i++){
|
payload = (uint8_t*) &mac->CCCH_pdu.payload;
|
||||||
mac_sdus[i] = (unsigned char) (lrand48()&0xff);
|
mac_ce_len = 0;
|
||||||
|
num_sdus = 1;
|
||||||
|
post_padding = 1;
|
||||||
|
|
||||||
|
if (0){
|
||||||
|
// initialisation by RRC
|
||||||
|
// CCCH PDU
|
||||||
|
// size_sdu = (uint16_t) mac_rrc_data_req_ue(mod_id,
|
||||||
|
// CC_id,
|
||||||
|
// frame,
|
||||||
|
// CCCH,
|
||||||
|
// 1,
|
||||||
|
// mac_sdus,
|
||||||
|
// gNB_id,
|
||||||
|
// 0);
|
||||||
|
LOG_D(MAC,"[UE %d] Frame %d: Requested RRCConnectionRequest, got %d bytes\n", mod_id, frame, size_sdu);
|
||||||
|
} else {
|
||||||
|
// fill ulsch_buffer with random data
|
||||||
|
for (int i = 0; i < TBS_bytes; i++){
|
||||||
|
mac_sdus[i] = (unsigned char) (lrand48()&0xff);
|
||||||
|
}
|
||||||
|
//Sending SDUs with size 1
|
||||||
|
//Initialize elements of sdu_lcids and sdu_lengths
|
||||||
|
sdu_lcids[0] = lcid;
|
||||||
|
sdu_lengths[0] = TBS_bytes - 3 - post_padding - mac_ce_len;
|
||||||
|
header_length_total += 2 + (sdu_lengths[0] >= 128);
|
||||||
|
size_sdu += sdu_lengths[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
sdu_lcids[0] = UL_SCH_LCID_CCCH_MSG3;
|
|
||||||
sdu_lengths[0] = TBS_bytes - 3 - post_padding - mac_ce_len;
|
|
||||||
header_length_total += 2 + (sdu_lengths[0] >= 128);
|
|
||||||
size_sdu += sdu_lengths[0];
|
|
||||||
|
|
||||||
if (size_sdu > 0) {
|
if (size_sdu > 0) {
|
||||||
|
|
||||||
LOG_I(MAC, "[UE %d][%d.%d]: starting initialisation Random Access Procedure...\n", mod_id, frame, nr_slot_tx);
|
LOG_D(MAC, "[UE %d][%d.%d]: starting initialisation Random Access Procedure...\n", mod_id, frame, nr_slot_tx);
|
||||||
|
|
||||||
ra->Msg3_size = size_sdu + sizeof(NR_MAC_SUBHEADER_SHORT) + sizeof(NR_MAC_SUBHEADER_SHORT);
|
ra->Msg3_size = size_sdu + sizeof(NR_MAC_SUBHEADER_SHORT) + sizeof(NR_MAC_SUBHEADER_SHORT);
|
||||||
|
|
||||||
init_RA(mod_id, prach_resources, setup, rach_ConfigGeneric, rach_ConfigDedicated);
|
init_RA(mod_id, prach_resources, setup, rach_ConfigGeneric, rach_ConfigDedicated);
|
||||||
uint8_t *payload = (uint8_t*) &mac->CCCH_pdu.payload;
|
|
||||||
prach_resources->Msg3 = payload;
|
prach_resources->Msg3 = payload;
|
||||||
nr_get_RA_window(mac);
|
nr_get_RA_window(mac);
|
||||||
|
|
||||||
@@ -581,9 +579,9 @@ uint8_t nr_ue_get_rach(NR_PRACH_RESOURCES_t *prach_resources,
|
|||||||
if (ra->generate_nr_prach == 1)
|
if (ra->generate_nr_prach == 1)
|
||||||
nr_get_prach_resources(mod_id, CC_id, gNB_id, prach_resources, prach_pdu, rach_ConfigDedicated);
|
nr_get_prach_resources(mod_id, CC_id, gNB_id, prach_resources, prach_pdu, rach_ConfigDedicated);
|
||||||
|
|
||||||
int offset = nr_generate_ulsch_pdu((uint8_t *) mac_sdus, // sdus buffer
|
offset = nr_generate_ulsch_pdu((uint8_t *) mac_sdus, // sdus buffer
|
||||||
(uint8_t *) payload, // UL MAC pdu pointer
|
(uint8_t *) payload, // UL MAC pdu pointer
|
||||||
1, // num sdus
|
num_sdus, // num sdus
|
||||||
sdu_lengths, // sdu length
|
sdu_lengths, // sdu length
|
||||||
sdu_lcids, // sdu lcid
|
sdu_lcids, // sdu lcid
|
||||||
0, // power headroom
|
0, // power headroom
|
||||||
@@ -602,7 +600,7 @@ uint8_t nr_ue_get_rach(NR_PRACH_RESOURCES_t *prach_resources,
|
|||||||
}
|
}
|
||||||
} else if (ra->RA_window_cnt != -1) { // RACH is active
|
} else if (ra->RA_window_cnt != -1) { // RACH is active
|
||||||
|
|
||||||
LOG_I(MAC, "In %s [%d.%d] RA is active: RA window count %d, RA backoff count %d\n", __FUNCTION__, frame, nr_slot_tx, ra->RA_window_cnt, ra->RA_backoff_cnt);
|
LOG_D(MAC, "In %s [%d.%d] RA is active: RA window count %d, RA backoff count %d\n", __FUNCTION__, frame, nr_slot_tx, ra->RA_window_cnt, ra->RA_backoff_cnt);
|
||||||
|
|
||||||
if (ra->RA_BI_found){
|
if (ra->RA_BI_found){
|
||||||
prach_resources->RA_PREAMBLE_BACKOFF = prach_resources->RA_SCALING_FACTOR_BI * ra->RA_backoff_indicator;
|
prach_resources->RA_PREAMBLE_BACKOFF = prach_resources->RA_SCALING_FACTOR_BI * ra->RA_backoff_indicator;
|
||||||
@@ -628,16 +626,21 @@ uint8_t nr_ue_get_rach(NR_PRACH_RESOURCES_t *prach_resources,
|
|||||||
// Fill in preamble and PRACH resources
|
// Fill in preamble and PRACH resources
|
||||||
ra->RA_window_cnt--;
|
ra->RA_window_cnt--;
|
||||||
nr_get_prach_resources(mod_id, CC_id, gNB_id, prach_resources, prach_pdu, rach_ConfigDedicated);
|
nr_get_prach_resources(mod_id, CC_id, gNB_id, prach_resources, prach_pdu, rach_ConfigDedicated);
|
||||||
|
if (is_nr_UL_slot(mac->scc, nr_slot_tx)) {
|
||||||
|
nr_ue_scheduler(NULL, mac->ul_config_request);
|
||||||
|
nr_ue_prach_scheduler(mod_id, frame, nr_slot_tx, 0);
|
||||||
|
}
|
||||||
|
|
||||||
} else if (ra->RA_backoff_cnt > 0) {
|
} else if (ra->RA_backoff_cnt > 0) {
|
||||||
|
|
||||||
LOG_I(MAC, "[UE %d][%d.%d]: RAR not received yet (RA backoff count %d) \n", mod_id, frame, nr_slot_tx, ra->RA_backoff_cnt);
|
LOG_D(MAC, "[UE %d][%d.%d]: RAR not received yet (RA backoff count %d) \n", mod_id, frame, nr_slot_tx, ra->RA_backoff_cnt);
|
||||||
|
|
||||||
ra->RA_backoff_cnt--;
|
ra->RA_backoff_cnt--;
|
||||||
|
|
||||||
if ((ra->RA_backoff_cnt > 0 && ra->generate_nr_prach == 1) || ra->RA_backoff_cnt == 0){
|
if ((ra->RA_backoff_cnt > 0 && ra->generate_nr_prach == 1) || ra->RA_backoff_cnt == 0){
|
||||||
nr_get_prach_resources(mod_id, CC_id, gNB_id, prach_resources, prach_pdu, rach_ConfigDedicated);
|
nr_get_prach_resources(mod_id, CC_id, gNB_id, prach_resources, prach_pdu, rach_ConfigDedicated);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -647,6 +650,7 @@ uint8_t nr_ue_get_rach(NR_PRACH_RESOURCES_t *prach_resources,
|
|||||||
}
|
}
|
||||||
|
|
||||||
return ra->generate_nr_prach;
|
return ra->generate_nr_prach;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void nr_get_RA_window(NR_UE_MAC_INST_t *mac){
|
void nr_get_RA_window(NR_UE_MAC_INST_t *mac){
|
||||||
|
|||||||
@@ -1650,6 +1650,17 @@ void nr_ue_prach_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t s
|
|||||||
|
|
||||||
//fapi_nr_ul_config_request_t *ul_config = get_ul_config_request(mac, slotP);
|
//fapi_nr_ul_config_request_t *ul_config = get_ul_config_request(mac, slotP);
|
||||||
fapi_nr_ul_config_request_t *ul_config = &mac->ul_config_request[0];
|
fapi_nr_ul_config_request_t *ul_config = &mac->ul_config_request[0];
|
||||||
|
#if 0 //Melissa
|
||||||
|
fapi_nr_ul_config_request_t *ul_config = get_ul_config_request(mac, slotP);
|
||||||
|
fill_ul_config(ul_config, frameP, slotP, FAPI_NR_UL_CONFIG_TYPE_PRACH);
|
||||||
|
if (!ul_config) {
|
||||||
|
LOG_W(MAC, "In %s: ul_config request is NULL. "
|
||||||
|
"Probably due to unexpected UL DCI in frame.slot %d.%d. Ignoring DCI!\n",
|
||||||
|
__FUNCTION__, frameP, slotP);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
fapi_nr_ul_config_prach_pdu *prach_config_pdu;
|
fapi_nr_ul_config_prach_pdu *prach_config_pdu;
|
||||||
fapi_nr_config_request_t *cfg = &mac->phy_config.config_req;
|
fapi_nr_config_request_t *cfg = &mac->phy_config.config_req;
|
||||||
fapi_nr_prach_config_t *prach_config = &cfg->prach_config;
|
fapi_nr_prach_config_t *prach_config = &cfg->prach_config;
|
||||||
@@ -1682,11 +1693,12 @@ void nr_ue_prach_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t s
|
|||||||
format = prach_occasion_info_p->format;
|
format = prach_occasion_info_p->format;
|
||||||
format0 = format & 0xff; // single PRACH format
|
format0 = format & 0xff; // single PRACH format
|
||||||
format1 = (format >> 8) & 0xff; // dual PRACH format
|
format1 = (format >> 8) & 0xff; // dual PRACH format
|
||||||
|
#if 1 //Melissa
|
||||||
ul_config->sfn = frameP;
|
ul_config->sfn = frameP;
|
||||||
ul_config->slot = slotP;
|
ul_config->slot = slotP;
|
||||||
|
|
||||||
ul_config->ul_config_list[ul_config->number_pdus].pdu_type = FAPI_NR_UL_CONFIG_TYPE_PRACH;
|
ul_config->ul_config_list[ul_config->number_pdus].pdu_type = FAPI_NR_UL_CONFIG_TYPE_PRACH;
|
||||||
|
#endif
|
||||||
prach_config_pdu = &ul_config->ul_config_list[ul_config->number_pdus].prach_config_pdu;
|
prach_config_pdu = &ul_config->ul_config_list[ul_config->number_pdus].prach_config_pdu;
|
||||||
memset(prach_config_pdu, 0, sizeof(fapi_nr_ul_config_prach_pdu));
|
memset(prach_config_pdu, 0, sizeof(fapi_nr_ul_config_prach_pdu));
|
||||||
ul_config->number_pdus += 1;
|
ul_config->number_pdus += 1;
|
||||||
|
|||||||
@@ -226,13 +226,13 @@ void *nrue_standalone_pnf_task(void *context)
|
|||||||
save_nr_measurement_info(&dl_tti_request);
|
save_nr_measurement_info(&dl_tti_request);
|
||||||
break;
|
break;
|
||||||
case NFAPI_NR_PHY_MSG_TYPE_TX_DATA_REQUEST:
|
case NFAPI_NR_PHY_MSG_TYPE_TX_DATA_REQUEST:
|
||||||
LOG_D(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_TX_DATA_REQUEST message. \n");
|
LOG_I(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_TX_DATA_REQUEST message. \n");
|
||||||
break;
|
break;
|
||||||
case NFAPI_NR_PHY_MSG_TYPE_UL_DCI_REQUEST:
|
case NFAPI_NR_PHY_MSG_TYPE_UL_DCI_REQUEST:
|
||||||
LOG_D(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_UL_DCI_REQUEST message. \n");
|
LOG_I(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_UL_DCI_REQUEST message. \n");
|
||||||
break;
|
break;
|
||||||
case NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST:
|
case NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST:
|
||||||
LOG_D(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST message. \n");
|
LOG_I(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST message. \n");
|
||||||
if (nfapi_nr_p7_message_unpack((void *)buffer, len, &dl_tti_request,
|
if (nfapi_nr_p7_message_unpack((void *)buffer, len, &dl_tti_request,
|
||||||
sizeof(dl_tti_request), NULL) < 0)
|
sizeof(dl_tti_request), NULL) < 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -287,9 +287,9 @@ int8_t nr_rrc_ue_process_rrcReconfiguration(const module_id_t module_id, NR_RRCR
|
|||||||
nr_rrc_ue_process_scg_config(module_id,cellGroupConfig);
|
nr_rrc_ue_process_scg_config(module_id,cellGroupConfig);
|
||||||
}else{
|
}else{
|
||||||
// after first time, update it and free the memory after.
|
// after first time, update it and free the memory after.
|
||||||
|
SEQUENCE_free(&asn_DEF_NR_CellGroupConfig, (void *)NR_UE_rrc_inst[module_id].cell_group_config, 0);
|
||||||
NR_UE_rrc_inst[module_id].cell_group_config = cellGroupConfig;
|
NR_UE_rrc_inst[module_id].cell_group_config = cellGroupConfig;
|
||||||
nr_rrc_ue_process_scg_config(module_id,cellGroupConfig);
|
nr_rrc_ue_process_scg_config(module_id,cellGroupConfig);
|
||||||
SEQUENCE_free(&asn_DEF_NR_CellGroupConfig, (void *)NR_UE_rrc_inst[module_id].cell_group_config, 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration->measConfig != NULL){
|
if(rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration->measConfig != NULL){
|
||||||
@@ -341,6 +341,8 @@ int8_t nr_rrc_ue_process_scg_config(const module_id_t module_id, NR_CellGroupCon
|
|||||||
}else{
|
}else{
|
||||||
// maintain list
|
// maintain list
|
||||||
if(cell_group_config->spCellConfig != NULL){
|
if(cell_group_config->spCellConfig != NULL){
|
||||||
|
nr_rrc_mac_config_req_ue(0, 0, 0, NULL, cell_group_config);
|
||||||
|
LOG_I(NR_RRC, "Melissa, we filled scc now \n");
|
||||||
if(cell_group_config->spCellConfig->spCellConfigDedicated != NULL){
|
if(cell_group_config->spCellConfig->spCellConfigDedicated != NULL){
|
||||||
// process element of list to be add by RRC message
|
// process element of list to be add by RRC message
|
||||||
if(cell_group_config->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList != NULL){
|
if(cell_group_config->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList != NULL){
|
||||||
|
|||||||
Reference in New Issue
Block a user