blob: f3003133a35405f2bff9cc4b5383673626524890 [file] [log] [blame]
Philipp Maier898c9c62020-02-06 14:25:01 +01001/*
2 * (C) 2019 by sysmocom s.f.m.c. GmbH <info@sysmocom.de>
3 * Author: Philipp Maier <pmaier@sysmocom.de>
4 * All Rights Reserved
5 *
6 * SPDX-License-Identifier: GPL-2.0+
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License along
19 * with this program; if not, write to the Free Software Foundation, Inc.,
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 *
22 */
23
24#include <string.h>
25#include <stdio.h>
26#include <stdint.h>
27#include <osmocom/core/utils.h>
28#include <osmocom/coding/gsm0503_amr_dtx.h>
29
30char sample_afs_sid_frame[] =
31 {
32"111111110000000011001100101010100100010011111111001000100111011110011001001100111100110010011001111011100100010011111111001000100111011110011001001100111100110010011001111011100100010011111111001000100111011110011001001100111100110010011001111011100100010011111111001000100111011110011001001100111100110010011001111011100100010011111111001000100111011110011001001100111100110010011001111011100100010011111111001000100111011110011001001100111100110010011001"
33};
34
35char sample_afs_sid_update_frame[] =
36 {
37"111111110000000011001100101010100000010000001111111100101011011110001001000000110111110000001001011111101111010011001111100000101000011111001001111100110111110011111001001111101100010001001111000000100100011100111001100000111000110000111001010011101111010011111111010000101100011100111001111100110111110011111001110011101000010010001111110000100000011111001001011100110011110010111001101111100011010001111111001100100100011111111001000000110000110000001001"
38};
39
40char sample_afs_onset_frame[] =
41 {
42"111111110000000011001100101010100000111100000000111111000100101000111111100000000111110010001010001111110100000011111100111110100100111111000000110011001011101001001111011100001011110000001010010011111100000000111100111110101000111110110000111111000000101011111111010000001100110000111010111111111000000010111100000010100100111100110000100011001000101000111111101100001011110000111010011111110011000010111100101110101100111111000000010011001111101000001111"
43};
44
45char sample_ahs_sid_update_frame[] =
46 {
47"111100001100101010110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110000110110100011001000011010000000000000001111010010000000000001000000000010110000000011001000000000000000100000101000000000000000001010100000010010000000000010000111110001110110110011001101000000000100100011001000001010000100100000000011"
48};
49
50char sample_ahs_sid_first_p1_frame[] =
51 {
52"111100001100101001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001111001001001011010110001101100101001110001111001110100110010000111101110110110000100100011111001001110000011110110001010010101100001010100000111101110110001010000111110001110110110011001101001111000011101001010011100011000111010110000011"
53};
54
55char sample_ahs_sid_first_p2_frame[] =
56 {
57"111110100100000010100000110111001110101100000100101001011101100011101010010000001010010010001100101010100100010111110101110011011110101000010100111000001001110111101110010101001110000010001101101011110000000011100100110110011111100011001000001101100101001110001111001110100110010000111101110110110000100100011111001001110000011110110001010010101100001010100000111101110110001010000111110001110110110011001101001111000011101001010011100011000111010110000011"
58};
59
60char sample_ahs_onset_frame[] =
61 {
62"111101011000101001010000111001000111011110000000011110001110010011011111100000101101101001101110011111010000000001010010110001101101110100000010011110101100010001011101101010000111100011101100111101011010100011110010110001001111100011001000011010000000000000001010010010000000000001000000000000100000000011001000000000000000100000101000000000000000010010000101010010000000000010101100111110101000110110011001000000000100100011001000001010000100100000001100"
63};
64
65char sample_sid_first_inh_frame[] =
66 {
67"xBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBx1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0x0x0x0x1x1x0x1x1x0"
68};
69
70char sample_sid_update_inh_frame[] =
71 {
72"xBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBx0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1x1x1x1x0x0x1x0x0x1"
73};
74
75unsigned int string_to_ubit(ubit_t * ubits, char *string)
76{
77 unsigned int len;
78 unsigned int i;
79
80 len = strlen(string);
81
82 for (i = 0; i < len; i++) {
83 ubits[i] = string[i] & 1;
84 }
85
86 return len;
87}
88
89void test_gsm0503_detect_afs_dtx_frame(char *string)
90{
91 ubit_t ubits[512];
92 uint8_t dtx_frame_type;
93 int n_errors;
94 int n_bits_total;
95
96 string_to_ubit(ubits, string);
97 dtx_frame_type = gsm0503_detect_afs_dtx_frame(&n_errors, &n_bits_total, ubits);
98 printf(" ==> %s, n_errors=%i, n_bits_total=%i\n", gsm0503_amr_dtx_frame_name(dtx_frame_type),
99 n_errors, n_bits_total);
100}
101
102void test_gsm0503_detect_ahs_dtx_frame(char *string)
103{
104 ubit_t ubits[512];
105 uint8_t dtx_frame_type;
106 int n_errors;
107 int n_bits_total;
108
109 string_to_ubit(ubits, string);
110 dtx_frame_type = gsm0503_detect_ahs_dtx_frame(&n_errors, &n_bits_total, ubits);
111 printf(" ==> %s, n_errors=%i, n_bits_total=%i\n", gsm0503_amr_dtx_frame_name(dtx_frame_type),
112 n_errors, n_bits_total);
113}
114
115int main(int argc, char **argv)
116{
117 printf("FR AMR DTX FRAMES:\n");
118 test_gsm0503_detect_afs_dtx_frame(sample_afs_sid_frame);
119 test_gsm0503_detect_afs_dtx_frame(sample_afs_sid_update_frame);
120 test_gsm0503_detect_afs_dtx_frame(sample_afs_onset_frame);
121 printf("HR AMR DTX FRAMES:\n");
122 test_gsm0503_detect_ahs_dtx_frame(sample_ahs_sid_update_frame);
123 test_gsm0503_detect_ahs_dtx_frame(sample_ahs_sid_first_p1_frame);
124 test_gsm0503_detect_ahs_dtx_frame(sample_ahs_sid_first_p2_frame);
125 test_gsm0503_detect_ahs_dtx_frame(sample_ahs_onset_frame);
126 test_gsm0503_detect_ahs_dtx_frame(sample_sid_first_inh_frame);
127 test_gsm0503_detect_ahs_dtx_frame(sample_sid_update_inh_frame);
128
129 return EXIT_SUCCESS;
130}