@@ -218,6 +218,17 @@ is_valid_rtl_bw_khz(int bw) {
218218 return (bw == 4 || bw == 6 || bw == 8 || bw == 12 || bw == 16 || bw == 24 || bw == 48 );
219219}
220220
221+ static int
222+ resolve_configured_rtl_ppm (const dsdneoUserConfig* cfg, const dsd_opts* opts) {
223+ if (!cfg) {
224+ return opts ? opts->rtlsdr_ppm_error : 0 ;
225+ }
226+ if (cfg->rtl_ppm_is_set ) {
227+ return cfg->rtl_ppm ;
228+ }
229+ return opts ? opts->rtlsdr_ppm_error : 0 ;
230+ }
231+
221232static void
222233apply_shared_radio_tuning_from_config (const dsdneoUserConfig* cfg, dsd_opts* opts) {
223234 if (!cfg || !opts) {
@@ -229,7 +240,7 @@ apply_shared_radio_tuning_from_config(const dsdneoUserConfig* cfg, dsd_opts* opt
229240 }
230241
231242 int gain = cfg->rtl_gain ? cfg->rtl_gain : opts->rtl_gain_value ;
232- int ppm = cfg-> rtl_ppm ;
243+ int ppm = resolve_configured_rtl_ppm ( cfg, opts) ;
233244 int bw = cfg->rtl_bw_khz ? cfg->rtl_bw_khz : opts->rtl_dsp_bw_khz ;
234245 int sql = cfg->rtl_sql ;
235246 int vol = cfg->rtl_volume ? cfg->rtl_volume : opts->rtl_volume_multiplier ;
@@ -257,6 +268,7 @@ snapshot_apply_live_rtl_values(const dsd_opts* opts, dsdneoUserConfig* cfg) {
257268
258269 cfg->rtl_gain = opts->rtl_gain_value ;
259270 cfg->rtl_ppm = opts->rtlsdr_ppm_error ;
271+ cfg->rtl_ppm_is_set = 1 ;
260272 cfg->rtl_bw_khz = opts->rtl_dsp_bw_khz ;
261273 cfg->rtl_sql = (int )local_pwr_to_dB (opts->rtl_squelch_level );
262274 cfg->rtl_volume = opts->rtl_volume_multiplier ;
@@ -286,6 +298,7 @@ snapshot_parse_rtl_device_spec(const char* audio_in_dev, dsdneoUserConfig* cfg)
286298 }
287299 if (n > 4 ) {
288300 cfg->rtl_ppm = atoi (tok[4 ]);
301+ cfg->rtl_ppm_is_set = 1 ;
289302 }
290303 if (n > 5 ) {
291304 cfg->rtl_bw_khz = atoi (tok[5 ]);
@@ -321,6 +334,7 @@ snapshot_parse_rtltcp_device_spec(const char* audio_in_dev, dsdneoUserConfig* cf
321334 }
322335 if (n > 5 ) {
323336 cfg->rtl_ppm = atoi (tok[5 ]);
337+ cfg->rtl_ppm_is_set = 1 ;
324338 }
325339 if (n > 6 ) {
326340 cfg->rtl_bw_khz = atoi (tok[6 ]);
@@ -529,7 +543,7 @@ dsd_user_config_render_ini(const dsdneoUserConfig* cfg, FILE* out) {
529543 if (cfg->rtl_gain ) {
530544 fprintf (out, " rtl_gain = %d\n " , cfg->rtl_gain );
531545 }
532- if (cfg->rtl_ppm ) {
546+ if (cfg->rtl_ppm_is_set ) {
533547 fprintf (out, " rtl_ppm = %d\n " , cfg->rtl_ppm );
534548 }
535549 if (cfg->rtl_bw_khz ) {
@@ -553,7 +567,7 @@ dsd_user_config_render_ini(const dsdneoUserConfig* cfg, FILE* out) {
553567 if (cfg->rtl_gain ) {
554568 fprintf (out, " rtl_gain = %d\n " , cfg->rtl_gain );
555569 }
556- if (cfg->rtl_ppm ) {
570+ if (cfg->rtl_ppm_is_set ) {
557571 fprintf (out, " rtl_ppm = %d\n " , cfg->rtl_ppm );
558572 }
559573 if (cfg->rtl_bw_khz ) {
@@ -574,7 +588,7 @@ dsd_user_config_render_ini(const dsdneoUserConfig* cfg, FILE* out) {
574588 if (cfg->rtl_gain ) {
575589 fprintf (out, " rtl_gain = %d\n " , cfg->rtl_gain );
576590 }
577- if (cfg->rtl_ppm ) {
591+ if (cfg->rtl_ppm_is_set ) {
578592 fprintf (out, " rtl_ppm = %d\n " , cfg->rtl_ppm );
579593 }
580594 if (cfg->rtl_bw_khz ) {
@@ -732,7 +746,7 @@ dsd_apply_user_config_to_opts(const dsdneoUserConfig* cfg, dsd_opts* opts, dsd_s
732746 * defaults initOpts()/CLI already established (AGC and
733747 * multiplier 2) instead of forcing hardcoded values. */
734748 int gain = cfg->rtl_gain ? cfg->rtl_gain : opts->rtl_gain_value ;
735- int ppm = cfg-> rtl_ppm ;
749+ int ppm = resolve_configured_rtl_ppm ( cfg, opts) ;
736750 int bw = cfg->rtl_bw_khz ? cfg->rtl_bw_khz : opts->rtl_dsp_bw_khz ;
737751 int sql = cfg->rtl_sql ;
738752 int vol = cfg->rtl_volume ? cfg->rtl_volume : opts->rtl_volume_multiplier ;
@@ -744,7 +758,7 @@ dsd_apply_user_config_to_opts(const dsdneoUserConfig* cfg, dsd_opts* opts, dsd_s
744758 if (cfg->rtltcp_host [0 ]) {
745759 if (cfg->rtl_freq [0 ]) {
746760 int gain = cfg->rtl_gain ? cfg->rtl_gain : opts->rtl_gain_value ;
747- int ppm = cfg-> rtl_ppm ;
761+ int ppm = resolve_configured_rtl_ppm ( cfg, opts) ;
748762 int bw = cfg->rtl_bw_khz ? cfg->rtl_bw_khz : opts->rtl_dsp_bw_khz ;
749763 int sql = cfg->rtl_sql ;
750764 int vol = cfg->rtl_volume ? cfg->rtl_volume : opts->rtl_volume_multiplier ;
0 commit comments