From e8184c7fbdb3401b68d1018b6ea327fb5988b82c Mon Sep 17 00:00:00 2001 From: lwvmobile Date: Sat, 23 Mar 2024 17:13:44 -0400 Subject: [PATCH] RTL - Add The Sample / Volume Multiplier as a user configurable option; --- examples/Example_Usage.md | 8 ++++---- src/dsd_main.c | 27 ++++++++++++++++++--------- src/dsd_ncurses.c | 33 +++++++++++++++++++++++---------- 3 files changed, 45 insertions(+), 23 deletions(-) diff --git a/examples/Example_Usage.md b/examples/Example_Usage.md index e68f868..27a4b6a 100644 --- a/examples/Example_Usage.md +++ b/examples/Example_Usage.md @@ -74,7 +74,7 @@ Detailed Setup: ``` RTL-SDR options: - Usage: rtl:dev:freq:gain:ppm:bw:sq:udp + Usage: rtl:dev:freq:gain:ppm:bw:sq:vol NOTE: all arguments after rtl are optional now for trunking, but user configuration is recommended dev RTL-SDR Device Index Number freq RTL-SDR Frequency (851800000 or 851.8M) @@ -82,9 +82,9 @@ RTL-SDR options: ppm RTL-SDR PPM Error (default = 0) bw RTL-SDR Bandwidth kHz (default = 12)(8, 12, 16, 24) sq RTL-SDR Squelch Level vs RMS Value (Optional) - udp RTL-SDR Legacy UDP Remote Port (Optional -- External Use Only) - Example: dsd-fme-zdev -fs -i rtl -C cap_plus_channel.csv -T - Example: dsd-fme-zdev -fp -i rtl:0:851.375M:22:-2:24:0:6021 + vol RTL-SDR Sample 'Volume' Multiplier (default = 1)(1,2,3) + Example: dsd-fme -fs -i rtl -C cap_plus_channel.csv -T + Example: dsd-fme -fp -i rtl:0:851.375M:22:-2:24:0:2 ``` diff --git a/src/dsd_main.c b/src/dsd_main.c index 99ed803..350743f 100644 --- a/src/dsd_main.c +++ b/src/dsd_main.c @@ -1245,7 +1245,7 @@ usage () printf (" /dev/dsp for OSS audio (Depreciated: Will require padsp wrapper in Linux) \n"); #endif printf (" rtl for rtl dongle (Default Values -- see below)\n"); - printf (" rtl:dev:freq:gain:ppm:bw:sq:udp for rtl dongle (see below)\n"); + printf (" rtl:dev:freq:gain:ppm:bw:sq:vol for rtl dongle (see below)\n"); printf (" tcp for tcp client SDR++/GNURadio Companion/Other (Port 7355)\n"); printf (" tcp:192.168.7.5:7355 for custom address and port \n"); printf (" filename.bin for OP25/FME capture bin files\n"); @@ -1292,12 +1292,12 @@ usage () // #ifdef AERO_BUILD printf (" If using /dev/dsp input and output at 48k1, launch two instances of DSD-FME w -V 1 and -V 2 if needed"); // #endif - printf (" (Audio Smoothing is now disabled on all upsampled output by default -- fix crackle/buzz bug)\n"); + // printf (" (Audio Smoothing is now disabled on all upsampled output by default -- fix crackle/buzz bug)\n"); printf (" -z Set TDMA Voice Slot Preference when using /dev/dsp audio output (prevent lag and stuttering)\n"); printf (" -y Enable Experimental Pulse Audio Float Audio Output\n"); printf ("\n"); printf ("RTL-SDR options:\n"); - printf (" Usage: rtl:dev:freq:gain:ppm:bw:sq:udp\n"); + printf (" Usage: rtl:dev:freq:gain:ppm:bw:sq:vol\n"); printf (" NOTE: all arguments after rtl are optional now for trunking, but user configuration is recommended\n"); printf (" dev RTL-SDR Device Index Number or 8 Digit Serial Number, no strings! (default 0)\n"); printf (" freq RTL-SDR Frequency (851800000 or 851.8M) \n"); @@ -1305,9 +1305,10 @@ usage () printf (" ppm RTL-SDR PPM Error (default = 0)\n"); printf (" bw RTL-SDR Bandwidth kHz (default = 12)(4, 6, 8, 12, 16, 24) \n"); printf (" sq RTL-SDR Squelch Level vs RMS Value (Optional)\n"); - printf (" udp RTL-SDR Legacy UDP Remote Port (Optional -- External Use Only)\n"); + // printf (" udp RTL-SDR Legacy UDP Remote Port (Optional -- External Use Only)\n"); //NOTE: This is still available as an option in the ncurses menu + printf (" vol RTL-SDR Sample 'Volume' Multiplier (default = 1)(1,2,3)\n"); printf (" Example: dsd-fme -fs -i rtl -C cap_plus_channel.csv -T\n"); - printf (" Example: dsd-fme -fp -i rtl:0:851.375M:22:-2:24:0:6021\n"); + printf (" Example: dsd-fme -fp -i rtl:0:851.375M:22:-2:24:0:2\n"); printf ("\n"); printf ("Encoder options:\n"); printf (" -fZ M17 Stream Voice Encoder\n"); @@ -2771,8 +2772,12 @@ main (int argc, char **argv) if (curr != NULL) opts.rtl_squelch_level = atoi (curr); else goto RTLEND; - curr = strtok(NULL, ":"); //rtl udp port "-U" - if (curr != NULL) opts.rtl_udp_port = atoi (curr); + // curr = strtok(NULL, ":"); //rtl udp port "-U" + // if (curr != NULL) opts.rtl_udp_port = atoi (curr); + // else goto RTLEND; + + curr = strtok(NULL, ":"); //rtl sample / volume multiplier + if (curr != NULL) opts.rtl_volume_multiplier = atoi (curr); else goto RTLEND; RTLEND: @@ -2804,15 +2809,19 @@ main (int argc, char **argv) } + if (opts.rtl_volume_multiplier > 3 || opts.rtl_volume_multiplier < 0) + opts.rtl_volume_multiplier = 1; //I wonder if you could flip polarity by using -1 + fprintf (stderr, "Dev %d ", opts.rtl_dev_index); fprintf (stderr, "Freq %d ", opts.rtlsdr_center_freq); fprintf (stderr, "Gain %d ", opts.rtl_gain_value); fprintf (stderr, "PPM %d ", opts.rtlsdr_ppm_error); fprintf (stderr, "BW %d ", opts.rtl_bandwidth); fprintf (stderr, "SQ %d ", opts.rtl_squelch_level); - fprintf (stderr, "UDP %d \n", opts.rtl_udp_port); + // fprintf (stderr, "UDP %d \n", opts.rtl_udp_port); + fprintf (stderr, "VOL %d \n", opts.rtl_volume_multiplier); opts.audio_in_type = 3; - opts.rtl_volume_multiplier = 2; //double, see if this cleans up weak decodes from RTL_FM + // opts.rtl_volume_multiplier = 2; //TODO: Make this an extra value on the end rtl_ok = 1; #endif diff --git a/src/dsd_ncurses.c b/src/dsd_ncurses.c index 6008c23..c757d8c 100644 --- a/src/dsd_ncurses.c +++ b/src/dsd_ncurses.c @@ -725,6 +725,17 @@ void ncursesMenu (dsd_opts * opts, dsd_state * state) wscanw(entry_win, "%d", &opts->rtl_udp_port); noecho(); + entry_win = newwin(6, WIDTH+18, starty+10, startx+10); + box (entry_win, 0, 0); + mvwprintw(entry_win, 2, 2, " RTL Vol Multiplier (1,2,3) (Default = 1): "); + mvwprintw(entry_win, 3, 3, " "); + echo(); + refresh(); + wscanw(entry_win, "%d", &opts->rtl_volume_multiplier); + if (opts->rtl_volume_multiplier > 3 || opts->rtl_volume_multiplier < 0) + opts->rtl_volume_multiplier = 1; + noecho(); + entry_win = newwin(8, WIDTH+22, starty+10, startx+10); box (entry_win, 0, 0); mvwprintw(entry_win, 2, 2, " RTL RMS Squelch Level (NXDN/dPMR/Analog/Raw only): "); @@ -763,19 +774,20 @@ void ncursesMenu (dsd_opts * opts, dsd_state * state) } - entry_win = newwin(17, WIDTH+20, starty+10, startx+10); + entry_win = newwin(18, WIDTH+20, starty+10, startx+10); box (entry_win, 0, 0); mvwprintw(entry_win, 2, 2, " Starting RTL Input. Cannot Release/Stop Until Exit."); mvwprintw(entry_win, 4, 2, " RTL Frequency: %d Hz", opts->rtlsdr_center_freq); mvwprintw(entry_win, 5, 2, " RTL Device Index Number: %d; SN:%s", opts->rtl_dev_index, serial); mvwprintw(entry_win, 6, 2, " RTL Device Bandwidth: %d kHz", opts->rtl_bandwidth); mvwprintw(entry_win, 7, 2, " RTL Device Gain: %d", opts->rtl_gain_value); - mvwprintw(entry_win, 8, 2, " RTL Device UDP Port: %d", opts->rtl_udp_port); - mvwprintw(entry_win, 9, 2, " RTL Device PPM: %d", opts->rtlsdr_ppm_error); - mvwprintw(entry_win, 10, 2, " RTL RMS Squelch: %d", opts->rtl_squelch_level); - mvwprintw(entry_win, 12, 2, " Are You Sure?"); - mvwprintw(entry_win, 13, 2, " 1 = Yes, 2 = No "); - mvwprintw(entry_win, 14, 3, " "); + mvwprintw(entry_win, 8, 2, " RTL Volume Multiplier: %d", opts->rtl_volume_multiplier); + mvwprintw(entry_win, 9, 2, " RTL Device UDP Port: %d", opts->rtl_udp_port); + mvwprintw(entry_win, 10, 2, " RTL Device PPM: %d", opts->rtlsdr_ppm_error); + mvwprintw(entry_win, 11, 2, " RTL RMS Squelch: %d", opts->rtl_squelch_level); + mvwprintw(entry_win, 13, 2, " Are You Sure?"); + mvwprintw(entry_win, 14, 2, " 1 = Yes, 2 = No "); + mvwprintw(entry_win, 15, 3, " "); echo(); refresh(); wscanw(entry_win, "%d", &confirm); @@ -2376,13 +2388,14 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) { printw ("| RTL: %d;", opts->rtl_dev_index); if (opts->rtl_gain_value == 0) - printw (" Gain: AGC;"); + printw (" G: AGC;"); else - printw (" Gain: %idB;", opts->rtl_gain_value); + printw (" G: %idB;", opts->rtl_gain_value); + printw (" V: %iX;", opts->rtl_volume_multiplier); printw (" PPM: %i;", opts->rtlsdr_ppm_error); printw (" SQ: %i;", opts->rtl_squelch_level); printw (" RMS: %04li;", opts->rtl_rms); - printw (" BW: %i kHz;", opts->rtl_bandwidth); + printw (" BW: %i;", opts->rtl_bandwidth); printw (" FRQ: %i;", opts->rtlsdr_center_freq); if (opts->rtl_udp_port != 0) printw ("\n| External RTL Tuning on UDP Port: %i", opts->rtl_udp_port); printw ("\n");