diff --git a/Firmware/menu.cpp b/Firmware/menu.cpp index 5d1385ff..3995faf4 100755 --- a/Firmware/menu.cpp +++ b/Firmware/menu.cpp @@ -39,6 +39,12 @@ menu_func_t menu_menu = 0; static_assert(sizeof(menu_data)>= sizeof(menu_data_edit_t),"menu_data_edit_t doesn't fit into menu_data"); +void menu_data_reset(void) +{ + // Resets the global shared C union. + // This ensures, that the menu entered will find out, that it shall initialize itself. + memset(&menu_data, 0, sizeof(menu_data)); +} void menu_goto(menu_func_t menu, const uint32_t encoder, const bool feedback, bool reset_menu_state) { @@ -49,11 +55,8 @@ void menu_goto(menu_func_t menu, const uint32_t encoder, const bool feedback, bo lcd_encoder = encoder; CRITICAL_SECTION_END; if (reset_menu_state) - { - // Resets the global shared C union. - // This ensures, that the menu entered will find out, that it shall initialize itself. - memset(&menu_data, 0, sizeof(menu_data)); - } + menu_data_reset(); + if (feedback) lcd_quick_feedback(); } else diff --git a/Firmware/menu.h b/Firmware/menu.h index 180485c7..6212edee 100755 --- a/Firmware/menu.h +++ b/Firmware/menu.h @@ -64,7 +64,7 @@ extern uint8_t menu_leaving; //function pointer to the currently active menu extern menu_func_t menu_menu; - +extern void menu_data_reset(void); extern void menu_goto(menu_func_t menu, const uint32_t encoder, const bool feedback, bool reset_menu_state); diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 86f6752d..3781b121 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -7100,7 +7100,7 @@ static void lcd_sd_refresh() #endif menu_top = 0; lcd_encoder = 0; - memset(&menu_data, 0, sizeof(menu_data)); //reset menu state. Forces reloading of cached variables. + menu_data_reset(); //Forces reloading of cached variables. } static void lcd_sd_updir() @@ -7108,7 +7108,7 @@ static void lcd_sd_updir() card.updir(); menu_top = 0; lcd_encoder = 0; - memset(&menu_data, 0, sizeof(menu_data)); //reset menu state. Forces reloading of cached variables. + menu_data_reset(); //Forces reloading of cached variables. } void lcd_print_stop() @@ -8683,7 +8683,7 @@ void menu_action_sddirectory(const char* filename) MYSERIAL.println(dir_names[depth]); card.chdir(filename); lcd_encoder = 0; - memset(&menu_data, 0, sizeof(menu_data)); //reset menu state. Forces reloading of cached variables. + menu_data_reset(); //Forces reloading of cached variables. } /** LCD API **/