diff --git a/nanovna.h b/nanovna.h index ea16598..84be038 100644 --- a/nanovna.h +++ b/nanovna.h @@ -89,6 +89,7 @@ #endif #ifdef TINYSA4 #define __GUARD__ +#define __BEEP__ #define __MCU_CLOCK_SHIFT__ #define __ULTRA__ #define __USE_RTC__ // Enable RTC clock @@ -1195,6 +1196,9 @@ typedef struct setting uint8_t trigger; // enum uint8_t trigger_mode; // enum uint8_t trigger_direction; // enum +#ifdef __BEEP__ + uint8_t trigger_beep; +#endif uint8_t step_delay_mode; // enum uint8_t waterfall; // enum #ifdef __LEVEL_METER__ @@ -1767,7 +1771,7 @@ enum { #define MEASUREMENT_TEXT "OFF","IMD","OIP3","PN","SNR","PASS","LIN","AM","FM","THD","CP","NF T","NF S","NF V","NF A","GUARD","DECONF" enum { - T_AUTO, T_NORMAL, T_SINGLE, T_DONE, T_UP, T_DOWN, T_MODE, T_PRE, T_POST, T_MID + T_AUTO, T_NORMAL, T_SINGLE, T_DONE, T_UP, T_DOWN, T_MODE, T_PRE, T_POST, T_MID, T_BEEP, }; //!!! Warning can show not correct results on CH_CFG_ST_FREQUENCY not round by 1000 or > 1000000UL diff --git a/sa_core.c b/sa_core.c index 7d3eee2..c773c9d 100644 --- a/sa_core.c +++ b/sa_core.c @@ -4906,7 +4906,13 @@ static bool sweep(bool break_on_operation) set_audio_mode(A_DAC); } #endif - +#ifdef __BEEP__ + if (setting.trigger_beep && setting.trigger != T_AUTO) { + set_audio_mode(A_PWM); pwm_stop(); + } + else + set_audio_mode(A_DAC); +#endif setting.measure_sweep_time_us = 0; // start measure sweep time // start_of_sweep_timestamp = chVTGetSystemTimeX(); // Will be set in perform @@ -5239,6 +5245,13 @@ static volatile int dummy; if (setting.measurement == M_GUARD && RSSI > setting.guards[current_guard].level) { pwm_start(4000); } +#endif +#ifdef __BEEP__ + if (setting.trigger != T_AUTO && setting.frequency_step > 0) { // Trigger active + if (setting.trigger_beep && RSSI >= setting.trigger_level) { + pwm_start(4000); + } + } #endif for (int t=0; tparam_1.text = mode_text[setting.trigger_mode - T_PRE]; } else if (data == T_UP || data == T_DOWN) b->icon = setting.trigger_direction == data ? BUTTON_ICON_GROUP_CHECKED : BUTTON_ICON_GROUP; +#ifdef __BEEP__ + else if (data == T_BEEP) + b->icon = setting.trigger_beep ? BUTTON_ICON_CHECK : BUTTON_ICON_NOCHECK; +#endif else b->icon = setting.trigger == data ? BUTTON_ICON_GROUP_CHECKED : BUTTON_ICON_GROUP; return; @@ -3438,7 +3442,11 @@ static UI_FUNCTION_ADV_CALLBACK(menu_trigger_acb) if (setting.trigger_mode > T_MID) setting.trigger_mode = T_PRE; set_trigger(setting.trigger_mode); - } else if (data != T_DONE) { +#ifdef __BEEP__ + } else if (data == T_BEEP) { + setting.trigger_beep = !setting.trigger_beep; +#endif + } else if (data != T_DONE) { set_trigger(data); // menu_move_back(false); ui_mode_normal(); @@ -4720,8 +4728,11 @@ static const menuitem_t menu_trigger[] = { { 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}, + { MT_ADV_CALLBACK, T_MODE, "TRIGGER\n\b%s", menu_trigger_acb}, { MT_KEYPAD, KM_TRIGGER_GRID, "INTERVAL\n\b%ss", NULL}, +#ifdef __BEEP__ + { MT_ADV_CALLBACK, T_BEEP, "BEEP", menu_trigger_acb}, +#endif { MT_NONE, 0, NULL, menu_back} // next-> menu_back };