From 4683b88d0c7b2507666465292df761c90222275c Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Tue, 31 Mar 2020 11:07:43 +0200 Subject: [PATCH] Menu update --- main.c | 4 +- ui.c | 38 ++++-- ui_sa.c | 408 +++++++++++++++++++++----------------------------------- 3 files changed, 187 insertions(+), 263 deletions(-) diff --git a/main.c b/main.c index 424b80c..460245e 100644 --- a/main.c +++ b/main.c @@ -117,7 +117,7 @@ const char *info_about[]={ 0 // sentinel }; -static THD_WORKING_AREA(waThread1, 750); +static THD_WORKING_AREA(waThread1, 730); static THD_FUNCTION(Thread1, arg) { (void)arg; @@ -2140,7 +2140,7 @@ VNA_SHELL_FUNCTION(cmd_threads) thread_t *tp; (void)argc; (void)argv; - shell_printf("stklimit| stack|stk free| addr|refs|prio| state| name"VNA_SHELL_NEWLINE_STR); + shell_printf("stklimit| |stk free| addr|refs|prio| state| name"VNA_SHELL_NEWLINE_STR); tp = chRegFirstThread(); do { uint32_t max_stack_use = 0U; diff --git a/ui.c b/ui.c index 544d47b..82f58c3 100644 --- a/ui.c +++ b/ui.c @@ -434,10 +434,13 @@ enum { MT_CALLBACK, MT_CANCEL, MT_TITLE, - MT_CLOSE + MT_CLOSE, + MT_KEYPAD }; -#define MT_FORM 0x80 // Or with menu type to get large button with current value -#define MT_MASK(x) (0x7F & (x)) +#define MT_FORM 0x80 // Or with menu type to get large button with current value +#define MT_BACK 0x40 +#define MT_LEAVE 0x20 +#define MT_MASK(x) (0xF & (x)) typedef void (*menuaction_cb_t)(int item, uint8_t data); @@ -767,15 +770,15 @@ menu_marker_op_cb(int item, uint8_t data) static void menu_marker_search_cb(int item, uint8_t data) { - (void)data; + (void)item; int i = -1; if (active_marker == -1) return; - switch (item) { + switch (data) { case 0: /* maximum */ case 1: /* minimum */ - set_marker_search(item); + set_marker_search(data); i = marker_search(); break; case 2: /* search Left */ @@ -1145,10 +1148,11 @@ menu_move_top(void) static void menu_invoke(int item) { + int status; const menuitem_t *menu = menu_stack[menu_current_level]; menu = &menu[item]; - switch (menu->type & 0x0f) { + switch (MT_MASK(menu->type)) { case MT_NONE: case MT_BLANK: case MT_CLOSE: @@ -1164,12 +1168,30 @@ menu_invoke(int item) if (cb == NULL) return; (*cb)(item, menu->data); + if (!(menu->type & MT_FORM)) + draw_cal_status(); break; } case MT_SUBMENU: menu_push_submenu((const menuitem_t*)menu->reference); break; + + case MT_KEYPAD: + status = btn_wait_release(); + if (status & EVT_BUTTON_DOWN_LONG) { + ui_mode_numeric(menu->data); + // ui_process_numeric(); + } else { + if (menu->type & MT_FORM) { + area_width = AREA_WIDTH_NORMAL - MENU_BUTTON_WIDTH; + redraw_frame(); // Remove form numbers + } + ui_mode_keypad(menu->data); + ui_process_keypad(); + } + draw_cal_status(); + break; } } @@ -1482,7 +1504,7 @@ draw_menu_buttons(const menuitem_t *menu) if (menu[i].type & MT_FORM) { active_button_start = 320 - MENU_FORM_WIDTH; active_button_width = MENU_FORM_WIDTH - 30; // Shorten at the right - if (MT_MASK(menu[i].type) == MT_CALLBACK) { // Only callback can have value + if (MT_MASK(menu[i].type) == MT_KEYPAD) { // Only keypad retrieves value keypad_mode = menu[i].data; fetch_numeric_target(); } diff --git a/ui_sa.c b/ui_sa.c index d997f30..7d479e8 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -228,7 +228,7 @@ void menu_autosettings_cb(int item, uint8_t data) dirty = true; // menu_move_back(); // stay in input menu ui_mode_normal(); - draw_cal_status(); +// draw_cal_status(); } static void menu_calibrate_cb(int item, uint8_t data) @@ -285,16 +285,18 @@ static void menu_dfu_cb(int item, uint8_t data) } } -int menu_modulation_value[]={0, MO_NONE,MO_AM, MO_NFM, MO_WFM}; -char *menu_modulation_text[]={"NONE","AM","NARROW FM","WIDE FM"}; + +const int menu_modulation_value[]={MO_NONE,MO_AM, MO_NFM, MO_WFM}; +const char *menu_modulation_text[]={"NONE","AM","NARROW FM","WIDE FM"}; + static void menu_modulation_cb(int item, uint8_t data) { - (void)data; + (void)item; //Serial.println(item); - SetModulation(menu_modulation_value[item]); + SetModulation(menu_modulation_value[data]); menu_move_back(); // ui_mode_normal(); // Stay in menu mode - draw_cal_status(); +// draw_cal_status(); } @@ -302,24 +304,29 @@ const int menu_reffer_value[]={-1,0,1,2,3,4,5,6}; const char *menu_reffer_text[]={"OFF","30MHz","15MHz","10MHz","4MHz","3MHz","2MHz","1MHz"}; static void menu_reffer_cb(int item, uint8_t data) { - (void)data; + (void)item; //Serial.println(item); - set_refer_output(menu_reffer_value[item]); + set_refer_output(menu_reffer_value[data]); menu_move_back(); // ui_mode_normal(); // Stay in menu mode - draw_cal_status(); +// draw_cal_status(); } -static void menu_reffer_cb2(int item, uint8_t data) +const int menu_drive_value[]={5,10,15,20}; +const char *menu_drive_text[]={"5dBm","10dBm","15dBm","20dBm"}; +static void menu_drive_cb(int item, uint8_t data) { - (void)data; + (void)item; //Serial.println(item); - set_refer_output(menu_reffer_value[item+5]); + SetDrive(data); menu_move_back(); - // ui_mode_normal(); // Stay in menu mode - draw_cal_status(); +// ui_mode_normal(); +// draw_cal_status(); } + + + static void menu_spur_cb(int item, uint8_t data) { (void)data; @@ -337,8 +344,8 @@ static void menu_spur_cb(int item, uint8_t data) static void menu_storage_cb(int item, uint8_t data) { - (void)data; - switch(item) { + (void)item; + switch(data) { case 0: SetStorage(); break; @@ -354,7 +361,7 @@ static void menu_storage_cb(int item, uint8_t data) } menu_move_back(); ui_mode_normal(); - draw_cal_status(); +// draw_cal_status(); } static void menu_average_cb(int item, uint8_t data) @@ -368,16 +375,16 @@ static void menu_average_cb(int item, uint8_t data) static void menu_marker_type_cb(int item, uint8_t data) { - (void)data; + (void)item; if (markers[active_marker].enabled) { - if (item == M_REFERENCE) { + if (data == M_REFERENCE) { for (int i = 0; i