moving handling of RA success for reconfigurationWithSync at RRC
This commit is contained in:
@@ -32,6 +32,8 @@ void nr_mac_rrc_sync_ind(const module_id_t module_id,
|
|||||||
const frame_t frame,
|
const frame_t frame,
|
||||||
const bool in_sync) {}
|
const bool in_sync) {}
|
||||||
|
|
||||||
|
void nr_mac_rrc_ra_ind(const module_id_t mod_id, int frame, bool success) {}
|
||||||
|
|
||||||
void rrc_data_ind(const protocol_ctxt_t *const ctxt_pP,
|
void rrc_data_ind(const protocol_ctxt_t *const ctxt_pP,
|
||||||
const rb_id_t Srb_id,
|
const rb_id_t Srb_id,
|
||||||
const sdu_size_t sdu_sizeP,
|
const sdu_size_t sdu_sizeP,
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ MESSAGE_DEF(RRC_MAC_MCCH_DATA_IND, MESSAGE_PRIORITY_MED_PLUS, RrcMacMcchDat
|
|||||||
|
|
||||||
MESSAGE_DEF(RRC_MAC_PCCH_DATA_REQ, MESSAGE_PRIORITY_MED_PLUS, RrcMacPcchDataReq, rrc_mac_pcch_data_req)
|
MESSAGE_DEF(RRC_MAC_PCCH_DATA_REQ, MESSAGE_PRIORITY_MED_PLUS, RrcMacPcchDataReq, rrc_mac_pcch_data_req)
|
||||||
|
|
||||||
|
MESSAGE_DEF(NR_RRC_MAC_RA_IND, MESSAGE_PRIORITY_MED_PLUS, NRRrcMacRaInd, nr_rrc_mac_ra_ind)
|
||||||
|
|
||||||
/* RRC configures DRX context (MAC timers) of a UE */
|
/* RRC configures DRX context (MAC timers) of a UE */
|
||||||
MESSAGE_DEF(RRC_MAC_DRX_CONFIG_REQ, MESSAGE_PRIORITY_MED, rrc_mac_drx_config_req_t, rrc_mac_drx_config_req)
|
MESSAGE_DEF(RRC_MAC_DRX_CONFIG_REQ, MESSAGE_PRIORITY_MED, rrc_mac_drx_config_req_t, rrc_mac_drx_config_req)
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,9 @@
|
|||||||
#define RRC_MAC_MCCH_DATA_IND(mSGpTR) (mSGpTR)->ittiMsg.rrc_mac_mcch_data_ind
|
#define RRC_MAC_MCCH_DATA_IND(mSGpTR) (mSGpTR)->ittiMsg.rrc_mac_mcch_data_ind
|
||||||
#define RRC_MAC_PCCH_DATA_REQ(mSGpTR) (mSGpTR)->ittiMsg.rrc_mac_pcch_data_req
|
#define RRC_MAC_PCCH_DATA_REQ(mSGpTR) (mSGpTR)->ittiMsg.rrc_mac_pcch_data_req
|
||||||
|
|
||||||
#define RRC_MAC_DRX_CONFIG_REQ(mSGpTR) (mSGpTR)->ittiMsg.rrc_mac_drx_config_req
|
#define NR_RRC_MAC_RA_IND(mSGpTR) (mSGpTR)->ittiMsg.nr_rrc_mac_ra_ind
|
||||||
|
|
||||||
|
#define RRC_MAC_DRX_CONFIG_REQ(mSGpTR) (mSGpTR)->ittiMsg.rrc_mac_drx_config_req
|
||||||
|
|
||||||
// Some constants from "LAYER2/MAC/defs.h"
|
// Some constants from "LAYER2/MAC/defs.h"
|
||||||
#define BCCH_SDU_SIZE (512)
|
#define BCCH_SDU_SIZE (512)
|
||||||
@@ -65,6 +67,12 @@
|
|||||||
|
|
||||||
//-------------------------------------------------------------------------------------------//
|
//-------------------------------------------------------------------------------------------//
|
||||||
// Messages between RRC and MAC layers
|
// Messages between RRC and MAC layers
|
||||||
|
|
||||||
|
typedef struct NRRrcMacRaInd_s {
|
||||||
|
uint32_t frame;
|
||||||
|
bool RA_succeeded;
|
||||||
|
} NRRrcMacRaInd;
|
||||||
|
|
||||||
typedef struct RrcMacInSyncInd_s {
|
typedef struct RrcMacInSyncInd_s {
|
||||||
uint32_t frame;
|
uint32_t frame;
|
||||||
uint8_t sub_frame;
|
uint8_t sub_frame;
|
||||||
|
|||||||
@@ -896,7 +896,6 @@ void nr_ra_succeeded(const module_id_t mod_id, const uint8_t gNB_index, const fr
|
|||||||
|
|
||||||
if (ra->cfra) {
|
if (ra->cfra) {
|
||||||
LOG_I(MAC, "[UE %d][%d.%d][RAPROC] RA procedure succeeded. CF-RA: RAR successfully received.\n", mod_id, frame, slot);
|
LOG_I(MAC, "[UE %d][%d.%d][RAPROC] RA procedure succeeded. CF-RA: RAR successfully received.\n", mod_id, frame, slot);
|
||||||
nr_rrc_RA_succeeded(mod_id, gNB_index);
|
|
||||||
mac->state = UE_CONNECTED;
|
mac->state = UE_CONNECTED;
|
||||||
ra->RA_window_cnt = -1;
|
ra->RA_window_cnt = -1;
|
||||||
} else {
|
} else {
|
||||||
@@ -911,6 +910,7 @@ void nr_ra_succeeded(const module_id_t mod_id, const uint8_t gNB_index, const fr
|
|||||||
LOG_D(MAC, "In %s: [UE %d] clearing RA_active flag...\n", __FUNCTION__, mod_id);
|
LOG_D(MAC, "In %s: [UE %d] clearing RA_active flag...\n", __FUNCTION__, mod_id);
|
||||||
ra->RA_active = 0;
|
ra->RA_active = 0;
|
||||||
ra->ra_state = RA_SUCCEEDED;
|
ra->ra_state = RA_SUCCEEDED;
|
||||||
|
nr_mac_rrc_ra_ind(mod_id, frame, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handling failure of RA procedure @ MAC layer
|
// Handling failure of RA procedure @ MAC layer
|
||||||
|
|||||||
@@ -155,12 +155,10 @@ int8_t nr_mac_rrc_data_req_ue(const module_id_t Mod_idP,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int8_t nr_rrc_RA_succeeded(const module_id_t mod_id, const uint8_t gNB_index)
|
void nr_mac_rrc_ra_ind(const module_id_t mod_id, int frame, bool success)
|
||||||
{
|
{
|
||||||
if (NR_UE_rrc_inst[mod_id].timers_and_constants.T304_active == true) {
|
MessageDef *message_p = itti_alloc_new_message(TASK_MAC_UE, 0, NR_RRC_MAC_RA_IND);
|
||||||
LOG_W(NR_RRC, "T304 was stoped with value %i\n", NR_UE_rrc_inst[mod_id].timers_and_constants.T304_cnt);
|
NR_RRC_MAC_RA_IND (message_p).frame = frame;
|
||||||
NR_UE_rrc_inst[mod_id].timers_and_constants.T304_active = false;
|
NR_RRC_MAC_RA_IND (message_p).RA_succeeded = success;
|
||||||
NR_UE_rrc_inst[mod_id].timers_and_constants.T304_cnt = 0;
|
itti_send_msg_to_task(TASK_RRC_NRUE, GNB_MODULE_ID_TO_INSTANCE(mod_id), message_p);
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2249,6 +2249,18 @@ int32_t nr_rrc_ue_establish_drb(module_id_t ue_mod_idP,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void nr_rrc_handle_ra_indication(unsigned int mod_id, bool ra_succeeded)
|
||||||
|
{
|
||||||
|
NR_UE_Timers_Constants_t *timers = &NR_UE_rrc_inst[mod_id].timers_and_constants;
|
||||||
|
if (ra_succeeded && timers->T304_active == true) {
|
||||||
|
// successful Random Access procedure triggered by reconfigurationWithSync
|
||||||
|
timers->T304_active = false;
|
||||||
|
timers->T304_cnt = 0;
|
||||||
|
// TODO handle the rest of procedures as described in 5.3.5.3 for when
|
||||||
|
// reconfigurationWithSync is included in spCellConfig
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void *rrc_nrue_task(void *args_p)
|
void *rrc_nrue_task(void *args_p)
|
||||||
{
|
{
|
||||||
MessageDef *msg_p;
|
MessageDef *msg_p;
|
||||||
@@ -2293,6 +2305,15 @@ void *rrc_nrue_task(void *args_p)
|
|||||||
nr_rrc_handle_timers(timers);
|
nr_rrc_handle_timers(timers);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NR_RRC_MAC_RA_IND:
|
||||||
|
LOG_D(NR_RRC, "[UE %d] Received %s: frame %d\n RA %s",
|
||||||
|
ue_mod_id,
|
||||||
|
ITTI_MSG_NAME (msg_p),
|
||||||
|
NR_RRC_MAC_RA_IND (msg_p).frame,
|
||||||
|
NR_RRC_MAC_RA_IND (msg_p).RA_succeeded ? "successful" : "failed");
|
||||||
|
nr_rrc_handle_ra_indication(ue_mod_id, NR_RRC_MAC_RA_IND (msg_p).RA_succeeded);
|
||||||
|
break;
|
||||||
|
|
||||||
case NR_RRC_MAC_BCCH_DATA_IND:
|
case NR_RRC_MAC_BCCH_DATA_IND:
|
||||||
LOG_D(NR_RRC, "[UE %d] Received %s: frameP %d, gNB %d\n", ue_mod_id, ITTI_MSG_NAME (msg_p),
|
LOG_D(NR_RRC, "[UE %d] Received %s: frameP %d, gNB %d\n", ue_mod_id, ITTI_MSG_NAME (msg_p),
|
||||||
NR_RRC_MAC_BCCH_DATA_IND (msg_p).frame, NR_RRC_MAC_BCCH_DATA_IND (msg_p).gnb_index);
|
NR_RRC_MAC_BCCH_DATA_IND (msg_p).frame, NR_RRC_MAC_BCCH_DATA_IND (msg_p).gnb_index);
|
||||||
|
|||||||
@@ -116,6 +116,7 @@ int8_t nr_mac_rrc_data_ind_ue(const module_id_t module_id,
|
|||||||
void nr_mac_rrc_sync_ind(const module_id_t module_id,
|
void nr_mac_rrc_sync_ind(const module_id_t module_id,
|
||||||
const frame_t frame,
|
const frame_t frame,
|
||||||
const bool in_sync);
|
const bool in_sync);
|
||||||
|
void nr_mac_rrc_ra_ind(const module_id_t mod_id, int frame, bool success);
|
||||||
|
|
||||||
/**\brief
|
/**\brief
|
||||||
\param module_id module id
|
\param module_id module id
|
||||||
|
|||||||
Reference in New Issue
Block a user