From 3626be445d1634e39a704750e37cb53f3aef711b Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Sun, 17 Jul 2022 17:06:35 +0200 Subject: [PATCH] Single sweep and draw line added --- main.c | 2 +- nanovna.h | 4 ++++ plot.c | 6 +++++- sa_core.c | 11 ++++++++++ ui_sa.c | 61 +++++++++++++++++++++++++++++++++++++++++++++---------- 5 files changed, 71 insertions(+), 13 deletions(-) diff --git a/main.c b/main.c index 458cd21..d6ec213 100644 --- a/main.c +++ b/main.c @@ -268,7 +268,7 @@ resume_sweep(void) sweep_mode |= SWEEP_ENABLE; } -static inline void +void resume_once(uint16_t c) { sweep_once_count = c; diff --git a/nanovna.h b/nanovna.h index 33fc5c3..6196037 100644 --- a/nanovna.h +++ b/nanovna.h @@ -58,6 +58,7 @@ //#define __SIMULATION__ #define __SCROLL__ // Add waterfall option #define __LEVEL_METER__ +#define __DRAW_LINE__ #define __ICONS__ #define __MEASURE__ #define __LINEARITY__ // Not available @@ -264,8 +265,10 @@ void set_marker_frequency(int m, freq_t f); void set_marker_time(int m, float f); void set_marker_index(int m, int16_t idx); void toggle_sweep(void); +void resume_once(uint16_t c); void toggle_mute(void); void toggle_pulse(void); +void toggle_draw_line(void); void load_default_properties(void); enum { @@ -1128,6 +1131,7 @@ typedef struct setting uint8_t harmonic; // used harmonic number 1...5 uint8_t fast_speedup; // 0 - 20 uint8_t _traces; // enabled traces flags + uint8_t draw_line; // uses the trigger level setting uint16_t linearity_step; // range equal POINTS_COUNT uint16_t _sweep_points; diff --git a/plot.c b/plot.c index da34b49..268946c 100644 --- a/plot.c +++ b/plot.c @@ -1100,7 +1100,11 @@ draw_cell(int m, int n) // PULSE; #endif // Draw trigger line - if (setting.trigger != T_AUTO) { + if (setting.trigger != T_AUTO +#ifdef __DRAW_LINE__ + || setting.draw_line +#endif + ) { c = GET_PALTETTE_COLOR(LCD_TRIGGER_COLOR); int tp = get_trigger_level() - y0; if (tp>=0 && tp < h) diff --git a/sa_core.c b/sa_core.c index 330da5c..fde4608 100644 --- a/sa_core.c +++ b/sa_core.c @@ -576,6 +576,9 @@ void reset_settings(int m) #else setting.harmonic = 0; #endif +#endif +#ifdef __DRAW_LINE__ + setting.draw_line = false; #endif setting.show_stored = 0; setting.auto_attenuation = false; @@ -895,6 +898,14 @@ void toggle_pulse(void) dirty = true; } +#ifdef __DRAW_LINE__ +void toggle_draw_line(void) +{ + setting.draw_line = !setting.draw_line; + dirty = true; +} +#endif + void toggle_debug_avoid(void) { debug_avoid = !debug_avoid; diff --git a/ui_sa.c b/ui_sa.c index 2bc6773..4fd3eab 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -474,7 +474,7 @@ static const struct { #endif [KM_REPEAT] = {keypads_positive , "SAMPLE\nREPEAT"}, // KM_REPEA #15 [KM_EXT_GAIN] = {keypads_plusmin , "EXT\nGAIN"}, // KM_EXT_GAIN -[KM_TRIGGER] = {keypads_plusmin_unit, "TRIGGER\nLEVEL"}, // KM_TRIGGER +[KM_TRIGGER] = {keypads_plusmin_unit, "LEVEL"}, // KM_TRIGGER [KM_LEVELSWEEP] = {keypads_plusmin , "LEVEL\nSWEEP"}, // KM_LEVELSWEEP [KM_SWEEP_TIME] = {keypads_time , "SWEEP\nSECONDS"}, // KM_SWEEP_TIME [KM_OFFSET_DELAY] = {keypads_positive , "OFFSET\nDELAY"}, // KM_OFFSET_DELAY #20 @@ -1783,10 +1783,13 @@ static UI_FUNCTION_ADV_CALLBACK(menu_traces_acb) else if (data == 2) // freeze b->icon = setting.stored[current_trace] ? BUTTON_ICON_CHECK : BUTTON_ICON_NOCHECK; else if (data == 5) { - if (setting.subtract[current_trace]) + if (setting.subtract[current_trace]) { plot_printf(b->text, sizeof(b->text), "SUBTRACT\nTRACE %d", setting.subtract[current_trace]); - else + b->icon = BUTTON_ICON_CHECK; + } else { plot_printf(b->text, sizeof(b->text), "SUBTRACT\nOFF"); + b->icon = BUTTON_ICON_NOCHECK; + } // b->icon = setting.subtract[current_trace] ? BUTTON_ICON_CHECK : BUTTON_ICON_NOCHECK; // icon not needed } else if (data == 4) { if (current_trace == TRACES_MAX-1) @@ -1794,6 +1797,7 @@ static UI_FUNCTION_ADV_CALLBACK(menu_traces_acb) else b->icon = setting.normalized[current_trace] ? BUTTON_ICON_CHECK : BUTTON_ICON_NOCHECK; } else if (data == 3) { + b->icon = setting.average[current_trace] != AV_OFF ? BUTTON_ICON_CHECK : BUTTON_ICON_NOCHECK; plot_printf(b->text, sizeof(b->text), "CALC\n%s", averageText[setting.average[current_trace]]); // b->icon = setting.average[current_trace] ? BUTTON_ICON_CHECK : BUTTON_ICON_NOCHECK; // icon not needed } @@ -1903,14 +1907,31 @@ static UI_FUNCTION_ADV_CALLBACK(menu_waterfall_acb){ (void)item; (void)data; if (b){ +#ifdef TINYSA4 + if (!(sweep_mode & SWEEP_ENABLE)){ + plot_printf(b->text, sizeof(b->text), "SINGLE\nSWEEP"); + b->icon = (sweep_mode & SWEEP_ONCE) ? BUTTON_ICON_CHECK : BUTTON_ICON_NOCHECK; + } else { + plot_printf(b->text, sizeof(b->text), "WATER\nFALL"); + b->icon = setting.waterfall ? BUTTON_ICON_CHECK : BUTTON_ICON_NOCHECK; + } +#else b->icon = setting.waterfall ? BUTTON_ICON_CHECK : BUTTON_ICON_NOCHECK; +#endif return; } - setting.waterfall++; if (setting.waterfall>W_BIG)setting.waterfall = W_OFF; - if (setting.waterfall != W_OFF) - setting.level_meter = false; - set_waterfall(); - ui_mode_normal(); +#ifdef TINYSA4 + if (is_paused()) { + resume_once(1); + } else +#endif + { + setting.waterfall++; if (setting.waterfall>W_BIG)setting.waterfall = W_OFF; + if (setting.waterfall != W_OFF) + setting.level_meter = false; + set_waterfall(); + ui_mode_normal(); + } } #ifdef __LEVEL_METER__ @@ -2278,6 +2299,22 @@ static UI_FUNCTION_ADV_CALLBACK(menu_settings_pulse_acb){ toggle_pulse(); } +#ifdef __DRAW_LINE__ +static UI_FUNCTION_ADV_CALLBACK(menu_settings_draw_line_acb){ + (void)item; + (void)data; + if(b){ + b->icon = setting.draw_line ? BUTTON_ICON_CHECK : BUTTON_ICON_NOCHECK; + return; + } + toggle_draw_line(); + if (setting.draw_line) { + kp_help_text = "Level"; + ui_mode_keypad(KM_TRIGGER); + set_trigger(T_AUTO); + } +} +#endif #ifdef __HAM_BAND__ static UI_FUNCTION_ADV_CALLBACK(menu_settings_ham_bands){ (void)item; @@ -2333,7 +2370,7 @@ static UI_FUNCTION_ADV_CALLBACK(menu_pause_acb) (void) data; (void) item; if (b){ - b->icon = is_paused() ? BUTTON_ICON_CHECK : BUTTON_ICON_NOCHECK; + b->icon = !(sweep_mode & SWEEP_ENABLE) ? BUTTON_ICON_CHECK : BUTTON_ICON_NOCHECK; return; } toggle_sweep(); @@ -3112,10 +3149,13 @@ static const menuitem_t menu_traces[] = static const menuitem_t menu_display[] = { { MT_ADV_CALLBACK,0, "PAUSE\nSWEEP", menu_pause_acb}, - { MT_ADV_CALLBACK,1, "WATER\nFALL", menu_waterfall_acb}, + { MT_ADV_CALLBACK,1, MT_CUSTOM_LABEL, menu_waterfall_acb}, #ifdef __LEVEL_METER__ { MT_ADV_CALLBACK,1, "BIG\nNUMBER", menu_level_meter_acb}, #endif +#ifdef __DRAW_LINE__ + { MT_ADV_CALLBACK,1, "DRAW\nLINE", menu_settings_draw_line_acb}, +#endif #ifdef __VBW__ { MT_SUBMENU, 0, "VBW", menu_vbw}, #endif @@ -3628,7 +3668,6 @@ set_numeric_value(void) set_trigger(T_NORMAL); set_trigger_level(to_dBm(uistat.value)); completed = true; - break; case KM_GRIDLINES: set_gridlines(uistat.value);