From 9c0584abd7f58c2cd98ff381ee3eba304514b30a Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Thu, 4 Jun 2020 09:05:10 +0200 Subject: [PATCH] Simplified scale/refpos approach --- main.c | 2 +- plot.c | 8 ++++---- sa_core.c | 50 +++++++++++++++++++++++++++++++++++--------------- 3 files changed, 40 insertions(+), 20 deletions(-) diff --git a/main.c b/main.c index 9b36cb2..6b2a936 100644 --- a/main.c +++ b/main.c @@ -1704,7 +1704,7 @@ VNA_SHELL_FUNCTION(cmd_trace) if (argc == 0) { for (t = 0; t < TRACES_MAX; t++) { if (trace[t].enabled) { - const char *type = get_trace_typename(t); + const char *type = unit_string[setting.unit]; // get_trace_typename(t); const char *channel = trc_channel_name[trace[t].channel]; float scale = get_trace_scale(t); float refpos = get_trace_refpos(t); diff --git a/plot.c b/plot.c index f72e2b1..29a812f 100644 --- a/plot.c +++ b/plot.c @@ -592,13 +592,13 @@ trace_into_index(int t, int i, float array[POINTS_COUNT]) { int y, x; float coeff = array[i]; - float refpos = NGRIDY - get_trace_refpos(t); - float v = refpos; - float scale = 1 / get_trace_scale(t); + float refpos = get_trace_refpos(t); + float v; + float scale = get_trace_scale(t); switch (trace[t].type) { case TRC_LOGMAG: - v-= value(coeff) * scale; + v = ( refpos - value(coeff) ) / scale; break; #ifdef __VNA__ case TRC_PHASE: diff --git a/sa_core.c b/sa_core.c index 3f0a3e4..45ebb04 100644 --- a/sa_core.c +++ b/sa_core.c @@ -478,13 +478,44 @@ int GetAGC(void) void set_reflevel(float level) { - setting.reflevel = (level / setting.scale) * setting.scale; - set_trace_refpos(0, NGRIDY - level / get_trace_scale(0)); - set_trace_refpos(1, NGRIDY - level / get_trace_scale(0)); - set_trace_refpos(2, NGRIDY - level / get_trace_scale(0)); + setting.reflevel = level; + set_trace_refpos(0, /* NGRIDY - */ level /* / get_trace_scale(0) */); + set_trace_refpos(1, /* NGRIDY - */ level /* / get_trace_scale(0) */ ); + set_trace_refpos(2, /* NGRIDY - */ level /* / get_trace_scale(0) */ ); + + if (UNIT_IS_LINEAR(setting.unit)) { // Never negative bottom + float s = setting.scale; + if (level - NGRIDY * s < 0) { + level = level / NGRIDY; + setting.scale = level; + set_trace_scale(0, level); + set_trace_scale(1, level); + set_trace_scale(2, level); + } + } dirty = true; } +void set_scale(float s) { + setting.scale = s; + set_trace_scale(0, s); + set_trace_scale(1, s); + set_trace_scale(2, s); + + if (UNIT_IS_LINEAR(setting.unit)) { // Never negative bottom + float r = setting.reflevel; + s = NGRIDY * s; + if (s > r) { + setting.reflevel = s; + set_trace_refpos(0, s); + set_trace_refpos(1, s); + set_trace_refpos(2, s); + } + } + + // set_reflevel(setting.reflevel); +} + void set_offset(float offset) { @@ -521,17 +552,6 @@ void set_trigger(int trigger) // return (NGRIDY - get_trace_refpos(2)) * get_trace_scale(2); //} -void set_scale(float s) { - setting.scale = s; - if (UNIT_IS_LINEAR(setting.unit)) { // Bottom always at zero - set_reflevel(NGRIDY * s); - } - set_trace_scale(0, s); - set_trace_scale(1, s); - set_trace_scale(2, s); - set_reflevel(setting.reflevel); -} - //int GetScale(void) { // return get_trace_refpos(2); //}