separate UE fapi message for SSB measurements
This commit is contained in:
@@ -59,7 +59,9 @@ typedef struct {
|
|||||||
uint16_t Nid_cell;
|
uint16_t Nid_cell;
|
||||||
nfapi_nr_meas_type_e meas_type;
|
nfapi_nr_meas_type_e meas_type;
|
||||||
bool is_neighboring_cell;
|
bool is_neighboring_cell;
|
||||||
uint8_t rsrp_dBm;
|
int ssb_index;
|
||||||
|
int rsrp_dBm;
|
||||||
|
float sinr_dB;
|
||||||
uint8_t rank_indicator;
|
uint8_t rank_indicator;
|
||||||
uint16_t i1;
|
uint16_t i1;
|
||||||
uint8_t i2;
|
uint8_t i2;
|
||||||
@@ -133,11 +135,8 @@ typedef struct {
|
|||||||
uint8_t ssb_length;
|
uint8_t ssb_length;
|
||||||
uint16_t cell_id;
|
uint16_t cell_id;
|
||||||
uint16_t ssb_start_subcarrier;
|
uint16_t ssb_start_subcarrier;
|
||||||
short rsrp_dBm;
|
|
||||||
long arfcn;
|
long arfcn;
|
||||||
rlm_t radiolink_monitoring; // -1 no monitoring, 0 out_of_sync, 1 in_sync
|
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;
|
} fapi_nr_ssb_pdu_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|||||||
@@ -264,6 +264,7 @@ void nr_ue_ssb_rsrp_measurements(PHY_VARS_NR_UE *ue,
|
|||||||
.gNB_index = proc->gNB_id,
|
.gNB_index = proc->gNB_id,
|
||||||
.meas_type = NFAPI_NR_SS_MEAS,
|
.meas_type = NFAPI_NR_SS_MEAS,
|
||||||
.Nid_cell = ue->frame_parms.Nid_cell,
|
.Nid_cell = ue->frame_parms.Nid_cell,
|
||||||
|
.ssb_index = ssb_index,
|
||||||
.is_neighboring_cell = false,
|
.is_neighboring_cell = false,
|
||||||
};
|
};
|
||||||
int ssb_rsrp_dBm = ue->measurements.ssb_rsrp_dBm[ssb_index];
|
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.ssb_length = frame_parms->Lmax;
|
||||||
rx->ssb_pdu.cell_id = frame_parms->Nid_cell;
|
rx->ssb_pdu.cell_id = frame_parms->Nid_cell;
|
||||||
rx->ssb_pdu.ssb_start_subcarrier = frame_parms->ssb_start_subcarrier;
|
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.arfcn = get_ssb_arfcn(frame_parms);
|
||||||
rx->ssb_pdu.radiolink_monitoring = RLM_in_sync; // TODO to be removed from here
|
rx->ssb_pdu.radiolink_monitoring = RLM_in_sync; // TODO to be removed from here
|
||||||
rx->ssb_pdu.decoded_pdu = true;
|
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);
|
LOG_D(NR_MAC, "(%d.%d) Received CSI-RS measurements\n", frame, slot);
|
||||||
memcpy(&mac->l1_measurements, l1_measurements, sizeof(*l1_measurements));
|
memcpy(&mac->l1_measurements, l1_measurements, sizeof(*l1_measurements));
|
||||||
bool csi_meas = l1_measurements->meas_type == NFAPI_NR_CSI_MEAS;
|
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,
|
nr_mac_rrc_meas_ind_ue(mac->ue_id,
|
||||||
l1_measurements->gNB_index,
|
l1_measurements->gNB_index,
|
||||||
l1_measurements->Nid_cell,
|
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[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[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.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_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_length = pdu_list->PDUSize;
|
||||||
rx_ind->rx_indication_body[pdu_idx].ssb_pdu.ssb_start_subcarrier = ssb_pdu->SsbSubcarrierOffset;
|
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);
|
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
|
// L2 Abstraction Layer
|
||||||
// Note: sdu should always be processed because data and timing advance updates are transmitted by the UE
|
// 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)
|
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,
|
rx_indication_body.pdu_type,
|
||||||
dl_info->rx_ind->number_pdus);
|
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:
|
case FAPI_NR_RX_PDU_TYPE_SSB:
|
||||||
handle_rlm(rx_indication_body.ssb_pdu.radiolink_monitoring,
|
handle_rlm(rx_indication_body.ssb_pdu.radiolink_monitoring,
|
||||||
dl_info->frame,
|
dl_info->frame,
|
||||||
mac);
|
mac);
|
||||||
if(rx_indication_body.ssb_pdu.decoded_pdu) {
|
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,
|
ret_mask |= (handle_bcch_bch(mac,
|
||||||
dl_info->cc_id,
|
dl_info->cc_id,
|
||||||
dl_info->gNB_index,
|
dl_info->gNB_index,
|
||||||
|
|||||||
Reference in New Issue
Block a user