From 3fe91767500d06d166185e20b7978515cc6e05a1 Mon Sep 17 00:00:00 2001 From: Xavier Arteaga Date: Tue, 29 Jun 2021 14:59:11 +0200 Subject: [PATCH] Added PUCCH dedocder to slot worker --- .../srsran/interfaces/gnb_interfaces.h | 5 +++-- lib/include/srsran/phy/gnb/gnb_ul.h | 6 ++++++ lib/include/srsran/phy/phch/pucch_nr.h | 8 ++++---- lib/src/phy/gnb/gnb_ul.c | 20 +++++++++++++++++++ lib/src/phy/phch/pucch_nr.c | 8 ++++---- lib/src/phy/ue/ue_ul_nr.c | 2 +- srsenb/src/phy/nr/slot_worker.cc | 19 +++++++++++++++++- 7 files changed, 56 insertions(+), 12 deletions(-) diff --git a/lib/include/srsran/interfaces/gnb_interfaces.h b/lib/include/srsran/interfaces/gnb_interfaces.h index d0c9fd902..f27b5d8f2 100644 --- a/lib/include/srsran/interfaces/gnb_interfaces.h +++ b/lib/include/srsran/interfaces/gnb_interfaces.h @@ -248,8 +248,9 @@ public: }; struct pucch_t { - srsran_uci_cfg_nr_t uci_cfg; - srsran_pucch_nr_resource_t resource; + srsran_uci_cfg_nr_t uci_cfg; ///< UCI configuration + srsran_pucch_nr_common_cfg_t pucch_cfg; ///< UE dedicated PUCCH configuration + srsran_pucch_nr_resource_t resource; ///< PUCCH resource }; struct ul_sched_t { diff --git a/lib/include/srsran/phy/gnb/gnb_ul.h b/lib/include/srsran/phy/gnb/gnb_ul.h index 6440a4512..856cd539f 100644 --- a/lib/include/srsran/phy/gnb/gnb_ul.h +++ b/lib/include/srsran/phy/gnb/gnb_ul.h @@ -59,4 +59,10 @@ SRSRAN_API int srsran_gnb_ul_get_pucch(srsran_gnb_ul_t* q, const srsran_uci_cfg_nr_t* uci_cfg, srsran_uci_value_nr_t* uci_value); +SRSRAN_API uint32_t srsran_gnb_ul_pucch_info(srsran_gnb_ul_t* q, + const srsran_pucch_nr_resource_t* resource, + const srsran_uci_data_nr_t* uci_data, + char* str, + uint32_t str_len); + #endif // SRSRAN_GNB_UL_H diff --git a/lib/include/srsran/phy/phch/pucch_nr.h b/lib/include/srsran/phy/phch/pucch_nr.h index cb532fbe1..a562e7b03 100644 --- a/lib/include/srsran/phy/phch/pucch_nr.h +++ b/lib/include/srsran/phy/phch/pucch_nr.h @@ -239,9 +239,9 @@ SRSRAN_API int srsran_pucch_nr_format_2_3_4_decode(srsran_pucch_nr_t* cf_t* slot_symbols, srsran_uci_value_nr_t* uci_value); -SRSRAN_API uint32_t srsran_pucch_nr_tx_info(const srsran_pucch_nr_resource_t* resource, - const srsran_uci_data_nr_t* uci_data, - char* str, - uint32_t str_len); +SRSRAN_API uint32_t srsran_pucch_nr_info(const srsran_pucch_nr_resource_t* resource, + const srsran_uci_data_nr_t* uci_data, + char* str, + uint32_t str_len); #endif // SRSRAN_PUCCH_NR_H diff --git a/lib/src/phy/gnb/gnb_ul.c b/lib/src/phy/gnb/gnb_ul.c index c76e7a1c8..0072adcbe 100644 --- a/lib/src/phy/gnb/gnb_ul.c +++ b/lib/src/phy/gnb/gnb_ul.c @@ -261,4 +261,24 @@ int srsran_gnb_ul_get_pucch(srsran_gnb_ul_t* q, } return SRSRAN_ERROR; +} + +uint32_t srsran_gnb_ul_pucch_info(srsran_gnb_ul_t* q, + const srsran_pucch_nr_resource_t* resource, + const srsran_uci_data_nr_t* uci_data, + char* str, + uint32_t str_len) +{ + if (q == NULL || uci_data == NULL) { + return 0; + } + + uint32_t len = 0; + + len += srsran_pucch_nr_info(resource, uci_data, str, str_len - len); + + len = srsran_print_check( + str, str_len, len, "snr=%+.1f valid=%c", q->chest_pucch.snr_db, uci_data->value.valid ? 'y' : 'n'); + + return len; } \ No newline at end of file diff --git a/lib/src/phy/phch/pucch_nr.c b/lib/src/phy/phch/pucch_nr.c index 6dfb055eb..f7a7d1b80 100644 --- a/lib/src/phy/phch/pucch_nr.c +++ b/lib/src/phy/phch/pucch_nr.c @@ -762,10 +762,10 @@ static uint32_t pucch_nr_resource_info(const srsran_pucch_nr_resource_t* r, char return len; } -uint32_t srsran_pucch_nr_tx_info(const srsran_pucch_nr_resource_t* resource, - const srsran_uci_data_nr_t* uci_data, - char* str, - uint32_t str_len) +uint32_t srsran_pucch_nr_info(const srsran_pucch_nr_resource_t* resource, + const srsran_uci_data_nr_t* uci_data, + char* str, + uint32_t str_len) { uint32_t len = 0; diff --git a/lib/src/phy/ue/ue_ul_nr.c b/lib/src/phy/ue/ue_ul_nr.c index 8ce0ab5a1..3b0073985 100644 --- a/lib/src/phy/ue/ue_ul_nr.c +++ b/lib/src/phy/ue/ue_ul_nr.c @@ -260,7 +260,7 @@ int srsran_ue_ul_nr_pucch_info(const srsran_pucch_nr_resource_t* resource, int len = 0; // Append PDSCH info - len += srsran_pucch_nr_tx_info(resource, uci_data, &str[len], str_len - len); + len += srsran_pucch_nr_info(resource, uci_data, &str[len], str_len - len); return len; } diff --git a/srsenb/src/phy/nr/slot_worker.cc b/srsenb/src/phy/nr/slot_worker.cc index 9b73a73ed..ee4ec1755 100644 --- a/srsenb/src/phy/nr/slot_worker.cc +++ b/srsenb/src/phy/nr/slot_worker.cc @@ -150,9 +150,26 @@ bool slot_worker::work_ul() return false; } + // Demodulate + if (srsran_gnb_ul_fft(&gnb_ul) < SRSRAN_SUCCESS) { + logger.error("Error in demodulation"); + return false; + } + // Decode PUCCH for (stack_interface_phy_nr::pucch_t& pucch : ul_sched.pucch) { - // ... + srsran_uci_value_nr_t uci_value; + if (srsran_gnb_ul_get_pucch(&gnb_ul, &ul_slot_cfg, &pucch.pucch_cfg, &pucch.resource, &pucch.uci_cfg, &uci_value) < + SRSRAN_SUCCESS) { + logger.error("Error getting PUCCH"); + return false; + } + + if (logger.info.enabled()) { + std::array str; + srsran_uci_data_nr_t uci_data = {.cfg = pucch.uci_cfg, .value = uci_value}; + srsran_gnb_ul_pucch_info(&gnb_ul, &pucch.resource, &uci_data, str.data(), (uint32_t)str.size()); + } } // Decode PUSCH