From b93dcefa052514888cdd16ba92e79e8b073d1db2 Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Fri, 11 Dec 2020 14:13:28 +0100 Subject: [PATCH 1/5] Updated spur removal setting and marker quick menu --- nanovna.h | 1 + sa_core.c | 89 +++++++++++++++++++++++++++++++++++++------------------ ui.c | 33 ++++++++++++++++++--- ui_sa.c | 20 ++++++++----- 4 files changed, 102 insertions(+), 41 deletions(-) diff --git a/nanovna.h b/nanovna.h index ab030b0..58eca55 100644 --- a/nanovna.h +++ b/nanovna.h @@ -237,6 +237,7 @@ void set_sweep_time_us(uint32_t); #ifdef __SPUR__ //extern int setting.spur; void set_spur(int v); +void toggle_spur(void); void toggle_mirror_masking(void); #endif void set_average(int); diff --git a/sa_core.c b/sa_core.c index 0838a01..e451f22 100644 --- a/sa_core.c +++ b/sa_core.c @@ -143,7 +143,11 @@ void reset_settings(int m) // setting.refer = -1; // do not reset reffer when switching modes setting.mute = true; #ifdef __SPUR__ - setting.spur_removal = 0; +#ifdef TINYSA4 + setting.spur_removal = S_AUTO_OFF; +#else + setting.spur_removal = S_OFF; +#endif setting.mirror_masking = 0; #endif switch(m) { @@ -208,10 +212,10 @@ uint32_t calc_min_sweep_time_us(void) // Estimate minimum sweep time in #endif if (FREQ_IS_CW()) { bare_sweep_time = MINIMUM_SWEEP_TIME; // minimum sweep time in fast CW mode - if (setting.repeat != 1 || setting.sweep_time_us >= 100*ONE_MS_TIME || setting.spur_removal != 0) // if no fast CW sweep possible + if (setting.repeat != 1 || setting.sweep_time_us >= 100*ONE_MS_TIME || S_STATE(setting.spur_removal)) // if no fast CW sweep possible bare_sweep_time = 15000; // minimum CW sweep time when not in fast CW mode } - t = vbwSteps * (setting.spur_removal ? 2 : 1) * bare_sweep_time ; // factor in vbwSteps and spur impact + t = vbwSteps * (S_STATE(setting.spur_removal) ? 2 : 1) * bare_sweep_time ; // factor in vbwSteps and spur impact t += (setting.repeat - 1)* REPEAT_TIME * (sweep_points); // Add time required for repeats } return t; @@ -645,6 +649,26 @@ void set_spur(int v) // set_RBW(300); dirty = true; } + +void toggle_spur(void) +{ + if (setting.mode!=M_LOW) + return; +#ifdef TINYSA4 + if (S_IS_AUTO(setting.spur_removal )) + setting.spur_removal = false; + else if (setting.spur_removal) + setting.spur_removal = S_AUTO_OFF; + else + setting.spur_removal = true; +#else + if (S_STATE(setting.spur_removal )) + setting.spur_removal = S_OFF; + else + setting.spur_removal = S_ON; +#endif + dirty = true; +} #endif #ifdef __ULTRA__ @@ -1335,7 +1359,7 @@ void update_rbw(void) // calculate the actual_rbw and the vbwSteps (# #endif actual_rbw_x10 = temp_actual_rbw_x10; // Now it fits in 16 bit #ifdef __SI4432__ - if (setting.spur_removal && actual_rbw_x10 > 3000) + if (S_STATE(setting.spur_removal) && actual_rbw_x10 > 3000) actual_rbw_x10 = 2500; // if spur suppression reduce max rbw to fit within BPF SI4432_Sel = MODE_SELECT(setting.mode); #endif @@ -1574,13 +1598,13 @@ pureRSSI_t perform(bool break_on_operation, int i, uint32_t f, int tracking) { int modulation_delay = 0; int modulation_index = 0; + int spur_second_pass = false; if (i == 0 && dirty ) { // if first point in scan and dirty calculate_correction(); // pre-calculate correction factor dividers to avoid float division apply_settings(); // Initialize HW scandirty = true; // This is the first pass with new settings dirty = false; sweep_elapsed = chVTGetSystemTimeX(); // for measuring accumulated time - if (setting.spur_removal == -1) setting.spur_removal = 1; // ensure spur processing starts in right phase // Set for actual time pre calculated value (update after sweep) setting.actual_sweep_time_us = calc_min_sweep_time_us(); // Change actual sweep time as user input if it greater minimum @@ -1749,8 +1773,8 @@ modulation_again: goto skip_LO_setting; // No more LO changes required, save some time and jump over the code uint32_t local_IF; - - again: // Spur reduction jumps to here for second measurement + spur_second_pass = false; + again: // Spur reduction jumps to here for second measurement local_IF=0; // to get rid of warning if (MODE_HIGH(setting.mode)) { @@ -1771,17 +1795,17 @@ modulation_again: stored_t[i] = -60.0; // Display when to do spur shift in the stored trace #endif } - if (setting.spur_removal){ // If in low input mode and spur reduction is on + if (S_STATE(setting.spur_removal)){ // If in low input mode and spur reduction is on if (S_IS_AUTO(setting.below_IF) && (lf < local_IF / 2 || lf > local_IF) ) // if below 150MHz and auto_below_IF <-------------------TODO --------------------- { // else low/above IF - if (setting.spur_removal == 1) - setting.below_IF = S_AUTO_ON; // use below IF in first pass + if (spur_second_pass) + setting.below_IF = S_AUTO_ON; // use below IF in second pass else - setting.below_IF = S_AUTO_OFF; // and above IF in second pass + setting.below_IF = S_AUTO_OFF; // and above IF in first pass } else { - if (setting.spur_removal == -1) // If second spur pass + if (spur_second_pass) // If second spur pass #ifdef __SI4432__ local_IF = local_IF + 500000; // apply IF spur shift #else @@ -1796,11 +1820,11 @@ modulation_again: } #ifdef __ULTRA__ } else if (setting.mode == M_ULTRA) { // No above/below IF mode in Ultra - local_IF = setting.frequency_IF + (int)(actual_rbw < 350.0 ? setting.spur_removal*300000 : 0 ); + local_IF = setting.frequency_IF + (int)(actual_rbw < 350.0 ? S_STATE(setting.spur_removal)*300000 : 0 ); #ifdef __SI4432__ set_freq (SI4432_RX , local_IF); #endif - // local_IF = setting.frequency_IF + (int)(actual_rbw < 300.0?setting.spur_removal * 1000 * actual_rbw:0); + // local_IF = setting.frequency_IF + (int)(actual_rbw < 300.0?S_STATE(setting.spur_removal) * 1000 * actual_rbw:0); #endif } @@ -1811,7 +1835,7 @@ modulation_again: // if (lf > 3406000000 ) // setFreq (1, local_IF/5 + lf/5); // else - if (setting.spur_removal != 1) { // Left of tables + if (S_STATE(setting.spur_removal) != 1) { // Left of tables if (lf > 3250000000 ) set_freq (SI4432_LO , lf/5 - local_IF/5); if (lf > 1250000000 ) @@ -1875,7 +1899,7 @@ modulation_again: #ifdef __SI4432__ #ifdef __FAST_SWEEP__ - if (i == 0 && setting.frequency_step == 0 && setting.trigger == T_AUTO && setting.spur_removal == 0 && SI4432_step_delay == 0 && setting.repeat == 1 && setting.sweep_time_us < 100*ONE_MS_TIME) { + if (i == 0 && setting.frequency_step == 0 && setting.trigger == T_AUTO && S_STATE(setting.spur_removal) == 0 && SI4432_step_delay == 0 && setting.repeat == 1 && setting.sweep_time_us < 100*ONE_MS_TIME) { // if ultra fast scanning is needed prefill the SI4432 RSSI read buffer SI4432_Fill(MODE_SELECT(setting.mode), 0); } @@ -1929,7 +1953,7 @@ modulation_again: }while(1); #ifdef __FAST_SWEEP__ #ifdef __SI4432__ - if (setting.spur_removal == 0 && SI4432_step_delay == 0 && setting.repeat == 1 && setting.sweep_time_us < 100*ONE_MS_TIME) { + if (S_STATE(setting.spur_removal) == 0 && SI4432_step_delay == 0 && setting.repeat == 1 && setting.sweep_time_us < 100*ONE_MS_TIME) { SI4432_Fill(MODE_SELECT(setting.mode), 1); // fast mode possible to pre-fill RSSI buffer } #endif @@ -1946,13 +1970,16 @@ modulation_again: } #ifdef __SPUR__ static pureRSSI_t spur_RSSI = -1; // Initialization only to avoid warning. - if (setting.spur_removal == 1) { // If first spur pass - spur_RSSI = pureRSSI; // remember measure RSSI - setting.spur_removal = -1; - goto again; // Skip all other processing - } else if (setting.spur_removal == -1) { // If second spur pass - pureRSSI = ( pureRSSI < spur_RSSI ? pureRSSI : spur_RSSI); // Take minimum of two - setting.spur_removal = 1; // and prepare for next call of perform. + if (S_STATE(setting.spur_removal)) { + if (!spur_second_pass) { // If first spur pass + spur_RSSI = pureRSSI; // remember measure RSSI + spur_second_pass = true; + goto again; // Skip all other processing + } else { // If second spur pass + pureRSSI = ( pureRSSI < spur_RSSI ? pureRSSI : spur_RSSI); // Take minimum of two + if (S_IS_AUTO(setting.below_IF)) + setting.below_IF = S_AUTO_OFF; // make sure it is off for next pass + } } #endif @@ -3076,7 +3103,11 @@ common_silent: setting.step_delay_mode = SD_PRECISE; // set_step_delay(1); // Precise scanning speed #ifdef __SPUR__ - setting.spur_removal = 1; +#ifdef TINYSA4 + setting.spur_removal = S_AUTO_OFF; +#else + setting.spur_removal = S_OFF; +#endif #endif common: @@ -3094,7 +3125,7 @@ common_silent: dirty = true; // set_step_delay(1); // Do not set !!!!! #ifdef __SPUR__ - setting.spur_removal = 1; + setting.spur_removal = S_ON; #endif goto common; @@ -3282,7 +3313,7 @@ void self_test(int test) j = setting.test_argument; // do_again: test_prepare(TEST_RBW); - setting.spur_removal = 0; + setting.spur_removal = S_OFF; #if 1 // Disable for offset baseline scanning setting.step_delay_mode = SD_NORMAL; setting.repeat = 1; @@ -3319,7 +3350,7 @@ void self_test(int test) #if 1 // Enable for step delay tuning while (setting.step_delay > 10 && test_value != 0 && test_value > saved_peakLevel - 0.5) { test_prepare(TEST_RBW); - setting.spur_removal = 0; + setting.spur_removal = S_OFF; setting.step_delay_mode = SD_NORMAL; setting.step_delay = setting.step_delay * 4 / 5; if (setting.rbw_x10 < 1000) @@ -3346,7 +3377,7 @@ void self_test(int test) test_prepare(TEST_RBW); setting.step_delay_mode = SD_FAST; setting.offset_delay /= 2; - setting.spur_removal = 0; + setting.spur_removal = S_OFF; if (setting.rbw_x10 < 1000) set_sweep_frequency(ST_SPAN, (uint32_t)(setting.rbw_x10 * 5000)); // 50 times RBW else diff --git a/ui.c b/ui.c index 6a4cded..de4f7a3 100644 --- a/ui.c +++ b/ui.c @@ -124,6 +124,7 @@ typedef struct { #define EVT_TOUCH_DOWN 1 #define EVT_TOUCH_PRESSED 2 #define EVT_TOUCH_RELEASED 3 +#define EVT_TOUCH_LONGPRESS 4 static int8_t last_touch_status = EVT_TOUCH_NONE; static int16_t last_touch_x; @@ -296,7 +297,16 @@ touch_check(void) last_touch_y = y; } } +#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; @@ -421,7 +431,7 @@ show_version(void) ili9341_drawstring(info_about[i++], x, y+=5); } while (true) { - if (touch_check() == EVT_TOUCH_PRESSED) + if (touch_check() == EVT_TOUCH_RELEASED) break; if (btn_check() & EVT_BUTTON_SINGLE_CLICK) break; @@ -895,9 +905,16 @@ active_marker_select(int item) choose_active_marker(); } } else { - if (previous_marker != active_marker) + if (previous_marker != active_marker) { previous_marker = active_marker; - active_marker = item; + active_marker = item; + } else { + active_marker = item; + selection = -1; + menu_current_level = 0; +extern const menuitem_t menu_marker_modify[]; + menu_push_submenu(menu_marker_modify); + } } } #ifdef __VNA__ @@ -2442,7 +2459,7 @@ ui_process_keypad(void) break; } - if (touch_check() == EVT_TOUCH_PRESSED) { + if (touch_check() == EVT_TOUCH_RELEASED) { int key = keypad_apply_touch(); if (key >= 0 && keypad_click(key)) /* exit loop on done or cancel */ @@ -2593,6 +2610,14 @@ touch_marker_select(void) for (int i = 0; i < MARKERS_MAX; i++) { if (markers[i].enabled) { if (selected_marker == 0) { + if (active_marker == i) { + extern const menuitem_t menu_marker_modify[]; + touch_wait_release(); + selection = -1; + menu_current_level = 0; + menu_push_submenu(menu_marker_modify); + break; + } active_marker = i; redraw_marker(active_marker); break; diff --git a/ui_sa.c b/ui_sa.c index 5ae89c2..23092b0 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -462,6 +462,8 @@ static const menuitem_t menu_tophigh[]; static const menuitem_t menu_topultra[]; #endif +#define AUTO_ICON(S) (S>=2?BUTTON_ICON_CHECK_AUTO:S) // Depends on order of ICONs!!!!! + static UI_FUNCTION_ADV_CALLBACK(menu_mode_acb) { (void)data; @@ -730,7 +732,7 @@ static UI_FUNCTION_ADV_CALLBACK(menu_spur_acb) if (b){ if (setting.mode == M_LOW) { b->param_1.text = "SPUR\nREMOVAL"; - b->icon = setting.spur_removal == 0 ? BUTTON_ICON_NOCHECK : BUTTON_ICON_CHECK; + b->icon = AUTO_ICON(setting.spur_removal); } else { b->param_1.text = "MIRROR\nMASKING"; b->icon = setting.mirror_masking == 0 ? BUTTON_ICON_NOCHECK : BUTTON_ICON_CHECK; @@ -738,10 +740,7 @@ static UI_FUNCTION_ADV_CALLBACK(menu_spur_acb) return; } if (setting.mode == M_LOW) { - if (setting.spur_removal) - set_spur(0); - else - set_spur(1); // must be 0 or 1 !!!! + toggle_spur(); } else toggle_mirror_masking(); // menu_move_back(); @@ -1185,8 +1184,6 @@ static UI_FUNCTION_ADV_CALLBACK(menu_harmonic_acb) #endif -#define AUTO_ICON(S) (S>=2?BUTTON_ICON_CHECK_AUTO:S) // Depends on order of ICONs!!!!! - static UI_FUNCTION_ADV_CALLBACK(menu_settings_agc_acb){ (void)item; (void)data; @@ -1295,7 +1292,11 @@ static UI_FUNCTION_ADV_CALLBACK(menu_outputmode_acb) draw_menu(); } +#ifdef TINYSA4 +static const uint16_t points_setting[] = {51, 101, 201, 450}; +#else static const uint16_t points_setting[] = {51, 101, 145, 290}; +#endif static UI_FUNCTION_ADV_CALLBACK(menu_points_acb){ (void)item; if(b){ @@ -2426,7 +2427,10 @@ redraw_cal_status: ili9341_set_foreground(LCD_BRIGHT_COLOR_GREEN); ili9341_drawstring("Spur:", x, y); y += YSTEP; - y = add_quick_menu("ON", x, y, (menuitem_t *)menu_stimulus); + if (S_IS_AUTO(setting.spur_removal)) + y = add_quick_menu("AUTO", x, y, (menuitem_t *)menu_stimulus); + else + y = add_quick_menu("ON", x, y, (menuitem_t *)menu_stimulus); } if (setting.mirror_masking) { ili9341_set_foreground(LCD_BRIGHT_COLOR_GREEN); From f5b6f318bba44a588efc7ae62717027838c7bd11 Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Fri, 11 Dec 2020 14:25:38 +0100 Subject: [PATCH 2/5] Corrected keypress bug --- ui.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ui.c b/ui.c index de4f7a3..8e86ad4 100644 --- a/ui.c +++ b/ui.c @@ -431,7 +431,7 @@ show_version(void) ili9341_drawstring(info_about[i++], x, y+=5); } while (true) { - if (touch_check() == EVT_TOUCH_RELEASED) + if (touch_check() == EVT_TOUCH_PRESSED) break; if (btn_check() & EVT_BUTTON_SINGLE_CLICK) break; @@ -2459,7 +2459,7 @@ ui_process_keypad(void) break; } - if (touch_check() == EVT_TOUCH_RELEASED) { + if (touch_check() == EVT_TOUCH_PRESSED) { int key = keypad_apply_touch(); if (key >= 0 && keypad_click(key)) /* exit loop on done or cancel */ @@ -2560,7 +2560,7 @@ static int touch_quick_menu(void) { int touch_x, touch_y; touch_position(&touch_x, &touch_y); - if (touch_x Date: Fri, 11 Dec 2020 16:02:01 +0100 Subject: [PATCH 3/5] Added frequency quick menu --- ui.c | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/ui.c b/ui.c index 8e86ad4..92cf81b 100644 --- a/ui.c +++ b/ui.c @@ -317,7 +317,7 @@ touch_check(void) void touch_wait_release(void) { - while (touch_check() != EVT_TOUCH_RELEASED) + while (touch_check() != EVT_TOUCH_NONE) chThdSleepMilliseconds(20); } @@ -896,7 +896,7 @@ menu_marker_smith_cb(int item, uint8_t data) #endif static void -active_marker_select(int item) +active_marker_select(int item) // used only to select an active marker from the modify marker selection menu { if (item == -1) { active_marker = previous_marker; @@ -910,10 +910,6 @@ active_marker_select(int item) active_marker = item; } else { active_marker = item; - selection = -1; - menu_current_level = 0; -extern const menuitem_t menu_marker_modify[]; - menu_push_submenu(menu_marker_modify); } } } @@ -2574,6 +2570,31 @@ touch_lever_mode_select(void) int touch_x, touch_y; touch_position(&touch_x, &touch_y); if (touch_y > HEIGHT) { + if (touch_x < FREQUENCIES_XPOS2 -50 && uistat.lever_mode == LM_CENTER) { + touch_wait_release(); + if (setting.freq_mode & FREQ_MODE_CENTER_SPAN) + ui_mode_keypad(KM_CENTER); + else + ui_mode_keypad(KM_START); + ui_process_keypad(); + } + if (touch_x > FREQUENCIES_XPOS2 - 50 && touch_x < FREQUENCIES_XPOS2 +50) { + touch_wait_release(); + if (FREQ_IS_STARTSTOP()) + setting.freq_mode |= FREQ_MODE_CENTER_SPAN; + else if (FREQ_IS_CENTERSPAN()) + setting.freq_mode &= ~FREQ_MODE_CENTER_SPAN; + redraw_request |= REDRAW_FREQUENCY; + return true; + } + if (touch_x >= FREQUENCIES_XPOS2 +50 && uistat.lever_mode == LM_SPAN) { + touch_wait_release(); + if (setting.freq_mode & FREQ_MODE_CENTER_SPAN) + ui_mode_keypad(KM_SPAN); + else + ui_mode_keypad(KM_STOP); + ui_process_keypad(); + } select_lever_mode(touch_x < FREQUENCIES_XPOS2 ? LM_CENTER : LM_SPAN); return TRUE; } @@ -2659,7 +2680,7 @@ void ui_process_touch(void) break; // Try select lever mode (top and bottom screen) if (touch_lever_mode_select()) { - touch_wait_release(); +// touch_wait_release(); break; } From 29c10161dd7b54450ec8b2b756d3d55cf52c4c2d Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Sat, 12 Dec 2020 09:43:11 +0100 Subject: [PATCH 4/5] Corrected touch cal bug and code squeezing --- ili9341.c | 24 ++++++++++++++---------- sa_core.c | 2 +- ui.c | 26 ++++++++++++++++++++------ ui_sa.c | 5 ----- 4 files changed, 35 insertions(+), 22 deletions(-) diff --git a/ili9341.c b/ili9341.c index 7b9e3fe..c0fff3b 100644 --- a/ili9341.c +++ b/ili9341.c @@ -22,6 +22,7 @@ #include "nanovna.h" #include "spi.h" + // Allow enable DMA for read display data //#define __USE_DISPLAY_DMA_RX__ @@ -666,7 +667,7 @@ void ili9341_drawstringV(const char *str, int x, int y) ili9341_drawstring(str, ILI9341_HEIGHT-y, x); ili9341_set_rotation(DISPLAY_ROTATION_0); } - +#ifndef wFONT_GET_DATA int ili9341_drawchar_size(uint8_t ch, int x, int y, uint8_t size) { uint16_t *buf = spi_buffer; @@ -684,17 +685,19 @@ int ili9341_drawchar_size(uint8_t ch, int x, int y, uint8_t size) return w*size; } +void ili9341_drawstring_size(const char *str, int x, int y, uint8_t size) +{ + while (*str) + x += ili9341_drawchar_size(*str++, x, y, size); +} +#endif + void ili9341_drawfont(uint8_t ch, int x, int y) { blit8BitWidthBitmap(x, y, NUM_FONT_GET_WIDTH, NUM_FONT_GET_HEIGHT, NUM_FONT_GET_DATA(ch)); } -void ili9341_drawstring_size(const char *str, int x, int y, uint8_t size) -{ - while (*str) - x += ili9341_drawchar_size(*str++, x, y, size); -} #if 0 static void ili9341_pixel(int x, int y, uint16_t color) { @@ -710,21 +713,21 @@ static void ili9341_pixel(int x, int y, uint16_t color) void ili9341_line(int x0, int y0, int x1, int y1) { + SWAP(foreground_color, background_color); #if 0 - // modifed Bresenham's line algorithm, see https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm + // modified Bresenham's line algorithm, see https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm int dx = x1 - x0, sx = 1; if (dx < 0) {dx = -dx; sx = -1;} int dy = y1 - y0, sy = 1; if (dy < 0) {dy = -dy; sy = -1;} int err = (dx > dy ? dx : -dy) / 2; while (1) { - ili9341_pixel(x0, y0, DEFAULT_FG_COLOR); + ili9341_fill(x0, y0, 1, 1); if (x0 == x1 && y0 == y1) break; int e2 = err; if (e2 > -dx) { err -= dy; x0 += sx; } if (e2 < dy) { err += dx; y0 += sy; } } -#endif - SWAP(foreground_color, background_color); +#else if (x0 > x1) { SWAP(x0, x1); SWAP(y0, y1); @@ -755,6 +758,7 @@ void ili9341_line(int x0, int y0, int x1, int y1) x0 += dx; y0 += dy; } +#endif SWAP(foreground_color, background_color); } diff --git a/sa_core.c b/sa_core.c index e451f22..3665d1f 100644 --- a/sa_core.c +++ b/sa_core.c @@ -22,7 +22,7 @@ #include "stdlib.h" #pragma GCC push_options -#pragma GCC optimize ("Og") +#pragma GCC optimize ("Os") //#define __DEBUG_AGC__ If set the AGC value will be shown in the stored trace and FAST_SWEEP rmmode will be disabled diff --git a/ui.c b/ui.c index 92cf81b..7df6114 100644 --- a/ui.c +++ b/ui.c @@ -25,6 +25,9 @@ #include #include +#pragma GCC push_options +#pragma GCC optimize ("Os") + uistat_t uistat = { digit: 6, current_trace: 0, @@ -76,7 +79,6 @@ enum { #endif #define NUMINPUT_LEN 10 - static uint8_t ui_mode = UI_NORMAL; static uint8_t keypad_mode; static uint8_t keypads_last_index; @@ -125,7 +127,6 @@ typedef struct { #define EVT_TOUCH_PRESSED 2 #define EVT_TOUCH_RELEASED 3 #define EVT_TOUCH_LONGPRESS 4 - static int8_t last_touch_status = EVT_TOUCH_NONE; static int16_t last_touch_x; static int16_t last_touch_y; @@ -320,13 +321,21 @@ touch_wait_release(void) while (touch_check() != EVT_TOUCH_NONE) chThdSleepMilliseconds(20); } - +#if 0 static inline void touch_wait_pressed(void) { while (touch_check() != EVT_TOUCH_PRESSED) ; } +#endif + +static inline void +touch_wait_released(void) +{ + while (touch_check() != EVT_TOUCH_RELEASED) + ; +} void touch_cal_exec(void) @@ -341,8 +350,8 @@ touch_cal_exec(void) ili9341_line(0, 0, 32, 0); ili9341_line(0, 0, 32, 32); ili9341_drawstring("TOUCH UPPER LEFT", 40, 40); - - touch_wait_release(); + touch_wait_released(); +// touch_wait_release(); x1 = last_touch_x; y1 = last_touch_y; @@ -352,7 +361,8 @@ touch_cal_exec(void) ili9341_line(LCD_WIDTH-1, LCD_HEIGHT-1, LCD_WIDTH-32, LCD_HEIGHT-32); ili9341_drawstring("TOUCH LOWER RIGHT", 210, 200); - touch_wait_release(); + touch_wait_released(); + // touch_wait_release(); x2 = last_touch_x; y2 = last_touch_y; @@ -2826,3 +2836,7 @@ int check_touched(void) touch_start_watchdog(); return touched; } + + + +#pragma GCC pop_options diff --git a/ui_sa.c b/ui_sa.c index 23092b0..2577a02 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -16,8 +16,6 @@ * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ -#pragma GCC push_options -#pragma GCC optimize ("Os") #define FORM_ICON_WIDTH 16 @@ -2632,6 +2630,3 @@ redraw_cal_status: } } - - -#pragma GCC pop_options From 18b511deba2409557a43ddf8cb0bb696b9e1667d Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Sat, 12 Dec 2020 17:01:27 +0100 Subject: [PATCH 5/5] Optimize size --- plot.c | 2 +- sa_core.c | 24 ++++++------------------ 2 files changed, 7 insertions(+), 19 deletions(-) diff --git a/plot.c b/plot.c index df19c5b..49a4840 100644 --- a/plot.c +++ b/plot.c @@ -902,7 +902,7 @@ trace_get_value_string_delta(int t, char *buf, int len, float array[POINTS_COUNT } #endif -inline void trace_get_value_string( // Only used at one place +void trace_get_value_string( // Only used at one place int t, char *buf, int len, int i, float coeff[POINTS_COUNT], int ri, int mtype, diff --git a/sa_core.c b/sa_core.c index 3665d1f..0ec89f6 100644 --- a/sa_core.c +++ b/sa_core.c @@ -22,7 +22,7 @@ #include "stdlib.h" #pragma GCC push_options -#pragma GCC optimize ("Os") +#pragma GCC optimize ("Os") // "Os" causes problem in selftest!!!!!!!! //#define __DEBUG_AGC__ If set the AGC value will be shown in the stored trace and FAST_SWEEP rmmode will be disabled @@ -47,21 +47,6 @@ const int reffer_freq[] = {30000000, 15000000, 10000000, 4000000, 3000000, 20000 int in_selftest = false; -#if 0 -const char *dummy = "this is a very long string only used to fill memory so I know when the memory is full and I can remove some of this string to make more memory available\ -this is a very long string only used to fill memory so I know when the memory is full and I can remove some of this string to make more memory available\ -this is a very long string only used to fill memory so I know when the memory is full and I can remove some of this string to make more memory available\ -this is a very long string only used to fill memory so I know when the memory is full and I can remove some of this string to make more memory available\ -this is a very long string only used to fill memory so I know when the memory is full and I can remove some of this string to make more memory available\ -this is a very long string only used to fill memory so I know when the memory is full and I can remove some of this string to make more memory available\ -this is a very long string only used to fill memory so I know when the memory is full and I can remove some of this string to make more memory available\ -this is a very long string only used to fill memory so I know when the memory is full and I can remove some of this string to make more memory available\ -this is a very long string only used to fill memory so I know when the memory is full and I can remove some of this string to make more memory available\ -this is a very long string only used to fill memory so I know when the memory is full and I can remove some of this string to make more memory available\ -this is a very long string only used to fill memory so I know when the memory is full and I can remove some of this string to make more memory available" -; -#endif - void update_min_max_freq(void) { switch(setting.mode) { @@ -1065,6 +1050,8 @@ void calculate_correction(void) scaled_correction_multi[i] = (int32_t) ( m / d ); } } +#pragma GCC push_options +#pragma GCC optimize ("Og") // "Os" causes problem pureRSSI_t get_frequency_correction(uint32_t f) // Frequency dependent RSSI correction to compensate for imperfect LPF { @@ -1088,6 +1075,8 @@ pureRSSI_t get_frequency_correction(uint32_t f) // Frequency dependent RSSI #endif return(cv); } +#pragma GCC pop_options + float peakLevel; @@ -1593,7 +1582,6 @@ static void calculate_static_correction(void) // Calculate the - setting.offset); } - pureRSSI_t perform(bool break_on_operation, int i, uint32_t f, int tracking) // Measure the RSSI for one frequency, used from sweep and other measurement routines. Must do all HW setup { int modulation_delay = 0; @@ -3525,8 +3513,8 @@ quit: reset_settings(M_LOW); #endif } -#pragma GCC pop_options +#pragma GCC pop_options #if 0 // fixed point FFT