void markmap_all_markers(void); static void menu_marker_type_cb(int item, uint8_t data); void set_sweep_frequency(int type, uint32_t frequency); uint32_t get_sweep_frequency(int type); void clearDisplay(void); void reset_settings(int); //void ui_process_touch(void); void SetPowerGrid(int); void SetRefLevel(int); void set_refer_output(int); int get_refer_output(void); void SetAttenuation(int); int GetAttenuation(void); void set_auto_attenuation(void); void set_auto_reflevel(void); void SetPowerLevel(int); void SetGenerate(int); void SetRBW(int); void SetDrive(int d); void SetIF(int f); void SetStepDelay(int t); extern int setting_rbw; void SetSpur(int); int GetSpur(void); void SetAverage(int); int GetAverage(void); extern int setting_average; void SetStorage(void); void SetClearStorage(void); void SetSubtractStorage(void); void toggle_waterfall(void); void SetMode(int); int GetMode(void); void SetReflevel(int); void SetScale(int); void AllDirty(void); void MenuDirty(void); void ToggleLNA(void); void ToggleAGC(void); void redrawHisto(void); void self_test(void); void set_decay(int); void set_noise(int); extern int32_t frequencyExtra; extern int setting_tracking; extern int setting_drive; extern int setting_lna; extern int setting_agc; extern int setting_decay; extern int setting_noise; extern int setting_auto_reflevel; extern int setting_auto_attenuation; extern int setting_reflevel; extern int setting_scale; void SetModulation(int); extern int setting_modulation; void set_measurement(int); // extern int settingSpeed; extern int setting_step_delay; enum { KM_START=1, KM_STOP, KM_CENTER, KM_SPAN, KM_CW, KM_REFPOS, KM_SCALE, KM_ATTENUATION, KM_ACTUALPOWER, KM_IF, KM_SAMPLETIME, KM_DRIVE, KM_LOWOUTLEVEL, KM_DECAY, KM_NOISE }; #define KP_X(x) (48*(x) + 2 + (320-BUTTON_WIDTH-192)) #define KP_Y(y) (48*(y) + 2) #define KP_PERIOD 10 #define KP_MINUS 11 #define KP_X1 12 #define KP_K 13 #define KP_M 14 #define KP_G 15 #define KP_BS 16 #define KP_INF 17 #define KP_DB 18 #define KP_PLUSMINUS 19 #define KP_KEYPAD 20 #define KP_N 21 #define KP_P 22 typedef struct { uint8_t x:4; uint8_t y:4; int8_t c; } keypads_t; static const keypads_t *keypads; static uint8_t keypads_last_index; static const keypads_t keypads_freq[] = { { 1, 3, KP_PERIOD }, { 0, 3, 0 }, { 0, 2, 1 }, { 1, 2, 2 }, { 2, 2, 3 }, { 0, 1, 4 }, { 1, 1, 5 }, { 2, 1, 6 }, { 0, 0, 7 }, { 1, 0, 8 }, { 2, 0, 9 }, { 3, 0, KP_G }, { 3, 1, KP_M }, { 3, 2, KP_K }, { 3, 3, KP_X1 }, { 2, 3, KP_BS }, { 0, 0, -1 } }; static const keypads_t keypads_scale[] = { { 1, 3, KP_PERIOD }, { 0, 3, 0 }, { 0, 2, 1 }, { 1, 2, 2 }, { 2, 2, 3 }, { 0, 1, 4 }, { 1, 1, 5 }, { 2, 1, 6 }, { 0, 0, 7 }, { 1, 0, 8 }, { 2, 0, 9 }, { 3, 3, KP_X1 }, { 2, 3, KP_BS }, { 0, 0, -1 } }; static const keypads_t keypads_level[] = { { 1, 3, KP_PERIOD }, { 0, 3, 0 }, { 0, 2, 1 }, { 1, 2, 2 }, { 2, 2, 3 }, { 0, 1, 4 }, { 1, 1, 5 }, { 2, 1, 6 }, { 0, 0, 7 }, { 1, 0, 8 }, { 2, 0, 9 }, { 3, 2, KP_MINUS }, { 3, 3, KP_X1 }, { 2, 3, KP_BS }, { 0, 0, -1 } }; static const keypads_t * const keypads_mode_tbl[] = { NULL, // never used keypads_freq, // start keypads_freq, // stop keypads_freq, // center keypads_freq, // span keypads_freq, // cw freq keypads_level, // refpos keypads_scale, // scale keypads_scale, // attenuation keypads_level, // actual power keypads_freq, // IF keypads_level, // sample time keypads_scale, // drive keypads_level, // KM_LOWOUTLEVEL keypads_level, // KM_DECAY keypads_level, // KM_NOISE }; #ifdef __VNA__ static const char * const keypad_mode_label[] = { "START", "STOP", "CENTER", "SPAN", "CW FREQ", "SCALE", "REFPOS", "EDELAY", "VELOCITY%", "DELAY" }; #endif #ifdef __SA__ static const char * const keypad_mode_label[] = { "error", "START", "STOP", "CENTER", "SPAN", "CW FREQ", "REFPOS", "SCALE", "\2ATTENUATE\0 0-31dB", "ACTUALPOWER", "IF", "SAMPLE TIME", "DRIVE", "LEVEL", "LEVEL", "LEVEL" }; #endif // ===[MENU CALLBACKS]========================================================= int generator_enabled = false; extern const menuitem_t menu_lowoutputmode[]; extern const menuitem_t menu_highoutputmode[]; extern const menuitem_t menu_modulation[]; extern const menuitem_t menu_top[]; extern const menuitem_t menu_tophigh[]; static void menu_mode_cb(int item, uint8_t data) { (void)data; SetMode(item-1); // draw_cal_status(); switch (item) { case 1: menu_push_submenu(menu_top); break; case 2: menu_push_submenu(menu_tophigh); break; case 3: menu_push_submenu(menu_lowoutputmode); break; case 4: menu_push_submenu(menu_highoutputmode); break; } // draw_cal_status(); } extern int dirty; void menu_autosettings_cb(int item, uint8_t data) { (void)item; (void)data; reset_settings(GetMode()); active_marker = 0; for (int i = 1; i= 0 && markers[active_marker].enabled) { if (item == 3 && markers[active_marker].enabled == M_TRACKING_ENABLED) mark = true; else if (item == markers[active_marker].mtype) mark = true; } else if (menu == menu_marker_sel) { if (item < MARKERS_MAX && markers[item].enabled) mark = true; } else if (menu == menu_reflevel) { if ((item == 0 && setting_auto_reflevel) || (item == 1 && !setting_auto_reflevel)) mark = true; } else if (menu == menu_atten) { if ((item == 0 && setting_auto_attenuation ) || (item == 1 && !setting_auto_attenuation)) mark = true; } if (mark) { *bg = DEFAULT_MENU_TEXT_COLOR; *fg = config.menu_normal_color; } if (ui_mode == UI_MENU && menu_is_form(menu)) { // if (item == 0) // redraw_frame(); if (item <= 1) { area_width = 0; } }else{ area_width = AREA_WIDTH_NORMAL - MENU_BUTTON_WIDTH; } } static void fetch_numeric_target(void) { switch (keypad_mode) { case KM_START: uistat.value = get_sweep_frequency(ST_START); plot_printf(uistat.text, sizeof uistat.text, "%3.3fMHz", uistat.value / 1000000.0); break; case KM_STOP: uistat.value = get_sweep_frequency(ST_STOP); plot_printf(uistat.text, sizeof uistat.text, "%3.3fMHz", uistat.value / 1000000.0); break; case KM_CENTER: uistat.value = get_sweep_frequency(ST_CENTER); plot_printf(uistat.text, sizeof uistat.text, "%3.3fMHz", uistat.value / 1000000.0); break; case KM_SPAN: uistat.value = get_sweep_frequency(ST_SPAN); plot_printf(uistat.text, sizeof uistat.text, "%3.3fMHz", uistat.value / 1000000.0); break; case KM_CW: uistat.value = get_sweep_frequency(ST_CW); plot_printf(uistat.text, sizeof uistat.text, "%3.3fMHz", uistat.value / 1000000.0); break; case KM_SCALE: uistat.value = setting_scale; plot_printf(uistat.text, sizeof uistat.text, "%ddB/", uistat.value); break; case KM_REFPOS: uistat.value = setting_reflevel; plot_printf(uistat.text, sizeof uistat.text, "%ddB", uistat.value); break; case KM_ATTENUATION: uistat.value = GetAttenuation(); plot_printf(uistat.text, sizeof uistat.text, "%ddB", uistat.value); break; case KM_ACTUALPOWER: uistat.value = settingLevelOffset(); plot_printf(uistat.text, sizeof uistat.text, "%ddB", uistat.value); break; case KM_IF: uistat.value = frequency_IF; plot_printf(uistat.text, sizeof uistat.text, "%3.3fMHz", uistat.value / 1000000.0); break; case KM_SAMPLETIME: uistat.value = setting_step_delay; plot_printf(uistat.text, sizeof uistat.text, "%3duS", uistat.value); break; case KM_DRIVE: uistat.value = setting_drive; plot_printf(uistat.text, sizeof uistat.text, "%3ddB", uistat.value); break; case KM_LOWOUTLEVEL: uistat.value = GetAttenuation(); // compensation for dB offset during low output mode plot_printf(uistat.text, sizeof uistat.text, "%ddB", uistat.value); break; case KM_DECAY: uistat.value = setting_decay; plot_printf(uistat.text, sizeof uistat.text, "%3d", uistat.value); break; case KM_NOISE: uistat.value = setting_noise; plot_printf(uistat.text, sizeof uistat.text, "%3d", uistat.value); break; } { uint32_t x = uistat.value; int n = 0; for (; x >= 10 && n < 9; n++) x /= 10; uistat.digit = n; } // uistat.previous_value = uistat.value; } static void set_numeric_value(void) { switch (keypad_mode) { case KM_START: set_sweep_frequency(ST_START, uistat.value); break; case KM_STOP: set_sweep_frequency(ST_STOP, uistat.value); break; case KM_CENTER: set_sweep_frequency(ST_CENTER, uistat.value); break; case KM_SPAN: set_sweep_frequency(ST_SPAN, uistat.value); break; case KM_CW: set_sweep_frequency(ST_CW, uistat.value); break; case KM_SCALE: set_trace_scale(0, uistat.value / 1000.0); set_trace_scale(1, uistat.value / 1000.0); set_trace_scale(2, uistat.value / 1000.0); break; case KM_REFPOS: setting_auto_reflevel = false; SetReflevel(uistat.value); break; case KM_ATTENUATION: setting_auto_attenuation = false; SetAttenuation(uistat.value); break; case KM_ACTUALPOWER: SetPowerLevel(uistat.value); config_save(); break; case KM_IF: SetIF(uistat.value); config_save(); break; case KM_SAMPLETIME: SetStepDelay(uistat.value); break; case KM_DRIVE: SetDrive(uistat.value); break; case KM_LOWOUTLEVEL: SetAttenuation(uistat.value); break; case KM_DECAY: set_decay(uistat.value); break; case KM_NOISE: set_noise(uistat.value); break; } }