diff --git a/main.c b/main.c index 3627d1e..a978549 100644 --- a/main.c +++ b/main.c @@ -103,6 +103,7 @@ const char *info_about[]={ }; bool dirty = true; +int32_t scan_after_dirty = 0; uint8_t completed = false; uint8_t enable_after_complete = 0; diff --git a/nanovna.h b/nanovna.h index bf351d2..d7f2db8 100644 --- a/nanovna.h +++ b/nanovna.h @@ -207,8 +207,9 @@ void toggle_pulse(void); void load_default_properties(void); enum { - AV_OFF, AV_MIN, AV_MAX_HOLD, AV_MAX_DECAY, AV_4, AV_16, AV_QUASI, AV_DECONV + AV_OFF, AV_MIN, AV_MAX_HOLD, AV_MAX_DECAY, AV_4, AV_16, AV_100, AV_QUASI, AV_DECONV }; + enum { M_LOW, M_HIGH, M_GENLOW, M_GENHIGH, M_ULTRA }; diff --git a/sa_core.c b/sa_core.c index a24d8bf..d7671bb 100644 --- a/sa_core.c +++ b/sa_core.c @@ -2636,6 +2636,7 @@ pureRSSI_t perform(bool break_on_operation, int i, freq_t f, int tracking) / old_a = -150; // clear cached level setting // Initialize HW scandirty = true; // This is the first pass with new settings + scan_after_dirty = 0; dirty = false; sweep_elapsed = chVTGetSystemTimeX(); // for measuring accumulated time // Set for actual time pre calculated value (update after sweep) @@ -2681,6 +2682,9 @@ pureRSSI_t perform(bool break_on_operation, int i, freq_t f, int tracking) / } } } + if (i == 0) + scan_after_dirty += 1; + // --------------------------------- Pulse at start of low output sweep -------------------------- @@ -4040,8 +4044,9 @@ static volatile int dummy; age[i] += 1; } break; - case AV_4: actual_t[i] = (actual_t[i]*3 + RSSI) / 4.0; break; - case AV_16: actual_t[i] = (actual_t[i]*15 + RSSI) / 16.0; break; + case AV_4: actual_t[i] = (actual_t[i]*3.0 + RSSI) / 4.0; break; + case AV_16: actual_t[i] = (actual_t[i]*15.0 + RSSI) / 16.0; break; + case AV_100:actual_t[i] = (actual_t[i]*(scan_after_dirty-1) + RSSI) / scan_after_dirty; break; #ifdef __QUASI_PEAK__ case AV_QUASI: { static float old_RSSI = -150.0; diff --git a/ui_sa.c b/ui_sa.c index 3d63c2c..b9c11b8 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -1146,10 +1146,7 @@ static UI_FUNCTION_CALLBACK(menu_clearconfig_cb) ui_mode_normal(); } - - - -const char * const averageText[] = { "OFF", "MIN", "MAX", "MAXD", " A 4", "A 16","QUASI", "DECONV"}; +const char * const averageText[] = { "OFF", "MIN", "MAX", "MAXD", " A 4", "A 16", "AVER", "QUASI", "DECONV"}; static UI_FUNCTION_ADV_CALLBACK(menu_measure_acb) { @@ -2118,14 +2115,17 @@ static const menuitem_t menu_highoutputmode[] = { }; static const menuitem_t menu_average[] = { - { MT_ADV_CALLBACK, 0, "OFF", menu_average_acb}, - { MT_ADV_CALLBACK, 1, "MIN\nHOLD", menu_average_acb}, - { MT_ADV_CALLBACK, 2, "MAX\nHOLD", menu_average_acb}, - { MT_ADV_CALLBACK, 3, "MAX\nDECAY", menu_average_acb}, - { MT_ADV_CALLBACK, 4, "AVER 4", menu_average_acb}, - { MT_ADV_CALLBACK, 5, "AVER 16", menu_average_acb}, + { MT_ADV_CALLBACK, AV_OFF, "OFF", menu_average_acb}, + { MT_ADV_CALLBACK, AV_MIN, "MIN\nHOLD", menu_average_acb}, + { MT_ADV_CALLBACK, AV_MAX_HOLD, "MAX\nHOLD", menu_average_acb}, + { MT_ADV_CALLBACK, AV_MAX_DECAY, "MAX\nDECAY", menu_average_acb}, + { MT_ADV_CALLBACK, AV_4, "AVER 4", menu_average_acb}, + { MT_ADV_CALLBACK, AV_16, "AVER 16", menu_average_acb}, +#ifdef TINYSA4 + { MT_ADV_CALLBACK, AV_100, "AVER", menu_average_acb}, +#endif #ifdef __QUASI_PEAK__ - { MT_ADV_CALLBACK, 6, "QUASI\nPEAK", menu_average_acb}, + { MT_ADV_CALLBACK, AV_QUASI, "QUASI\nPEAK", menu_average_acb}, #endif { MT_CANCEL, 0, S_LARROW" BACK", NULL }, { MT_NONE, 0, NULL, NULL } // sentinel