From dbb685f7942c55659d87d1bd11e6b41e9a867883 Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Mon, 8 Jun 2020 11:17:02 +0200 Subject: [PATCH] Corrected auto agc error in linear mode --- plot.c | 28 +++++++++++++++++----------- sa_core.c | 33 +++++++++++++++++++++------------ 2 files changed, 38 insertions(+), 23 deletions(-) diff --git a/plot.c b/plot.c index d8a53fc..ed0b251 100644 --- a/plot.c +++ b/plot.c @@ -849,6 +849,7 @@ static void trace_get_value_string( (void) point_count; float v; char buf2[11]; + char buf3[6]; buf2[0]=' '; uint32_t dfreq = 0; float rlevel = 0; @@ -902,10 +903,17 @@ static void trace_get_value_string( if (v == -INFINITY) plot_printf(buf, len, "-INF"); else { - if (setting.unit) - plot_printf(buf, len, "%s %.4f%s%s", buf2, v - rlevel,unit_string[setting.unit],(mtype & M_NOISE?"/Hz":"")); + v = v - rlevel; + if (UNIT_IS_LINEAR(setting.unit)) { + if (v < 100000) + plot_printf(buf3, sizeof(buf3), "%5f", v); + else + strcpy(buf3,"*****"); + } else - plot_printf(buf, len, "%s %.1f%s%s", buf2, v - rlevel,unit_string[setting.unit],(mtype & M_NOISE?"/Hz":"")); + plot_printf(buf3, sizeof(buf3), "%5.1f", v); + buf3[5] = 0; + plot_printf(buf, len, "%s %s%s%s", buf2, buf3,unit_string[setting.unit],(mtype & M_NOISE?"/Hz":"")); } } @@ -2069,20 +2077,18 @@ static void cell_draw_marker_info(int x0, int y0) buf[k++] = 0; ili9341_set_background(DEFAULT_BG_COLOR); ili9341_set_foreground(marker_color(markers[i].mtype)); - if (setting.unit) - cell_drawstring(buf, xpos, ypos); - else +// if (setting.unit) +// cell_drawstring(buf, xpos, ypos); +// else cell_drawstring_7x13(buf, xpos, ypos); xpos += strlen(buf)*7; -// cell_drawstring_size(buf, xpos, ypos, 2); trace_get_value_string( t, buf, sizeof buf, idx, measured[trace[t].channel], frequencies, sweep_points, ridx, markers[i].mtype); - if (setting.unit) - cell_drawstring(buf, xpos, ypos); - else +// if (setting.unit) +// cell_drawstring(buf, xpos, ypos); +// else cell_drawstring_7x13(buf, xpos, ypos); -// cell_drawstring_size(buf, xpos+3*7, ypos, 2); j++; } } diff --git a/sa_core.c b/sa_core.c index 09041b1..0e4b69d 100644 --- a/sa_core.c +++ b/sa_core.c @@ -473,7 +473,7 @@ void toggle_AGC(void) if (S_IS_AUTO(setting.agc )) setting.agc = false; else if (setting.agc) - setting.agc = S_AUTO_OFF; + setting.agc = S_AUTO_ON; else setting.agc = true; dirty = true; @@ -503,9 +503,9 @@ void set_unit(int u) set_scale(r/NGRIDY); set_reflevel(setting.scale*NGRIDY); if (S_IS_AUTO(setting.agc)) - setting.agc = S_AUTO_OFF; + setting.agc = S_AUTO_ON; if (S_IS_AUTO(setting.lna)) - setting.agc = S_AUTO_OFF; + setting.lna = S_AUTO_OFF; } else { r = 10 * round((r*1.2)/10.0); set_reflevel(r); @@ -513,7 +513,7 @@ void set_unit(int u) if (S_IS_AUTO(setting.agc)) setting.agc = S_AUTO_ON; if (S_IS_AUTO(setting.lna)) - setting.agc = S_AUTO_OFF; + setting.lna = S_AUTO_OFF; } dirty = true; } @@ -1491,10 +1491,12 @@ again: dirty = true; // Must be above if(scandirty!!!!!) } } - if (!in_selftest && MODE_INPUT(setting.mode) && setting.auto_reflevel && (max_index[0] > 0 || FREQ_IS_CW())) { // Auto reflevel + if (max_index[0] > 0) + temppeakLevel = actual_t[max_index[0]]; + float r = value(temppeakLevel); + if (!in_selftest && MODE_INPUT(setting.mode) && setting.auto_reflevel) { // Auto reflevel if (UNIT_IS_LINEAR(setting.unit)) { // Linear scales can not have negative values - float r = value(actual_t[max_index[0]]); - if ((setting.reflevel > REFLEVEL_MIN && r < setting.reflevel / 2 ) || (setting.reflevel < REFLEVEL_MAX && r > setting.reflevel) ) { // ensure minimum and maximum reflevel + if ((setting.reflevel > REFLEVEL_MIN && r < setting.reflevel / 2.5 ) || (setting.reflevel < REFLEVEL_MAX && r > setting.reflevel) ) { // ensure minimum and maximum reflevel // r = setting.scale * (floor(r / setting.scale) + 1); #if 0 float m = 1; @@ -1513,20 +1515,22 @@ again: r = REFLEVEL_MIN; if (r > REFLEVEL_MAX) r = REFLEVEL_MAX; + if (r != setting.reflevel) { //if (setting.scale * NGRIDY > r) set_scale(r / NGRIDY); - set_reflevel(setting.scale*NGRIDY); + set_reflevel(setting.scale*NGRIDY); + } } } else { - if (value(actual_t[max_index[0]]) < setting.reflevel - setting.scale*NGRIDY || temp_min_level > setting.reflevel) { - set_reflevel(setting.scale*(floor(value(actual_t[max_index[0]])/setting.scale)+1)); + if (r < setting.reflevel - setting.scale*NGRIDY || temp_min_level > setting.reflevel) { + set_reflevel(setting.scale*(floor(r/setting.scale)+1)); redraw_request |= REDRAW_CAL_STATUS; dirty = true; // Must be above if(scandirty!!!!!) - }else if (value(actual_t[max_index[0]]) > setting.reflevel - setting.scale/2) { + }else if (r > setting.reflevel - setting.scale/2) { set_reflevel(setting.reflevel + setting.scale); redraw_request |= REDRAW_CAL_STATUS; dirty = true; // Must be above if(scandirty!!!!!) - } else if (temp_min_level < setting.reflevel - 10.1 * setting.scale && value(actual_t[max_index[0]]) < setting.reflevel - setting.scale * 1.5) { + } else if (temp_min_level < setting.reflevel - 10.1 * setting.scale && r < setting.reflevel - setting.scale * 1.5) { set_reflevel(setting.reflevel - setting.scale); redraw_request |= REDRAW_CAL_STATUS; dirty = true; // Must be above if(scandirty!!!!!) @@ -2039,6 +2043,11 @@ void draw_cal_status(void) buf[5] = 'B'; ili9341_drawstring(buf, x, y); + y += YSTEP + YSTEP/2 ; + strncpy(buf,&VERSION[8],6); + buf[6]=0; + ili9341_drawstring(buf, x, y); + // ili9341_set_background(DEFAULT_BG_COLOR); y = HEIGHT-7 + OFFSETY;