annotate amrconv/tw5c-dump.c @ 599:762cf36e2487

libgsmhr1/err_conc.[ch]: import original
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 04 Dec 2025 10:02:09 +0000
parents fd6a394ab4cd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }