Definition of L1 and implementation of L3 measurements for serving cell
This commit is contained in:
@@ -62,3 +62,7 @@ MESSAGE_DEF(NR_RRC_MAC_SBCCH_DATA_IND, MESSAGE_PRIORITY_MED_PLUS, NRRrcMacSBc
|
||||
|
||||
// Message to GNB_APP to update SIB19 satellite position information
|
||||
MESSAGE_DEF(GNB_SAT_POSITION_UPDATE, MESSAGE_PRIORITY_MED, gnb_sat_position_update_t, gnb_sat_position_update)
|
||||
|
||||
// nrUE
|
||||
MESSAGE_DEF(NR_RRC_MAC_MEAS_DATA_IND, MESSAGE_PRIORITY_MED_PLUS, NRRrcMacMeasDataInd, nr_rrc_mac_meas_data_ind)
|
||||
|
||||
|
||||
@@ -44,6 +44,8 @@
|
||||
#define NR_RRC_MAC_BCCH_DATA_IND(mSGpTR) (mSGpTR)->ittiMsg.nr_rrc_mac_bcch_data_ind
|
||||
#define NR_RRC_MAC_SBCCH_DATA_IND(mSGpTR) (mSGpTR)->ittiMsg.nr_rrc_mac_sbcch_data_ind
|
||||
|
||||
#define NR_RRC_MAC_MEAS_DATA_IND(mSGpTR) (mSGpTR)->ittiMsg.nr_rrc_mac_meas_data_ind
|
||||
|
||||
#define RRC_MAC_BCCH_MBMS_DATA_REQ(mSGpTR) (mSGpTR)->ittiMsg.rrc_mac_bcch_mbms_data_req
|
||||
#define RRC_MAC_BCCH_MBMS_DATA_IND(mSGpTR) (mSGpTR)->ittiMsg.rrc_mac_bcch_mbms_data_ind
|
||||
|
||||
@@ -142,6 +144,14 @@ typedef struct NRRrcMacSBcchDataInd_s {
|
||||
uint8_t rsrp;
|
||||
} NRRrcMacSBcchDataInd;
|
||||
|
||||
typedef struct NRRrcMacMeasDataInd_s {
|
||||
uint8_t gnb_index;
|
||||
uint8_t rsrp_dBm;
|
||||
uint16_t Nid_cell;
|
||||
bool is_csi_meas;
|
||||
bool is_neighboring_cell;
|
||||
} NRRrcMacMeasDataInd;
|
||||
|
||||
typedef struct RrcMacBcchMbmsDataReq_s {
|
||||
uint32_t frame;
|
||||
uint32_t sdu_size;
|
||||
|
||||
@@ -594,8 +594,8 @@ typedef struct NR_UE_MAC_INST_s {
|
||||
|
||||
nr_csi_report_t csi_report_template[MAX_CSI_REPORTCONFIG];
|
||||
|
||||
/// measurements from CSI-RS
|
||||
fapi_nr_csirs_measurements_t csirs_measurements;
|
||||
/// measurements from SS or CSI-RS
|
||||
fapi_nr_l1_measurements_t l1_measurements;
|
||||
|
||||
//// FAPI-like interface message
|
||||
fapi_nr_ul_config_request_t *ul_config_request;
|
||||
|
||||
@@ -117,10 +117,8 @@ csi_payload_t nr_ue_aperiodic_csi_reporting(NR_UE_MAC_INST_t *mac, dci_field_t c
|
||||
|
||||
nr_dci_format_t nr_ue_process_dci_indication_pdu(NR_UE_MAC_INST_t *mac, frame_t frame, int slot, fapi_nr_dci_indication_pdu_t *dci);
|
||||
|
||||
int8_t nr_ue_process_csirs_measurements(NR_UE_MAC_INST_t *mac,
|
||||
frame_t frame,
|
||||
int slot,
|
||||
fapi_nr_csirs_measurements_t *csirs_measurements);
|
||||
void nr_ue_process_l1_measurements(NR_UE_MAC_INST_t *mac, frame_t frame, int slot, fapi_nr_l1_measurements_t *l1_measurements);
|
||||
|
||||
void nr_ue_aperiodic_srs_scheduling(NR_UE_MAC_INST_t *mac, long resource_trigger, int frame, int slot);
|
||||
|
||||
bool trigger_periodic_scheduling_request(NR_UE_MAC_INST_t *mac,
|
||||
|
||||
@@ -302,7 +302,7 @@ void release_mac_configuration(NR_UE_MAC_INST_t *mac, NR_UE_MAC_reset_cause_t ca
|
||||
release_ul_BWP(mac, i);
|
||||
|
||||
memset(&mac->ssb_measurements, 0, sizeof(mac->ssb_measurements));
|
||||
memset(&mac->csirs_measurements, 0, sizeof(mac->csirs_measurements));
|
||||
memset(&mac->l1_measurements, 0, sizeof(mac->l1_measurements));
|
||||
memset(&mac->ul_time_alignment, 0, sizeof(mac->ul_time_alignment));
|
||||
for (int i = mac->TAG_list.count; i > 0 ; i--)
|
||||
asn_sequence_del(&mac->TAG_list, i - 1, 1);
|
||||
|
||||
@@ -1504,13 +1504,17 @@ nr_dci_format_t nr_ue_process_dci_indication_pdu(NR_UE_MAC_INST_t *mac, frame_t
|
||||
return format;
|
||||
}
|
||||
|
||||
int8_t nr_ue_process_csirs_measurements(NR_UE_MAC_INST_t *mac,
|
||||
frame_t frame,
|
||||
int slot,
|
||||
fapi_nr_csirs_measurements_t *csirs_measurements) {
|
||||
LOG_D(NR_MAC,"(%d.%d) Received CSI-RS measurements\n", frame, slot);
|
||||
memcpy(&mac->csirs_measurements, csirs_measurements, sizeof(*csirs_measurements));
|
||||
return 0;
|
||||
void nr_ue_process_l1_measurements(NR_UE_MAC_INST_t *mac, frame_t frame, int slot, fapi_nr_l1_measurements_t *l1_measurements)
|
||||
{
|
||||
LOG_D(NR_MAC, "(%d.%d) Received CSI-RS measurements\n", frame, slot);
|
||||
memcpy(&mac->l1_measurements, l1_measurements, sizeof(*l1_measurements));
|
||||
bool csi_meas = l1_measurements->meas_type == NFAPI_NR_CSI_MEAS;
|
||||
nr_mac_rrc_meas_ind_ue(mac->ue_id,
|
||||
l1_measurements->gNB_index,
|
||||
l1_measurements->Nid_cell,
|
||||
csi_meas,
|
||||
l1_measurements->is_neighboring_cell,
|
||||
l1_measurements->rsrp_dBm);
|
||||
}
|
||||
|
||||
static void set_harq_status(NR_UE_MAC_INST_t *mac,
|
||||
@@ -2993,9 +2997,9 @@ static csi_payload_t get_csirs_RI_PMI_CQI_payload(NR_UE_MAC_INST_t *mac,
|
||||
AssertFatal(csi_report, "Couldn't find CSI report with ID %ld\n", csi_reportconfig->reportConfigId);
|
||||
int cri_bitlen = csi_report->csi_meas_bitlen.cri_bitlen;
|
||||
int ri_bitlen = csi_report->csi_meas_bitlen.ri_bitlen;
|
||||
int pmi_x1_bitlen = csi_report->csi_meas_bitlen.pmi_x1_bitlen[mac->csirs_measurements.rank_indicator];
|
||||
int pmi_x2_bitlen = csi_report->csi_meas_bitlen.pmi_x2_bitlen[mac->csirs_measurements.rank_indicator];
|
||||
int cqi_bitlen = csi_report->csi_meas_bitlen.cqi_bitlen[mac->csirs_measurements.rank_indicator];
|
||||
int pmi_x1_bitlen = csi_report->csi_meas_bitlen.pmi_x1_bitlen[mac->l1_measurements.rank_indicator];
|
||||
int pmi_x2_bitlen = csi_report->csi_meas_bitlen.pmi_x2_bitlen[mac->l1_measurements.rank_indicator];
|
||||
int cqi_bitlen = csi_report->csi_meas_bitlen.cqi_bitlen[mac->l1_measurements.rank_indicator];
|
||||
|
||||
if (get_softmodem_params()->emulate_l1) {
|
||||
static const uint8_t mcs_to_cqi[] = {0, 1, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,
|
||||
@@ -3003,9 +3007,9 @@ static csi_payload_t get_csirs_RI_PMI_CQI_payload(NR_UE_MAC_INST_t *mac,
|
||||
CHECK_INDEX(nr_bler_data, NR_NUM_MCS - 1);
|
||||
int mcs = get_mcs_from_sinr(nr_bler_data, (mac->nr_ue_emul_l1.cqi - 640) * 0.1);
|
||||
CHECK_INDEX(mcs_to_cqi, mcs);
|
||||
mac->csirs_measurements.rank_indicator = mac->nr_ue_emul_l1.ri;
|
||||
mac->csirs_measurements.i1 = mac->nr_ue_emul_l1.pmi;
|
||||
mac->csirs_measurements.cqi = mcs_to_cqi[mcs];
|
||||
mac->l1_measurements.rank_indicator = mac->nr_ue_emul_l1.ri;
|
||||
mac->l1_measurements.i1 = mac->nr_ue_emul_l1.pmi;
|
||||
mac->l1_measurements.cqi = mcs_to_cqi[mcs];
|
||||
}
|
||||
|
||||
int padding_bitlen = 0;
|
||||
@@ -3014,19 +3018,19 @@ static csi_payload_t get_csirs_RI_PMI_CQI_payload(NR_UE_MAC_INST_t *mac,
|
||||
p1_bits = cri_bitlen + ri_bitlen + cqi_bitlen;
|
||||
p2_bits = pmi_x1_bitlen + pmi_x2_bitlen;
|
||||
temp_payload_1 = (0/*mac->csi_measurements.cri*/ << (cqi_bitlen + ri_bitlen)) |
|
||||
(mac->csirs_measurements.rank_indicator << cqi_bitlen) |
|
||||
(mac->csirs_measurements.cqi);
|
||||
temp_payload_2 = (mac->csirs_measurements.i1 << pmi_x2_bitlen) |
|
||||
mac->csirs_measurements.i2;
|
||||
(mac->l1_measurements.rank_indicator << cqi_bitlen) |
|
||||
(mac->l1_measurements.cqi);
|
||||
temp_payload_2 = (mac->l1_measurements.i1 << pmi_x2_bitlen) |
|
||||
mac->l1_measurements.i2;
|
||||
}
|
||||
else {
|
||||
p1_bits = nr_get_csi_bitlen(csi_report);
|
||||
padding_bitlen = p1_bits - (cri_bitlen + ri_bitlen + pmi_x1_bitlen + pmi_x2_bitlen + cqi_bitlen);
|
||||
temp_payload_1 = (0/*mac->csi_measurements.cri*/ << (cqi_bitlen + pmi_x2_bitlen + pmi_x1_bitlen + padding_bitlen + ri_bitlen)) |
|
||||
(mac->csirs_measurements.rank_indicator << (cqi_bitlen + pmi_x2_bitlen + pmi_x1_bitlen + padding_bitlen)) |
|
||||
(mac->csirs_measurements.i1 << (cqi_bitlen + pmi_x2_bitlen)) |
|
||||
(mac->csirs_measurements.i2 << (cqi_bitlen)) |
|
||||
(mac->csirs_measurements.cqi);
|
||||
(mac->l1_measurements.rank_indicator << (cqi_bitlen + pmi_x2_bitlen + pmi_x1_bitlen + padding_bitlen)) |
|
||||
(mac->l1_measurements.i1 << (cqi_bitlen + pmi_x2_bitlen)) |
|
||||
(mac->l1_measurements.i2 << (cqi_bitlen)) |
|
||||
(mac->l1_measurements.cqi);
|
||||
}
|
||||
|
||||
temp_payload_1 = reverse_bits(temp_payload_1, p1_bits);
|
||||
@@ -3085,17 +3089,7 @@ static csi_payload_t get_csirs_RSRP_payload(NR_UE_MAC_INST_t *mac,
|
||||
}
|
||||
|
||||
// TODO: Improvements will be needed to cri_ssbri_bitlen>0
|
||||
// TS 38.133 - Table 10.1.6.1-1
|
||||
int rsrp_dBm = mac->csirs_measurements.rsrp_dBm;
|
||||
if (rsrp_dBm < -140) {
|
||||
temp_payload = 16;
|
||||
} else if (rsrp_dBm > -44) {
|
||||
temp_payload = 113;
|
||||
} else {
|
||||
temp_payload = mac->csirs_measurements.rsrp_dBm + 157;
|
||||
}
|
||||
|
||||
temp_payload = reverse_bits(temp_payload, n_bits);
|
||||
temp_payload = reverse_bits(mac->l1_measurements.rsrp_dBm, n_bits); // rsrp_dBm as in TS 38.133 - Table 10.1.6.1-1
|
||||
|
||||
LOG_D(NR_MAC, "cri_ssbri_bitlen = %d\n", cri_ssbri_bitlen);
|
||||
LOG_D(NR_MAC, "rsrp_bitlen = %d\n", rsrp_bitlen);
|
||||
|
||||
@@ -1174,13 +1174,11 @@ static void handle_rlm(rlm_t rlm_result, int frame, NR_UE_MAC_INST_t *mac)
|
||||
nr_mac_rrc_sync_ind(mac->ue_id, frame, is_sync);
|
||||
}
|
||||
|
||||
static int8_t handle_csirs_measurements(NR_UE_MAC_INST_t *mac,
|
||||
frame_t frame,
|
||||
int slot,
|
||||
fapi_nr_csirs_measurements_t *csirs_measurements)
|
||||
static int8_t handle_l1_measurements(NR_UE_MAC_INST_t *mac, frame_t frame, int slot, fapi_nr_l1_measurements_t *l1_measurements)
|
||||
{
|
||||
handle_rlm(csirs_measurements->radiolink_monitoring, frame, mac);
|
||||
return nr_ue_process_csirs_measurements(mac, frame, slot, csirs_measurements);
|
||||
handle_rlm(l1_measurements->radiolink_monitoring, frame, mac);
|
||||
nr_ue_process_l1_measurements(mac, frame, slot, l1_measurements);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void update_harq_status(NR_UE_MAC_INST_t *mac, uint8_t harq_pid, uint8_t ack_nack)
|
||||
@@ -1316,11 +1314,11 @@ static uint32_t nr_ue_dl_processing(NR_UE_MAC_INST_t *mac, nr_downlink_indicatio
|
||||
}
|
||||
ret_mask |= (handle_dlsch(mac, dl_info, i)) << FAPI_NR_RX_PDU_TYPE_RAR;
|
||||
break;
|
||||
case FAPI_NR_CSIRS_IND:
|
||||
ret_mask |= (handle_csirs_measurements(mac,
|
||||
dl_info->frame,
|
||||
dl_info->slot,
|
||||
&rx_indication_body.csirs_measurements)) << FAPI_NR_CSIRS_IND;
|
||||
case FAPI_NR_MEAS_IND:
|
||||
ret_mask |= (handle_l1_measurements(mac,
|
||||
dl_info->frame,
|
||||
dl_info->slot,
|
||||
&rx_indication_body.l1_measurements)) << FAPI_NR_MEAS_IND;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -37,6 +37,17 @@
|
||||
|
||||
typedef uint32_t channel_t;
|
||||
|
||||
void nr_mac_rrc_meas_ind_ue(module_id_t module_id, uint32_t gNB_index, uint16_t Nid_cell, bool csi_meas, bool is_neighboring_cell, uint8_t rsrp_dBm)
|
||||
{
|
||||
MessageDef *message_p = itti_alloc_new_message(TASK_MAC_UE, 0, NR_RRC_MAC_MEAS_DATA_IND);
|
||||
NR_RRC_MAC_MEAS_DATA_IND(message_p).gnb_index = gNB_index;
|
||||
NR_RRC_MAC_MEAS_DATA_IND(message_p).Nid_cell = Nid_cell;
|
||||
NR_RRC_MAC_MEAS_DATA_IND(message_p).is_csi_meas = csi_meas;
|
||||
NR_RRC_MAC_MEAS_DATA_IND(message_p).is_neighboring_cell = is_neighboring_cell;
|
||||
NR_RRC_MAC_MEAS_DATA_IND(message_p).rsrp_dBm = rsrp_dBm;
|
||||
itti_send_msg_to_task(TASK_RRC_NRUE, GNB_MODULE_ID_TO_INSTANCE(module_id), message_p);
|
||||
}
|
||||
|
||||
void nr_mac_rrc_sync_ind(const module_id_t module_id, const frame_t frame, const bool in_sync)
|
||||
{
|
||||
MessageDef *message_p = itti_alloc_new_message(TASK_MAC_UE, 0, NR_RRC_MAC_SYNC_IND);
|
||||
|
||||
@@ -37,6 +37,12 @@ void nr_mac_rrc_data_ind_ue(const module_id_t module_id,
|
||||
const channel_t channel,
|
||||
const uint8_t* pduP,
|
||||
const sdu_size_t pdu_len);
|
||||
void nr_mac_rrc_meas_ind_ue(module_id_t module_id,
|
||||
uint32_t gNB_index,
|
||||
uint16_t Nid_cell,
|
||||
bool csi_meas,
|
||||
bool is_neighboring_cell,
|
||||
uint8_t rsrp_dBm);
|
||||
void nr_mac_rrc_inactivity_timer_ind(const module_id_t mod_id);
|
||||
void nr_mac_rrc_msg3_ind(const module_id_t mod_id, const int rnti, bool prepare_payload);
|
||||
void nr_ue_rrc_timer_trigger(int instance, int frame, int gnb_id);
|
||||
|
||||
@@ -807,6 +807,9 @@ NR_UE_RRC_INST_t* nr_rrc_init_ue(char* uecap_file, int instance_id, int num_ant_
|
||||
for (int i = 0; i < NB_CNX_UE; i++) {
|
||||
rrcPerNB_t *ptr = &rrc->perNB[i];
|
||||
ptr->SInfo = (NR_UE_RRC_SI_INFO){0};
|
||||
ptr->l3_measurements = (l3_measurements_t){0};
|
||||
ptr->l3_measurements.ssb_filter_coeff_rsrp = 1.0f;
|
||||
ptr->l3_measurements.csi_RS_filter_coeff_rsrp = 1.0f;
|
||||
init_SI_timers(&ptr->SInfo);
|
||||
}
|
||||
|
||||
@@ -1814,6 +1817,14 @@ static void handle_quantityconfig(rrcPerNB_t *rrc, NR_QuantityConfig_t *quantity
|
||||
if (!rrc->QuantityConfig[i])
|
||||
rrc->QuantityConfig[i] = calloc(1, sizeof(*rrc->QuantityConfig[i]));
|
||||
rrc->QuantityConfig[i]->quantityConfigCell = quantityNR->quantityConfigCell;
|
||||
// TODO: It remains to compute ssb_filter_coeff_rsrp and csi_RS_filter_coeff_rsrp for multiple quantityConfig
|
||||
// TS 38.331 - 5.5.3.2 Layer 3 filtering
|
||||
NR_QuantityConfigRS_t *qcc = &quantityNR->quantityConfigCell;
|
||||
l3_measurements_t *l3_measurements = &rrc->l3_measurements;
|
||||
if (qcc->ssb_FilterConfig.filterCoefficientRSRP)
|
||||
l3_measurements->ssb_filter_coeff_rsrp = 1. / pow(2, (*qcc->ssb_FilterConfig.filterCoefficientRSRP) / 4);
|
||||
if (qcc->csi_RS_FilterConfig.filterCoefficientRSRP)
|
||||
l3_measurements->csi_RS_filter_coeff_rsrp = 1. / pow(2, (*qcc->csi_RS_FilterConfig.filterCoefficientRSRP) / 4);
|
||||
if (quantityNR->quantityConfigRS_Index)
|
||||
UPDATE_IE(rrc->QuantityConfig[i]->quantityConfigRS_Index, quantityNR->quantityConfigRS_Index, struct NR_QuantityConfigRS);
|
||||
}
|
||||
@@ -2238,6 +2249,34 @@ static int nr_rrc_ue_decode_dcch(NR_UE_RRC_INST_t *rrc,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void apply_ema(val_init_t *vi_rsrp_dBm, float filter_coeff_rsrp, int rsrp_dBm)
|
||||
{
|
||||
int *quant = &vi_rsrp_dBm->val;
|
||||
bool *meas_init = &vi_rsrp_dBm->init;
|
||||
float coef = *meas_init ? filter_coeff_rsrp : 1.0f; // if not init, first measurement gets full weight
|
||||
*quant = (1.0f - coef) * (*quant) + coef * rsrp_dBm;
|
||||
*meas_init = true;
|
||||
}
|
||||
|
||||
void nr_ue_meas_filtering(rrcPerNB_t *rrc, bool is_neighboring_cell, uint16_t Nid_cell, bool csi_meas, int rsrp_dBm)
|
||||
{
|
||||
if (is_neighboring_cell)
|
||||
return;
|
||||
|
||||
l3_measurements_t *l3_measurements = &rrc->l3_measurements;
|
||||
meas_t *meas_cell = &l3_measurements->serving_cell;
|
||||
if (meas_cell->Nid_cell != Nid_cell) {
|
||||
meas_cell->ss_rsrp_dBm.init = false;
|
||||
meas_cell->csi_rsrp_dBm.init = false;
|
||||
}
|
||||
meas_cell->Nid_cell = Nid_cell;
|
||||
|
||||
if (csi_meas)
|
||||
apply_ema(&meas_cell->csi_rsrp_dBm, l3_measurements->csi_RS_filter_coeff_rsrp, rsrp_dBm);
|
||||
else
|
||||
apply_ema(&meas_cell->ss_rsrp_dBm, l3_measurements->ssb_filter_coeff_rsrp, rsrp_dBm);
|
||||
}
|
||||
|
||||
void nr_rrc_handle_ra_indication(NR_UE_RRC_INST_t *rrc, bool ra_succeeded)
|
||||
{
|
||||
NR_UE_Timers_Constants_t *timers = &rrc->timers_and_constants;
|
||||
@@ -2354,6 +2393,20 @@ void *rrc_nrue(void *notUsed)
|
||||
|
||||
nr_rrc_ue_decode_NR_SBCCH_SL_BCH_Message(rrc, sbcch->gnb_index,sbcch->frame, sbcch->slot, sbcch->sdu,
|
||||
sbcch->sdu_size, sbcch->rx_slss_id);
|
||||
case NR_RRC_MAC_MEAS_DATA_IND:
|
||||
|
||||
LOG_D(NR_RRC, "[%s][Nid_cell %i] Received %s measurements: RSRP = %i (dBm)\n",
|
||||
NR_RRC_MAC_MEAS_DATA_IND(msg_p).is_neighboring_cell? "Neighboring cell" : "Active cell",
|
||||
NR_RRC_MAC_MEAS_DATA_IND(msg_p).Nid_cell,
|
||||
NR_RRC_MAC_MEAS_DATA_IND(msg_p).is_csi_meas ? "CSI meas" : "SSB meas",
|
||||
NR_RRC_MAC_MEAS_DATA_IND(msg_p).rsrp_dBm - 157);
|
||||
|
||||
rrcPerNB_t *rrcNB = rrc->perNB + NR_RRC_MAC_MEAS_DATA_IND(msg_p).gnb_index;
|
||||
nr_ue_meas_filtering(rrcNB,
|
||||
NR_RRC_MAC_MEAS_DATA_IND(msg_p).is_neighboring_cell,
|
||||
NR_RRC_MAC_MEAS_DATA_IND(msg_p).Nid_cell,
|
||||
NR_RRC_MAC_MEAS_DATA_IND(msg_p).is_csi_meas,
|
||||
NR_RRC_MAC_MEAS_DATA_IND(msg_p).rsrp_dBm - 157);
|
||||
break;
|
||||
|
||||
case NR_RRC_MAC_CCCH_DATA_IND: {
|
||||
|
||||
@@ -192,6 +192,15 @@ typedef enum {
|
||||
|
||||
typedef enum { RB_NOT_PRESENT, RB_ESTABLISHED, RB_SUSPENDED } NR_RB_status_t;
|
||||
|
||||
typedef struct l3_measurements_s {
|
||||
float ssb_filter_coeff_rsrp;
|
||||
float csi_RS_filter_coeff_rsrp;
|
||||
meas_t serving_cell;
|
||||
long trigger_to_measid;
|
||||
long trigger_quantity;
|
||||
long rs_type;
|
||||
} l3_measurements_t;
|
||||
|
||||
typedef struct rrcPerNB {
|
||||
NR_MeasObjectToAddMod_t *MeasObj[MAX_MEAS_OBJ];
|
||||
NR_ReportConfigToAddMod_t *ReportConfig[MAX_MEAS_CONFIG];
|
||||
@@ -201,6 +210,7 @@ typedef struct rrcPerNB {
|
||||
NR_MeasGapConfig_t *measGapConfig;
|
||||
NR_UE_RRC_SI_INFO SInfo;
|
||||
NR_RSRP_Range_t s_measure;
|
||||
l3_measurements_t l3_measurements;
|
||||
} rrcPerNB_t;
|
||||
|
||||
typedef struct NR_UE_RRC_INST_s {
|
||||
|
||||
Reference in New Issue
Block a user