fix: omit drawing screen from usb thread

This commit is contained in:
TT 2019-09-23 12:43:39 +09:00
parent 0abe3e00d0
commit 47f48d83e4
3 changed files with 45 additions and 28 deletions

32
main.c
View file

@ -51,10 +51,11 @@ int8_t drive_strength = DRIVE_STRENGTH_AUTO;
int8_t frequency_updated = FALSE;
int8_t sweep_enabled = TRUE;
int8_t cal_auto_interpolate = TRUE;
int8_t redraw_requested = FALSE;
uint16_t redraw_request = 0; // contains REDRAW_XXX flags
int8_t stop_the_world = FALSE;
int16_t vbat = 0;
static THD_WORKING_AREA(waThread1, 640);
static THD_FUNCTION(Thread1, arg)
{
@ -85,8 +86,9 @@ static THD_FUNCTION(Thread1, arg)
/* calculate trace coordinates */
plot_into_index(measured);
/* plot trace as raster */
draw_all_cells();
draw_all();
}
}
@ -642,6 +644,7 @@ static void cmd_scan(BaseSequentialStream *chp, int argc, char *argv[])
pause_sweep();
chMtxLock(&mutex);
freq = frequency0;
step = (frequency1 - frequency0) / (sweep_points-1);
set_frequency(freq);
@ -695,9 +698,8 @@ void sweep(void)
if (electrical_delay != 0)
apply_edelay_at(i);
redraw_requested = FALSE;
ui_process();
if (redraw_requested)
if (redraw_request)
break; // return to redraw screen asap.
if (frequency_updated)
@ -1189,6 +1191,7 @@ cal_collect(int type)
break;
}
chMtxUnlock(&mutex);
redraw_request |= REDRAW_CAL_STATUS;
}
void
@ -1223,6 +1226,7 @@ cal_done(void)
}
cal_status |= CALSTAT_APPLY;
redraw_request |= REDRAW_CAL_STATUS;
}
void
@ -1308,19 +1312,18 @@ static void cmd_cal(BaseSequentialStream *chp, int argc, char *argv[])
cal_collect(CAL_ISOLN);
} else if (strcmp(cmd, "done") == 0) {
cal_done();
draw_cal_status();
return;
} else if (strcmp(cmd, "on") == 0) {
cal_status |= CALSTAT_APPLY;
draw_cal_status();
redraw_request |= REDRAW_CAL_STATUS;
return;
} else if (strcmp(cmd, "off") == 0) {
cal_status &= ~CALSTAT_APPLY;
draw_cal_status();
redraw_request |= REDRAW_CAL_STATUS;
return;
} else if (strcmp(cmd, "reset") == 0) {
cal_status = 0;
draw_cal_status();
redraw_request |= REDRAW_CAL_STATUS;
return;
} else if (strcmp(cmd, "data") == 0) {
chprintf(chp, "%f %f\r\n", cal_data[CAL_LOAD][0][0], cal_data[CAL_LOAD][0][1]);
@ -1334,7 +1337,7 @@ static void cmd_cal(BaseSequentialStream *chp, int argc, char *argv[])
if (argc > 1)
s = atoi(argv[1]);
cal_interpolate(s);
draw_cal_status();
redraw_request |= REDRAW_CAL_STATUS;
return;
} else {
chprintf(chp, "usage: cal [load|open|short|thru|isoln|done|reset|on|off|in]\r\n");
@ -1353,7 +1356,7 @@ static void cmd_save(BaseSequentialStream *chp, int argc, char *argv[])
if (id < 0 || id >= SAVEAREA_MAX)
goto usage;
caldata_save(id);
draw_cal_status();
redraw_request |= REDRAW_CAL_STATUS;
return;
usage:
@ -1375,7 +1378,7 @@ static void cmd_recall(BaseSequentialStream *chp, int argc, char *argv[])
if (caldata_recall(id) == 0) {
// success
update_frequencies();
draw_cal_status();
redraw_request |= REDRAW_CAL_STATUS;
}
chMtxUnlock(&mutex);
resume_sweep();
@ -1638,6 +1641,7 @@ static void cmd_marker(BaseSequentialStream *chp, int argc, char *argv[])
active_marker = -1;
for (t = 0; t < 4; t++)
markers[t].enabled = FALSE;
redraw_request |= REDRAW_MARKER;
return;
}
@ -1647,7 +1651,9 @@ static void cmd_marker(BaseSequentialStream *chp, int argc, char *argv[])
if (argc == 1) {
chprintf(chp, "%d %d %d\r\n", t+1, markers[t].index, frequency);
active_marker = t;
// select active marker
markers[t].enabled = TRUE;
redraw_request |= REDRAW_MARKER;
return;
}
if (argc > 1) {
@ -1655,15 +1661,19 @@ static void cmd_marker(BaseSequentialStream *chp, int argc, char *argv[])
markers[t].enabled = FALSE;
if (active_marker == t)
active_marker = -1;
redraw_request |= REDRAW_MARKER;
} else if (strcmp(argv[1], "on") == 0) {
markers[t].enabled = TRUE;
active_marker = t;
redraw_request |= REDRAW_MARKER;
} else {
// select active marker and move to index
markers[t].enabled = TRUE;
int index = atoi(argv[1]);
markers[t].index = index;
markers[t].frequency = frequencies[index];
active_marker = t;
redraw_request |= REDRAW_MARKER;
}
}
return;

