From 8d3c9d2c2dff957e096ea71ba40100ddb4a7e45f Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Tue, 14 Dec 2021 10:34:09 +0100 Subject: [PATCH] DIrect start/stop and more backup --- main.c | 32 ++++++++++++++++++++++++++++---- nanovna.h | 20 +++++++++++++++----- ui_sa.c | 26 ++++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 9 deletions(-) diff --git a/main.c b/main.c index f8d3f70..f8381eb 100644 --- a/main.c +++ b/main.c @@ -131,10 +131,19 @@ static THD_FUNCTION(Thread1, arg) while (1) { // START_PROFILE if (sweep_mode&(SWEEP_ENABLE|SWEEP_ONCE)) { -// if (dirty) + backup.frequency0 = setting.frequency0; backup.frequency1 = setting.frequency1; - completed = sweep(true); + if (setting.auto_attenuation) + backup.attenuation = 0; + else + backup.attenuation = setting.attenuate_x2+1; + if (setting.auto_reflevel || setting.unit != U_DBM) + backup.reflevel = 0; + else + backup.reflevel = setting.reflevel + 140; + + completed = sweep(true); sweep_mode&=~SWEEP_ONCE; } else if (sweep_mode & SWEEP_SELFTEST) { // call from lowest level to save stack space @@ -925,6 +934,10 @@ config_t config = { #endif .sweep_voltage = 3.3, .switch_offset = 0.0, +#ifdef TINYSA4 + .direct_start = 9650000000UL, + .direct_stop = 9850000000UL, +#endif }; //properties_t current_props; @@ -2454,13 +2467,24 @@ int main(void) if (caldata_recall(0) == -1) { load_LCD_properties(); } - + {backup_t b = backup; if (backup.frequency0 != 0 || backup.frequency1 != 0) { setting.frequency0 = backup.frequency0; setting.frequency1 = backup.frequency1; update_frequencies(); + if (backup.attenuation == 0) + set_auto_attenuation(); + else { + set_attenuation((backup.attenuation - 1)/2.0); + } + if (backup.reflevel == 0) + set_auto_reflevel(true); + else { + set_auto_reflevel(false); + user_set_reflevel(((float)backup.reflevel)-140.0); + } + } } - set_refer_output(-1); // ui_mode_menu(); // Show menu when autostarting mode ui_mode_normal(); diff --git a/nanovna.h b/nanovna.h index 6a4f79f..46a8e02 100644 --- a/nanovna.h +++ b/nanovna.h @@ -28,14 +28,14 @@ #define TINYSA4_PROTO #endif -//#ifdef TINYSA_F072 +#ifdef TINYSA_F072 #ifdef TINYSA_F303 #error "Remove comment for #ifdef TINYSA_F072" #endif #ifndef TINYSA3 #define TINYSA3 #endif -//#endif +#endif // Need enable HAL_USE_SPI in halconf.h #define __USE_DISPLAY_DMA__ @@ -129,8 +129,8 @@ //#define LOW_MAX_FREQ 800000000ULL #define MIN_BELOW_LO 550000000ULL #ifdef __NEW_SWITCHES__ -#define DIRECT_START 965000000ULL -#define DIRECT_STOP 985000000ULL +#define DIRECT_START config.direct_start +#define DIRECT_STOP config.direct_stop #endif #endif /* @@ -455,9 +455,17 @@ extern void tlv320aic3204_select(int channel); #endif +#pragma pack(push) +#pragma pack(1) + typedef struct { - freq_t frequency0, frequency1; + uint32_t frequency0, frequency1; + uint32_t attenuation; + int32_t reflevel; +// uint8_t RBW; +// uint8_t mode; } backup_t; +#pragma pack(pop) #define backup (*(backup_t *)0x40002850) // backup registers 5 * 32 bits @@ -696,6 +704,8 @@ typedef struct config { #endif #ifdef __ULTRA__ freq_t ultra_threshold; + freq_t direct_start; + freq_t direct_stop; int8_t ultra; #endif uint8_t _mode; diff --git a/ui_sa.c b/ui_sa.c index acebe66..599db94 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -438,6 +438,10 @@ enum { KM_NF, #endif KM_LINEAR_SCALE, +#ifdef TINYSA4 + KM_DIRECT_START, + KM_DIRECT_STOP, +#endif KM_NONE // always at enum end }; @@ -502,6 +506,10 @@ static const struct { [KM_NF] = {keypads_plusmin , "NOISE\nFIGURE"}, // noise figure of tinySA #endif [KM_LINEAR_SCALE] = {keypads_plusmin , "SCALE"}, // scale for linear units +#ifdef TINYSA4 +[KM_DIRECT_START] = {keypads_freq , "DIRECT\nSTART"}, // KM_DIRECT_START +[KM_DIRECT_STOP] = {keypads_freq , "DIRECT\nSTOP"}, // KM_DIRECT_STOP +#endif }; #if 0 // Not used @@ -2695,6 +2703,8 @@ static const menuitem_t menu_settings4[] = #endif { MT_ADV_CALLBACK, 0, "LINEAR\nAVERAGING", menu_linear_averaging_acb}, // { MT_SUBMENU, 0, S_RARROW" MORE", menu_settings3}, + { MT_KEYPAD, KM_DIRECT_START, "DIRECT\nSTART", ""}, + { MT_KEYPAD, KM_DIRECT_STOP, "DIRECT\nSTOP", ""}, { MT_NONE, 0, NULL, menu_back} // next-> menu_back }; #endif @@ -3159,6 +3169,14 @@ static void fetch_numeric_target(uint8_t mode) uistat.freq_value = config.ultra_threshold; plot_printf(uistat.text, sizeof uistat.text, "%3.6fMHz", uistat.freq_value / 1000000.0); break; + case KM_DIRECT_START: + uistat.freq_value = config.direct_start; + plot_printf(uistat.text, sizeof uistat.text, "%3.6fMHz", uistat.freq_value / 1000000.0); + break; + case KM_DIRECT_STOP: + uistat.freq_value = config.direct_stop; + plot_printf(uistat.text, sizeof uistat.text, "%3.6fMHz", uistat.freq_value / 1000000.0); + break; #endif #ifdef __LIMITS__ case KM_LIMIT_FREQ: @@ -3319,6 +3337,14 @@ set_numeric_value(void) config_save(); ultra_threshold = config.ultra_threshold; break; + case KM_DIRECT_START: + config.direct_start = uistat.value; + config_save(); + break; + case KM_DIRECT_STOP: + config.direct_stop = uistat.value; + config_save(); + break; #endif #ifdef TINYSA4 case KM_EXP_AVER: