From 52dce51f31deb927414dd335bedf623f7b7a8230 Mon Sep 17 00:00:00 2001 From: TT Date: Sun, 11 Dec 2016 21:51:54 +0900 Subject: [PATCH] add freq center/span --- main.c | 102 +++++++++++++++++++++++++++++++++++++++++---------------- plot.c | 49 +++++++++++++++++++-------- ui.c | 4 ++- 3 files changed, 112 insertions(+), 43 deletions(-) diff --git a/main.c b/main.c index 2441a38..2a292d4 100644 --- a/main.c +++ b/main.c @@ -453,35 +453,82 @@ void update_frequencies(void) { int i; - int32_t span = (freq_stop - freq_start)/100; + int32_t span; + int32_t start; + if (freq_stop > 0) { + start = freq_start; + span = (freq_stop - freq_start)/100; + } else { + span = -freq_stop / 100; + start = freq_start - span/2; + } + for (i = 0; i < sweep_points; i++) - frequencies[i] = freq_start + span * i / (sweep_points - 1) * 100; + frequencies[i] = start + span * i / (sweep_points - 1) * 100; // set grid layout set_sweep(freq_start, freq_stop); } + +void +freq_mode_startstop(void) +{ + if (freq_stop <= 0) { + int center = freq_start; + int span = -freq_stop; + freq_start = center - span/2; + freq_stop = center + span/2; + } +} + +void +freq_mode_centerspan(void) +{ + if (freq_stop > 0) { + int start = freq_start; + int stop = freq_stop; + freq_start = (start + stop)/2; // center + freq_stop = -(stop - start); // span + } +} + + void set_sweep_frequency(int type, int frequency) { switch (type) { case ST_START: + ensure_edit_config(); + freq_mode_startstop(); if (freq_start != frequency) { - ensure_edit_config(); freq_start = frequency; update_frequencies(); } break; case ST_STOP: - if (freq_start != frequency) { - ensure_edit_config(); + ensure_edit_config(); + freq_mode_startstop(); + if (freq_stop != frequency) { freq_stop = frequency; update_frequencies(); } break; case ST_CENTER: + ensure_edit_config(); + freq_mode_centerspan(); + if (freq_start != frequency) { + freq_start = frequency; + update_frequencies(); + } break; case ST_SPAN: + ensure_edit_config(); + freq_mode_centerspan(); + if (freq_stop != -frequency) { + freq_stop = -frequency; + update_frequencies(); + } break; } } @@ -495,35 +542,34 @@ static void cmd_sweep(BaseSequentialStream *chp, int argc, char *argv[]) chprintf(chp, "usage: sweep {start(Hz)} [stop] [points]\r\n"); return; } - if (argc >= 1) { - ensure_edit_config(); - int32_t x = atoi(argv[0]); - if (x < 300000) { - chprintf(chp, "bad parameter\r\n"); - return; - } - freq_start = x; - } if (argc >= 2) { - int32_t x = atoi(argv[1]); - if (x < 300000 || x <= freq_start) { - chprintf(chp, "bad parameter\r\n"); + if (strcmp(argv[0], "start") == 0) { + int32_t value = atoi(argv[1]); + set_sweep_frequency(ST_START, value); return; - } - freq_stop = x; - } -#if 0 - if (argc >= 3) { - int32_t x = atoi(argv[2]); - if (x < 1 || x > 1601) { - chprintf(chp, "bad parameter\r\n"); + } else if (strcmp(argv[0], "stop") == 0) { + int32_t value = atoi(argv[1]); + set_sweep_frequency(ST_STOP, value); + return; + } else if (strcmp(argv[0], "center") == 0) { + int32_t value = atoi(argv[1]); + set_sweep_frequency(ST_CENTER, value); + return; + } else if (strcmp(argv[0], "span") == 0) { + int32_t value = atoi(argv[1]); + set_sweep_frequency(ST_SPAN, value); return; } - sweep_points = x; } -#endif - update_frequencies(); + if (argc >= 1) { + int32_t value = atoi(argv[0]); + set_sweep_frequency(ST_START, value); + } + if (argc >= 2) { + int32_t value = atoi(argv[1]); + set_sweep_frequency(ST_STOP, value); + } } diff --git a/plot.c b/plot.c index 192ff7c..1636cfb 100644 --- a/plot.c +++ b/plot.c @@ -74,10 +74,16 @@ void set_sweep(int32_t start, int stop) { int32_t gdigit = 100000000; int32_t grid; - fstart = start; - fstop = stop; - fspan = stop - start; - + if (stop > 0) { + fstart = start; + fstop = stop; + fspan = stop - start; + } else { + fspan = -stop; + fstart = start; + fstop = stop; + } + while (gdigit > 100) { grid = 5 * gdigit; if (fspan / grid >= 4) @@ -1234,16 +1240,31 @@ void draw_frequencies(void) { char buf[24]; - chsnprintf(buf, 24, "START %d.%03d %03d MHz ", - (int)(fstart / 1000000), - (int)((fstart / 1000) % 1000), - (int)(fstart % 1000)); - ili9341_drawstring_5x7(buf, OFFSETX, 233, 0xffff, 0x0000); - chsnprintf(buf, 24, "STOP %d.%03d %03d MHz", - (int)(fstop / 1000000), - (int)((fstop / 1000) % 1000), - (int)(fstop % 1000)); - ili9341_drawstring_5x7(buf, 205, 233, 0xffff, 0x0000); + if (fstop > 0) { + chsnprintf(buf, 24, "START %d.%03d %03d MHz ", + (int)(fstart / 1000000), + (int)((fstart / 1000) % 1000), + (int)(fstart % 1000)); + ili9341_drawstring_5x7(buf, OFFSETX, 233, 0xffff, 0x0000); + chsnprintf(buf, 24, "STOP %d.%03d %03d MHz", + (int)(fstop / 1000000), + (int)((fstop / 1000) % 1000), + (int)(fstop % 1000)); + ili9341_drawstring_5x7(buf, 205, 233, 0xffff, 0x0000); + } else { + int fcenter = fstart; + int fspan = -fstop; + chsnprintf(buf, 24, "CENTER %d.%03d %03d MHz ", + (int)(fcenter / 1000000), + (int)((fcenter / 1000) % 1000), + (int)(fcenter % 1000)); + ili9341_drawstring_5x7(buf, OFFSETX, 233, 0xffff, 0x0000); + chsnprintf(buf, 24, "SPAN %d.%03d %03d MHz", + (int)(fspan / 1000000), + (int)((fspan / 1000) % 1000), + (int)(fspan % 1000)); + ili9341_drawstring_5x7(buf, 205, 233, 0xffff, 0x0000); + } } void diff --git a/ui.c b/ui.c index 91e23e4..8c6f918 100644 --- a/ui.c +++ b/ui.c @@ -772,10 +772,12 @@ ui_process_keypad(void) } else if (c <= 9 && i < NUMINPUT_LEN) buf[i++] = '0' + c; else if (c == KP_PERIOD && i < NUMINPUT_LEN) { + // check period in former input int j; for (j = 0; j < i && buf[j] != '.'; j++) ; - if (buf[j] != '.') + // append period if there are no period + if (i == j) buf[i++] = '.'; } else if (c == KP_BS) { if (i == 0) {