diff --git a/.gitignore b/.gitignore index d2fc5aa..2e208cd 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ python TAGS .emacs-dirvars *png +*.bak diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index 47218fa..fc84270 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + diff --git a/main.c b/main.c index 4109559..6b04a66 100644 --- a/main.c +++ b/main.c @@ -2266,6 +2266,7 @@ static const VNAShellCommand commands[] = { "spur", cmd_spur, 0 }, { "selftest", cmd_selftest, 0 }, { "x", cmd_x, 0 }, + { "y", cmd_y, 0 }, { "i", cmd_i, 0 }, { "v", cmd_v, 0 }, { "a", cmd_a, 0 }, diff --git a/nanovna.h b/nanovna.h index a15d458..c0df98e 100644 --- a/nanovna.h +++ b/nanovna.h @@ -564,6 +564,7 @@ typedef struct setting int8_t _active_marker; int8_t unit; float offset; + float trigger; uint32_t checksum; }setting_t; @@ -791,6 +792,7 @@ void set_offset(float); void set_unit(int); void set_RBW(int); void set_switches(int); +void set_trigger(float); //extern int setting_measurement; void self_test(int); //extern int setting_test; diff --git a/sa_cmd.c b/sa_cmd.c index 1d6f998..22b6400 100644 --- a/sa_cmd.c +++ b/sa_cmd.c @@ -207,6 +207,7 @@ VNA_SHELL_FUNCTION(cmd_o) VNA_SHELL_FUNCTION(cmd_d) { (void) argc; + (void) argv; // int32_t a = my_atoi(argv[0]); // setting.drive = a; } diff --git a/sa_core.c b/sa_core.c index 666dee2..f78a84e 100644 --- a/sa_core.c +++ b/sa_core.c @@ -47,6 +47,7 @@ void reset_settings(int m) setting.measurement = M_OFF; setting.frequency_IF = 433800000; setting.offset = 0.0; + setting.trigger = -150.0; trace[TRACE_STORED].enabled = false; trace[TRACE_TEMP].enabled = false; #ifdef __SPUR__ @@ -452,6 +453,21 @@ void set_offset(float offset) setting.offset = offset; dirty = true; } + +void set_trigger(float trigger) +{ + setting.trigger = trigger; + if (trigger != -150.0) { + for (int j = 0; j < setting._sweep_points; j++) + stored_t[j] = trigger; + trace[TRACE_STORED].enabled = true; + } else { + trace[TRACE_STORED].enabled = false; + } + dirty = true; +} + + //int GetRefpos(void) { // return (NGRIDY - get_trace_refpos(2)) * get_trace_scale(2); //} @@ -988,7 +1004,22 @@ again: signal_path_loss = -5.5; // Loss in dB, -9.5 for v0.1, -12.5 for v0.2 else signal_path_loss = +7; // Loss in dB (+ is gain) - float subRSSI = SI4432_RSSI(lf, MODE_SELECT(setting.mode))+get_level_offset()+ setting.attenuate - signal_path_loss - setting.offset; + int wait_for_trigger = false; + int old_actual_step_delay = actualStepDelay; + if (i == 0 && setting.frequency_step == 0 && setting.trigger != -150.0) { // wait for trigger to happen + wait_for_trigger = true; + actualStepDelay = 0; // fastest possible + } + float subRSSI; + wait: + subRSSI = SI4432_RSSI(lf, MODE_SELECT(setting.mode)) + get_level_offset()+ setting.attenuate - signal_path_loss - setting.offset; + if (wait_for_trigger) { // wait for trigger to happen + if (operation_requested && break_on_operation) + break; // abort + if (subRSSI < setting.trigger) + goto wait; + actualStepDelay = old_actual_step_delay; // Trigger happened, restore step delay + } #ifdef __SPUR__ if (setting.spur == 1) { // First pass spur_RSSI = subRSSI; diff --git a/si4432.c b/si4432.c index 7260bca..99a746e 100644 --- a/si4432.c +++ b/si4432.c @@ -349,7 +349,7 @@ void SI4432_Set_Frequency ( long Freq ) { hbsel = 0; } int sbsel = 1; - int N = Freq / setting_frequency_10mhz; + long N = Freq / setting_frequency_10mhz; Carrier = ( 4 * ( Freq - N * setting_frequency_10mhz )) / 625; int Freq_Band = ( N - 24 ) | ( hbsel << 5 ) | ( sbsel << 6 ); #if 0 diff --git a/ui_sa.c b/ui_sa.c index 1c4ce9a..8469ebf 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -279,7 +279,7 @@ const uint16_t right_icons [] = enum { KM_START=1, KM_STOP, KM_CENTER, KM_SPAN, KM_CW, KM_REFPOS, KM_SCALE, KM_ATTENUATION, - KM_ACTUALPOWER, KM_IF, KM_SAMPLETIME, KM_DRIVE, KM_LOWOUTLEVEL, KM_DECAY, KM_NOISE, KM_10MHZ, KM_REPEAT, KM_OFFSET, + KM_ACTUALPOWER, KM_IF, KM_SAMPLETIME, KM_DRIVE, KM_LOWOUTLEVEL, KM_DECAY, KM_NOISE, KM_10MHZ, KM_REPEAT, KM_OFFSET, KM_TRIGGER, }; @@ -390,6 +390,7 @@ static const keypads_t * const keypads_mode_tbl[] = { keypads_level, // KM_10MHz keypads_level, // KM_REPEA keypads_level, // KM_OFFSET + keypads_level, // KM_TRIGGER }; #ifdef __VNA__ @@ -400,7 +401,8 @@ static const char * const keypad_mode_label[] = { #ifdef __SA__ static const char * const keypad_mode_label[] = { "error", "START", "STOP", "CENTER", "SPAN", "FREQ", "REFPOS", "SCALE", // 0-7 - "\2ATTENUATE\0 0-31dB", "ACTUALPOWER", "IF", "SAMPLE TIME", "DRIVE", "LEVEL", "LEVEL", "LEVEL", "OFFSET" , "REPEATS", "OFFSET"// 8-17 + "\2ATTENUATE\0 0-31dB", "ACTUALPOWER", "IF", "SAMPLE TIME", "DRIVE", "LEVEL", "LEVEL", "LEVEL", // 8-15 + "OFFSET" , "REPEATS", "OFFSET", "TRIGGER"// 16- }; #endif @@ -1181,25 +1183,11 @@ const menuitem_t menu_marker_select[] = { }; -#if 0 -static const menuitem_t menu_marker_sel[] = { - { MT_CALLBACK, 0, "MARKER 1", menu_marker_sel_cb}, - { MT_CALLBACK, 0, "MARKER 2", menu_marker_sel_cb}, - { MT_CALLBACK, 0, "MARKER 3", menu_marker_sel_cb}, - { MT_CALLBACK, 0, "MARKER 4", menu_marker_sel_cb}, - { MT_CALLBACK, 0, "ALL OFF", menu_marker_sel_cb}, - { MT_SUBMENU, 0, "\2SEARCH\0MARKER", menu_marker_search}, - { MT_CANCEL, 0, S_LARROW" BACK", NULL }, - { MT_NONE, 0, NULL, NULL } // sentinel -}; -#endif - const menuitem_t menu_marker_ops[] = { { MT_CALLBACK, ST_START, S_RARROW"START", menu_marker_op_cb }, { MT_CALLBACK, ST_STOP, S_RARROW"STOP", menu_marker_op_cb }, { MT_CALLBACK, ST_CENTER, S_RARROW"CENTER", menu_marker_op_cb }, { MT_CALLBACK, ST_SPAN, S_RARROW"SPAN", menu_marker_op_cb }, - // { MT_CALLBACK, 0, S_RARROW"EDELAY", menu_marker_op_cb }, { MT_CANCEL, 0, S_LARROW" BACK", NULL }, { MT_NONE, 0, NULL, NULL } // sentinel }; @@ -1317,8 +1305,6 @@ static const menuitem_t menu_config[] = { { MT_FORM | MT_CALLBACK, 0, "SELF TEST", menu_config_cb}, { MT_FORM | MT_SUBMENU, 0, "CALIBRATE", menu_calibrate}, { MT_FORM | MT_CALLBACK, 0, "VERSION", menu_config_cb}, -// { MT_SUBMENU, 0, "SETTINGS", menu_settings}, -// { MT_SUBMENU, 0, "RBW", menu_rbw}, { MT_FORM | MT_SUBMENU, 0, S_RARROW"DFU", menu_dfu}, { MT_FORM | MT_CANCEL, 0, S_LARROW" BACK", NULL }, { MT_FORM | MT_NONE, 0, NULL, NULL } // sentinel @@ -1343,8 +1329,6 @@ static const menuitem_t menu_acquirehigh[] = { static const menuitem_t menu_display[] = { { MT_CALLBACK,0, "\2PAUSE\0SWEEP", menu_pause_cb}, -// { MT_SUBMENU, 0, "\2REF\0LEVEL", menu_reflevel}, -// { MT_SUBMENU, 0, "\2SCALE/\0DIV",menu_dBper}, { MT_CALLBACK,0, "STORE", menu_storage_cb}, { MT_CALLBACK,1, "CLEAR", menu_storage_cb}, { MT_CALLBACK,2, "SUBTRACT", menu_storage_cb}, @@ -1358,8 +1342,6 @@ static const menuitem_t menu_display[] = { static const menuitem_t menu_displayhigh[] = { { MT_CALLBACK,0, "\2PAUSE\0SWEEP", menu_pause_cb}, -// { MT_SUBMENU, 0, "\2REF\0LEVEL", menu_reflevel}, -// { MT_SUBMENU, 0, "\2SCALE/\0DIV",menu_dBper}, { MT_CALLBACK,0, "STORE", menu_storage_cb}, { MT_CALLBACK,1, "CLEAR", menu_storage_cb}, { MT_CALLBACK,2, "SUBTRACT", menu_storage_cb}, @@ -1389,6 +1371,7 @@ static const menuitem_t menu_levelhigh[] = { { MT_SUBMENU,0, "AVER", menu_average}, { MT_SUBMENU, 0, "UNIT", menu_unit}, { MT_KEYPAD, KM_OFFSET, "\2EXTERN\0AMP", NULL}, + { MT_KEYPAD, KM_TRIGGER, "\2TRIGGER\0LEVEL", NULL}, { MT_CANCEL, 0, S_LARROW" BACK",NULL }, { MT_NONE, 0, NULL, NULL } // sentinel }; @@ -1401,6 +1384,7 @@ static const menuitem_t menu_level[] = { { MT_SUBMENU,0, "AVER", menu_average}, { MT_SUBMENU, 0, "UNIT", menu_unit}, { MT_KEYPAD, KM_OFFSET, "\2EXTERN\0AMP", NULL}, + { MT_KEYPAD, KM_TRIGGER, "\2TRIGGER\0LEVEL", NULL}, { MT_CANCEL, 0, S_LARROW" BACK",NULL }, { MT_NONE, 0, NULL, NULL } // sentinel }; @@ -1435,7 +1419,6 @@ static const menuitem_t menu_mode[] = { // { MT_CANCEL, 0, S_LARROW" BACK", NULL }, { MT_FORM | MT_NONE, 0, NULL, NULL } // sentinel }; -#if 1 #ifdef __ULTRA__ const menuitem_t menu_topultra[] = { @@ -1477,32 +1460,6 @@ const menuitem_t menu_tophigh[] = { { MT_NONE, 0, NULL, NULL } // sentinel, // MENUITEM_CLOSE, }; -#else -const menuitem_t menu_top[] = { - { MT_SUBMENU, 0, "ACQUIRE", menu_acquire}, - { MT_SUBMENU, 0, "FREQ", menu_stimulus}, - { MT_SUBMENU, 0, "DISPLAY", menu_display}, - { MT_SUBMENU, 0, "MARKER", menu_marker}, - { MT_SUBMENU, 0, "MEASURE", menu_measure}, - { MT_SUBMENU, 0, "SETTINGS", menu_settings}, - { MT_CANCEL, 0, S_LARROW" MODE",NULL}, - { MT_NONE, 0, NULL, NULL } // sentinel, - // MENUITEM_CLOSE, -}; - -const menuitem_t menu_tophigh[] = -{ - { MT_SUBMENU, 0, "ACQUIRE", menu_acquirehigh}, - { MT_SUBMENU, 0, "FREQ", menu_stimulus}, - { MT_SUBMENU, 0, "DISPLAY", menu_display}, - { MT_SUBMENU, 0, "MARKER", menu_marker}, - { MT_SUBMENU, 0, "MEASURE", menu_measure}, - { MT_SUBMENU, 0, "SETTINGS", menu_settings}, - { MT_CANCEL, 0, S_LARROW" MODE",NULL}, - { MT_NONE, 0, NULL, NULL } // sentinel, - // MENUITEM_CLOSE, -}; -#endif // ===[MENU DEFINITION END]====================================================== #define ACTIVE_COLOR RGBHEX(0x007FFF) @@ -1735,6 +1692,10 @@ static void fetch_numeric_target(void) uistat.value = setting.offset; plot_printf(uistat.text, sizeof uistat.text, "%fdB", uistat.value); break; + case KM_TRIGGER: + uistat.value = setting.trigger; + plot_printf(uistat.text, sizeof uistat.text, "%fdB", uistat.value); + break; } @@ -1814,5 +1775,8 @@ set_numeric_value(void) case KM_OFFSET: set_offset(uistat.value); break; + case KM_TRIGGER: + set_trigger(uistat.value); + break; } }