FreeCalypso > hg > fc-rfcal-tools
comparison autocal/rxbandmain.c @ 74:d388732c2f73
autocal: rxband.c renamed to rxbandmain.c for consistency
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 15 Jul 2017 18:20:48 +0000 |
parents | autocal/rxband.c@3f92d88fbb1c |
children |
comparison
equal
deleted
inserted
replaced
73:c9bd1f75029f | 74:d388732c2f73 |
---|---|
1 /* | |
2 * This module contains the main() function for fc-rfcal-rxband. | |
3 */ | |
4 | |
5 #include <stdio.h> | |
6 #include <stdlib.h> | |
7 #include <string.h> | |
8 #include <strings.h> | |
9 #include <rvinterf/l1tm.h> | |
10 #include <rvinterf/exitcodes.h> | |
11 #include "rxband.h" | |
12 #include "rxcaldefs.h" | |
13 #include "stdband.h" | |
14 | |
15 struct rx_calchan_range rx_calchan_850[] = { | |
16 {128, 138, 128}, | |
17 {139, 157, 148}, | |
18 {158, 178, 168}, | |
19 {179, 199, 189}, | |
20 {200, 217, 208}, | |
21 {218, 239, 228}, | |
22 {240, 251, 251} | |
23 }; | |
24 | |
25 struct rx_calchan_range rx_calchan_900[] = { | |
26 { 0, 10, 1}, | |
27 { 11, 30, 20}, | |
28 { 31, 51, 37}, | |
29 { 52, 71, 62}, | |
30 { 72, 90, 80}, | |
31 { 91, 112, 100}, | |
32 { 113, 124, 124}, | |
33 { 975, 991, 975}, | |
34 { 992, 1009, 1000}, | |
35 {1010, 1023, 1017} | |
36 }; | |
37 | |
38 struct rx_calchan_range rx_calchan_1800[] = { | |
39 {512, 548, 512}, | |
40 {549, 622, 585}, | |
41 {623, 680, 660}, | |
42 {681, 745, 698}, | |
43 {746, 812, 790}, | |
44 {813, 860, 835}, | |
45 {861, 885, 885} | |
46 }; | |
47 | |
48 struct rx_calchan_range rx_calchan_1900[] = { | |
49 {512, 548, 512}, | |
50 {549, 622, 585}, | |
51 {623, 680, 661}, | |
52 {681, 745, 700}, | |
53 {746, 795, 790}, | |
54 {796, 810, 805} | |
55 }; | |
56 | |
57 struct rxcal_band rxcal_band_list[] = { | |
58 {"850", RFPW_STD_BAND_850, 189, rx_calchan_850, | |
59 sizeof(rx_calchan_850) / sizeof(struct rx_calchan_range)}, | |
60 {"900", RFPW_STD_BAND_900, 37, rx_calchan_900, | |
61 sizeof(rx_calchan_900) / sizeof(struct rx_calchan_range)}, | |
62 {"1800", RFPW_STD_BAND_1800, 698, rx_calchan_1800, | |
63 sizeof(rx_calchan_1800) / sizeof(struct rx_calchan_range)}, | |
64 {"1900", RFPW_STD_BAND_1900, 661, rx_calchan_1900, | |
65 sizeof(rx_calchan_1900) / sizeof(struct rx_calchan_range)}, | |
66 {0, 0, 0, 0, 0} | |
67 }; | |
68 | |
69 struct rxcal_band *rxcal_band; | |
70 int Gmagic, rx_calchan_values[10]; | |
71 | |
72 finish_cmdline(argc, argv) | |
73 char **argv; | |
74 { | |
75 extern int optind; | |
76 struct rxcal_band *band; | |
77 | |
78 if (argc - optind != 1) { | |
79 fprintf(stderr, "usage: %s band\n", argv[0]); | |
80 exit(ERROR_USAGE); | |
81 } | |
82 for (band = rxcal_band_list; band->name; band++) | |
83 if (!strcmp(band->name, argv[optind])) | |
84 break; | |
85 if (!band->name) { | |
86 fprintf(stderr, "error: \"%s\" is not a known band\n", | |
87 argv[optind]); | |
88 exit(ERROR_USAGE); | |
89 } | |
90 rxcal_band = band; | |
91 return(0); | |
92 } | |
93 | |
94 prepare_rf_test_system() | |
95 { | |
96 char cmd[80]; | |
97 | |
98 printf("Preparing RF test system for %s MHz Rx calibration\n", | |
99 rxcal_band->name); | |
100 sprintf(cmd, "signal-gen-setup %s\n", rxcal_band->name); | |
101 tsid_command(cmd); | |
102 return(0); | |
103 } | |
104 | |
105 main(argc, argv) | |
106 char **argv; | |
107 { | |
108 socket_pathname_options(argc, argv); | |
109 finish_cmdline(argc, argv); | |
110 connect_rvinterf_socket(); | |
111 connect_tsid_socket(); | |
112 setlinebuf(stdout); /* to allow logging with tee */ | |
113 prepare_rf_test_system(); | |
114 | |
115 printf("Putting the DUT into Test Mode\n"); | |
116 do_tms(1); | |
117 do_rfpw(STD_BAND_FLAG, rxcal_band->rfpw_std_band); | |
118 l1tm_setup_for_rxcal(); | |
119 do_gmagic(); | |
120 do_rx_calchan(); | |
121 | |
122 printf("Saving calibrated values in FFS\n"); | |
123 misc_enable(CFG_WRITE_RX_CAL); | |
124 exit(0); | |
125 } | |
126 | |
127 do_gmagic() | |
128 { | |
129 int pm; | |
130 char Gmagic_db[64]; | |
131 | |
132 printf("Calibrating GMagic\n"); | |
133 pm = rx_measure(rxcal_band->main_arfcn); | |
134 Gmagic = pm - RXCAL_SIGGEN_LEVEL - RXCAL_AGC_DB * 2; | |
135 halfdb_to_string(Gmagic, Gmagic_db); | |
136 printf("GMagic=%d (%s dB)\n", Gmagic, Gmagic_db); | |
137 upload_gmagic(); | |
138 return(0); | |
139 } | |
140 | |
141 do_rx_calchan() | |
142 { | |
143 unsigned n; | |
144 int pm; | |
145 | |
146 printf("Calibrating RSSI channel compensation\n"); | |
147 for (n = 0; n < rxcal_band->num_calchan_ranges; n++) { | |
148 pm = rx_measure(rxcal_band->calchan_ranges[n].test_arfcn); | |
149 rx_calchan_values[n] = RXCAL_SIGGEN_LEVEL - pm + | |
150 RXCAL_AGC_DB * 2 + Gmagic; | |
151 } | |
152 for (n = 0; n < rxcal_band->num_calchan_ranges; n++) | |
153 printf("ARFCN %u-%u: correction=%d\n", | |
154 rxcal_band->calchan_ranges[n].lower_bound, | |
155 rxcal_band->calchan_ranges[n].upper_bound, | |
156 rx_calchan_values[n]); | |
157 upload_rx_calchan(); | |
158 return(0); | |
159 } |