FreeCalypso > hg > gsm-net-reveng
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 |
| 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 } |
