Extended NR PHY robustnes against wrong RRC configuration

master
Xavier Arteaga 3 years ago committed by Andre Puschmann
parent d518f6da46
commit cba6df3722

@ -290,6 +290,11 @@ int srsran_harq_ack_insert_m(srsran_pdsch_ack_nr_t* ack_info, const srsran_harq_
} }
srsran_harq_ack_cc_t* cc = &ack_info->cc[m->resource.scell_idx]; srsran_harq_ack_cc_t* cc = &ack_info->cc[m->resource.scell_idx];
if (cc->M >= SRSRAN_UCI_NR_MAX_M) {
ERROR("Accumulated M HARQ feedback exceeds maximum (%d)", SRSRAN_UCI_NR_MAX_M);
return SRSRAN_ERROR;
}
// Find insertion index // Find insertion index
uint32_t idx = cc->M; // Append at the end by default uint32_t idx = cc->M; // Append at the end by default
for (uint32_t i = 0; i < cc->M; i++) { for (uint32_t i = 0; i < cc->M; i++) {
@ -303,7 +308,7 @@ int srsran_harq_ack_insert_m(srsran_pdsch_ack_nr_t* ack_info, const srsran_harq_
cc->M += 1; cc->M += 1;
// Make space for insertion // Make space for insertion
for (uint32_t i = cc->M - 1; i > idx; i--) { for (uint32_t i = cc->M - 1; i != idx; i--) {
cc->m[i] = cc->m[i - 1]; cc->m[i] = cc->m[i - 1];
} }

@ -499,7 +499,7 @@ static int ra_ul_nr_pucch_resource_hl(const srsran_pucch_nr_hl_cfg_t* cfg,
} else if (O_uci <= N3 && cfg->sets[2].nof_resources > 0) { } else if (O_uci <= N3 && cfg->sets[2].nof_resources > 0) {
resource_set_id = 2; resource_set_id = 2;
} else if (cfg->sets[3].nof_resources == 0) { } else if (cfg->sets[3].nof_resources == 0) {
ERROR("Invalid PUCCH resource configuration, N3=%d, O_uci=%d", N3, O_uci); ERROR("Invalid PUCCH resource configuration, N2=%d, N3=%d, O_uci=%d", N2, N3, O_uci);
return SRSRAN_ERROR; return SRSRAN_ERROR;
} else if (O_uci > SRSRAN_UCI_NR_MAX_NOF_BITS) { } else if (O_uci > SRSRAN_UCI_NR_MAX_NOF_BITS) {
ERROR("The number of UCI bits (%d), exceeds the maximum (%d)", O_uci, SRSRAN_UCI_NR_MAX_NOF_BITS); ERROR("The number of UCI bits (%d), exceeds the maximum (%d)", O_uci, SRSRAN_UCI_NR_MAX_NOF_BITS);

@ -251,7 +251,7 @@ public:
// Insert PDSCH transmission information // Insert PDSCH transmission information
if (srsran_harq_ack_insert_m(&ack, &ack_m) < SRSRAN_SUCCESS) { if (srsran_harq_ack_insert_m(&ack, &ack_m) < SRSRAN_SUCCESS) {
ERROR("Error inserting ACK m value"); ERROR("Error inserting ACK m value for Tx slot %d", tti_tx);
} }
} }

@ -529,20 +529,29 @@ bool cc_worker::work_dl()
bool cc_worker::work_ul() bool cc_worker::work_ul()
{ {
// Gather PDSCH ACK information independently if UL/DL
// If a HARQ ACK Feedback needs to be transmitted in this slot and it is NOT an UL slot, the accumulated HARQ feedback
// for this slot will be flushed
srsran_pdsch_ack_nr_t pdsch_ack = {};
bool has_ul_ack = phy.get_pending_ack(ul_slot_cfg.idx, pdsch_ack);
// Check if it is a UL slot, if not skip // Check if it is a UL slot, if not skip
if (!srsran_tdd_nr_is_ul(&phy.cfg.tdd, 0, ul_slot_cfg.idx)) { if (!srsran_tdd_nr_is_ul(&phy.cfg.tdd, 0, ul_slot_cfg.idx)) {
// No NR signal shall be transmitted // No NR signal shall be transmitted
srsran_vec_cf_zero(tx_buffer[0], ue_ul.ifft.sf_sz); srsran_vec_cf_zero(tx_buffer[0], ue_ul.ifft.sf_sz);
// Check if there is any pending ACK for this DL slot...
if (pdsch_ack.nof_cc > 1) {
// ... in this case log a warning to inform about miss-configuration
logger.warning("Detected HARQ feedback on DL slot");
}
return true; return true;
} }
srsran_uci_data_nr_t uci_data = {}; srsran_uci_data_nr_t uci_data = {};
uint32_t pid = 0; uint32_t pid = 0;
// Gather PDSCH ACK information
srsran_pdsch_ack_nr_t pdsch_ack = {};
bool has_ul_ack = phy.get_pending_ack(ul_slot_cfg.idx, pdsch_ack);
// Request grant to PHY state for this transmit TTI // Request grant to PHY state for this transmit TTI
srsran_sch_cfg_nr_t pusch_cfg = {}; srsran_sch_cfg_nr_t pusch_cfg = {};
bool has_pusch_grant = phy.get_ul_pending_grant(ul_slot_cfg.idx, pusch_cfg, pid); bool has_pusch_grant = phy.get_ul_pending_grant(ul_slot_cfg.idx, pusch_cfg, pid);

Loading…
Cancel
Save