diff options
Diffstat (limited to 'tests/amr')
-rw-r--r-- | tests/amr/Makefile.am | 11 | ||||
-rw-r--r-- | tests/amr/amr_test.c | 151 | ||||
-rw-r--r-- | tests/amr/amr_test.ok | 152 |
3 files changed, 314 insertions, 0 deletions
diff --git a/tests/amr/Makefile.am b/tests/amr/Makefile.am new file mode 100644 index 00000000..dc0f1b81 --- /dev/null +++ b/tests/amr/Makefile.am @@ -0,0 +1,11 @@ +AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include +AM_CFLAGS = -Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBOSMOCODEC_CFLAGS) \ + $(LIBOSMOABIS_CFLAGS) $(LIBOSMOTRAU_CFLAGS) +LDADD = $(LIBOSMOCORE_LIBS) $(LIBOSMOGSM_LIBS) $(LIBOSMOCODEC_LIBS) \ + $(LIBOSMOABIS_LIBS) $(LIBOSMOTRAU_LIBS) +noinst_PROGRAMS = amr_test +EXTRA_DIST = amr_test.ok + +misc_test_SOURCES = amr_test.c +misc_test_LDADD = $(top_builddir)/src/common/libbts.a \ + $(LDADD) diff --git a/tests/amr/amr_test.c b/tests/amr/amr_test.c new file mode 100644 index 00000000..4efbf402 --- /dev/null +++ b/tests/amr/amr_test.c @@ -0,0 +1,151 @@ +/* (C) 2021 by sysmocom s.f.m.c. GmbH + * All Rights Reserved + * + * Author: Philipp Maier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +#include <osmo-bts/logging.h> +#include <osmocom/core/utils.h> +#include <stdlib.h> +#include <stdio.h> +#include "../../src/osmo-bts-trx/sched_utils.h" + +struct amr_cmi_test_data { + /* Frame number that marks the beginning of the voice block */ + uint32_t gsm_fn; + /* In uplink: True, when the voice block is a CMI block, false otherwise. */ + /* In downlink: False, when the voice block is a CMI block, true otherwise. */ + bool is_cmi; +}; + +/* The behavior of AHS in subslot 0 and AFS is the same */ +static const struct amr_cmi_test_data testvec_ahs_h0_and_afs[] = { + { 0, true }, + { 4, false }, + { 8, true }, + { 13, false }, + { 17, true }, + { 21, false }, + { 26, true }, + { 30, false }, + { 34, true }, + { 39, false }, + { 43, true }, + { 47, false }, + { 52, true }, + { 56, false }, + { 60, true }, + { 65, false }, + { 69, true }, + { 73, false }, + { 78, true }, + { 82, false }, + { 86, true }, + { 91, false }, + { 95, true }, + { 99, false }, +}; + +static const struct amr_cmi_test_data testvec_ahs_h1[] = { + { 1, true }, + { 5, false }, + { 9, true }, + { 14, false }, + { 18, true }, + { 22, false }, + { 27, true }, + { 31, false }, + { 35, true }, + { 40, false }, + { 44, true }, + { 48, false }, + { 53, true }, + { 57, false }, + { 61, true }, + { 66, false }, + { 70, true }, + { 74, false }, + { 79, true }, + { 83, false }, + { 87, true }, + { 92, false }, + { 96, true }, + { 100, false }, +}; + +static void test_amr_cmi_sched(void) +{ + unsigned int i; + bool res; + + printf("AMR transmission phase (CMI) in relation to GSM FN:\n"); + + for (i = 0; i < ARRAY_SIZE(testvec_ahs_h0_and_afs); i++) { + res = ul_amr_fn_is_cmi(testvec_ahs_h0_and_afs[i].gsm_fn); + printf("Uplink, AMR AHS on HR subslot 0: fn_begin=%u, CMI=%u\n", testvec_ahs_h0_and_afs[i].gsm_fn, res); + OSMO_ASSERT(res == testvec_ahs_h0_and_afs[i].is_cmi); + } + + printf("\n"); + + for (i = 0; i < ARRAY_SIZE(testvec_ahs_h0_and_afs); i++) { + res = dl_amr_fn_is_cmi(testvec_ahs_h0_and_afs[i].gsm_fn); + printf("Downlink, AMR AHS on HR subslot 0: fn_begin=%u, CMI=%u\n", testvec_ahs_h0_and_afs[i].gsm_fn, res); + OSMO_ASSERT(res == !testvec_ahs_h0_and_afs[i].is_cmi); + } + + printf("\n"); + printf("\n"); + + for (i = 0; i < ARRAY_SIZE(testvec_ahs_h1); i++) { + res = ul_amr_fn_is_cmi(testvec_ahs_h1[i].gsm_fn); + printf("Uplink, AMR AHS on HR subslot 1: fn_begin=%u, CMI=%u\n", testvec_ahs_h1[i].gsm_fn, res); + OSMO_ASSERT(res == testvec_ahs_h1[i].is_cmi); + } + + printf("\n"); + + for (i = 0; i < ARRAY_SIZE(testvec_ahs_h1); i++) { + res = dl_amr_fn_is_cmi(testvec_ahs_h1[i].gsm_fn); + printf("Downlink, AMR AHS on HR subslot 1: fn_begin=%u, CMI=%u\n", testvec_ahs_h1[i].gsm_fn, res); + OSMO_ASSERT(res == !testvec_ahs_h1[i].is_cmi); + } + + printf("\n"); + printf("\n"); + + for (i = 0; i < ARRAY_SIZE(testvec_ahs_h0_and_afs); i++) { + res = ul_amr_fn_is_cmi(testvec_ahs_h0_and_afs[i].gsm_fn); + printf("Uplink, AMR AFS: fn_begin=%u, CMI=%u\n", testvec_ahs_h0_and_afs[i].gsm_fn, res); + OSMO_ASSERT(res == testvec_ahs_h0_and_afs[i].is_cmi); + } + + printf("\n"); + + for (i = 0; i < ARRAY_SIZE(testvec_ahs_h0_and_afs); i++) { + res = dl_amr_fn_is_cmi(testvec_ahs_h0_and_afs[i].gsm_fn); + printf("Downlink, AMR AFS: fn_begin=%u, CMI=%u\n", testvec_ahs_h0_and_afs[i].gsm_fn, res); + OSMO_ASSERT(res == !testvec_ahs_h0_and_afs[i].is_cmi); + } +} + +int main(int argc, char **argv) +{ + + test_amr_cmi_sched(); + return EXIT_SUCCESS; +} diff --git a/tests/amr/amr_test.ok b/tests/amr/amr_test.ok new file mode 100644 index 00000000..ec1d1a08 --- /dev/null +++ b/tests/amr/amr_test.ok @@ -0,0 +1,152 @@ +AMR transmission phase (CMI) in relation to GSM FN: +Uplink, AMR AHS on HR subslot 0: fn_begin=0, CMI=1 +Uplink, AMR AHS on HR subslot 0: fn_begin=4, CMI=0 +Uplink, AMR AHS on HR subslot 0: fn_begin=8, CMI=1 +Uplink, AMR AHS on HR subslot 0: fn_begin=13, CMI=0 +Uplink, AMR AHS on HR subslot 0: fn_begin=17, CMI=1 +Uplink, AMR AHS on HR subslot 0: fn_begin=21, CMI=0 +Uplink, AMR AHS on HR subslot 0: fn_begin=26, CMI=1 +Uplink, AMR AHS on HR subslot 0: fn_begin=30, CMI=0 +Uplink, AMR AHS on HR subslot 0: fn_begin=34, CMI=1 +Uplink, AMR AHS on HR subslot 0: fn_begin=39, CMI=0 +Uplink, AMR AHS on HR subslot 0: fn_begin=43, CMI=1 +Uplink, AMR AHS on HR subslot 0: fn_begin=47, CMI=0 +Uplink, AMR AHS on HR subslot 0: fn_begin=52, CMI=1 +Uplink, AMR AHS on HR subslot 0: fn_begin=56, CMI=0 +Uplink, AMR AHS on HR subslot 0: fn_begin=60, CMI=1 +Uplink, AMR AHS on HR subslot 0: fn_begin=65, CMI=0 +Uplink, AMR AHS on HR subslot 0: fn_begin=69, CMI=1 +Uplink, AMR AHS on HR subslot 0: fn_begin=73, CMI=0 +Uplink, AMR AHS on HR subslot 0: fn_begin=78, CMI=1 +Uplink, AMR AHS on HR subslot 0: fn_begin=82, CMI=0 +Uplink, AMR AHS on HR subslot 0: fn_begin=86, CMI=1 +Uplink, AMR AHS on HR subslot 0: fn_begin=91, CMI=0 +Uplink, AMR AHS on HR subslot 0: fn_begin=95, CMI=1 +Uplink, AMR AHS on HR subslot 0: fn_begin=99, CMI=0 + +Downlink, AMR AHS on HR subslot 0: fn_begin=0, CMI=0 +Downlink, AMR AHS on HR subslot 0: fn_begin=4, CMI=1 +Downlink, AMR AHS on HR subslot 0: fn_begin=8, CMI=0 +Downlink, AMR AHS on HR subslot 0: fn_begin=13, CMI=1 +Downlink, AMR AHS on HR subslot 0: fn_begin=17, CMI=0 +Downlink, AMR AHS on HR subslot 0: fn_begin=21, CMI=1 +Downlink, AMR AHS on HR subslot 0: fn_begin=26, CMI=0 +Downlink, AMR AHS on HR subslot 0: fn_begin=30, CMI=1 +Downlink, AMR AHS on HR subslot 0: fn_begin=34, CMI=0 +Downlink, AMR AHS on HR subslot 0: fn_begin=39, CMI=1 +Downlink, AMR AHS on HR subslot 0: fn_begin=43, CMI=0 +Downlink, AMR AHS on HR subslot 0: fn_begin=47, CMI=1 +Downlink, AMR AHS on HR subslot 0: fn_begin=52, CMI=0 +Downlink, AMR AHS on HR subslot 0: fn_begin=56, CMI=1 +Downlink, AMR AHS on HR subslot 0: fn_begin=60, CMI=0 +Downlink, AMR AHS on HR subslot 0: fn_begin=65, CMI=1 +Downlink, AMR AHS on HR subslot 0: fn_begin=69, CMI=0 +Downlink, AMR AHS on HR subslot 0: fn_begin=73, CMI=1 +Downlink, AMR AHS on HR subslot 0: fn_begin=78, CMI=0 +Downlink, AMR AHS on HR subslot 0: fn_begin=82, CMI=1 +Downlink, AMR AHS on HR subslot 0: fn_begin=86, CMI=0 +Downlink, AMR AHS on HR subslot 0: fn_begin=91, CMI=1 +Downlink, AMR AHS on HR subslot 0: fn_begin=95, CMI=0 +Downlink, AMR AHS on HR subslot 0: fn_begin=99, CMI=1 + + +Uplink, AMR AHS on HR subslot 1: fn_begin=1, CMI=1 +Uplink, AMR AHS on HR subslot 1: fn_begin=5, CMI=0 +Uplink, AMR AHS on HR subslot 1: fn_begin=9, CMI=1 +Uplink, AMR AHS on HR subslot 1: fn_begin=14, CMI=0 +Uplink, AMR AHS on HR subslot 1: fn_begin=18, CMI=1 +Uplink, AMR AHS on HR subslot 1: fn_begin=22, CMI=0 +Uplink, AMR AHS on HR subslot 1: fn_begin=27, CMI=1 +Uplink, AMR AHS on HR subslot 1: fn_begin=31, CMI=0 +Uplink, AMR AHS on HR subslot 1: fn_begin=35, CMI=1 +Uplink, AMR AHS on HR subslot 1: fn_begin=40, CMI=0 +Uplink, AMR AHS on HR subslot 1: fn_begin=44, CMI=1 +Uplink, AMR AHS on HR subslot 1: fn_begin=48, CMI=0 +Uplink, AMR AHS on HR subslot 1: fn_begin=53, CMI=1 +Uplink, AMR AHS on HR subslot 1: fn_begin=57, CMI=0 +Uplink, AMR AHS on HR subslot 1: fn_begin=61, CMI=1 +Uplink, AMR AHS on HR subslot 1: fn_begin=66, CMI=0 +Uplink, AMR AHS on HR subslot 1: fn_begin=70, CMI=1 +Uplink, AMR AHS on HR subslot 1: fn_begin=74, CMI=0 +Uplink, AMR AHS on HR subslot 1: fn_begin=79, CMI=1 +Uplink, AMR AHS on HR subslot 1: fn_begin=83, CMI=0 +Uplink, AMR AHS on HR subslot 1: fn_begin=87, CMI=1 +Uplink, AMR AHS on HR subslot 1: fn_begin=92, CMI=0 +Uplink, AMR AHS on HR subslot 1: fn_begin=96, CMI=1 +Uplink, AMR AHS on HR subslot 1: fn_begin=100, CMI=0 + +Downlink, AMR AHS on HR subslot 1: fn_begin=1, CMI=0 +Downlink, AMR AHS on HR subslot 1: fn_begin=5, CMI=1 +Downlink, AMR AHS on HR subslot 1: fn_begin=9, CMI=0 +Downlink, AMR AHS on HR subslot 1: fn_begin=14, CMI=1 +Downlink, AMR AHS on HR subslot 1: fn_begin=18, CMI=0 +Downlink, AMR AHS on HR subslot 1: fn_begin=22, CMI=1 +Downlink, AMR AHS on HR subslot 1: fn_begin=27, CMI=0 +Downlink, AMR AHS on HR subslot 1: fn_begin=31, CMI=1 +Downlink, AMR AHS on HR subslot 1: fn_begin=35, CMI=0 +Downlink, AMR AHS on HR subslot 1: fn_begin=40, CMI=1 +Downlink, AMR AHS on HR subslot 1: fn_begin=44, CMI=0 +Downlink, AMR AHS on HR subslot 1: fn_begin=48, CMI=1 +Downlink, AMR AHS on HR subslot 1: fn_begin=53, CMI=0 +Downlink, AMR AHS on HR subslot 1: fn_begin=57, CMI=1 +Downlink, AMR AHS on HR subslot 1: fn_begin=61, CMI=0 +Downlink, AMR AHS on HR subslot 1: fn_begin=66, CMI=1 +Downlink, AMR AHS on HR subslot 1: fn_begin=70, CMI=0 +Downlink, AMR AHS on HR subslot 1: fn_begin=74, CMI=1 +Downlink, AMR AHS on HR subslot 1: fn_begin=79, CMI=0 +Downlink, AMR AHS on HR subslot 1: fn_begin=83, CMI=1 +Downlink, AMR AHS on HR subslot 1: fn_begin=87, CMI=0 +Downlink, AMR AHS on HR subslot 1: fn_begin=92, CMI=1 +Downlink, AMR AHS on HR subslot 1: fn_begin=96, CMI=0 +Downlink, AMR AHS on HR subslot 1: fn_begin=100, CMI=1 + + +Uplink, AMR AFS: fn_begin=0, CMI=1 +Uplink, AMR AFS: fn_begin=4, CMI=0 +Uplink, AMR AFS: fn_begin=8, CMI=1 +Uplink, AMR AFS: fn_begin=13, CMI=0 +Uplink, AMR AFS: fn_begin=17, CMI=1 +Uplink, AMR AFS: fn_begin=21, CMI=0 +Uplink, AMR AFS: fn_begin=26, CMI=1 +Uplink, AMR AFS: fn_begin=30, CMI=0 +Uplink, AMR AFS: fn_begin=34, CMI=1 +Uplink, AMR AFS: fn_begin=39, CMI=0 +Uplink, AMR AFS: fn_begin=43, CMI=1 +Uplink, AMR AFS: fn_begin=47, CMI=0 +Uplink, AMR AFS: fn_begin=52, CMI=1 +Uplink, AMR AFS: fn_begin=56, CMI=0 +Uplink, AMR AFS: fn_begin=60, CMI=1 +Uplink, AMR AFS: fn_begin=65, CMI=0 +Uplink, AMR AFS: fn_begin=69, CMI=1 +Uplink, AMR AFS: fn_begin=73, CMI=0 +Uplink, AMR AFS: fn_begin=78, CMI=1 +Uplink, AMR AFS: fn_begin=82, CMI=0 +Uplink, AMR AFS: fn_begin=86, CMI=1 +Uplink, AMR AFS: fn_begin=91, CMI=0 +Uplink, AMR AFS: fn_begin=95, CMI=1 +Uplink, AMR AFS: fn_begin=99, CMI=0 + +Downlink, AMR AFS: fn_begin=0, CMI=0 +Downlink, AMR AFS: fn_begin=4, CMI=1 +Downlink, AMR AFS: fn_begin=8, CMI=0 +Downlink, AMR AFS: fn_begin=13, CMI=1 +Downlink, AMR AFS: fn_begin=17, CMI=0 +Downlink, AMR AFS: fn_begin=21, CMI=1 +Downlink, AMR AFS: fn_begin=26, CMI=0 +Downlink, AMR AFS: fn_begin=30, CMI=1 +Downlink, AMR AFS: fn_begin=34, CMI=0 +Downlink, AMR AFS: fn_begin=39, CMI=1 +Downlink, AMR AFS: fn_begin=43, CMI=0 +Downlink, AMR AFS: fn_begin=47, CMI=1 +Downlink, AMR AFS: fn_begin=52, CMI=0 +Downlink, AMR AFS: fn_begin=56, CMI=1 +Downlink, AMR AFS: fn_begin=60, CMI=0 +Downlink, AMR AFS: fn_begin=65, CMI=1 +Downlink, AMR AFS: fn_begin=69, CMI=0 +Downlink, AMR AFS: fn_begin=73, CMI=1 +Downlink, AMR AFS: fn_begin=78, CMI=0 +Downlink, AMR AFS: fn_begin=82, CMI=1 +Downlink, AMR AFS: fn_begin=86, CMI=0 +Downlink, AMR AFS: fn_begin=91, CMI=1 +Downlink, AMR AFS: fn_begin=95, CMI=0 +Downlink, AMR AFS: fn_begin=99, CMI=1 |