FreeCalypso > hg > freecalypso-tools
view 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 source
/* * 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); }