From 6efd8b6a1b22c150332bc4602ce84bcd961d838a Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Fri, 14 Jan 2022 09:08:07 +0100 Subject: [PATCH] Marker command bugs solved --- main.c | 70 +++++++++++++++++++++++------------------- nanovna.h | 1 + sa_cmd.c | 91 +++++++++++++++++++++++++------------------------------ 3 files changed, 80 insertions(+), 82 deletions(-) diff --git a/main.c b/main.c index 8e28c11..8e16f95 100644 --- a/main.c +++ b/main.c @@ -278,6 +278,19 @@ int shell_printf(const char *fmt, ...) return formatted_bytes; } +// Shell commands output +int usage_printf(const char *fmt, ...) +{ + if (shell_stream == NULL) return 0; + va_list ap; + int formatted_bytes = 0; + va_start(ap, fmt); + shell_printf("usage: "); + formatted_bytes += chvprintf(shell_stream, fmt, ap); + va_end(ap); + return formatted_bytes; +} + #ifdef __USE_SERIAL_CONSOLE__ // Serial Shell commands output int shell_serial_printf(const char *fmt, ...) @@ -495,7 +508,7 @@ VNA_SHELL_FUNCTION(cmd_freq) set_frequency(freq); return; usage: - shell_printf("usage: freq {frequency(Hz)}\r\n"); + usage_printf("freq {frequency(Hz)}\r\n"); } #ifdef __USE_RTC__ @@ -525,8 +538,8 @@ VNA_SHELL_FUNCTION(cmd_time) rtc_set_time(dt_buf[1], dt_buf[0]); return; usage: - shell_printf("20%02x/%02x/%02x %02x:%02x:%02x\r\n"\ - "usage: time {[%s] 0-99} or {b 0xYYMMDD 0xHHMMSS}\r\n", time[6], time[5], time[4], time[2], time[1], time[0], time_cmd); + usage_printf("time {[%s] 0-99} or {b 0xYYMMDD 0xHHMMSS}\r\n"\ + "20%02x/%02x/%02x %02x:%02x:%02x\r\n", time_cmd, time[6], time[5], time[4], time[2], time[1], time[0]); } #endif @@ -534,7 +547,7 @@ VNA_SHELL_FUNCTION(cmd_dac) { uint32_t value; if (argc != 1 || argv[0][0] == '?') { - shell_printf("usage: dac {value(0-4095)}\r\n"\ + usage_printf("dac {value(0-4095)}\r\n"\ "current value: %d\r\n", config.dac_value); return; } @@ -554,7 +567,7 @@ VNA_SHELL_FUNCTION(cmd_saveconfig) VNA_SHELL_FUNCTION(cmd_clearconfig) { if (argc != 1 || argv[0][0] == '?') { - shell_printf("usage: clearconfig {protection key}\r\n"); + usage_printf("clearconfig {protection key}\r\n"); return; } @@ -677,7 +690,7 @@ VNA_SHELL_FUNCTION(cmd_data) return; } usage: - shell_printf("usage: data [0-2]\r\n"); + usage_printf("data [0-2]\r\n"); } #ifdef ENABLED_DUMP @@ -794,7 +807,7 @@ VNA_SHELL_FUNCTION(cmd_sd_list) switch (argc){ case 0: search = "*.*";break; case 1: search = argv[0];break; - default: shell_printf("usage: sd_list {pattern}\r\n"); return; + default: usage_printf("sd_list {pattern}\r\n"); return; } shell_printf("sd_list:\r\n"); res = f_findfirst(&dj, &fno, "", search); @@ -811,7 +824,7 @@ VNA_SHELL_FUNCTION(cmd_sd_read) char *buf = (char *)spi_buffer; if (argc != 1 || argv[0][0] == '?') { - shell_printf("usage: sd_read {filename}\r\n"); + usage_printf("sd_read {filename}\r\n"); return; } const char *filename = argv[0]; @@ -839,7 +852,7 @@ VNA_SHELL_FUNCTION(cmd_sd_delete) { FRESULT res; if (argc != 1 || argv[0][0] == '?') { - shell_printf("usage: sd_delete {filename}\r\n"); + usage_printf("sd_delete {filename}\r\n"); return; } if (cmd_sd_card_mount() != FR_OK) @@ -988,7 +1001,7 @@ VNA_SHELL_FUNCTION(cmd_scan) if (argc == 0) goto do_scan; if (argc < 2 || argc > 4) { - shell_printf("usage: scan {start(Hz)} {stop(Hz)} [points] [outmask]\r\n"); + usage_printf("scan {start(Hz)} {stop(Hz)} [points] [outmask]\r\n"); return; } @@ -1033,7 +1046,7 @@ VNA_SHELL_FUNCTION(cmd_hop) { freq_t start, stop, step = 0; if (argc < 1 || argc > 4) { - shell_printf("usage: hop {start(Hz)} {stop(Hz)} {step(Hz) | points} [outmask]\r\n"); + usage_printf("hop {start(Hz)} {stop(Hz)} {step(Hz) | points} [outmask]\r\n"); return; } @@ -1302,6 +1315,8 @@ VNA_SHELL_FUNCTION(cmd_sweep) } else if (argc > 3) { goto usage; } + if (argv[0][0] == '?') + goto usage; freq_t value0 = 0; freq_t value1 = 0; freq_t value2 = 0; @@ -1332,7 +1347,7 @@ VNA_SHELL_FUNCTION(cmd_sweep) set_sweep_points(value2); return; usage: - shell_printf("usage: sweep {start(Hz)} [stop(Hz)] [points]\r\n"\ + usage_printf("sweep {start(Hz)} [stop(Hz)] [points]\r\n"\ "\tsweep {%s}\r\n"\ "\tsweep {%s} {freq(Hz)}\r\n", sweep_cmd2, sweep_cmd); } @@ -1523,6 +1538,8 @@ VNA_SHELL_FUNCTION(cmd_marker) } return; } + if (argv[0][0] == '?') + goto usage; redraw_request |= REDRAW_MARKER; if (get_str_index(argv[0], "off") == 0) { active_marker = MARKER_INVALID; @@ -1541,14 +1558,10 @@ VNA_SHELL_FUNCTION(cmd_marker) markers[t].enabled = TRUE; return; } -#ifdef TINYSA4 int tr; static const char cmd_marker_list[] = "on|off|peak|delta|noise|tracking|trace|trace_aver"; static const char cmd_marker_on_off[] = "off|on"; int marker_mask = 0; -#else - static const char cmd_marker_list[] = "on|off|peak"; -#endif switch (get_str_index(argv[1], cmd_marker_list)) { case 0: markers[t].enabled = TRUE; active_marker = t; return; case 1: markers[t].enabled =FALSE; if (active_marker == t) active_marker = MARKER_INVALID; return; @@ -1570,12 +1583,11 @@ VNA_SHELL_FUNCTION(cmd_marker) else set_marker_index(t, value); return; -#ifdef TINYSA4 // M_NORMAL=0,M_REFERENCE=1, M_DELTA=2, M_NOISE=4, M_STORED=8, M_AVER=16, M_TRACKING=32, M_DELETE=64 // Tracking must be last. case 3: tr=0; - if (argc == 3 &&( argv[2][0] < '0' || argv[2][0] > '9' )) { - tr = my_atoui(argv[2]); + if (argc == 3 && argv[2][0] >= '1' && argv[2][0] <= '9') { + tr = my_atoui(argv[2])-1; markers[t].mtype |= M_DELTA; markers[t].ref= tr; } else if (get_str_index(argv[2],cmd_marker_on_off) == 0) { @@ -1589,9 +1601,9 @@ VNA_SHELL_FUNCTION(cmd_marker) marker_mask = M_TRACKING; goto set_mask; case 6: - tr=2; - if (argc == 3 &&( argv[2][0] < '0' || argv[2][0] > '9' )) { - tr = my_atoui(argv[2]); + tr=0; + if (argc == 3 && argv[2][0] >= '1' && argv[2][0] <= '9') { + tr = my_atoui(argv[2])-1; } markers[t].trace= tr; return; @@ -1606,14 +1618,9 @@ VNA_SHELL_FUNCTION(cmd_marker) } } return; -#endif } usage: -#ifdef TINYSA4 - shell_printf("marker [n] [%s|{freq}|{index}] [on|off]\r\n", cmd_marker_list); -#else - shell_printf("marker [n] [%s|{freq}|{index}]\r\n", cmd_marker_list); -#endif + shell_printf("marker [n] [%s|{freq}] [{index}|%s]\r\n", cmd_marker_list, cmd_marker_on_off); } VNA_SHELL_FUNCTION(cmd_touchcal) @@ -1764,7 +1771,7 @@ VNA_SHELL_FUNCTION(cmd_color) uint32_t color; int i; if (argc != 2) { - shell_printf("usage: color {id} {rgb24}\r\n"); + usage_printf("color {id} {rgb24}\r\n"); for (i=0; i < MAX_PALETTE; i++) { color = GET_PALTETTE_COLOR(i); color = HEXRGB(color); @@ -2003,8 +2010,7 @@ VNA_SHELL_FUNCTION(cmd_help) scp++; } scp = commands; - shell_printf(VNA_SHELL_NEWLINE_STR); - shell_printf("Other commands:"); + shell_printf("\r\nOther commands:"); while (scp->sc_name != NULL #ifdef __SINGLE_LETTER__ && scp->sc_function != cmd_y @@ -2014,7 +2020,7 @@ VNA_SHELL_FUNCTION(cmd_help) shell_printf(" %s", scp->sc_name); scp++; } - shell_printf(VNA_SHELL_NEWLINE_STR); + shell_printf("\r\nEnter for more info: {command} ?\r\n"); return; } diff --git a/nanovna.h b/nanovna.h index 2d1ae57..d594e2f 100644 --- a/nanovna.h +++ b/nanovna.h @@ -212,6 +212,7 @@ void my_microsecond_delay(int t); float my_atof(const char *p); freq_t my_atoui(const char *p); int shell_printf(const char *fmt, ...); +int usage_printf(const char *fmt, ...); #ifdef __REMOTE_DESKTOP__ extern uint8_t remote_mouse_down; diff --git a/sa_cmd.c b/sa_cmd.c index a613751..9a705bb 100644 --- a/sa_cmd.c +++ b/sa_cmd.c @@ -26,7 +26,7 @@ VNA_SHELL_FUNCTION(cmd_mode) static const char cmd_in_out[] = "input|output"; if (argc != 2) { usage: - shell_printf("usage: mode %s %s\r\n", cmd_low_high,cmd_in_out); + usage_printf("mode %s %s\r\n", cmd_low_high,cmd_in_out); return; } int lh = get_str_index(argv[0], cmd_low_high); @@ -60,7 +60,7 @@ VNA_SHELL_FUNCTION(cmd_modulation ) static const char cmd_mod[] = "off|am|nfm|wfm|extern|freq"; if (argc < 1) { usage: - shell_printf("usage: modulation %s 100..6000\r\n", cmd_mod); + usage_printf("modulation %s 100..6000\r\n", cmd_mod); return; } static const int cmd_mod_val[] = { MO_NONE, MO_AM, MO_NFM, MO_WFM, MO_EXTERNAL, -1}; @@ -86,7 +86,7 @@ VNA_SHELL_FUNCTION(cmd_calc ) #endif if (argc < 1) { usage: - shell_printf("usage: calc [{trace#}] %s\r\n", cmd_cal); + usage_printf("calc [{trace#}] %s\r\n", cmd_cal); return; } int next_arg = 0; @@ -116,7 +116,7 @@ int generic_option_cmd( const char *cmd, const char *cmd_list, int argc, char *a { if (argc != 1) { usage: - shell_printf("usage: %s %s\r\n", cmd, cmd_list); + usage_printf("%s %s\r\n", cmd, cmd_list); return -1; } int m = get_str_index(argv, cmd_list); // this will catch the ? @@ -172,18 +172,18 @@ VNA_SHELL_FUNCTION(cmd_output) VNA_SHELL_FUNCTION(cmd_load) { - if (argc != 1 || argv[0][0] == '?') - goto usage; - uint16_t a = my_atoui(argv[0]); - if (a <= 4) { - if (caldata_recall(a) == -1) { - if (a == 0) - reset_settings(setting.mode); - } + if (argc != 1 || argv[0][0] == '?') { + usage: + usage_printf("load 0..4\r\n"); return; } -usage: - shell_printf("usage: load 0..4\r\n"); + uint16_t a = my_atoui(argv[0]); + if (a > 4) + goto usage; + if (caldata_recall(a) == -1) { + if (a == 0) + reset_settings(setting.mode); + } } #ifdef TINYSA4 @@ -194,8 +194,7 @@ VNA_SHELL_FUNCTION(cmd_lna2) { int a; if (argc != 1 || argv[0][0] == '?') { -// usage: - shell_printf("usage: lna2 0..7|auto\r\n"); + usage_printf("lna2 0..7|auto\r\n"); return; } if (get_str_index(argv[0],"auto") == 0) { @@ -212,8 +211,7 @@ VNA_SHELL_FUNCTION(cmd_agc) { int a; if (argc != 1 || argv[0][0] == '?') { -// usage: - shell_printf("usage: agc 0..7|auto\r\n"); + usage_printf("agc 0..7|auto\r\n"); return; } if (get_str_index(argv[0],"auto") == 0) { @@ -232,8 +230,7 @@ VNA_SHELL_FUNCTION(cmd_agc) VNA_SHELL_FUNCTION(cmd_attenuate) { if (argc != 1 || argv[0][0] == '?') { - usage: - shell_printf("usage: attenuate 0..31|auto\r\n"); + usage_printf("attenuate 0..31|auto\r\n"); return; } if (get_str_index(argv[0],"auto") == 0) { @@ -252,11 +249,10 @@ VNA_SHELL_FUNCTION(cmd_attenuate) VNA_SHELL_FUNCTION(cmd_level) { if (argc != 1 || argv[0][0] == '?') { -usage: if (setting.mode==M_GENLOW) - shell_printf("usage: level -76..-6\r\n"); + usage_printf("level -76..-6\r\n"); if (setting.mode==M_GENHIGH) - shell_printf("usage: level -38..13\r\n"); + usage_printf("level -38..13\r\n"); return; } float f = my_atof(argv[0]); @@ -266,8 +262,7 @@ usage: VNA_SHELL_FUNCTION(cmd_sweeptime) { if (argc != 1 || argv[0][0] == '?') { - usage: - shell_printf("usage: sweeptime 0.003..60\r\n"); + usage_printf("sweeptime 0.003..60\r\n"); return; } float f = my_atof(argv[0]); @@ -279,8 +274,7 @@ VNA_SHELL_FUNCTION(cmd_sweeptime) VNA_SHELL_FUNCTION(cmd_ext_gain) { if (argc != 1 || argv[0][0] == '?') { -usage: - shell_printf("usage: ext_gain -100.0..+100.0\r\n"); + usage_printf("ext_gain -100.0..+100.0\r\n"); return; } float o = my_atof(argv[0]); @@ -293,8 +287,7 @@ usage: VNA_SHELL_FUNCTION(cmd_levelchange) { if (argc != 1 || argv[0][0] == '?') { -usage: - shell_printf("usage: levelchange -70..+70\r\n"); + usage_printf("levelchange -70..+70\r\n"); return; } float f = my_atof(argv[0]); @@ -373,7 +366,7 @@ VNA_SHELL_FUNCTION(cmd_deviceid) config.deviceid = v; } else { usage: - shell_printf("usage: deviceid []\r\n"); + usage_printf("deviceid []\r\n"); } } @@ -381,8 +374,7 @@ VNA_SHELL_FUNCTION(cmd_sweep_voltage) { float value; if (argc != 1 || argv[0][0] == '?') { - usage: - shell_printf("usage: sweep_voltage {value(0-3.3)}\r\n"\ + usage_printf("sweep_voltage {value(0-3.3)}\r\n"\ "current value: %f\r\n", config.sweep_voltage); return; } @@ -395,7 +387,7 @@ VNA_SHELL_FUNCTION(cmd_nf) { if (argc != 1 || argv[0][0] == '?') { usage: - shell_printf("usage: nf {value}\r\n"\ + usage_printf("nf {value}\r\n"\ "%f\r\n", config.noise_figure); return; } @@ -409,9 +401,9 @@ VNA_SHELL_FUNCTION(cmd_rbw) if (argc != 1 || argv[0][0] == '?') { usage: #ifdef TINYSA4 - shell_printf("usage: rbw 0.3..850|auto\r\n"); + usage_printf("rbw 0.3..850|auto\r\n"); #else - shell_printf("usage: rbw 2..600|auto\r\n"); + usage_printf("rbw 2..600|auto\r\n"); #endif return; } @@ -437,7 +429,7 @@ VNA_SHELL_FUNCTION(cmd_if) { if (argc != 1 || argv[0][0] == '?') { usage: - shell_printf("usage: if {433M..435M}\r\n%QHz\r\n", setting.frequency_IF); + usage_printf("if {433M..435M}\r\n%QHz\r\n", setting.frequency_IF); return; } freq_t a = (freq_t)my_atoi(argv[0]); @@ -450,8 +442,7 @@ VNA_SHELL_FUNCTION(cmd_if) VNA_SHELL_FUNCTION(cmd_zero) { if (argc != 1 || argv[0][0] == '?') { -usage: - shell_printf("usage: zero {level}\r\n%ddBm\r\n", config.ext_zero_level); + usage_printf("zero {level}\r\n%ddBm\r\n", config.ext_zero_level); return; } config.ext_zero_level = my_atoi(argv[0]); @@ -461,7 +452,7 @@ usage: VNA_SHELL_FUNCTION(cmd_ultra_start) { if (argc != 1 || argv[0][0] == '?') { - shell_printf("usage: ultra_start {0..4290M}\r\n%QHz\r\n", config.ultra_threshold); + usage_printf("ultra_start {0..4290M}\r\n%QHz\r\n", config.ultra_threshold); return; } else { freq_t a = (freq_t)my_atoi(argv[0]); @@ -476,7 +467,7 @@ VNA_SHELL_FUNCTION(cmd_if1) { if (argc != 1 || argv[0][0] == '?') { usage: - shell_printf("usage: if1 {975M..979M}\r\n%QHz\r\n", config.frequency_IF1); + usage_printf("if1 {975M..979M}\r\n%QHz\r\n", config.frequency_IF1); return; } else { freq_t a = (freq_t)my_atoi(argv[0]); @@ -545,7 +536,7 @@ usage: VNA_SHELL_FUNCTION(cmd_selftest) { if (argc < 1 || argc > 2 || argv[0][0] == '?') { - shell_printf("usage: selftest (1-3) [arg]\r\n"); + usage_printf("selftest (1-3) [arg]\r\n"); return; } setting.test = my_atoi(argv[0]); @@ -587,7 +578,7 @@ VNA_SHELL_FUNCTION(cmd_x) if (argc != 1) { - shell_printf("usage: x value(0-FFFFFFFF)\r\n"); + usage_printf("x value(0-FFFFFFFF)\r\n"); return; } reg = xtoi(argv[0]); @@ -753,7 +744,7 @@ VNA_SHELL_FUNCTION(cmd_v) VNA_SHELL_FUNCTION(cmd_y) { if (argc < 1) { - shell_printf("usage: y {addr(0-95)} [value(0-0xFF)]\r\n"); + usage_printf("y {addr(0-95)} [value(0-0xFF)]\r\n"); return; } #ifdef __SI4432__ @@ -785,7 +776,7 @@ VNA_SHELL_FUNCTION(cmd_y) VNA_SHELL_FUNCTION(cmd_z) { if (argc != 1) { - shell_printf("usage: z 0..30000\r\n%d\r\n", SI4432_step_delay); + usage_printf("z 0..30000\r\n%d\r\n", SI4432_step_delay); return; } if (argc == 1) { @@ -797,7 +788,7 @@ VNA_SHELL_FUNCTION(cmd_z) VNA_SHELL_FUNCTION(cmd_n) { if (argc != 1) { - shell_printf("usage: z 0..30000\r\n%d\r\n", SI4432_offset_delay); + usage_printf("z 0..30000\r\n%d\r\n", SI4432_offset_delay); return; } if (argc == 1) { @@ -811,7 +802,7 @@ VNA_SHELL_FUNCTION(cmd_z) { static const char cmd_z_list[] = "t|r|i"; if (argc != 1) { - shell_printf("usage: z %s\r\n", cmd_z_list); + usage_printf("z %s\r\n", cmd_z_list); return; } if (argc == 1) { @@ -968,7 +959,7 @@ VNA_SHELL_FUNCTION(cmd_correction) return; } if (argc != 4) { - shell_printf("usage: correction %s %s frequency(Hz) value(dB)\r\n", cmd, range); + usage_printf("correction %s %s frequency(Hz) value(dB)\r\n", cmd, range); return; } int i = my_atoi(argv[1]); @@ -985,7 +976,7 @@ VNA_SHELL_FUNCTION(cmd_scanraw) freq_t start, stop; uint32_t points = sweep_points; if (argc < 2 || argc > 3) { - shell_printf("usage: scanraw {start(Hz)} {stop(Hz)} [points]\r\n"); + usage_printf("scanraw {start(Hz)} {stop(Hz)} [points]\r\n"); return; } @@ -1046,7 +1037,7 @@ VNA_SHELL_FUNCTION(cmd_caloutput) { static const char cmd[] = "off|30|15|10|4|3|2|1"; if (argc != 1) { - shell_printf("usage: caloutput %s\r\n", cmd); + usage_printf("caloutput %s\r\n", cmd); return; } int m = get_str_index(argv[0], cmd); @@ -1060,7 +1051,7 @@ VNA_SHELL_FUNCTION(cmd_q) static const char cmd[] = "s|d|a"; if (argc < 1) { usage: - shell_printf("usage: q s|d 0..18|a 0..63 %s\r\n", cmd); + usage_printf("q s|d 0..18|a 0..63 %s\r\n", cmd); test_output=false; return; }