FreeCalypso > hg > fc-rfcal-tools
diff cmu200/rfanalyzer.c @ 40:2fb9768fc1e2
fc-cmu200d: VCXO calibration mode generalized into RF analyzer mode
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 27 May 2017 02:38:28 +0000 |
parents | cmu200/vcxocal.c@34c6fbe38daa |
children | 3f4221ef916a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmu200/rfanalyzer.c Sat May 27 02:38:28 2017 +0000 @@ -0,0 +1,76 @@ +/* + * This module implements the RF analyzer functionality + * for VCXO and Tx power level calibration support. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <strings.h> +#include "mode.h" +#include "band.h" + +extern int cmu200_rf_port; + +extern char *client_cmd_fields[]; +extern int client_cmd_nfields; + +extern int current_mode; +extern struct band *current_band; + +extern char instrument_response[]; + +cmd_rfan_setup() +{ + int rc; + unsigned arfcn; + char cmdstr[32]; + + if (client_cmd_nfields != 3) { + send_socket_response("-Wrong number of arguments\n"); + return(0); + } + stop_signal_gen(); + current_mode = OP_MODE_UNDEF; + rc = find_named_band(client_cmd_fields[1]); + if (rc < 0) { + send_socket_response("-Invalid band argument\n"); + return(0); + } + arfcn = atoi(client_cmd_fields[2]); + if (verify_arfcn(arfcn, 0, 0) < 0) { + send_socket_response("-Invalid ARFCN\n"); + return(0); + } + sprintf(cmdstr, "*SEC %d\n", current_band->secaddr); + send_scpi_cmd(cmdstr); + sprintf(cmdstr, "INP RF%d\n", cmu200_rf_port); + send_scpi_cmd(cmdstr); + sprintf(cmdstr, "RFAN:CHAN %uCH\n", arfcn); + send_scpi_cmd(cmdstr); + send_scpi_cmd("RFAN:TSEQ GSM5\n"); + current_mode = OP_MODE_GSM_RFAN; + send_socket_response("+OK\n"); + return(0); +} + +cmd_freq_meas() +{ + char *resp_fields[11]; + char client_resp[128]; + + if (current_mode != OP_MODE_GSM_RFAN) { + send_socket_response("-Wrong mode\n"); + return(0); + } + send_scpi_cmd("READ:MOD?\n"); + collect_instr_response(); + if (parse_commasep_response(resp_fields, 11) < 0) { + send_socket_response + ("-CMU200 response has wrong number of fields\n"); + return(0); + } + sprintf(client_resp, "+ %s\n", resp_fields[7]); + send_socket_response(client_resp); + return(0); +}