From 5ab2ffb580da0a84cb6ffe88545ec5e4f3d2e6f3 Mon Sep 17 00:00:00 2001 From: Harsh Sharma Date: Fri, 29 Jan 2021 16:43:34 -0600 Subject: Added pa, mix, dig and dac options to utiltx test --- libloragw/tst/test_loragw_gps.c | 10 +----- util_tx_test/src/util_tx_test.c | 71 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 70 insertions(+), 11 deletions(-) diff --git a/libloragw/tst/test_loragw_gps.c b/libloragw/tst/test_loragw_gps.c index bb84068..994c0ad 100644 --- a/libloragw/tst/test_loragw_gps.c +++ b/libloragw/tst/test_loragw_gps.c @@ -51,8 +51,6 @@ struct tref ppm_ref; /* --- PRIVATE FUNCTIONS DECLARATION ---------------------------------------- */ static void sig_handler(int sigio); -static void gps_process_sync(void); -static void gps_process_coords(void); /* -------------------------------------------------------------------------- */ /* --- PRIVATE FUNCTIONS DEFINITION ----------------------------------------- */ @@ -82,13 +80,8 @@ int main() char serial_buff[128]; /* buffer to receive GPS data */ /* NMEA/UBX variables */ - enum gps_msg latest_msg = UNKNOWN; /* keep track of latest NMEA/UBX message parsed */ static struct tref time_reference_gps; /* time reference used for GPS <-> timestamp conversion */ - fd_set fds; - char delim[4] = "$"; - char *token[254]; - /* configure signal handling */ sigemptyset(&sigact.sa_mask); sigact.sa_flags = 0; @@ -135,7 +128,6 @@ int main() while ((quit_sig != 1) && (exit_sig != 1)) { wait_ms(100); int r = gps_read(&gpsdata, 0, 0); - int used=0; if (r!= -1 && (gpsdata.status != STATUS_NO_FIX) && (gpsdata.fix.mode == MODE_2D || gpsdata.fix.mode == MODE_3D) && !isnan(gpsdata.fix.latitude) && @@ -148,7 +140,7 @@ int main() lgw_gps_sync(&time_reference_gps, trig_tstamp, gpsdata.fix.time); printf("\n--- GPS ---\n"); - printf("Set: %d\n", gpsdata.set); + printf("Set: %lld\n", gpsdata.set); printf("Online: %10.0f\n", gpsdata.online); printf("Status: %d\n", gpsdata.status); printf("Satellites Used: %d\n", gpsdata.satellites_used); diff --git a/util_tx_test/src/util_tx_test.c b/util_tx_test/src/util_tx_test.c index 0ac8244..f217d16 100644 --- a/util_tx_test/src/util_tx_test.c +++ b/util_tx_test/src/util_tx_test.c @@ -153,6 +153,10 @@ void usage(void) { printf(" --lbt-sctm lbt scan time in usec to be applied to all channels [128, 5000]\n"); printf(" --lbt-rssi lbt rssi target in dBm [-128..0]\n"); printf(" --lbt-rssi-offset rssi offset in dB to be applied to SX127x RSSI [-128..127]\n"); + printf(" --pa pa gain\n"); + printf(" --mix mix gain\n"); + printf(" --dig dig gain\n"); + printf(" --dac dac gain\n"); printf(" --path path of SPIDEV e.g. /dev/spidev0.0\n"); } @@ -193,6 +197,11 @@ int main(int argc, char **argv) uint8_t lbt_nb_channel = 1; uint32_t sx1301_count_us; uint32_t tx_notch_freq = DEFAULT_NOTCH_FREQ; + bool force_tx_lut = false; + uint8_t dig_gain = 0; /*!> 2 bits, control of the digital gain of SX1301 */ + uint8_t pa_gain = 0; /*!> 2 bits, control of the external PA (SX1301 I/O) */ + uint8_t dac_gain = 0; /*!> 2 bits, control of the radio DAC */ + uint8_t mix_gain = 0; /*!> 4 bits, control of the radio mixer */ /* RF configuration (TX fail if RF chain is not enabled) */ enum lgw_radio_type_e radio_type = LGW_RADIO_TYPE_NONE; @@ -215,7 +224,10 @@ int main(int argc, char **argv) {"lbt-rssi", required_argument, 0, 0}, {"lbt-nbch", required_argument, 0, 0}, {"lbt-rssi-offset", required_argument, 0, 0}, - {"path", required_argument, 0, 0}, + {"pa", required_argument, 0, 0}, + {"mix", required_argument, 0, 0}, + {"dig", required_argument, 0, 0}, + {"dac", required_argument, 0, 0}, {0, 0, 0, 0} }; @@ -472,6 +484,46 @@ int main(int argc, char **argv) usage(); return EXIT_FAILURE; } + } else if( strcmp(long_options[option_index].name, "pa") == 0 ) { /* */ + i = sscanf(optarg, "%i", &xi); + if ((i != 1) || (xi < 0)) { + MSG("ERROR: invalid PA gain\n"); + usage(); + return EXIT_FAILURE; + } else { + pa_gain = xi; + force_tx_lut = true; + } + } else if( strcmp(long_options[option_index].name, "dig") == 0 ) { /* */ + i = sscanf(optarg, "%i", &xi); + if ((i != 1) || (xi < 0)) { + MSG("ERROR: invalid Dig gain\n"); + usage(); + return EXIT_FAILURE; + } else { + dig_gain = xi; + force_tx_lut = true; + } + } else if( strcmp(long_options[option_index].name, "dac") == 0 ) { /* */ + i = sscanf(optarg, "%i", &xi); + if ((i != 1) || (xi < 0)) { + MSG("ERROR: invalid Dac gain\n"); + usage(); + return EXIT_FAILURE; + } else { + dac_gain = xi; + force_tx_lut = true; + } + } else if( strcmp(long_options[option_index].name, "mix") == 0 ) { /* */ + i = sscanf(optarg, "%i", &xi); + if ((i != 1) || (xi < 0)) { + MSG("ERROR: invalid mix gain\n"); + usage(); + return EXIT_FAILURE; + } else { + mix_gain = xi; + force_tx_lut = true; + } } else if (strcmp(long_options[option_index].name,"path") == 0) { /* Path to spi device */ i = sscanf(optarg, "%s", arg_s); if ((i != 1) || (strncmp(arg_s, "/dev/", 5 ) != 0)) { @@ -555,7 +607,22 @@ int main(int argc, char **argv) } /* TX gain config */ - lgw_txgain_setconf(&txgain_lut); + if (force_tx_lut) { + struct lgw_tx_gain_lut_s txgain_lut_forced = { + .size = 1, + .lut[0] = { + .dig_gain = dig_gain, + .pa_gain = pa_gain, + .dac_gain = dac_gain, + .mix_gain = mix_gain, + .rf_power = 0 + } + }; + lgw_txgain_setconf(&txgain_lut_forced); + MSG("settings forced dig_gain%d pa_gain%d dac_gain%d mix_gain%d", dig_gain, pa_gain, dac_gain, mix_gain); + } else { + lgw_txgain_setconf(&txgain_lut); + } /* Start concentrator */ i = lgw_start(); -- cgit v1.2.3