From 766e73365cd5f6d1c99f615e4d4f7a54615965f7 Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Thu, 17 Mar 2022 10:13:24 +0100 Subject: [PATCH] Noise BW tuned --- ili9341.c | 1 + main.c | 6 +- nanovna.h | 14 +++-- sa_core.c | 63 ++++++++++++++------- si4468.c | 20 +++---- ui_sa.c | 162 +++++++++++++++++++++++++++++------------------------- 6 files changed, 156 insertions(+), 110 deletions(-) diff --git a/ili9341.c b/ili9341.c index 2887dec..ec8539a 100644 --- a/ili9341.c +++ b/ili9341.c @@ -825,6 +825,7 @@ void ili9341_drawstring_7x13(const char *str, int x, int y) while (*str) { uint8_t ch = *str++; if (ch == '\n') {x = x_pos; y+=bFONT_STR_HEIGHT; continue;} + if (ch == '\b') {ili9341_set_foreground(LCD_BRIGHT_COLOR_BLUE); continue;}; const uint8_t *char_buf = bFONT_GET_DATA(ch); uint16_t w = bFONT_GET_WIDTH(ch); ili9341_blitBitmap(x, y, w, bFONT_GET_HEIGHT, char_buf); diff --git a/main.c b/main.c index cb67b48..c58058e 100644 --- a/main.c +++ b/main.c @@ -907,7 +907,7 @@ config_t config = { .vbat_offset = 220, .frequency_IF1 = DEFAULT_IF, .frequency_IF2 = 0, - .ultra_threshold = 750000000, + .ultra_threshold = 800000000, .low_level_offset = 100.0, // Uncalibrated .high_level_offset = 100, // Uncalibrated .lna_level_offset = 100, @@ -940,8 +940,8 @@ config_t config = { .sweep_voltage = 3.3, .switch_offset = 0.0, #ifdef TINYSA4 - .direct_start = 9650000000UL, - .direct_stop = 9850000000UL, + .direct_start = 965000000UL, + .direct_stop = 985000000UL, #endif }; diff --git a/nanovna.h b/nanovna.h index c85baea..0472ba1 100644 --- a/nanovna.h +++ b/nanovna.h @@ -18,7 +18,7 @@ */ #include "ch.h" -//#ifdef TINYSA_F303 +#ifdef TINYSA_F303 #ifdef TINYSA_F072 #error "Remove comment for #ifdef TINYSA_F303" #endif @@ -26,7 +26,7 @@ #define TINYSA4 #endif #define TINYSA4_PROTO -//#endif +#endif #ifdef TINYSA_F072 #ifdef TINYSA_F303 @@ -123,7 +123,8 @@ #define DEFAULT_IF ((freq_t)977400000) #define DEFAULT_SPUR_OFFSET ((freq_t)(actual_rbw_x10 > 3000 ? 1500000 : 1000000)) #define STATIC_DEFAULT_SPUR_OFFSET ((freq_t) 1500000) -#define DEFAULT_MAX_FREQ ((freq_t)800000000) +#define DEFAULT_MAX_FREQ ((freq_t) 800000000) +#define MAX_LOW_OUTPUT_FREQ ((freq_t)1100000000) #define HIGH_MIN_FREQ_MHZ 136// 825 #define HIGH_MAX_FREQ_MHZ 1130 #define ULTRA_MAX_FREQ 5350000000ULL @@ -413,6 +414,7 @@ void set_30mhz(freq_t); void set_IF2(int f); void set_R(int f); extern void set_modulo(uint32_t f); +extern uint32_t local_modulo; extern void fill_spur_table(void); extern float low_out_offset(void); extern float high_out_offset(void); @@ -773,7 +775,11 @@ typedef struct { } marker_t; #ifdef __LIMITS__ +#ifdef TINYSA4 +#define LIMITS_MAX 8 +#else #define LIMITS_MAX 6 +#endif #define REFERENCE_MAX TRACES_MAX typedef struct { uint8_t enabled; @@ -1254,7 +1260,7 @@ typedef struct properties { //sizeof(properties_t) == 0x1200 -#define CONFIG_MAGIC 0x434f4e54 /* 'CONF' */ +#define CONFIG_MAGIC 0x434f4e55 /* 'CONF' */ extern int16_t lastsaveid; //extern properties_t *active_props; diff --git a/sa_core.c b/sa_core.c index 0b7726e..96ccf80 100644 --- a/sa_core.c +++ b/sa_core.c @@ -180,7 +180,7 @@ void update_min_max_freq(void) case M_GENLOW: minFreq = 0; #ifdef TINYSA4 - maxFreq = DEFAULT_MAX_FREQ; + maxFreq = MAX_LOW_OUTPUT_FREQ; #else maxFreq = DEFAULT_MAX_FREQ; #endif @@ -741,6 +741,7 @@ void set_IF(int f) setting.frequency_IF = config.frequency_IF1 + STATIC_DEFAULT_SPUR_OFFSET/2; #endif } else { + setting.auto_IF = false; setting.frequency_IF = f; } dirty = true; @@ -854,7 +855,7 @@ float high_out_offset() } #endif -static pureRSSI_t get_signal_path_loss(void){ +static pureRSSI_t get_signal_path_loss(void){ // loss as positive number #ifdef TINYSA4 if (setting.mode == M_LOW) return float_TO_PURE_RSSI(+9.3); // Loss in dB, -9.5 for v0.1, -12.5 for v0.2 @@ -1624,7 +1625,7 @@ static const struct { { 8500, 150, 50, 400, -90, 0.7}, { 6000, 150, 50, 300, -95, 0.8}, { 3000, 150, 50, 200, -95, 1.3}, - { 1000, 260, 100, 100, -105, 0.3}, + { 1000, 350, 100, 100, -105, 0.3}, { 300, 420, 120, 100, -110, 0.7}, { 100, 1280, 120, 100, -115, 0.5}, { 30, 1600, 300, 100, -120, 0.7}, @@ -2752,8 +2753,8 @@ static void calculate_static_correction(void) // Calculate the #ifdef TINYSA4 - (S_STATE(setting.agc)? 0 : 33) - (S_STATE(setting.lna)? 12 : 0) - + (setting.extra_lna ? -23.5 : 0) // TODO <------------------------- set correct value - + (Si446x_get_temp() - 35.0) / 13.0 // About 7.7dB per 10 degrees C + + (setting.extra_lna ? -26.5 : 0) // checked + + (setting.mode == M_GENLOW ? (Si446x_get_temp() - 35.0) / 13.0 : 0) // About 7.7dB per 10 degrees C #endif - setting.external_gain); } @@ -2815,7 +2816,7 @@ pureRSSI_t perform(bool break_on_operation, int i, freq_t f, int tracking) / int modulation_count_iter = 0; int spur_second_pass = false; #ifdef __NEW_SWITCHES__ - int direct = (setting.mode == M_LOW && config.direct && f > DIRECT_START && f DIRECT_START && f config.ultra_threshold) ); #else const int direct = false; #endif @@ -2868,7 +2869,7 @@ pureRSSI_t perform(bool break_on_operation, int i, freq_t f, int tracking) / #endif correct_RSSI_freq = get_frequency_correction(f); // for i == 0 and freq_step == 0; #ifdef TINYSA4 - correct_RSSI_freq += float_TO_PURE_RSSI(direct ? -6.0 : 0); // TODO add impact of direct +// correct_RSSI_freq += float_TO_PURE_RSSI(direct ? +6.0 : 0); // TODO add impact of direct #endif } else { @@ -3128,7 +3129,7 @@ pureRSSI_t perform(bool break_on_operation, int i, freq_t f, int tracking) / if (setting.frequency_step != 0) { correct_RSSI_freq = get_frequency_correction(f); #ifdef TINYSA4 - correct_RSSI_freq += float_TO_PURE_RSSI(direct ? -6.0 : 0); // TODO add impact of direct +// correct_RSSI_freq += float_TO_PURE_RSSI(direct ? -6.0 : 0); // TODO add impact of direct #endif } } @@ -3207,7 +3208,7 @@ modulation_again: } #ifdef __ULTRA__ // -------------- set ultra or direct --------------------------------- - if (setting.mode == M_LOW) { + if (setting.mode == M_LOW || setting.mode == M_GENLOW) { #ifdef __NEW_SWITCHES__ if (direct) { enable_ultra(true); @@ -5156,7 +5157,7 @@ enum { enum { TP_SILENT, TPH_SILENT, TP_10MHZ, TP_10MHZEXTRA, TP_30MHZ_SWITCH, TP_30MHZ, TPH_30MHZ, TPH_30MHZ_SWITCH, #ifdef TINYSA4 - TP_30MHZ_ULTRA, TP_30MHZ_LNA, + TP_30MHZ_ULTRA, TP_30MHZ_DIRECT, TP_30MHZ_LNA, #endif }; @@ -5167,7 +5168,7 @@ enum { #ifdef TINYSA4 //#define CAL_LEVEL -23.5 //#define CAL_LEVEL -24.2 -#define CAL_LEVEL -35.0 +#define CAL_LEVEL -35.50 #else #define CAL_LEVEL (has_esd ? -26.2 : -25) #endif @@ -5190,12 +5191,12 @@ const test_case_t test_case [] = #ifdef TINYSA4 {// Condition Preparation Center Span Pass Width(%)Stop TEST_CASE_STRUCT(TC_BELOW, TP_SILENT, 0.06, 0.11, -30, 0, -30), // 1 Zero Hz leakage - TEST_CASE_STRUCT(TC_BELOW, TP_SILENT, 0.1, 0.1, -55, 0, 0), // 2 Phase noise of zero Hz + TEST_CASE_STRUCT(TC_BELOW, TP_SILENT, 0.1, 0.1, -50, 0, 0), // 2 Phase noise of zero Hz TEST_CASE_STRUCT(TC_SIGNAL, TP_30MHZ, 30, 1, CAL_LEVEL, 10, -85), // 3 TEST_CASE_STRUCT(TC_SIGNAL, TP_30MHZ_ULTRA, 30, 1, CAL_LEVEL, 10, -85), // 4 Test Ultra mode #define TEST_SILENCE 4 TEST_CASE_STRUCT(TC_BELOW, TP_SILENT, 200, 100, -70, 0, 0), // 5 Wide band noise floor low mode - TEST_CASE_STRUCT(TC_BELOW, TPH_SILENT, 633, 994, -85, 0, 0), // 6 Wide band noise floor high mode + TEST_CASE_STRUCT(TC_ABOVE, TP_30MHZ_DIRECT,990, 10, -85, 0, -85), // 6 Wide band noise floor high mode TEST_CASE_STRUCT(TC_SIGNAL, TP_10MHZEXTRA, 30, 14, CAL_LEVEL, 27, -45), // 7 BPF loss and stop band TEST_CASE_STRUCT(TC_FLAT, TP_10MHZEXTRA, 30, 14, -18, 9, -60), // 8 BPF pass band flatness TEST_CASE_STRUCT(TC_BELOW, TP_30MHZ, 880, 1, -100, 0, -100), // 9 LPF cutoff @@ -5412,6 +5413,13 @@ int validate_flatness(int i) { const float atten_step[7] = { 0.0, 0.5, 1.0, 2.0, 4.0, 8.0, 16.0 }; +#ifdef TINYSA4 +bool saved_direct; +freq_t saved_direct_start; +freq_t saved_direct_stop; +#endif + + int test_validate(int i); int validate_atten(int i) { @@ -5451,17 +5459,17 @@ int validate_display(int tc) } int validate_above(int tc) { - int status = TS_PASS; + int status = TS_FAIL; for (int j = 0; j < setting._sweep_points; j++) { - if (actual_t[j] < stored_t[j] + 5) - status = TS_CRITICAL; - else if (actual_t[j] < stored_t[j]) { - status = TS_FAIL; + if (actual_t[j] > stored_t[j]+5) { + status = TS_PASS; break; + } else if (actual_t[j] > stored_t[j]) { + status = TS_CRITICAL; } } if (status != TS_PASS) - test_fail_cause[tc] = "Below "; + test_fail_cause[tc] = "Above "; return(status); } @@ -5482,6 +5490,13 @@ int validate_level(int i) { int test_validate(int i) { // draw_all(TRUE); +#ifdef TINYSA4 + if (saved_direct_start && test_case[i].setup ==TP_30MHZ_ULTRA) { + config.direct = saved_direct; + config.direct_start = saved_direct_start; + config.direct_stop = saved_direct_stop; + } +#endif int current_test_status = TS_PASS; switch (test_case[i].kind) { case TC_SET: @@ -5624,6 +5639,7 @@ common_silent: stored_t[j] = test_case[i].pass; break; #ifdef TINYSA4 + case TP_30MHZ_DIRECT: case TP_30MHZ_ULTRA: case TP_30MHZ_LNA: #endif @@ -5654,6 +5670,15 @@ common_silent: case TP_30MHZ_ULTRA: ultra_threshold = 0; break; + case TP_30MHZ_DIRECT: + ultra_threshold = 800000000; + saved_direct = config.direct; + config.direct = true; + saved_direct_start = config.direct_start; + config.direct_start = 965000000; + saved_direct_stop = config.direct_stop; + config.direct_stop = 1000000000; + break; case TP_30MHZ_LNA: setting.extra_lna = true; break; diff --git a/si4468.c b/si4468.c index 4782aa0..0d128cd 100644 --- a/si4468.c +++ b/si4468.c @@ -626,7 +626,7 @@ static int SI4463_band = -1; //static float SI4463_step_size = 100; // Will be recalculated once used static uint8_t SI4463_channel = 0; static uint8_t SI4463_in_tx_mode = false; -int SI4463_R = 5; +//int SI4463_R = 5; static int SI4463_output_level = 0x20; static si446x_state_t SI4463_get_state(void); @@ -1609,15 +1609,15 @@ static const RBW_t RBW_choices[] = {SI4463_RBW_600kHz, -10,6000, 8}, {SI4463_RBW_850kHz, -9,8500, 8}, #else - {SI4463_RBW_02kHz, 15,3, 26}, - {SI4463_RBW_1kHz, 15,10, 11}, - {SI4463_RBW_3kHz, 10,30, 11}, - {SI4463_RBW_10kHz, 10,100, 10}, - {SI4463_RBW_30kHz, 10,300, 10}, - {SI4463_RBW_100kHz, -2,1000, 21}, - {SI4463_RBW_300kHz, 10,3000, 13}, - {SI4463_RBW_600kHz, 25, 6000, 8}, - {SI4463_RBW_850kHz, 20,8500, 18}, + {SI4463_RBW_02kHz, 18,3, 20}, + {SI4463_RBW_1kHz, 13,10, 15}, + {SI4463_RBW_3kHz, 8,30, 10}, + {SI4463_RBW_10kHz, 3,100, 10}, + {SI4463_RBW_30kHz, 3,300, 15}, + {SI4463_RBW_100kHz, -2,1000, 15}, // OK + {SI4463_RBW_300kHz, -2,3000, 10}, + {SI4463_RBW_600kHz, -2, 6000, 20}, + {SI4463_RBW_850kHz, 8,8500, 18}, #endif }; diff --git a/ui_sa.c b/ui_sa.c index 76ec5c7..dc0643a 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -422,7 +422,7 @@ enum { #endif KM_ATTACK, #ifdef __ULTRA__ - KM_LPF, + KM_ULTRA_START, #endif #ifdef TINYSA4 KM_EXP_AVER, @@ -490,7 +490,7 @@ static const struct { #endif [KM_ATTACK] = {keypads_positive , "ATTACK"}, // KM_ATTACK #ifdef __ULTRA__ -[KM_LPF] = {keypads_freq , "ULTRA\nSTART"}, // KM_LPF +[KM_ULTRA_START] = {keypads_freq , "ULTRA\nSTART"}, // KM_ULTRA_START #endif #ifdef TINYSA4 [KM_EXP_AVER] = {keypads_positive , "EXPONENTIAL\nAVERAGING"}, //KM_EXP_AVER @@ -1335,7 +1335,10 @@ static UI_FUNCTION_ADV_CALLBACK(menu_measure_acb) ui_mode_keypad(KM_CENTER); freq_t right = uistat.value; set_sweep_frequency(ST_CENTER, (left+right)/2); - set_sweep_frequency(ST_SPAN, (right - left)*5); + freq_t local_span = (right - left)*10; + if (local_span < 30000) + local_span = 30000; + set_sweep_frequency(ST_SPAN, local_span); set_average(0,AV_4); // set_measurement(M_OIP3); break; @@ -1951,13 +1954,13 @@ static UI_FUNCTION_CALLBACK(menu_limit_disable_cb) #ifdef TINYSA4 static const uint16_t rbwsel_x10[]={0,3,10,30,100,300,1000,3000,6000,8500}; -static const char* rbwsel_text[]={"auto","300","1k","3k","10k","30k","100k","300k","600k","850k"}; +static const char* rbwsel_text[]={"AUTO","300","1k","3k","10k","30k","100k","300k","600k","850k"}; #else static const uint16_t rbwsel_x10[]={0,30,100,300,1000,3000,6000}; #endif #ifdef __VBW__ static const uint16_t vbwsel_x100[]={0,100,30,10,3,1}; -//static const char* vbwsel_text[]={"auto","0.01","0.03", "0.1", "0.3"," "}; +//static const char* vbwsel_text[]={"AUTO","0.01","0.03", "0.1", "0.3"," "}; #endif static UI_FUNCTION_ADV_CALLBACK(menu_rbw_acb) @@ -2088,14 +2091,7 @@ static UI_FUNCTION_ADV_CALLBACK(menu_settings_agc_acb){ (void)item; (void)data; if(b){ -#if 0 - if (S_IS_AUTO(setting.agc)) - b->icon = BUTTON_ICON_CHECK_AUTO; - else - b->icon = setting.agc ? BUTTON_ICON_CHECK : BUTTON_ICON_NOCHECK; -#else b->icon = AUTO_ICON(setting.agc); -#endif return; } toggle_AGC(); @@ -2494,7 +2490,7 @@ static const menuitem_t menu_reffer[] = { static const menuitem_t menu_atten[] = { { MT_ADV_CALLBACK | MT_LOW, 0, "AUTO", menu_atten_acb}, - { MT_KEYPAD | MT_LOW, KM_ATTENUATION, "MANUAL", "0 - 30dB"}, + { MT_KEYPAD | MT_LOW, KM_ATTENUATION, "MANUAL\n\b%s", "0 - 30dB"}, { MT_ADV_CALLBACK | MT_HIGH,0, "0dB", menu_atten_high_acb}, { MT_ADV_CALLBACK | MT_HIGH,30, "22.5 - 40dB", menu_atten_high_acb}, { MT_FORM | MT_NONE, 0, NULL, menu_back} // next-> menu_back @@ -2502,7 +2498,7 @@ static const menuitem_t menu_atten[] = { static const menuitem_t menu_reflevel[] = { { MT_ADV_CALLBACK,0, "AUTO", menu_reflevel_acb}, - { MT_KEYPAD, KM_REFLEVEL, "MANUAL", NULL}, + { MT_KEYPAD, KM_REFLEVEL, "MANUAL\n\b%s", NULL}, { MT_CANCEL, 0, S_LARROW" BACK", NULL }, { MT_NONE, 0, NULL, NULL } // sentinel }; @@ -2533,8 +2529,8 @@ const menuitem_t menu_marker_modify[] = { #ifdef __LIMITS__ static const menuitem_t menu_limit_modify[] = { - { MT_KEYPAD, KM_LIMIT_FREQ, "FREQUENCY", "Frequency"}, - { MT_KEYPAD, KM_LIMIT_LEVEL, "LEVEL", "Level"}, + { MT_KEYPAD, KM_LIMIT_FREQ, "FREQUENCY\n\b%s", "Frequency"}, + { MT_KEYPAD, KM_LIMIT_LEVEL, "LEVEL\n\b%s", "Level"}, { MT_CALLBACK, 0, "DISABLE", menu_limit_disable_cb}, { MT_NONE, 0, NULL, menu_back} // next-> menu_back }; @@ -2613,8 +2609,8 @@ static const menuitem_t menu_scanning_speed[] = // { MT_ADV_CALLBACK, SD_PRECISE, PRECISE", menu_scanning_speed_acb}, // { MT_ADV_CALLBACK | MT_LOW,SD_FAST, "FAST", menu_scanning_speed_acb}, // { MT_KEYPAD | MT_LOW,KM_FAST_SPEEDUP, "FAST\nSPEEDUP", "2..20"}, - { MT_KEYPAD, KM_SAMPLETIME, "SAMPLE\nDELAY", "250..10000, 0=auto"}, // This must be item 4 to match highlighting - { MT_KEYPAD, KM_OFFSET_DELAY, "OFFSET\nDELAY", "250..10000, 0=auto"}, // This must be item 5 to match highlighting + { MT_KEYPAD, KM_SAMPLETIME, "SDELAY\n\b%s", "250..10000, 0=auto"}, // This must be item 4 to match highlighting + { MT_KEYPAD, KM_OFFSET_DELAY, "ODELAY\n\b%s", "250..10000, 0=auto"}, // This must be item 5 to match highlighting { MT_NONE, 0, NULL, menu_back} // next-> menu_back }; @@ -2646,9 +2642,9 @@ static const menuitem_t menu_sweep_speed[] = { MT_ADV_CALLBACK | MT_LOW,SD_FAST, "FAST", menu_scanning_speed_acb}, #endif #ifdef TINYSA4 - { MT_KEYPAD, KM_FAST_SPEEDUP,"FAST\nSPEEDUP", "2..20, 0=disable"}, + { MT_KEYPAD, KM_FAST_SPEEDUP,"SPEEDUP\n\b%s", "2..20, 0=disable"}, #else - { MT_KEYPAD | MT_LOW,KM_FAST_SPEEDUP,"FAST\nSPEEDUP", "2..20, 0=disable"}, + { MT_KEYPAD | MT_LOW,KM_FAST_SPEEDUP,"PEEDUP\n\b%s", "2..20, 0=disable"}, #endif { MT_NONE, 0, NULL, menu_back} // next-> menu_back }; @@ -2663,12 +2659,12 @@ static const menuitem_t menu_settings3[] = // { MT_KEYPAD, KM_GRIDLINES, "MINIMUM\nGRIDLINES", "Enter minimum horizontal grid divisions"}, { MT_ADV_CALLBACK, 0, "ADF OUT", menu_adf_out_acb}, { MT_ADV_CALLBACK, 0, "ENABLE\nULTRA", menu_ultra_acb}, - { MT_KEYPAD, KM_LPF, "ULTRA\nSTART", "Enter ULTRA mode start freq"}, + { MT_KEYPAD, KM_ULTRA_START,"ULTRASTART\n\b%s", "Enter ULTRA mode start freq"}, { MT_ADV_CALLBACK, 0, "ENABLE\nDIRECT", menu_direct_acb}, // { MT_KEYPAD | MT_LOW, KM_IF2, "IF2 FREQ", "Set to zero for no IF2"}, - { MT_KEYPAD, KM_R, "R", "Set R"}, - { MT_KEYPAD, KM_MOD, "MODULO", "Set MODULO"}, - { MT_KEYPAD, KM_CP, "CP", "Set CP"}, + { MT_KEYPAD, KM_R, "R\n\b%s", "Set R"}, + { MT_KEYPAD, KM_MOD, "MODULO\n\b%s", "Set MODULO"}, + { MT_KEYPAD, KM_CP, "CP", "Set CP"}, #ifdef __WAIT_CTS_WHILE_SLEEPING__ { MT_ADV_CALLBACK, 0, "SLEEP\nWAIT", menu_sleep_acb}, #endif @@ -2680,7 +2676,7 @@ static const menuitem_t menu_settings3[] = #else #ifdef __ULTRA__ { MT_ADV_CALLBACK, 0, "ENABLE\nULTRA", menu_ultra_acb}, - { MT_KEYPAD, KM_LPF, "ULTRA\nSTART", "Enter ULTRA mode start freq"}, + { MT_KEYPAD, KM_ULTRA_START, "ULTRA\nSTART", "Enter ULTRA mode start freq"}, { MT_ADV_CALLBACK, 0, "DEBUG\nSPUR", menu_debug_spur_acb}, #endif { MT_KEYPAD, KM_10MHZ, "CORRECT\nFREQUENCY", "Enter actual l0MHz frequency"}, @@ -2711,7 +2707,7 @@ static const menuitem_t menu_settings4[] = { MT_KEYPAD, KM_COR_NFM, "COR\nNFM", "Enter NFM modulation correction"}, #endif #ifdef __NOISE_FIGURE__ - { MT_KEYPAD, KM_NF, "NOISE\nFIGURE", "Enter tinySA noise figure"}, + { MT_KEYPAD, KM_NF, "NF\n\b%s", "Enter tinySA noise figure"}, #endif #ifdef __SD_CARD_LOAD__ { MT_CALLBACK, 0 , "LOAD\nCONFIG.INI", menu_load_config_cb}, @@ -2723,8 +2719,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_KEYPAD, KM_DIRECT_START, "DSTART\n\b%s", ""}, + { MT_KEYPAD, KM_DIRECT_STOP, "DSTOP\n\b%s", ""}, { MT_NONE, 0, NULL, menu_back} // next-> menu_back }; #endif @@ -2735,13 +2731,13 @@ static const menuitem_t menu_settings2[] = { MT_ADV_CALLBACK, 0, "LNA", menu_settings_lna_acb}, { MT_ADV_CALLBACK | MT_LOW, 0, "BPF", menu_settings_bpf_acb}, { MT_ADV_CALLBACK | MT_LOW, 0, "BELOW IF", menu_settings_below_if_acb}, - { MT_KEYPAD, KM_DECAY, "DECAY", "0..1000000ms or sweeps"}, + { MT_KEYPAD, KM_DECAY, "DECAY\n\b%s", "0..1000000ms or sweeps"}, #ifdef __QUASI_PEAK__ - { MT_KEYPAD, KM_ATTACK, "ATTACK", "0..100000ms"}, + { MT_KEYPAD, KM_ATTACK, "ATTACK\n\b%s", "0..100000ms"}, #endif #ifdef TINYSA4 - { MT_KEYPAD, KM_NOISE, "NOISE\nLEVEL", "2..20 dB"}, - { MT_KEYPAD, KM_30MHZ, "ACTUAL\n30MHz*100", "Enter actual 30MHz * 100"}, + { MT_KEYPAD, KM_NOISE, "NOISE LEV\n\b%s", "2..20 dB"}, + { MT_KEYPAD, KM_30MHZ, "30MHz*100\n\b%s", "Enter actual 30MHz * 100"}, #endif { MT_SUBMENU, 0, S_RARROW" MORE", menu_settings3}, { MT_NONE, 0, NULL, menu_back} // next-> menu_back @@ -2796,10 +2792,10 @@ static const menuitem_t menu_settings[] = { { MT_SUBMENU, 0, "LEVEL\nCORRECTION", menu_actual_power}, { MT_ADV_CALLBACK | MT_LOW, 0,"LO OUTPUT", menu_lo_output_acb}, - { MT_KEYPAD | MT_LOW, KM_IF, "IF FREQ", "0=auto IF"}, + { MT_KEYPAD | MT_LOW, KM_IF, "IF FREQ\n\b%s", "0=auto IF"}, { MT_SUBMENU,0, "SCAN\nSPEED", menu_scanning_speed}, #ifndef TINYSA4 - { MT_KEYPAD, KM_REPEAT, "SAMPLE\nREPEAT", "1..100"}, + { MT_KEYPAD, KM_REPEAT, "SAMPLE REP\n\b%s", "1..100"}, #endif #ifdef TINYSA4 { MT_SUBMENU | MT_LOW,0, "MIXER\nDRIVE", menu_mixer_drive}, @@ -2896,7 +2892,7 @@ static const menuitem_t menu_config[] = { { MT_ADV_CALLBACK,0, "%s", menu_spur_acb}, #endif #ifdef TINYSA4 - { MT_KEYPAD, KM_REPEAT, "SAMPLE\nREPEAT", "1..100"}, + { MT_KEYPAD, KM_REPEAT, "SAMPLE REP\n\b%s", "1..100"}, #endif #ifdef __LCD_BRIGHTNESS__ { MT_CALLBACK, 0, "BRIGHTNESS", menu_brightness_cb}, @@ -2998,7 +2994,7 @@ static const menuitem_t menu_trigger[] = { { MT_ADV_CALLBACK, T_NORMAL, "NORMAL", menu_trigger_acb}, { MT_ADV_CALLBACK, T_SINGLE, "SINGLE", menu_trigger_acb}, // { MT_ADV_CALLBACK, T_DONE, "READY", menu_trigger_acb}, - { MT_KEYPAD, KM_TRIGGER, "TRIGGER\nLEVEL", NULL}, + { MT_KEYPAD, KM_TRIGGER, "TRIGGER LEV\n\b%s", NULL}, { MT_ADV_CALLBACK, T_UP, "UP\nEDGE", menu_trigger_acb}, { MT_ADV_CALLBACK, T_DOWN, "DOWN\nEDGE", menu_trigger_acb}, { MT_ADV_CALLBACK, T_MODE, "%s\nTRIGGER", menu_trigger_acb}, @@ -3012,7 +3008,7 @@ static const menuitem_t menu_level[] = { { MT_SUBMENU, 0, "ATTENUATE", menu_atten}, // { MT_SUBMENU,0, "CALC", menu_average}, { MT_SUBMENU, 0, "UNIT", menu_unit}, - { MT_KEYPAD, KM_EXT_GAIN, "EXTERNAL\nGAIN",NULL}, + { MT_KEYPAD, KM_EXT_GAIN, "EXT GAIN\n\b%s",NULL}, #ifdef TINYSA4 { MT_ADV_CALLBACK | MT_LOW ,0,"LNA", menu_extra_lna_acb}, #endif @@ -3024,12 +3020,12 @@ static const menuitem_t menu_level[] = { }; static const menuitem_t menu_stimulus[] = { - { MT_KEYPAD, KM_START, "START", NULL}, - { MT_KEYPAD, KM_STOP, "STOP", NULL}, - { MT_KEYPAD, KM_CENTER, "CENTER", NULL}, - { MT_KEYPAD, KM_SPAN, "SPAN", NULL}, + { MT_KEYPAD, KM_START, "START\n\b%s", NULL}, + { MT_KEYPAD, KM_STOP, "STOP\n\b%s", NULL}, + { MT_KEYPAD, KM_CENTER, "CENTER\n\b%s", NULL}, + { MT_KEYPAD, KM_SPAN, "SPAN\n\b%s", NULL}, { MT_KEYPAD, KM_CW, "ZERO SPAN", NULL}, - { MT_KEYPAD, KM_VAR, "JOG STEP\n%s","0 - AUTO"}, + { MT_KEYPAD, KM_VAR, "JOG STEP\n\b%s","0 = AUTO"}, { MT_SUBMENU,0, "RBW", menu_rbw}, { MT_ADV_CALLBACK,0, "SHIFT\nFREQ", menu_shift_acb}, { MT_NONE, 0, NULL, menu_back} // next-> menu_back @@ -3070,13 +3066,13 @@ static void menu_item_modify_attribute( // To modify menu bu const menuitem_t *menu, int item, ui_button_t *button) { if (menu == menu_settings) { - if (item == 2) - button->icon = setting.auto_IF ? BUTTON_ICON_CHECK_AUTO : BUTTON_ICON_CHECK_MANUAL; +// if (item == 2) +// button->icon = setting.auto_IF ? BUTTON_ICON_CHECK_AUTO : BUTTON_ICON_CHECK_MANUAL; } else if (menu == menu_scanning_speed) { - if (item == 0) - button->icon = setting.step_delay > 0 ? BUTTON_ICON_CHECK_MANUAL : BUTTON_ICON_CHECK_AUTO; - else if (item == 1) - button->icon =setting.offset_delay > 0 ? BUTTON_ICON_CHECK_MANUAL : BUTTON_ICON_CHECK_AUTO; +// if (item == 0) +// button->icon = setting.step_delay > 0 ? BUTTON_ICON_CHECK_MANUAL : BUTTON_ICON_CHECK_AUTO; +// else if (item == 1) +// button->icon =setting.offset_delay > 0 ? BUTTON_ICON_CHECK_MANUAL : BUTTON_ICON_CHECK_AUTO; } else if (menu == menu_display) { if (item == 4) button->icon = setting.sweep_time_us != 0 ? BUTTON_ICON_CHECK_MANUAL : BUTTON_ICON_CHECK_AUTO; @@ -3097,23 +3093,23 @@ static void fetch_numeric_target(uint8_t mode) switch (mode) { case KM_START: uistat.freq_value = get_sweep_frequency(ST_START) + (setting.frequency_offset - FREQUENCY_SHIFT); - plot_printf(uistat.text, sizeof uistat.text, "%3.3fMHz", uistat.freq_value / 1000000.0); + plot_printf(uistat.text, sizeof uistat.text, "%.3QMHz", uistat.freq_value); break; case KM_STOP: uistat.freq_value = get_sweep_frequency(ST_STOP) + (setting.frequency_offset - FREQUENCY_SHIFT); - plot_printf(uistat.text, sizeof uistat.text, "%3.3fMHz", uistat.freq_value / 1000000.0); + plot_printf(uistat.text, sizeof uistat.text, "%.3QHz", uistat.freq_value); break; case KM_CENTER: uistat.freq_value = get_sweep_frequency(ST_CENTER) + (setting.frequency_offset - FREQUENCY_SHIFT); - plot_printf(uistat.text, sizeof uistat.text, "%QHz", uistat.freq_value); + plot_printf(uistat.text, sizeof uistat.text, "%.3QHz", uistat.freq_value); break; case KM_SPAN: uistat.freq_value = get_sweep_frequency(ST_SPAN); - plot_printf(uistat.text, sizeof uistat.text, "%3.3fMHz", uistat.freq_value / 1000000.0); + plot_printf(uistat.text, sizeof uistat.text, "%.3QHz", uistat.freq_value); break; case KM_CW: uistat.freq_value = get_sweep_frequency(ST_CW) + (setting.frequency_offset - FREQUENCY_SHIFT); - plot_printf(uistat.text, sizeof uistat.text, "%3.3fMHz", uistat.freq_value / 1000000.0); + plot_printf(uistat.text, sizeof uistat.text, "%.3QHz", uistat.freq_value); break; case KM_SCALE: case KM_LINEAR_SCALE: @@ -3134,29 +3130,44 @@ static void fetch_numeric_target(uint8_t mode) break; case KM_IF: uistat.freq_value = setting.frequency_IF; - plot_printf(uistat.text, sizeof uistat.text, "%3.3fMHz", uistat.freq_value / 1000000.0); + if (!setting.auto_IF) + plot_printf(uistat.text, sizeof uistat.text, "%.3QHz", uistat.freq_value); + else + plot_printf(uistat.text, sizeof uistat.text, "AUTO"); break; #ifdef TINYSA4 case KM_IF2: uistat.freq_value = config.frequency_IF2; - plot_printf(uistat.text, sizeof uistat.text, "%3.3fMHz", uistat.freq_value / 1000000.0); + plot_printf(uistat.text, sizeof uistat.text, "%.3QHz", uistat.freq_value); break; case KM_R: - uistat.value = SI4463_R; - plot_printf(uistat.text, sizeof uistat.text, "%3d", uistat.value); + uistat.value = setting.R; + if (setting.R) + plot_printf(uistat.text, sizeof uistat.text, "%d", setting.R); + else + plot_printf(uistat.text, sizeof uistat.text, "AUTO"); break; case KM_MOD: + if (local_modulo) + plot_printf(uistat.text, sizeof uistat.text, "%d", local_modulo); + else + plot_printf(uistat.text, sizeof uistat.text, "AUTO"); + break; + case KM_CP: uistat.value = ADF4350_modulo; - plot_printf(uistat.text, sizeof uistat.text, "%4d", uistat.value); + plot_printf(uistat.text, sizeof uistat.text, "%d", ADF4350_modulo); break; #endif case KM_SAMPLETIME: uistat.value = setting.step_delay; - plot_printf(uistat.text, sizeof uistat.text, "%3dus", ((int32_t)uistat.value)); + if (uistat.value) + plot_printf(uistat.text, sizeof uistat.text, "%dus", ((int32_t)uistat.value)); + else + plot_printf(uistat.text, sizeof uistat.text, "AUTO"); break; case KM_REPEAT: uistat.value = setting.repeat; - plot_printf(uistat.text, sizeof uistat.text, "%2d", ((int32_t)uistat.value)); + plot_printf(uistat.text, sizeof uistat.text, "%d", ((int32_t)uistat.value)); break; case KM_LOWOUTLEVEL: uistat.value = get_level(); // compensation for dB offset during low output mode @@ -3179,32 +3190,32 @@ static void fetch_numeric_target(uint8_t mode) break; case KM_DECAY: uistat.value = setting.decay; - plot_printf(uistat.text, sizeof uistat.text, "%5d", ((int32_t)uistat.value)); + plot_printf(uistat.text, sizeof uistat.text, "%d", ((int32_t)uistat.value)); break; #ifdef __QUASI_PEAK__ case KM_ATTACK: uistat.value = setting.attack; - plot_printf(uistat.text, sizeof uistat.text, "%5d", ((int32_t)uistat.value)); + plot_printf(uistat.text, sizeof uistat.text, "%d", ((int32_t)uistat.value)); break; #endif #ifdef __ULTRA__ - case KM_LPF: + case KM_ULTRA_START: uistat.freq_value = config.ultra_threshold; - plot_printf(uistat.text, sizeof uistat.text, "%3.6fMHz", uistat.freq_value / 1000000.0); + plot_printf(uistat.text, sizeof uistat.text, "%.3QHz", uistat.freq_value ); 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); + plot_printf(uistat.text, sizeof uistat.text, "%.3QHz", uistat.freq_value); 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); + plot_printf(uistat.text, sizeof uistat.text, "%.3QHz", uistat.freq_value); break; #endif #ifdef __LIMITS__ case KM_LIMIT_FREQ: uistat.freq_value = setting.limits[current_trace][active_limit].frequency; - plot_printf(uistat.text, sizeof uistat.text, "%3.6fMHz", uistat.freq_value / 1000000.0); + plot_printf(uistat.text, sizeof uistat.text, "%.3QHz", uistat.freq_value); break; case KM_LIMIT_LEVEL: uistat.value = value(setting.limits[current_trace][active_limit].level); @@ -3213,17 +3224,17 @@ static void fetch_numeric_target(uint8_t mode) #endif case KM_NOISE: uistat.value = setting.noise; - plot_printf(uistat.text, sizeof uistat.text, "%3d", ((int32_t)uistat.value)); + plot_printf(uistat.text, sizeof uistat.text, "%d", ((int32_t)uistat.value)); break; #ifdef TINYSA4 case KM_30MHZ: uistat.freq_value = config.setting_frequency_30mhz; - plot_printf(uistat.text, sizeof uistat.text, "%3.6fMHz", uistat.freq_value / 1000000.0); + plot_printf(uistat.text, sizeof uistat.text, "%.5QHz", uistat.freq_value); break; #else case KM_10MHZ: uistat.freq_value = config.setting_frequency_10mhz; - plot_printf(uistat.text, sizeof uistat.text, "%3.6fMHz", uistat.freq_value / 1000000.0); + plot_printf(uistat.text, sizeof uistat.text, "%3.6fMHz", uistat.freq_value); break; #endif case KM_EXT_GAIN: @@ -3249,7 +3260,7 @@ static void fetch_numeric_target(uint8_t mode) case KM_MARKER: if (active_marker >=0) { uistat.freq_value = markers[active_marker].frequency; - plot_printf(uistat.text, sizeof uistat.text, "%3.3fMHz", uistat.freq_value / 1000000.0); + plot_printf(uistat.text, sizeof uistat.text, "%.3QHz", uistat.freq_value); } break; case KM_MODULATION: @@ -3260,7 +3271,11 @@ static void fetch_numeric_target(uint8_t mode) break; case KM_VAR: uistat.freq_value = setting.frequency_var; - plot_printf(uistat.text, sizeof uistat.text, setting.frequency_var ? "%QHz" : " AUTO", setting.frequency_var); + if ( setting.frequency_var) + plot_printf(uistat.text, sizeof uistat.text, "%.4QHz", setting.frequency_var); + else + plot_printf(uistat.text, sizeof uistat.text, "AUTO"); + break; #ifdef __NOISE_FIGURE__ case KM_NF: @@ -3307,7 +3322,6 @@ set_numeric_value(void) config_save(); break; case KM_IF: - setting.auto_IF = false; set_IF(uistat.freq_value); // config_save(); break; @@ -3355,7 +3369,7 @@ set_numeric_value(void) break; #endif #ifdef __ULTRA__ - case KM_LPF: + case KM_ULTRA_START: config.ultra_threshold = uistat.value; config_save(); ultra_threshold = config.ultra_threshold;