diff --git a/Font8x8.c b/Font8x8.c index ed23ee4..33d170d 100644 --- a/Font8x8.c +++ b/Font8x8.c @@ -26,7 +26,7 @@ const uint8_t x8x8_bits[][8]={ {0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00}, /* 0x2D '-' */ {0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00}, /* 0x2E '.' */ {0x06,0x0C,0x18,0x30,0x60,0xC0,0x80,0x00}, /* 0x2F '/' */ - {0x78,0xCC,0xDC,0xFC,0xEC,0xCC,0x78,0x00}, /* 0x30 '0' */ + {0x78,0xCC,0xCC,0xCC,0xCC,0xCC,0x78,0x00}, /* 0x30 '0' */ {0x30,0xF0,0x30,0x30,0x30,0x30,0xFC,0x00}, /* 0x31 '1' */ {0x78,0xCC,0x0C,0x38,0x60,0xCC,0xFC,0x00}, /* 0x32 '2' */ {0x78,0xCC,0x0C,0x38,0x0C,0xCC,0x78,0x00}, /* 0x33 '3' */ diff --git a/main.c b/main.c index 5b8c824..74a52e2 100644 --- a/main.c +++ b/main.c @@ -544,7 +544,6 @@ static void cmd_capture(BaseSequentialStream *chp, int argc, char *argv[]) } len -= PART; } - //*/ chMtxUnlock(&mutex); } @@ -602,9 +601,9 @@ config_t config = { /* grid_color */ 0x1084, /* menu_normal_color */ 0xffff, /* menu_active_color */ 0x7777, - /* trace_colors[4] */ { RGB565(0,255,255), RGB565(255,0,40), RGB565(0,0,255), RGB565(50,255,0) }, - ///* touch_cal[4] */ { 620, 600, 160, 190 }, - /* touch_cal[4] */ { 693, 605, 124, 171 }, + /* trace_color[4] */ { RGB_565(255,255,0), RGB_565(0,40,255), RGB_565(0,255,0), RGB_565(255,200,20) }, + /* trace_colors[4] */ // { RGB565(0,255,255), RGB565(255,0,40), RGB565(0,0,255), RGB565(50,255,0) }, + /* touch_cal[4] */ { 411, 592, 151, 189 }, /* default_loadcal */ 0, /* checksum */ 0 }; @@ -1421,17 +1420,17 @@ const struct { uint16_t refpos; float scale_unit; } trace_info[] = { - { "LGMG", 7, 10 }, + { "LMG", 7, 10 }, { "PHA", 4, 90 }, { "DEL", 4, 1 }, { "SMI", 0, 1 }, - { "PLR", 0, 1 }, + { "POL", 0, 1 }, { "LIN", 0, 0.125 }, { "SWR", 0, 1 }, { "REAL", 4, 0.25 }, { "IMAG", 4, 0.25 }, - { "R", 0, 100 }, - { "X", 4, 100 } + { "RES", 0, 100 }, + { "REA", 4, 100 } }; const char * const trc_channel_name[] = { diff --git a/nanovna.h b/nanovna.h index 7067c33..3390070 100644 --- a/nanovna.h +++ b/nanovna.h @@ -243,7 +243,7 @@ void redraw_frame(void); void request_to_draw_cells_behind_menu(void); void request_to_draw_cells_behind_numeric_input(void); void redraw_marker(int marker, int update_info); -void trace_get_info(int t, char *buf, int len); +uint16_t trace_get_info(int t, char *buf, uint16_t len); void plot_into_index(float measured[2][101][2]); void force_set_markmap(void); void draw_all(bool flush); @@ -269,6 +269,7 @@ extern int16_t vbat; * ili9341.c */ #define RGB565(b,r,g) ( (((b)<<8)&0xfc00) | (((r)<<2)&0x03e0) | (((g)>>3)&0x001f) ) +#define RGB_565(r, g, b) ( (((b)<<8)&0xfc00) | (((r)<<2)&0x03e0) | (((g)>>3)&0x001f) ) typedef struct { uint16_t width; diff --git a/plot.c b/plot.c index edda534..4db0643 100644 --- a/plot.c +++ b/plot.c @@ -641,15 +641,15 @@ trace_get_value_string(int t, char *buf, int len, float coeff[2], uint32_t frequ if (v == -INFINITY) chsnprintf(buf, len, "-INF dB"); else - chsnprintf(buf, len, "%.2fdB", v); + chsnprintf(buf, len, "%.1fdB", v); break; case TRC_PHASE: v = phase(coeff); - chsnprintf(buf, len, "%.2f" S_DEGREE, v); + chsnprintf(buf, len, "%.1f" S_DEGREE, v); break; case TRC_LINEAR: v = linear(coeff); - chsnprintf(buf, len, "%.2f", v); + chsnprintf(buf, len, "%.1f", v); break; case TRC_SWR: v = swr(coeff); @@ -672,35 +672,43 @@ trace_get_value_string(int t, char *buf, int len, float coeff[2], uint32_t frequ break; //case TRC_ADMIT: case TRC_POLAR: - chsnprintf(buf, len, "%.2f %.2fj", coeff[0], coeff[1]); + chsnprintf(buf, len, "%.1f %.1fj", coeff[0], coeff[1]); break; } } -void -trace_get_info(int t, char *buf, int len) + + +uint16_t +trace_get_info(int t, char *buf, uint16_t len) { const char *type = get_trace_typename(t); - int n; - switch (trace[t].type) { + uint16_t n = 0; + + switch ( trace[t].type ) + { case TRC_LOGMAG: - chsnprintf(buf, len, "%s %ddB/", type, (int)get_trace_scale(t)); + n = chsnprintf(buf, len, "%s %ddB/", type, (int)get_trace_scale(t)); break; case TRC_PHASE: - chsnprintf(buf, len, "%s %d" S_DEGREE "/", type, (int)get_trace_scale(t)); + n = chsnprintf(buf, len, "%s %d" S_DEGREE "/", type, (int)get_trace_scale(t)); break; case TRC_SMITH: //case TRC_ADMIT: case TRC_POLAR: - chsnprintf(buf, len, "%s %.1fFS", type, get_trace_scale(t)); + n = chsnprintf(buf, len, "%s %.1fFS", type, get_trace_scale(t)); break; default: n = chsnprintf(buf, len, "%s ", type); string_value_with_prefix(buf+n, len-n, get_trace_scale(t), '/'); break; } + + return n; } + + static float time_of_index(int idx) { return 1.0 / (float)(frequencies[1] - frequencies[0]) / (float)FFT_SIZE * idx; } @@ -1205,7 +1213,9 @@ draw_cell(int m, int n) { memset(spi_buffer, 0, sizeof spi_buffer); } - if (grid_mode & (GRID_SMITH|GRID_ADMIT|GRID_POLAR)) { + + if (grid_mode & (GRID_SMITH|GRID_ADMIT|GRID_POLAR)) + { for (y = 0; y < h; y++) { @@ -1227,18 +1237,21 @@ draw_cell(int m, int n) #if 1 /* draw rectanglar plot */ - for (t = 0; t < TRACES_MAX; t++) { + for (t = 0; t < TRACES_MAX; t++) + { if (!trace[t].enabled) continue; if (trace[t].type == TRC_SMITH || trace[t].type == TRC_POLAR) continue; - if (search_index_range_x(x0, trace_index[t], &i0, &i1)) { + if (search_index_range_x(x0, trace_index[t], &i0, &i1)) + { if (i0 > 0) i0--; if (i1 < 101-1) i1++; - for (i = i0; i < i1; i++) { + for (i = i0; i < i1; i++) + { int x1 = CELL_X(trace_index[t][i]); int x2 = CELL_X(trace_index[t][i+1]); int y1 = CELL_Y(trace_index[t][i]); @@ -1251,14 +1264,16 @@ draw_cell(int m, int n) #endif #if 1 /* draw polar plot */ - for (t = 0; t < TRACES_MAX; t++) { + for (t = 0; t < TRACES_MAX; t++) + { int c = config.trace_color[t]; if (!trace[t].enabled) continue; if (trace[t].type != TRC_SMITH && trace[t].type != TRC_POLAR) continue; - for (i = 1; i < sweep_points; i++) { + for (i = 1; i < sweep_points; i++) + { //uint32_t index = trace_index[t][i]; //uint32_t pindex = trace_index[t][i-1]; //if (!CELL_P(index, x0, y0) && !CELL_P(pindex, x0, y0)) @@ -1408,18 +1423,30 @@ cell_drawstring_invert_5x7(int w, int h, char *str, int x, int y, uint16_t fg, i -unsigned char -cell_drawchar_8x8(int w, int h, uint8_t ch, int x, int y, uint16_t fg, uint8_t var, int invert) +uint16_t +cell_drawchar_8x8(int w, int h, uint8_t ch, int x, int y, uint16_t fg, uint8_t var, uint8_t invert) { - uint8_t bits, charlen = 8; + uint8_t bits; + uint16_t charwidthpx = 8; int cline, r; // fixme // if (y <= -8 || y >= h || x <= -8 || x >= w) // return 0; + ch = x8x8_map_char_table(ch); + if ( var != FALSE ) + { + charwidthpx = x8x8_len[ch]; + } + + +// if (y <= -8 || y >= h || x >= w ) // fixme x <= -(charlen) || x >= w) +// return 0; + + for (cline = 0; cline < 8; cline++) { if ((y + cline) < 0 || (y + cline) >= h) @@ -1430,12 +1457,8 @@ cell_drawchar_8x8(int w, int h, uint8_t ch, int x, int y, uint16_t fg, uint8_t v if (invert) bits = ~bits; - if ( var != FALSE ) - { - charlen = x8x8_len[ch]; - } - for (r = 0; r < charlen; r++) + for (r = 0; r < charwidthpx; r++) { if ( (x+r) >= 0 && (x+r) < w && (0x80 & bits) ) spi_buffer[(y+cline)*w + (x+r)] = fg; @@ -1444,63 +1467,44 @@ cell_drawchar_8x8(int w, int h, uint8_t ch, int x, int y, uint16_t fg, uint8_t v } } - return x8x8_len[ch]; + return charwidthpx; } -void -cell_drawstring_8x8(int w, int h, char *str, int x, int y, uint16_t fg) +uint16_t +cell_drawstring_8x8(int w, int h, char *str, int x, int y, uint16_t fg, uint8_t invert) { + uint16_t strwidthpx = 0; + while (*str) { - cell_drawchar_8x8(w, h, *str, x, y, fg, FALSE, FALSE); + strwidthpx += cell_drawchar_8x8(w, h, *str, x, y, fg, FALSE, invert); x += 8; str++; } + + return strwidthpx; } -void -cell_drawstring_invert_8x8(int w, int h, char *str, int x, int y, uint16_t fg, int invert) -{ - while (*str) - { - cell_drawchar_8x8(w, h, *str, x, y, fg, FALSE, invert); - x += 8; - str++; - } -} - - - -void -cell_drawstring_8x8_var(int w, int h, char *str, int x, int y, uint16_t fg) -{ - unsigned char clength = 0; - - while (*str) - { - clength = cell_drawchar_8x8(w, h, *str, x, y, fg, TRUE, FALSE); - x += clength; - str++; - } -} - - - -void -cell_drawstring_invert_8x8_var(int w, int h, char *str, int x, int y, uint16_t fg, int invert) +uint16_t +cell_drawstring_8x8_var(int w, int h, char *str, int x, int y, uint16_t fg, uint8_t invert) { unsigned char clength = 0; + uint16_t strwidthpx = 0; while (*str) { clength = cell_drawchar_8x8(w, h, *str, x, y, fg, TRUE, invert); x += clength; + strwidthpx += clength; str++; } + + return strwidthpx; + } @@ -1510,6 +1514,7 @@ cell_draw_marker_info(int m, int n, int w, int h) { char buf[24]; int t; + uint16_t slen, strwidthpx = 0; if (n != 0) return; @@ -1525,55 +1530,58 @@ cell_draw_marker_info(int m, int n, int w, int h) if (!trace[t].enabled) continue; - int xpos = 1 + (j%2)*146; + int xpos = 1 + (j%2)*160; int ypos = 1 + (j/2)*8; xpos -= m * CELLWIDTH - CELLOFFSETX; ypos -= n * CELLHEIGHT; - chsnprintf(buf, sizeof buf, "CH%d:", trace[t].channel); - cell_drawstring_invert_5x7(w, h, buf, xpos, ypos, config.trace_color[t], t == uistat.current_trace); - xpos += 20; - trace_get_info(t, buf, sizeof buf); - cell_drawstring_5x7(w, h, buf, xpos, ypos, config.trace_color[t]); + chsnprintf(buf, sizeof buf, "C%d:", trace[t].channel); + strwidthpx = cell_drawstring_8x8_var(w, h, buf, xpos, ypos, config.trace_color[t], t == uistat.current_trace); - xpos += 64; - trace_get_value_string(t, buf, sizeof buf, measured[trace[t].channel][idx], frequencies[idx]); - cell_drawstring_5x7(w, h, buf, xpos, ypos, config.trace_color[t]); + xpos += strwidthpx + 4; + + slen = trace_get_info(t, buf, sizeof buf); + trace_get_value_string(t, buf+slen, (sizeof(buf))-slen, measured[trace[t].channel][idx], frequencies[idx]); + + cell_drawstring_8x8_var(w, h, buf, xpos, ypos, config.trace_color[t], FALSE); j++; } // draw marker frequency - int xpos = 165; + int xpos = 160; int ypos = 1 + (j/2)*8; xpos -= m * CELLWIDTH - CELLOFFSETX; ypos -= n * CELLHEIGHT; + chsnprintf(buf, sizeof buf, "%d:", active_marker + 1); - cell_drawstring_8x8_var(w, h, buf, xpos, ypos, 0xffff); - xpos += 16; + strwidthpx = cell_drawstring_8x8_var(w, h, buf, xpos, ypos, 0xffff, FALSE); + xpos += strwidthpx + 4; if ( (domain_mode & DOMAIN_MODE) == DOMAIN_FREQ ) { frequency_string(buf, sizeof buf, frequencies[idx]); - cell_drawstring_5x7(w, h, buf, xpos, ypos, 0xffff); + cell_drawstring_8x8_var(w, h, buf, xpos, ypos, 0xffff, FALSE); } else { chsnprintf(buf, sizeof buf, "%d ns %.1f m", (uint16_t)(time_of_index(idx) * 1e9), distance_of_index(idx)); - cell_drawstring_5x7(w, h, buf, xpos, ypos, 0xffff); + cell_drawstring_8x8_var(w, h, buf, xpos, ypos, 0xffff, FALSE); } // draw marker delta if ( previous_marker >= 0 && active_marker != previous_marker && markers[previous_marker].enabled ) { int idx0 = markers[previous_marker].index; - xpos = 192; + xpos = 160; xpos -= m * CELLWIDTH - CELLOFFSETX; - ypos += 7; + ypos += 8; + chsnprintf(buf, sizeof buf, "\001%d:", previous_marker+1); - cell_drawstring_5x7(w, h, buf, xpos, ypos, 0xffff); - xpos += 16; + strwidthpx = cell_drawstring_8x8(w, h, buf, xpos, ypos, 0xffff, FALSE); + xpos += strwidthpx + 4; + frequency_string(buf, sizeof buf, frequencies[idx] - frequencies[idx0]); - cell_drawstring_5x7(w, h, buf, xpos, ypos, 0xffff); + cell_drawstring_8x8_var(w, h, buf, xpos, ypos, 0xffff, FALSE); } } diff --git a/ui.c b/ui.c index 938ed9a..480d32b 100644 --- a/ui.c +++ b/ui.c @@ -329,7 +329,7 @@ touch_cal_exec(void) ili9341_fill(0, 0, 320, 240, 0); ili9341_line(320-1, 240-1, 320-1, 240-32, 0xffff); ili9341_line(320-1, 240-1, 320-32, 240-1, 0xffff); - ili9341_drawstring_8x8_var("TOUCH LOWER RIGHT", 200, 220, 0xffff, 0x0000); + ili9341_drawstring_8x8_var("TOUCH LOWER RIGHT", 190, 220, 0xffff, 0x0000); do { status = touch_check();