mirror of
https://github.com/ttrftech/NanoVNA.git
synced 2025-12-06 03:31:59 +01:00
feat: add lever mode for electrical delay
This commit is contained in:
commit
f1cc60e99e
1
main.c
1
main.c
|
|
@ -1656,6 +1656,7 @@ void set_electrical_delay(float picoseconds)
|
||||||
electrical_delay = picoseconds;
|
electrical_delay = picoseconds;
|
||||||
force_set_markmap();
|
force_set_markmap();
|
||||||
}
|
}
|
||||||
|
redraw_request |= REDRAW_MARKER;
|
||||||
}
|
}
|
||||||
|
|
||||||
float get_electrical_delay(void)
|
float get_electrical_delay(void)
|
||||||
|
|
|
||||||
22
nanovna.h
22
nanovna.h
|
|
@ -74,7 +74,7 @@ void cal_collect(int type);
|
||||||
void cal_done(void);
|
void cal_done(void);
|
||||||
|
|
||||||
#define MAX_FREQ_TYPE 5
|
#define MAX_FREQ_TYPE 5
|
||||||
enum {
|
enum stimulus_type {
|
||||||
ST_START=0, ST_STOP, ST_CENTER, ST_SPAN, ST_CW
|
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_init(void);
|
||||||
extern void ui_process(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;
|
extern uint8_t operation_requested;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -208,7 +208,7 @@ extern const uint16_t numfont16x22[];
|
||||||
#define TRACES_MAX 4
|
#define TRACES_MAX 4
|
||||||
|
|
||||||
#define MAX_TRACE_TYPE 12
|
#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
|
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
|
// Mask for define rectangular plot
|
||||||
|
|
@ -224,7 +224,7 @@ enum {
|
||||||
// Electrical Delay
|
// Electrical Delay
|
||||||
// Phase
|
// Phase
|
||||||
|
|
||||||
typedef struct {
|
typedef struct trace {
|
||||||
uint8_t enabled;
|
uint8_t enabled;
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
uint8_t channel;
|
uint8_t channel;
|
||||||
|
|
@ -233,7 +233,7 @@ typedef struct {
|
||||||
float refpos;
|
float refpos;
|
||||||
} trace_t;
|
} trace_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct config {
|
||||||
int32_t magic;
|
int32_t magic;
|
||||||
uint16_t dac_value;
|
uint16_t dac_value;
|
||||||
uint16_t grid_color;
|
uint16_t grid_color;
|
||||||
|
|
@ -269,7 +269,7 @@ float groupdelay_from_array(int i, float array[POINTS_COUNT][2]);
|
||||||
|
|
||||||
#define MARKERS_MAX 4
|
#define MARKERS_MAX 4
|
||||||
|
|
||||||
typedef struct {
|
typedef struct marker {
|
||||||
int8_t enabled;
|
int8_t enabled;
|
||||||
int16_t index;
|
int16_t index;
|
||||||
uint32_t frequency;
|
uint32_t frequency;
|
||||||
|
|
@ -367,7 +367,7 @@ void show_logo(void);
|
||||||
*/
|
*/
|
||||||
#define SAVEAREA_MAX 5
|
#define SAVEAREA_MAX 5
|
||||||
|
|
||||||
typedef struct {
|
typedef struct properties {
|
||||||
uint32_t magic;
|
uint32_t magic;
|
||||||
uint32_t _frequency0;
|
uint32_t _frequency0;
|
||||||
uint32_t _frequency1;
|
uint32_t _frequency1;
|
||||||
|
|
@ -434,16 +434,16 @@ void clear_all_config_prop_data(void);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// lever_mode
|
// lever_mode
|
||||||
enum {
|
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
|
// marker smith value format
|
||||||
enum {
|
enum marker_smithvalue {
|
||||||
MS_LIN, MS_LOG, MS_REIM, MS_RX, MS_RLC
|
MS_LIN, MS_LOG, MS_REIM, MS_RX, MS_RLC
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct uistat {
|
||||||
int8_t digit; /* 0~5 */
|
int8_t digit; /* 0~5 */
|
||||||
int8_t digit_mode;
|
int8_t digit_mode;
|
||||||
int8_t current_trace; /* 0..3 */
|
int8_t current_trace; /* 0..3 */
|
||||||
|
|
|
||||||
4
plot.c
4
plot.c
|
|
@ -1574,6 +1574,10 @@ cell_draw_marker_info(int x0, int y0)
|
||||||
int xpos = 21 + CELLOFFSETX - x0;
|
int xpos = 21 + CELLOFFSETX - x0;
|
||||||
int ypos = 1 + ((j+1)/2)*(FONT_GET_HEIGHT+1) - y0;
|
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)
|
float light_speed_ps = 299792458e-12; //(m/ps)
|
||||||
plot_printf(buf, sizeof buf, "Edelay %Fs %Fm", electrical_delay * 1e-12,
|
plot_printf(buf, sizeof buf, "Edelay %Fs %Fm", electrical_delay * 1e-12,
|
||||||
electrical_delay * light_speed_ps * velocity_factor);
|
electrical_delay * light_speed_ps * velocity_factor);
|
||||||
|
|
|
||||||
23
ui.c
23
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
|
static void
|
||||||
ui_process_normal(void)
|
ui_process_normal(void)
|
||||||
{
|
{
|
||||||
|
|
@ -1751,6 +1768,9 @@ ui_process_normal(void)
|
||||||
else
|
else
|
||||||
lever_zoom_span(status);
|
lever_zoom_span(status);
|
||||||
break;
|
break;
|
||||||
|
case LM_EDELAY:
|
||||||
|
lever_edelay(status);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2120,6 +2140,9 @@ touch_lever_mode_select(void)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
if (touch_y < 15) {
|
if (touch_y < 15) {
|
||||||
|
if (touch_x < FREQUENCIES_XPOS2 && get_electrical_delay() != 0.0) {
|
||||||
|
select_lever_mode(LM_EDELAY);
|
||||||
|
} else
|
||||||
select_lever_mode(LM_MARKER);
|
select_lever_mode(LM_MARKER);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue