fix order of information when encoding/decoding RSRP meaas report with more than 1 resource
This commit is contained in:
@@ -2936,13 +2936,13 @@ static csi_payload_t get_ssb_rsrp_payload(NR_UE_MAC_INST_t *mac,
|
||||
} else
|
||||
nb_meas = 2;
|
||||
|
||||
struct NR_CSI_SSB_ResourceSet__csi_SSB_ResourceList SSB_resource;
|
||||
struct NR_CSI_SSB_ResourceSet__csi_SSB_ResourceList *SSB_resource = NULL;
|
||||
for (int csi_ssb_idx = 0; csi_ssb_idx < csi_MeasConfig->csi_SSB_ResourceSetToAddModList->list.count; csi_ssb_idx++) {
|
||||
if (csi_MeasConfig->csi_SSB_ResourceSetToAddModList->list.array[csi_ssb_idx]->csi_SSB_ResourceSetId ==
|
||||
*(csi_resourceconfig->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB->csi_SSB_ResourceSetList->list.array[0])){
|
||||
SSB_resource = csi_MeasConfig->csi_SSB_ResourceSetToAddModList->list.array[csi_ssb_idx]->csi_SSB_ResourceList;
|
||||
SSB_resource = &csi_MeasConfig->csi_SSB_ResourceSetToAddModList->list.array[csi_ssb_idx]->csi_SSB_ResourceList;
|
||||
///only one SSB resource set from spec 38.331 IE CSI-ResourceConfig
|
||||
nb_ssb = SSB_resource.list.count;
|
||||
nb_ssb = SSB_resource->list.count;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -2957,7 +2957,7 @@ static csi_payload_t get_ssb_rsrp_payload(NR_UE_MAC_INST_t *mac,
|
||||
for (int measured_ssb_idx = 0; measured_ssb_idx < MAX_NB_SSB; measured_ssb_idx++) {
|
||||
// searching for the SSB index in the SSB resource table
|
||||
for (int ssb_resource = 0; ssb_resource < nb_ssb; ssb_resource++) {
|
||||
if (*SSB_resource.list.array[ssb_resource] == measured_ssb_idx) {
|
||||
if (*SSB_resource->list.array[ssb_resource] == measured_ssb_idx) {
|
||||
sorted_rsrp_measurements[sorted_idx].ssb_index = ssb_resource;
|
||||
sorted_rsrp_measurements[sorted_idx].ssb_rsrp_dBm = mac->ssb_measurements[measured_ssb_idx].ssb_rsrp_dBm;
|
||||
sorted_rsrp_measurements[sorted_idx].ssb_sinr_dB = mac->ssb_measurements[measured_ssb_idx].ssb_sinr_dB;
|
||||
@@ -2968,12 +2968,12 @@ static csi_payload_t get_ssb_rsrp_payload(NR_UE_MAC_INST_t *mac,
|
||||
}
|
||||
qsort(sorted_rsrp_measurements, nb_ssb, sizeof(NR_RSRP_meas_t), compare_ssb_rsrp);
|
||||
|
||||
uint32_t ssbi;
|
||||
|
||||
if (ssbri_bits > 0) {
|
||||
ssbi = sorted_rsrp_measurements[0].ssb_index;
|
||||
temp_payload = reverse_bits(ssbi, ssbri_bits);
|
||||
bits += ssbri_bits;
|
||||
for (int i = 0; i < nb_meas; i++) {
|
||||
if (ssbri_bits > 0) {
|
||||
uint32_t ssbi = sorted_rsrp_measurements[i].ssb_index;
|
||||
temp_payload |= (reverse_bits(ssbi, ssbri_bits) << bits);
|
||||
bits += ssbri_bits;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t rsrp_idx = get_rsrp_index(sorted_rsrp_measurements[0].ssb_rsrp_dBm);
|
||||
@@ -2982,15 +2982,11 @@ static csi_payload_t get_ssb_rsrp_payload(NR_UE_MAC_INST_t *mac,
|
||||
|
||||
// from the second SSB, differential report
|
||||
for (int i = 1; i < nb_meas; i++) {
|
||||
ssbi = sorted_rsrp_measurements[i].ssb_index;
|
||||
temp_payload |= (reverse_bits(ssbi, ssbri_bits) << bits);
|
||||
bits += ssbri_bits;
|
||||
|
||||
rsrp_idx = get_rsrp_diff_index(sorted_rsrp_measurements[0].ssb_rsrp_dBm,sorted_rsrp_measurements[i].ssb_rsrp_dBm);
|
||||
temp_payload |= (reverse_bits(rsrp_idx, 4) << bits);
|
||||
bits += 4; // 4 bits for subsequent RSRP
|
||||
}
|
||||
break; // resorce found
|
||||
break; // resource found
|
||||
}
|
||||
}
|
||||
int max_bits = sizeof(((csi_payload_t *)0)->part1_payload) * 8;
|
||||
|
||||
@@ -589,11 +589,13 @@ static void evaluate_rsrp_report(gNB_MAC_INST *nrmac,
|
||||
|
||||
rsrp_report->nr_reports = csi_report->CSI_report_bitlen.nb_ssbri_cri;
|
||||
int bitlen = csi_report->CSI_report_bitlen.cri_ssbri_bitlen;
|
||||
uint8_t curr_payload = pickandreverse_bits(payload, bitlen, *cumul_bits);
|
||||
rsrp_report->resource_id[0] = *(index_list[bitlen > 0 ? ((curr_payload) & ~(~1U << (bitlen - 1))) : bitlen]);
|
||||
*cumul_bits += bitlen;
|
||||
for (int i = 0; i < rsrp_report->nr_reports; i++) {
|
||||
uint8_t idx_payload = pickandreverse_bits(payload, bitlen, *cumul_bits);
|
||||
rsrp_report->resource_id[i] = *(index_list[bitlen > 0 ? ((idx_payload) & ~(~1U << (bitlen - 1))) : bitlen]);
|
||||
*cumul_bits += bitlen;
|
||||
}
|
||||
|
||||
curr_payload = pickandreverse_bits(payload, 7, *cumul_bits);
|
||||
uint8_t curr_payload = pickandreverse_bits(payload, 7, *cumul_bits);
|
||||
int rsrp = curr_payload & 0x7f;
|
||||
*cumul_bits += 7;
|
||||
csi_report->nb_of_csi_ssb_report++;
|
||||
@@ -605,10 +607,6 @@ static void evaluate_rsrp_report(gNB_MAC_INST *nrmac,
|
||||
}
|
||||
|
||||
for (int i = 1; i < rsrp_report->nr_reports; i++) {
|
||||
curr_payload = pickandreverse_bits(payload, bitlen, *cumul_bits);
|
||||
rsrp_report->resource_id[i] = *(index_list[bitlen > 0 ? ((curr_payload) & ~(~1U << (bitlen - 1))) : bitlen]);
|
||||
*cumul_bits += bitlen;
|
||||
|
||||
curr_payload = pickandreverse_bits(payload, 4, *cumul_bits);
|
||||
csi_report->nb_of_csi_ssb_report++;
|
||||
rsrp_report->RSRP[i] = get_diff_rsrp(curr_payload & 0x0f, rsrp_report->RSRP[0]);
|
||||
|
||||
Reference in New Issue
Block a user