FreeCalypso > hg > gsm-codec-lib
annotate amrconv/tw5c-dump.c @ 593:fd6a394ab4cd
amrconv: new program tw5c-dump
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Tue, 18 Nov 2025 07:34:23 +0000 |
| parents | |
| children |
| rev | line source |
|---|---|
|
593
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This program reads a TW-TS-005 Annex C hexadecimal file |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * and dumps all frames in human-readable form. |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 */ |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include <stdio.h> |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <stdint.h> |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <stdlib.h> |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <string.h> |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <strings.h> |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include <unistd.h> |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include "../libtest/tw5reader.h" |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include "amr_defs.h" |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 extern char *amr_mode_names[16]; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 extern const uint8_t pl_total_bytes_oa[9], pl_total_bytes_bwe[9]; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 static char *infname; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 static int is_bwe; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 static void |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 process_cmdline(argc, argv) |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 char **argv; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 int opt; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 extern int optind; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 while ((opt = getopt(argc, argv, "b")) != EOF) { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 switch (opt) { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 case 'b': |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 is_bwe = 1; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 continue; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 default: |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 usage: |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 fprintf(stderr, "usage: %s [-b] hex-file\n", argv[0]); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 exit(1); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 } |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 } |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 if (argc != optind + 1) |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 goto usage; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 infname = argv[optind]; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 } |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 static void |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 if1_bwe_to_oa(in, out, mode) |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 uint8_t *in, *out; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 unsigned mode; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 unsigned out_len, n; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 out_len = pl_total_bytes_oa[mode] - 2; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 for (n = 0; n < out_len; n++) |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 out[n] = (in[n+1] << 2) | (in[n+2] >> 6); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 } |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 static void |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 process_file() |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 FILE *hexf; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 unsigned lineno; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 uint8_t frame[TWTS005_MAX_FRAME]; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 unsigned frame_len, base_len, cmr, ft, q, sid_byte, sti, sid_mode; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 const uint8_t *pl_len_table; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 uint8_t frm_to_oa[MAX_IF1_BYTES]; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 uint8_t ser_bits[MAX_SERIAL_SIZE]; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 uint16_t params[MAX_PRM_SIZE]; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 unsigned ptr; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 int rc; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 hexf = fopen(infname, "r"); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 if (!hexf) { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 perror(infname); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 exit(1); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 } |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 lineno = 0; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 for (;;) { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 rc = twts005_read_frame(hexf, &lineno, frame, &frame_len); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 if (rc < 0) { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 fprintf(stderr, "%s line %u: not valid TW-TS-005\n", |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 infname, lineno); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 exit(1); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 } |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 if (!rc) |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 break; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 if (frame_len == 0) { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 printf("line %u: NULL frame\n", lineno); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 continue; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 } |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 if (frame_len < 2) { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 inv_payload: fprintf(stderr, |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 "%s line %u: payload is not valid AMR %s\n", |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 infname, lineno, is_bwe ? "BWE" : "OA"); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 exit(1); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 } |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 cmr = frame[0] >> 4; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 if (cmr > MR122 && cmr != MODE_NO_DATA) |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 goto inv_payload; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 if (is_bwe) { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 if (frame[0] & 0x08) |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 goto inv_payload; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 ft = ((frame[0] & 0x07) << 1) | |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 ((frame[1] & 0x80) >> 7); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 q = (frame[1] & 0x40) >> 6; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 pl_len_table = pl_total_bytes_bwe; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 } else { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 if (frame[1] & 0x80) |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 goto inv_payload; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 ft = (frame[1] & 0x78) >> 3; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 q = (frame[1] & 0x04) >> 2; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 pl_len_table = pl_total_bytes_oa; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 } |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 if (ft <= MRDTX) |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 base_len = pl_len_table[ft]; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 else if (ft == MODE_NO_DATA) |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 base_len = 2; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 else |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 goto inv_payload; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 if (frame_len < base_len) |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 goto inv_payload; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 printf("line %u: CMR=%u (%s) FT=%u (%s) Q=%u\n", lineno, cmr, |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 amr_mode_names[cmr], ft, amr_mode_names[ft], q); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 if (ft != MODE_NO_DATA) { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 if (is_bwe) { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 if1_bwe_to_oa(frame, frm_to_oa, ft); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 amr_if1_unpack(frm_to_oa, ser_bits, ft); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 } else { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 amr_if1_unpack(frame + 2, ser_bits, ft); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 } |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 reassemble_amr_params(ser_bits, params, ft); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 dump_amr_params(params, ft); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 } |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 if (ft == MRDTX) { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 sid_byte = is_bwe ? frm_to_oa[4] : frame[6]; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 sti = (sid_byte & 0x10) >> 4; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 sid_mode = 0; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 if (sid_byte & 0x08) |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 sid_mode |= 1; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 if (sid_byte & 0x04) |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 sid_mode |= 2; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 if (sid_byte & 0x02) |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 sid_mode |= 4; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 printf(" SID_%s Mode=%u (%s)\n", |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 sti ? "UPDATE" : "FIRST", sid_mode, |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 amr_mode_names[sid_mode]); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 } |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 if (is_bwe) |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 continue; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 /* TW-TS-006 extensions */ |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 if (frame[0] & 0x08) |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 printf(" RIF=%u\n", (frame[0] & 0x04) >> 2); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 ptr = base_len; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 if ((ft == MODE_NO_DATA) && (frame[1] & 0x02)) { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 fputs(" FT15 ext octet: ", stdout); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 if (ptr >= frame_len) { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 puts("indicated, but not present"); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 continue; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 } |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 /* repurpose sti and sid_mode vars */ |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 sti = (frame[ptr] & 0x80) >> 7; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 sid_mode = frame[ptr] & 7; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 printf("%s, Mode=%u (%s)\n", sti ? "Onset" : "No_Data", |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 sid_mode, amr_mode_names[sid_mode]); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 ptr++; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 } |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 if (frame[0] & 0x02) { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 if (ptr >= frame_len) { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 puts(" TA+DTXd+TFOE octet missing!"); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 continue; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 } |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 printf(" TA=%u DTXd=%u TFOE=%u\n", frame[ptr] >> 2, |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 (frame[ptr] & 0x02) >> 1, frame[ptr] & 0x01); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 ptr++; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 } |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 if (frame[0] & 0x01) |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 puts(" Rel4 Config_Prot present, not decoded"); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 if ((ft == MODE_NO_DATA) && (frame[1] & 0x01)) |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 puts(" Rel5 GCF, not decoded"); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 } |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 } |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 main(argc, argv) |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 char **argv; |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 { |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 process_cmdline(argc, argv); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 process_file(); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 exit(0); |
|
fd6a394ab4cd
amrconv: new program tw5c-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 } |
