annotate trau-decode/hr-guts.c @ 110:597640501626

trau-decode HR guts: prepare for integration with AMR8 A new investigation program is being developed that needs to decode both classic HR and AMR8 frame types on 8 kbit/s channels. Each side needs to be prepared for coexistence.
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 22 Dec 2025 06:30:43 +0000
parents e78c6b1ecb91
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
131e0f1972bb beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
74
e78c6b1ecb91 trau-decode: refactor trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 73
diff changeset
2 * This module contains the guts of trau-hr-dump program in terms of
e78c6b1ecb91 trau-decode: refactor trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 73
diff changeset
3 * HRv1 frame decoding. It has been factored out to facilitate creation
e78c6b1ecb91 trau-decode: refactor trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 73
diff changeset
4 * of trau-hr-dump-hex version.
0
131e0f1972bb beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 */
131e0f1972bb beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6
131e0f1972bb beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #include <stdio.h>
131e0f1972bb beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include <stdint.h>
131e0f1972bb beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <stdlib.h>
131e0f1972bb beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <string.h>
131e0f1972bb beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include <strings.h>
28
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
12 #include "gsmhr_unpack.h"
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
13 #include "osmo_bits.h"
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
14
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
15 /*
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
16 * EFR TRAU parity (also used for HR)
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
17 *
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
18 * g(x) = x^3 + x^1 + 1
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
19 */
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
20 static const struct osmo_crc8gen_code gsm0860_efr_crc3 = {
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
21 .bits = 3,
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
22 .poly = 0x3,
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
23 .init = 0x0,
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
24 .remainder = 0x7,
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
25 };
0
131e0f1972bb beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26
110
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
27 static unsigned
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
28 bits_to_num(bits, nbits)
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
29 ubit_t *bits;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
30 unsigned nbits;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
31 {
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
32 unsigned accum;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
33 unsigned n;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
34
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
35 accum = 0;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
36 for (n = 0; n < nbits; n++) {
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
37 accum <<= 1;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
38 if (*bits)
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
39 accum |= 1;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
40 bits++;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
41 }
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
42 return accum;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
43 }
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
44
28
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
45 static int
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
46 bit_parity(bits, nbits)
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
47 ubit_t *bits;
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
48 unsigned nbits;
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
49 {
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
50 unsigned n, sum;
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
51
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
52 sum = 0;
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
53 for (n = 0; n < nbits; n++)
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
54 sum += bits[n];
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
55 return sum & 1;
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
56 }
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
57
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
58 static void
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
59 bits2bytes(bits, bytes, nbytes)
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
60 ubit_t *bits;
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
61 uint8_t *bytes;
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
62 unsigned nbytes;
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
63 {
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
64 unsigned n, m, acc;
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
65
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
66 for (n = 0; n < nbytes; n++) {
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
67 acc = 0;
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
68 for (m = 0; m < 8; m++) {
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
69 acc <<= 1;
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
70 acc |= *bits++;
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
71 }
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
72 *bytes++ = acc;
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
73 }
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
74 }
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
75
110
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
76 static void
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
77 print_hr1_speech(frame)
74
e78c6b1ecb91 trau-decode: refactor trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 73
diff changeset
78 ubit_t *frame;
73
06f241846c67 trau-hr-dump: add -r option for raw frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 42
diff changeset
79 {
28
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
80 ubit_t xc_bits[6], dbits[112];
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
81 uint8_t hr_bytes[14];
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
82 int16_t params[18];
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
83 int crc_stat;
27
f508dacf2cf9 trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
84
28
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
85 bcopy(frame + 14, xc_bits, 2);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
86 bcopy(frame + 18, xc_bits + 2, 4);
110
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
87 printf(" XC1-XC6: %u%u%u%u%u%u OP %s\n", xc_bits[0], xc_bits[1],
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
88 xc_bits[2], xc_bits[3], xc_bits[4], xc_bits[5],
28
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
89 bit_parity(xc_bits, 6) ? "good" : "bad");
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
90 bcopy(frame + 22, dbits, 2);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
91 bcopy(frame + 25, dbits + 2, 7);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
92 bcopy(frame + 33, dbits + 9, 7);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
93 bcopy(frame + 41, dbits + 16, 7);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
94 bcopy(frame + 49, dbits + 23, 7);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
95 bcopy(frame + 57, dbits + 30, 7);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
96 bcopy(frame + 65, dbits + 37, 7);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
97 bcopy(frame + 76, dbits + 44, 4);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
98 bcopy(frame + 81, dbits + 48, 7);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
99 bcopy(frame + 89, dbits + 55, 7);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
100 bcopy(frame + 97, dbits + 62, 7);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
101 bcopy(frame + 105, dbits + 69, 7);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
102 bcopy(frame + 113, dbits + 76, 7);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
103 bcopy(frame + 121, dbits + 83, 7);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
104 bcopy(frame + 129, dbits + 90, 7);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
105 bcopy(frame + 137, dbits + 97, 7);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
106 bcopy(frame + 145, dbits + 104, 7);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
107 dbits[111] = frame[153];
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
108 crc_stat = osmo_crc8gen_check_bits(&gsm0860_efr_crc3, dbits, 44,
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
109 frame + 73);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
110 printf(" CRC %s\n", crc_stat ? "bad" : "good");
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
111 bits2bytes(dbits, hr_bytes, 14);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
112 gsmhr_unpack_ts101318(hr_bytes, params);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
113 printf(" R0=%02x LPC=%03x,%03x,%02x Int=%x Mode=%x\n", params[0],
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
114 params[1], params[2], params[3], params[4], params[5]);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
115 printf(params[5] ? " s1=%02x,%03x,%02x" : " s1=%02x,%02x,%02x",
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
116 params[6], params[7], params[8]);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
117 printf(params[5] ? " s2=%x,%03x,%02x" : " s2=%02x,%02x,%02x",
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
118 params[9], params[10], params[11]);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
119 printf(params[5] ? " s3=%x,%03x,%02x" : " s3=%02x,%02x,%02x",
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
120 params[12], params[13], params[14]);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
121 printf(params[5] ? " s4=%x,%03x,%02x\n" : " s4=%02x,%02x,%02x\n",
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
122 params[15], params[16], params[17]);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
123 printf(" C6-C9: %u%u%u%u\n", frame[154], frame[155], frame[156],
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
124 frame[157]);
9bcdb091c24d trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
125 printf(" T1=%u T2=%u\n", frame[158], frame[159]);
0
131e0f1972bb beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126 }
110
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
127
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
128 print_gsmhr_frame(frame)
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
129 ubit_t *frame;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
130 {
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
131 unsigned c1_3 = bits_to_num(frame + 9, 3);
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
132 char *desc;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
133
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
134 switch (c1_3) {
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
135 case 0:
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
136 desc = "speech";
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
137 break;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
138 case 1:
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
139 desc = "data";
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
140 break;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
141 case 2:
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
142 desc = "O&M";
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
143 break;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
144 case 7:
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
145 desc = "GCF";
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
146 break;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
147 default:
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
148 desc = "unknown";
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
149 }
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
150 printf(" HR C1-C5: %u%u%u%u%u (%s) OP %s\n", frame[9], frame[10],
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
151 frame[11], frame[12], frame[13], desc,
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
152 bit_parity(frame + 9, 5) ? "good" : "bad");
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
153 /* return number of T bits */
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
154 switch (c1_3) {
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
155 case 0:
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
156 print_hr1_speech(frame);
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
157 return 2;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
158 case 1:
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
159 /* TODO: print data frame */
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
160 return 0;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
161 case 2:
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
162 /* TODO: print O&M frame */
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
163 return 0;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
164 case 7:
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
165 /* TODO: print GCF */
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
166 return 2;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
167 default:
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
168 return 0;
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
169 }
597640501626 trau-decode HR guts: prepare for integration with AMR8
Mychaela Falconia <falcon@freecalypso.org>
parents: 74
diff changeset
170 }