From 606ec95b5f720f9ef5a461aac49c5085d31df0ce Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Thu, 24 Dec 2020 09:34:33 +0100 Subject: [PATCH] Slider span --- main.c | 5 ++++- nanovna.h | 5 ++++- sa_cmd.c | 4 ++-- sa_core.c | 25 +++++++++++++---------- ui.c | 60 ++++++++++++++++++++++++++++++++++--------------------- ui_sa.c | 19 +++++++++++++----- 6 files changed, 76 insertions(+), 42 deletions(-) diff --git a/main.c b/main.c index 529ef4b..9fd1796 100644 --- a/main.c +++ b/main.c @@ -123,7 +123,8 @@ const char *info_about[]={ "Platform: " PLATFORM_NAME, 0 // sentinel }; -extern int dirty; + +uint16_t dirty = true; bool completed = false; @@ -2530,10 +2531,12 @@ static void shell_init_connection(void){ // Only USB console, shell_stream always on USB #define PREPARE_STREAM +#if 0 // Not used // Check connection as Active, if no suspend input static bool shell_check_connect(void){ return SDU1.config->usbp->state == USB_ACTIVE; } +#endif // Init shell I/O connection over USB static void shell_init_connection(void){ diff --git a/nanovna.h b/nanovna.h index 03e950e..69a3de8 100644 --- a/nanovna.h +++ b/nanovna.h @@ -747,7 +747,7 @@ typedef struct setting // uint32_t _frequency0; // uint32_t _frequency1; int mode; - uint16_t _sweep_points; + int _sweep_points; float attenuate; int auto_attenuation; int atten_step; @@ -810,6 +810,9 @@ typedef struct setting int modulation_frequency; int trigger_mode; uint32_t checksum; + int slider_position; + int32_t slider_span; + }setting_t; extern setting_t setting; diff --git a/sa_cmd.c b/sa_cmd.c index 27409a7..5c97dbd 100644 --- a/sa_cmd.c +++ b/sa_cmd.c @@ -342,7 +342,7 @@ VNA_SHELL_FUNCTION(cmd_y) } #endif } - +#if 0 // not used VNA_SHELL_FUNCTION(cmd_z) { static const char cmd_z_list[] = "t|r|i"; @@ -368,7 +368,7 @@ VNA_SHELL_FUNCTION(cmd_z) #endif } } - +#endif VNA_SHELL_FUNCTION(cmd_selftest) { diff --git a/sa_core.c b/sa_core.c index 1f92e8b..1a46e81 100644 --- a/sa_core.c +++ b/sa_core.c @@ -30,14 +30,14 @@ #undef __FAST_SWEEP__ #endif #endif -int dirty = true; +// uint8_t dirty = true; int scandirty = true; setting_t setting; uint32_t frequencies[POINTS_COUNT]; uint16_t actual_rbw_x10 = 0; -int vbwSteps = 1; +uint16_t vbwSteps = 1; uint32_t minFreq = 0; uint32_t maxFreq = 520000000; @@ -135,6 +135,9 @@ void reset_settings(int m) setting.spur_removal = S_OFF; #endif setting.mirror_masking = 0; + setting.slider_position = 0; + setting.slider_span = 100000; + #endif switch(m) { case M_LOW: @@ -171,7 +174,7 @@ void reset_settings(int m) setting.sweep_time_us = 10*ONE_SECOND_TIME; break; } - for (int i = 0; i< MARKERS_MAX; i++) { + for (uint8_t i = 0; i< MARKERS_MAX; i++) { markers[i].enabled = M_DISABLED; markers[i].mtype = M_NORMAL; } @@ -2801,11 +2804,11 @@ enum { TP_SILENT, TPH_SILENT, TP_10MHZ, TP_10MHZEXTRA, TP_10MHZ_SWITCH, TP_30MHZ, TPH_30MHZ, TPH_30MHZ_SWITCH }; -#define TEST_COUNT 21 +#define TEST_COUNT (sizeof test_case / sizeof test_case[0]) #define W2P(w) (sweep_points * w / 100) // convert width in % to actual sweep points -static const struct { +typedef struct test_case { int kind; int setup; float center; // In MHz @@ -2813,7 +2816,9 @@ static const struct { float pass; int width; float stop; -} test_case [TEST_COUNT] = +} test_case_t; + +const test_case_t test_case [] = {// Condition Preparation Center Span Pass Width(%)Stop {TC_BELOW, TP_SILENT, 0.005, 0.01, 0, 0, 0}, // 1 Zero Hz leakage {TC_BELOW, TP_SILENT, 0.015, 0.01, -30, 0, 0}, // 2 Phase noise of zero Hz @@ -2852,8 +2857,8 @@ static const char *(test_text [4]) = { "Waiting", "Pass", "Fail", "Critical" }; -static const char *(test_fail_cause [TEST_COUNT]); +static const char *(test_fail_cause [TEST_COUNT]); static int test_status[TEST_COUNT]; static int show_test_info = FALSE; static volatile int test_wait = false; @@ -3105,7 +3110,7 @@ common_silent: set_mode(M_LOW); setting.tracking = true; //Sweep BPF setting.auto_IF = false; - setting.frequency_IF = DEFAULT_IF; // Center on SAW filters + setting.frequency_IF = DEFAULT_IF+200000; // Center on SAW filters set_refer_output(2); goto common; case TP_10MHZ: // 10MHz input @@ -3200,7 +3205,7 @@ void self_test(int test) reset_settings(M_LOW); // Make sure we are in a defined state in_selftest = true; menu_autosettings_cb(0); - for (int i=0; i < TEST_COUNT; i++) { // All test cases waiting + for (uint16_t i=0; i < TEST_COUNT; i++) { // All test cases waiting if (test_case[i].kind == TC_END) break; test_status[i] = TS_WAITING; @@ -3219,7 +3224,7 @@ void self_test(int test) test_step = TEST_END; ili9341_set_foreground(LCD_BRIGHT_COLOR_RED); ili9341_drawstring_7x13("Signal level too low", 30, 140); - ili9341_drawstring_7x13("Check cable between High and Low connectors", 30, 160); + ili9341_drawstring_7x13("Did you connect high and low ports with cable?", 0, 210); goto resume2; } diff --git a/ui.c b/ui.c index 6b3f2f5..daaa3cc 100644 --- a/ui.c +++ b/ui.c @@ -87,9 +87,6 @@ static int8_t kp_index = 0; static char *kp_help_text = NULL; static uint8_t menu_current_level = 0; static int selection = 0; -static int slider_position = 0; - -static int slider_delta = 100000; static const uint8_t slider_bitmap[]= { @@ -1833,7 +1830,7 @@ draw_menu_buttons(const menuitem_t *menu) int local_slider_positions = 0; if (MT_MASK(menu[i].type) == MT_KEYPAD) { if (menu[i].data == KM_CENTER) { - local_slider_positions = LCD_WIDTH/2+slider_position; + local_slider_positions = LCD_WIDTH/2+setting.slider_position; goto draw_slider; } else if (menu[i].data == KM_LOWOUTLEVEL) { local_slider_positions = (get_attenuation() + 76 ) * MENU_FORM_WIDTH / 70 + OFFSETX; @@ -1887,15 +1884,15 @@ void set_keypad_value(int v) void check_frequency_slider(uint32_t slider_freq) { - if ( (maxFreq - minFreq) < (uint32_t)(MENU_FORM_WIDTH * slider_delta) ) { - slider_delta = (maxFreq - minFreq)/MENU_FORM_WIDTH; // absolute mode with max step size + if ( (maxFreq - minFreq) < (uint32_t)setting.slider_span ) { + setting.slider_span = maxFreq - minFreq; // absolute mode with max step size } - uint32_t half_span = (MENU_FORM_WIDTH / 2) * slider_delta; - if (minFreq + half_span > slider_freq) { - slider_position -= (minFreq + half_span - slider_freq) / slider_delta; // reposition if needed + uint32_t half_span = setting.slider_span >> 1; + if (minFreq + (uint32_t)half_span > slider_freq) { + setting.slider_position -= (minFreq + half_span - slider_freq) / (setting.slider_span /MENU_FORM_WIDTH); // reposition if needed } - if (maxFreq < slider_freq + half_span) { - slider_position += (slider_freq + half_span - maxFreq) / slider_delta; // reposition if needed + if (maxFreq < slider_freq + (uint32_t)half_span) { + setting.slider_position += (slider_freq + half_span - maxFreq) / (setting.slider_span /MENU_FORM_WIDTH); // reposition if needed } } @@ -1930,9 +1927,9 @@ menu_select_touch(int i) if (new_slider > MENU_FORM_WIDTH/2) new_slider = MENU_FORM_WIDTH/2; if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_CENTER){ -#define TOUCH_DEAD_ZONE 20 +#define TOUCH_DEAD_ZONE 40 if (mode == SL_UNKNOWN ) { - if (slider_position - TOUCH_DEAD_ZONE < new_slider && new_slider < slider_position + TOUCH_DEAD_ZONE) { // Pick up slider + if (setting.slider_position - TOUCH_DEAD_ZONE < new_slider && new_slider < setting.slider_position + TOUCH_DEAD_ZONE) { // Pick up slider mode = SL_MOVE; } else { mode = SL_SPAN; @@ -1940,12 +1937,12 @@ menu_select_touch(int i) } } if (mode == SL_MOVE ) { - uistat.value = uistat.value - slider_position * slider_delta + new_slider * slider_delta; + uistat.value = uistat.value - setting.slider_position * (setting.slider_span/MENU_FORM_WIDTH) + new_slider * (setting.slider_span/MENU_FORM_WIDTH); if (uistat.value < minFreq) uistat.value = minFreq; if (uistat.value > maxFreq) uistat.value = maxFreq; - slider_position = new_slider; + setting.slider_position = new_slider; set_keypad_value(keypad); perform(false, 0, (uint32_t)uistat.value, false); draw_menu(); @@ -1954,22 +1951,39 @@ menu_select_touch(int i) first_span: slider_freq = (uint32_t) uistat.value; int pw=new_slider + LCD_WIDTH/2; - slider_position = pw - LCD_WIDTH/2; // Show delta on slider - slider_delta = 10; + setting.slider_position = pw - LCD_WIDTH/2; // Show delta on slider + setting.slider_span = 10; while (pw>0) { - slider_delta *=10; - pw -= LCD_WIDTH/6; + setting.slider_span += setting.slider_span; + pw -= 12; + if (pw <=0) + break; + setting.slider_span += setting.slider_span + (setting.slider_span >>1); + pw -= 12; + if (pw<=0) + break; + setting.slider_span *= 2; + pw -= 12; } + if ((uint32_t)setting.slider_span > (maxFreq - minFreq)) + setting.slider_span = (maxFreq - minFreq); uint32_t old_minFreq = minFreq; // Save when in high mode minFreq = 0; // And set minFreq to 0 for span display - uistat.value = slider_delta; + uistat.value = setting.slider_span; set_keypad_value(keypad); + center_text[0] = 'S'; + center_text[1] = 'P'; + center_text[2] = 'A'; + center_text[3] = 'N'; draw_menu(); // Show slider span minFreq = old_minFreq; // and restore minFreq uistat.value = (float) slider_freq; // and restore current slider freq set_keypad_value(keypad); - - slider_position = 0; // reset slider after span change + center_text[0] = 'F'; + center_text[1] = 'R'; + center_text[2] = 'E'; + center_text[3] = 'Q'; + setting.slider_position = 0; // reset slider after span change check_frequency_slider(slider_freq); } } else if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_LOWOUTLEVEL) { @@ -1993,7 +2007,7 @@ menu_select_touch(int i) draw_menu(); return; } - slider_position = 0; // Reset slider when entering frequency + setting.slider_position = 0; // Reset slider when entering frequency prev_touch_button = -1; #endif diff --git a/ui_sa.c b/ui_sa.c index 714e948..d08bd53 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -406,7 +406,10 @@ enum { KM_REFLEVEL, KM_SCALE, KM_ATTENUATION, KM_ACTUALPOWER, KM_IF, KM_SAMPLETIME, KM_DRIVE, KM_LOWOUTLEVEL, KM_DECAY, KM_NOISE, KM_10MHZ, KM_REPEAT, KM_OFFSET, KM_TRIGGER, KM_LEVELSWEEP, KM_SWEEP_TIME, KM_OFFSET_DELAY, - KM_FAST_SPEEDUP, KM_GRIDLINES, KM_MARKER, KM_MODULATION,KM_COR_AM,KM_COR_WFM, KM_COR_NFM, + KM_FAST_SPEEDUP, KM_GRIDLINES, KM_MARKER, KM_MODULATION, +#if 0 + KM_COR_AM,KM_COR_WFM, KM_COR_NFM, +#endif KM_ATTACK, KM_NONE // always at enum end }; @@ -441,9 +444,11 @@ static const struct { {keypads_positive , "MINIMUM\nGRIDLINES"}, // KM_GRIDLINES {keypads_freq , "MARKER\nFREQ"}, // KM_MARKER {keypads_freq , "MODULATION\nFREQ"}, // KM_MODULATION +#if 0 {keypads_plusmin , "COR\nAM"}, // KM_COR_AM {keypads_plusmin , "COR\nWFM"}, // KM_COR_WFM {keypads_plusmin , "COR\nNFM"}, // KM_COR_NFM +#endif {keypads_positive , "ATTACK"}, // KM_ATTACK }; @@ -1487,10 +1492,11 @@ static const menuitem_t menu_sweep[] = { }; char low_level_help_text[12] = "-76..-6"; +char center_text[10] = "FREQ: %s"; static const menuitem_t menu_lowoutputmode[] = { { MT_FORM | MT_ADV_CALLBACK, 0, "LOW OUTPUT %s", menu_outputmode_acb}, - { MT_FORM | MT_KEYPAD, KM_CENTER, "FREQ: %s", "10kHz..350MHz"}, + { MT_FORM | MT_KEYPAD, KM_CENTER, center_text, "10kHz..350MHz"}, { MT_FORM | MT_KEYPAD, KM_LOWOUTLEVEL, "LEVEL: %s", low_level_help_text /* "-76..-6" */}, { MT_FORM | MT_ADV_CALLBACK, 0, "MOD: %s", menu_smodulation_acb}, { MT_FORM | MT_ADV_CALLBACK, 0, "%s", menu_sweep_acb}, @@ -1504,7 +1510,7 @@ static const menuitem_t menu_lowoutputmode[] = { static const menuitem_t menu_highoutputmode[] = { { MT_FORM | MT_ADV_CALLBACK, 0, "HIGH OUTPUT %s", menu_outputmode_acb}, - { MT_FORM | MT_KEYPAD, KM_CENTER, "FREQ: %s", "240MHz..960MHz"}, + { MT_FORM | MT_KEYPAD, KM_CENTER, center_text, "240MHz..960MHz"}, { MT_FORM | MT_ADV_CALLBACK, 0, "LEVEL: %+ddBm", menu_sdrive_acb}, { MT_FORM | MT_ADV_CALLBACK, 0, "MOD: %s", menu_smodulation_acb}, { MT_FORM | MT_KEYPAD, KM_SPAN, "SPAN: %s", NULL}, @@ -1729,9 +1735,11 @@ static const menuitem_t menu_settings3[] = { { MT_KEYPAD, KM_10MHZ, "CORRECT\nFREQUENCY", "Enter actual l0MHz frequency"}, { MT_KEYPAD, KM_GRIDLINES, "MINIMUM\nGRIDLINES", "Enter minimum horizontal grid divisions"}, -// { MT_KEYPAD, KM_COR_AM, "COR\nAM", "Enter AM modulation correction"}, +#if 0 // only used during development + { MT_KEYPAD, KM_COR_AM, "COR\nAM", "Enter AM modulation correction"}, { MT_KEYPAD, KM_COR_WFM, "COR\nWFM", "Enter WFM modulation correction"}, { MT_KEYPAD, KM_COR_NFM, "COR\nNFM", "Enter NFM modulation correction"}, +#endif #ifdef __HAM_BAND__ { MT_ADV_CALLBACK, 0, "HAM\nBANDS", menu_settings_ham_bands}, #endif @@ -2252,6 +2260,7 @@ set_numeric_value(void) case KM_MODULATION: set_modulation_frequency((int)uistat.value); break; +#if 0 case KM_COR_AM: config.cor_am =(int)uistat.value; config_save(); @@ -2264,7 +2273,7 @@ set_numeric_value(void) config.cor_nfm =(int)uistat.value; config_save(); break; - +#endif } }