From dd3401fd90f532095e8bf7744627b966a47baeaa Mon Sep 17 00:00:00 2001 From: Andrew Onyshchuk Date: Tue, 6 Aug 2024 12:51:04 -0700 Subject: [PATCH] Fix gain mode (rtlsdr) --- src/convenience/convenience.c | 25 +++++++++++++------------ src/rtl_fm.c | 7 ------- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/src/convenience/convenience.c b/src/convenience/convenience.c index d1a33c0..83d470f 100644 --- a/src/convenience/convenience.c +++ b/src/convenience/convenience.c @@ -239,14 +239,15 @@ int verbose_auto_gain(SoapySDRDevice *dev, size_t channel) { int r; r = 0; - /* TODO: not bridged, https://github.com/pothosware/SoapyRTLSDR/search?utf8=✓&q=rtlsdr_set_tuner_gain_mode - r = rtlsdr_set_tuner_gain_mode(dev, 0); - if (r != 0) { - fprintf(stderr, "WARNING: Failed to set tuner gain.\n"); - } else { + if (SoapySDRDevice_hasGainMode(dev, SOAPY_SDR_RX, channel)) { + r = SoapySDRDevice_setGainMode(dev, SOAPY_SDR_RX, channel, /*automatic*/ true); + if (r != 0) { + fprintf(stderr, "WARNING: Failed to enable auto gain: %s\n", SoapySDRDevice_lastError()); + return r; + } fprintf(stderr, "Tuner gain set to automatic.\n"); + return 0; } - */ // Per-driver hacks TODO: clean this up char *driver = SoapySDRDevice_getDriverKey(dev); @@ -288,13 +289,13 @@ int verbose_gain_str_set(SoapySDRDevice *dev, char *gain_str, size_t channel) { int r = 0; - /* TODO: manual gain mode - r = rtlsdr_set_tuner_gain_mode(dev, 1); - if (r < 0) { - fprintf(stderr, "WARNING: Failed to enable manual gain.\n"); - return r; + if (SoapySDRDevice_hasGainMode(dev, SOAPY_SDR_RX, channel)) { + r = SoapySDRDevice_setGainMode(dev, SOAPY_SDR_RX, channel, /*automatic*/ false); + if (r != 0) { + fprintf(stderr, "WARNING: Failed to enable manual gain: %s\n", SoapySDRDevice_lastError()); + return r; + } } - */ if (strchr(gain_str, '=')) { // Set each gain individually (more control) diff --git a/src/rtl_fm.c b/src/rtl_fm.c index 0093007..851c69e 100644 --- a/src/rtl_fm.c +++ b/src/rtl_fm.c @@ -225,8 +225,6 @@ void usage(void) "\t rdc: enable dc blocking filter on raw I/Q data at capture rate\n" "\t adc: enable dc blocking filter on demodulated audio\n" "\t dc: same as adc\n" - "\t rtlagc: enable rtl2832's digital agc (default: off)\n" - "\t agc: same as rtlagc\n" "\t deemp: enable de-emphasis filter\n" "\t direct: enable direct sampling (bypasses tuner, uses rtl2832 xtal)\n" "\t no-mod: enable no-mod direct sampling\n" @@ -1213,7 +1211,6 @@ int main(int argc, char **argv) int custom_ppm = 0; int r, opt; int timeConstant = 75; /* default: U.S. 75 uS */ - int rtlagc = 0; char *antenna_str = NULL; dongle_init(&dongle); demod_init(&demod); @@ -1292,8 +1289,6 @@ int main(int argc, char **argv) dongle.direct_sampling = 3;} if (strcmp("offset", optarg) == 0) { dongle.offset_tuning = 1;} - if (strcmp("rtlagc", optarg) == 0 || strcmp("agc", optarg) == 0) { - rtlagc = 1;} if (strcmp("zero", optarg) == 0) { demod.squelch_zero = 1;} if (strcmp("wav", optarg) == 0) { @@ -1429,8 +1424,6 @@ int main(int argc, char **argv) verbose_gain_str_set(dongle.dev, dongle.gain_str, dongle.channel); } - SoapySDRDevice_setGainMode(dongle.dev, SOAPY_SDR_RX, dongle.channel, rtlagc); - if (custom_ppm) verbose_ppm_set(dongle.dev, dongle.ppm_error, dongle.channel); verbose_set_bandwidth(dongle.dev, dongle.bandwidth, dongle.channel);