FreeCalypso > hg > gsm-net-reveng
annotate trau-decode/parse-new16.c @ 109:382a80f91149
trau-parse-n: add support for 125 us advance
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Mon, 22 Dec 2025 05:25:15 +0000 |
| parents | f2009a354444 |
| 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 |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * of the four 16 kbit/s subslots (selected), looks for GSM 08.60 TRAU |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
4 * frames, and dumps whatever it finds. The present version is a new one, |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
5 * put together for the purpose of reverse-engineering Abis output from |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
6 * Nokia BTS, which exhibits more complex behaviour than what our original |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
7 * trau-parse program can analyze properly. |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 */ |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
10 #include <sys/types.h> |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
11 #include <sys/file.h> |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
12 #include <sys/stat.h> |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include <stdio.h> |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 #include <stdint.h> |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 #include <stdlib.h> |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 #include <string.h> |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 #include <strings.h> |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
19 static uint8_t *filebuf; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
20 static unsigned total_size; |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 static enum { |
|
46
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
23 NOT_D144, |
|
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
24 D144_SYNC, |
|
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
25 D144_EDATA, |
|
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
26 } d144_state; |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 static void |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
29 read_ts_file(filename, subslot_arg) |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
30 char *filename, *subslot_arg; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
31 { |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
32 FILE *inf; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
33 struct stat st; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
34 int subslot, right_shift; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
35 unsigned n; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
36 uint8_t *dp; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
37 int b; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
38 |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
39 inf = fopen(filename, "r"); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
40 if (!inf) { |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
41 perror(filename); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
42 exit(1); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
43 } |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
44 fstat(fileno(inf), &st); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
45 if (!S_ISREG(st.st_mode)) { |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
46 fprintf(stderr, "error: %s is not a regular file\n", filename); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
47 exit(1); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
48 } |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
49 total_size = st.st_size; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
50 if (total_size < 160) { |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
51 fprintf(stderr, "error: %s is too short\n", filename); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
52 exit(1); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
53 } |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
54 filebuf = malloc(total_size); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
55 if (!filebuf) { |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
56 perror("malloc of file size"); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
57 exit(1); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
58 } |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
59 subslot = atoi(subslot_arg); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
60 if (subslot < 0 || subslot > 3) { |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
61 fprintf(stderr, "error: invalid subslot argument\n"); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
62 exit(1); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
63 } |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
64 right_shift = (3 - subslot) * 2; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
65 dp = filebuf; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
66 for (n = 0; n < total_size; n++) { |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
67 b = getc(inf); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
68 if (b < 0) { |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
69 fprintf(stderr, |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
70 "error: getc() returned EOF contrary to st_size\n"); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
71 exit(1); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
72 } |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
73 *dp++ = (b >> right_shift) & 3; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
74 } |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
75 fclose(inf); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
76 } |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
77 |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
78 static int |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
79 check_sync(pos) |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
80 unsigned pos; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
81 { |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
82 uint8_t *cand = filebuf + pos; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
83 unsigned n; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
84 |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
85 for (n = 0; n < 8; n++) { |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
86 if (cand[n]) |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
87 return 0; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
88 } |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
89 if (!(cand[8] & 2)) |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
90 return 0; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
91 if (cand[8] == 3 && cand[9] == 3 && cand[10] == 3 && |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
92 (d144_state == D144_SYNC || d144_state == D144_EDATA)) |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
93 return 1; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
94 for (n = 2; n < 20; n++) { |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
95 if (!(cand[n * 8] & 2)) |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
96 return 0; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
97 } |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
98 return 1; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
99 } |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
100 |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
101 static void |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
102 unpack_dibits(in_frame_2bit, frame_bits) |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
103 uint8_t *in_frame_2bit, *frame_bits; |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 { |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 int i, inb; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 uint8_t *op; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 op = frame_bits; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 for (i = 0; i < 160; i++) { |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 inb = in_frame_2bit[i]; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 if (inb & 2) |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 *op++ = 1; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 else |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 *op++ = 0; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 if (inb & 1) |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 *op++ = 1; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 else |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 *op++ = 0; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 } |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 } |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 static unsigned |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 bits_to_num(bits, nbits) |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 uint8_t *bits; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 unsigned nbits; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 { |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 unsigned accum; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 unsigned n; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 accum = 0; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 for (n = 0; n < nbits; n++) { |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 accum <<= 1; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 if (*bits) |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 accum |= 1; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 bits++; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 } |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 return accum; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 } |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 static void |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
141 dump_raw_nibbles(dibits, num_dibits) |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
142 uint8_t *dibits; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
143 unsigned num_dibits; |
|
45
59d1d15b6f7e
trau-parse: add -r option for raw frame output
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
144 { |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
145 uint8_t *sp = dibits; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
146 unsigned remain = num_dibits; |
|
45
59d1d15b6f7e
trau-parse: add -r option for raw frame output
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
147 |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
148 if (remain >= 2) { |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
149 while (remain >= 2) { |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
150 printf("%x", (sp[0] << 2) | sp[1]); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
151 sp += 2; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
152 remain -= 2; |
|
45
59d1d15b6f7e
trau-parse: add -r option for raw frame output
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
153 } |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
154 putchar('\n'); |
|
45
59d1d15b6f7e
trau-parse: add -r option for raw frame output
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
155 } |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
156 if (remain) |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
157 printf("dribble %u%u\n", (*sp & 2) >> 1, (*sp & 1) >> 0); |
|
45
59d1d15b6f7e
trau-parse: add -r option for raw frame output
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
158 } |
|
59d1d15b6f7e
trau-parse: add -r option for raw frame output
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
159 |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
160 static int |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
161 process_frame(pos) |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
162 unsigned pos; |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 { |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
164 uint8_t *frame_2b = filebuf + pos; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
165 uint8_t frame_bits[320]; |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 unsigned c1_5, c6_11; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
168 printf("Frame at 0x%x:\n", pos); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
169 dump_raw_nibbles(frame_2b, 160); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
170 unpack_dibits(frame_2b, frame_bits); |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 printf(" C1-C5: %u%u%u%u%u", frame_bits[17], frame_bits[18], |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 frame_bits[19], frame_bits[20], frame_bits[21]); |
|
1
b0dcd48a1c8a
trau-parse: initial bugfixes
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
173 c1_5 = bits_to_num(frame_bits + 17, 5); |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 switch (c1_5) { |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 case 0x02: |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 fputs(" (FR UL)", stdout); |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 break; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 case 0x1C: |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 fputs(" (FR DL)", stdout); |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 break; |
|
1
b0dcd48a1c8a
trau-parse: initial bugfixes
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
181 case 0x1A: |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 fputs(" (EFR)", stdout); |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 break; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 case 0x10: |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 fputs(" (idle UL)", stdout); |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 break; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 case 0x0E: |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 fputs(" (idle DL)", stdout); |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 break; |
|
38
d7674c80426c
trau-parse: add decoding of data frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
190 case 0x08: |
|
d7674c80426c
trau-parse: add decoding of data frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
191 fputs(" (data UL)", stdout); |
|
d7674c80426c
trau-parse: add decoding of data frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
192 break; |
|
d7674c80426c
trau-parse: add decoding of data frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
193 case 0x16: |
|
d7674c80426c
trau-parse: add decoding of data frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
194 fputs(" (data DL)", stdout); |
|
d7674c80426c
trau-parse: add decoding of data frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
195 break; |
|
43
95acde708ce2
trau-parse: add knowledge of HR-data frame types
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
196 case 0x09: |
|
95acde708ce2
trau-parse: add knowledge of HR-data frame types
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
197 fputs(" (HR data UL)", stdout); |
|
95acde708ce2
trau-parse: add knowledge of HR-data frame types
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
198 break; |
|
95acde708ce2
trau-parse: add knowledge of HR-data frame types
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
199 case 0x17: |
|
95acde708ce2
trau-parse: add knowledge of HR-data frame types
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
200 fputs(" (HR data DL)", stdout); |
|
95acde708ce2
trau-parse: add knowledge of HR-data frame types
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
201 break; |
|
38
d7674c80426c
trau-parse: add decoding of data frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
202 case 0x14: |
|
d7674c80426c
trau-parse: add decoding of data frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
203 fputs(" (D144 sync)", stdout); |
|
d7674c80426c
trau-parse: add decoding of data frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
204 break; |
|
46
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
205 case 0x1F: |
|
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
206 fputs(" (E-TRAU)", stdout); |
|
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
207 break; |
|
47
7119884f6afe
trau-parse: rudimentary AMR decoding (C-bits)
Mychaela Falconia <falcon@freecalypso.org>
parents:
46
diff
changeset
|
208 case 0x06: |
|
7119884f6afe
trau-parse: rudimentary AMR decoding (C-bits)
Mychaela Falconia <falcon@freecalypso.org>
parents:
46
diff
changeset
|
209 fputs(" (AMR)", stdout); |
|
7119884f6afe
trau-parse: rudimentary AMR decoding (C-bits)
Mychaela Falconia <falcon@freecalypso.org>
parents:
46
diff
changeset
|
210 break; |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 } |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 putchar('\n'); |
|
46
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
213 if (c1_5 == 0x14) |
|
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
214 d144_state = D144_SYNC; |
|
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
215 else if (c1_5 == 0x1F && |
|
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
216 (d144_state == D144_SYNC || d144_state == D144_EDATA)) |
|
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
217 d144_state = D144_EDATA; |
|
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
218 else |
|
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
219 d144_state = NOT_D144; |
|
2
b2ef2c80fef1
trau-parse: add FR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
1
diff
changeset
|
220 switch (c1_5) { |
|
b2ef2c80fef1
trau-parse: add FR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
1
diff
changeset
|
221 case 0x02: |
|
b2ef2c80fef1
trau-parse: add FR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
1
diff
changeset
|
222 case 0x1C: |
|
46
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
223 case 0x1A: |
|
47
7119884f6afe
trau-parse: rudimentary AMR decoding (C-bits)
Mychaela Falconia <falcon@freecalypso.org>
parents:
46
diff
changeset
|
224 case 0x10: |
|
7119884f6afe
trau-parse: rudimentary AMR decoding (C-bits)
Mychaela Falconia <falcon@freecalypso.org>
parents:
46
diff
changeset
|
225 case 0x0E: |
|
46
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
226 c6_11 = bits_to_num(frame_bits + 22, 6); |
|
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
227 printf(" C6-C11: %u\n", c6_11); |
|
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
228 printf(" C12=%u C13=%u C14=%u C15=%u\n", frame_bits[28], |
|
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
229 frame_bits[29], frame_bits[30], frame_bits[31]); |
|
76
d4ee42801cdc
trau-decode: factor out parse-fr-common.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
50
diff
changeset
|
230 print_fr_efr_frame(frame_bits, c1_5); |
|
47
7119884f6afe
trau-parse: rudimentary AMR decoding (C-bits)
Mychaela Falconia <falcon@freecalypso.org>
parents:
46
diff
changeset
|
231 printf(" C16=%u C17=%u C18=%u C19=%u C20=%u C21=%u\n", |
|
7119884f6afe
trau-parse: rudimentary AMR decoding (C-bits)
Mychaela Falconia <falcon@freecalypso.org>
parents:
46
diff
changeset
|
232 frame_bits[310], frame_bits[311], frame_bits[312], |
|
7119884f6afe
trau-parse: rudimentary AMR decoding (C-bits)
Mychaela Falconia <falcon@freecalypso.org>
parents:
46
diff
changeset
|
233 frame_bits[313], frame_bits[314], frame_bits[315]); |
|
7119884f6afe
trau-parse: rudimentary AMR decoding (C-bits)
Mychaela Falconia <falcon@freecalypso.org>
parents:
46
diff
changeset
|
234 printf(" T1=%u T2=%u T3=%u T4=%u\n", frame_bits[316], |
|
7119884f6afe
trau-parse: rudimentary AMR decoding (C-bits)
Mychaela Falconia <falcon@freecalypso.org>
parents:
46
diff
changeset
|
235 frame_bits[317], frame_bits[318], frame_bits[319]); |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
236 return 1; |
|
38
d7674c80426c
trau-parse: add decoding of data frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
237 case 0x08: |
|
43
95acde708ce2
trau-parse: add knowledge of HR-data frame types
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
238 case 0x09: |
|
38
d7674c80426c
trau-parse: add decoding of data frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
239 case 0x16: |
|
43
95acde708ce2
trau-parse: add knowledge of HR-data frame types
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
240 case 0x17: |
|
38
d7674c80426c
trau-parse: add decoding of data frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
241 case 0x14: |
|
77
729dbac9df82
trau-decode: factor out parse-data.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
76
diff
changeset
|
242 print_data_frame(frame_bits); |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
243 return 0; |
|
46
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
244 case 0x1F: |
|
77
729dbac9df82
trau-decode: factor out parse-data.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
76
diff
changeset
|
245 print_edata_frame(frame_bits); |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
246 return 0; |
|
47
7119884f6afe
trau-parse: rudimentary AMR decoding (C-bits)
Mychaela Falconia <falcon@freecalypso.org>
parents:
46
diff
changeset
|
247 case 0x06: |
|
78
00fd38c7c8fe
trau-decode: factor out parse-amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
77
diff
changeset
|
248 print_amr_frame(frame_bits); |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
249 return 1; |
|
46
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
250 default: |
|
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
251 printf(" C6-C15: %u%u%u%u%u%u%u%u%u%u\n", frame_bits[22], |
|
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
252 frame_bits[23], frame_bits[24], frame_bits[25], |
|
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
253 frame_bits[26], frame_bits[27], frame_bits[28], |
|
f977027774cb
trau-parse: add support for D144 decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
45
diff
changeset
|
254 frame_bits[29], frame_bits[30], frame_bits[31]); |
|
49
e579784e5578
trau-parse: restore FR-like display for unknown frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
48
diff
changeset
|
255 printf(" C16=%u C17=%u C18=%u C19=%u C20=%u C21=%u\n", |
|
e579784e5578
trau-parse: restore FR-like display for unknown frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
48
diff
changeset
|
256 frame_bits[310], frame_bits[311], frame_bits[312], |
|
e579784e5578
trau-parse: restore FR-like display for unknown frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
48
diff
changeset
|
257 frame_bits[313], frame_bits[314], frame_bits[315]); |
|
e579784e5578
trau-parse: restore FR-like display for unknown frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
48
diff
changeset
|
258 printf(" T1=%u T2=%u T3=%u T4=%u\n", frame_bits[316], |
|
e579784e5578
trau-parse: restore FR-like display for unknown frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
48
diff
changeset
|
259 frame_bits[317], frame_bits[318], frame_bits[319]); |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
260 return 0; |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 } |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 } |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263 |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 static void |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
265 process_filebuf() |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 { |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
267 unsigned p, nf_pos = 0, nf_accum = 0; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
268 int match, have_t_bits; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
269 |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
270 d144_state = NOT_D144; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
271 for (p = 0; p < total_size; ) { |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
272 if ((total_size - p) >= 160) |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
273 match = check_sync(p); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
274 else |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
275 match = 0; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
276 if (match) { |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
277 if (nf_accum) { |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
278 printf("Non-frame at 0x%x:\n", nf_pos); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
279 dump_raw_nibbles(filebuf + nf_pos, nf_accum); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
280 } |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
281 have_t_bits = process_frame(p); |
|
109
382a80f91149
trau-parse-n: add support for 125 us advance
Mychaela Falconia <falcon@freecalypso.org>
parents:
108
diff
changeset
|
282 if (have_t_bits && filebuf[p+158] == 0 && |
|
382a80f91149
trau-parse-n: add support for 125 us advance
Mychaela Falconia <falcon@freecalypso.org>
parents:
108
diff
changeset
|
283 filebuf[p+159] == 0) { |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
284 puts("advance of 250 us"); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
285 p += 158; |
|
109
382a80f91149
trau-parse-n: add support for 125 us advance
Mychaela Falconia <falcon@freecalypso.org>
parents:
108
diff
changeset
|
286 } else if (have_t_bits && filebuf[p+158] == 3 && |
|
382a80f91149
trau-parse-n: add support for 125 us advance
Mychaela Falconia <falcon@freecalypso.org>
parents:
108
diff
changeset
|
287 filebuf[p+159] == 0) { |
|
382a80f91149
trau-parse-n: add support for 125 us advance
Mychaela Falconia <falcon@freecalypso.org>
parents:
108
diff
changeset
|
288 puts("advance of 125 us"); |
|
382a80f91149
trau-parse-n: add support for 125 us advance
Mychaela Falconia <falcon@freecalypso.org>
parents:
108
diff
changeset
|
289 p += 159; |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
290 } else |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
291 p += 160; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
292 nf_pos = p; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
293 nf_accum = 0; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
294 } else { |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
295 p++; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
296 nf_accum++; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
297 if (nf_accum >= 160) { |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
298 printf("Non-frame at 0x%x:\n", nf_pos); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
299 dump_raw_nibbles(filebuf + nf_pos, nf_accum); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
300 nf_pos = p; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
301 nf_accum = 0; |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
302 } |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
303 d144_state = NOT_D144; |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
304 } |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
305 } |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
306 if (nf_accum) { |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
307 printf("Non-frame at 0x%x:\n", nf_pos); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
308 dump_raw_nibbles(filebuf + nf_pos, nf_accum); |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
309 } |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
310 } |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
311 |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
312 main(argc, argv) |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
313 char **argv; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
314 { |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
315 if (argc != 3) { |
|
108
f2009a354444
trau-parse-n: fix edit error in usage message
Mychaela Falconia <falcon@freecalypso.org>
parents:
107
diff
changeset
|
316 fprintf(stderr, "usage: %s binfile subslot\n", argv[0]); |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
317 exit(1); |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
318 } |
|
107
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
319 read_ts_file(argv[1], argv[2]); |
|
c6ffb176eaed
trau-decode: new program trau-parse-n
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
320 process_filebuf(); |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
321 exit(0); |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
322 } |
