From cb3b0af6eebc3ea778657b38147a2414bc83ef72 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Wed, 15 Jul 2020 20:19:20 +0300 Subject: [PATCH] Code cleanup Add base definition for menu callback and adv_callback functions adv_callback - allow more better mod menu draw and process in one place (less error and less code size) --- nanovna.h | 6 +++-- ui.c | 40 ++++++++++++++++------------ ui_sa.c | 79 ++++++++++++++++++++++--------------------------------- 3 files changed, 59 insertions(+), 66 deletions(-) diff --git a/nanovna.h b/nanovna.h index eda710d..230533e 100644 --- a/nanovna.h +++ b/nanovna.h @@ -480,6 +480,7 @@ void redraw_frame(void); void request_to_draw_cells_behind_menu(void); void request_to_draw_cells_behind_numeric_input(void); void redraw_marker(int marker); +void markmap_all_markers(void); void plot_into_index(measurement_t measured); void force_set_markmap(void); void draw_frequencies(void); @@ -568,6 +569,7 @@ void ili9341_set_background(uint16_t fg); void ili9341_clear_screen(void); void blit8BitWidthBitmap(uint16_t x, uint16_t y, uint16_t width, uint16_t height, const uint8_t *bitmap); +void blit16BitWidthBitmap(uint16_t x, uint16_t y, uint16_t width, uint16_t height, const uint16_t *bitmap); void ili9341_drawchar(uint8_t ch, int x, int y); void ili9341_drawstring(const char *str, int x, int y); void ili9341_drawstring_7x13(const char *str, int x, int y); @@ -578,7 +580,6 @@ void ili9341_drawfont(uint8_t ch, int x, int y); void ili9341_read_memory(int x, int y, int w, int h, int len, uint16_t* out); void ili9341_line(int x0, int y0, int x1, int y1); void show_version(void); -void show_logo(void); /* * flash.c @@ -793,7 +794,6 @@ extern void ui_init(void); extern void ui_process(void); int current_menu_is_form(void); -void menu_mode_cb(int, uint8_t); void ui_mode_normal(void); void ui_mode_menu(void); void menu_push_lowoutput(void); @@ -836,6 +836,8 @@ typedef struct uistat { typedef struct ui_button { uint16_t fg; uint16_t bg; + uint8_t border; + int8_t icon; char text[32]; } ui_button_t; diff --git a/ui.c b/ui.c index e38a7c4..b920bc4 100644 --- a/ui.c +++ b/ui.c @@ -108,12 +108,6 @@ static int8_t last_touch_status = EVT_TOUCH_NONE; static int16_t last_touch_x; static int16_t last_touch_y; -//int16_t touch_cal[4] = { 1000, 1000, 10*16, 12*16 }; -//int16_t touch_cal[4] = { 620, 600, 130, 180 }; - -//int awd_count; -//int touch_x, touch_y; - #define KP_CONTINUE 0 #define KP_DONE 1 #define KP_CANCEL 2 @@ -444,9 +438,9 @@ enum { MT_BLANK, // blank menu (nothing draw) MT_SUBMENU, // enter to submenu MT_CALLBACK, // call user function + MT_ADV_CALLBACK, // adv call user function MT_CANCEL, // menu, step back on one level up MT_TITLE, // Title - MT_CLOSE, MT_KEYPAD, MT_ICON = 0x10, MT_HIGH = 0x20, // Only applicable to high mode @@ -457,7 +451,12 @@ enum { #define MT_LEAVE 0x20 #define MT_MASK(x) (0xF & (x)) -typedef void (*menuaction_cb_t)(int item, uint8_t data); +// Call back functions for MT_CALLBACK type +typedef void (*menuaction_cb_t)(int item, uint16_t data); +#define UI_FUNCTION_CALLBACK(ui_function_name) void ui_function_name(int item, uint16_t data) + +typedef void (*menuaction_acb_t)(int item, uint16_t data, ui_button_t *b); +#define UI_FUNCTION_ADV_CALLBACK(ui_function_name) void ui_function_name(int item, uint16_t data, ui_button_t *b) #ifdef __VNA__ static void @@ -731,8 +730,7 @@ get_marker_frequency(int marker) return frequencies[markers[marker].index]; } -static void -menu_marker_op_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_marker_op_cb) { (void)item; uint32_t freq = get_marker_frequency(active_marker); @@ -783,8 +781,7 @@ menu_marker_op_cb(int item, uint8_t data) //redraw_all(); } -static void -menu_marker_search_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_marker_search_cb) { (void)item; int i = -1; @@ -1229,7 +1226,6 @@ menu_invoke(int item) switch (MT_MASK(menu->type)) { case MT_NONE: case MT_BLANK: - case MT_CLOSE: ui_mode_normal(); break; @@ -1239,14 +1235,18 @@ menu_invoke(int item) case MT_CALLBACK: { menuaction_cb_t cb = (menuaction_cb_t)menu->reference; - if (cb == NULL) - return; - (*cb)(item, menu->data); + if (cb) (*cb)(item, menu->data); +// if (!(menu->type & MT_FORM)) + redraw_request |= REDRAW_CAL_STATUS; + break; + } + case MT_ADV_CALLBACK: { + menuaction_acb_t cb = (menuaction_acb_t)menu->reference; + if (cb) (*cb)(item, menu->data, NULL); // if (!(menu->type & MT_FORM)) redraw_request |= REDRAW_CAL_STATUS; break; } - case MT_SUBMENU: menu_push_submenu((const menuitem_t*)menu->reference); break; @@ -1612,8 +1612,14 @@ draw_menu_buttons(const menuitem_t *menu) uint16_t old_bg = button.bg; + // Need replace this obsolete bad function on new MT_ADV_CALLBACK variant menu_item_modify_attribute(menu, i, &button); // before plot_printf to create status text + // MT_ADV_CALLBACK - allow change button data in callback, more easy and correct + if (menu[i].type == MT_ADV_CALLBACK){ + menuaction_acb_t cb = (menuaction_acb_t)menu[i].reference; + if (cb) (*cb)(i, menu[i].data, &button); + } ili9341_set_foreground(button.fg); ili9341_set_background(button.bg); if (menu[i].type & MT_FORM) { diff --git a/ui_sa.c b/ui_sa.c index 3d6a8ae..248e7af 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -17,19 +17,6 @@ * Boston, MA 02110-1301, USA. */ - - -void markmap_all_markers(void); -static void menu_marker_modify_cb(int item, uint8_t data); -extern const menuitem_t menu_marker_modify[]; -void set_sweep_frequency(int type, uint32_t frequency); -uint32_t get_sweep_frequency(int type); -void clearDisplay(void); - -void blit16BitWidthBitmap(uint16_t x, uint16_t y, uint16_t width, uint16_t height, - const uint16_t *bitmap); - - const uint16_t left_icons [] = { #define I_EMPTY 0*16 @@ -534,7 +521,7 @@ extern const menuitem_t menu_top[]; extern const menuitem_t menu_tophigh[]; extern const menuitem_t menu_topultra[]; - void menu_mode_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_mode_cb) { (void)data; set_mode(item); @@ -565,7 +552,7 @@ extern const menuitem_t menu_topultra[]; redraw_request |= REDRAW_CAL_STATUS; } -void menu_load_preset_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_load_preset_cb) { (void)item; if (caldata_recall(data) == -1) { @@ -579,7 +566,7 @@ void menu_load_preset_cb(int item, uint8_t data) menu_move_back_and_leave_ui(); } -void menu_store_preset_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_store_preset_cb) { (void)item; if (data == 100) { @@ -593,7 +580,7 @@ void menu_store_preset_cb(int item, uint8_t data) extern int dirty; -void menu_autosettings_cb(int item, uint8_t data) +UI_FUNCTION_CALLBACK(menu_autosettings_cb) { (void)item; (void)data; @@ -616,7 +603,7 @@ void menu_autosettings_cb(int item, uint8_t data) // draw_cal_status(); } -static void menu_calibrate_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_calibrate_cb) { (void)data; switch (item) { @@ -631,7 +618,7 @@ static void menu_calibrate_cb(int item, uint8_t data) } } -static void menu_scanning_speed_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_scanning_speed_cb) { (void)item; set_step_delay(data); @@ -639,7 +626,7 @@ static void menu_scanning_speed_cb(int item, uint8_t data) ui_mode_normal(); } -static void menu_config_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_config_cb) { (void)data; switch (item) { @@ -670,20 +657,18 @@ static void menu_config_cb(int item, uint8_t data) } } -static void menu_dfu_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_dfu_cb) { (void)data; - switch (item) { - case 0: - enter_dfu(); - } + (void)item; + enter_dfu(); } // const int menu_modulation_value[]={MO_NONE,MO_AM_1, MO_NFM, MO_WFM, MO_EXTERNAL}; const char *menu_modulation_text[]={"NONE","AM 1kHz","AM 10Hz","NARROW FM","WIDE FM", "EXTERNAL"}; -static void menu_modulation_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_modulation_cb) { (void)item; //Serial.println(item); @@ -697,7 +682,7 @@ static void menu_modulation_cb(int item, uint8_t data) // draw_cal_status(); } -static void menu_reffer_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_reffer_cb) { (void)item; //Serial.println(item); @@ -707,7 +692,7 @@ static void menu_reffer_cb(int item, uint8_t data) // draw_cal_status(); } -static void menu_drive_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_drive_cb) { (void)item; //Serial.println(item); @@ -720,7 +705,7 @@ static void menu_drive_cb(int item, uint8_t data) #ifdef __SPUR__ -static void menu_spur_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_spur_cb) { (void)data; (void)item; @@ -733,7 +718,7 @@ static void menu_spur_cb(int item, uint8_t data) } #endif -static void menu_measure_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_measure_cb) { (void)item; menu_move_back(); @@ -843,7 +828,7 @@ static void menu_measure_cb(int item, uint8_t data) // draw_cal_status(); } -static void menu_atten_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_atten_cb) { (void)item; (void)data; @@ -851,7 +836,7 @@ static void menu_atten_cb(int item, uint8_t data) menu_move_back_and_leave_ui(); } -static void menu_atten_high_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_atten_high_cb) { (void)item; setting.auto_attenuation = false; @@ -859,7 +844,7 @@ static void menu_atten_high_cb(int item, uint8_t data) menu_move_back_and_leave_ui(); } -static void menu_reflevel_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_reflevel_cb) { (void)item; (void)data; @@ -867,7 +852,7 @@ static void menu_reflevel_cb(int item, uint8_t data) menu_move_back_and_leave_ui(); } -static void menu_storage_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_storage_cb) { (void)item; switch(data) { @@ -891,15 +876,15 @@ static void menu_storage_cb(int item, uint8_t data) // draw_cal_status(); } -static void menu_average_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_average_cb) { (void)data; set_average(item); menu_move_back_and_leave_ui(); } -static void -menu_marker_select_cb(int item, uint8_t data) +extern const menuitem_t menu_marker_modify[]; +static UI_FUNCTION_CALLBACK(menu_marker_select_cb) { (void)data; // int t; @@ -912,7 +897,7 @@ menu_marker_select_cb(int item, uint8_t data) } } -static void menu_marker_modify_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_marker_modify_cb) { (void)item; if (markers[active_marker].enabled == M_ENABLED) @@ -949,14 +934,14 @@ static void menu_marker_modify_cb(int item, uint8_t data) // last index - for item back button!! static const uint16_t rbwsel_x10[]={0,30,100,300,1000,3000,6000, -1}; -static void menu_rbw_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_rbw_cb) { (void)item; set_RBW(rbwsel_x10[data]); menu_move_back_and_leave_ui(); } -static void menu_unit_cb (int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_unit_cb) { (void)item; set_unit(data); @@ -975,7 +960,7 @@ enum { // menu_move_back_and_leave_ui(); //} -static void menu_trigger_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_trigger_cb) { (void)item; set_trigger(data); @@ -1010,7 +995,7 @@ static void choose_active_marker(void) } #ifdef __ULTRA__ -static void menu_harmonic_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_harmonic_cb) { (void)item; set_harmonic(data); @@ -1018,7 +1003,7 @@ static void menu_harmonic_cb(int item, uint8_t data) } #endif -static void menu_settings2_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_settings2_cb) { (void)item; switch(data) { @@ -1042,7 +1027,7 @@ static void menu_settings2_cb(int item, uint8_t data) // draw_cal_status(); } -static void menu_pause_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_pause_cb) { (void) data; (void) item; @@ -1053,7 +1038,7 @@ static void menu_pause_cb(int item, uint8_t data) // draw_cal_status(); } -static void menu_outputmode_cb(int item, uint8_t data) +static UI_FUNCTION_CALLBACK(menu_outputmode_cb) { (void) data; (void) item; @@ -1062,7 +1047,7 @@ static void menu_outputmode_cb(int item, uint8_t data) } static const uint16_t points_setting[] = {145, 290, -1}; -static void menu_points_cb(int item, uint8_t data){ +static UI_FUNCTION_CALLBACK(menu_points_cb){ (void)item; set_sweep_points(points_setting[data]); draw_menu(); @@ -1776,7 +1761,7 @@ static void menu_item_modify_attribute( if (menu[item].type & MT_FORM && MT_MASK(menu[item].type) == MT_KEYPAD) { keypad_mode = menu[item].data; fetch_numeric_target(); - param_1.text = uistat.text; + param_1.text = button->text; } // Prepare button label plot_printf(button->text, sizeof button->text, menu[item].label, param_1.u, param_2.u);