From be78f2737125006bd816a48df0ffee8f6326b989 Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Mon, 31 May 2021 07:34:16 +0200 Subject: [PATCH 01/12] Update NF correction --- plot.c | 6 +++++- si4468.c | 18 +++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/plot.c b/plot.c index 5a63cec..1eb69ce 100644 --- a/plot.c +++ b/plot.c @@ -1617,7 +1617,11 @@ static void cell_draw_marker_info(int x0, int y0) // j = 1; int xpos = 1 + (j%2)*(WIDTH/2) + CELLOFFSETX - x0; int ypos = 1 + (j/2)*(16) - y0; - cell_printf(xpos, ypos, FONT_b"GAIN: %4.1fdB NF: %4.1f", nf_gain, mNF); + if (nf_gain != 0) { + cell_printf(xpos, ypos, FONT_b"GAIN: %4.1fdB NF: %4.1f", nf_gain, mNF); + } else { + cell_printf(xpos, ypos, FONT_b"TINYSA NF: %4.1f", mNF); + } break; #endif } else diff --git a/si4468.c b/si4468.c index 3a4c478..82287c9 100644 --- a/si4468.c +++ b/si4468.c @@ -1523,15 +1523,15 @@ typedef struct { static const RBW_t RBW_choices[] = { // BW register corr freq - {SI4463_RBW_02kHz, 16,3,42}, - {SI4463_RBW_1kHz, 20,10,29}, - {SI4463_RBW_3kHz, 15,30,28}, - {SI4463_RBW_10kHz, 5,100,26}, - {SI4463_RBW_30kHz, 11,300,22}, - {SI4463_RBW_100kHz,9,1000,19}, - {SI4463_RBW_300kHz,8,3000,5}, - {SI4463_RBW_600kHz,9,6000,-1}, - {SI4463_RBW_850kHz,19,8500,-9}, + {SI4463_RBW_02kHz, 16,3,22}, + {SI4463_RBW_1kHz, 20,10,9}, + {SI4463_RBW_3kHz, 15,30,8}, + {SI4463_RBW_10kHz, 5,100,6}, + {SI4463_RBW_30kHz, 11,300,2}, + {SI4463_RBW_100kHz,9,1000,-1}, + {SI4463_RBW_300kHz,8,3000,-15}, + {SI4463_RBW_600kHz,9,6000,-21}, + {SI4463_RBW_850kHz,19,8500,-29}, }; const uint8_t SI4432_RBW_count = ((int)(sizeof(RBW_choices)/sizeof(RBW_t))); From ee2af4df4084f23f062697322a99331849c6d674 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sun, 30 May 2021 18:33:32 +0300 Subject: [PATCH 02/12] Cleanup, allow update only one button on slider --- nanovna.h | 1 + ui.c | 43 ++++++++++++++++++++++++------------------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/nanovna.h b/nanovna.h index a35c5e3..309054a 100644 --- a/nanovna.h +++ b/nanovna.h @@ -1198,6 +1198,7 @@ void menu_push_lowoutput(void); void menu_push_highoutput(void); void menu_move_top(void); void draw_menu(void); +void draw_menu_mask(uint32_t mask); void refres_sweep_menu(void); int check_touched(void); int invoke_quick_menu(int); diff --git a/ui.c b/ui.c index 93facb1..437d071 100644 --- a/ui.c +++ b/ui.c @@ -22,6 +22,7 @@ #include "chprintf.h" #include "nanovna.h" #include +#include #include #pragma GCC push_options @@ -230,8 +231,8 @@ static int btn_wait_release(void) //******************************************************************************* #ifdef SOFTWARE_TOUCH // ADC read count for measure X and Y (2^N count) -#define TOUCH_X_N 2 -#define TOUCH_Y_N 2 +#define TOUCH_X_N 3 +#define TOUCH_Y_N 3 static int touch_measure_y(void) { @@ -1163,7 +1164,7 @@ static const uint8_t check_box[] = { #endif static void -draw_menu_buttons(const menuitem_t *menu, int only) +draw_menu_buttons(const menuitem_t *menu, uint32_t mask) { int i = 0; int y = 0; @@ -1174,12 +1175,12 @@ draw_menu_buttons(const menuitem_t *menu, int only) if (menuDisabled(menu[i].type)) //not applicable to mode continue; #ifdef __SWEEP_RESTART__ - if (only != -1 && only != i) { + if ((mask&(1< BUTTON_DOWN_LONG_TICKS) { + if (dt > wait) { +// wait = MS2ST(100); prev_touch_time = ticks; touch_position(&touch_x, &touch_y); - if (touch_x != prev_touch_x /* - 1 || prev_touch_x + 1 < touch_x */ ) { + if (abs(touch_x - prev_touch_x) > 1) { fetch_numeric_target(keypad); int new_slider = touch_x - LCD_WIDTH/2; // Can have negative outcome if (new_slider < - (MENU_FORM_WIDTH-8)/2 - 1) @@ -1362,7 +1362,7 @@ menu_select_touch(int i, int pos) if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_CENTER){ #define TOUCH_DEAD_ZONE 40 if (mode == SL_UNKNOWN ) { - if (setting.slider_position - TOUCH_DEAD_ZONE < new_slider && new_slider < setting.slider_position + TOUCH_DEAD_ZONE) { // Pick up slider + if (abs(setting.slider_position - new_slider) < TOUCH_DEAD_ZONE) { // Pick up slider mode = SL_MOVE; } else { mode = SL_SPAN; @@ -1383,7 +1383,7 @@ menu_select_touch(int i, int pos) set_keypad_value(keypad); dirty = false; perform(false, 0, uistat.freq_value, false); - draw_menu(); + draw_menu_mask(1< Date: Sun, 30 May 2021 20:30:20 +0300 Subject: [PATCH 03/12] slider ui fix --- ui.c | 263 +++++++++++++++++++++++++++-------------------------------- 1 file changed, 119 insertions(+), 144 deletions(-) diff --git a/ui.c b/ui.c index 437d071..6a953cb 100644 --- a/ui.c +++ b/ui.c @@ -358,16 +358,6 @@ touch_check(void) } #endif } - #if 0 // Long press detection - systime_t ticks = chVTGetSystemTimeX(); - - if (stat && !last_touch_status) { // new button, initialize - prev_touch_time = ticks; - } - dt = ticks - prev_touch_time; - - if (stat && stat == last_touch_status && dt > BUTTON_DOWN_LONG_TICKS) {return EVT_TOUCH_LONGPRESS;} -#endif if (stat != last_touch_status) { last_touch_status = stat; return stat ? EVT_TOUCH_PRESSED : EVT_TOUCH_RELEASED; @@ -1326,138 +1316,120 @@ void check_frequency_slider(freq_t slider_freq) } } +#define TOUCH_DEAD_ZONE 40 static void menu_select_touch(int i, int pos) { long_t step = 0; int do_exit = false; selection = i; - draw_menu(); + draw_menu_mask(1< wait) { -// wait = MS2ST(100); prev_touch_time = ticks; - touch_position(&touch_x, &touch_y); - if (abs(touch_x - prev_touch_x) > 1) { - fetch_numeric_target(keypad); - int new_slider = touch_x - LCD_WIDTH/2; // Can have negative outcome - if (new_slider < - (MENU_FORM_WIDTH-8)/2 - 1) - new_slider = -(MENU_FORM_WIDTH-8)/2 - 1; - if (new_slider > (MENU_FORM_WIDTH-8)/2 + 1) - new_slider = (MENU_FORM_WIDTH-8)/2 + 1; - if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_CENTER){ -#define TOUCH_DEAD_ZONE 40 - if (mode == SL_UNKNOWN ) { - if (abs(setting.slider_position - new_slider) < TOUCH_DEAD_ZONE) { // Pick up slider - mode = SL_MOVE; - } else { - mode = SL_SPAN; - goto first_span; - } + systime_t dt = 0; + int mode = SL_UNKNOWN; + + systime_t ticks = chVTGetSystemTimeX(); + while (touch_check() != EVT_TOUCH_NONE){ + dt = chVTGetSystemTimeX() - ticks; + if (dt > BUTTON_DOWN_LONG_TICKS) break; + } + + if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && dt >= BUTTON_DOWN_LONG_TICKS){ + // Wait release touch and process it + while (touch_check() != EVT_TOUCH_NONE){ + touch_position(&touch_x, &touch_y); + if (abs(touch_x - prev_touch_x) < 2) continue; + + fetch_numeric_target(keypad); + int new_slider = touch_x - LCD_WIDTH/2; // Can have negative outcome + if (new_slider < - (MENU_FORM_WIDTH-8)/2 - 1) + new_slider = -(MENU_FORM_WIDTH-8)/2 - 1; + if (new_slider > (MENU_FORM_WIDTH-8)/2 + 1) + new_slider = (MENU_FORM_WIDTH-8)/2 + 1; + if (keypad == KM_CENTER) { + if (mode == SL_UNKNOWN ) { + if (abs(setting.slider_position - new_slider) < TOUCH_DEAD_ZONE) // Pick up slider + mode = SL_MOVE; + else + mode = SL_SPAN; + } + if (mode == SL_MOVE ) { + long_t freq_delta = (setting.slider_span/(MENU_FORM_WIDTH-8))*(new_slider - setting.slider_position); + if (freq_delta < 0 && uistat.freq_value < (freq_t)(-freq_delta)) + uistat.freq_value = 0; + else + uistat.freq_value+= freq_delta; + if (uistat.freq_value < minFreq) + uistat.freq_value = minFreq; + if (uistat.freq_value > maxFreq) + uistat.freq_value = maxFreq; + setting.slider_position = new_slider; + set_keypad_value(keypad); + dirty = false; + perform(false, 0, uistat.freq_value, false); + draw_menu_mask(1<0) { + 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 (mode == SL_MOVE ) { - long_t freq_delta = (setting.slider_span/(MENU_FORM_WIDTH-8))*(new_slider - setting.slider_position); - if (freq_delta < 0 && uistat.freq_value < (freq_t)(-freq_delta)) - uistat.freq_value = 0; - else - uistat.freq_value+= freq_delta; - if (uistat.freq_value < minFreq) - uistat.freq_value = minFreq; - if (uistat.freq_value > maxFreq) - uistat.freq_value = maxFreq; - setting.slider_position = new_slider; - set_keypad_value(keypad); - dirty = false; - perform(false, 0, uistat.freq_value, false); - draw_menu_mask(1<0) { - 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 ((freq_t)setting.slider_span > (maxFreq - minFreq)) - setting.slider_span = (maxFreq - minFreq); - freq_t old_minFreq = minFreq; // Save when in high mode - minFreq = 0; // And set minFreq to 0 for span display - uistat.freq_value = setting.slider_span; - set_keypad_value(keypad); -#if 1 - plot_printf(center_text, sizeof center_text, "RANGE: %%s"); -#else - center_text[0] = 'S'; - center_text[1] = 'P'; - center_text[2] = 'A'; - center_text[3] = 'N'; -#endif - draw_menu_mask(1< (maxFreq - minFreq)) + setting.slider_span = (maxFreq - minFreq); + freq_t old_minFreq = minFreq; // Save when in high mode + minFreq = 0; // And set minFreq to 0 for span display + uistat.freq_value = setting.slider_span; + set_keypad_value(keypad); + plot_printf(center_text, sizeof center_text, "RANGE: %%s"); + draw_menu_mask(1< BUTTON_DOWN_LONG_TICKS || do_exit) { - selection = -1; - draw_menu(); -// redraw_request = 0; // reset all (not need update after) - return; - } - if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_LOWOUTLEVEL) { - switch (pos) { + keypad_mode = old_keypad_mode; + selection = -1; + draw_menu(); + return; + } +// Wait touch release + touch_wait_release(); + if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_LOWOUTLEVEL) { + switch (pos) { case 0: step = -10; break; @@ -1472,12 +1444,11 @@ menu_select_touch(int i, int pos) case 4: step = +10; break; - } - uistat.value = setting.external_gain + get_level() + step; - do_exit = true; - goto apply_step; - } else if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_CENTER) { - switch (pos) { + } + uistat.value = setting.external_gain + get_level() + step; + do_exit = true; + } else if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_CENTER) { + switch (pos) { case 0: step = setting.slider_span; step =-step; @@ -1494,21 +1465,25 @@ menu_select_touch(int i, int pos) case 4: step = setting.slider_span; break; - } - if (step < 0 && get_sweep_frequency(ST_CENTER) < (freq_t)(-step)) - uistat.freq_value = 0; - else - uistat.freq_value = get_sweep_frequency(ST_CENTER) + step; - do_exit = true; - setting.slider_position = 0; // reset slider after step - check_frequency_slider(uistat.freq_value); - goto apply_step; } - + if (step < 0 && get_sweep_frequency(ST_CENTER) < (freq_t)(-step)) + uistat.freq_value = 0; + else + uistat.freq_value = get_sweep_frequency(ST_CENTER) + step; + do_exit = true; + setting.slider_position = 0; // reset slider after step + check_frequency_slider(uistat.freq_value); + } + if (do_exit){ + set_keypad_value(keypad); + perform(false, 0, get_sweep_frequency(ST_CENTER), false); + selection = -1; + draw_menu(); + return; + } nogo: - setting.slider_position = 0; // Reset slider when entering frequency + setting.slider_position = 0; // Reset slider when entering frequency #endif - // touch_wait_release(); selection = -1; menu_invoke(i); From 66f77cb7a7cf640e65ec4f4d9d7423e4668dd303 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sun, 30 May 2021 20:33:40 +0300 Subject: [PATCH 04/12] Update --- ui.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui.c b/ui.c index 6a953cb..c89f04b 100644 --- a/ui.c +++ b/ui.c @@ -1427,7 +1427,7 @@ menu_select_touch(int i, int pos) return; } // Wait touch release - touch_wait_release(); +// touch_wait_release(); if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_LOWOUTLEVEL) { switch (pos) { case 0: From 88d98b10d7eb30d8cb97c685dac2ebc502101cc6 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sun, 30 May 2021 20:51:44 +0300 Subject: [PATCH 05/12] Cleanup, more smooth update --- ui.c | 91 +++++++++++++++++++++++------------------------------------- 1 file changed, 35 insertions(+), 56 deletions(-) diff --git a/ui.c b/ui.c index c89f04b..0a0ef6d 100644 --- a/ui.c +++ b/ui.c @@ -1321,12 +1321,10 @@ static void menu_select_touch(int i, int pos) { long_t step = 0; - int do_exit = false; selection = i; draw_menu_mask(1< Date: Sun, 30 May 2021 21:01:37 +0300 Subject: [PATCH 06/12] More smooth menu update on leveler/touch --- ui.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ui.c b/ui.c index 0a0ef6d..99c34a5 100644 --- a/ui.c +++ b/ui.c @@ -1321,13 +1321,14 @@ static void menu_select_touch(int i, int pos) { long_t step = 0; + uint32_t mask = (1<=0) mask|=1<=0) mask|=1<=0) mask|=1< Date: Sun, 30 May 2021 21:06:22 +0300 Subject: [PATCH 07/12] revert --- ui.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ui.c b/ui.c index 99c34a5..d3b3139 100644 --- a/ui.c +++ b/ui.c @@ -1439,11 +1439,11 @@ menu_select_touch(int i, int pos) } else if (keypad == KM_CENTER) { switch (pos) { - case 0: step = -setting.slider_span; break; - case 1: step = -setting.slider_span/10;break; + case 0: step = setting.slider_span; step=-step; break; + case 1: step = setting.slider_span/10;step=-step; break; case 2: goto nogo; - case 3: step = setting.slider_span/10;break; - case 4: step = setting.slider_span; break; + case 3: step = setting.slider_span/10;break; + case 4: step = setting.slider_span; break; } if (step < 0 && get_sweep_frequency(ST_CENTER) < (freq_t)(-step)) uistat.freq_value = 0; From 48d0186eba6d5162cb9f92440ce5b65bb5d3be70 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sun, 30 May 2021 21:22:56 +0300 Subject: [PATCH 08/12] Code style, remove goto --- ui.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/ui.c b/ui.c index d3b3139..7f31679 100644 --- a/ui.c +++ b/ui.c @@ -1229,10 +1229,9 @@ draw_menu_buttons(const menuitem_t *menu, uint32_t mask) ili9341_blitBitmap(button_start+MENU_FORM_WIDTH- FORM_ICON_WIDTH-8,y+(button_height-FORM_ICON_HEIGHT)/2,FORM_ICON_WIDTH,FORM_ICON_HEIGHT,&right_icons[((menu[i].data >>0)&0xf)*2*FORM_ICON_HEIGHT]); } #endif - int local_slider_positions = 0; int local_text_shift = 0; if (MT_MASK(menu[i].type) == MT_KEYPAD) { - local_text_shift = 2; + int local_slider_positions = 0; if (menu[i].data == KM_CENTER) { local_slider_positions = LCD_WIDTH/2+setting.slider_position; lcd_printf(button_start+12 + 0 * MENU_FORM_WIDTH/5, y+button_height-9, "%+3.0FHz", -(float)setting.slider_span); @@ -1240,7 +1239,6 @@ draw_menu_buttons(const menuitem_t *menu, uint32_t mask) lcd_printf(button_start+12 + 2 * MENU_FORM_WIDTH/5, y+button_height-9, "Set"); lcd_printf(button_start+12 + 3 * MENU_FORM_WIDTH/5, y+button_height-9, "%+3.0FHz", (float)setting.slider_span/10); lcd_printf(button_start+12 + 4 * MENU_FORM_WIDTH/5, y+button_height-9, "%+3.0FHz", (float)setting.slider_span); - goto draw_divider; } else if (menu[i].data == KM_LOWOUTLEVEL) { local_slider_positions = ((get_level() - level_min()) * (MENU_FORM_WIDTH-8)) / level_range() + OFFSETX+4; lcd_printf(button_start+12 + 0 * MENU_FORM_WIDTH/5, y+button_height-9, "%+ddB", -10); @@ -1248,17 +1246,18 @@ draw_menu_buttons(const menuitem_t *menu, uint32_t mask) lcd_printf(button_start+12 + 2 * MENU_FORM_WIDTH/5, y+button_height-9, "Set"); lcd_printf(button_start+12 + 3 * MENU_FORM_WIDTH/5, y+button_height-9, "%+ddB", 1); lcd_printf(button_start+12 + 4 * MENU_FORM_WIDTH/5, y+button_height-9, "%+ddB", 10); - draw_divider: - for (int i = 1; i <= 4; i++) { - ili9341_line(button_start + i * MENU_FORM_WIDTH/5, y+button_height-9, button_start + i * MENU_FORM_WIDTH/5, y+button_height); - } - draw_slider: + } else if (menu[i].data == KM_HIGHOUTLEVEL) { + local_slider_positions = ((get_level() - level_min() ) * (MENU_FORM_WIDTH-8)) / level_range() + OFFSETX+4; + } + if (local_slider_positions){ if (local_slider_positions < button_start) local_slider_positions = button_start; + // Shift down text if slider present + local_text_shift = 2; ili9341_blitBitmap(local_slider_positions - 4, y, 7, 5, slider_bitmap); - } else if (menu[i].data == KM_HIGHOUTLEVEL) { - local_slider_positions = ((get_level() - level_min() ) * (MENU_FORM_WIDTH-8)) / level_range() + OFFSETX+4; - goto draw_slider; + // Draw divider for sliders + for (int i = 1; i <= 4; i++) + ili9341_line(button_start + i * MENU_FORM_WIDTH/5, y+button_height-9, button_start + i * MENU_FORM_WIDTH/5, y+button_height); } } // ili9341_drawstring_size(text, text_offs, y+(button_height-2*FONT_GET_HEIGHT)/2-local_text_shift, 2); From 3fe898a7654bc82730dc61e2dd8faacd87f2bd88 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sun, 30 May 2021 21:28:27 +0300 Subject: [PATCH 09/12] Redraw menu before perform --- ui.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui.c b/ui.c index 7f31679..f9eff22 100644 --- a/ui.c +++ b/ui.c @@ -1409,12 +1409,12 @@ menu_select_touch(int i, int pos) } else if (keypad == KM_LOWOUTLEVEL) { uistat.value = setting.external_gain + ((touch_x - OFFSETX+4) * level_range() ) / (MENU_FORM_WIDTH-8) + level_min() ; set_keypad_value(keypad); - perform(false, 0, get_sweep_frequency(ST_CENTER), false); draw_menu_mask(1< Date: Sun, 30 May 2021 21:54:26 +0300 Subject: [PATCH 10/12] Less size --- ui.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/ui.c b/ui.c index f9eff22..d5bc809 100644 --- a/ui.c +++ b/ui.c @@ -1319,9 +1319,7 @@ void check_frequency_slider(freq_t slider_freq) static void menu_select_touch(int i, int pos) { - long_t step = 0; - uint32_t mask = (1<=0) mask|=1<=0) mask|=1<=0) mask|=1< Date: Sun, 30 May 2021 22:06:24 +0300 Subject: [PATCH 11/12] Smooth keyboard update --- ui.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/ui.c b/ui.c index d5bc809..d87cfb4 100644 --- a/ui.c +++ b/ui.c @@ -961,12 +961,13 @@ void drawMessageBox(char *header, char *text, uint32_t delay){ } static void -draw_keypad(void) +draw_keypad(uint32_t mask) { - int i = 0; + int i; ui_button_t button; button.fg = LCD_MENU_TEXT_COLOR; - while (keypads[i].c >= 0) { + for(i = 0; keypads[i].c >= 0; i++) { + if ((mask&(1< keypads_last_index) selection = 0; - draw_keypad(); - s = btn_wait_release(); - } while (s != 0); + draw_keypad(mask|(1< Date: Sun, 30 May 2021 22:26:47 +0300 Subject: [PATCH 12/12] warning fix --- ui_sa.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ui_sa.c b/ui_sa.c index 23c9c30..4bab9ed 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -790,6 +790,7 @@ static UI_FUNCTION_ADV_CALLBACK(menu_store_preset_acb) UI_FUNCTION_CALLBACK(menu_load_config_cb) { (void)item; + (void)data; sd_card_load_config("config.ini"); ui_mode_normal(); }