comparison autocal/rxcommon.c @ 49:1a0dbc746d57

autocal: Rx cal main engine implemented
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 27 May 2017 07:23:20 +0000
parents 751f8d9efed0
children
comparison
equal deleted inserted replaced
48:201f27bd8dca 49:1a0dbc746d57
3 * fc-rfcal-gmagic and fc-rfcal-rxband. 3 * fc-rfcal-gmagic and fc-rfcal-rxband.
4 */ 4 */
5 5
6 #include <stdio.h> 6 #include <stdio.h>
7 #include <stdlib.h> 7 #include <stdlib.h>
8 #include <unistd.h>
8 #include <rvinterf/l1tm.h> 9 #include <rvinterf/l1tm.h>
9 #include <rvinterf/exitcodes.h> 10 #include <rvinterf/exitcodes.h>
11 #include "l1stats.h"
10 #include "rxcaldefs.h" 12 #include "rxcaldefs.h"
11 13
12 l1tm_setup_for_rxcal() 14 l1tm_setup_for_rxcal()
13 { 15 {
14 do_rxpw(RX_AGC_ENA_FLAG, 0); 16 do_rxpw(RX_AGC_ENA_FLAG, 0);
36 sprintf(strbuf, "%s%d.%c", sign ? "-" : "", halfdb >> 1, 38 sprintf(strbuf, "%s%d.%c", sign ? "-" : "", halfdb >> 1,
37 halfdb & 1 ? '5' : '0'); 39 halfdb & 1 ? '5' : '0');
38 return(0); 40 return(0);
39 } 41 }
40 42
43 static unsigned
41 rx_single_offset_meas(arfcn, offset) 44 rx_single_offset_meas(arfcn, offset)
42 unsigned arfcn; 45 unsigned arfcn;
43 char *offset; 46 char *offset;
44 { 47 {
45 char dbm[64], tsid_cmd[128]; 48 char dbm[64], tsid_cmd[128];
49 struct l1stats l1st;
50 unsigned pm;
46 51
47 halfdb_to_string(RXCAL_SIGGEN_LEVEL, dbm); 52 halfdb_to_string(RXCAL_SIGGEN_LEVEL, dbm);
48 printf("Rx meas at ARFCN %u offset %s kHz, TL=%s dBm, AGC=%d dB\n", 53 printf("Rx meas at ARFCN %u offset %s kHz, TL=%s dBm, AGC=%d dB\n",
49 arfcn, offset, dbm, RXCAL_AGC_DB); 54 arfcn, offset, dbm, RXCAL_AGC_DB);
50 sprintf(tsid_cmd, "signal-gen-sine %u %s %s\n", arfcn, offset, dbm); 55 sprintf(tsid_cmd, "signal-gen-sine %u %s %s\n", arfcn, offset, dbm);
51 tsid_command(tsid_cmd); 56 tsid_command(tsid_cmd);
57 usleep(20000);
58 do_rfe(RX_TCH);
59 collect_auto_stats(&l1st);
60 collect_rfe_completion();
61 if (!(l1st.bitmask & DSP_PM)) {
62 fprintf(stderr, "DUT error: no DSP_PM in auto-stats msg\n");
63 exit(ERROR_TARGET);
64 }
65 pm = l1st.dsp_pm;
66 printf("DSP_PM=0x%04X, %u half-dBm\n", pm, (pm + 16) >> 5);
67 return(pm);
68 }
52 69
70 unsigned
71 rx_measure(arfcn)
72 unsigned arfcn;
73 {
74 unsigned pm1, pm2;
53 75
76 do_rfpw(TCH_ARFCN, arfcn);
77 pm1 = rx_single_offset_meas(arfcn, "+67");
78 pm2 = rx_single_offset_meas(arfcn, "-67");
79 return (pm1 + pm2 + 32) >> 6;
54 } 80 }