diff --git a/main.c b/main.c index c34d85c..e5ca07e 100644 --- a/main.c +++ b/main.c @@ -1667,6 +1667,7 @@ void set_electrical_delay(float picoseconds) electrical_delay = picoseconds; force_set_markmap(); } + redraw_request |= REDRAW_MARKER; } float get_electrical_delay(void) diff --git a/nanovna.h b/nanovna.h index e491578..1c481be 100644 --- a/nanovna.h +++ b/nanovna.h @@ -410,7 +410,7 @@ void clear_all_config_prop_data(void); // lever_mode enum lever_mode { - LM_MARKER, LM_SEARCH, LM_CENTER, LM_SPAN + LM_MARKER, LM_SEARCH, LM_CENTER, LM_SPAN, LM_EDELAY }; // marker smith value format diff --git a/plot.c b/plot.c index 3c48dd4..a8b5f62 100644 --- a/plot.c +++ b/plot.c @@ -1599,6 +1599,10 @@ cell_draw_marker_info(int m, int n, int w, int h) xpos -= m * CELLWIDTH -CELLOFFSETX; ypos -= n * CELLHEIGHT; + if (uistat.lever_mode == LM_EDELAY) + cell_drawstring(w, h, S_SARROW, xpos, ypos); + xpos += 5; + float light_speed_ps = 299792458e-12; //(m/ps) chsnprintf(buf, sizeof buf, "Edelay %Fs %Fm", electrical_delay * 1e-12, electrical_delay * light_speed_ps * velocity_factor); diff --git a/ui.c b/ui.c index bd00964..ec302c7 100644 --- a/ui.c +++ b/ui.c @@ -1756,6 +1756,23 @@ lever_move(int status, int mode) } } +#define STEPRATIO 0.2 + +static void +lever_edelay(int status) +{ + float value = get_electrical_delay(); + float ratio = STEPRATIO; + if (value < 0) + ratio = -ratio; + if (status & EVT_UP) { + value = (1 - ratio) * value; + } else if (status & EVT_DOWN) { + value = (1 + ratio) * value; + } + set_electrical_delay(value); +} + static void ui_process_normal(void) { @@ -1774,7 +1791,10 @@ ui_process_normal(void) if (FREQ_IS_STARTSTOP()) lever_move(status, ST_STOP); else - lever_zoom_span(status); + lever_zoom_span(status); + break; + case LM_EDELAY: + lever_edelay(status); break; } } @@ -2148,15 +2168,18 @@ touch_lever_mode_select(void) touch_position(&touch_x, &touch_y); if (touch_y > HEIGHT) { if (touch_x < 160) { - select_lever_mode(LM_CENTER); + select_lever_mode(LM_CENTER); } else { - select_lever_mode(LM_SPAN); + select_lever_mode(LM_SPAN); } return TRUE; } if (touch_y < 15) { - select_lever_mode(LM_MARKER); + if (touch_x < 160 && get_electrical_delay() != 0.0) { + select_lever_mode(LM_EDELAY); + } else + select_lever_mode(LM_MARKER); return TRUE; }