annotate hrutil/dec2hex.c @ 569:0d05892150cf

gsmhr-dec-craft: add bfi-nodata setting
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 12 Feb 2025 03:43:57 +0000
parents 0affb05c2ce2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
557
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
568
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
2 * This program reads an HRv1 *.dec file in ETSI test sequence format
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
3 * (decoder input format) and converts it into TW-TS-005 Annex B
557
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * hexadecimal format.
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 */
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #include <stdio.h>
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include <stdint.h>
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <stdlib.h>
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <string.h>
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include <strings.h>
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include <unistd.h>
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 #include "../libgsmhr1/tw_gsmhr.h"
568
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
14 #include "../libtest/tw5writer.h"
561
cf62fe9fac3a gsmhr-cod2hex: read native endian by default
Mychaela Falconia <falcon@freecalypso.org>
parents: 557
diff changeset
15 #include "../libtest/local_endian.h"
557
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16
568
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
17 static int
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
18 convert_ft(bfi, sid)
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
19 {
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
20 switch (sid) {
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
21 case 0:
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
22 switch (bfi) {
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
23 case 0:
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
24 return 0;
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
25 case 1:
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
26 return 6;
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
27 case 2:
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
28 return 7;
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
29 }
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
30 break;
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
31 case 1:
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
32 return 1;
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
33 case 2:
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
34 switch (bfi) {
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
35 case 0:
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
36 return 2;
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
37 case 1:
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
38 case 2:
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
39 return 1;
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
40 }
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
41 }
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
42 abort();
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
43 }
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
44
557
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 main(argc, argv)
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 char **argv;
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 {
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 char *infname, *outfname;
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 FILE *inf, *outf;
568
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
50 int opt, rc, big_endian, ft;
557
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 unsigned frame_no;
568
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
52 int16_t params[GSMHR_NUM_PARAMS_DEC];
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
53 uint8_t frame_out[GSMHR_FRAME_LEN_5993];
557
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 extern int optind;
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55
561
cf62fe9fac3a gsmhr-cod2hex: read native endian by default
Mychaela Falconia <falcon@freecalypso.org>
parents: 557
diff changeset
56 big_endian = is_native_big_endian();
568
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
57 while ((opt = getopt(argc, argv, "bl")) != EOF) {
557
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 switch (opt) {
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 case 'b':
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 big_endian = 1;
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 continue;
561
cf62fe9fac3a gsmhr-cod2hex: read native endian by default
Mychaela Falconia <falcon@freecalypso.org>
parents: 557
diff changeset
62 case 'l':
cf62fe9fac3a gsmhr-cod2hex: read native endian by default
Mychaela Falconia <falcon@freecalypso.org>
parents: 557
diff changeset
63 big_endian = 0;
cf62fe9fac3a gsmhr-cod2hex: read native endian by default
Mychaela Falconia <falcon@freecalypso.org>
parents: 557
diff changeset
64 continue;
557
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 default:
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 usage:
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 fprintf(stderr,
568
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
68 "usage: %s [-b|-l] input.dec output.hex\n",
557
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 argv[0]);
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 exit(1);
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 }
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 }
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 if (argc != optind + 2)
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 goto usage;
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 infname = argv[optind];
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 outfname = argv[optind+1];
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 inf = fopen(infname, "r");
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 if (!inf) {
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 perror(infname);
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 exit(1);
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 }
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 outf = fopen(outfname, "w");
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 if (!outf) {
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 perror(outfname);
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 exit(1);
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 }
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 for (frame_no = 0; ; frame_no++) {
568
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
90 rc = read_dec_frame(inf, big_endian, params, infname, frame_no);
557
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 if (!rc)
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 break;
568
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
93 ft = convert_ft(params[18], params[20]);
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
94 frame_out[0] = ft << 4;
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
95 if (params[19])
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
96 frame_out[0] |= 0x02;
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
97 if (params[21])
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
98 frame_out[0] |= 0x01;
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
99 switch (ft) {
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
100 case 0:
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
101 case 2:
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
102 case 6:
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
103 gsmhr_pack_ts101318(params, frame_out + 1);
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
104 emit_hex_frame(outf, frame_out, GSMHR_FRAME_LEN_5993);
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
105 break;
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
106 case 1:
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
107 case 7:
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
108 emit_hex_frame(outf, frame_out, 1);
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
109 break;
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
110 default:
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
111 abort();
0affb05c2ce2 hrutil: new program gsmhr-dec2hex
Mychaela Falconia <falcon@freecalypso.org>
parents: 561
diff changeset
112 }
557
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113 }
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114 exit(0);
129c895a0564 hrutil: new program gsmhr-cod2hex
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115 }