FreeCalypso > hg > freecalypso-tools
annotate ffstools/caltools/fc-bin2rftab.c @ 582:deda54106c0e
doc/Target-boot-control: first draft
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Mon, 03 Feb 2020 01:25:31 +0000 |
| parents | 68c7e4edc4da |
| children | a58a38cae51c |
| 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 |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 extern void write_afcparams_table(); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 extern void write_agcwords_table(); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 extern void write_agcglobals_table(); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 extern void write_il2agc_table(); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 extern void write_tx_ramps_table(); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 extern void write_tx_levels_table(); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 extern void write_tx_calchan_table(); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 extern void write_tx_caltemp_table(); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 extern void write_rx_calchan_table(); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 extern void write_rx_caltemp_table(); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 extern void write_rx_agcparams_table(); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 static struct table_map { |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 char *type; |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 int size; |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 void (*func)(); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 } table_map[] = { |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 {"afcparams", 24, write_afcparams_table}, |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 {"agc-table", 40, write_agcwords_table}, |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 {"agc-global-params", 8, write_agcglobals_table}, |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 {"il2agc", 121, write_il2agc_table}, |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 {"tx-ramps", 512, write_tx_ramps_table}, |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 {"tx-levels", 128, write_tx_levels_table}, |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 {"tx-calchan", 128, write_tx_calchan_table}, |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 {"tx-caltemp", 40, write_tx_caltemp_table}, |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 {"rx-calchan", 40, write_rx_calchan_table}, |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 {"rx-caltemp", 44, write_rx_caltemp_table}, |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 {"rx-agc-params", 8, write_rx_agcparams_table}, |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 {0, 0, 0} |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 }; |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 main(argc, argv) |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 char **argv; |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 { |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 struct table_map *tp; |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 u_char buf[512]; |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 int ifd, cc; |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 u_long offset; |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 char *endp; |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 FILE *outf; |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 if (argc < 4 || argc > 5) { |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 fprintf(stderr, "usage: %s binfile offset type [outfile]\n", |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 argv[0]); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 exit(1); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 } |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 ifd = open(argv[1], O_RDONLY); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 if (ifd < 0) { |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 perror(argv[1]); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 exit(1); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 } |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 if (!isdigit(argv[2][0])) { |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 inv_offset: fprintf(stderr, "error: specified offset \"%s\" is invalid\n", |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 argv[2]); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 exit(1); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 } |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 offset = strtoul(argv[2], &endp, 0); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 if (*endp) |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 goto inv_offset; |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 lseek(ifd, offset, SEEK_SET); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 for (tp = table_map; tp->type; tp++) |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 if (!strcmp(tp->type, argv[3])) |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 break; |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 if (!tp->type) { |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 fprintf(stderr, "error: RF table type \"%s\" not known\n", |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 argv[3]); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 exit(1); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 } |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 cc = read(ifd, buf, tp->size); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 if (cc < 0) { |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 perror("error reading from file"); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 exit(1); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 } |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 if (cc != tp->size) { |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 fprintf(stderr, "error: short read\n"); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 exit(1); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 } |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 close(ifd); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 if (argc >= 5) { |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 outf = fopen(argv[4], "w"); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 if (!outf) { |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 perror(argv[4]); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 exit(1); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 } |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 tp->func(buf, outf); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 fclose(outf); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 } else |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 tp->func(buf, stdout); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 exit(0); |
|
68c7e4edc4da
fc-bin2rftab utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 } |
