From 74f1a839e201938af2ac7edf89679a41f7da0bed Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Sat, 5 Jun 2021 12:14:12 +0200 Subject: [PATCH] Restore waterfall and optional marker value cache --- flash.c | 1 + nanovna.h | 4 +++- plot.c | 15 ++++++++++++--- sa_core.c | 2 ++ ui.c | 2 +- ui_sa.c | 2 +- 6 files changed, 20 insertions(+), 6 deletions(-) diff --git a/flash.c b/flash.c index 5c175b5..c7c6ef0 100644 --- a/flash.c +++ b/flash.c @@ -226,6 +226,7 @@ caldata_recall(uint16_t id) update_frequencies(); set_scale(setting.scale); set_reflevel(setting.reflevel); + set_waterfall(); return 0; } #if 0 diff --git a/nanovna.h b/nanovna.h index f3cc214..4007328 100644 --- a/nanovna.h +++ b/nanovna.h @@ -89,6 +89,8 @@ #define DB_PER_DEGREE_ABOVE 0.069 #define CENTER_TEMPERATURE 34.0 #define __WAIT_CTS_WHILE_SLEEPING__ +#define __MARKER_CACHE__ + //#define __FFT_VBW__ //#define __FFT_DECONV__ #else @@ -331,7 +333,7 @@ void set_storage(void); void set_clear_storage(void); void set_subtract_storage(void); void toggle_normalize(void); -void toggle_waterfall(void); +void set_waterfall(void); void disable_waterfall(void); void set_mode(int); int GetMode(void); diff --git a/plot.c b/plot.c index ffadd00..4b337ab 100644 --- a/plot.c +++ b/plot.c @@ -145,7 +145,7 @@ void update_grid(void) grid_width = (WIDTH) * (grid / 100) / (fspan / 1000); if (setting.waterfall) - toggle_waterfall(); + set_waterfall(); redraw_request |= REDRAW_FREQUENCY | REDRAW_AREA; } @@ -281,6 +281,7 @@ index_to_value(const int i) } #endif +#ifdef __MARKER_CACHE__ float marker_cache[MARKERS_MAX]; bool marker_cache_valid[MARKERS_MAX]; int32_t marker_cache_index[MARKERS_MAX]; @@ -292,12 +293,15 @@ clear_marker_cache(void) marker_cache_valid[i] = false; } } +#endif float marker_to_value(const int i) { +#ifdef __MARKER_CACHE__ if (marker_cache_valid[i] && marker_cache_index[i] == markers[i].index) return marker_cache[i]; +#endif float *ref_marker_levels; if (markers[i].mtype & M_STORED ) ref_marker_levels = stored_t; @@ -323,9 +327,11 @@ marker_to_value(const int i) #endif ; } +#ifdef __MARKER_CACHE__ marker_cache_valid[i] = true; marker_cache_index[i] = markers[i].index; marker_cache[i] = v; +#endif return(v); } @@ -939,6 +945,9 @@ markmap_marker(int marker) return; if (IS_TRACE_DISABLE(TRACE_ACTUAL)) return; +#ifdef __MARKER_CACHE__ + marker_cache_valid[marker] = false; // force recalculation +#endif int idx = markers[marker].index; int x = trace_index_x[idx] - X_MARKER_OFFSET; int y = trace_index_y[TRACE_ACTUAL][idx] - Y_MARKER_OFFSET; @@ -1981,7 +1990,7 @@ static void update_waterfall(void){ //int w_max = -130; //int w_min = 0; void -toggle_waterfall(void) +set_waterfall(void) { if (setting.waterfall == W_SMALL) graph_bottom = SMALL_WATERFALL; else if (setting.waterfall == W_BIG) graph_bottom = BIG_WATERFALL; @@ -1999,7 +2008,7 @@ void disable_waterfall(void) { setting.waterfall = W_OFF; - toggle_waterfall(); + set_waterfall(); } void diff --git a/sa_core.c b/sa_core.c index 9ca0dfd..56b3d52 100644 --- a/sa_core.c +++ b/sa_core.c @@ -3741,7 +3741,9 @@ static bool sweep(bool break_on_operation) float vbw_rssi; #endif #endif +#ifdef __MARKER_CACHE__ clear_marker_cache(); +#endif again: // Waiting for a trigger jumps back to here setting.measure_sweep_time_us = 0; // start measure sweep time // start_of_sweep_timestamp = chVTGetSystemTimeX(); // Will be set in perform diff --git a/ui.c b/ui.c index b232956..c30172e 100644 --- a/ui.c +++ b/ui.c @@ -1559,7 +1559,7 @@ leave_ui_mode() // if (menu_button_height*MENU_BUTTON_MAX - area_height > 0) // ili9341_fill(LCD_WIDTH-MENU_BUTTON_WIDTH, area_height, MENU_BUTTON_WIDTH, menu_button_height*MENU_BUTTON_MAX - area_height); if (setting.waterfall) - toggle_waterfall(); + set_waterfall(); redraw_request|=REDRAW_AREA | REDRAW_FREQUENCY | REDRAW_CAL_STATUS | REDRAW_BATTERY; } diff --git a/ui_sa.c b/ui_sa.c index 855abbb..8d9186c 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -1481,7 +1481,7 @@ static UI_FUNCTION_ADV_CALLBACK(menu_waterfall_acb){ return; } setting.waterfall++; if (setting.waterfall>W_BIG)setting.waterfall = W_OFF; - toggle_waterfall(); + set_waterfall(); ui_mode_normal(); }