mirror of
https://github.com/ttrftech/NanoVNA.git
synced 2025-12-06 03:31:59 +01:00
add grid control, etc
This commit is contained in:
parent
121691b5e1
commit
25dd4bf182
4
Makefile
4
Makefile
|
|
@ -60,13 +60,13 @@ endif
|
||||||
# Stack size to be allocated to the Cortex-M process stack. This stack is
|
# Stack size to be allocated to the Cortex-M process stack. This stack is
|
||||||
# the stack used by the main() thread.
|
# the stack used by the main() thread.
|
||||||
ifeq ($(USE_PROCESS_STACKSIZE),)
|
ifeq ($(USE_PROCESS_STACKSIZE),)
|
||||||
USE_PROCESS_STACKSIZE = 0x200
|
USE_PROCESS_STACKSIZE = 0x280
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Stack size to the allocated to the Cortex-M main/exceptions stack. This
|
# Stack size to the allocated to the Cortex-M main/exceptions stack. This
|
||||||
# stack is used for processing interrupts and exceptions.
|
# stack is used for processing interrupts and exceptions.
|
||||||
ifeq ($(USE_EXCEPTIONS_STACKSIZE),)
|
ifeq ($(USE_EXCEPTIONS_STACKSIZE),)
|
||||||
USE_EXCEPTIONS_STACKSIZE = 0x300
|
USE_EXCEPTIONS_STACKSIZE = 0x280
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
||||||
59
main.c
59
main.c
|
|
@ -446,6 +446,7 @@ void scan_lcd(void)
|
||||||
draw_cell_all();
|
draw_cell_all();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
static void cmd_scan_lcd(BaseSequentialStream *chp, int argc, char *argv[])
|
static void cmd_scan_lcd(BaseSequentialStream *chp, int argc, char *argv[])
|
||||||
{
|
{
|
||||||
(void)chp;
|
(void)chp;
|
||||||
|
|
@ -454,7 +455,7 @@ static void cmd_scan_lcd(BaseSequentialStream *chp, int argc, char *argv[])
|
||||||
pause_sweep();
|
pause_sweep();
|
||||||
scan_lcd();
|
scan_lcd();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
set_frequencies(void)
|
set_frequencies(void)
|
||||||
|
|
@ -841,6 +842,30 @@ const char *trc_channel_name[] = {
|
||||||
"S11", "S21"
|
"S11", "S21"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void set_trace_type(int t, int type)
|
||||||
|
{
|
||||||
|
int polar = type == TRC_SMITH || type == TRC_ADMIT || type == TRC_POLAR;
|
||||||
|
int enabled = type != TRC_OFF;
|
||||||
|
int force = FALSE;
|
||||||
|
|
||||||
|
if (trace[t].polar != polar) {
|
||||||
|
trace[t].polar = polar;
|
||||||
|
force = TRUE;
|
||||||
|
}
|
||||||
|
if (trace[t].enabled != enabled) {
|
||||||
|
trace[t].enabled = enabled;
|
||||||
|
force = TRUE;
|
||||||
|
}
|
||||||
|
if (trace[t].type != type) {
|
||||||
|
trace[t].type = type;
|
||||||
|
if (polar)
|
||||||
|
force = TRUE;
|
||||||
|
}
|
||||||
|
if (force)
|
||||||
|
//force_draw_cells();
|
||||||
|
force_set_markmap();
|
||||||
|
}
|
||||||
|
|
||||||
static void cmd_trace(BaseSequentialStream *chp, int argc, char *argv[])
|
static void cmd_trace(BaseSequentialStream *chp, int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int t;
|
int t;
|
||||||
|
|
@ -865,35 +890,21 @@ static void cmd_trace(BaseSequentialStream *chp, int argc, char *argv[])
|
||||||
}
|
}
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
if (strcmp(argv[1], "logmag") == 0) {
|
if (strcmp(argv[1], "logmag") == 0) {
|
||||||
trace[t].type = TRC_LOGMAG;
|
set_trace_type(t, TRC_LOGMAG);
|
||||||
trace[t].polar = FALSE;
|
|
||||||
trace[t].enabled = TRUE;
|
|
||||||
} else if (strcmp(argv[1], "phase") == 0) {
|
} else if (strcmp(argv[1], "phase") == 0) {
|
||||||
trace[t].type = TRC_PHASE;
|
set_trace_type(t, TRC_PHASE);
|
||||||
trace[t].polar = FALSE;
|
|
||||||
trace[t].enabled = TRUE;
|
|
||||||
} else if (strcmp(argv[1], "polar") == 0) {
|
} else if (strcmp(argv[1], "polar") == 0) {
|
||||||
trace[t].type = TRC_POLAR;
|
set_trace_type(t, TRC_POLAR);
|
||||||
trace[t].polar = TRUE;
|
|
||||||
trace[t].enabled = TRUE;
|
|
||||||
} else if (strcmp(argv[1], "smith") == 0) {
|
} else if (strcmp(argv[1], "smith") == 0) {
|
||||||
trace[t].type = TRC_SMITH;
|
set_trace_type(t, TRC_SMITH);
|
||||||
trace[t].polar = TRUE;
|
|
||||||
trace[t].enabled = TRUE;
|
|
||||||
} else if (strcmp(argv[1], "admit") == 0) {
|
} else if (strcmp(argv[1], "admit") == 0) {
|
||||||
trace[t].type = TRC_ADMIT;
|
set_trace_type(t, TRC_ADMIT);
|
||||||
trace[t].polar = TRUE;
|
|
||||||
trace[t].enabled = TRUE;
|
|
||||||
} else if (strcmp(argv[1], "linear") == 0) {
|
} else if (strcmp(argv[1], "linear") == 0) {
|
||||||
trace[t].type = TRC_LINEAR;
|
set_trace_type(t, TRC_LINEAR);
|
||||||
trace[t].polar = FALSE;
|
|
||||||
trace[t].enabled = TRUE;
|
|
||||||
} else if (strcmp(argv[1], "swr") == 0) {
|
} else if (strcmp(argv[1], "swr") == 0) {
|
||||||
trace[t].type = TRC_SWR;
|
set_trace_type(t, TRC_SWR);
|
||||||
trace[t].polar = FALSE;
|
|
||||||
trace[t].enabled = TRUE;
|
|
||||||
} else if (strcmp(argv[1], "off") == 0) {
|
} else if (strcmp(argv[1], "off") == 0) {
|
||||||
trace[t].enabled = FALSE;
|
set_trace_type(t, TRC_OFF);
|
||||||
} else if (strcmp(argv[1], "scale") == 0 && argc >= 3) {
|
} else if (strcmp(argv[1], "scale") == 0 && argc >= 3) {
|
||||||
trace[t].scale = atoi(argv[2]);
|
trace[t].scale = atoi(argv[2]);
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
@ -1081,7 +1092,7 @@ static const ShellCommand commands[] =
|
||||||
{ "scan", cmd_scan },
|
{ "scan", cmd_scan },
|
||||||
{ "sweep", cmd_sweep },
|
{ "sweep", cmd_sweep },
|
||||||
{ "test", cmd_test },
|
{ "test", cmd_test },
|
||||||
{ "plot", cmd_scan_lcd },
|
//{ "plot", cmd_scan_lcd },
|
||||||
{ "pause", cmd_pause },
|
{ "pause", cmd_pause },
|
||||||
{ "resume", cmd_resume },
|
{ "resume", cmd_resume },
|
||||||
{ "cal", cmd_cal },
|
{ "cal", cmd_cal },
|
||||||
|
|
|
||||||
17
nanovna.h
17
nanovna.h
|
|
@ -75,11 +75,13 @@ void ili9341_drawstring_5x7(char *str, int x, int y, uint16_t fg, uint16_t bg);
|
||||||
#define WIDTH 291
|
#define WIDTH 291
|
||||||
#define HEIGHT 233
|
#define HEIGHT 233
|
||||||
|
|
||||||
#define GRIDY 29
|
|
||||||
|
|
||||||
extern int area_width;
|
extern int area_width;
|
||||||
extern int area_height;
|
extern int area_height;
|
||||||
|
|
||||||
|
#define GRIDY 29
|
||||||
|
|
||||||
|
// font
|
||||||
|
|
||||||
extern const uint16_t x5x7_bits [];
|
extern const uint16_t x5x7_bits [];
|
||||||
extern const uint32_t numfont20x24[][24];
|
extern const uint32_t numfont20x24[][24];
|
||||||
|
|
||||||
|
|
@ -88,10 +90,12 @@ extern const uint32_t numfont20x24[][24];
|
||||||
#define S_OHM "\036"
|
#define S_OHM "\036"
|
||||||
#define S_DEGREE "\037"
|
#define S_DEGREE "\037"
|
||||||
|
|
||||||
|
// trace
|
||||||
|
|
||||||
#define TRACES_MAX 4
|
#define TRACES_MAX 4
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
TRC_LOGMAG, TRC_PHASE, TRC_SMITH, TRC_ADMIT, TRC_POLAR, TRC_LINEAR, TRC_SWR
|
TRC_LOGMAG, TRC_PHASE, TRC_SMITH, TRC_ADMIT, TRC_POLAR, TRC_LINEAR, TRC_SWR, TRC_OFF
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const char *trc_type_name[];
|
extern const char *trc_type_name[];
|
||||||
|
|
@ -116,7 +120,11 @@ typedef struct {
|
||||||
uint8_t polar;
|
uint8_t polar;
|
||||||
} trace_t;
|
} trace_t;
|
||||||
|
|
||||||
extern trace_t trace[TRACES_MAX];
|
//extern trace_t trace[TRACES_MAX];
|
||||||
|
|
||||||
|
void set_trace_type(int t, int type);
|
||||||
|
|
||||||
|
// marker
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int enabled;
|
int enabled;
|
||||||
|
|
@ -135,6 +143,7 @@ void redraw_marker(int marker, int update_info);
|
||||||
void trace_get_info(int t, char *buf, int len);
|
void trace_get_info(int t, char *buf, int len);
|
||||||
void plot_into_index(float measured[2][101][2]);
|
void plot_into_index(float measured[2][101][2]);
|
||||||
void draw_cell_all(void);
|
void draw_cell_all(void);
|
||||||
|
void force_set_markmap(void);
|
||||||
|
|
||||||
void draw_cal_status(void);
|
void draw_cal_status(void);
|
||||||
|
|
||||||
|
|
|
||||||
97
plot.c
97
plot.c
|
|
@ -9,7 +9,6 @@
|
||||||
|
|
||||||
void cell_draw_marker_info(int m, int n, int w, int h);
|
void cell_draw_marker_info(int m, int n, int w, int h);
|
||||||
void draw_frequencies(void);
|
void draw_frequencies(void);
|
||||||
static inline void force_set_markmap(void);
|
|
||||||
void frequency_string(char *buf, size_t len, uint32_t freq);
|
void frequency_string(char *buf, size_t len, uint32_t freq);
|
||||||
void markmap_all_markers(void);
|
void markmap_all_markers(void);
|
||||||
|
|
||||||
|
|
@ -177,9 +176,14 @@ smith_grid(int x, int y)
|
||||||
if (d == 0)
|
if (d == 0)
|
||||||
return c;
|
return c;
|
||||||
|
|
||||||
|
// horizontal axis
|
||||||
|
if (y == 0)
|
||||||
|
return c;
|
||||||
|
|
||||||
// shift circle center to right origin
|
// shift circle center to right origin
|
||||||
x -= P_RADIUS;
|
x -= P_RADIUS;
|
||||||
|
|
||||||
|
|
||||||
// Constant Reactance Circle: 2j : R/2 = 58
|
// Constant Reactance Circle: 2j : R/2 = 58
|
||||||
if (circle_inout(x, y+58, 58) == 0)
|
if (circle_inout(x, y+58, 58) == 0)
|
||||||
return c;
|
return c;
|
||||||
|
|
@ -297,6 +301,56 @@ smith_grid2(int x, int y, float scale)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const int cirs[][4] = {
|
||||||
|
{ 0, 58/2, 58/2, 0 }, // Constant Reactance Circle: 2j : R/2 = 58
|
||||||
|
{ 29/2, 0, 29/2, 1 }, // Constant Resistance Circle: 3 : R/4 = 29
|
||||||
|
{ 0, 116/2, 116/2, 0 }, // Constant Reactance Circle: 1j : R = 116
|
||||||
|
{ 58/2, 0, 58/2, 1 }, // Constant Resistance Circle: 1 : R/2 = 58
|
||||||
|
{ 0, 232/2, 232/2, 0 }, // Constant Reactance Circle: 1/2j : R*2 = 232
|
||||||
|
{ 87/2, 0, 87/2, 1 }, // Constant Resistance Circle: 1/3 : R*3/4 = 87
|
||||||
|
{ 0, 464/2, 464/2, 0 }, // Constant Reactance Circle: 1/4j : R*4 = 464
|
||||||
|
{ 116/2, 0, 116/2, 1 }, // Constant Resistance Circle: 0 : R
|
||||||
|
{ 174/2, 0, 174/2, 1 }, // Constant Resistance Circle: -1/3 : R*3/2 = 174
|
||||||
|
{ 0, 0, 0, 0 } // sentinel
|
||||||
|
};
|
||||||
|
|
||||||
|
int
|
||||||
|
smith_grid3(int x, int y)
|
||||||
|
{
|
||||||
|
int c = grid_color;
|
||||||
|
int d;
|
||||||
|
|
||||||
|
// offset to center
|
||||||
|
x -= P_CENTER_X;
|
||||||
|
y -= P_CENTER_Y;
|
||||||
|
|
||||||
|
// outer circle
|
||||||
|
d = circle_inout(x, y, P_RADIUS);
|
||||||
|
if (d < 0)
|
||||||
|
return 0;
|
||||||
|
if (d == 0)
|
||||||
|
return c;
|
||||||
|
|
||||||
|
// shift circle center to right origin
|
||||||
|
x -= P_RADIUS /2;
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for (i = 0; cirs[i][2]; i++) {
|
||||||
|
d = circle_inout(x+cirs[i][0], y+cirs[i][1], cirs[i][2]);
|
||||||
|
if (d == 0)
|
||||||
|
return c;
|
||||||
|
if (d > 0 && cirs[i][3])
|
||||||
|
return 0;
|
||||||
|
d = circle_inout(x-cirs[i][0], y-cirs[i][1], cirs[i][2]);
|
||||||
|
if (d == 0)
|
||||||
|
return c;
|
||||||
|
if (d > 0 && cirs[i][3])
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
int
|
int
|
||||||
rectangular_grid(int x, int y)
|
rectangular_grid(int x, int y)
|
||||||
|
|
@ -657,7 +711,7 @@ clear_markmap(void)
|
||||||
memset(markmap[current_mappage], 0, sizeof markmap[current_mappage]);
|
memset(markmap[current_mappage], 0, sizeof markmap[current_mappage]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
void
|
||||||
force_set_markmap(void)
|
force_set_markmap(void)
|
||||||
{
|
{
|
||||||
memset(markmap[current_mappage], 0xff, sizeof markmap[current_mappage]);
|
memset(markmap[current_mappage], 0xff, sizeof markmap[current_mappage]);
|
||||||
|
|
@ -937,6 +991,11 @@ markmap_all_markers(void)
|
||||||
int area_width = WIDTH;
|
int area_width = WIDTH;
|
||||||
int area_height = HEIGHT;
|
int area_height = HEIGHT;
|
||||||
|
|
||||||
|
#define GRID_RECTANGULAR (1<<0)
|
||||||
|
#define GRID_SMITH (1<<1)
|
||||||
|
#define GRID_ADMIT (1<<2)
|
||||||
|
#define GRID_POLAR (1<<3)
|
||||||
|
|
||||||
void
|
void
|
||||||
draw_cell(int m, int n)
|
draw_cell(int m, int n)
|
||||||
{
|
{
|
||||||
|
|
@ -956,8 +1015,25 @@ draw_cell(int m, int n)
|
||||||
if (w <= 0 || h <= 0)
|
if (w <= 0 || h <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
uint16_t grid_mode = 0;
|
||||||
|
for (t = 0; t < TRACES_MAX; t++) {
|
||||||
|
if (!trace[t].enabled)
|
||||||
|
continue;
|
||||||
|
if (!trace[t].polar)
|
||||||
|
grid_mode |= GRID_RECTANGULAR;
|
||||||
|
else {
|
||||||
|
if (trace[t].type == TRC_SMITH)
|
||||||
|
grid_mode |= GRID_SMITH;
|
||||||
|
else if (trace[t].type == TRC_ADMIT)
|
||||||
|
grid_mode |= GRID_ADMIT;
|
||||||
|
else
|
||||||
|
grid_mode |= GRID_POLAR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PULSE;
|
PULSE;
|
||||||
/* draw grid */
|
/* draw grid */
|
||||||
|
if (grid_mode & GRID_RECTANGULAR) {
|
||||||
for (x = 0; x < w; x++) {
|
for (x = 0; x < w; x++) {
|
||||||
uint16_t c = rectangular_grid_x(x+x0);
|
uint16_t c = rectangular_grid_x(x+x0);
|
||||||
for (y = 0; y < h; y++)
|
for (y = 0; y < h; y++)
|
||||||
|
|
@ -968,15 +1044,24 @@ draw_cell(int m, int n)
|
||||||
for (x = 0; x < w; x++)
|
for (x = 0; x < w; x++)
|
||||||
spi_buffer[y * w + x] |= c;
|
spi_buffer[y * w + x] |= c;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
memset(spi_buffer, 0, sizeof spi_buffer);
|
||||||
|
}
|
||||||
|
if (grid_mode & (GRID_SMITH|GRID_ADMIT|GRID_POLAR)) {
|
||||||
for (y = 0; y < h; y++) {
|
for (y = 0; y < h; y++) {
|
||||||
for (x = 0; x < w; x++) {
|
for (x = 0; x < w; x++) {
|
||||||
//uint16_t c = rectangular_grid(x+x0, y+y0);
|
uint16_t c = 0;
|
||||||
uint16_t c = smith_grid(x+x0, y+y0);
|
if (grid_mode & GRID_SMITH)
|
||||||
//uint16_t c = smith_grid2(x+x0, y+y0, 0.5);
|
c = smith_grid(x+x0, y+y0);
|
||||||
//uint16_t c = polar_grid(x+x0, y+y0);
|
else if (grid_mode & GRID_ADMIT)
|
||||||
|
c = smith_grid3(x+x0, y+y0);
|
||||||
|
//c = smith_grid2(x+x0, y+y0, 0.5);
|
||||||
|
else if (grid_mode & GRID_POLAR)
|
||||||
|
c = polar_grid(x+x0, y+y0);
|
||||||
spi_buffer[y * w + x] |= c;
|
spi_buffer[y * w + x] |= c;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
PULSE;
|
PULSE;
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
|
|
|
||||||
15
ui.c
15
ui.c
|
|
@ -37,9 +37,9 @@ struct {
|
||||||
#define EVT_DOWN 0x20
|
#define EVT_DOWN 0x20
|
||||||
#define EVT_REPEAT 0x40
|
#define EVT_REPEAT 0x40
|
||||||
|
|
||||||
#define BUTTON_DOWN_LONG_TICKS 10000
|
#define BUTTON_DOWN_LONG_TICKS 1000
|
||||||
#define BUTTON_DOUBLE_TICKS 5000
|
#define BUTTON_DOUBLE_TICKS 500
|
||||||
#define BUTTON_DEBOUNCE_TICKS 10
|
#define BUTTON_DEBOUNCE_TICKS 2
|
||||||
|
|
||||||
/* lever switch assignment */
|
/* lever switch assignment */
|
||||||
#define BIT_UP1 3
|
#define BIT_UP1 3
|
||||||
|
|
@ -231,16 +231,19 @@ menu_trace_cb(int item)
|
||||||
if (item < 0 || item >= 4)
|
if (item < 0 || item >= 4)
|
||||||
return;
|
return;
|
||||||
uistat.current_trace = item;
|
uistat.current_trace = item;
|
||||||
|
menu_move_back();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
menu_format_cb(int item)
|
menu_format_cb(int item)
|
||||||
{
|
{
|
||||||
trace[uistat.current_trace].type = item;
|
set_trace_type(uistat.current_trace, item);
|
||||||
|
ui_status = FALSE;
|
||||||
|
ui_hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
elect_active_marker(void)
|
choose_active_marker(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
|
|
@ -259,7 +262,7 @@ menu_marker_cb(int item)
|
||||||
|
|
||||||
if (active_marker == item) {
|
if (active_marker == item) {
|
||||||
markers[active_marker].enabled = FALSE;
|
markers[active_marker].enabled = FALSE;
|
||||||
elect_active_marker();
|
choose_active_marker();
|
||||||
} else {
|
} else {
|
||||||
active_marker = item;
|
active_marker = item;
|
||||||
markers[active_marker].enabled = TRUE;
|
markers[active_marker].enabled = TRUE;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue