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
|
} else
|
||||||
nb_meas = 2;
|
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++) {
|
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 ==
|
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])){
|
*(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
|
///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;
|
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++) {
|
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
|
// searching for the SSB index in the SSB resource table
|
||||||
for (int ssb_resource = 0; ssb_resource < nb_ssb; ssb_resource++) {
|
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_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_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;
|
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);
|
qsort(sorted_rsrp_measurements, nb_ssb, sizeof(NR_RSRP_meas_t), compare_ssb_rsrp);
|
||||||
|
|
||||||
uint32_t ssbi;
|
for (int i = 0; i < nb_meas; i++) {
|
||||||
|
if (ssbri_bits > 0) {
|
||||||
if (ssbri_bits > 0) {
|
uint32_t ssbi = sorted_rsrp_measurements[i].ssb_index;
|
||||||
ssbi = sorted_rsrp_measurements[0].ssb_index;
|
temp_payload |= (reverse_bits(ssbi, ssbri_bits) << bits);
|
||||||
temp_payload = reverse_bits(ssbi, ssbri_bits);
|
bits += ssbri_bits;
|
||||||
bits += ssbri_bits;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t rsrp_idx = get_rsrp_index(sorted_rsrp_measurements[0].ssb_rsrp_dBm);
|
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
|
// from the second SSB, differential report
|
||||||
for (int i = 1; i < nb_meas; i++) {
|
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);
|
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);
|
temp_payload |= (reverse_bits(rsrp_idx, 4) << bits);
|
||||||
bits += 4; // 4 bits for subsequent RSRP
|
bits += 4; // 4 bits for subsequent RSRP
|
||||||
}
|
}
|
||||||
break; // resorce found
|
break; // resource found
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int max_bits = sizeof(((csi_payload_t *)0)->part1_payload) * 8;
|
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;
|
rsrp_report->nr_reports = csi_report->CSI_report_bitlen.nb_ssbri_cri;
|
||||||
int bitlen = csi_report->CSI_report_bitlen.cri_ssbri_bitlen;
|
int bitlen = csi_report->CSI_report_bitlen.cri_ssbri_bitlen;
|
||||||
uint8_t curr_payload = pickandreverse_bits(payload, bitlen, *cumul_bits);
|
for (int i = 0; i < rsrp_report->nr_reports; i++) {
|
||||||
rsrp_report->resource_id[0] = *(index_list[bitlen > 0 ? ((curr_payload) & ~(~1U << (bitlen - 1))) : bitlen]);
|
uint8_t idx_payload = pickandreverse_bits(payload, bitlen, *cumul_bits);
|
||||||
*cumul_bits += bitlen;
|
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;
|
int rsrp = curr_payload & 0x7f;
|
||||||
*cumul_bits += 7;
|
*cumul_bits += 7;
|
||||||
csi_report->nb_of_csi_ssb_report++;
|
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++) {
|
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);
|
curr_payload = pickandreverse_bits(payload, 4, *cumul_bits);
|
||||||
csi_report->nb_of_csi_ssb_report++;
|
csi_report->nb_of_csi_ssb_report++;
|
||||||
rsrp_report->RSRP[i] = get_diff_rsrp(curr_payload & 0x0f, rsrp_report->RSRP[0]);
|
rsrp_report->RSRP[i] = get_diff_rsrp(curr_payload & 0x0f, rsrp_report->RSRP[0]);
|
||||||
|
|||||||
Reference in New Issue
Block a user