annotate frtest/hand-test.c @ 183:452c1d5a6268

libgsmefr BFI w/o data: emit zero output after decoder reset In real-life usage, each EFR decoder session will most likely begin with lots of BFI frames before the first real frame arrives. However, because the spec-defined home state of the decoder is speech rather than CN, our regular logic for BFI w/o data would have to feed pseudorandom noise to the decoder (in the "fixed codebook excitation pulses" part), which is silly to do at the beginning of the decoder session right out of reset. Therefore, let's check reset_flag_old, and if we are still in the reset state, simply emit zero output.
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 03 Jan 2023 00:12:18 +0000
parents d21c68b8f16c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
29
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * This program is a debug aid that allows a developer to hand-craft input
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * to the GSM 06.10 decoder (libgsm) and see what output magnitude it results
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * in, in the style of gsmfr-max-out. This program reads input from an
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * ASCII text file in the same format as gsmrec-dump, performs gsm_implode()
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 * and gsm_decode() operations and reports maximum output magnitude for
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 * each processed frame.
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 */
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <ctype.h>
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include <stdio.h>
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include <stdint.h>
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 #include <stdlib.h>
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 #include <string.h>
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 #include <strings.h>
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 #include <gsm.h>
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 static char *infname;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 static FILE *inf;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 static char linebuf[256];
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 static int lineno;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 static
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 get_line()
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 if (!fgets(linebuf, sizeof linebuf, inf))
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 return 0;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 lineno++;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 if (!index(linebuf, '\n')) {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 fprintf(stderr, "%s line %d: too long or missing newline\n",
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 infname, lineno);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 exit(1);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 }
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 return 1;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 }
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 static
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 read_lar_params(params)
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 gsm_signal *params;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 char *cp;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 unsigned n;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 for (;;) {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 if (!get_line())
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 return 0;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 for (cp = linebuf; isspace(*cp); cp++)
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 ;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 if (*cp)
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 break;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 }
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 if (*cp == '#') {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 cp++;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 if (!isdigit(*cp)) {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 inv_syntax: fprintf(stderr,
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 "%s line %d: invalid syntax (expected LAR)\n",
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 infname, lineno);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 exit(1);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 }
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 while (isdigit(*cp))
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 cp++;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 if (*cp++ != ':')
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 goto inv_syntax;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 while (isspace(*cp))
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 cp++;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 }
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 if (cp[0] != 'F' || cp[1] != 'R' || !isspace(cp[2]))
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 goto inv_syntax;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 cp += 3;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 for (n = 0; n < 8; n++) {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 while (isspace(*cp))
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 cp++;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 if (!isdigit(*cp))
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 goto inv_syntax;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 params[n] = strtoul(cp, &cp, 10);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 if (!isspace(*cp))
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 goto inv_syntax;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 }
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 fputs(linebuf, stdout);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 return 1;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 }
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 static void
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 read_subframe_params(params)
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 gsm_signal *params;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 char *cp;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 unsigned n;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 for (;;) {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 if (!get_line()) {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 fprintf(stderr,
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 "%s bad: EOF in the middle of a frame\n",
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 infname);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 exit(1);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 }
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 for (cp = linebuf; isspace(*cp); cp++)
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 ;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 if (*cp)
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 break;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 }
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 for (n = 0; n < 17; n++) {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 while (isspace(*cp))
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 cp++;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 if (!isdigit(*cp)) {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 inv_syntax: fprintf(stderr,
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 "%s line %d: invalid syntax (expected subframe)\n",
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 infname, lineno);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 exit(1);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110 }
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 params[n] = strtoul(cp, &cp, 10);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112 if (!isspace(*cp))
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113 goto inv_syntax;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114 }
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115 fputs(linebuf, stdout);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 }
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
117
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118 static
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119 read_frame(params)
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120 gsm_signal *params;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
121 {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122 int rc;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
123 unsigned n, idx;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
124
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
125 rc = read_lar_params(params);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126 if (!rc)
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127 return 0;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
128 idx = 8;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129 for (n = 0; n < 4; n++) {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
130 read_subframe_params(params + idx);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
131 idx += 17;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
132 }
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
133 return 1;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
134 }
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
135
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
136 main(argc, argv)
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
137 char **argv;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
138 {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
139 gsm dec_state;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
140 gsm_signal params[76];
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
141 uint8_t frame[33];
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
142 int16_t pcm[160];
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
143 int rc, i;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
144 unsigned samp_abs, samp_max;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
145
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
146 if (argc != 2) {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
147 fprintf(stderr, "usage: %s input-file\n", argv[0]);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
148 exit(1);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
149 }
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
150 infname = argv[1];
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
151 inf = fopen(infname, "r");
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
152 if (!inf) {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
153 perror(infname);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
154 exit(1);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
155 }
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
156 dec_state = gsm_create();
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
157 if (!dec_state) {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
158 fprintf(stderr, "gsm_create() failed!\n");
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
159 exit(1);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
160 }
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
161 for (;;) {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
162 rc = read_frame(params);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
163 if (!rc)
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
164 break;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
165 gsm_implode(dec_state, params, frame);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
166 gsm_decode(dec_state, frame, pcm);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
167 samp_max = 0;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
168 for (i = 0; i < 160; i++) {
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
169 if (pcm[i] >= 0)
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
170 samp_abs = pcm[i];
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
171 else
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
172 samp_abs = -pcm[i];
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
173 if (samp_abs > samp_max)
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
174 samp_max = samp_abs;
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
175 }
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
176 printf(" MAX=%u\n", samp_max);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
177 }
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
178 exit(0);
d21c68b8f16c gsmfr-hand-test: yet another debug aid
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
179 }