From 50c8a2ac3aaaf252d55e0306a28adb14356abe05 Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Sun, 19 Jun 2022 19:28:49 +0200 Subject: [PATCH] Corrected error in output path calculation --- sa_cmd.c | 26 +++++++++++++++++--------- sa_core.c | 49 ++++++++++++++++++++++++++++++++++--------------- 2 files changed, 51 insertions(+), 24 deletions(-) diff --git a/sa_cmd.c b/sa_cmd.c index e9924e6..1391016 100644 --- a/sa_cmd.c +++ b/sa_cmd.c @@ -1012,18 +1012,26 @@ VNA_SHELL_FUNCTION(cmd_f) } #endif -//#define CORRECTION_LOW 0 -//#define CORRECTION_LNA 1 -//#define CORRECTION_LOW_ULTRA 2 -//#define CORRECTION_LNA_ULTRA 3 -//#define CORRECTION_LOW_OUT 4 -//#define CORRECTION_HIGH 5 +//#ifdef DIRECT_CORRECTION +// #define CORRECTION_DIRECT 4 +// #define CORRECTION_LNA_DIRECT 5 +//#endif +// #define CORRECTION_LOW_OUT 6 +// #define CORRECTION_LOW_OUT_DIRECT 7 +// #define CORRECTION_LOW_OUT_ADF 8 +// #define CORRECTION_LOW_OUT_MIXER 9 +// #define CORRECTION_HIGH 10 +// #define CORRECTION_SIZE 11 VNA_SHELL_FUNCTION(cmd_correction) { (void)argc; #ifdef TINYSA4 - static const char cmd[] = "low|lna|ultra|ultra_lna|out|high|off|on"; +#ifdef DIRECT_CORRECTION + static const char cmd[] = "low|lna|ultra|ultra_lna|direct|direct_lna|out|out_direct|out_adf|out_mixer|high|off|on"; +#else + static const char cmd[] = "low|lna|ultra|ultra_lna|out|out_direct|out_adf|out_mixer|high|off|on"; +#endif static const char range[] = "0-19"; #else static const char cmd[] = "low|high"; @@ -1033,10 +1041,10 @@ VNA_SHELL_FUNCTION(cmd_correction) if (argc == 1 && m >=0) { #ifdef TINYSA4 switch(m) { - case 6: // Off + case CORRECTION_SIZE: // Off setting.disable_correction = true; goto show; - case 7: // on + case CORRECTION_SIZE+1: // on setting.disable_correction = false; show: dirty = true; // recalculate intermediate table diff --git a/sa_core.c b/sa_core.c index 243ab72..79df0dc 100644 --- a/sa_core.c +++ b/sa_core.c @@ -199,19 +199,19 @@ void set_output_path(freq_t f, float level) signal_path = PATH_OFF; else if (MODE_HIGH(setting.mode)) signal_path = PATH_HIGH; - else if ((f < MINIMUM_DIRECT_FREQ && config.ultra_start != ULTRA_AUTO && f < config.ultra_start) || (config.ultra && config.ultra_start != ULTRA_AUTO && f < config.ultra_start)) - signal_path = PATH_LOW; - else if (f <= MAX_LOW_OUTPUT_FREQ && config.ultra_start != ULTRA_AUTO && f < config.ultra_start) - signal_path = PATH_DIRECT; - else if (config.ultra && setting.mixer_output) + else if (setting.mixer_output && (f >= MAX_LOW_OUTPUT_FREQ || (config.ultra_start != ULTRA_AUTO && f > config.ultra_start))) signal_path = PATH_ULTRA; - else + else if (!setting.mixer_output && (f >= MAX_LOW_OUTPUT_FREQ || (config.ultra_start != ULTRA_AUTO && f > config.ultra_start))) signal_path = PATH_LEAKAGE; + else if (f > MINIMUM_DIRECT_FREQ) + signal_path = PATH_DIRECT; + else + signal_path = PATH_LOW; switch (signal_path) { case PATH_LEAKAGE: drive_dBm = (float *)adf_drive_dBm; - max_drive = 1; + max_drive = 2; break; default: drive_dBm = (float *)si_drive_dBm; @@ -2045,9 +2045,6 @@ pureRSSI_t get_frequency_correction(freq_t f) // Frequency dependent RSSI c return(0.0); } #ifdef TINYSA4 - if (setting.extra_lna) - c += 1; - if (setting.mode == M_LOW) { // @@ -2077,20 +2074,42 @@ pureRSSI_t get_frequency_correction(freq_t f) // Frequency dependent RSSI c if (actual_drive >= 3) cv += float_TO_PURE_RSSI(config.drive3_level_offset); - - if (ultra && f > ultra_start) { + switch (signal_path) { + case PATH_LOW: + c = CORRECTION_LOW; + break; + case PATH_ULTRA: c = CORRECTION_LOW_ULTRA; if (LO_harmonic) { cv += float_TO_PURE_RSSI(config.harmonic_level_offset); // +10.5dB correction. } - if (setting.extra_lna) - c += 1; + break; +#ifdef CORRECTION_DIRECT + case PATH_DIRECT: + c = CORRECTION_DIRECT; + break; +#endif } + if (setting.extra_lna) + c += 1; // if (LO_shifting) // cv += float_TO_PURE_RSSI(actual_rbw_x10>USE_SHIFT2_RBW ? config.shift2_level_offset : config.shift1_level_offset); } else if (setting.mode == M_GENLOW){ - c = CORRECTION_LOW_OUT; + switch (signal_path) { + case PATH_LOW: + c = CORRECTION_LOW_OUT; + break; + case PATH_ULTRA: + c = CORRECTION_LOW_OUT_MIXER; + break; + case PATH_DIRECT: + c = CORRECTION_LOW_OUT_DIRECT; + break; + case PATH_LEAKAGE: + c = CORRECTION_LOW_OUT_ADF; + break; + } } #else if (MODE_HIGH(setting.mode))