From 18c5ca9157c2db7f568009890ff42a3d8360ef96 Mon Sep 17 00:00:00 2001 From: TT Date: Sun, 1 Mar 2020 08:50:46 +0900 Subject: [PATCH] feat: add lever operation of electrical delay --- main.c | 1 + nanovna.h | 2 +- plot.c | 4 ++++ ui.c | 31 +++++++++++++++++++++++++++---- 4 files changed, 33 insertions(+), 5 deletions(-) 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; }