diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 1ed596896..8786156b5 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -247,11 +247,6 @@ static void lcd_delta_calibrate_menu(); static void lcd_quick_feedback();//Cause an LCD refresh, and give the user visual or audible feedback that something has happened /* Different types of actions that can be used in menu items. */ -static void menu_action_back(menuFunc_t data = 0); -#define menu_action_back_RAM menu_action_back -static void menu_action_submenu(menuFunc_t data); -static void menu_action_gcode(const char* pgcode); -static void menu_action_function(menuFunc_t data); static void menu_action_setlang(unsigned char lang); static void menu_action_sdfile(const char* filename, char* longFilename); static void menu_action_sddirectory(const char* filename, char* longFilename); @@ -298,14 +293,10 @@ static void menu_action_setting_edit_callback_long5(const char* pstr, unsigned l #endif #endif -/* Helper macros for menus */ -#define START_MENU() do { \ - if (encoderPosition > 0x8000) encoderPosition = 0; \ - if (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM < currentMenuViewOffset) currentMenuViewOffset = encoderPosition / ENCODER_STEPS_PER_MENU_ITEM;\ - uint8_t _lineNr = currentMenuViewOffset, _menuItemNr; \ - bool wasClicked = LCD_CLICKED;\ - for(uint8_t _drawLineNr = 0; _drawLineNr < LCD_HEIGHT; _drawLineNr++, _lineNr++) { \ - _menuItemNr = 0; +uint8_t _lineNr = 0; +uint8_t _menuItemNr = 0; +uint8_t _drawLineNr = 0; +bool wasClicked = false; #define MENU_ITEM(type, label, args...) do { \ if (_menuItemNr == _lineNr) { \ @@ -329,10 +320,6 @@ static void menu_action_setting_edit_callback_long5(const char* pstr, unsigned l #define MENU_ITEM_DUMMY() do { _menuItemNr++; } while(0) #define MENU_ITEM_EDIT(type, label, args...) MENU_ITEM(setting_edit_ ## type, label, (label) , ## args ) #define MENU_ITEM_EDIT_CALLBACK(type, label, args...) MENU_ITEM(setting_edit_callback_ ## type, label, (label) , ## args ) -#define END_MENU() \ - if (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM >= _menuItemNr) encoderPosition = _menuItemNr * ENCODER_STEPS_PER_MENU_ITEM - 1; \ - if ((uint8_t)(encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) >= currentMenuViewOffset + LCD_HEIGHT) { currentMenuViewOffset = (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) - LCD_HEIGHT + 1; lcdDrawUpdate = 1; _lineNr = currentMenuViewOffset - 1; _drawLineNr = -1; } \ - } } while(0) /** Used variables to keep track of the menu */ #ifndef REPRAPWORLD_KEYPAD @@ -367,8 +354,8 @@ uint8_t lcdDrawUpdate = 2; /* Set to none-zero when the LCD nee /** * @brief Go to menu * - * In MENU_ITEM(submenu,... ) use MENU_ITEM(back,...) or - * menu_action_back() and menu_action_submenu() instead, otherwise menuStack will be broken. + * In MENU_ITEM_SUBMENU_P(,... ) use MENU_ITEM(back,...) or + * menu_back() and menu_submenu() instead, otherwise menuStack will be broken. * * It is acceptable to call lcd_goto_menu(menu) directly from MENU_ITEM(function,...), if destination menu * is the same, from which function was called. @@ -416,6 +403,11 @@ int lcd_puts_P(const char* str) return fputs_P(str, lcdout); } +int lcd_putc(int c) +{ + return fputc(c, lcdout); +} + int lcd_printf_P(const char* format, ...) { va_list args; @@ -425,31 +417,139 @@ int lcd_printf_P(const char* format, ...) return ret; } -#ifdef DEBUG_MENU_PRINTF_TEST -int menu_item_printf_P(uint8_t& item, uint8_t line, const char* format, ...) +#define MENU_BEGIN() menu_start(); for(_drawLineNr = 0; _drawLineNr < LCD_HEIGHT; _drawLineNr++, _lineNr++) { _menuItemNr = 0; +void menu_start(void) +{ + if (encoderPosition > 0x8000) encoderPosition = 0; + if (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM < currentMenuViewOffset) + currentMenuViewOffset = encoderPosition / ENCODER_STEPS_PER_MENU_ITEM; + _lineNr = currentMenuViewOffset; + wasClicked = LCD_CLICKED; +} + +#define MENU_END() menu_end(); } +void menu_end(void) +{ + if (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM >= _menuItemNr) + encoderPosition = _menuItemNr * ENCODER_STEPS_PER_MENU_ITEM - 1; + if ((uint8_t)(encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) >= currentMenuViewOffset + LCD_HEIGHT) + { + currentMenuViewOffset = (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) - LCD_HEIGHT + 1; + lcdDrawUpdate = 1; + _lineNr = currentMenuViewOffset - 1; + _drawLineNr = -1; + } +} + +void menu_back(void) +{ + MenuStack::Record record = menuStack.pop(); + lcd_goto_menu(record.menu); + encoderPosition = record.position; +} + +void menu_submenu(menuFunc_t submenu) +{ + menuStack.push(currentMenu, encoderPosition); + lcd_goto_menu(submenu); +} + +int menu_item_printf_P(char type_char, const char* format, ...) { va_list args; va_start(args, format); int ret = 0; - if (item == line) - { - if (lcdDrawUpdate) - { - //ret = - lcd.setCursor(0, line); - lcd.print(' '); - int cnt = vfprintf_P(lcdout, format, args); - for (int i = cnt; i < 19; i++) - lcd.print(' '); - lcd.print('>'); - } - } - item++; + lcd.setCursor(0, _drawLineNr); + if ((encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) == _menuItemNr) + lcd.print('>'); + else + lcd.print(' '); + int cnt = vfprintf_P(lcdout, format, args); + for (int i = cnt; i < 18; i++) + lcd.print(' '); + lcd.print(type_char); va_end(args); return ret; } -#endif //DEBUG_MENU_PRINTF_TEST +#define MENU_ITEM_SUBMENU_P(str, submenu) if (menu_item_submenu_P(str, submenu)) return +uint8_t menu_item_submenu_P(const char* str, menuFunc_t submenu) +{ + if (_menuItemNr == _lineNr) + { + if (lcdDrawUpdate) menu_item_printf_P(LCD_STR_ARROW_RIGHT[0], str); + if (wasClicked && (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) == _menuItemNr) + { + lcd_implementation_quick_feedback(); + lcdDrawUpdate = 2; + button_pressed = false; + menuStack.push(currentMenu, encoderPosition); + lcd_goto_menu(submenu, 0, false, true); + return 1; + } + } + _menuItemNr++; + return 0; +} + +#define MENU_ITEM_BACK_P(str) if (menu_item_back_P(str)) return +uint8_t menu_item_back_P(const char* str) +{ + if (_menuItemNr == _lineNr) + { + if (lcdDrawUpdate) menu_item_printf_P(LCD_STR_UPLEVEL[0], str); + if (wasClicked && (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) == _menuItemNr) + { + MenuStack::Record record = menuStack.pop(); + lcd_implementation_quick_feedback(); + lcdDrawUpdate = 2; + button_pressed = false; + lcd_goto_menu(record.menu, false, true); + encoderPosition = record.position; + return 1; + } + } + _menuItemNr++; + return 0; +} + +#define MENU_ITEM_FUNCTION_P(str, func) if (menu_item_function_P(str, func)) return +uint8_t menu_item_function_P(const char* str, menuFunc_t func) +{ + if (_menuItemNr == _lineNr) + { + if (lcdDrawUpdate) menu_item_printf_P(' ', str); + if (wasClicked && (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) == _menuItemNr) + { + if (func) func(); + lcd_implementation_quick_feedback(); + lcdDrawUpdate = 2; + button_pressed = false; + return 1; + } + } + _menuItemNr++; + return 0; +} + +#define MENU_ITEM_GCODE_P(str, str_gcode) if (menu_item_gcode_P(str, str_gcode)) return +uint8_t menu_item_gcode_P(const char* str, const char* str_gcode) +{ + if (_menuItemNr == _lineNr) + { + if (lcdDrawUpdate) menu_item_printf_P(' ', str); + if (wasClicked && (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) == _menuItemNr) + { + if (str_gcode) enquecommand_P(str_gcode); + lcd_implementation_quick_feedback(); + lcdDrawUpdate = 2; + button_pressed = false; + return 1; + } + } + _menuItemNr++; + return 0; +} static void lcd_status_screen() { @@ -562,7 +662,7 @@ static void lcd_status_screen() if (current_click && (lcd_commands_type != LCD_COMMAND_STOP_PRINT)) //click is aborted unless stop print finishes { menuStack.reset(); //redundant, as already done in lcd_return_to_status(), just to be sure - menu_action_submenu(lcd_main_menu); + menu_submenu(lcd_main_menu); lcd_implementation_init( // to maybe revive the LCD if static electricity killed it. #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) currentMenu == lcd_status_screen @@ -1006,7 +1106,7 @@ void lcd_commands() lcd_implementation_clear(); menuStack.reset(); - menu_action_submenu(lcd_babystep_z); + menu_submenu(lcd_babystep_z); enquecommand_P(PSTR("G1 X60.0 E9.0 F1000.0")); //intro line enquecommand_P(PSTR("G1 X100.0 E12.5 F1000.0")); //intro line enquecommand_P(PSTR("G92 E0.0")); @@ -1571,7 +1671,7 @@ static void lcd_menu_extruder_info() if (lcd_clicked()) { - menu_action_back(); + menu_back(); } } @@ -1592,7 +1692,7 @@ static void lcd_menu_fails_stats_total() if (lcd_clicked()) { lcd_quick_feedback(); - menu_action_back(); + menu_back(); } } @@ -1612,7 +1712,7 @@ static void lcd_menu_fails_stats_print() if (lcd_clicked()) { lcd_quick_feedback(); - menu_action_back(); + menu_back(); } } /** @@ -1624,11 +1724,11 @@ static void lcd_menu_fails_stats_print() */ static void lcd_menu_fails_stats() { - START_MENU(); - MENU_ITEM(back, _T(MSG_MAIN), 0); - MENU_ITEM(submenu, PSTR("Last print"), lcd_menu_fails_stats_print); - MENU_ITEM(submenu, PSTR("Total"), lcd_menu_fails_stats_total); - END_MENU(); + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_MAIN)); + MENU_ITEM_SUBMENU_P(PSTR("Last print"), lcd_menu_fails_stats_print); + MENU_ITEM_SUBMENU_P(PSTR("Total"), lcd_menu_fails_stats_total); + MENU_END(); } #elif defined(PAT9125) /** @@ -1653,7 +1753,7 @@ static void lcd_menu_fails_stats() lcd_printf_P(PSTR(ESC_H(0,0) "Last print failures" ESC_H(1,1) "Filam. runouts %-3d" ESC_H(0,2) "Total failures" ESC_H(1,3) "Filam. runouts %-3d"), filamentLast, filamentTotal); if (lcd_clicked()) { - menu_action_back(); + menu_back(); } } #endif //TMC2130 @@ -1675,7 +1775,7 @@ static void lcd_menu_debug() if (lcd_clicked()) { lcd_quick_feedback(); - menu_action_back(); + menu_back(); } } #endif /* DEBUG_BUILD */ @@ -1691,7 +1791,7 @@ static void lcd_menu_temperatures() if (lcd_clicked()) { - menu_action_back(); + menu_back(); } } @@ -1708,7 +1808,7 @@ static void lcd_menu_voltages() lcd_printf_P(PSTR( ESC_H(1,1)"PWR: %d.%01dV"), (int)volt_pwr, (int)(10*fabs(volt_pwr - (int)volt_pwr))) ; if (lcd_clicked()) { - menu_action_back(); + menu_back(); } } #endif //defined VOLT_BED_PIN || defined VOLT_PWR_PIN @@ -1719,7 +1819,7 @@ static void lcd_menu_belt_status() lcd_printf_P(PSTR(ESC_H(1,0) "Belt status" ESC_H(2,1) "X %d" ESC_H(2,2) "Y %d" ), eeprom_read_word((uint16_t*)(EEPROM_BELTSTATUS_X)), eeprom_read_word((uint16_t*)(EEPROM_BELTSTATUS_Y))); if (lcd_clicked()) { - menu_action_back(); + menu_back(); } } #endif //TMC2130 @@ -1739,27 +1839,27 @@ static void lcd_menu_test_restore() static void lcd_preheat_menu() { - START_MENU(); + MENU_BEGIN(); - MENU_ITEM(back, _T(MSG_MAIN), 0); + MENU_ITEM_BACK_P(_T(MSG_MAIN)); if (farm_mode) { - MENU_ITEM(function, PSTR("farm - " STRINGIFY(FARM_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(FARM_PREHEAT_HPB_TEMP)), lcd_preheat_farm); - MENU_ITEM(function, PSTR("nozzle - " STRINGIFY(FARM_PREHEAT_HOTEND_TEMP) "/0"), lcd_preheat_farm_nozzle); - MENU_ITEM(function, _T(MSG_COOLDOWN), lcd_cooldown); - MENU_ITEM(function, PSTR("ABS - " STRINGIFY(ABS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(ABS_PREHEAT_HPB_TEMP)), lcd_preheat_abs); + MENU_ITEM_FUNCTION_P(PSTR("farm - " STRINGIFY(FARM_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(FARM_PREHEAT_HPB_TEMP)), lcd_preheat_farm); + MENU_ITEM_FUNCTION_P(PSTR("nozzle - " STRINGIFY(FARM_PREHEAT_HOTEND_TEMP) "/0"), lcd_preheat_farm_nozzle); + MENU_ITEM_FUNCTION_P(_T(MSG_COOLDOWN), lcd_cooldown); + MENU_ITEM_FUNCTION_P(PSTR("ABS - " STRINGIFY(ABS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(ABS_PREHEAT_HPB_TEMP)), lcd_preheat_abs); } else { - MENU_ITEM(function, PSTR("PLA - " STRINGIFY(PLA_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PLA_PREHEAT_HPB_TEMP)), lcd_preheat_pla); - MENU_ITEM(function, PSTR("PET - " STRINGIFY(PET_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PET_PREHEAT_HPB_TEMP)), lcd_preheat_pet); - MENU_ITEM(function, PSTR("ABS - " STRINGIFY(ABS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(ABS_PREHEAT_HPB_TEMP)), lcd_preheat_abs); - MENU_ITEM(function, PSTR("HIPS - " STRINGIFY(HIPS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(HIPS_PREHEAT_HPB_TEMP)), lcd_preheat_hips); - MENU_ITEM(function, PSTR("PP - " STRINGIFY(PP_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PP_PREHEAT_HPB_TEMP)), lcd_preheat_pp); - MENU_ITEM(function, PSTR("FLEX - " STRINGIFY(FLEX_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(FLEX_PREHEAT_HPB_TEMP)), lcd_preheat_flex); - MENU_ITEM(function, _T(MSG_COOLDOWN), lcd_cooldown); + MENU_ITEM_FUNCTION_P(PSTR("PLA - " STRINGIFY(PLA_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PLA_PREHEAT_HPB_TEMP)), lcd_preheat_pla); + MENU_ITEM_FUNCTION_P(PSTR("PET - " STRINGIFY(PET_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PET_PREHEAT_HPB_TEMP)), lcd_preheat_pet); + MENU_ITEM_FUNCTION_P(PSTR("ABS - " STRINGIFY(ABS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(ABS_PREHEAT_HPB_TEMP)), lcd_preheat_abs); + MENU_ITEM_FUNCTION_P(PSTR("HIPS - " STRINGIFY(HIPS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(HIPS_PREHEAT_HPB_TEMP)), lcd_preheat_hips); + MENU_ITEM_FUNCTION_P(PSTR("PP - " STRINGIFY(PP_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PP_PREHEAT_HPB_TEMP)), lcd_preheat_pp); + MENU_ITEM_FUNCTION_P(PSTR("FLEX - " STRINGIFY(FLEX_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(FLEX_PREHEAT_HPB_TEMP)), lcd_preheat_flex); + MENU_ITEM_FUNCTION_P(_T(MSG_COOLDOWN), lcd_cooldown); } - END_MENU(); + MENU_END(); } static void lcd_support_menu() @@ -1781,61 +1881,62 @@ static void lcd_support_menu() menuData.supportMenu.status = 0; } - START_MENU(); + MENU_BEGIN(); - MENU_ITEM(back, _T(MSG_MAIN), 0); + MENU_ITEM_BACK_P(_T(MSG_MAIN)); - MENU_ITEM(back, PSTR("Firmware:"), 0); - MENU_ITEM(back, PSTR(" " FW_VERSION_FULL), 0); + MENU_ITEM_BACK_P(PSTR("Firmware:")); + MENU_ITEM_BACK_P(PSTR(" " FW_VERSION_FULL)); #if (FW_DEV_VERSION != FW_VERSION_GOLD) && (FW_DEV_VERSION != FW_VERSION_RC) - MENU_ITEM(back, PSTR(" repo " FW_REPOSITORY), 0); + MENU_ITEM_BACK_P(PSTR(" repo " FW_REPOSITORY)); #endif // Ideally this block would be optimized out by the compiler. /* const uint8_t fw_string_len = strlen_P(FW_VERSION_STR_P()); if (fw_string_len < 6) { - MENU_ITEM(back, PSTR(MSG_FW_VERSION " - " FW_version), 0); + MENU_ITEM_BACK_P(PSTR(MSG_FW_VERSION " - " FW_version)); } else { - MENU_ITEM(back, PSTR("FW - " FW_version), 0); + MENU_ITEM_BACK_P(PSTR("FW - " FW_version)); }*/ - MENU_ITEM(back, _i("prusa3d.com"), 0);////MSG_PRUSA3D c=0 r=0 - MENU_ITEM(back, _i("forum.prusa3d.com"), 0);////MSG_PRUSA3D_FORUM c=0 r=0 - MENU_ITEM(back, _i("howto.prusa3d.com"), 0);////MSG_PRUSA3D_HOWTO c=0 r=0 - MENU_ITEM(back, PSTR("------------"), 0); - MENU_ITEM(back, PSTR(FILAMENT_SIZE), 0); - MENU_ITEM(back, PSTR(ELECTRONICS),0); - MENU_ITEM(back, PSTR(NOZZLE_TYPE),0); - MENU_ITEM(back, PSTR("------------"), 0); - MENU_ITEM(back, _i("Date:"), 0);////MSG_DATE c=17 r=1 - MENU_ITEM(back, PSTR(__DATE__), 0); + MENU_ITEM_BACK_P(_i("prusa3d.com"));////MSG_PRUSA3D c=0 r=0 + MENU_ITEM_BACK_P(_i("forum.prusa3d.com"));////MSG_PRUSA3D_FORUM c=0 r=0 + MENU_ITEM_BACK_P(_i("howto.prusa3d.com"));////MSG_PRUSA3D_HOWTO c=0 r=0 + MENU_ITEM_BACK_P(PSTR("------------")); + MENU_ITEM_BACK_P(PSTR(FILAMENT_SIZE)); + MENU_ITEM_BACK_P(PSTR(ELECTRONICS)); + MENU_ITEM_BACK_P(PSTR(NOZZLE_TYPE)); + MENU_ITEM_BACK_P(PSTR("------------")); + MENU_ITEM_BACK_P(_i("Date:"));////MSG_DATE c=17 r=1 + MENU_ITEM_BACK_P(PSTR(__DATE__)); // Show the FlashAir IP address, if the card is available. if (menuData.supportMenu.is_flash_air) { - MENU_ITEM(back, PSTR("------------"), 0); - MENU_ITEM(back, PSTR("FlashAir IP Addr:"), 0); - MENU_ITEM(back_RAM, menuData.supportMenu.ip_str, 0); + MENU_ITEM_BACK_P(PSTR("------------")); + MENU_ITEM_BACK_P(PSTR("FlashAir IP Addr:")); +///! MENU_ITEM(back_RAM, menuData.supportMenu.ip_str, 0); } #ifndef MK1BP - MENU_ITEM(back, PSTR("------------"), 0); - MENU_ITEM(submenu, _i("XYZ cal. details"), lcd_menu_xyz_y_min);////MSG_XYZ_DETAILS c=19 r=1 - MENU_ITEM(submenu, _i("Extruder info"), lcd_menu_extruder_info);////MSG_INFO_EXTRUDER c=15 r=1 + MENU_ITEM_BACK_P(PSTR("------------")); + MENU_ITEM_SUBMENU_P(_i("XYZ cal. details"), lcd_menu_xyz_y_min);////MSG_XYZ_DETAILS c=19 r=1 + MENU_ITEM_SUBMENU_P(_i("Extruder info"), lcd_menu_extruder_info);////MSG_INFO_EXTRUDER c=15 r=1 #ifdef TMC2130 - MENU_ITEM(submenu, _i("Belt status"), lcd_menu_belt_status);////MSG_MENU_BELT_STATUS c=15 r=1 + MENU_ITEM_SUBMENU_P(_i("Belt status"), lcd_menu_belt_status);////MSG_MENU_BELT_STATUS c=15 r=1 #endif //TMC2130 - MENU_ITEM(submenu, _i("Temperatures"), lcd_menu_temperatures);////MSG_MENU_TEMPERATURES c=15 r=1 + MENU_ITEM_SUBMENU_P(_i("Temperatures"), lcd_menu_temperatures);////MSG_MENU_TEMPERATURES c=15 r=1 #if defined (VOLT_BED_PIN) || defined (VOLT_PWR_PIN) - MENU_ITEM(submenu, _i("Voltages"), lcd_menu_voltages);////MSG_MENU_VOLTAGES c=15 r=1 + MENU_ITEM_SUBMENU_P(_i("Voltages"), lcd_menu_voltages);////MSG_MENU_VOLTAGES c=15 r=1 #endif //defined VOLT_BED_PIN || defined VOLT_PWR_PIN #ifdef DEBUG_BUILD - MENU_ITEM(submenu, PSTR("Debug"), lcd_menu_debug); + MENU_ITEM_SUBMENU_P(PSTR("Debug"), lcd_menu_debug); #endif /* DEBUG_BUILD */ #endif //MK1BP - END_MENU(); + + MENU_END(); } void lcd_set_fan_check() { @@ -1868,7 +1969,7 @@ void lcd_unLoadFilament() lcd_implementation_clear(); } - menu_action_back(); + menu_back(); } void lcd_change_filament() { @@ -2077,9 +2178,9 @@ static void lcd_menu_AutoLoadFilament() lcd_printPGM(_T(MSG_ERROR)); lcd.setCursor(0, 2); lcd_printPGM(_T(MSG_PREHEAT_NOZZLE)); - if (ptimer->expired(2000ul)) menu_action_back(); + if (ptimer->expired(2000ul)) menu_back(); } - if (lcd_clicked()) menu_action_back(); + if (lcd_clicked()) menu_back(); } #endif //PAT9125 @@ -2137,7 +2238,7 @@ void lcd_menu_statistics() if (lcd_clicked()) { lcd_quick_feedback(); - menu_action_back(); + menu_back(); } } else @@ -2179,7 +2280,7 @@ void lcd_menu_statistics() } KEEPALIVE_STATE(NOT_BUSY); lcd_quick_feedback(); - menu_action_back(); + menu_back(); } } @@ -2205,7 +2306,7 @@ static void _lcd_move(const char *name, int axis, int min, int max) { } if (lcdDrawUpdate) lcd_implementation_drawedit(name, ftostr31(current_position[axis])); if (menuExiting || LCD_CLICKED) (void)enable_endstops(menuData._lcd_moveMenu.endstopsEnabledPrevious); - if (LCD_CLICKED) menu_action_back(); + if (LCD_CLICKED) menu_back(); } @@ -2226,7 +2327,7 @@ static void lcd_move_e() { lcd_implementation_drawedit(PSTR("Extruder"), ftostr31(current_position[E_AXIS])); } - if (LCD_CLICKED) menu_action_back(); + if (LCD_CLICKED) menu_back(); } else { lcd_implementation_clear(); @@ -2337,7 +2438,7 @@ static void lcd_menu_xyz_offset() } if (lcd_clicked()) { - menu_action_back(); + menu_back(); } } @@ -2434,7 +2535,7 @@ static void _lcd_babystep(int axis, const char *msg) if(Z_AXIS == axis) calibration_status_store(CALIBRATION_STATUS_CALIBRATED); } - if (LCD_CLICKED) menu_action_back(); + if (LCD_CLICKED) menu_back(); } static void lcd_babystep_x() { @@ -2518,14 +2619,14 @@ static void lcd_adjust_bed() if (menuData.adjustBed.rear != menuData.adjustBed.rear2) eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR, menuData.adjustBed.rear = menuData.adjustBed.rear2); - START_MENU(); - MENU_ITEM(back, _T(MSG_SETTINGS), 0); + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_SETTINGS)); MENU_ITEM_EDIT(int3, _i("Left side [um]"), &menuData.adjustBed.left2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);////MSG_BED_CORRECTION_LEFT c=14 r=1 MENU_ITEM_EDIT(int3, _i("Right side[um]"), &menuData.adjustBed.right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);////MSG_BED_CORRECTION_RIGHT c=14 r=1 MENU_ITEM_EDIT(int3, _i("Front side[um]"), &menuData.adjustBed.front2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);////MSG_BED_CORRECTION_FRONT c=14 r=1 MENU_ITEM_EDIT(int3, _i("Rear side [um]"), &menuData.adjustBed.rear2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);////MSG_BED_CORRECTION_REAR c=14 r=1 - MENU_ITEM(function, _i("Reset"), lcd_adjust_bed_reset);////MSG_BED_CORRECTION_RESET c=0 r=0 - END_MENU(); + MENU_ITEM_FUNCTION_P(_i("Reset"), lcd_adjust_bed_reset);////MSG_BED_CORRECTION_RESET c=0 r=0 + MENU_END(); } void pid_extruder() { @@ -3167,7 +3268,7 @@ static void lcd_show_end_stops() { static void menu_show_end_stops() { lcd_show_end_stops(); - if (LCD_CLICKED) menu_action_back(); + if (LCD_CLICKED) menu_back(); } // Lets the user move the Z carriage up to the end stoppers. @@ -3512,13 +3613,13 @@ void lcd_pick_babystep(){ */ void lcd_move_menu_axis() { - START_MENU(); - MENU_ITEM(back, _T(MSG_SETTINGS), 0); - MENU_ITEM(submenu, _i("Move X"), lcd_move_x);////MSG_MOVE_X c=0 r=0 - MENU_ITEM(submenu, _i("Move Y"), lcd_move_y);////MSG_MOVE_Y c=0 r=0 - MENU_ITEM(submenu, _i("Move Z"), lcd_move_z);////MSG_MOVE_Z c=0 r=0 - MENU_ITEM(submenu, _i("Extruder"), lcd_move_e);////MSG_MOVE_E c=0 r=0 - END_MENU(); + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_SETTINGS)); + MENU_ITEM_SUBMENU_P(_i("Move X"), lcd_move_x);////MSG_MOVE_X c=0 r=0 + MENU_ITEM_SUBMENU_P(_i("Move Y"), lcd_move_y);////MSG_MOVE_Y c=0 r=0 + MENU_ITEM_SUBMENU_P(_i("Move Z"), lcd_move_z);////MSG_MOVE_Z c=0 r=0 + MENU_ITEM_SUBMENU_P(_i("Extruder"), lcd_move_e);////MSG_MOVE_E c=0 r=0 + MENU_END(); } static void lcd_move_menu_1mm() @@ -3574,7 +3675,7 @@ static void lcd_crash_mode_info() tim = millis(); } if (lcd_clicked()) - menu_action_back(); + menu_back(); } static void lcd_crash_mode_info2() @@ -3587,7 +3688,7 @@ static void lcd_crash_mode_info2() tim = millis(); } if (lcd_clicked()) - menu_action_back(); + menu_back(); } #endif //TMC2130 @@ -3603,7 +3704,7 @@ uint8_t nlines; tim = millis(); } if (lcd_clicked()) - menu_action_back(); + menu_back(); } static void lcd_fsensor_fail() @@ -3617,7 +3718,7 @@ uint8_t nlines; tim = millis(); } if (lcd_clicked()) - menu_action_back(); + menu_back(); } #endif //PAT9125 @@ -3655,7 +3756,7 @@ static void lcd_silent_mode_set() { st_current_init(); #ifdef TMC2130 if (CrashDetectMenu && (SilentModeMenu != SILENT_MODE_NORMAL)) - menu_action_submenu(lcd_crash_mode_info2); + menu_submenu(lcd_crash_mode_info2); #endif //TMC2130 } @@ -3682,11 +3783,11 @@ static void lcd_fsensor_state_set() if (!FSensorStateMenu) { fsensor_disable(); if (filament_autoload_enabled) - menu_action_submenu(lcd_filament_autoload_info); + menu_submenu(lcd_filament_autoload_info); }else{ fsensor_enable(); if (fsensor_not_responding) - menu_action_submenu(lcd_fsensor_fail); + menu_submenu(lcd_fsensor_fail); } } #endif //PAT9125 @@ -3705,8 +3806,8 @@ void lcd_set_progress() { #if (LANG_MODE != 0) static void lcd_language_menu() { - START_MENU(); - if (lang_is_selected()) MENU_ITEM(back, _T(MSG_SETTINGS), 0); // + MENU_BEGIN(); + if (lang_is_selected()) MENU_ITEM_BACK_P(_T(MSG_SETTINGS)); // MENU_ITEM(setlang, lang_get_name_by_code(lang_get_code(0)), 0); //primary language uint8_t cnt = lang_get_count(); #ifdef W25X20CL @@ -3718,7 +3819,7 @@ static void lcd_language_menu() for (int i = 1; i < cnt; i++) //all seconday languages (MK2/25) #endif //W25X20CL MENU_ITEM(setlang, lang_get_name_by_code(lang_get_code(i)), i); - END_MENU(); + MENU_END(); } #endif //(LANG_MODE != 0) @@ -3744,10 +3845,10 @@ void lcd_mesh_calibration_z() void lcd_pinda_calibration_menu() { - START_MENU(); - MENU_ITEM(back, _T(MSG_MENU_CALIBRATION), 0); - MENU_ITEM(submenu, _i("Calibrate"), lcd_calibrate_pinda);////MSG_CALIBRATE_PINDA c=17 r=1 - END_MENU(); + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_MENU_CALIBRATION)); + MENU_ITEM_SUBMENU_P(_i("Calibrate"), lcd_calibrate_pinda);////MSG_CALIBRATE_PINDA c=17 r=1 + MENU_END(); } void lcd_temp_calibration_set() { @@ -4106,26 +4207,30 @@ void lcd_wizard(int state) { static void lcd_settings_menu() { EEPROM_read(EEPROM_SILENT, (uint8_t*)&SilentModeMenu, sizeof(SilentModeMenu)); - START_MENU(); + MENU_BEGIN(); - MENU_ITEM(back, _T(MSG_MAIN), lcd_settings_menu_back); + if (menu_item_back_P(_T(MSG_MAIN))) + { + lcd_settings_menu_back(); + return; + } - MENU_ITEM(submenu, _i("Temperature"), lcd_control_temperature_menu);////MSG_TEMPERATURE c=0 r=0 + MENU_ITEM_SUBMENU_P(_i("Temperature"), lcd_control_temperature_menu);////MSG_TEMPERATURE c=0 r=0 if (!homing_flag) { - MENU_ITEM(submenu, _i("Move axis"), lcd_move_menu_1mm);////MSG_MOVE_AXIS c=0 r=0 + MENU_ITEM_SUBMENU_P(_i("Move axis"), lcd_move_menu_1mm);////MSG_MOVE_AXIS c=0 r=0 } if (!isPrintPaused) { - MENU_ITEM(gcode, _i("Disable steppers"), PSTR("M84"));////MSG_DISABLE_STEPPERS c=0 r=0 + MENU_ITEM_GCODE_P(_i("Disable steppers"), PSTR("M84"));////MSG_DISABLE_STEPPERS c=0 r=0 } #ifndef TMC2130 if (!farm_mode) { //dont show in menu if we are in farm mode switch (SilentModeMenu) { - case SILENT_MODE_POWER: MENU_ITEM(function, _T(MSG_SILENT_MODE_OFF), lcd_silent_mode_set); break; - case SILENT_MODE_SILENT: MENU_ITEM(function, _T(MSG_SILENT_MODE_ON), lcd_silent_mode_set); break; - case SILENT_MODE_AUTO: MENU_ITEM(function, _T(MSG_AUTO_MODE_ON), lcd_silent_mode_set); break; - default: MENU_ITEM(function, _T(MSG_SILENT_MODE_OFF), lcd_silent_mode_set); break; // (probably) not needed + case SILENT_MODE_POWER: MENU_ITEM_FUNCTION_P(_T(MSG_SILENT_MODE_OFF), lcd_silent_mode_set); break; + case SILENT_MODE_SILENT: MENU_ITEM_FUNCTION_P(_T(MSG_SILENT_MODE_ON), lcd_silent_mode_set); break; + case SILENT_MODE_AUTO: MENU_ITEM_FUNCTION_P(_T(MSG_AUTO_MODE_ON), lcd_silent_mode_set); break; + default: MENU_ITEM_FUNCTION_P(_T(MSG_SILENT_MODE_OFF), lcd_silent_mode_set); break; // (probably) not needed } } #endif //TMC2130 @@ -4135,24 +4240,24 @@ static void lcd_settings_menu() if (FSensorStateMenu == 0) { if (fsensor_not_responding){ // Filament sensor not working - MENU_ITEM(function, _i("Fil. sensor [N/A]"), lcd_fsensor_state_set);////MSG_FSENSOR_NA c=0 r=0 - MENU_ITEM(submenu, _T(MSG_FSENS_AUTOLOAD_NA), lcd_fsensor_fail); + MENU_ITEM_FUNCTION_P(_i("Fil. sensor [N/A]"), lcd_fsensor_state_set);////MSG_FSENSOR_NA c=0 r=0 + MENU_ITEM_SUBMENU_P(_T(MSG_FSENS_AUTOLOAD_NA), lcd_fsensor_fail); } else{ // Filament sensor turned off, working, no problems - MENU_ITEM(function, _T(MSG_FSENSOR_OFF), lcd_fsensor_state_set); - MENU_ITEM(submenu,_T(MSG_FSENS_AUTOLOAD_NA), lcd_filament_autoload_info); + MENU_ITEM_FUNCTION_P(_T(MSG_FSENSOR_OFF), lcd_fsensor_state_set); + MENU_ITEM_SUBMENU_P(_T(MSG_FSENS_AUTOLOAD_NA), lcd_filament_autoload_info); } } else { // Filament sensor turned on, working, no problems - MENU_ITEM(function, _T(MSG_FSENSOR_ON), lcd_fsensor_state_set); + MENU_ITEM_FUNCTION_P(_T(MSG_FSENSOR_ON), lcd_fsensor_state_set); if (filament_autoload_enabled) { - MENU_ITEM(function, _i("F. autoload [on]"), lcd_set_filament_autoload);////MSG_FSENS_AUTOLOAD_ON c=17 r=1 + MENU_ITEM_FUNCTION_P(_i("F. autoload [on]"), lcd_set_filament_autoload);////MSG_FSENS_AUTOLOAD_ON c=17 r=1 } else { - MENU_ITEM(function, _i("F. autoload [off]"), lcd_set_filament_autoload);////MSG_FSENS_AUTOLOAD_OFF c=17 r=1 + MENU_ITEM_FUNCTION_P(_i("F. autoload [off]"), lcd_set_filament_autoload);////MSG_FSENS_AUTOLOAD_OFF c=17 r=1 } } @@ -4160,23 +4265,23 @@ static void lcd_settings_menu() #endif //PAT9125 if (fans_check_enabled == true) { - MENU_ITEM(function, _i("Fans check [on]"), lcd_set_fan_check);////MSG_FANS_CHECK_ON c=17 r=1 + MENU_ITEM_FUNCTION_P(_i("Fans check [on]"), lcd_set_fan_check);////MSG_FANS_CHECK_ON c=17 r=1 } else { - MENU_ITEM(function, _i("Fans check [off]"), lcd_set_fan_check);////MSG_FANS_CHECK_OFF c=17 r=1 + MENU_ITEM_FUNCTION_P(_i("Fans check [off]"), lcd_set_fan_check);////MSG_FANS_CHECK_OFF c=17 r=1 } #ifdef TMC2130 if(!farm_mode) { - if (SilentModeMenu == SILENT_MODE_NORMAL) MENU_ITEM(function, _T(MSG_STEALTH_MODE_OFF), lcd_silent_mode_set); - else MENU_ITEM(function, _T(MSG_STEALTH_MODE_ON), lcd_silent_mode_set); + if (SilentModeMenu == SILENT_MODE_NORMAL) MENU_ITEM_FUNCTION_P(_T(MSG_STEALTH_MODE_OFF), lcd_silent_mode_set); + else MENU_ITEM_FUNCTION_P(_T(MSG_STEALTH_MODE_ON), lcd_silent_mode_set); if (SilentModeMenu == SILENT_MODE_NORMAL) { - if (CrashDetectMenu == 0) MENU_ITEM(function, _T(MSG_CRASHDETECT_OFF), lcd_crash_mode_set); - else MENU_ITEM(function, _T(MSG_CRASHDETECT_ON), lcd_crash_mode_set); + if (CrashDetectMenu == 0) MENU_ITEM_FUNCTION_P(_T(MSG_CRASHDETECT_OFF), lcd_crash_mode_set); + else MENU_ITEM_FUNCTION_P(_T(MSG_CRASHDETECT_ON), lcd_crash_mode_set); } - else MENU_ITEM(submenu, _T(MSG_CRASHDETECT_NA), lcd_crash_mode_info); + else MENU_ITEM_SUBMENU_P(_T(MSG_CRASHDETECT_NA), lcd_crash_mode_info); } #ifdef TMC2130_LINEARITY_CORRECTION_XYZ @@ -4188,33 +4293,33 @@ static void lcd_settings_menu() #endif //TMC2130 if (temp_cal_active == false) { - MENU_ITEM(function, _i("Temp. cal. [off]"), lcd_temp_calibration_set);////MSG_TEMP_CALIBRATION_OFF c=20 r=1 + MENU_ITEM_FUNCTION_P(_i("Temp. cal. [off]"), lcd_temp_calibration_set);////MSG_TEMP_CALIBRATION_OFF c=20 r=1 } else { - MENU_ITEM(function, _i("Temp. cal. [on]"), lcd_temp_calibration_set);////MSG_TEMP_CALIBRATION_ON c=20 r=1 + MENU_ITEM_FUNCTION_P(_i("Temp. cal. [on]"), lcd_temp_calibration_set);////MSG_TEMP_CALIBRATION_ON c=20 r=1 } #ifdef HAS_SECOND_SERIAL_PORT if (selectedSerialPort == 0) { - MENU_ITEM(function, _i("RPi port [off]"), lcd_second_serial_set);////MSG_SECOND_SERIAL_OFF c=17 r=1 + MENU_ITEM_FUNCTION_P(_i("RPi port [off]"), lcd_second_serial_set);////MSG_SECOND_SERIAL_OFF c=17 r=1 } else { - MENU_ITEM(function, _i("RPi port [on]"), lcd_second_serial_set);////MSG_SECOND_SERIAL_ON c=17 r=1 + MENU_ITEM_FUNCTION_P(_i("RPi port [on]"), lcd_second_serial_set);////MSG_SECOND_SERIAL_ON c=17 r=1 } #endif //HAS_SECOND_SERIAL if (!isPrintPaused && !homing_flag) { - MENU_ITEM(submenu, _T(MSG_BABYSTEP_Z), lcd_babystep_z); + MENU_ITEM_SUBMENU_P(_T(MSG_BABYSTEP_Z), lcd_babystep_z); } #if (LANG_MODE != 0) - MENU_ITEM(submenu, _i("Select language"), lcd_language_menu);////MSG_LANGUAGE_SELECT c=0 r=0 + MENU_ITEM_SUBMENU_P(_i("Select language"), lcd_language_menu);////MSG_LANGUAGE_SELECT c=0 r=0 #endif //(LANG_MODE != 0) if (card.ToshibaFlashAir_isEnabled()) { - MENU_ITEM(function, _i("SD card [FlshAir]"), lcd_toshiba_flash_air_compatibility_toggle);////MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1 + MENU_ITEM_FUNCTION_P(_i("SD card [FlshAir]"), lcd_toshiba_flash_air_compatibility_toggle);////MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1 } else { - MENU_ITEM(function, _i("SD card [normal]"), lcd_toshiba_flash_air_compatibility_toggle);////MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1 + MENU_ITEM_FUNCTION_P(_i("SD card [normal]"), lcd_toshiba_flash_air_compatibility_toggle);////MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1 } #ifdef SDCARD_SORT_ALPHA @@ -4222,20 +4327,20 @@ static void lcd_settings_menu() uint8_t sdSort; EEPROM_read(EEPROM_SD_SORT, (uint8_t*)&sdSort, sizeof(sdSort)); switch (sdSort) { - case SD_SORT_TIME: MENU_ITEM(function, _i("Sort: [Time]"), lcd_sort_type_set); break;////MSG_SORT_TIME c=17 r=1 - case SD_SORT_ALPHA: MENU_ITEM(function, _i("Sort: [Alphabet]"), lcd_sort_type_set); break;////MSG_SORT_ALPHA c=17 r=1 - default: MENU_ITEM(function, _i("Sort: [None]"), lcd_sort_type_set);////MSG_SORT_NONE c=17 r=1 + case SD_SORT_TIME: MENU_ITEM_FUNCTION_P(_i("Sort: [Time]"), lcd_sort_type_set); break;////MSG_SORT_TIME c=17 r=1 + case SD_SORT_ALPHA: MENU_ITEM_FUNCTION_P(_i("Sort: [Alphabet]"), lcd_sort_type_set); break;////MSG_SORT_ALPHA c=17 r=1 + default: MENU_ITEM_FUNCTION_P(_i("Sort: [None]"), lcd_sort_type_set);////MSG_SORT_NONE c=17 r=1 } } #endif // SDCARD_SORT_ALPHA if (farm_mode) { - MENU_ITEM(submenu, PSTR("Farm number"), lcd_farm_no); - MENU_ITEM(function, PSTR("Disable farm mode"), lcd_disable_farm_mode); + MENU_ITEM_SUBMENU_P(PSTR("Farm number"), lcd_farm_no); + MENU_ITEM_FUNCTION_P(PSTR("Disable farm mode"), lcd_disable_farm_mode); } - END_MENU(); + MENU_END(); } static void lcd_selftest_() @@ -4269,7 +4374,7 @@ static void lcd_settings_menu_back() if (changed) tmc2130_init(); #endif //TMC2130 currentMenu = lcd_main_menu; - lcd_main_menu(); +// lcd_main_menu(); } #ifdef EXPERIMENTAL_FEATURES @@ -4310,27 +4415,27 @@ static void lcd_homing_accuracy_menu_advanced_back() static void lcd_homing_accuracy_menu_advanced() { lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; - START_MENU(); - MENU_ITEM(back, PSTR("Homing accuracy"), lcd_homing_accuracy_menu_advanced_back); - MENU_ITEM(function, PSTR("Reset def. steps"), lcd_homing_accuracy_menu_advanced_reset); + MENU_BEGIN(); +///! MENU_ITEM_BACK_P(PSTR("Homing accuracy"), lcd_homing_accuracy_menu_advanced_back); + MENU_ITEM_FUNCTION_P(PSTR("Reset def. steps"), lcd_homing_accuracy_menu_advanced_reset); MENU_ITEM_EDIT(byte3, PSTR("X-origin"), &tmc2130_home_origin[X_AXIS], 0, 63); MENU_ITEM_EDIT(byte3, PSTR("Y-origin"), &tmc2130_home_origin[Y_AXIS], 0, 63); MENU_ITEM_EDIT(byte3, PSTR("X-bsteps"), &tmc2130_home_bsteps[X_AXIS], 0, 128); MENU_ITEM_EDIT(byte3, PSTR("Y-bsteps"), &tmc2130_home_bsteps[Y_AXIS], 0, 128); MENU_ITEM_EDIT(byte3, PSTR("X-fsteps"), &tmc2130_home_fsteps[X_AXIS], 0, 128); MENU_ITEM_EDIT(byte3, PSTR("Y-fsteps"), &tmc2130_home_fsteps[Y_AXIS], 0, 128); - END_MENU(); + MENU_END(); } static void lcd_homing_accuracy_menu() { - START_MENU(); - MENU_ITEM(back, PSTR("Experimental"), 0); - MENU_ITEM(function, tmc2130_home_enabled?PSTR("Accur. homing On"):PSTR("Accur. homing Off"), lcd_accurate_home_set); - MENU_ITEM(gcode, PSTR("Calibrate X"), PSTR("G28XC")); - MENU_ITEM(gcode, PSTR("Calibrate Y"), PSTR("G28YC")); - MENU_ITEM(submenu, PSTR("Advanced"), lcd_homing_accuracy_menu_advanced); - END_MENU(); + MENU_BEGIN(); + MENU_ITEM_BACK_P(PSTR("Experimental")); + MENU_ITEM_FUNCTION_P(tmc2130_home_enabled?PSTR("Accur. homing On"):PSTR("Accur. homing Off"), lcd_accurate_home_set); + MENU_ITEM_GCODE_P(PSTR("Calibrate X"), PSTR("G28XC")); + MENU_ITEM_GCODE_P(PSTR("Calibrate Y"), PSTR("G28YC")); + MENU_ITEM_SUBMENU_P(PSTR("Advanced"), lcd_homing_accuracy_menu_advanced); + MENU_END(); } static void lcd_ustep_resolution_menu_save() @@ -4391,14 +4496,14 @@ static void lcd_ustep_resolution_reset_def_xyze() static void lcd_ustep_resolution_menu() { lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; - START_MENU(); - MENU_ITEM(back, PSTR("Experimental"), lcd_ustep_resolution_menu_back); - MENU_ITEM(function, PSTR("Reset defaults"), lcd_ustep_resolution_reset_def_xyze); + MENU_BEGIN(); +///! MENU_ITEM_BACK_P(PSTR("Experimental"), lcd_ustep_resolution_menu_back); + MENU_ITEM_FUNCTION_P(PSTR("Reset defaults"), lcd_ustep_resolution_reset_def_xyze); MENU_ITEM_EDIT(mres, PSTR("X-resolution"), &tmc2130_mres[X_AXIS], 4, 4); MENU_ITEM_EDIT(mres, PSTR("Y-resolution"), &tmc2130_mres[Y_AXIS], 4, 4); MENU_ITEM_EDIT(mres, PSTR("Z-resolution"), &tmc2130_mres[Z_AXIS], 4, 4); MENU_ITEM_EDIT(mres, PSTR("E-resolution"), &tmc2130_mres[E_AXIS], 2, 5); - END_MENU(); + MENU_END(); } @@ -4439,15 +4544,15 @@ static void lcd_ustep_linearity_menu_reset() static void lcd_ustep_linearity_menu() { lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; - START_MENU(); - MENU_ITEM(back, PSTR("Experimental"), lcd_ustep_linearity_menu_back); - MENU_ITEM(function, PSTR("Reset correction"), lcd_ustep_linearity_menu_reset); - MENU_ITEM(function, PSTR("Recomended config"), lcd_ustep_linearity_menu_recomended); + MENU_BEGIN(); +///! MENU_ITEM_BACK_P(PSTR("Experimental"), lcd_ustep_linearity_menu_back); + MENU_ITEM_FUNCTION_P(PSTR("Reset correction"), lcd_ustep_linearity_menu_reset); + MENU_ITEM_FUNCTION_P(PSTR("Recomended config"), lcd_ustep_linearity_menu_recomended); MENU_ITEM_EDIT(wfac, PSTR("X-correction"), &tmc2130_wave_fac[X_AXIS], TMC2130_WAVE_FAC1000_MIN-TMC2130_WAVE_FAC1000_STP, TMC2130_WAVE_FAC1000_MAX); MENU_ITEM_EDIT(wfac, PSTR("Y-correction"), &tmc2130_wave_fac[Y_AXIS], TMC2130_WAVE_FAC1000_MIN-TMC2130_WAVE_FAC1000_STP, TMC2130_WAVE_FAC1000_MAX); MENU_ITEM_EDIT(wfac, PSTR("Z-correction"), &tmc2130_wave_fac[Z_AXIS], TMC2130_WAVE_FAC1000_MIN-TMC2130_WAVE_FAC1000_STP, TMC2130_WAVE_FAC1000_MAX); MENU_ITEM_EDIT(wfac, PSTR("E-correction"), &tmc2130_wave_fac[E_AXIS], TMC2130_WAVE_FAC1000_MIN-TMC2130_WAVE_FAC1000_STP, TMC2130_WAVE_FAC1000_MAX); - END_MENU(); + MENU_END(); } static void lcd_experimantal_menu_save_all() @@ -4469,61 +4574,61 @@ static void lcd_experimantal_menu_disable_all() static void lcd_experimantal_menu() { - START_MENU(); - MENU_ITEM(back, _T(MSG_MAIN), 0); - MENU_ITEM(function, PSTR("All Xfeatures off"), lcd_experimantal_menu_disable_all); - MENU_ITEM(submenu, PSTR("Homing accuracy"), lcd_homing_accuracy_menu); - MENU_ITEM(submenu, PSTR("uStep resolution"), lcd_ustep_resolution_menu); - MENU_ITEM(submenu, PSTR("uStep linearity"), lcd_ustep_linearity_menu); - END_MENU(); + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_MAIN)); + MENU_ITEM_FUNCTION_P(PSTR("All Xfeatures off"), lcd_experimantal_menu_disable_all); + MENU_ITEM_SUBMENU_P(PSTR("Homing accuracy"), lcd_homing_accuracy_menu); + MENU_ITEM_SUBMENU_P(PSTR("uStep resolution"), lcd_ustep_resolution_menu); + MENU_ITEM_SUBMENU_P(PSTR("uStep linearity"), lcd_ustep_linearity_menu); + MENU_END(); } #endif //EXPERIMENTAL_FEATURES static void lcd_calibration_menu() { - START_MENU(); - MENU_ITEM(back, _T(MSG_MAIN), 0); + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_MAIN)); if (!isPrintPaused) { - MENU_ITEM(function, _i("Wizard"), lcd_wizard);////MSG_WIZARD c=17 r=1 - MENU_ITEM(submenu, _i("First layer cal."), lcd_v2_calibration);////MSG_V2_CALIBRATION c=17 r=1 - MENU_ITEM(gcode, _T(MSG_AUTO_HOME), PSTR("G28 W")); - MENU_ITEM(function, _i("Selftest "), lcd_selftest_v);////MSG_SELFTEST c=0 r=0 + MENU_ITEM_FUNCTION_P(_i("Wizard"), lcd_wizard);////MSG_WIZARD c=17 r=1 + MENU_ITEM_SUBMENU_P(_i("First layer cal."), lcd_v2_calibration);////MSG_V2_CALIBRATION c=17 r=1 + MENU_ITEM_GCODE_P(_T(MSG_AUTO_HOME), PSTR("G28 W")); + MENU_ITEM_FUNCTION_P(_i("Selftest "), lcd_selftest_v);////MSG_SELFTEST c=0 r=0 #ifdef MK1BP // MK1 // "Calibrate Z" - MENU_ITEM(gcode, _T(MSG_HOMEYZ), PSTR("G28 Z")); + MENU_ITEM_GCODE_P(_T(MSG_HOMEYZ), PSTR("G28 Z")); #else //MK1BP // MK2 - MENU_ITEM(function, _i("Calibrate XYZ"), lcd_mesh_calibration);////MSG_CALIBRATE_BED c=0 r=0 + MENU_ITEM_FUNCTION_P(_i("Calibrate XYZ"), lcd_mesh_calibration);////MSG_CALIBRATE_BED c=0 r=0 // "Calibrate Z" with storing the reference values to EEPROM. - MENU_ITEM(submenu, _T(MSG_HOMEYZ), lcd_mesh_calibration_z); + MENU_ITEM_SUBMENU_P(_T(MSG_HOMEYZ), lcd_mesh_calibration_z); #ifndef SNMM - //MENU_ITEM(function, _i("Calibrate E"), lcd_calibrate_extruder);////MSG_CALIBRATE_E c=20 r=1 + //MENU_ITEM_FUNCTION_P(_i("Calibrate E"), lcd_calibrate_extruder);////MSG_CALIBRATE_E c=20 r=1 #endif // "Mesh Bed Leveling" - MENU_ITEM(submenu, _i("Mesh Bed Leveling"), lcd_mesh_bedleveling);////MSG_MESH_BED_LEVELING c=0 r=0 + MENU_ITEM_SUBMENU_P(_i("Mesh Bed Leveling"), lcd_mesh_bedleveling);////MSG_MESH_BED_LEVELING c=0 r=0 #endif //MK1BP - MENU_ITEM(submenu, _i("Bed level correct"), lcd_adjust_bed);////MSG_BED_CORRECTION_MENU c=0 r=0 - MENU_ITEM(submenu, _i("PID calibration"), pid_extruder);////MSG_PID_EXTRUDER c=17 r=1 + MENU_ITEM_SUBMENU_P(_i("Bed level correct"), lcd_adjust_bed);////MSG_BED_CORRECTION_MENU c=0 r=0 + MENU_ITEM_SUBMENU_P(_i("PID calibration"), pid_extruder);////MSG_PID_EXTRUDER c=17 r=1 #ifndef TMC2130 - MENU_ITEM(submenu, _i("Show end stops"), menu_show_end_stops);////MSG_SHOW_END_STOPS c=17 r=1 + MENU_ITEM_SUBMENU_P(_i("Show end stops"), menu_show_end_stops);////MSG_SHOW_END_STOPS c=17 r=1 #endif #ifndef MK1BP - MENU_ITEM(gcode, _i("Reset XYZ calibr."), PSTR("M44"));////MSG_CALIBRATE_BED_RESET c=0 r=0 + MENU_ITEM_GCODE_P(_i("Reset XYZ calibr."), PSTR("M44"));////MSG_CALIBRATE_BED_RESET c=0 r=0 #endif //MK1BP #ifndef SNMM - //MENU_ITEM(function, MSG_RESET_CALIBRATE_E, lcd_extr_cal_reset); + //MENU_ITEM_FUNCTION_P(MSG_RESET_CALIBRATE_E, lcd_extr_cal_reset); #endif #ifndef MK1BP - MENU_ITEM(submenu, _i("Temp. calibration"), lcd_pinda_calibration_menu);////MSG_CALIBRATION_PINDA_MENU c=17 r=1 + MENU_ITEM_SUBMENU_P(_i("Temp. calibration"), lcd_pinda_calibration_menu);////MSG_CALIBRATION_PINDA_MENU c=17 r=1 #endif //MK1BP } - END_MENU(); + MENU_END(); } void bowden_menu() { @@ -5166,39 +5271,39 @@ static void extr_unload_3() { static void fil_load_menu() { - START_MENU(); - MENU_ITEM(back, _T(MSG_MAIN), 0); - MENU_ITEM(function, _i("Load all"), load_all);////MSG_LOAD_ALL c=0 r=0 - MENU_ITEM(function, _i("Load filament 1"), extr_adj_0);////MSG_LOAD_FILAMENT_1 c=17 r=0 - MENU_ITEM(function, _i("Load filament 2"), extr_adj_1);////MSG_LOAD_FILAMENT_2 c=17 r=0 - MENU_ITEM(function, _i("Load filament 3"), extr_adj_2);////MSG_LOAD_FILAMENT_3 c=17 r=0 - MENU_ITEM(function, _i("Load filament 4"), extr_adj_3);////MSG_LOAD_FILAMENT_4 c=17 r=0 + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_MAIN)); + MENU_ITEM_FUNCTION_P(_i("Load all"), load_all);////MSG_LOAD_ALL c=0 r=0 + MENU_ITEM_FUNCTION_P(_i("Load filament 1"), extr_adj_0);////MSG_LOAD_FILAMENT_1 c=17 r=0 + MENU_ITEM_FUNCTION_P(_i("Load filament 2"), extr_adj_1);////MSG_LOAD_FILAMENT_2 c=17 r=0 + MENU_ITEM_FUNCTION_P(_i("Load filament 3"), extr_adj_2);////MSG_LOAD_FILAMENT_3 c=17 r=0 + MENU_ITEM_FUNCTION_P(_i("Load filament 4"), extr_adj_3);////MSG_LOAD_FILAMENT_4 c=17 r=0 - END_MENU(); + MENU_END(); } static void fil_unload_menu() { - START_MENU(); - MENU_ITEM(back, _T(MSG_MAIN), 0); - MENU_ITEM(function, _i("Unload all"), extr_unload_all);////MSG_UNLOAD_ALL c=0 r=0 - MENU_ITEM(function, _i("Unload filament 1"), extr_unload_0);////MSG_UNLOAD_FILAMENT_1 c=17 r=0 - MENU_ITEM(function, _i("Unload filament 2"), extr_unload_1);////MSG_UNLOAD_FILAMENT_2 c=17 r=0 - MENU_ITEM(function, _i("Unload filament 3"), extr_unload_2);////MSG_UNLOAD_FILAMENT_3 c=17 r=0 - MENU_ITEM(function, _i("Unload filament 4"), extr_unload_3);////MSG_UNLOAD_FILAMENT_4 c=17 r=0 + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_MAIN)); + MENU_ITEM_FUNCTION_P(_i("Unload all"), extr_unload_all);////MSG_UNLOAD_ALL c=0 r=0 + MENU_ITEM_FUNCTION_P(_i("Unload filament 1"), extr_unload_0);////MSG_UNLOAD_FILAMENT_1 c=17 r=0 + MENU_ITEM_FUNCTION_P(_i("Unload filament 2"), extr_unload_1);////MSG_UNLOAD_FILAMENT_2 c=17 r=0 + MENU_ITEM_FUNCTION_P(_i("Unload filament 3"), extr_unload_2);////MSG_UNLOAD_FILAMENT_3 c=17 r=0 + MENU_ITEM_FUNCTION_P(_i("Unload filament 4"), extr_unload_3);////MSG_UNLOAD_FILAMENT_4 c=17 r=0 - END_MENU(); + MENU_END(); } static void change_extr_menu(){ - START_MENU(); - MENU_ITEM(back, _T(MSG_MAIN), 0); - MENU_ITEM(function, _i("Extruder 1"), extr_change_0);////MSG_EXTRUDER_1 c=17 r=1 - MENU_ITEM(function, _i("Extruder 2"), extr_change_1);////MSG_EXTRUDER_2 c=17 r=1 - MENU_ITEM(function, _i("Extruder 3"), extr_change_2);////MSG_EXTRUDER_3 c=17 r=1 - MENU_ITEM(function, _i("Extruder 4"), extr_change_3);////MSG_EXTRUDER_4 c=17 r=1 + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_MAIN)); + MENU_ITEM_FUNCTION_P(_i("Extruder 1"), extr_change_0);////MSG_EXTRUDER_1 c=17 r=1 + MENU_ITEM_FUNCTION_P(_i("Extruder 2"), extr_change_1);////MSG_EXTRUDER_2 c=17 r=1 + MENU_ITEM_FUNCTION_P(_i("Extruder 3"), extr_change_2);////MSG_EXTRUDER_3 c=17 r=1 + MENU_ITEM_FUNCTION_P(_i("Extruder 4"), extr_change_3);////MSG_EXTRUDER_4 c=17 r=1 - END_MENU(); + MENU_END(); } #endif @@ -5446,23 +5551,23 @@ static void lcd_main_menu() { SDscrool = 0; - START_MENU(); + MENU_BEGIN(); // Majkl superawesome menu - MENU_ITEM(back, _T(MSG_WATCH), 0); + MENU_ITEM_BACK_P(_T(MSG_WATCH)); #ifdef RESUME_DEBUG if (!saved_printing) - MENU_ITEM(function, PSTR("tst - Save"), lcd_menu_test_save); + MENU_ITEM_FUNCTION_P(PSTR("tst - Save"), lcd_menu_test_save); else - MENU_ITEM(function, PSTR("tst - Restore"), lcd_menu_test_restore); + MENU_ITEM_FUNCTION_P(PSTR("tst - Restore"), lcd_menu_test_restore); #endif //RESUME_DEBUG #ifdef TMC2130_DEBUG - MENU_ITEM(function, PSTR("recover print"), recover_print); - MENU_ITEM(function, PSTR("power panic"), uvlo_); + MENU_ITEM_FUNCTION_P(PSTR("recover print"), recover_print); + MENU_ITEM_FUNCTION_P(PSTR("power panic"), uvlo_); #endif //TMC2130_DEBUG /* if (farm_mode && !IS_SD_PRINTING ) @@ -5478,10 +5583,10 @@ static void lcd_main_menu() if (card.filename[0] == '/') { #if SDCARDDETECT == -1 - MENU_ITEM(function, _T(MSG_REFRESH), lcd_sd_refresh); + MENU_ITEM_FUNCTION_P(_T(MSG_REFRESH), lcd_sd_refresh); #endif } else { - MENU_ITEM(function, PSTR(LCD_STR_FOLDER ".."), lcd_sd_updir); + MENU_ITEM_FUNCTION_P(PSTR(LCD_STR_FOLDER ".."), lcd_sd_updir); } for (uint16_t i = 0; i < fileCnt; i++) @@ -5509,23 +5614,23 @@ static void lcd_main_menu() } } - MENU_ITEM(back, PSTR("- - - - - - - - -"), 0); + MENU_ITEM_BACK_P(PSTR("- - - - - - - - -")); }*/ if ( ( IS_SD_PRINTING || is_usb_printing || (lcd_commands_type == LCD_COMMAND_V2_CAL)) && (current_position[Z_AXIS] < Z_HEIGHT_HIDE_LIVE_ADJUST_MENU) && !homing_flag && !mesh_bed_leveling_flag) { - MENU_ITEM(submenu, _T(MSG_BABYSTEP_Z), lcd_babystep_z);//8 + MENU_ITEM_SUBMENU_P(_T(MSG_BABYSTEP_Z), lcd_babystep_z);//8 } if ( moves_planned() || IS_SD_PRINTING || is_usb_printing || (lcd_commands_type == LCD_COMMAND_V2_CAL)) { - MENU_ITEM(submenu, _i("Tune"), lcd_tune_menu);////MSG_TUNE c=0 r=0 + MENU_ITEM_SUBMENU_P(_i("Tune"), lcd_tune_menu);////MSG_TUNE c=0 r=0 } else { - MENU_ITEM(submenu, _i("Preheat"), lcd_preheat_menu);////MSG_PREHEAT c=0 r=0 + MENU_ITEM_SUBMENU_P(_i("Preheat"), lcd_preheat_menu);////MSG_PREHEAT c=0 r=0 } #ifdef SDSUPPORT @@ -5536,35 +5641,35 @@ static void lcd_main_menu() if (mesh_bed_leveling_flag == false && homing_flag == false) { if (card.sdprinting) { - MENU_ITEM(function, _i("Pause print"), lcd_sdcard_pause);////MSG_PAUSE_PRINT c=0 r=0 + MENU_ITEM_FUNCTION_P(_i("Pause print"), lcd_sdcard_pause);////MSG_PAUSE_PRINT c=0 r=0 } else { - MENU_ITEM(function, _i("Resume print"), lcd_sdcard_resume);////MSG_RESUME_PRINT c=0 r=0 + MENU_ITEM_FUNCTION_P(_i("Resume print"), lcd_sdcard_resume);////MSG_RESUME_PRINT c=0 r=0 } - MENU_ITEM(submenu, _T(MSG_STOP_PRINT), lcd_sdcard_stop); + MENU_ITEM_SUBMENU_P(_T(MSG_STOP_PRINT), lcd_sdcard_stop); } } else if (lcd_commands_type == LCD_COMMAND_V2_CAL && mesh_bed_leveling_flag == false && homing_flag == false) { - //MENU_ITEM(submenu, _T(MSG_STOP_PRINT), lcd_sdcard_stop); + //MENU_ITEM_SUBMENU_P(_T(MSG_STOP_PRINT), lcd_sdcard_stop); } else { if (!is_usb_printing && (lcd_commands_type != LCD_COMMAND_V2_CAL)) { - //if (farm_mode) MENU_ITEM(submenu, MSG_FARM_CARD_MENU, lcd_farm_sdcard_menu); - /*else*/ MENU_ITEM(submenu, _T(MSG_CARD_MENU), lcd_sdcard_menu); + //if (farm_mode) MENU_ITEM_SUBMENU_P(MSG_FARM_CARD_MENU, lcd_farm_sdcard_menu); + /*else*/ MENU_ITEM_SUBMENU_P(_T(MSG_CARD_MENU), lcd_sdcard_menu); } #if SDCARDDETECT < 1 - MENU_ITEM(gcode, _i("Change SD card"), PSTR("M21")); // SD-card changed by user////MSG_CNG_SDCARD c=0 r=0 + MENU_ITEM_GCODE_P(_i("Change SD card"), PSTR("M21")); // SD-card changed by user////MSG_CNG_SDCARD c=0 r=0 #endif } } else { - MENU_ITEM(submenu, _i("No SD card"), lcd_sdcard_menu);////MSG_NO_CARD c=0 r=0 + MENU_ITEM_SUBMENU_P(_i("No SD card"), lcd_sdcard_menu);////MSG_NO_CARD c=0 r=0 #if SDCARDDETECT < 1 - MENU_ITEM(gcode, _i("Init. SD card"), PSTR("M21")); // Manually initialize the SD-card via user interface////MSG_INIT_SDCARD c=0 r=0 + MENU_ITEM_GCODE_P(_i("Init. SD card"), PSTR("M21")); // Manually initialize the SD-card via user interface////MSG_INIT_SDCARD c=0 r=0 #endif } #endif @@ -5574,7 +5679,7 @@ static void lcd_main_menu() { if (farm_mode) { - MENU_ITEM(submenu, PSTR("Farm number"), lcd_farm_no); + MENU_ITEM_SUBMENU_P(PSTR("Farm number"), lcd_farm_no); } } else @@ -5582,42 +5687,41 @@ static void lcd_main_menu() #ifndef SNMM #ifdef PAT9125 if ( ((filament_autoload_enabled == true) && (fsensor_enabled == true))) - MENU_ITEM(submenu, _i("AutoLoad filament"), lcd_menu_AutoLoadFilament);////MSG_AUTOLOAD_FILAMENT c=17 r=0 + MENU_ITEM_SUBMENU_P(_i("AutoLoad filament"), lcd_menu_AutoLoadFilament);////MSG_AUTOLOAD_FILAMENT c=17 r=0 else #endif //PAT9125 - MENU_ITEM(function, _T(MSG_LOAD_FILAMENT), lcd_LoadFilament); - MENU_ITEM(submenu, _T(MSG_UNLOAD_FILAMENT), lcd_unLoadFilament); + MENU_ITEM_FUNCTION_P(_T(MSG_LOAD_FILAMENT), lcd_LoadFilament); + MENU_ITEM_SUBMENU_P(_T(MSG_UNLOAD_FILAMENT), lcd_unLoadFilament); #endif #ifdef SNMM - MENU_ITEM(submenu, _T(MSG_LOAD_FILAMENT), fil_load_menu); - MENU_ITEM(submenu, _T(MSG_UNLOAD_FILAMENT), fil_unload_menu); - MENU_ITEM(submenu, _i("Change extruder"), change_extr_menu);////MSG_CHANGE_EXTR c=20 r=1 + MENU_ITEM_SUBMENU_P(_T(MSG_LOAD_FILAMENT), fil_load_menu); + MENU_ITEM_SUBMENU_P(_T(MSG_UNLOAD_FILAMENT), fil_unload_menu); + MENU_ITEM_SUBMENU_P(_i("Change extruder"), change_extr_menu);////MSG_CHANGE_EXTR c=20 r=1 #endif - MENU_ITEM(submenu, _T(MSG_SETTINGS), lcd_settings_menu); - if(!isPrintPaused) MENU_ITEM(submenu, _T(MSG_MENU_CALIBRATION), lcd_calibration_menu); + MENU_ITEM_SUBMENU_P(_T(MSG_SETTINGS), lcd_settings_menu); + if(!isPrintPaused) MENU_ITEM_SUBMENU_P(_T(MSG_MENU_CALIBRATION), lcd_calibration_menu); #ifdef EXPERIMENTAL_FEATURES - MENU_ITEM(submenu, PSTR("Experimantal"), lcd_experimantal_menu); + MENU_ITEM_SUBMENU_P(PSTR("Experimantal"), lcd_experimantal_menu); #endif //EXPERIMENTAL_FEATURES } if (!is_usb_printing && (lcd_commands_type != LCD_COMMAND_V2_CAL)) { - MENU_ITEM(submenu, _i("Statistics "), lcd_menu_statistics);////MSG_STATISTICS c=0 r=0 + MENU_ITEM_SUBMENU_P(_i("Statistics "), lcd_menu_statistics);////MSG_STATISTICS c=0 r=0 } #if defined(TMC2130) || defined(PAT9125) - MENU_ITEM(submenu, PSTR("Fail stats"), lcd_menu_fails_stats); + MENU_ITEM_SUBMENU_P(PSTR("Fail stats"), lcd_menu_fails_stats); #endif - MENU_ITEM(submenu, _i("Support"), lcd_support_menu);////MSG_SUPPORT c=0 r=0 -// MENU_ITEM(submenu, _i("W25x20CL init"), lcd_test_menu);////MSG_SUPPORT c=0 r=0 + MENU_ITEM_SUBMENU_P(_i("Support"), lcd_support_menu);////MSG_SUPPORT c=0 r=0 -#ifdef DEBUG_MENU_PRINTF_TEST - menu_item_printf_P(_menuItemNr, _lineNr, _N("Test %d %d %d"), 0, 1, 2); -#endif //DEBUG_MENU_PRINTF_TEST + MENU_ITEM_SUBMENU_P(_i("W25x20CL init"), lcd_test_menu);////MSG_SUPPORT c=0 r=0 - END_MENU(); +// menu_item_printf_P('#', _N("Test %d %d %d"), 0, 1, 2); + + MENU_END(); } @@ -5677,7 +5781,7 @@ static void lcd_silent_mode_set_tune() { } eeprom_update_byte((unsigned char *)EEPROM_SILENT, SilentModeMenu); st_current_init(); - menu_action_back(); + menu_back(); } static void lcd_colorprint_change() { @@ -5707,8 +5811,8 @@ static void lcd_tune_menu() - START_MENU(); - MENU_ITEM(back, _T(MSG_MAIN), 0); //1 + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_MAIN)); //1 MENU_ITEM_EDIT(int3, _i("Speed"), &feedmultiply, 10, 999);//2////MSG_SPEED c=0 r=0 MENU_ITEM_EDIT(int3, _T(MSG_NOZZLE), &target_temperature[0], 0, HEATER_0_MAXTEMP - 10);//3 @@ -5717,16 +5821,16 @@ static void lcd_tune_menu() MENU_ITEM_EDIT(int3, _T(MSG_FAN_SPEED), &fanSpeed, 0, 255);//5 MENU_ITEM_EDIT(int3, _i("Flow"), &extrudemultiply, 10, 999);//6////MSG_FLOW c=0 r=0 #ifdef FILAMENTCHANGEENABLE - MENU_ITEM(function, _T(MSG_FILAMENTCHANGE), lcd_colorprint_change);//7 + MENU_ITEM_FUNCTION_P(_T(MSG_FILAMENTCHANGE), lcd_colorprint_change);//7 #endif #ifndef DEBUG_DISABLE_FSENSORCHECK #ifdef PAT9125 if (FSensorStateMenu == 0) { - MENU_ITEM(function, _T(MSG_FSENSOR_OFF), lcd_fsensor_state_set); + MENU_ITEM_FUNCTION_P(_T(MSG_FSENSOR_OFF), lcd_fsensor_state_set); } else { - MENU_ITEM(function, _T(MSG_FSENSOR_ON), lcd_fsensor_state_set); + MENU_ITEM_FUNCTION_P(_T(MSG_FSENSOR_ON), lcd_fsensor_state_set); } #endif //PAT9125 #endif //DEBUG_DISABLE_FSENSORCHECK @@ -5734,27 +5838,27 @@ static void lcd_tune_menu() #ifdef TMC2130 if(!farm_mode) { - if (SilentModeMenu == SILENT_MODE_NORMAL) MENU_ITEM(function, _T(MSG_STEALTH_MODE_OFF), lcd_silent_mode_set); - else MENU_ITEM(function, _T(MSG_STEALTH_MODE_ON), lcd_silent_mode_set); + if (SilentModeMenu == SILENT_MODE_NORMAL) MENU_ITEM_FUNCTION_P(_T(MSG_STEALTH_MODE_OFF), lcd_silent_mode_set); + else MENU_ITEM_FUNCTION_P(_T(MSG_STEALTH_MODE_ON), lcd_silent_mode_set); if (SilentModeMenu == SILENT_MODE_NORMAL) { - if (CrashDetectMenu == 0) MENU_ITEM(function, _T(MSG_CRASHDETECT_OFF), lcd_crash_mode_set); - else MENU_ITEM(function, _T(MSG_CRASHDETECT_ON), lcd_crash_mode_set); + if (CrashDetectMenu == 0) MENU_ITEM_FUNCTION_P(_T(MSG_CRASHDETECT_OFF), lcd_crash_mode_set); + else MENU_ITEM_FUNCTION_P(_T(MSG_CRASHDETECT_ON), lcd_crash_mode_set); } - else MENU_ITEM(submenu, _T(MSG_CRASHDETECT_NA), lcd_crash_mode_info); + else MENU_ITEM_SUBMENU_P(_T(MSG_CRASHDETECT_NA), lcd_crash_mode_info); } #else //TMC2130 if (!farm_mode) { //dont show in menu if we are in farm mode switch (SilentModeMenu) { - case SILENT_MODE_POWER: MENU_ITEM(function, _T(MSG_SILENT_MODE_OFF), lcd_silent_mode_set); break; - case SILENT_MODE_SILENT: MENU_ITEM(function, _T(MSG_SILENT_MODE_ON), lcd_silent_mode_set); break; - case SILENT_MODE_AUTO: MENU_ITEM(function, _T(MSG_AUTO_MODE_ON), lcd_silent_mode_set); break; - default: MENU_ITEM(function, _T(MSG_SILENT_MODE_OFF), lcd_silent_mode_set); break; // (probably) not needed + case SILENT_MODE_POWER: MENU_ITEM_FUNCTION_P(_T(MSG_SILENT_MODE_OFF), lcd_silent_mode_set); break; + case SILENT_MODE_SILENT: MENU_ITEM_FUNCTION_P(_T(MSG_SILENT_MODE_ON), lcd_silent_mode_set); break; + case SILENT_MODE_AUTO: MENU_ITEM_FUNCTION_P(_T(MSG_AUTO_MODE_ON), lcd_silent_mode_set); break; + default: MENU_ITEM_FUNCTION_P(_T(MSG_SILENT_MODE_OFF), lcd_silent_mode_set); break; // (probably) not needed } } #endif //TMC2130 - END_MENU(); + MENU_END(); } static void lcd_move_menu_01mm() @@ -5771,8 +5875,8 @@ static void lcd_control_temperature_menu() // raw_Kd = unscalePID_d(Kd); #endif - START_MENU(); - MENU_ITEM(back, _T(MSG_SETTINGS), 0); + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_SETTINGS)); #if TEMP_SENSOR_0 != 0 MENU_ITEM_EDIT(int3, _T(MSG_NOZZLE), &target_temperature[0], 0, HEATER_0_MAXTEMP - 10); #endif @@ -5793,7 +5897,7 @@ static void lcd_control_temperature_menu() MENU_ITEM_EDIT(float32, _i(" \002 Fact"), &autotemp_factor, 0.0, 1.0);////MSG_FACTOR c=0 r=0 #endif - END_MENU(); + MENU_END(); } @@ -5920,16 +6024,16 @@ void lcd_sdcard_menu() return; // nothing to do (so don't thrash the SD card) uint16_t fileCnt = card.getnrfilenames(); - START_MENU(); - MENU_ITEM(back, _T(MSG_MAIN), 0); + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_MAIN)); card.getWorkDirName(); if (card.filename[0] == '/') { #if SDCARDDETECT == -1 - MENU_ITEM(function, _T(MSG_REFRESH), lcd_sd_refresh); + MENU_ITEM_FUNCTION_P(_T(MSG_REFRESH), lcd_sd_refresh); #endif } else { - MENU_ITEM(function, PSTR(LCD_STR_FOLDER ".."), lcd_sd_updir); + MENU_ITEM_FUNCTION_P(PSTR(LCD_STR_FOLDER ".."), lcd_sd_updir); } for (uint16_t i = 0; i < fileCnt; i++) @@ -5958,7 +6062,7 @@ void lcd_sdcard_menu() MENU_ITEM_DUMMY(); } } - END_MENU(); + MENU_END(); } //char description [10] [31]; @@ -5987,17 +6091,17 @@ void lcd_sdcard_menu() return; // nothing to do (so don't thrash the SD card) uint16_t fileCnt = card.getnrfilenames(); - START_MENU(); - MENU_ITEM(back, _T(MSG_MAIN), 0); + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_MAIN)); card.getWorkDirName(); if (card.filename[0] == '/') { #if SDCARDDETECT == -1 - MENU_ITEM(function, _T(MSG_REFRESH), lcd_sd_refresh); + MENU_ITEM_FUNCTION_P(_T(MSG_REFRESH), lcd_sd_refresh); #endif } else { - MENU_ITEM(function, PSTR(LCD_STR_FOLDER ".."), lcd_sd_updir); + MENU_ITEM_FUNCTION_P(PSTR(LCD_STR_FOLDER ".."), lcd_sd_updir); } @@ -6024,7 +6128,7 @@ void lcd_sdcard_menu() MENU_ITEM_DUMMY(); } } - END_MENU(); + MENU_END(); }*/ @@ -7098,29 +7202,6 @@ static void lcd_quick_feedback() /** Menu action functions **/ -/** - * @brief Go up in menu structure - * @param data one time action to be done before leaving menu e.g. saving data or 0 - */ -static void menu_action_back(menuFunc_t data) -{ - if (data) data(); - MenuStack::Record record = menuStack.pop(); - lcd_goto_menu(record.menu); - encoderPosition = record.position; -} -/** - * @brief Go deeper into menu structure - * @param data nested menu - */ -static void menu_action_submenu(menuFunc_t data) { - menuStack.push(currentMenu, encoderPosition); - lcd_goto_menu(data); -} -static void menu_action_gcode(const char* pgcode) { - enquecommand_P(pgcode); -} - static void menu_action_setlang(unsigned char lang) { if (!lang_select(lang)) @@ -7135,10 +7216,6 @@ static void menu_action_setlang(unsigned char lang) } } -static void menu_action_function(menuFunc_t data) { - (*data)(); -} - static bool check_file(const char* filename) { if (farm_mode) return true; bool result = false; @@ -7593,7 +7670,7 @@ void lcd_buttons_update() if (longPressTimer.expired(LONG_PRESS_TIME)) { long_press_active = true; move_menu_scale = 1.0; - menu_action_submenu(lcd_move_z); + menu_submenu(lcd_move_z); } } } diff --git a/Firmware/ultralcd_implementation_hitachi_HD44780.h b/Firmware/ultralcd_implementation_hitachi_HD44780.h index 25ce2cea5..227a08b4a 100644 --- a/Firmware/ultralcd_implementation_hitachi_HD44780.h +++ b/Firmware/ultralcd_implementation_hitachi_HD44780.h @@ -1352,16 +1352,7 @@ static void lcd_implementation_drawmenu_sddirectory(uint8_t row, const char* pst while(n--) lcd.print(' '); } -#define lcd_implementation_drawmenu_back_selected(row, pstr, data) lcd_implementation_drawmenu_generic(row, pstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0]) -#define lcd_implementation_drawmenu_back(row, pstr, data) lcd_implementation_drawmenu_generic(row, pstr, ' ', LCD_STR_UPLEVEL[0]) -#define lcd_implementation_drawmenu_back_RAM_selected(row, str, data) lcd_implementation_drawmenu_generic_RAM(row, str, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0]) -#define lcd_implementation_drawmenu_back_RAM(row, str, data) lcd_implementation_drawmenu_generic_RAM(row, str, ' ', LCD_STR_UPLEVEL[0]) -#define lcd_implementation_drawmenu_submenu_selected(row, pstr, data) lcd_implementation_drawmenu_generic(row, pstr, '>', LCD_STR_ARROW_RIGHT[0]) -#define lcd_implementation_drawmenu_submenu(row, pstr, data) lcd_implementation_drawmenu_generic(row, pstr, ' ', LCD_STR_ARROW_RIGHT[0]) -#define lcd_implementation_drawmenu_gcode_selected(row, pstr, gcode) lcd_implementation_drawmenu_generic(row, pstr, '>', ' ') -#define lcd_implementation_drawmenu_gcode(row, pstr, gcode) lcd_implementation_drawmenu_generic(row, pstr, ' ', ' ') -#define lcd_implementation_drawmenu_function_selected(row, pstr, data) lcd_implementation_drawmenu_generic(row, pstr, '>', ' ') -#define lcd_implementation_drawmenu_function(row, pstr, data) lcd_implementation_drawmenu_generic(row, pstr, ' ', ' ') + #define lcd_implementation_drawmenu_setlang_selected(row, pstr, data) lcd_implementation_drawmenu_generic(row, pstr, '>', ' ') #define lcd_implementation_drawmenu_setlang(row, pstr, data) lcd_implementation_drawmenu_generic(row, pstr, ' ', ' ') diff --git a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h index 4c9f24335..2cf61d55f 100644 --- a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h @@ -149,7 +149,6 @@ //#define DEBUG_BUILD //#define DEBUG_SEC_LANG //secondary language debug output at startup //#define DEBUG_W25X20CL //debug external spi flash -//#define DEBUG_MENU_PRINTF_TEST #ifdef DEBUG_BUILD //#define _NO_ASM #define DEBUG_DCODES //D codes