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;
}
}