FreeCalypso > hg > fc-rfcal-tools
comparison autocal/txlevels.c @ 101:b0618796d28d
fc-rfcal-txband: added safety checks for NaN power measurements and
out-of-tolerance final Tx power levels
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 11 Aug 2017 03:20:43 +0000 |
parents | a2d4cab0a592 |
children | 80281b67511f |
comparison
equal
deleted
inserted
replaced
100:7ad5836d3b87 | 101:b0618796d28d |
---|---|
1 /* | 1 /* |
2 * The calibration of Tx power levels is implemented here. | 2 * The calibration of Tx power levels is implemented here. |
3 */ | 3 */ |
4 | 4 |
5 #include <math.h> | |
5 #include <stdio.h> | 6 #include <stdio.h> |
6 #include <stdlib.h> | 7 #include <stdlib.h> |
7 #include <rvinterf/l1tm.h> | 8 #include <rvinterf/l1tm.h> |
8 #include <rvinterf/exitcodes.h> | 9 #include <rvinterf/exitcodes.h> |
9 #include "txband.h" | 10 #include "txband.h" |
36 } | 37 } |
37 | 38 |
38 calibrate_tx_levels() | 39 calibrate_tx_levels() |
39 { | 40 { |
40 unsigned plnum, plidx, apc; | 41 unsigned plnum, plidx, apc; |
41 double target, meas; | 42 double target, meas, error; |
43 int nanflag = 0, errflag = 0; | |
42 | 44 |
43 printf("Calibrating Tx power levels\n"); | 45 printf("Calibrating Tx power levels\n"); |
44 printf("Starting RF Tx on the DUT\n"); | 46 printf("Starting RF Tx on the DUT\n"); |
45 do_rfe(RX_TX_TCH); | 47 do_rfe(RX_TX_TCH); |
46 | 48 |
52 apc = find_apc_for_target(target, &tx_levels[plidx].slope); | 54 apc = find_apc_for_target(target, &tx_levels[plidx].slope); |
53 tx_levels[plidx].apc = apc; | 55 tx_levels[plidx].apc = apc; |
54 do_txpw(TX_APC_DAC, apc); | 56 do_txpw(TX_APC_DAC, apc); |
55 usleep(20000); | 57 usleep(20000); |
56 meas = tx_power_meas(); | 58 meas = tx_power_meas(); |
59 if (isnan(meas)) | |
60 nanflag = 1; | |
61 error = meas - target; | |
62 if (error < -2.0 || error > 2.0) | |
63 errflag = 1; | |
57 printf( | 64 printf( |
58 "Tx power level #%u: target %.1f dBm, APC=%u, meas %.2f dBm (%+.2f)\n", | 65 "Tx power level #%u: target %.1f dBm, APC=%u, meas %.2f dBm (%+.2f)\n", |
59 plnum, target, apc, meas, meas - target); | 66 plnum, target, apc, meas, error); |
60 } | 67 } |
61 | 68 |
62 printf("Stopping RF Tx on the DUT\n"); | 69 printf("Stopping RF Tx on the DUT\n"); |
63 do_rfe(STOP_ALL); | 70 do_rfe(STOP_ALL); |
71 if (nanflag) { | |
72 printf("Error: got NaN power measurement, aborting\n"); | |
73 exit(ERROR_TARGET); | |
74 } | |
75 if (errflag) { | |
76 printf("Error: Tx power off by more than 2 dBm, aborting\n"); | |
77 exit(ERROR_TARGET); | |
78 } | |
64 return(0); | 79 return(0); |
65 } | 80 } |