diff --git a/radio/src/gui/menu_general.cpp b/radio/src/gui/menu_general.cpp index 6e25fabe5..d9cd134fc 100644 --- a/radio/src/gui/menu_general.cpp +++ b/radio/src/gui/menu_general.cpp @@ -1636,10 +1636,12 @@ void menuCommonCalib(uint8_t event) void menuGeneralCalib(uint8_t event) { - if (!check_simple(event, e_Calib, menuTabDiag, DIM(menuTabDiag), 0)) { + check_simple(event, e_Calib, menuTabDiag, DIM(menuTabDiag), 0); + + if (menuEvent) { calibrationState = 0; - return; } + TITLE(STR_MENUCALIBRATION); menuCommonCalib(READ_ONLY() ? 0 : event); } diff --git a/radio/src/gui/menu_model.cpp b/radio/src/gui/menu_model.cpp index d449acb9f..7dc1e2d61 100644 --- a/radio/src/gui/menu_model.cpp +++ b/radio/src/gui/menu_model.cpp @@ -358,7 +358,7 @@ void menuModelSelect(uint8_t event) int8_t oldSub = m_posVert; - if (!check_submenu_simple(_event_, MAX_MODELS-1)) return; + check_submenu_simple(_event_, MAX_MODELS-1); #if defined(NAVIGATION_POT2) if (event==0 && p2valdiff<0) { @@ -405,7 +405,7 @@ void menuModelSelect(uint8_t event) killEvents(event); if (s_editMode < 0) { popMenu(); - return; + break; } else if (!s_copyMode) { m_posVert = sub = g_eeGeneral.currModel; @@ -427,7 +427,6 @@ void menuModelSelect(uint8_t event) } else { popMenu(); - return; } } #endif @@ -530,7 +529,7 @@ void menuModelSelect(uint8_t event) case EVT_KEY_LONG(KEY_PAGE): chainMenu(event == EVT_KEY_BREAK(KEY_PAGE) ? menuModelSetup : menuTabModel[DIM(menuTabModel)-1]); killEvents(event); - return; + break; #else #if defined(ROTARY_ENCODER_NAVIGATION) case EVT_ROTARY_LEFT: @@ -543,9 +542,10 @@ void menuModelSelect(uint8_t event) #endif if (sub == g_eeGeneral.currModel) { chainMenu((IS_ROTARY_RIGHT(event) || event == EVT_KEY_FIRST(KEY_RIGHT)) ? menuModelSetup : menuTabModel[DIM(menuTabModel)-1]); - return; } - AUDIO_WARNING2(); + else { + AUDIO_WARNING2(); + } break; #if defined(ROTARY_ENCODER_NAVIGATION) } @@ -1038,7 +1038,9 @@ void menuModelSetup(uint8_t event) MENU_TAB({ 0, 0, CASE_PCBTARANIS(0) 2, CASE_PERSISTENT_TIMERS(0) 0, 0, 2, CASE_PERSISTENT_TIMERS(0) 0, 0, 0, 1, 0, 0, 0, 0, 0, NUM_SWITCHES, NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1, FIELD_PROTOCOL_MAX, 2, CASE_PCBSKY9X(1) CASE_PCBSKY9X(2) }); #endif - if (!MENU_CHECK(menuTabModel, e_ModelSetup, MODEL_SETUP_MAX_LINES)) { + MENU_CHECK(menuTabModel, e_ModelSetup, MODEL_SETUP_MAX_LINES); + + if (menuEvent) { #if defined(DSM2) dsm2Flag = 0; #endif @@ -1048,7 +1050,6 @@ void menuModelSetup(uint8_t event) #if defined(CPUARM) && defined(PXX) pxxFlag[EXTERNAL_MODULE] = 0; #endif - return; } TITLE(STR_MENUSETUP); @@ -2609,7 +2610,6 @@ void menuModelCurveOne(uint8_t event) case EVT_KEY_LONG(KEY_MENU): pushMenu(menuChannelsView); killEvents(event); - return; } DrawCurve(FW); @@ -3026,7 +3026,6 @@ void menuModelExpoOne(uint8_t event) if (event == EVT_KEY_LONG(KEY_MENU)) { pushMenu(menuChannelsView); killEvents(event); - return; } #endif @@ -3226,7 +3225,6 @@ void menuModelMixOne(uint8_t event) if (event == EVT_KEY_LONG(KEY_MENU)) { pushMenu(menuChannelsView); killEvents(event); - return; } #endif @@ -3660,7 +3658,6 @@ void menuModelExpoMix(uint8_t expo, uint8_t event) if (READ_ONLY()) { if (!s_currCh) { pushMenu(expo ? menuModelExpoOne : menuModelMixOne); - return; } } else { @@ -3671,7 +3668,6 @@ void menuModelExpoMix(uint8_t expo, uint8_t event) insertExpoMix(expo, s_currIdx); pushMenu(expo ? menuModelExpoOne : menuModelMixOne); s_copyMode = 0; - return; } else { event = 0; @@ -3691,7 +3687,6 @@ void menuModelExpoMix(uint8_t expo, uint8_t event) } pushMenu(expo ? menuModelExpoOne : menuModelMixOne); s_copyMode = 0; - return; #endif } } @@ -3706,7 +3701,6 @@ void menuModelExpoMix(uint8_t expo, uint8_t event) pushMenu(expo ? menuModelExpoOne : menuModelMixOne); s_copyMode = 0; killEvents(event); - return; } break; #if defined(ROTARY_ENCODER_NAVIGATION) diff --git a/radio/src/gui/menus.cpp b/radio/src/gui/menus.cpp index 15c1c3480..d8fc15a49 100644 --- a/radio/src/gui/menus.cpp +++ b/radio/src/gui/menus.cpp @@ -299,14 +299,14 @@ int8_t checkIncDecGen(uint8_t event, int8_t i_val, int8_t i_min, int8_t i_max) } #endif -bool check_simple(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, vertpos_t maxrow) +void check_simple(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, vertpos_t maxrow) { - return check(event, curr, menuTab, menuTabSize, 0, 0, maxrow); + check(event, curr, menuTab, menuTabSize, 0, 0, maxrow); } -bool check_submenu_simple(check_event_t event, uint8_t maxrow) +void check_submenu_simple(check_event_t event, uint8_t maxrow) { - return check_simple(event, 0, 0, 0, maxrow); + check_simple(event, 0, 0, 0, maxrow); } void title(const pm_char * s) @@ -344,7 +344,6 @@ bool modelHasNotes() char filename[sizeof(MODELS_PATH)+1+sizeof(g_model.header.name)+sizeof(TEXT_EXT)] = MODELS_PATH "/"; char *buf = strcat_modelname(&filename[sizeof(MODELS_PATH)], g_eeGeneral.currModel); strcpy(buf, TEXT_EXT); - return isFileAvailable(filename); } @@ -374,7 +373,7 @@ tmr10ms_t menuEntryTime; #endif #if defined(PCBTARANIS) -bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *horTab, uint8_t horTabMax, vertpos_t maxrow, uint8_t flags) +void check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *horTab, uint8_t horTabMax, vertpos_t maxrow, uint8_t flags) { vertpos_t l_posVert = m_posVert; horzpos_t l_posHorz = m_posHorz; @@ -398,7 +397,6 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t } else { pushMenu(menuChannelsView); - return false; } } break; @@ -421,7 +419,6 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t if (!calibrationState && cc != curr) { chainMenu((MenuFuncP)pgm_read_adr(&menuTab[cc])); - return false; } if (!(flags&CHECK_FLAG_NO_SCREEN_INDEX)) { @@ -496,7 +493,7 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t case EVT_KEY_LONG(KEY_EXIT): s_editMode = 0; // TODO needed? we call ENTRY_UP after which does the same popMenu(); - return false; + break; case EVT_KEY_BREAK(KEY_EXIT): #if defined(ROTARY_ENCODER_NAVIGATION) @@ -522,7 +519,6 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t } else { popMenu(); - return false; } } break; @@ -640,13 +636,11 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t m_posVert = l_posVert; m_posHorz = l_posHorz; - - return true; } #else // defined(PCBTARANIS) -bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *horTab, uint8_t horTabMax, vertpos_t maxrow) +void check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *horTab, uint8_t horTabMax, vertpos_t maxrow) { vertpos_t l_posVert = m_posVert; horzpos_t l_posHorz = m_posHorz; @@ -738,7 +732,6 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t if (cc != curr) { chainMenu((MenuFuncP)pgm_read_adr(&menuTab[cc])); - return false; } #if defined(ROTARY_ENCODER_NAVIGATION) @@ -817,7 +810,7 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t case EVT_KEY_LONG(KEY_EXIT): s_editMode = 0; // TODO needed? we call ENTRY_UP after which does the same popMenu(); - return false; + break; case EVT_KEY_BREAK(KEY_EXIT): #if defined(ROTARY_ENCODER_NAVIGATION) @@ -832,7 +825,6 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t if (l_posVert==0 || !menuTab) { popMenu(); // beeps itself - return false; } else { AUDIO_MENUS(); @@ -979,11 +971,11 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t } } #endif - return true; } #endif MenuFuncP g_menuStack[5]; +uint8_t menuEvent = 0; uint8_t g_menuPos[4]; uint8_t g_menuStackPtr = 0; vertpos_t m_posVert; @@ -992,19 +984,14 @@ horzpos_t m_posHorz; void popMenu() { assert(g_menuStackPtr>0); - g_menuStackPtr = g_menuStackPtr-1; - AUDIO_KEYPAD_UP(); - m_posHorz = 0; - m_posVert = g_menuPos[g_menuStackPtr]; - (*g_menuStack[g_menuStackPtr])(EVT_ENTRY_UP); + menuEvent = EVT_ENTRY_UP; } void chainMenu(MenuFuncP newMenu) { g_menuStack[g_menuStackPtr] = newMenu; - (*newMenu)(EVT_ENTRY); - AUDIO_MENUS(); + menuEvent = EVT_ENTRY; } void pushMenu(MenuFuncP newMenu) @@ -1025,9 +1012,8 @@ void pushMenu(MenuFuncP newMenu) assert(g_menuStackPtr < DIM(g_menuStack)); - AUDIO_MENUS(); g_menuStack[g_menuStackPtr] = newMenu; - (*newMenu)(EVT_ENTRY); + menuEvent = EVT_ENTRY; } const pm_char * s_warning = NULL; diff --git a/radio/src/gui/menus.h b/radio/src/gui/menus.h index eb0f4c1d5..4907ed5b1 100644 --- a/radio/src/gui/menus.h +++ b/radio/src/gui/menus.h @@ -105,7 +105,9 @@ typedef void (*MenuFuncP_PROGMEM)(uint8_t event); extern const MenuFuncP_PROGMEM menuTabModel[]; extern MenuFuncP g_menuStack[5]; +extern uint8_t g_menuPos[4]; extern uint8_t g_menuStackPtr; +extern uint8_t menuEvent; /// goto given Menu, but substitute current menu in menuStack void chainMenu(MenuFuncP newMenu); @@ -267,13 +269,13 @@ int8_t checkIncDecGen(uint8_t event, int8_t i_val, int8_t i_min, int8_t i_max); #if defined(PCBTARANIS) #define CHECK_FLAG_NO_SCREEN_INDEX 1 - bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *horTab, uint8_t horTabMax, vertpos_t maxrow, uint8_t flags=0); + void check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *horTab, uint8_t horTabMax, vertpos_t maxrow, uint8_t flags=0); #else - bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *horTab, uint8_t horTabMax, vertpos_t maxrow); + void check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *horTab, uint8_t horTabMax, vertpos_t maxrow); #endif -bool check_simple(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, vertpos_t maxrow); -bool check_submenu_simple(check_event_t event, uint8_t maxrow); +void check_simple(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, vertpos_t maxrow); +void check_submenu_simple(check_event_t event, uint8_t maxrow); void title(const pm_char * s); #define TITLE(str) title(str) @@ -292,32 +294,32 @@ void title(const pm_char * s); #define MENU(title, tab, menu, lines_count, ...) \ MENU_TAB(__VA_ARGS__); \ - if (!MENU_CHECK(tab, menu, lines_count)) return; \ + MENU_CHECK(tab, menu, lines_count); \ TITLE(title) #define MENU_FLAGS(title, tab, menu, flags, lines_count, ...) \ MENU_TAB(__VA_ARGS__); \ - if (!MENU_CHECK_FLAGS(tab, menu, flags, lines_count)) return; \ + MENU_CHECK_FLAGS(tab, menu, flags, lines_count)); \ TITLE(title) #define SIMPLE_MENU_NOTITLE(tab, menu, lines_count) \ - if (!check_simple(event,menu,tab,DIM(tab),(lines_count)-1)) return; + check_simple(event, menu, tab, DIM(tab), (lines_count)-1); #define SIMPLE_MENU(title, tab, menu, lines_count) \ SIMPLE_MENU_NOTITLE(tab, menu, lines_count); \ TITLE(title) -#define SUBMENU_NOTITLE(lines_count, ...) { \ +#define SUBMENU_NOTITLE(lines_count, ...) \ MENU_TAB(__VA_ARGS__); \ - if (!check(event,0,NULL,0,mstate_tab,DIM(mstate_tab)-1,(lines_count)-1)) return; } + check(event, 0, NULL, 0, mstate_tab, DIM(mstate_tab)-1, (lines_count)-1); #define SUBMENU(title, lines_count, ...) \ MENU_TAB(__VA_ARGS__); \ - if (!check(event,0,NULL,0,mstate_tab,DIM(mstate_tab)-1,(lines_count)-1)) return; \ + check(event, 0, NULL, 0, mstate_tab, DIM(mstate_tab)-1, (lines_count)-1); \ TITLE(title) #define SIMPLE_SUBMENU_NOTITLE(lines_count) \ - if (!check_submenu_simple(event,(lines_count)-1)) return; + check_submenu_simple(event, (lines_count)-1); #define SIMPLE_SUBMENU(title, lines_count) \ SIMPLE_SUBMENU_NOTITLE(lines_count); \ diff --git a/radio/src/gui/view_about.cpp b/radio/src/gui/view_about.cpp index aaa28df29..bfaa301f5 100644 --- a/radio/src/gui/view_about.cpp +++ b/radio/src/gui/view_about.cpp @@ -90,7 +90,7 @@ void menuAboutView(uint8_t event) break; case EVT_KEY_FIRST(KEY_EXIT): chainMenu(menuMainView); - return; + break; } #if defined(PCBTARANIS) diff --git a/radio/src/gui/view_channels.cpp b/radio/src/gui/view_channels.cpp index d2fe664eb..ec9352901 100644 --- a/radio/src/gui/view_channels.cpp +++ b/radio/src/gui/view_channels.cpp @@ -47,7 +47,7 @@ void menuChannelsView(uint8_t event) { case EVT_KEY_BREAK(KEY_EXIT): popMenu(); - return; + break; case EVT_KEY_FIRST(KEY_RIGHT): case EVT_KEY_FIRST(KEY_LEFT): secondPage = !secondPage; diff --git a/radio/src/gui/view_main.cpp b/radio/src/gui/view_main.cpp index 6f637d948..41b892333 100644 --- a/radio/src/gui/view_main.cpp +++ b/radio/src/gui/view_main.cpp @@ -479,7 +479,7 @@ void menuMainViewChannelsMonitor(uint8_t event) case EVT_KEY_BREAK(KEY_PAGE): case EVT_KEY_BREAK(KEY_EXIT): chainMenu(menuMainView); - return; + break; } return menuChannelsView(event); @@ -632,7 +632,6 @@ void menuMainView(uint8_t event) if (g_eeGeneral.view >= VIEW_COUNT) { g_eeGeneral.view = 0; chainMenu(menuMainViewChannelsMonitor); - return; } break; #else @@ -648,7 +647,7 @@ void menuMainView(uint8_t event) case EVT_KEY_STATISTICS: chainMenu(menuStatisticsView); killEvents(event); - return; + break; #endif case EVT_KEY_TELEMETRY: @@ -670,7 +669,7 @@ void menuMainView(uint8_t event) chainMenu(menuStatisticsDebug); #endif killEvents(event); - return; + break; case EVT_KEY_FIRST(KEY_EXIT): #if defined(GVARS) && !defined(PCBSTD) diff --git a/radio/src/gui/view_mavlink.cpp b/radio/src/gui/view_mavlink.cpp index 48f83865f..d56302912 100644 --- a/radio/src/gui/view_mavlink.cpp +++ b/radio/src/gui/view_mavlink.cpp @@ -62,24 +62,19 @@ void menuTelemetryMavlink(uint8_t event) { case EVT_KEY_FIRST(KEY_UP): if (MAVLINK_menu > 0) - { - MAVLINK_menu--; - break; - } + MAVLINK_menu--; else - { - chainMenu(menuMainView); - return; - } + chainMenu(menuMainView); + break; case EVT_KEY_FIRST(KEY_DOWN): if (MAVLINK_menu < MAX_MAVLINK_MENU - 1) - MAVLINK_menu++; + MAVLINK_menu++; break; case EVT_KEY_FIRST(KEY_MENU): return; case EVT_KEY_FIRST(KEY_EXIT): chainMenu(menuMainView); - return; + break; } switch (MAVLINK_menu) { diff --git a/radio/src/gui/view_statistics.cpp b/radio/src/gui/view_statistics.cpp index b13343967..a3e4d23c1 100644 --- a/radio/src/gui/view_statistics.cpp +++ b/radio/src/gui/view_statistics.cpp @@ -44,7 +44,7 @@ void menuStatisticsView(uint8_t event) { case EVT_KEY_FIRST(KEY_UP): chainMenu(menuStatisticsDebug); - return; + break; #if defined(CPUARM) case EVT_KEY_LONG(KEY_MENU): @@ -55,7 +55,7 @@ void menuStatisticsView(uint8_t event) #endif case EVT_KEY_FIRST(KEY_EXIT): chainMenu(menuMainView); - return; + break; } lcd_puts( 1*FW, FH*0, STR_TOTTM1TM2THRTHP); @@ -132,10 +132,10 @@ void menuStatisticsDebug(uint8_t event) break; case EVT_KEY_FIRST(KEY_DOWN): chainMenu(menuStatisticsView); - return; + break; case EVT_KEY_FIRST(KEY_EXIT): chainMenu(menuMainView); - return; + break; } #if defined(PCBSKY9X) diff --git a/radio/src/gui/view_telemetry.cpp b/radio/src/gui/view_telemetry.cpp index dd473f6ed..12a4a8e44 100644 --- a/radio/src/gui/view_telemetry.cpp +++ b/radio/src/gui/view_telemetry.cpp @@ -490,7 +490,7 @@ void menuTelemetryFrsky(uint8_t event) case EVT_KEY_FIRST(KEY_EXIT): killEvents(event); chainMenu(menuMainView); - return; + break; #if defined(PCBTARANIS) case EVT_KEY_LONG(KEY_PAGE): diff --git a/radio/src/gui/view_text.cpp b/radio/src/gui/view_text.cpp index 88da53fc3..47854bdbd 100644 --- a/radio/src/gui/view_text.cpp +++ b/radio/src/gui/view_text.cpp @@ -134,7 +134,7 @@ void menuTextView(uint8_t event) case EVT_KEY_BREAK(KEY_EXIT): popMenu(); - return; + break; } for (int i=0; i