fix PMI extraction, X1 and X2 order was wrong
This commit is contained in:
@@ -675,8 +675,8 @@ static void tci_handling(NR_UE_info_t *UE, frame_t frame, slot_t slot)
|
|||||||
static uint8_t pickandreverse_bits(uint8_t *payload, uint16_t bitlen, uint8_t start_bit)
|
static uint8_t pickandreverse_bits(uint8_t *payload, uint16_t bitlen, uint8_t start_bit)
|
||||||
{
|
{
|
||||||
uint8_t rev_bits = 0;
|
uint8_t rev_bits = 0;
|
||||||
for (int i=0; i<bitlen; i++)
|
for (int i = 0; i < bitlen; i++)
|
||||||
rev_bits |= ((payload[(start_bit+i)/8]>>((start_bit+i)%8))&0x01)<<(bitlen-i-1);
|
rev_bits |= ((payload[(start_bit + i) / 8] >> ((start_bit + i) % 8)) & 0x01) << (bitlen - i - 1);
|
||||||
return rev_bits;
|
return rev_bits;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -819,18 +819,18 @@ static uint8_t evaluate_pmi_report(uint8_t *payload,
|
|||||||
{
|
{
|
||||||
int x1_bitlen = csi_report->csi_meas_bitlen.pmi_x1_bitlen[ri];
|
int x1_bitlen = csi_report->csi_meas_bitlen.pmi_x1_bitlen[ri];
|
||||||
int x2_bitlen = csi_report->csi_meas_bitlen.pmi_x2_bitlen[ri];
|
int x2_bitlen = csi_report->csi_meas_bitlen.pmi_x2_bitlen[ri];
|
||||||
int tot_bitlen = x1_bitlen + x2_bitlen;
|
|
||||||
|
|
||||||
//in case of 2 port CSI configuration x1 is empty and the information bits are in x2
|
//in case of 2 port CSI configuration x1 is empty and the information bits are in x2
|
||||||
int temp_pmi = pickandreverse_bits(payload, tot_bitlen, cumul_bits);
|
int starting_bit = cumul_bits;
|
||||||
|
sched_ctrl->CSI_report.cri_ri_li_pmi_cqi_report.pmi_x1 = pickandreverse_bits(payload, x1_bitlen, starting_bit);
|
||||||
sched_ctrl->CSI_report.cri_ri_li_pmi_cqi_report.pmi_x1 = temp_pmi & ((1 << x1_bitlen) - 1);
|
starting_bit += x1_bitlen;
|
||||||
sched_ctrl->CSI_report.cri_ri_li_pmi_cqi_report.pmi_x2 = (temp_pmi >> x1_bitlen) & ((1 << x2_bitlen) - 1);
|
sched_ctrl->CSI_report.cri_ri_li_pmi_cqi_report.pmi_x2 = pickandreverse_bits(payload, x2_bitlen, starting_bit);
|
||||||
LOG_D(MAC,"PMI Report: X1 %d X2 %d\n",
|
LOG_D(NR_MAC,
|
||||||
|
"PMI Report: X1 %d X2 %d\n",
|
||||||
sched_ctrl->CSI_report.cri_ri_li_pmi_cqi_report.pmi_x1,
|
sched_ctrl->CSI_report.cri_ri_li_pmi_cqi_report.pmi_x1,
|
||||||
sched_ctrl->CSI_report.cri_ri_li_pmi_cqi_report.pmi_x2);
|
sched_ctrl->CSI_report.cri_ri_li_pmi_cqi_report.pmi_x2);
|
||||||
|
|
||||||
return tot_bitlen;
|
return x1_bitlen + x2_bitlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int evaluate_li_report(uint8_t *payload,
|
static int evaluate_li_report(uint8_t *payload,
|
||||||
|
|||||||
Reference in New Issue
Block a user