diff rvinterf/tmsh/saverftab.c @ 139:b5e3899b1265

fc-tmsh: save-rf-table command implemented
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 26 Feb 2017 23:13:52 +0000
parents
children e6c265bf5a6d
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rvinterf/tmsh/saverftab.c	Sun Feb 26 23:13:52 2017 +0000
@@ -0,0 +1,81 @@
+/*
+ * Here we implement fc-tmsh operator commands which save the RF table data
+ * received via rftr and ttr commands into files.
+ */
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <string.h>
+#include <strings.h>
+#include <stdlib.h>
+#include "l1tm.h"
+#include "exitcodes.h"
+
+extern unsigned rftr_table_index, rftr_table_size;
+extern u_char rftr_table_data[];
+extern u_char ttr_ramp_data[];
+
+extern void write_afcparams_table();
+extern void write_agcwords_table();
+extern void write_agcglobals_table();
+extern void write_il2agc_table();
+extern void write_tx_levels_table();
+extern void write_tx_calchan_table();
+extern void write_tx_caltemp_table();
+extern void write_rx_calchan_table();
+extern void write_rx_caltemp_table();
+extern void write_rx_agcparams_table();
+
+static struct table_map {
+	int	index;
+	int	size;
+	void	(*func)();
+} table_map[] = {
+	{RX_AGC_TABLE,		40,	write_agcwords_table},
+	{AFC_PARAMS,		24,	write_afcparams_table},
+	{RX_AGC_GLOBAL_PARAMS,	8,	write_agcglobals_table},
+	{RX_IL_2_AGC_MAX,	121,	write_il2agc_table},
+	{RX_IL_2_AGC_PWR,	121,	write_il2agc_table},
+	{RX_IL_2_AGC_AV,	121,	write_il2agc_table},
+	{TX_LEVELS,		128,	write_tx_levels_table},
+	{TX_CAL_CHAN,		128,	write_tx_calchan_table},
+	{TX_CAL_TEMP,		40,	write_tx_caltemp_table},
+	{RX_CAL_CHAN,		40,	write_rx_calchan_table},
+	{RX_CAL_TEMP,		44,	write_rx_caltemp_table},
+	{RX_AGC_PARAMS,		8,	write_rx_agcparams_table},
+	{0,			0,	0}
+};
+
+cmd_save_rf_table(argc, argv)
+	char **argv;
+{
+	struct table_map *tp;
+	FILE *outf;
+
+	if (!rftr_table_size) {
+		printf("error: no RF table has been received\n");
+		return(ERROR_TARGET);
+	}
+	for (tp = table_map; tp->index; tp++) {
+		if (tp->index == rftr_table_index)
+			break;
+	}
+	if (!tp->index) {
+		printf("error: received table index %u not known\n",
+			rftr_table_index);
+		return(ERROR_TARGET);
+	}
+	if (rftr_table_size != tp->size &&
+	    (rftr_table_index != RX_AGC_PARAMS || rftr_table_size != 10)) {
+		printf("error: received table index and size don't match\n");
+		return(ERROR_TARGET);
+	}
+	outf = fopen(argv[1], "w");
+	if (!outf) {
+		perror(argv[1]);
+		return(ERROR_UNIX);
+	}
+	tp->func(rftr_table_data, outf);
+	fclose(outf);
+	return(0);
+}