separate UE fapi message for SSB measurements
This commit is contained in:
@@ -59,7 +59,9 @@ typedef struct {
|
||||
uint16_t Nid_cell;
|
||||
nfapi_nr_meas_type_e meas_type;
|
||||
bool is_neighboring_cell;
|
||||
uint8_t rsrp_dBm;
|
||||
int ssb_index;
|
||||
int rsrp_dBm;
|
||||
float sinr_dB;
|
||||
uint8_t rank_indicator;
|
||||
uint16_t i1;
|
||||
uint8_t i2;
|
||||
@@ -133,11 +135,8 @@ typedef struct {
|
||||
uint8_t ssb_length;
|
||||
uint16_t cell_id;
|
||||
uint16_t ssb_start_subcarrier;
|
||||
short rsrp_dBm;
|
||||
long arfcn;
|
||||
rlm_t radiolink_monitoring; // -1 no monitoring, 0 out_of_sync, 1 in_sync
|
||||
// SINR value times 10 as reporting granularity is 0.5
|
||||
float sinr_dB;
|
||||
} fapi_nr_ssb_pdu_t;
|
||||
|
||||
typedef struct {
|
||||
|
||||
@@ -264,6 +264,7 @@ void nr_ue_ssb_rsrp_measurements(PHY_VARS_NR_UE *ue,
|
||||
.gNB_index = proc->gNB_id,
|
||||
.meas_type = NFAPI_NR_SS_MEAS,
|
||||
.Nid_cell = ue->frame_parms.Nid_cell,
|
||||
.ssb_index = ssb_index,
|
||||
.is_neighboring_cell = false,
|
||||
};
|
||||
int ssb_rsrp_dBm = ue->measurements.ssb_rsrp_dBm[ssb_index];
|
||||
|
||||
@@ -176,8 +176,6 @@ void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind,
|
||||
rx->ssb_pdu.ssb_length = frame_parms->Lmax;
|
||||
rx->ssb_pdu.cell_id = frame_parms->Nid_cell;
|
||||
rx->ssb_pdu.ssb_start_subcarrier = frame_parms->ssb_start_subcarrier;
|
||||
rx->ssb_pdu.rsrp_dBm = ue->measurements.ssb_rsrp_dBm[frame_parms->ssb_index];
|
||||
rx->ssb_pdu.sinr_dB = ue->measurements.ssb_sinr_dB[frame_parms->ssb_index];
|
||||
rx->ssb_pdu.arfcn = get_ssb_arfcn(frame_parms);
|
||||
rx->ssb_pdu.radiolink_monitoring = RLM_in_sync; // TODO to be removed from here
|
||||
rx->ssb_pdu.decoded_pdu = true;
|
||||
|
||||
@@ -1509,6 +1509,11 @@ void nr_ue_process_l1_measurements(NR_UE_MAC_INST_t *mac, frame_t frame, int slo
|
||||
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;
|
||||
if (!csi_meas && !l1_measurements->is_neighboring_cell) {
|
||||
mac->ssb_measurements.ssb_index = l1_measurements->ssb_index;
|
||||
mac->ssb_measurements.ssb_rsrp_dBm = l1_measurements->rsrp_dBm;
|
||||
mac->ssb_measurements.ssb_sinr_dB = l1_measurements->sinr_dB;
|
||||
}
|
||||
nr_mac_rrc_meas_ind_ue(mac->ue_id,
|
||||
l1_measurements->gNB_index,
|
||||
l1_measurements->Nid_cell,
|
||||
|
||||
@@ -374,7 +374,6 @@ static void fill_mib_in_rx_ind(nfapi_nr_dl_tti_request_pdu_t *pdu_list, fapi_nr_
|
||||
rx_ind->rx_indication_body[pdu_idx].ssb_pdu.pdu[0] = (ssb_pdu->bchPayload) & 0xff;
|
||||
rx_ind->rx_indication_body[pdu_idx].ssb_pdu.pdu[1] = (ssb_pdu->bchPayload >> 8) & 0xff;
|
||||
rx_ind->rx_indication_body[pdu_idx].ssb_pdu.pdu[2] = (ssb_pdu->bchPayload >> 16) & 0xff;
|
||||
rx_ind->rx_indication_body[pdu_idx].ssb_pdu.rsrp_dBm = ssb_pdu->ssbRsrp;
|
||||
rx_ind->rx_indication_body[pdu_idx].ssb_pdu.ssb_index = ssb_pdu->SsbBlockIndex;
|
||||
rx_ind->rx_indication_body[pdu_idx].ssb_pdu.ssb_length = pdu_list->PDUSize;
|
||||
rx_ind->rx_indication_body[pdu_idx].ssb_pdu.ssb_start_subcarrier = ssb_pdu->SsbSubcarrierOffset;
|
||||
@@ -1138,13 +1137,6 @@ static nr_dci_format_t handle_dci(NR_UE_MAC_INST_t *mac,
|
||||
return nr_ue_process_dci_indication_pdu(mac, frame, slot, dci);
|
||||
}
|
||||
|
||||
static void handle_ssb_meas(NR_UE_MAC_INST_t *mac, uint8_t ssb_index, int16_t rsrp_dbm, float_t sinr_dB)
|
||||
{
|
||||
mac->ssb_measurements.ssb_index = ssb_index;
|
||||
mac->ssb_measurements.ssb_rsrp_dBm = rsrp_dbm;
|
||||
mac->ssb_measurements.ssb_sinr_dB = sinr_dB;
|
||||
}
|
||||
|
||||
// L2 Abstraction Layer
|
||||
// Note: sdu should always be processed because data and timing advance updates are transmitted by the UE
|
||||
static int8_t handle_dlsch(NR_UE_MAC_INST_t *mac, nr_downlink_indication_t *dl_info, int pdu_id)
|
||||
@@ -1268,16 +1260,12 @@ static uint32_t nr_ue_dl_processing(NR_UE_MAC_INST_t *mac, nr_downlink_indicatio
|
||||
rx_indication_body.pdu_type,
|
||||
dl_info->rx_ind->number_pdus);
|
||||
|
||||
switch(rx_indication_body.pdu_type){
|
||||
switch(rx_indication_body.pdu_type) {
|
||||
case FAPI_NR_RX_PDU_TYPE_SSB:
|
||||
handle_rlm(rx_indication_body.ssb_pdu.radiolink_monitoring,
|
||||
dl_info->frame,
|
||||
mac);
|
||||
if(rx_indication_body.ssb_pdu.decoded_pdu) {
|
||||
handle_ssb_meas(mac,
|
||||
rx_indication_body.ssb_pdu.ssb_index,
|
||||
rx_indication_body.ssb_pdu.rsrp_dBm,
|
||||
rx_indication_body.ssb_pdu.sinr_dB);
|
||||
ret_mask |= (handle_bcch_bch(mac,
|
||||
dl_info->cc_id,
|
||||
dl_info->gNB_index,
|
||||
|
||||
Reference in New Issue
Block a user