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