diff --git a/.gitmodules b/.gitmodules index 2dd3fd8..11b93a5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "ChibiOS"] path = ChibiOS - url = git@github.com:edy555/ChibiOS.git - branch = I2SFULLDUPLEX \ No newline at end of file + url = https://github.com/edy555/ChibiOS.git + branch = I2SFULLDUPLEX diff --git a/main.c b/main.c index 46e2468..c7de767 100644 --- a/main.c +++ b/main.c @@ -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) @@ -1061,13 +1063,9 @@ eterm_calc_et(void) { int i; for (i = 0; i < sweep_points; i++) { - // Et = 1/(S21mt - Ex)(1 - Es) - float esr = 1 - cal_data[ETERM_ES][i][0]; - float esi = -cal_data[ETERM_ES][i][1]; - float s21mr = cal_data[CAL_THRU][i][0] - cal_data[CAL_ISOLN][i][0]; - float s21mi = cal_data[CAL_THRU][i][1] - cal_data[CAL_ISOLN][i][1]; - float etr = esr * s21mr - esi * s21mi; - float eti = esr * s21mi + esi * s21mr; + // Et = 1/(S21mt - Ex) + float etr = cal_data[CAL_THRU][i][0] - cal_data[CAL_ISOLN][i][0]; + float eti = cal_data[CAL_THRU][i][1] - cal_data[CAL_ISOLN][i][1]; float sq = etr*etr + eti*eti; float invr = etr / sq; float invi = -eti / sq; @@ -1189,6 +1187,7 @@ cal_collect(int type) break; } chMtxUnlock(&mutex); + redraw_request |= REDRAW_CAL_STATUS; } void @@ -1223,6 +1222,7 @@ cal_done(void) } cal_status |= CALSTAT_APPLY; + redraw_request |= REDRAW_CAL_STATUS; } void @@ -1308,19 +1308,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 +1333,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 +1352,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 +1374,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 +1637,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 +1647,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 +1657,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; diff --git a/nanovna.h b/nanovna.h index 196a5f9..4398bed 100644 --- a/nanovna.h +++ b/nanovna.h @@ -246,7 +246,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); void draw_frequencies(void); @@ -256,7 +256,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; /* diff --git a/plot.c b/plot.c index 5319053..c6293c4 100644 --- a/plot.c +++ b/plot.c @@ -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 @@ -1289,9 +1289,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 @@ -1300,6 +1297,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) { @@ -1320,7 +1329,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 @@ -1330,7 +1339,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; } @@ -1774,7 +1783,7 @@ void request_to_redraw_grid(void) { force_set_markmap(); - redraw_requested = TRUE; + redraw_request |= REDRAW_CELLS; } void @@ -1785,14 +1794,6 @@ redraw_frame(void) draw_cal_status(); } -/*void -redraw_all(void) -{ - redraw(); - force_set_markmap(); - draw_all_cells(); - }*/ - void plot_init(void) {