FreeCalypso > hg > gsm-codec-lib
annotate hrutil/tw5b-dump.c @ 559:707d6f7a54dc default tip
hrutil: new program tw5b-dump
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 06 Feb 2025 09:32:18 +0000 |
parents | miscutil/tw5a-dump.c@86d4ec69b36c |
children |
rev | line source |
---|---|
23
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
559
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
2 * This program reads a TW-TS-005 Annex B hexadecimal file |
23
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * and dumps all frames in human-readable form. |
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 */ |
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 |
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include <stdio.h> |
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <stdint.h> |
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <stdlib.h> |
471
b5f8ea41362b
gsmrec-dump: report DHF matches
Mychaela Falconia <falcon@freecalypso.org>
parents:
293
diff
changeset
|
9 #include <string.h> |
b5f8ea41362b
gsmrec-dump: report DHF matches
Mychaela Falconia <falcon@freecalypso.org>
parents:
293
diff
changeset
|
10 #include <strings.h> |
559
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
11 #include "../libgsmhr1/tw_gsmhr.h" |
523
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
12 #include "../libtest/tw5reader.h" |
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
13 |
23
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 main(argc, argv) |
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 char **argv; |
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 { |
523
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
17 FILE *hexf; |
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
18 unsigned lineno; |
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
19 uint8_t frame[TWTS005_MAX_FRAME]; |
559
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
20 unsigned frame_len, ft; |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
21 int16_t params[GSMHR_NUM_PARAMS]; |
523
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
22 int rc; |
23
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 |
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 if (argc != 2) { |
523
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
25 fprintf(stderr, "usage: %s hex-file\n", argv[0]); |
23
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 exit(1); |
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 } |
523
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
28 hexf = fopen(argv[1], "r"); |
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
29 if (!hexf) { |
23
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 perror(argv[1]); |
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 exit(1); |
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 } |
523
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
33 lineno = 0; |
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
34 for (;;) { |
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
35 rc = twts005_read_frame(hexf, &lineno, frame, &frame_len); |
23
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 if (rc < 0) { |
523
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
37 fprintf(stderr, "%s line %u: not valid TW-TS-005\n", |
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
38 argv[1], lineno); |
23
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 exit(1); |
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 } |
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 if (!rc) |
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 break; |
523
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
43 switch (frame_len) { |
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
44 case 0: |
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
45 printf("line %u: NULL frame\n", lineno); |
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
46 break; |
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
47 case 1: |
559
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
48 if (frame[0] & 0x80) |
523
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
49 goto invalid; |
559
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
50 ft = frame[0] >> 4; |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
51 switch (ft) { |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
52 case 1: |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
53 printf("line %u: Invalid_SID frame\n", lineno); |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
54 break; |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
55 case 7: |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
56 printf("line %u: No_Data frame\n", lineno); |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
57 break; |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
58 default: |
523
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
59 goto invalid; |
559
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
60 } |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
61 printf(" ToC=%02X (DTXd=%u UFI=%u TAF=%u)\n", frame[0], |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
62 (frame[0] >> 3) & 1, (frame[0] >> 1) & 1, |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
63 frame[0] & 1); |
523
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
64 break; |
559
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
65 case GSMHR_FRAME_LEN_RPF: |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
66 printf("line %u: TS 101 318 frame\n", lineno); |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
67 gsmhr_unpack_ts101318(frame, params); |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
68 print_frame_params(params); |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
69 break; |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
70 case GSMHR_FRAME_LEN_5993: |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
71 if (frame[0] & 0x80) |
523
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
72 goto invalid; |
559
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
73 ft = frame[0] >> 4; |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
74 switch (ft) { |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
75 case 0: |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
76 printf("line %u: good speech frame\n", lineno); |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
77 break; |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
78 case 2: |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
79 printf("line %u: good SID frame\n", lineno); |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
80 break; |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
81 case 6: |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
82 printf("line %u: bad speech frame\n", lineno); |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
83 break; |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
84 default: |
523
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
85 goto invalid; |
559
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
86 } |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
87 printf(" ToC=%02X (DTXd=%u UFI=%u TAF=%u)\n", frame[0], |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
88 (frame[0] >> 3) & 1, (frame[0] >> 1) & 1, |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
89 frame[0] & 1); |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
90 gsmhr_unpack_ts101318(frame + 1, params); |
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
91 print_frame_params(params); |
23
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 break; |
523
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
93 default: |
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
94 invalid: |
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
95 fprintf(stderr, |
559
707d6f7a54dc
hrutil: new program tw5b-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
96 "%s line %u: not a valid GSM-HR frame\n", |
523
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
97 argv[1], lineno); |
86d4ec69b36c
miscutil: new program tw5a-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
471
diff
changeset
|
98 exit(1); |
23
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 } |
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 } |
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 exit(0); |
baadb1cb744d
new debug utility gsmrec-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 } |