Commit 51c95d27 authored by Roberto Louro Magueta's avatar Roberto Louro Magueta

Send correct FAPI SRS indication PDU depending on SRS usage

parent a333ddde
......@@ -905,6 +905,15 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
LOG_I(NR_PHY, "gNB->srs_pdu_list[%i].report_type = %i\n", num_srs, gNB->srs_pdu_list[num_srs].report_type);
#endif
if(!gNB->srs_pdu_list[num_srs].report_tlv) {
gNB->srs_pdu_list[num_srs].report_tlv = (nfapi_srs_report_tlv_t*) calloc(1, sizeof(nfapi_srs_report_tlv_t));
}
gNB->srs_pdu_list[num_srs].report_tlv->tag = 0;
switch (gNB->srs_pdu_list[num_srs].srs_usage) {
case NR_SRS_ResourceSet__usage_beamManagement: {
nfapi_nr_srs_beamforming_report_t *nr_srs_beamforming_report = (nfapi_nr_srs_beamforming_report_t*) calloc(1,sizeof(nfapi_nr_srs_beamforming_report_t));
nr_srs_beamforming_report->prg_size = srs_pdu->beamforming.prg_size;
nr_srs_beamforming_report->num_symbols = 1<<srs_pdu->num_symbols;
......@@ -931,15 +940,29 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
}
#endif
if(!gNB->srs_pdu_list[num_srs].report_tlv) {
gNB->srs_pdu_list[num_srs].report_tlv = (nfapi_srs_report_tlv_t*) calloc(1, sizeof(nfapi_srs_report_tlv_t));
}
gNB->srs_pdu_list[num_srs].report_tlv->tag = 0;
gNB->srs_pdu_list[num_srs].report_tlv->length = pack_nr_srs_beamforming_report(nr_srs_beamforming_report,
gNB->srs_pdu_list[num_srs].report_tlv->value,
16384*sizeof(uint32_t));
break;
}
case NR_SRS_ResourceSet__usage_codebook: {
gNB->srs_pdu_list[num_srs].report_tlv->length = 0;
break;
}
case NR_SRS_ResourceSet__usage_nonCodebook:
case NR_SRS_ResourceSet__usage_antennaSwitching:
LOG_W(NR_PHY, "PHY procedures for this SRS usage are not implemented yet!\n");
gNB->srs_pdu_list[num_srs].report_tlv->length = 0;
break;
default:
AssertFatal(1==0,"Invalid SRS usage\n");
}
#ifdef SRS_IND_DEBUG
LOG_I(NR_PHY, "gNB->srs_pdu_list[%i].report_tlv->tag = %i\n", num_srs, gNB->srs_pdu_list[num_srs].report_tlv->tag);
LOG_I(NR_PHY, "gNB->srs_pdu_list[%i].report_tlv->length = %i\n", num_srs, gNB->srs_pdu_list[num_srs].report_tlv->length);
char *value = (char*)gNB->srs_pdu_list[num_srs].report_tlv->value;
for(int b = 0; b < gNB->srs_pdu_list[num_srs].report_tlv->length; b++) {
......
......@@ -779,6 +779,16 @@ void handle_nr_srs_measurements(const module_id_t module_id,
LOG_I(NR_MAC, "srs_ind->report_type = %i\n", srs_ind->report_type);
#endif
NR_UE_info_t *UE = find_nr_UE(&RC.nrmac[module_id]->UE_info, srs_ind->rnti);
if (!UE) {
LOG_W(NR_MAC, "Could not find UE %04x\n", srs_ind->rnti);
return;
}
switch (srs_ind->srs_usage) {
case NR_SRS_ResourceSet__usage_beamManagement: {
nfapi_nr_srs_beamforming_report_t *nr_srs_beamforming_report = (nfapi_nr_srs_beamforming_report_t*) calloc(1,sizeof(nfapi_nr_srs_beamforming_report_t));
unpack_nr_srs_beamforming_report(srs_ind->report_tlv->value,
srs_ind->report_tlv->length,
......@@ -799,12 +809,6 @@ void handle_nr_srs_measurements(const module_id_t module_id,
}
#endif
NR_UE_info_t* UE = find_nr_UE(&RC.nrmac[module_id]->UE_info, srs_ind->rnti);
if (!UE) {
LOG_W(NR_MAC, "Could not find UE %04x\n", srs_ind->rnti);
return;
}
gNB_MAC_INST *nr_mac = RC.nrmac[module_id];
NR_mac_stats_t *stats = &UE->mac_stats;
stats->srs_wide_band_snr = (nr_srs_beamforming_report->wide_band_snr>>1)-64;
......@@ -822,11 +826,29 @@ void handle_nr_srs_measurements(const module_id_t module_id,
LOG_D(NR_MAC, "ulprbbl[%3i] = 0x%x\n", rb, ulprbbl[rb]);
}
break;
}
case NR_SRS_ResourceSet__usage_codebook: {
// TODO: This should be improved
NR_UE_sched_ctrl_t *sched_ctrl = &UE->UE_sched_ctrl;
NR_pusch_semi_static_t *ps = &sched_ctrl->pusch_semi_static;
ps->srs_feedback.sri = NR_SRS_SRI_0;
ps->srs_feedback.tpmi = 0;
break;
}
case NR_SRS_ResourceSet__usage_nonCodebook:
case NR_SRS_ResourceSet__usage_antennaSwitching:
LOG_W(NR_MAC, "MAC procedures for this SRS usage are not implemented yet!\n");
break;
default:
AssertFatal(1==0,"Invalid SRS usage\n");
}
}
long get_K2(NR_ServingCellConfigCommon_t *scc,
......
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