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 }