diff --git a/main.c b/main.c index 9b58d78..bb5580b 100644 --- a/main.c +++ b/main.c @@ -1656,6 +1656,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 f9e31ae..524b2aa 100644 --- a/nanovna.h +++ b/nanovna.h @@ -74,7 +74,7 @@ void cal_collect(int type); void cal_done(void); #define MAX_FREQ_TYPE 5 -enum { +enum stimulus_type { ST_START=0, ST_STOP, ST_CENTER, ST_SPAN, ST_CW }; @@ -109,7 +109,7 @@ extern int8_t sweep_enabled; extern void ui_init(void); extern void ui_process(void); -enum { OP_NONE = 0, OP_LEVER, OP_TOUCH, OP_FREQCHANGE }; +enum opreq { OP_NONE = 0, OP_LEVER, OP_TOUCH, OP_FREQCHANGE }; extern uint8_t operation_requested; /* @@ -208,7 +208,7 @@ extern const uint16_t numfont16x22[]; #define TRACES_MAX 4 #define MAX_TRACE_TYPE 12 -enum { +enum trace_type { TRC_LOGMAG=0, TRC_PHASE, TRC_DELAY, TRC_SMITH, TRC_POLAR, TRC_LINEAR, TRC_SWR, TRC_REAL, TRC_IMAG, TRC_R, TRC_X, TRC_OFF }; // Mask for define rectangular plot @@ -224,7 +224,7 @@ enum { // Electrical Delay // Phase -typedef struct { +typedef struct trace { uint8_t enabled; uint8_t type; uint8_t channel; @@ -233,7 +233,7 @@ typedef struct { float refpos; } trace_t; -typedef struct { +typedef struct config { int32_t magic; uint16_t dac_value; uint16_t grid_color; @@ -269,7 +269,7 @@ float groupdelay_from_array(int i, float array[POINTS_COUNT][2]); #define MARKERS_MAX 4 -typedef struct { +typedef struct marker { int8_t enabled; int16_t index; uint32_t frequency; @@ -367,7 +367,7 @@ void show_logo(void); */ #define SAVEAREA_MAX 5 -typedef struct { +typedef struct properties { uint32_t magic; uint32_t _frequency0; uint32_t _frequency1; @@ -434,16 +434,16 @@ void clear_all_config_prop_data(void); */ // lever_mode -enum { - LM_MARKER, LM_SEARCH, LM_CENTER, LM_SPAN +enum lever_mode { + LM_MARKER, LM_SEARCH, LM_CENTER, LM_SPAN, LM_EDELAY }; // marker smith value format -enum { +enum marker_smithvalue { MS_LIN, MS_LOG, MS_REIM, MS_RX, MS_RLC }; -typedef struct { +typedef struct uistat { int8_t digit; /* 0~5 */ int8_t digit_mode; int8_t current_trace; /* 0..3 */ diff --git a/plot.c b/plot.c index b696397..70f5e31 100644 --- a/plot.c +++ b/plot.c @@ -1574,6 +1574,10 @@ cell_draw_marker_info(int x0, int y0) int xpos = 21 + CELLOFFSETX - x0; int ypos = 1 + ((j+1)/2)*(FONT_GET_HEIGHT+1) - y0; + if (uistat.lever_mode == LM_EDELAY) + cell_drawstring(S_SARROW, xpos, ypos); + xpos += 5; + float light_speed_ps = 299792458e-12; //(m/ps) plot_printf(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 24c59a6..681c8bb 100644 --- a/ui.c +++ b/ui.c @@ -1731,6 +1731,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) { @@ -1749,7 +1766,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; } } @@ -2120,7 +2140,10 @@ touch_lever_mode_select(void) return TRUE; } if (touch_y < 15) { - select_lever_mode(LM_MARKER); + if (touch_x < FREQUENCIES_XPOS2 && get_electrical_delay() != 0.0) { + select_lever_mode(LM_EDELAY); + } else + select_lever_mode(LM_MARKER); return TRUE; } return FALSE;