mirror of https://github.com/pvnis/srsRAN_4G.git
Refactored NR HARQ-ACK feedback enqueue
parent
bd11b66b6c
commit
991c6e7016
@ -0,0 +1,150 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
* \section COPYRIGHT
|
||||||
|
*
|
||||||
|
* Copyright 2013-2021 Software Radio Systems Limited
|
||||||
|
*
|
||||||
|
* By using this file, you agree to the terms and conditions set
|
||||||
|
* forth in the LICENSE file which can be found at the top level of
|
||||||
|
* the distribution.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "srsran/common/test_common.h"
|
||||||
|
#include "srsran/phy/ue/ue_dl_nr.h"
|
||||||
|
#include <getopt.h>
|
||||||
|
|
||||||
|
static int test_case_1()
|
||||||
|
{
|
||||||
|
// Set configuration
|
||||||
|
srsran_ue_dl_nr_harq_ack_cfg_t cfg = {};
|
||||||
|
cfg.harq_ack_codebook = srsran_pdsch_harq_ack_codebook_dynamic;
|
||||||
|
|
||||||
|
// Generate ACK information
|
||||||
|
srsran_pdsch_ack_nr_t ack_info = {};
|
||||||
|
ack_info.nof_cc = 1;
|
||||||
|
ack_info.use_pusch = true;
|
||||||
|
|
||||||
|
srsran_pdsch_ack_m_nr_t m = {};
|
||||||
|
m.value[0] = 1;
|
||||||
|
m.present = true;
|
||||||
|
|
||||||
|
m.resource.k1 = 8;
|
||||||
|
m.resource.v_dai_dl = 0;
|
||||||
|
m.value[0] = 1;
|
||||||
|
m.present = true;
|
||||||
|
TESTASSERT(srsran_ue_dl_nr_ack_insert_m(&ack_info, &m) == SRSRAN_SUCCESS);
|
||||||
|
|
||||||
|
m.resource.k1 = 5;
|
||||||
|
m.resource.v_dai_dl = 2;
|
||||||
|
TESTASSERT(srsran_ue_dl_nr_ack_insert_m(&ack_info, &m) == SRSRAN_SUCCESS);
|
||||||
|
|
||||||
|
m.resource.k1 = 6;
|
||||||
|
m.resource.v_dai_dl = 1;
|
||||||
|
TESTASSERT(srsran_ue_dl_nr_ack_insert_m(&ack_info, &m) == SRSRAN_SUCCESS);
|
||||||
|
|
||||||
|
m.resource.k1 = 4;
|
||||||
|
m.resource.v_dai_dl = 3;
|
||||||
|
TESTASSERT(srsran_ue_dl_nr_ack_insert_m(&ack_info, &m) == SRSRAN_SUCCESS);
|
||||||
|
|
||||||
|
m.resource.k1 = 3;
|
||||||
|
m.resource.v_dai_dl = 0;
|
||||||
|
TESTASSERT(srsran_ue_dl_nr_ack_insert_m(&ack_info, &m) == SRSRAN_SUCCESS);
|
||||||
|
|
||||||
|
// Print trace
|
||||||
|
char str[512] = {};
|
||||||
|
TESTASSERT(srsran_ue_dl_nr_ack_info(&ack_info, str, (uint32_t)sizeof(str)) > SRSRAN_SUCCESS);
|
||||||
|
INFO("%s", str);
|
||||||
|
|
||||||
|
// Generate UCI data
|
||||||
|
srsran_uci_data_nr_t uci_data = {};
|
||||||
|
TESTASSERT(srsran_ue_dl_nr_gen_ack(&cfg, &ack_info, &uci_data) == SRSRAN_SUCCESS);
|
||||||
|
|
||||||
|
// Assert UCI data
|
||||||
|
TESTASSERT(uci_data.cfg.o_ack == 5);
|
||||||
|
|
||||||
|
return SRSRAN_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int test_case_2()
|
||||||
|
{
|
||||||
|
// Set configuration
|
||||||
|
srsran_ue_dl_nr_harq_ack_cfg_t cfg = {};
|
||||||
|
cfg.harq_ack_codebook = srsran_pdsch_harq_ack_codebook_dynamic;
|
||||||
|
|
||||||
|
// Generate ACK information
|
||||||
|
srsran_pdsch_ack_nr_t ack_info = {};
|
||||||
|
ack_info.nof_cc = 1;
|
||||||
|
ack_info.use_pusch = true;
|
||||||
|
|
||||||
|
srsran_pdsch_ack_m_nr_t m = {};
|
||||||
|
m.value[0] = 1;
|
||||||
|
m.present = true;
|
||||||
|
|
||||||
|
m.resource.k1 = 7;
|
||||||
|
m.resource.v_dai_dl = 1;
|
||||||
|
TESTASSERT(srsran_ue_dl_nr_ack_insert_m(&ack_info, &m) == SRSRAN_SUCCESS);
|
||||||
|
|
||||||
|
m.resource.k1 = 6;
|
||||||
|
m.resource.v_dai_dl = 2;
|
||||||
|
TESTASSERT(srsran_ue_dl_nr_ack_insert_m(&ack_info, &m) == SRSRAN_SUCCESS);
|
||||||
|
|
||||||
|
m.resource.k1 = 8;
|
||||||
|
m.resource.v_dai_dl = 0;
|
||||||
|
TESTASSERT(srsran_ue_dl_nr_ack_insert_m(&ack_info, &m) == SRSRAN_SUCCESS);
|
||||||
|
|
||||||
|
m.resource.k1 = 5;
|
||||||
|
m.resource.v_dai_dl = 3;
|
||||||
|
TESTASSERT(srsran_ue_dl_nr_ack_insert_m(&ack_info, &m) == SRSRAN_SUCCESS);
|
||||||
|
|
||||||
|
m.resource.k1 = 4;
|
||||||
|
m.resource.v_dai_dl = 0;
|
||||||
|
TESTASSERT(srsran_ue_dl_nr_ack_insert_m(&ack_info, &m) == SRSRAN_SUCCESS);
|
||||||
|
|
||||||
|
// Print trace
|
||||||
|
char str[512] = {};
|
||||||
|
TESTASSERT(srsran_ue_dl_nr_ack_info(&ack_info, str, (uint32_t)sizeof(str)) > SRSRAN_SUCCESS);
|
||||||
|
INFO("%s", str);
|
||||||
|
|
||||||
|
// Generate UCI data
|
||||||
|
srsran_uci_data_nr_t uci_data = {};
|
||||||
|
TESTASSERT(srsran_ue_dl_nr_gen_ack(&cfg, &ack_info, &uci_data) == SRSRAN_SUCCESS);
|
||||||
|
|
||||||
|
// Assert UCI data
|
||||||
|
TESTASSERT(uci_data.cfg.o_ack == 5);
|
||||||
|
|
||||||
|
return SRSRAN_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void usage(char* prog)
|
||||||
|
{
|
||||||
|
printf("Usage: %s [v]\n", prog);
|
||||||
|
printf("\t-v Increase srsran_verbose\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void parse_args(int argc, char** argv)
|
||||||
|
{
|
||||||
|
int opt;
|
||||||
|
while ((opt = getopt(argc, argv, "v")) != -1) {
|
||||||
|
switch (opt) {
|
||||||
|
case 'v':
|
||||||
|
srsran_verbose++;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
usage(argv[0]);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
parse_args(argc, argv);
|
||||||
|
|
||||||
|
// Test only until Format1B - CS
|
||||||
|
TESTASSERT(test_case_1() == SRSRAN_SUCCESS);
|
||||||
|
TESTASSERT(test_case_2() == SRSRAN_SUCCESS);
|
||||||
|
|
||||||
|
printf("Ok\n");
|
||||||
|
return SRSRAN_SUCCESS;
|
||||||
|
}
|
Loading…
Reference in New Issue