diff options
Diffstat (limited to 'tests/dtx/dtx_gsm0503_test.c')
-rw-r--r-- | tests/dtx/dtx_gsm0503_test.c | 130 |
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; +} |