FreeCalypso > hg > freecalypso-tools
view librftab/rftablewr.c @ 921:74d284add54d
fc-fsio: guard against bogus readdir results from the target
If the FFS being operated on contains SE K2x0 extended filenames,
readdir will return strings that are bad for printing. We need to
guard against this possibility, and also against possible other
bogosity that could be sent by other alien firmwares.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 31 Dec 2022 22:55:23 +0000 |
parents | 059649902c7f |
children |
line wrap: on
line source
/* * 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_adccal_table(bin, outf) u_char *bin; FILE *outf; { fputs("rf_table adc-cal\n\n", outf); fprintf(outf, "%5u %6d\t# Vbat\n", get_u16(bin), get_s16(bin + 18)); fprintf(outf, "%5u %6d\t# Vchg\n", get_u16(bin + 2), get_s16(bin + 20)); fprintf(outf, "%5u %6d\t# Ichg\n", get_u16(bin + 4), get_s16(bin + 22)); fprintf(outf, "%5u %6d\t# Vbackup\n", get_u16(bin + 6), get_s16(bin + 24)); fprintf(outf, "%5u %6d\t# ADIN1\n", get_u16(bin + 8), get_s16(bin + 26)); fprintf(outf, "%5u %6d\t# ADIN2\n", get_u16(bin + 10), get_s16(bin + 28)); fprintf(outf, "%5u %6d\t# ADIN3\n", get_u16(bin + 12), get_s16(bin + 30)); fprintf(outf, "%5u %6d\t# RF Temp\n", get_u16(bin + 14), get_s16(bin + 32)); fprintf(outf, "%5u %6d\t# ADIN5\n", get_u16(bin + 16), get_s16(bin + 34)); } 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++) { if (j) putc(' ', outf); 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", 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", outf); for (i = 0; i < 4; i++) { fprintf(outf, "\n# 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)); } void write_tx_ramp(bin, outf) u_char *bin; FILE *outf; { int i; fputs("ramp-up ", outf); for (i = 0; i < 16; i++) fprintf(outf, " %3u", bin[i]); putc('\n', outf); fputs("ramp-down", outf); for (i = 0; i < 16; i++) fprintf(outf, " %3u", bin[i+16]); putc('\n', outf); } void write_tx_ramps_table(bin, outf) u_char *bin; FILE *outf; { int i; u_char *p = bin; fputs("rf_table tx-ramps\n", outf); for (i = 0; i < 16; i++) { fprintf(outf, "\n# Tx ramp template %d:\n\n", i); write_tx_ramp(p, outf); p += 32; } }