FreeCalypso > hg > gsm-net-reveng
annotate trau-decode/parse-new8.c @ 115:62b3b916c0a4 default tip
trau-decode: add inst-progs list
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Mon, 22 Dec 2025 08:37:22 +0000 |
| parents | 4ff5c798c75d |
| children |
| rev | line source |
|---|---|
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This program reads a 64 kbit/s timeslot recording file, examines one |
|
114
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
3 * of the eight 8 kbit/s subslots (selected), looks for all possible sync |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
4 * patterns (classic HR and TRAU-AMR-8k), and decodes whatever it finds. |
|
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 |
|
27
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
7 #include <sys/types.h> |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
8 #include <sys/file.h> |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
9 #include <sys/stat.h> |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <stdio.h> |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include <stdint.h> |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include <stdlib.h> |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include <string.h> |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 #include <strings.h> |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 |
|
27
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
16 static uint8_t *filebuf; |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
17 static unsigned total_size; |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 static void |
|
27
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
20 read_ts_file(filename, subslot_arg) |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
21 char *filename, *subslot_arg; |
|
2
b2ef2c80fef1
trau-parse: add FR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
1
diff
changeset
|
22 { |
|
27
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
23 FILE *inf; |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
24 struct stat st; |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
25 int subslot, right_shift; |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
26 unsigned n; |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
27 uint8_t *dp; |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
28 int b; |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 |
|
27
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
30 inf = fopen(filename, "r"); |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
31 if (!inf) { |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
32 perror(filename); |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
33 exit(1); |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
34 } |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
35 fstat(fileno(inf), &st); |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
36 if (!S_ISREG(st.st_mode)) { |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
37 fprintf(stderr, "error: %s is not a regular file\n", filename); |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
38 exit(1); |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
39 } |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
40 total_size = st.st_size; |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
41 if (total_size < 160) { |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
42 fprintf(stderr, "error: %s is too short\n", filename); |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
43 exit(1); |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 } |
|
27
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
45 filebuf = malloc(total_size); |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
46 if (!filebuf) { |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
47 perror("malloc of file size"); |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
48 exit(1); |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
49 } |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
50 subslot = atoi(subslot_arg); |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
51 if (subslot < 0 || subslot > 7) { |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
52 fprintf(stderr, "error: invalid subslot argument\n"); |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
53 exit(1); |
|
2
b2ef2c80fef1
trau-parse: add FR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
1
diff
changeset
|
54 } |
|
27
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
55 right_shift = 7 - subslot; |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
56 dp = filebuf; |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
57 for (n = 0; n < total_size; n++) { |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
58 b = getc(inf); |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
59 if (b < 0) { |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
60 fprintf(stderr, |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
61 "error: getc() returned EOF contrary to st_size\n"); |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
62 exit(1); |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
63 } |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
64 *dp++ = (b >> right_shift) & 1; |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
65 } |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
66 fclose(inf); |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 } |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 static int |
|
114
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
70 is_classic_hr(cand) |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
71 uint8_t *cand; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
72 { |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
73 unsigned n; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
74 |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
75 for (n = 0; n < 8; n++) { |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
76 if (cand[n]) |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
77 return 0; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
78 } |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
79 if (!cand[8]) |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
80 return 0; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
81 if (cand[16]) |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
82 return 0; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
83 if (!cand[17]) |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
84 return 0; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
85 for (n = 3; n < 20; n++) { |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
86 if (!cand[n * 8]) |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
87 return 0; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
88 } |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
89 return 1; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
90 } |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
91 |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
92 static int |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
93 check_sync(pos, cont) |
|
27
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
94 unsigned pos; |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 { |
|
27
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
96 uint8_t *cand = filebuf + pos; |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 |
|
114
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
98 if (is_classic_hr(cand)) |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
99 return 1; |
|
106
028307356ba9
trau-decode: new program trau-amr8-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
96
diff
changeset
|
100 if (is_amr_low(cand)) |
|
028307356ba9
trau-decode: new program trau-amr8-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
96
diff
changeset
|
101 return 1; |
|
114
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
102 if (!cont) |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
103 return 0; |
|
106
028307356ba9
trau-decode: new program trau-amr8-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
96
diff
changeset
|
104 if (is_amr_67(cand)) |
|
028307356ba9
trau-decode: new program trau-amr8-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
96
diff
changeset
|
105 return 1; |
|
028307356ba9
trau-decode: new program trau-amr8-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
96
diff
changeset
|
106 if (is_amr_74(cand)) |
|
028307356ba9
trau-decode: new program trau-amr8-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
96
diff
changeset
|
107 return 1; |
|
028307356ba9
trau-decode: new program trau-amr8-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
96
diff
changeset
|
108 return 0; |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 } |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 static void |
|
114
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
112 dump_raw_nibbles(bits, num_bits) |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
113 uint8_t *bits; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
114 unsigned num_bits; |
|
73
06f241846c67
trau-hr-dump: add -r option for raw frame output
Mychaela Falconia <falcon@freecalypso.org>
parents:
42
diff
changeset
|
115 { |
|
114
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
116 uint8_t *sp = bits; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
117 unsigned remain = num_bits; |
|
73
06f241846c67
trau-hr-dump: add -r option for raw frame output
Mychaela Falconia <falcon@freecalypso.org>
parents:
42
diff
changeset
|
118 |
|
114
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
119 if (remain >= 4) { |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
120 while (remain >= 4) { |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
121 printf("%x", (sp[0] << 3) | (sp[1] << 2) | |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
122 (sp[2] << 1) | sp[3]); |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
123 sp += 4; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
124 remain -= 4; |
|
73
06f241846c67
trau-hr-dump: add -r option for raw frame output
Mychaela Falconia <falcon@freecalypso.org>
parents:
42
diff
changeset
|
125 } |
|
114
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
126 putchar('\n'); |
|
73
06f241846c67
trau-hr-dump: add -r option for raw frame output
Mychaela Falconia <falcon@freecalypso.org>
parents:
42
diff
changeset
|
127 } |
|
114
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
128 if (remain) { |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
129 fputs("dribble ", stdout); |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
130 while (remain) { |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
131 printf("%u", *sp++); |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
132 remain--; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
133 } |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
134 putchar('\n'); |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
135 } |
|
73
06f241846c67
trau-hr-dump: add -r option for raw frame output
Mychaela Falconia <falcon@freecalypso.org>
parents:
42
diff
changeset
|
136 } |
|
06f241846c67
trau-hr-dump: add -r option for raw frame output
Mychaela Falconia <falcon@freecalypso.org>
parents:
42
diff
changeset
|
137 |
|
114
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
138 static int |
|
27
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
139 process_frame(pos) |
|
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
140 unsigned pos; |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 { |
|
74
e78c6b1ecb91
trau-decode: refactor trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
73
diff
changeset
|
142 uint8_t *frame = filebuf + pos; |
|
27
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
143 |
|
28
9bcdb091c24d
trau-decode: new program trau-hr-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
27
diff
changeset
|
144 printf("Frame at 0x%x:\n", pos); |
|
114
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
145 dump_raw_nibbles(frame, 160); |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
146 if (is_classic_hr(frame)) |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
147 return print_gsmhr_frame(frame); |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
148 else |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
149 return print_amr8_frame(frame); |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 } |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 static void |
|
27
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
153 process_filebuf() |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 { |
|
114
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
155 unsigned p, nf_pos = 0, nf_accum = 0; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
156 int match, num_t_bits; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
157 int in_sync = 0; |
|
27
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
158 |
|
114
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
159 for (p = 0; p < total_size; ) { |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
160 if ((total_size - p) >= 160) |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
161 match = check_sync(p, in_sync); |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
162 else |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
163 match = 0; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
164 if (match) { |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
165 if (nf_accum) { |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
166 printf("Non-frame at 0x%x:\n", nf_pos); |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
167 dump_raw_nibbles(filebuf + nf_pos, nf_accum); |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
168 } |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
169 num_t_bits = process_frame(p); |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
170 if (num_t_bits == 2 && !filebuf[p+158] && |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
171 !filebuf[p+159]) { |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
172 puts("advance of 250 us"); |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
173 p += 158; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
174 } else if (num_t_bits == 2 && filebuf[p+158] && |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
175 !filebuf[p+159]) { |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
176 puts("advance of 125 us"); |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
177 p += 159; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
178 } else if (num_t_bits == 1 && !filebuf[p+159]) { |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
179 puts("advance of 125 us"); |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
180 p += 159; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
181 } else |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
182 p += 160; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
183 nf_pos = p; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
184 nf_accum = 0; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
185 in_sync = 1; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
186 } else { |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
187 p++; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
188 nf_accum++; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
189 if (nf_accum >= 320) { |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
190 printf("Non-frame at 0x%x:\n", nf_pos); |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
191 dump_raw_nibbles(filebuf + nf_pos, nf_accum); |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
192 nf_pos = p; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
193 nf_accum = 0; |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
194 } |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
195 in_sync = 0; |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 } |
|
114
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
197 } |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
198 if (nf_accum) { |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
199 printf("Non-frame at 0x%x:\n", nf_pos); |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
200 dump_raw_nibbles(filebuf + nf_pos, nf_accum); |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 } |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 } |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 main(argc, argv) |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 char **argv; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 { |
|
114
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
207 if (argc != 3) { |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
208 fprintf(stderr, "usage: %s binfile subslot\n", argv[0]); |
|
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
209 exit(1); |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 } |
|
114
4ff5c798c75d
trau-decode: new program trau-parse-n8
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
211 read_ts_file(argv[1], argv[2]); |
|
27
f508dacf2cf9
trau-decode: new programs dump-1bit and trau-sync8
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
212 process_filebuf(); |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 exit(0); |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 } |
