From cd12307c918f911fe5de687d86d5fbe71ac9920e Mon Sep 17 00:00:00 2001 From: Xavier Arteaga Date: Wed, 5 Feb 2020 19:17:37 +0100 Subject: [PATCH] SRSLTE: fix PUCCH 1b Channel selection resource --- lib/src/phy/phch/pucch.c | 7 ++++++- lib/src/phy/ue/ue_dl.c | 4 ++-- lib/src/phy/ue/ue_ul.c | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/src/phy/phch/pucch.c b/lib/src/phy/phch/pucch.c index 33717bbdf..21f7fd6c2 100644 --- a/lib/src/phy/phch/pucch.c +++ b/lib/src/phy/phch/pucch.c @@ -1310,7 +1310,12 @@ int srslte_pucch_cs_resources(srslte_pucch_cfg_t* cfg, srslte_uci_cfg_t* uci_cfg // If grant has been scheduled in PCell if (uci_cfg->ack[i].grant_cc_idx == 0) { for (uint32_t j = 0; j < uci_cfg->ack[i].nof_acks && k < SRSLTE_PUCCH_CS_MAX_ACK; j++) { - n_pucch_i[k++] = uci_cfg->ack[i].ncce[0] + cfg->N_pucch_1 + j; + if (k % 2 == 0) { + n_pucch_i[k] = cfg->n1_pucch_an_cs[uci_cfg->ack[i].tpc_for_pucch][k / 2]; + } else { + n_pucch_i[k] = uci_cfg->ack[i].ncce[0] + cfg->N_pucch_1 + 1; + } + k++; } } else { for (uint32_t j = 0; j < uci_cfg->ack[i].nof_acks; j++) { diff --git a/lib/src/phy/ue/ue_dl.c b/lib/src/phy/ue/ue_dl.c index adf1e28e0..121b2ee63 100644 --- a/lib/src/phy/ue/ue_dl.c +++ b/lib/src/phy/ue/ue_dl.c @@ -1008,14 +1008,14 @@ static void gen_ack_fdd(srslte_pdsch_ack_t* ack_info, srslte_uci_data_t* uci_dat uci_data->cfg.cqi.data_enable = false; // - for (int i = 0; i < 2; i++) { + for (int i = 0; i < ack_info->nof_cc; i++) { uci_data->cfg.ack[i].nof_acks = (tb_count != 0) ? nof_tb : 0; } } } else { // For 2 or more configured cells, report nof_tb per carrier except if there are no HARQ-ACK bits to report, in // which case we set to 0 - for (int i = 0; i < 2; i++) { + for (int i = 0; i < ack_info->nof_cc; i++) { uci_data->cfg.ack[i].nof_acks = (tb_count != 0) ? nof_tb : 0; } } diff --git a/lib/src/phy/ue/ue_ul.c b/lib/src/phy/ue/ue_ul.c index 5f680337c..bd8c8918c 100644 --- a/lib/src/phy/ue/ue_ul.c +++ b/lib/src/phy/ue/ue_ul.c @@ -959,7 +959,7 @@ int srslte_ue_ul_encode(srslte_ue_ul_t* q, srslte_ul_sf_cfg_t* sf, srslte_ue_ul_ /* If all bits are DTX, do not transmit HARQ */ if (dtx_count == srslte_uci_cfg_total_ack(&cfg->ul_cfg.pusch.uci_cfg)) { - for (int i = 0; i < 2; i++) { // Format 1b-CS only supports 2 CC + for (int i = 0; i < SRSLTE_MAX_CARRIERS; i++) { cfg->ul_cfg.pusch.uci_cfg.ack[i].nof_acks = 0; } }