annotate ffstools/caltools/fc-bin2rftab.c @ 722:a58a38cae51c

fc-bin2rftab: added support for adc-cal table type
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 25 Aug 2020 07:18:43 +0000
parents 68c7e4edc4da
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
484
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * This utility reads a binary RF table or extracts it out of some larger
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * binary file such as an alien fw image (the user must specify the offset
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * in the binary file and the expected RF table type), and emits it in our
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * FreeCalypso ASCII format.
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 */
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include <sys/types.h>
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <sys/file.h>
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <ctype.h>
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include <stdio.h>
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include <stdlib.h>
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 #include <string.h>
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 #include <strings.h>
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 #include <unistd.h>
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16
722
a58a38cae51c fc-bin2rftab: added support for adc-cal table type
Mychaela Falconia <falcon@freecalypso.org>
parents: 484
diff changeset
17 extern void write_adccal_table();
484
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 extern void write_afcparams_table();
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 extern void write_agcwords_table();
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 extern void write_agcglobals_table();
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 extern void write_il2agc_table();
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 extern void write_tx_ramps_table();
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 extern void write_tx_levels_table();
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 extern void write_tx_calchan_table();
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 extern void write_tx_caltemp_table();
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 extern void write_rx_calchan_table();
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 extern void write_rx_caltemp_table();
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 extern void write_rx_agcparams_table();
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 static struct table_map {
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 char *type;
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 int size;
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 void (*func)();
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 } table_map[] = {
722
a58a38cae51c fc-bin2rftab: added support for adc-cal table type
Mychaela Falconia <falcon@freecalypso.org>
parents: 484
diff changeset
35 {"adc-cal", 36, write_adccal_table},
484
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 {"afcparams", 24, write_afcparams_table},
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 {"agc-table", 40, write_agcwords_table},
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 {"agc-global-params", 8, write_agcglobals_table},
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 {"il2agc", 121, write_il2agc_table},
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 {"tx-ramps", 512, write_tx_ramps_table},
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 {"tx-levels", 128, write_tx_levels_table},
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 {"tx-calchan", 128, write_tx_calchan_table},
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 {"tx-caltemp", 40, write_tx_caltemp_table},
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 {"rx-calchan", 40, write_rx_calchan_table},
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 {"rx-caltemp", 44, write_rx_caltemp_table},
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 {"rx-agc-params", 8, write_rx_agcparams_table},
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 {0, 0, 0}
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 };
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 main(argc, argv)
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 char **argv;
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 {
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 struct table_map *tp;
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 u_char buf[512];
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 int ifd, cc;
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 u_long offset;
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 char *endp;
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 FILE *outf;
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 if (argc < 4 || argc > 5) {
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 fprintf(stderr, "usage: %s binfile offset type [outfile]\n",
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 argv[0]);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 exit(1);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 }
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 ifd = open(argv[1], O_RDONLY);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 if (ifd < 0) {
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 perror(argv[1]);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 exit(1);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 }
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 if (!isdigit(argv[2][0])) {
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 inv_offset: fprintf(stderr, "error: specified offset \"%s\" is invalid\n",
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 argv[2]);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 exit(1);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 }
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 offset = strtoul(argv[2], &endp, 0);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 if (*endp)
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 goto inv_offset;
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 lseek(ifd, offset, SEEK_SET);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 for (tp = table_map; tp->type; tp++)
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 if (!strcmp(tp->type, argv[3]))
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 break;
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 if (!tp->type) {
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 fprintf(stderr, "error: RF table type \"%s\" not known\n",
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 argv[3]);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 exit(1);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 }
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 cc = read(ifd, buf, tp->size);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 if (cc < 0) {
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 perror("error reading from file");
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 exit(1);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 }
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 if (cc != tp->size) {
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 fprintf(stderr, "error: short read\n");
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 exit(1);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 }
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 close(ifd);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 if (argc >= 5) {
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 outf = fopen(argv[4], "w");
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 if (!outf) {
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 perror(argv[4]);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 exit(1);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 }
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 tp->func(buf, outf);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 fclose(outf);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 } else
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 tp->func(buf, stdout);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 exit(0);
68c7e4edc4da fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 }