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 ui_process_touch(void); void SetPowerGrid(int); void SetRefLevel(int); void set_refer_output(int); int get_refer_output(void); void SetAttenuation(int); 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 SetRefpos(int); void SetScale(int); void AllDirty(void); void MenuDirty(void); void ToggleLNA(void); void ToggleAGC(void); void redrawHisto(void); void self_test(void); extern int32_t frequencyExtra; extern int setting_tracking; extern int setting_drive; extern int setting_lna; extern int setting_agc; void SetModulation(int); extern int setting_modulation; // 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_HIGHOUTLEVEL }; #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_HIGHOUTLEVEL }; #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", "ATTENUATION", "ACTUALPOWER", "IF", "SAMPLE TIME", "DRIVE", "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; int current_mode = GetMode(); SetMode(-1); // Force setmode to do something SetMode(current_mode); active_marker = 0; for (int i = 1; i= 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: SetRefpos(uistat.value); break; case KM_ATTENUATION: 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: uistat.value = -5 - uistat.value ; // compensation for dB offset during low output mode SetAttenuation(uistat.value); break; case KM_HIGHOUTLEVEL: uistat.value = uistat.value / 5 - 1 ; // compensation for dB offset during high output mode SetDrive(uistat.value); break; } }