View file

@ -236,7 +236,7 @@ void redraw_marker(int marker, int update_info);
void trace_get_info(int t, char *buf, int len);
void plot_into_index(float measured[2][101][2]);
void force_set_markmap(void);
void draw_all_cells(void);
void draw_all(void);
void draw_cal_status(void);
@ -245,7 +245,13 @@ void markmap_all_markers(void);
void marker_position(int m, int t, int *x, int *y);
int search_nearest_index(int x, int y, int t);
extern int8_t redraw_requested;
extern uint16_t redraw_request;
#define REDRAW_CELLS (1<<0)
#define REDRAW_FREQUENCY (1<<1)
#define REDRAW_CAL_STATUS (1<<2)
#define REDRAW_MARKER (1<<3)
extern int16_t vbat;
/*

31
plot.c
View file

@ -89,7 +89,7 @@ void update_grid(void)
grid_width = (WIDTH-1) * (fgrid / 100) / (fspan / 1000);
force_set_markmap();
draw_frequencies();
redraw_request |= REDRAW_FREQUENCY;
}
int
@ -1255,9 +1255,6 @@ draw_all_cells(void)
for (n = 0; n < (area_height+CELLHEIGHT-1) / CELLHEIGHT; n++) {
if (is_mapmarked(m, n))
draw_cell(m, n);
//ui_process();
//if (operation_requested)
// return;
}
// keep current map for update
@ -1266,6 +1263,18 @@ draw_all_cells(void)
clear_markmap();
}
void
draw_all(void)
{
draw_all_cells();
if (redraw_request & REDRAW_FREQUENCY)
draw_frequencies();
if (redraw_request & REDRAW_CAL_STATUS)
draw_cal_status();
redraw_request = 0;
}
void
redraw_marker(int marker, int update_info)
{
@ -1286,7 +1295,7 @@ request_to_draw_cells_behind_menu(void)
for (m = 7; m <= 9; m++)
for (n = 0; n < 8; n++)
mark_map(m, n);
redraw_requested = TRUE;
redraw_request |= REDRAW_CELLS;
}
void
@ -1296,7 +1305,7 @@ request_to_draw_cells_behind_numeric_input(void)
for (m = 0; m <= 9; m++)
for (n = 6; n < 8; n++)
mark_map(m, n);
redraw_requested = TRUE;
redraw_request |= REDRAW_CELLS;
}
@ -1584,7 +1593,7 @@ void
request_to_redraw_grid(void)
{
force_set_markmap();
redraw_requested = TRUE;
redraw_request |= REDRAW_CELLS;
}
void
@ -1595,14 +1604,6 @@ redraw_frame(void)
draw_cal_status();
}
/*void
redraw_all(void)
{
redraw();
force_set_markmap();
draw_all_cells();
}*/
void
plot_init(void)
{