diff --git a/main.c b/main.c index c9e9406..2fe87af 100644 --- a/main.c +++ b/main.c @@ -1345,7 +1345,7 @@ static void set_frequencies(freq_t start, freq_t stop, uint16_t points) { #ifdef __BANDS__ - if (setting.measurement == M_BANDS) { + if (setting.multi_band) { freq_t span = 0; for (int i=0; i= POINTS_COUNT) idx = POINTS_COUNT-1; int b = _f_band_index[idx]; @@ -1402,7 +1402,7 @@ freq_t getFrequency(uint16_t idx) { #ifdef __BANDS__ int getBand(uint16_t idx) { - if (setting.measurement == M_BANDS) + if (setting.multi_band) return _f_band_index[idx]; return 0; } @@ -1495,7 +1495,7 @@ freq_t get_sweep_frequency(int type) { #ifdef __BANDS__ - if (setting.measurement == M_BANDS) { + if (setting.multi_band) { switch (type) { case ST_START: return getFrequency(0); case ST_STOP: return getFrequency(sweep_points); diff --git a/nanovna.h b/nanovna.h index eb2c936..8215343 100644 --- a/nanovna.h +++ b/nanovna.h @@ -1229,6 +1229,9 @@ typedef struct setting uint8_t draw_line; // uses the trigger level setting #ifdef TINYSA4 uint8_t lock_display; +#endif +#ifdef __BANDS__ + uint8_t multi_band; #endif uint16_t repeat; // 1...100 uint16_t linearity_step; // range equal POINTS_COUNT @@ -1773,9 +1776,9 @@ void interpolate_maximum(int m); void calibrate_modulation(int modulation, int8_t *correction); enum { - M_OFF, M_IMD, M_OIP3, M_PHASE_NOISE, M_SNR, M_PASS_BAND, M_LINEARITY, M_AM, M_FM, M_THD, M_CP, M_NF_TINYSA, M_NF_STORE, M_NF_VALIDATE, M_NF_AMPLIFIER, M_BANDS, M_DECONV,M_MAX + M_OFF, M_IMD, M_OIP3, M_PHASE_NOISE, M_SNR, M_PASS_BAND, M_LINEARITY, M_AM, M_FM, M_THD, M_CP, M_NF_TINYSA, M_NF_STORE, M_NF_VALIDATE, M_NF_AMPLIFIER, M_DECONV,M_MAX }; -#define MEASUREMENT_TEXT "OFF","IMD","OIP3","PN","SNR","PASS","LIN","AM","FM","THD","CP","NF T","NF S","NF V","NF A","MULTI","DECONF" +#define MEASUREMENT_TEXT "OFF","IMD","OIP3","PN","SNR","PASS","LIN","AM","FM","THD","CP","NF T","NF S","NF V","NF A", "DECONF" enum { T_AUTO, T_NORMAL, T_SINGLE, T_DONE, T_UP, T_DOWN, T_MODE, T_PRE, T_POST, T_MID, T_BEEP, diff --git a/plot.c b/plot.c index 4e79e04..08083a8 100644 --- a/plot.c +++ b/plot.c @@ -1102,7 +1102,7 @@ draw_cell(int m, int n) } #endif #ifdef __CHANNEL_POWER__ - if (setting.measurement == M_BANDS) { + if (setting.multi_band) { c = GET_PALTETTE_COLOR(LCD_TRIGGER_COLOR); for (x = 0; x < w; x++) { int idx1 = ((x+x0) * sweep_points) / WIDTH; diff --git a/sa_core.c b/sa_core.c index afe5fd3..de0e933 100644 --- a/sa_core.c +++ b/sa_core.c @@ -4848,7 +4848,7 @@ static bool sweep(bool break_on_operation) if (dirty) { // Calculate new scanning solution #ifdef __BANDS__ - if (setting.measurement == M_BANDS) { + if (setting.multi_band) { set_frequencies(0,0,sweep_points); update_rbw(); } @@ -4886,7 +4886,7 @@ static bool sweep(bool break_on_operation) again: // Waiting for a trigger jumps back to here #ifdef __BANDS__xx - if (setting.measurement == M_BANDS) { + if (setting.multi_band) { do { current_band++; if (current_band > BANDS_MAX) diff --git a/ui.c b/ui.c index 9df4471..5be9704 100644 --- a/ui.c +++ b/ui.c @@ -1468,8 +1468,8 @@ static const menuitem_t menu_limit_modify[]; static const menuitem_t menu_limit_select[]; #endif #ifdef __BANDS__ -static const menuitem_t menu_BAND_modify[]; -static const menuitem_t menu_BAND_select[]; +static const menuitem_t menu_band_modify[]; +static const menuitem_t menu_band_select[]; #endif static const menuitem_t menu_average[]; static const menuitem_t menu_reffer[]; @@ -2874,9 +2874,9 @@ validate: } break; #endif -#ifdef __BANDS__ +#ifdef __BANDS__xx case M_BANDS: - menu_push_submenu(menu_BAND_select); + menu_push_submenu(menu_band_select); goto leave; break; #endif @@ -3200,9 +3200,24 @@ static UI_FUNCTION_ADV_CALLBACK(menu_band_select_acb) setting.bands[active_band].enabled = true; dirty = true; // BANDs_update(); - menu_push_submenu(menu_BAND_modify); + menu_push_submenu(menu_band_modify); +} + +static UI_FUNCTION_ADV_CALLBACK(menu_multi_band_acb) +{ + (void)item; + (void)data; + if(b){ + b->icon = (setting.multi_band?BUTTON_ICON_CHECK:BUTTON_ICON_NOCHECK) ; + return; + } + dirty = true; + setting.multi_band = ! setting.multi_band; + redraw_request|= REDRAW_AREA | REDRAW_FREQUENCY | REDRAW_CAL_STATUS; + if (setting.multi_band) menu_push_submenu(menu_band_select); } +# #endif extern const menuitem_t menu_marker_select[]; @@ -4158,16 +4173,16 @@ static const menuitem_t menu_limit_select[] = { #endif #ifdef __BANDS__ -static const menuitem_t menu_BAND_modify[] = +static const menuitem_t menu_band_modify[] = { { MT_KEYPAD, KM_BAND_START, "START\n\b%s", "Start"}, { MT_KEYPAD, KM_BAND_END, "STOP\n\b%s", "Stop"}, - { MT_KEYPAD, KM_BAND_LEVEL, "LEVEL\n\b%s", "Level"}, - { MT_CALLBACK,0, "DISABLE", menu_BAND_disable_cb}, + { MT_KEYPAD, KM_BAND_LEVEL, "LEVEL\n\b%s", "Level"}, + { MT_CALLBACK,0, "DISABLE", menu_BAND_disable_cb}, { MT_NONE, 0, NULL, menu_back} // next-> menu_back }; -static const menuitem_t menu_BAND_select[] = { +static const menuitem_t menu_band_select[] = { { MT_ADV_CALLBACK | MT_REPEATS, DATA_STARTS_REPEATS(0,BANDS_MAX), MT_CUSTOM_LABEL, menu_band_select_acb }, #ifdef __USE_SD_CARD__ { MT_CALLBACK, FMT_BND_FILE, "BANDS"S_RARROW"\nSD", menu_sdcard_cb}, @@ -4509,9 +4524,9 @@ static const menuitem_t menu_measure2[] = { #ifdef __NOISE_FIGURE__ { MT_SUBMENU | MT_LOW, 0, "NOISE\nFIGURE", menu_measure_noise_figure}, #endif -#ifdef __BANDS__ -{ MT_ADV_CALLBACK, M_BANDS, "MULTI\nBAND", menu_measure_acb}, -#endif +//#ifdef __BANDS__ +//{ MT_ADV_CALLBACK, M_BANDS, "MULTI\nBAND", menu_measure_acb}, +//#endif #ifdef __FFT_DECONV__ { MT_ADV_CALLBACK, M_DECONV, "DECONV", menu_measure_acb}, #endif @@ -4773,6 +4788,9 @@ static const menuitem_t menu_stimulus[] = { { MT_KEYPAD, KM_CENTER, "CENTER\n\b%s", NULL}, { MT_KEYPAD, KM_SPAN, "SPAN\n\b%s", NULL}, { MT_KEYPAD, KM_CW, "ZERO SPAN", NULL}, +#ifdef __BANDS__ + { MT_ADV_CALLBACK, 0, "MULTI\nBAND", menu_multi_band_acb}, +#endif { MT_SUBMENU,0, "RBW", menu_rbw}, #ifdef __VBW__ { MT_SUBMENU, 0, "VBW", menu_vbw}, @@ -5567,7 +5585,13 @@ redraw_cal_status: } quick_menu_y[max_quick_menu] = y; quick_menu[max_quick_menu++] = (menuitem_t *)NULL; - +#ifdef __BANDS__ + if (setting.multi_band){ + ili9341_set_foreground(LCD_BRIGHT_COLOR_GREEN); + lcd_printf(x, y, "MULTI"); + y += 2*YSTEP + YSTEP/2; + } +#endif #ifdef TINYSA4 if (setting.measurement != M_OFF){ ili9341_set_foreground(LCD_BRIGHT_COLOR_GREEN);