From f94941b5e666d3cc19d28013e6a527d2e47733d7 Mon Sep 17 00:00:00 2001 From: francescomani Date: Thu, 29 Feb 2024 16:31:58 +0100 Subject: [PATCH] fix for UCI on PUSCH fapi PDU configuration in case of only HARQ bits --- openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c | 31 ++++++++++++++------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index 84434d640a..314f374517 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -639,23 +639,21 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, pusch_config_pdu->pusch_uci.csi_part1_payload = csi_report->part1_payload; pusch_config_pdu->pusch_uci.csi_part2_bit_length = csi_report->p2_bits; pusch_config_pdu->pusch_uci.csi_part2_payload = csi_report->part2_payload; - AssertFatal(pusch_Config && pusch_Config->uci_OnPUSCH, - "UCI on PUSCH need to be configured\n"); - pusch_config_pdu->pusch_uci.alpha_scaling = pusch_Config->uci_OnPUSCH->choice.setup->scaling; - AssertFatal(pusch_Config->uci_OnPUSCH->choice.setup->betaOffsets && - pusch_Config->uci_OnPUSCH->choice.setup->betaOffsets->present == NR_UCI_OnPUSCH__betaOffsets_PR_semiStatic, + AssertFatal(pusch_Config && pusch_Config->uci_OnPUSCH, "UCI on PUSCH need to be configured\n"); + NR_UCI_OnPUSCH_t *onPusch = pusch_Config->uci_OnPUSCH->choice.setup; + AssertFatal(onPusch && + onPusch->betaOffsets && + onPusch->betaOffsets->present == NR_UCI_OnPUSCH__betaOffsets_PR_semiStatic, "Only semistatic beta offset is supported\n"); - NR_BetaOffsets_t *beta_offsets = pusch_Config->uci_OnPUSCH->choice.setup->betaOffsets->choice.semiStatic; - pusch_config_pdu->pusch_uci.beta_offset_harq_ack = pusch_config_pdu->pusch_uci.harq_ack_bit_length > 2 ? - (pusch_config_pdu->pusch_uci.harq_ack_bit_length < 12 ? *beta_offsets->betaOffsetACK_Index2 : - *beta_offsets->betaOffsetACK_Index3) : - *beta_offsets->betaOffsetACK_Index1; + NR_BetaOffsets_t *beta_offsets = onPusch->betaOffsets->choice.semiStatic; + pusch_config_pdu->pusch_uci.beta_offset_csi1 = pusch_config_pdu->pusch_uci.csi_part1_bit_length < 12 ? *beta_offsets->betaOffsetCSI_Part1_Index1 : *beta_offsets->betaOffsetCSI_Part1_Index2; pusch_config_pdu->pusch_uci.beta_offset_csi2 = pusch_config_pdu->pusch_uci.csi_part2_bit_length < 12 ? *beta_offsets->betaOffsetCSI_Part2_Index1 : *beta_offsets->betaOffsetCSI_Part2_Index2; + pusch_config_pdu->pusch_uci.alpha_scaling = onPusch->scaling; } else { pusch_config_pdu->pusch_uci.csi_part1_bit_length = 0; @@ -2153,6 +2151,19 @@ static bool schedule_uci_on_pusch(NR_UE_MAC_INST_t *mac, frame_t frame_tx, int s if (pucch->n_harq > 0) { pusch_pdu->pusch_uci.harq_ack_bit_length = pucch->n_harq; pusch_pdu->pusch_uci.harq_payload = pucch->ack_payload; + NR_PUSCH_Config_t *pusch_Config = mac->current_UL_BWP->pusch_Config; + AssertFatal(pusch_Config && pusch_Config->uci_OnPUSCH, "UCI on PUSCH need to be configured\n"); + NR_UCI_OnPUSCH_t *onPusch = pusch_Config->uci_OnPUSCH->choice.setup; + AssertFatal(onPusch && + onPusch->betaOffsets && + onPusch->betaOffsets->present == NR_UCI_OnPUSCH__betaOffsets_PR_semiStatic, + "Only semistatic beta offset is supported\n"); + NR_BetaOffsets_t *beta_offsets = onPusch->betaOffsets->choice.semiStatic; + pusch_pdu->pusch_uci.beta_offset_harq_ack = pucch->n_harq > 2 ? + (pucch->n_harq < 12 ? *beta_offsets->betaOffsetACK_Index2 : + *beta_offsets->betaOffsetACK_Index3) : + *beta_offsets->betaOffsetACK_Index1; + pusch_pdu->pusch_uci.alpha_scaling = onPusch->scaling; mux_done = true; } if (pusch_pdu->pusch_uci.csi_part1_bit_length == 0 && pusch_pdu->pusch_uci.csi_part2_bit_length == 0) {