From a3eb29ea0468ae76ca57baf355beb02789d393cf Mon Sep 17 00:00:00 2001 From: TT Date: Sat, 23 Nov 2019 11:04:45 +0900 Subject: [PATCH] feat: add marker operation groupdelay->edelay --- nanovna.h | 1 + plot.c | 2 +- ui.c | 10 ++++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/nanovna.h b/nanovna.h index f127bb49..7c612451 100644 --- a/nanovna.h +++ b/nanovna.h @@ -206,6 +206,7 @@ void draw_battery_status(void); void set_electrical_delay(float picoseconds); float get_electrical_delay(void); +float groupdelay_from_array(int i, float array[101][2]); // marker diff --git a/plot.c b/plot.c index 6ef28d7b..c28f37eb 100644 --- a/plot.c +++ b/plot.c @@ -503,7 +503,7 @@ cartesian_scale(float re, float im, int *xp, int *yp, float scale) *yp = HEIGHT/2 - y; } -static float +float groupdelay_from_array(int i, float array[101][2]) { if (i == 0) { diff --git a/ui.c b/ui.c index 7632d778..91687fed 100644 --- a/ui.c +++ b/ui.c @@ -818,11 +818,13 @@ menu_marker_op_cb(int item) case 3: /* MARKERS->SPAN */ { if (previous_marker == -1 || active_marker == previous_marker) { + // if only 1 marker is active, keep center freq and make span the marker comes to the edge int32_t center = get_sweep_frequency(ST_CENTER); int32_t span = center - freq; if (span < 0) span = -span; set_sweep_frequency(ST_SPAN, span * 2); } else { + // if 2 or more marker active, set start and stop freq to each marker int32_t freq2 = get_marker_frequency(previous_marker); if (freq2 < 0) return; @@ -835,6 +837,13 @@ menu_marker_op_cb(int item) } } break; + case 4: /* MARKERS->EDELAY */ + { + float (*array)[2] = measured[trace[uistat.current_trace].channel]; + float v = groupdelay_from_array(markers[active_marker].index, array); + set_electrical_delay(electrical_delay + (v / 1e-12)); + } + break; } ui_mode_normal(); draw_cal_status(); @@ -1052,6 +1061,7 @@ const menuitem_t menu_marker_ops[] = { { MT_CALLBACK, S_RARROW"STOP", menu_marker_op_cb }, { MT_CALLBACK, S_RARROW"CENTER", menu_marker_op_cb }, { MT_CALLBACK, S_RARROW"SPAN", menu_marker_op_cb }, + { MT_CALLBACK, S_RARROW"EDELAY", menu_marker_op_cb }, { MT_CANCEL, S_LARROW" BACK", NULL }, { MT_NONE, NULL, NULL } // sentinel };