diff --git a/flash.c b/flash.c index 2e575c7..5c5c02d 100644 --- a/flash.c +++ b/flash.c @@ -235,8 +235,7 @@ caldata_recall(uint16_t id) update_frequencies(); set_scale(setting.scale); set_reflevel(setting.reflevel); - set_waterfall(); - set_level_meter(); + set_level_meter_or_waterfall(); update_rbw(); sweep_mode = SWEEP_ENABLE; #ifdef __ULTRA__ diff --git a/nanovna.h b/nanovna.h index 49b0b05..b1ade94 100644 --- a/nanovna.h +++ b/nanovna.h @@ -445,10 +445,9 @@ void set_storage(void); void set_clear_storage(void); void set_subtract_storage(void); void toggle_normalize(int); -void set_waterfall(void); +void set_level_meter_or_waterfall(void); void disable_waterfall(void); #ifdef __LEVEL_METER__ -void set_level_meter(void); void disable_level_meter(void); #endif void set_mode(int); diff --git a/plot.c b/plot.c index ec40adf..a5ee3ac 100644 --- a/plot.c +++ b/plot.c @@ -149,12 +149,8 @@ void update_grid(void) } if (config.gridlines == 0) grid_offset = 0; - if (setting.waterfall) - set_waterfall(); -#ifdef __LEVEL_METER__ - if (setting.level_meter) - set_level_meter(); -#endif +// if (setting.waterfall) + set_level_meter_or_waterfall(); redraw_request |= REDRAW_FREQUENCY | REDRAW_AREA; } @@ -2128,6 +2124,8 @@ static void update_waterfall(void){ #ifdef _USE_WATERFALL_PALETTE uint16_t y = _PALETTE_ALIGN(256 - graph_bottom + index[i]); // should be always in range 0 - graph_bottom // y = (uint8_t)i; // for test + if (y > 255) // at start the index_y_t table could be empty leading to negative y + break; color = waterfall_palette[y]; #elif 1 uint16_t y = index[i]; // should be always in range 0 - graph_bottom @@ -2173,14 +2171,18 @@ static void update_waterfall(void){ ili9341_bulk(OFFSETX, graph_bottom+1, w_width, 1); // STOP_PROFILE; } - +#if 0 //extern float peakLevel; //extern float min_level; //int w_max = -130; //int w_min = 0; +uint8_t old_waterfall = 100; void set_waterfall(void) { + if (old_waterfall == setting.waterfall) + return; + old_waterfall = setting.waterfall; if (setting.waterfall == W_SMALL) graph_bottom = SMALL_WATERFALL; else if (setting.waterfall == W_BIG) graph_bottom = BIG_WATERFALL; else /*if (setting.waterfall == W_OFF)*/graph_bottom = NO_WATERFALL; @@ -2192,12 +2194,12 @@ set_waterfall(void) } request_to_redraw_grid(); } - +#endif void disable_waterfall(void) { setting.waterfall = W_OFF; - set_waterfall(); + set_level_meter_or_waterfall(); } #ifdef __LEVEL_METER__ @@ -2227,16 +2229,24 @@ static void update_level_meter(void){ } void -set_level_meter(void) +set_level_meter_or_waterfall(void) { - if (setting.level_meter) graph_bottom = BIG_NUMBER_SPACE; -// else if (setting.level_meter == W_BIG) graph_bottom = BIG_WATERFALL; - else /*if (setting.level_meter == W_OFF)*/graph_bottom = NO_WATERFALL; + if (setting.waterfall == W_BIG +#ifdef TINYSA4 + || setting.level_meter +#endif + ) graph_bottom = BIG_WATERFALL; + else if (setting.waterfall == W_SMALL +#ifndef TINYSA4 + || setting.level_meter +#endif + ) graph_bottom = SMALL_WATERFALL; + else graph_bottom = NO_WATERFALL; _grid_y = graph_bottom / NGRIDY; area_height = AREA_HEIGHT_NORMAL; - if (setting.level_meter){ + if (setting.waterfall != W_OFF || setting.level_meter){ ili9341_set_background(LCD_BG_COLOR); - ili9341_fill(OFFSETX, graph_bottom, LCD_WIDTH - OFFSETX, CHART_BOTTOM - graph_bottom + 1); + ili9341_fill(OFFSETX, graph_bottom, LCD_WIDTH - OFFSETX, CHART_BOTTOM - graph_bottom); } request_to_redraw_grid(); } @@ -2245,7 +2255,7 @@ void disable_level_meter(void) { setting.level_meter = false; - set_level_meter(); + set_level_meter_or_waterfall(); } #endif diff --git a/ui.c b/ui.c index ec770c7..5527858 100644 --- a/ui.c +++ b/ui.c @@ -3272,7 +3272,7 @@ static UI_FUNCTION_ADV_CALLBACK(menu_waterfall_acb){ setting.waterfall++; if (setting.waterfall>W_BIG)setting.waterfall = W_OFF; if (setting.waterfall != W_OFF) setting.level_meter = false; - set_waterfall(); + set_level_meter_or_waterfall(); ui_mode_normal(); } } @@ -3288,7 +3288,7 @@ static UI_FUNCTION_ADV_CALLBACK(menu_level_meter_acb){ setting.level_meter = !setting.level_meter; if (setting.level_meter) setting.waterfall = W_OFF; - set_level_meter(); + set_level_meter_or_waterfall(); ui_mode_normal(); } #endif @@ -6958,7 +6958,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) - set_waterfall(); + set_level_meter_or_waterfall(); #ifdef __LEVEL_METER__ if (setting.level_meter) ili9341_fill(LCD_WIDTH-MENU_BUTTON_WIDTH, area_height, MENU_BUTTON_WIDTH, menu_button_height*MENU_BUTTON_MAX - area_height); diff --git a/vna_browser.c b/vna_browser.c index e22c0ab..b675997 100644 --- a/vna_browser.c +++ b/vna_browser.c @@ -305,8 +305,7 @@ static char cmd_buffer[256+128]; update_frequencies(); set_scale(setting.scale); set_reflevel(setting.reflevel); - set_waterfall(); - set_level_meter(); + set_level_meter_or_waterfall(); } else error = "Format err"; }