aboutsummaryrefslogtreecommitdiffstats
path: root/tests/dtx/dtx_gsm0503_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/dtx/dtx_gsm0503_test.c')
-rw-r--r--tests/dtx/dtx_gsm0503_test.c130
1 files changed, 130 insertions, 0 deletions
diff --git a/tests/dtx/dtx_gsm0503_test.c b/tests/dtx/dtx_gsm0503_test.c
new file mode 100644
index 00000000..f3003133
--- /dev/null
+++ b/tests/dtx/dtx_gsm0503_test.c
@@ -0,0 +1,130 @@
+/*
+ * (C) 2019 by sysmocom s.f.m.c. GmbH <info@sysmocom.de>
+ * Author: Philipp Maier <pmaier@sysmocom.de>
+ * All Rights Reserved
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 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 General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <osmocom/core/utils.h>
+#include <osmocom/coding/gsm0503_amr_dtx.h>
+
+char sample_afs_sid_frame[] =
+ {
+"111111110000000011001100101010100100010011111111001000100111011110011001001100111100110010011001111011100100010011111111001000100111011110011001001100111100110010011001111011100100010011111111001000100111011110011001001100111100110010011001111011100100010011111111001000100111011110011001001100111100110010011001111011100100010011111111001000100111011110011001001100111100110010011001111011100100010011111111001000100111011110011001001100111100110010011001"
+};
+
+char sample_afs_sid_update_frame[] =
+ {
+"111111110000000011001100101010100000010000001111111100101011011110001001000000110111110000001001011111101111010011001111100000101000011111001001111100110111110011111001001111101100010001001111000000100100011100111001100000111000110000111001010011101111010011111111010000101100011100111001111100110111110011111001110011101000010010001111110000100000011111001001011100110011110010111001101111100011010001111111001100100100011111111001000000110000110000001001"
+};
+
+char sample_afs_onset_frame[] =
+ {
+"111111110000000011001100101010100000111100000000111111000100101000111111100000000111110010001010001111110100000011111100111110100100111111000000110011001011101001001111011100001011110000001010010011111100000000111100111110101000111110110000111111000000101011111111010000001100110000111010111111111000000010111100000010100100111100110000100011001000101000111111101100001011110000111010011111110011000010111100101110101100111111000000010011001111101000001111"
+};
+
+char sample_ahs_sid_update_frame[] =
+ {
+"111100001100101010110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110100011001000011010000000000000001111010010000000000001000000000010110000000011001000000000000000100000101000000000000000001010100000010010000000000010000111110001110110110011001101000000000100100011001000001010000100100000000011"
+};
+
+char sample_ahs_sid_first_p1_frame[] =
+ {
+"111100001100101001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001001011010110001101100101001110001111001110100110010000111101110110110000100100011111001001110000011110110001010010101100001010100000111101110110001010000111110001110110110011001101001111000011101001010011100011000111010110000011"
+};
+
+char sample_ahs_sid_first_p2_frame[] =
+ {
+"111110100100000010100000110111001110101100000100101001011101100011101010010000001010010010001100101010100100010111110101110011011110101000010100111000001001110111101110010101001110000010001101101011110000000011100100110110011111100011001000001101100101001110001111001110100110010000111101110110110000100100011111001001110000011110110001010010101100001010100000111101110110001010000111110001110110110011001101001111000011101001010011100011000111010110000011"
+};
+
+char sample_ahs_onset_frame[] =
+ {
+"111101011000101001010000111001000111011110000000011110001110010011011111100000101101101001101110011111010000000001010010110001101101110100000010011110101100010001011101101010000111100011101100111101011010100011110010110001001111100011001000011010000000000000001010010010000000000001000000000000100000000011001000000000000000100000101000000000000000010010000101010010000000000010101100111110101000110110011001000000000100100011001000001010000100100000001100"
+};
+
+char sample_sid_first_inh_frame[] =
+ {
+"xBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBx1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0"
+};
+
+char sample_sid_update_inh_frame[] =
+ {
+"xBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBx0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1"
+};
+
+unsigned int string_to_ubit(ubit_t * ubits, char *string)
+{
+ unsigned int len;
+ unsigned int i;
+
+ len = strlen(string);
+
+ for (i = 0; i < len; i++) {
+ ubits[i] = string[i] & 1;
+ }
+
+ return len;
+}
+
+void test_gsm0503_detect_afs_dtx_frame(char *string)
+{
+ ubit_t ubits[512];
+ uint8_t dtx_frame_type;
+ int n_errors;
+ int n_bits_total;
+
+ string_to_ubit(ubits, string);
+ dtx_frame_type = gsm0503_detect_afs_dtx_frame(&n_errors, &n_bits_total, ubits);
+ printf(" ==> %s, n_errors=%i, n_bits_total=%i\n", gsm0503_amr_dtx_frame_name(dtx_frame_type),
+ n_errors, n_bits_total);
+}
+
+void test_gsm0503_detect_ahs_dtx_frame(char *string)
+{
+ ubit_t ubits[512];
+ uint8_t dtx_frame_type;
+ int n_errors;
+ int n_bits_total;
+
+ string_to_ubit(ubits, string);
+ dtx_frame_type = gsm0503_detect_ahs_dtx_frame(&n_errors, &n_bits_total, ubits);
+ printf(" ==> %s, n_errors=%i, n_bits_total=%i\n", gsm0503_amr_dtx_frame_name(dtx_frame_type),
+ n_errors, n_bits_total);
+}
+
+int main(int argc, char **argv)
+{
+ printf("FR AMR DTX FRAMES:\n");
+ test_gsm0503_detect_afs_dtx_frame(sample_afs_sid_frame);
+ test_gsm0503_detect_afs_dtx_frame(sample_afs_sid_update_frame);
+ test_gsm0503_detect_afs_dtx_frame(sample_afs_onset_frame);
+ printf("HR AMR DTX FRAMES:\n");
+ test_gsm0503_detect_ahs_dtx_frame(sample_ahs_sid_update_frame);
+ test_gsm0503_detect_ahs_dtx_frame(sample_ahs_sid_first_p1_frame);
+ test_gsm0503_detect_ahs_dtx_frame(sample_ahs_sid_first_p2_frame);
+ test_gsm0503_detect_ahs_dtx_frame(sample_ahs_onset_frame);
+ test_gsm0503_detect_ahs_dtx_frame(sample_sid_first_inh_frame);
+ test_gsm0503_detect_ahs_dtx_frame(sample_sid_update_inh_frame);
+
+ return EXIT_SUCCESS;
+}