Commit e5ea77f6 authored by francescomani's avatar francescomani

separate UE fapi message for SSB measurements

parent fc4bd2e2
...@@ -59,7 +59,9 @@ typedef struct { ...@@ -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 { ...@@ -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, ...@@ -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, ...@@ -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 ...@@ -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_ ...@@ -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, ...@@ -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 ...@@ -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,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment