diff rvinterf/tmsh/rftablewr.c @ 138:3803f838e1f3

RF table writing code implemented, linked into fc-tmsh
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 26 Feb 2017 22:37:47 +0000
parents
children 6b01d4ef85c3
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rvinterf/tmsh/rftablewr.c	Sun Feb 26 22:37:47 2017 +0000
@@ -0,0 +1,191 @@
+/*
+ * Here we implement the writing of RF tables into ASCII text files
+ * in our defined format.  This module will also be linked by the
+ * standalone fc-cal2text utility, hence our code here needs to be
+ * independent of rvinterf and fc-tmsh specifics.
+ */
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <endian.h>
+
+static unsigned
+get_u32(bin)
+	u_char *bin;
+{
+	return le32toh(*(uint32_t *)bin);
+}
+
+static unsigned
+get_u16(bin)
+	u_char *bin;
+{
+	return le16toh(*(uint16_t *)bin);
+}
+
+static int
+get_s16(bin)
+	u_char *bin;
+{
+	int i;
+
+	i = le16toh(*(uint16_t *)bin);
+	if (i >= 32768)
+		i -= 65536;
+	return(i);
+}
+
+void
+write_afcparams_table(bin, outf)
+	u_char *bin;
+	FILE *outf;
+{
+	fputs("rf_table afcparams\n\n", outf);
+	/* 32-bit parameters */
+	fprintf(outf, "%10u\t# psi_sta_inv\n", get_u32(bin));
+	fprintf(outf, "%10u\t# psi_st\n", get_u32(bin + 4));
+	fprintf(outf, "%10u\t# psi_st_32\n", get_u32(bin + 8));
+	fprintf(outf, "%10u\t# psi_st_inv\n\n", get_u32(bin + 12));
+	/* 16-bit parameters */
+	fprintf(outf, "%10d\t# dac_center\n", get_s16(bin + 16));
+	fprintf(outf, "%10d\t# dac_min\n", get_s16(bin + 18));
+	fprintf(outf, "%10d\t# dac_max\n", get_s16(bin + 20));
+	fprintf(outf, "%10d\t# snr_thr\n", get_s16(bin + 22));
+}
+
+void
+write_agcwords_table(bin, outf)
+	u_char *bin;
+	FILE *outf;
+{
+	int i, j;
+	u_char *p = bin;
+
+	fputs("rf_table agc-table\n\n", outf);
+	for (i = 0; i < 4; i++) {
+		for (j = 0; j < 5; j++) {
+			fprintf(outf, " 0x%04X", get_u16(p));
+			p += 2;
+		}
+		putc('\n', outf);
+	}
+}
+
+void
+write_agcglobals_table(bin, outf)
+	u_char *bin;
+	FILE *outf;
+{
+	fputs("rf_table agc-global-params\n\n", outf);
+	fprintf(outf, "%5u\t# low_agc_noise_thr\n", get_u16(bin));
+	fprintf(outf, "%5u\t# high_agc_sat_thr\n", get_u16(bin + 2));
+	fprintf(outf, "%5u\t# low_agc\n", get_u16(bin + 4));
+	fprintf(outf, "%5u\t# high_agc\n", get_u16(bin + 6));
+}
+
+void
+write_il2agc_table(bin, outf)
+	u_char *bin;
+	FILE *outf;
+{
+	int idx;
+
+	fputs("rf_table il2agc\n\n", outf);
+	for (idx = 0; idx < 121; idx++)
+		fprintf(outf, "%3u\t# IL=%d\n", get_u16(bin + idx), -idx);
+}
+
+void
+write_tx_levels_table(bin, outf)
+	u_char *bin;
+	FILE *outf;
+{
+	int i;
+	u_char *p = bin;
+
+	fputs("rf_table tx-levels\n\n", outf);
+	fputs("# Fields in each entry: apc, ramp_index, chan_cal_index\n\n",
+		outf);
+	for (i = 0; i < 32; i++) {
+		fprintf(outf, "%5u %3u %3u\t# entry %d\n",
+			get_u16(p), p[2], p[3], i);
+		p += 4;
+	}
+}
+
+void
+write_tx_calchan_table(bin, outf)
+	u_char *bin;
+	FILE *outf;
+{
+	int i, j;
+	u_char *p = bin;
+
+	fputs("rf_table tx-calchan\n\n", outf);
+	for (i = 0; i < 4; i++) {
+		fprintf(outf, "# Channel calibration table %d:\n\n", i);
+		for (j = 0; j < 8; j++) {
+			fprintf(outf, "%5u %6d\n", get_u16(p), get_s16(p + 2));
+			p += 4;
+		}
+	}
+}
+
+void
+write_tx_caltemp_table(bin, outf)
+	u_char *bin;
+	FILE *outf;
+{
+	int i;
+	u_char *p = bin;
+
+	fputs("rf_table tx-caltemp\n\n", outf);
+	for (i = 0; i < 5; i++) {
+		fprintf(outf, "%6d %6d %6d %6d\n", get_s16(p), get_s16(p + 2),
+			get_s16(p + 4), get_s16(p + 6));
+		p += 8;
+	}
+}
+
+void
+write_rx_calchan_table(bin, outf)
+	u_char *bin;
+	FILE *outf;
+{
+	int i;
+	u_char *p = bin;
+
+	fputs("rf_table rx-calchan\n\n", outf);
+	for (i = 0; i < 10; i++) {
+		fprintf(outf, "%5u %6d\n", get_u16(p), get_s16(p + 2));
+		p += 4;
+	}
+}
+
+void
+write_rx_caltemp_table(bin, outf)
+	u_char *bin;
+	FILE *outf;
+{
+	int i;
+	u_char *p = bin;
+
+	fputs("rf_table rx-caltemp\n\n", outf);
+	for (i = 0; i < 11; i++) {
+		fprintf(outf, "%6d %6d\n", get_s16(p), get_s16(p + 2));
+		p += 4;
+	}
+}
+
+void
+write_rx_agcparams_table(bin, outf)
+	u_char *bin;
+	FILE *outf;
+{
+	fputs("rf_table rx-agc-params\n\n", outf);
+	fprintf(outf, "%5u\t# g_magic\n", get_u16(bin));
+	fprintf(outf, "%5u\t# lna_att\n", get_u16(bin + 2));
+	fprintf(outf, "%5u\t# lna_switch_thr_low\n", get_u16(bin + 4));
+	fprintf(outf, "%5u\t# lna_switch_thr_high\n", get_u16(bin + 6));
+}