From 49eb0a58b622b523fd041ef5626d76bb8651d822 Mon Sep 17 00:00:00 2001 From: TinkerGnome Date: Mon, 16 Feb 2015 00:04:56 +0100 Subject: [PATCH] changed behavior of the pause menu --- Marlin/UltiLCD2_menu_print.cpp | 178 +++++++++++++++++--- Marlin/UltiLCD2_menu_print.h | 1 + Marlin/UltiLCD2_menu_utils.cpp | 9 + Marlin/UltiLCD2_menu_utils.h | 3 + Marlin/tinkergnome.cpp | 289 ++++++++++++++++----------------- Marlin/tinkergnome.h | 3 + 6 files changed, 309 insertions(+), 174 deletions(-) diff --git a/Marlin/UltiLCD2_menu_print.cpp b/Marlin/UltiLCD2_menu_print.cpp index 6a09d854b..cfb6bb53a 100644 --- a/Marlin/UltiLCD2_menu_print.cpp +++ b/Marlin/UltiLCD2_menu_print.cpp @@ -91,11 +91,6 @@ static void userAbortPrint() static void checkPrintFinished() { - if (pauseRequested) - { - lcd_print_pause(); - } - if (!card.sdprinting && !is_command_queued()) { abortPrint(); @@ -105,6 +100,11 @@ static void checkPrintFinished() abortPrint(); menu.replace_menu(menu_t(lcd_menu_print_error, MAIN_MENU_ITEM_POS(0))); } +// else if (pauseRequested) +// { +// menu.add_menu(menu_t(lcd_select_first_submenu, lcd_menu_print_resume, NULL, MAIN_MENU_ITEM_POS(0)), !pauseRequested); +// lcd_print_pause(); +// } } void doStartPrint() @@ -552,11 +552,11 @@ static void lcd_menu_print_printing() // else if (card.pause) { - menu.add_menu(menu_t(lcd_menu_print_pause, MAIN_MENU_ITEM_POS(0)), true); + menu.add_menu(menu_t(lcd_select_first_submenu, lcd_menu_print_resume, NULL, MAIN_MENU_ITEM_POS(0)), true); } else { - lcd_question_screen(lcd_menu_print_tune, NULL, PSTR("TUNE"), NULL, lcd_print_pause, PSTR("PAUSE")); + lcd_question_screen(lcd_menu_print_tune, NULL, PSTR("TUNE"), lcd_menu_print_pause, lcd_select_first_submenu, PSTR("PAUSE")); uint8_t progress = card.getFilePos() / ((card.getFileSize() + 123) / 124); char* c; switch(printing_state) @@ -945,18 +945,18 @@ void lcd_print_pause() if (movesplanned() > 0 && commands_queued() < BUFSIZE) { card.pause = true; - menu.add_menu(menu_t(lcd_menu_print_pause, MAIN_MENU_ITEM_POS(0)), !pauseRequested); + // menu.add_menu(menu_t(lcd_menu_print_resume, MAIN_MENU_ITEM_POS(0)), !pauseRequested); pauseRequested = false; if (current_position[Z_AXIS] < Z_MAX_POS - 60) - enquecommand_P(PSTR("M601 X10 Y200 Z20 L20")); + enquecommand_P(PSTR("M601 X10 Y20 Z20 L20")); else if (current_position[Z_AXIS] < Z_MAX_POS - 30) - enquecommand_P(PSTR("M601 X10 Y200 Z2 L20")); + enquecommand_P(PSTR("M601 X10 Y20 Z2 L20")); else - enquecommand_P(PSTR("M601 X10 Y200 Z0 L20")); + enquecommand_P(PSTR("M601 X10 Y20 Z0 L20")); } else if (!pauseRequested) { - lcd_lib_beep(); + // lcd_lib_beep(); pauseRequested = true; } } @@ -982,6 +982,7 @@ void lcd_print_abort() static void lcd_print_resume() { card.pause = false; + pauseRequested = false; menu.return_to_previous(); } @@ -991,16 +992,22 @@ static void lcd_print_change_material() menu.add_menu(menu_t(lcd_menu_change_material_preheat)); } +static void lcd_show_pause_menu() +{ + lcd_print_pause(); + menu.replace_menu(menu_t(lcd_select_first_submenu, lcd_menu_print_resume, NULL, MAIN_MENU_ITEM_POS(0))); +} + static const menu_t & get_pause_menuoption(uint8_t nr, menu_t &opt) { menu_index = 0; if (nr == menu_index++) { - opt.setData(MENU_NORMAL, lcd_print_resume); + opt.setData(MENU_NORMAL, lcd_show_pause_menu); } else if (nr == menu_index++) { - opt.setData(MENU_NORMAL, lcd_print_change_material); + opt.setData(MENU_NORMAL, lcd_print_abort); } else if (nr == menu_index++) { @@ -1008,7 +1015,7 @@ static const menu_t & get_pause_menuoption(uint8_t nr, menu_t &opt) } else if (nr == menu_index++) { - opt.setData(MENU_NORMAL, lcd_print_abort); + opt.setData(MENU_NORMAL, lcd_change_to_previous_menu); } return opt; } @@ -1022,16 +1029,141 @@ static void drawPauseSubmenu(uint8_t nr, uint8_t &flags) , LCD_LINE_HEIGHT , 52 , LCD_LINE_HEIGHT*4 - , PSTR("RESUME|") + , PSTR("PAUSE|") + , ALIGN_CENTER + , flags); + if (flags & MENU_SELECTED) + { + lcd_lib_clear_gfx(LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, pauseGfx); + } + else + { + lcd_lib_draw_gfx(LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, pauseGfx); + } + } + else if (nr == index++) + { + LCDMenu::drawMenuString_P(LCD_GFX_WIDTH/2 + LCD_CHAR_MARGIN_LEFT+3 + , LCD_LINE_HEIGHT + , 52 + , LCD_LINE_HEIGHT*4 + , PSTR("ABORT|") , ALIGN_CENTER , flags); if (flags & MENU_SELECTED) { - lcd_lib_clear_gfx(LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, startGfx); + lcd_lib_clear_gfx(LCD_GFX_WIDTH/2 + LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, standbyGfx); } else { - lcd_lib_draw_gfx(LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, startGfx); + lcd_lib_draw_gfx(LCD_GFX_WIDTH/2 + LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, standbyGfx); + } + } + else if (nr == index++) + { + LCDMenu::drawMenuString_P(LCD_CHAR_MARGIN_LEFT+3 + , BOTTOM_MENU_YPOS + , 52 + , LCD_CHAR_HEIGHT + , PSTR("TUNE") + , ALIGN_CENTER + , flags); + } + else if (nr == index++) + { + LCDMenu::drawMenuBox(LCD_GFX_WIDTH/2 + LCD_CHAR_MARGIN_LEFT + 1 + , BOTTOM_MENU_YPOS + , 52 + , LCD_CHAR_HEIGHT + , flags); + if (flags & MENU_SELECTED) + { + lcd_lib_clear_stringP(LCD_GFX_WIDTH/2 + LCD_CHAR_MARGIN_LEFT + 3*LCD_CHAR_SPACING+1, BOTTOM_MENU_YPOS, PSTR("BACK")); + lcd_lib_clear_gfx(LCD_GFX_WIDTH/2 + 2*LCD_CHAR_SPACING, BOTTOM_MENU_YPOS, backGfx); + } + else + { + lcd_lib_draw_stringP(LCD_GFX_WIDTH/2 + LCD_CHAR_MARGIN_LEFT + 3*LCD_CHAR_SPACING+1, BOTTOM_MENU_YPOS, PSTR("BACK")); + lcd_lib_draw_gfx(LCD_GFX_WIDTH/2 + 2*LCD_CHAR_SPACING, BOTTOM_MENU_YPOS, backGfx); + } + } +} + +void lcd_menu_print_pause() +{ + lcd_lib_clear(); + lcd_lib_draw_vline(64, 5, 46); + lcd_lib_draw_hline(3, 124, 50); + + menu.process_submenu(get_pause_menuoption, 4); + + for (uint8_t index=0; index<4; ++index) + { + menu.drawSubMenu(drawPauseSubmenu, index); + } + lcd_lib_update_screen(); +} + +static const menu_t & get_resume_menuoption(uint8_t nr, menu_t &opt) +{ + menu_index = 0; + if (nr == menu_index++) + { + opt.setData(MENU_NORMAL, lcd_print_resume); + } + else if (nr == menu_index++) + { + opt.setData(MENU_NORMAL, lcd_print_change_material); + } + else if (nr == menu_index++) + { + opt.setData(MENU_NORMAL, lcd_print_tune); + } + else if (nr == menu_index++) + { + opt.setData(MENU_NORMAL, lcd_print_abort); + } + return opt; +} + +static void drawResumeSubmenu(uint8_t nr, uint8_t &flags) +{ + uint8_t index(0); + if (nr == index++) + { + if (card.pause && (movesplanned() == 0)) + { + LCDMenu::drawMenuString_P(LCD_CHAR_MARGIN_LEFT+3 + , LCD_LINE_HEIGHT + , 52 + , LCD_LINE_HEIGHT*4 + , PSTR("RESUME|") + , ALIGN_CENTER + , flags); + if (flags & MENU_SELECTED) + { + lcd_lib_clear_gfx(LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, startGfx); + } + else + { + lcd_lib_draw_gfx(LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, startGfx); + } + } else { + LCDMenu::drawMenuString_P(LCD_CHAR_MARGIN_LEFT+3 + , LCD_LINE_HEIGHT + , 52 + , LCD_LINE_HEIGHT*4 + , PSTR("PAUSING|") + , ALIGN_CENTER + , flags); + if (flags & MENU_SELECTED) + { + lcd_lib_clear_gfx(LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, hourglassGfx); + } + else + { + lcd_lib_draw_gfx(LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, hourglassGfx); + } } } else if (nr == index++) @@ -1074,17 +1206,21 @@ static void drawPauseSubmenu(uint8_t nr, uint8_t &flags) } } -void lcd_menu_print_pause() +void lcd_menu_print_resume() { + if (pauseRequested) + { + lcd_print_pause(); + } lcd_lib_clear(); lcd_lib_draw_vline(64, 5, 46); lcd_lib_draw_hline(3, 124, 50); - menu.process_submenu(get_pause_menuoption, 4); + menu.process_submenu(get_resume_menuoption, 4); for (uint8_t index=0; index<4; ++index) { - menu.drawSubMenu(drawPauseSubmenu, index); + menu.drawSubMenu(drawResumeSubmenu, index); } lcd_lib_update_screen(); } diff --git a/Marlin/UltiLCD2_menu_print.h b/Marlin/UltiLCD2_menu_print.h index 4d5b2ba76..66a00da3f 100644 --- a/Marlin/UltiLCD2_menu_print.h +++ b/Marlin/UltiLCD2_menu_print.h @@ -32,6 +32,7 @@ void lcd_menu_print_tune_heatup_nozzle1(); void doStartPrint(); void lcd_change_to_menu_change_material_return(); void lcd_menu_print_pause(); +void lcd_menu_print_resume(); //extern bool primed; diff --git a/Marlin/UltiLCD2_menu_utils.cpp b/Marlin/UltiLCD2_menu_utils.cpp index 100bc1013..2a1635cab 100644 --- a/Marlin/UltiLCD2_menu_utils.cpp +++ b/Marlin/UltiLCD2_menu_utils.cpp @@ -61,6 +61,7 @@ void LCDMenu::replace_menu(menu_t nextMenu, bool beep) init_menu_switch(beep); menuStack[currentIndex] = nextMenu; lastEncoderPos = lcd_lib_encoder_pos = nextMenu.encoderPos; + lcd_lib_button_pressed = false; // menu initialization if (nextMenu.initMenuFunc) { @@ -82,6 +83,7 @@ void LCDMenu::return_to_previous(bool beep) // switch back to previous menu --currentIndex; lastEncoderPos = lcd_lib_encoder_pos = menuStack[currentIndex].encoderPos; + lcd_lib_button_pressed = false; if (menuStack[currentIndex].initMenuFunc) { menuStack[currentIndex].initMenuFunc(); @@ -106,6 +108,7 @@ void LCDMenu::return_to_main(bool beep) --currentIndex; } lastEncoderPos = lcd_lib_encoder_pos = menuStack[currentIndex].encoderPos; + lcd_lib_button_pressed = false; if (menuStack[currentIndex].initMenuFunc) { menuStack[currentIndex].initMenuFunc(); @@ -130,6 +133,7 @@ void LCDMenu::reset_submenu() lastEncoderPos = lcd_lib_encoder_pos = menuStack[currentIndex].encoderPos; activeSubmenu = menu_t(); selectedSubmenu = -1; + lcd_lib_button_pressed = false; } void LCDMenu::drawMenuBox(uint8_t left, uint8_t top, uint8_t width, uint8_t height, uint8_t flags) @@ -345,5 +349,10 @@ void LCDMenu::reset_selection() lcd_lib_button_pressed = lcd_lib_button_down = false; } +void LCDMenu::set_selection(int8_t index) +{ + lcd_lib_encoder_pos = MAIN_MENU_ITEM_POS(index); + lastEncoderPos = lcd_lib_encoder_pos-1; +} #endif diff --git a/Marlin/UltiLCD2_menu_utils.h b/Marlin/UltiLCD2_menu_utils.h index fff33ddc8..f0de95639 100644 --- a/Marlin/UltiLCD2_menu_utils.h +++ b/Marlin/UltiLCD2_menu_utils.h @@ -119,6 +119,7 @@ class LCDMenu void process_submenu(menuItemCallback_t getMenuItem, uint8_t len); void reset_submenu(); + void set_selection(int8_t index); void drawSubMenu(menuDrawCallback_t drawFunc, uint8_t nr, uint8_t &flags); void drawSubMenu(menuDrawCallback_t drawFunc, uint8_t nr); FORCE_INLINE bool isSubmenuSelected() const { return (selectedSubmenu >= 0); } @@ -152,5 +153,7 @@ extern uint8_t menu_index; FORCE_INLINE void lcd_change_to_previous_menu() { menu.return_to_previous(); } FORCE_INLINE void lcd_return_to_main_menu() { menu.return_to_main(); } FORCE_INLINE void lcd_remove_menu() { menu.return_to_previous(false); } +FORCE_INLINE void lcd_select_first_submenu() { menu.set_selection(0); } +FORCE_INLINE void lcd_reset_submenu() { menu.reset_submenu(); } #endif diff --git a/Marlin/tinkergnome.cpp b/Marlin/tinkergnome.cpp index 01e52543b..50bbca347 100644 --- a/Marlin/tinkergnome.cpp +++ b/Marlin/tinkergnome.cpp @@ -142,6 +142,12 @@ const uint8_t standbyGfx[] PROGMEM = { 0x1C, 0x22, 0x40, 0x4F, 0x40, 0x22, 0x1C }; +const uint8_t backGfx[] PROGMEM = { + 7, 8, //size + 0x10, 0x38, 0x7C, 0x10, 0x10, 0x10, 0x1E +}; + + static void lcd_menu_print_page_inc() { lcd_lib_beep(); lcd_basic_screen(); ++printing_page; } static void lcd_menu_print_page_dec() { lcd_lib_beep(); lcd_basic_screen(); --printing_page; } static void lcd_print_tune_speed(); @@ -214,6 +220,11 @@ static const menu_t & get_heatup_menuoption(uint8_t nr, menu_t &opt) return opt; } +static void lcd_print_ask_pause() +{ + menu.add_menu(menu_t(lcd_select_first_submenu, lcd_menu_print_pause, NULL, MAIN_MENU_ITEM_POS(0))); +} + // return print menu option static const menu_t & get_print_menuoption(uint8_t nr, menu_t &opt) { @@ -226,7 +237,7 @@ static const menu_t & get_print_menuoption(uint8_t nr, menu_t &opt) } else if (nr == menu_index++) { - opt.setData(MENU_NORMAL, lcd_print_pause); + opt.setData(MENU_NORMAL, lcd_print_ask_pause); } else if (nr == menu_index++) { @@ -259,7 +270,7 @@ static const menu_t & get_print_menuoption(uint8_t nr, menu_t &opt) { if (nr == menu_index++) { - opt.setData(MENU_NORMAL, lcd_print_pause); + opt.setData(MENU_NORMAL, lcd_print_ask_pause); } else if (nr == menu_index++) { @@ -1163,183 +1174,155 @@ unsigned long predictTimeLeft() void lcd_menu_printing_tg() { - if (card.pause) - { - menu.add_menu(menu_t(lcd_menu_print_pause, MAIN_MENU_ITEM_POS(0)), true); - } - else + lcd_basic_screen(); + lcd_lib_draw_hline(3, 124, 13); + + // calculate speeds - thanks norpchen + if (current_block!=NULL) { -// static block_t *lastBlock = 0; - lcd_basic_screen(); - lcd_lib_draw_hline(3, 124, 13); + if ((current_block->steps_e > 0) && (current_block->steps_x || current_block->steps_y)) + { +// float block_time = current_block->millimeters / current_block->nominal_speed; +// float mm_e = current_block->steps_e / axis_steps_per_unit[E_AXIS]; -// if (current_block != lastBlock) -// { -// lastBlock = current_block; - // calculate speeds - thanks norpchen - if (current_block!=NULL) - { + // calculate live extrusion rate from e speed and filament area + float speed_e = current_block->steps_e * current_block->nominal_rate / axis_steps_per_unit[E_AXIS] / current_block->step_event_count; + float volume = (volume_to_filament_length[current_block->active_extruder] < 0.99) ? speed_e / volume_to_filament_length[current_block->active_extruder] : speed_e*DEFAULT_FILAMENT_AREA; - if ((current_block->steps_e > 0) && (current_block->steps_x || current_block->steps_y)) - { - // float block_time = current_block->millimeters / current_block->nominal_speed; - // float mm_e = current_block->steps_e / axis_steps_per_unit[E_AXIS]; + e_smoothed_speed[current_block->active_extruder] = (e_smoothed_speed[current_block->active_extruder]*LOW_PASS_SMOOTHING) + ( volume *(1.0-LOW_PASS_SMOOTHING)); + } + } - // calculate live extrusion rate from e speed and filament area - float speed_e = current_block->steps_e * current_block->nominal_rate / axis_steps_per_unit[E_AXIS] / current_block->step_event_count; - float volume = (volume_to_filament_length[current_block->active_extruder] < 0.99) ? speed_e / volume_to_filament_length[current_block->active_extruder] : speed_e*DEFAULT_FILAMENT_AREA; + if (printing_page == 0) + { + uint8_t progress = card.getFilePos() / ((card.getFileSize() + 123) / 124); + unsigned long timeLeftSec; + switch(printing_state) + { + default: -// if (speed_e>0.1) -// { - e_smoothed_speed[current_block->active_extruder] = (e_smoothed_speed[current_block->active_extruder]*LOW_PASS_SMOOTHING) + ( volume *(1.0-LOW_PASS_SMOOTHING)); -// } - } + if (card.pause || isPauseRequested()) + { + lcd_lib_draw_gfx(54, 15, hourglassGfx); + lcd_lib_draw_stringP(64, 15, (movesplanned() < 1) ? PSTR("Paused...") : PSTR("Pausing...")); } -// } - - if (printing_page == 1) - { - // lcd_lib_draw_string_leftP(15, PSTR("Retract")); - // lcd_lib_draw_stringP(LCD_GFX_WIDTH - 2*LCD_CHAR_MARGIN_RIGHT - 8*LCD_CHAR_SPACING, 15, PSTR("L")); - #if EXTRUDERS > 1 - // lcd_lib_draw_string_leftP(24, PSTR("E")); - #endif - // lcd_lib_draw_stringP(LCD_GFX_WIDTH - 2*LCD_CHAR_MARGIN_RIGHT - 8*LCD_CHAR_SPACING, 24, PSTR("S")); - // lcd_lib_draw_string_leftP(33, PSTR("Accel")); - // lcd_lib_draw_string_leftP(42, PSTR("Jerk")); - // lcd_lib_draw_stringP(LCD_GFX_WIDTH - 2*LCD_CHAR_MARGIN_RIGHT - 7*LCD_CHAR_SPACING, 42, PSTR("LED")); - } - else - { - uint8_t progress = card.getFilePos() / ((card.getFileSize() + 123) / 124); - unsigned long timeLeftSec; - switch(printing_state) + else { - default: - - if (card.pause || isPauseRequested()) - { - lcd_lib_draw_gfx(54, 15, hourglassGfx); - lcd_lib_draw_stringP(64, 15, (movesplanned() < 1) ? PSTR("Paused...") : PSTR("Pausing...")); - } - else + // time left + timeLeftSec = predictTimeLeft(); + if (timeLeftSec > 0) { - // time left - timeLeftSec = predictTimeLeft(); - if (timeLeftSec > 0) - { - lcd_lib_draw_gfx(54, 15, clockInverseGfx); - int_to_time_string_tg(timeLeftSec, LCD_CACHE_FILENAME(0)); - lcd_lib_draw_string(64, 15, LCD_CACHE_FILENAME(0)); - - // draw progress string right aligned - int_to_string(progress*100/124, LCD_CACHE_FILENAME(0), PSTR("%")); - lcd_lib_draw_string_right(15, LCD_CACHE_FILENAME(0)); - lcd_progressline(progress); - } + lcd_lib_draw_gfx(54, 15, clockInverseGfx); + int_to_time_string_tg(timeLeftSec, LCD_CACHE_FILENAME(0)); + lcd_lib_draw_string(64, 15, LCD_CACHE_FILENAME(0)); + + // draw progress string right aligned + int_to_string(progress*100/124, LCD_CACHE_FILENAME(0), PSTR("%")); + lcd_lib_draw_string_right(15, LCD_CACHE_FILENAME(0)); + lcd_progressline(progress); } + } - break; - case PRINT_STATE_WAIT_USER: - lcd_lib_encoder_pos = ENCODER_NO_SELECTION; - menu.reset_submenu(); - // lcd_lib_draw_string_left(5, PSTR("Paused...")); - lcd_lib_draw_string_left(5, card.longFilename); - lcd_lib_draw_gfx(54, 15, hourglassGfx); - if (movesplanned() < 1) - { - lcd_lib_draw_stringP(64, 15, PSTR("Paused...")); - lcd_lib_draw_string_leftP(BOTTOM_MENU_YPOS, PSTR("Click to continue...")); - } - else - { - lcd_lib_draw_stringP(64, 15, PSTR("Pausing...")); - } - if (!led_glow) - { - lcd_lib_tick(); - } - break; + break; + case PRINT_STATE_WAIT_USER: + lcd_lib_encoder_pos = ENCODER_NO_SELECTION; + menu.reset_submenu(); + // lcd_lib_draw_string_left(5, PSTR("Paused...")); + lcd_lib_draw_string_left(5, card.longFilename); + lcd_lib_draw_gfx(54, 15, hourglassGfx); + if (movesplanned() < 1) + { + lcd_lib_draw_stringP(64, 15, PSTR("Paused...")); + lcd_lib_draw_string_leftP(BOTTOM_MENU_YPOS, PSTR("Click to continue...")); + } + else + { + lcd_lib_draw_stringP(64, 15, PSTR("Pausing...")); + } + if (!led_glow) + { + lcd_lib_tick(); } + break; + } - // all printing states - // z position - lcd_lib_draw_string_leftP(15, PSTR("Z")); + // all printing states + // z position + lcd_lib_draw_string_leftP(15, PSTR("Z")); - // float_to_string(current_position[Z_AXIS], LCD_CACHE_FILENAME(0), NULL); - // calculate current z position - float_to_string(st_get_position(Z_AXIS) / axis_steps_per_unit[Z_AXIS], LCD_CACHE_FILENAME(0), NULL); - lcd_lib_draw_string(LCD_CHAR_MARGIN_LEFT+12, 15, LCD_CACHE_FILENAME(0)); + // float_to_string(current_position[Z_AXIS], LCD_CACHE_FILENAME(0), NULL); + // calculate current z position + float_to_string(st_get_position(Z_AXIS) / axis_steps_per_unit[Z_AXIS], LCD_CACHE_FILENAME(0), NULL); + lcd_lib_draw_string(LCD_CHAR_MARGIN_LEFT+12, 15, LCD_CACHE_FILENAME(0)); - // flow - lcd_lib_draw_gfx(LCD_CHAR_MARGIN_LEFT-1, 24, flowGfx); - // temperature first extruder - lcd_lib_draw_gfx(LCD_CHAR_MARGIN_LEFT, 33, thermometerGfx); + // flow + lcd_lib_draw_gfx(LCD_CHAR_MARGIN_LEFT-1, 24, flowGfx); + // temperature first extruder + lcd_lib_draw_gfx(LCD_CHAR_MARGIN_LEFT, 33, thermometerGfx); - #if TEMP_SENSOR_BED != 0 - // temperature build-plate - lcd_lib_draw_gfx(LCD_GFX_WIDTH-LCD_CHAR_MARGIN_RIGHT-4*LCD_CHAR_SPACING-12, 33, bedTempGfx); - #endif + #if TEMP_SENSOR_BED != 0 + // temperature build-plate + lcd_lib_draw_gfx(LCD_GFX_WIDTH-LCD_CHAR_MARGIN_RIGHT-4*LCD_CHAR_SPACING-12, 33, bedTempGfx); + #endif - // speed - lcd_lib_draw_gfx(LCD_CHAR_MARGIN_LEFT, 42, speedGfx); - // fan speed - static uint8_t fanAnimate = 0; - static uint8_t prevFanSpeed = 0; - - // start animation - if (!fanAnimate && fanSpeed!=prevFanSpeed) - fanAnimate = 32; - if ((fanSpeed == 0) || (!fanAnimate) || (fanAnimate%4)) - { - lcd_lib_draw_gfx(LCD_GFX_WIDTH-LCD_CHAR_MARGIN_RIGHT-4*LCD_CHAR_SPACING-11, 42, fan1Gfx); - } - if (fanAnimate && !(led_glow%16)) - { - --fanAnimate; - } - prevFanSpeed = fanSpeed; + // speed + lcd_lib_draw_gfx(LCD_CHAR_MARGIN_LEFT, 42, speedGfx); + // fan speed + static uint8_t fanAnimate = 0; + static uint8_t prevFanSpeed = 0; + + // start animation + if (!fanAnimate && fanSpeed!=prevFanSpeed) + fanAnimate = 32; + if ((fanSpeed == 0) || (!fanAnimate) || (fanAnimate%4)) + { + lcd_lib_draw_gfx(LCD_GFX_WIDTH-LCD_CHAR_MARGIN_RIGHT-4*LCD_CHAR_SPACING-11, 42, fan1Gfx); } + if (fanAnimate && !(led_glow%16)) + { + --fanAnimate; + } + prevFanSpeed = fanSpeed; + } - uint8_t index = 0; - uint8_t len = (printing_page == 1) ? 6 + min(EXTRUDERS, 2) : EXTRUDERS*2 + BED_MENU_OFFSET + 4; - if (printing_state == PRINT_STATE_WAIT_USER) + uint8_t index = 0; + uint8_t len = (printing_page == 1) ? 6 + min(EXTRUDERS, 2) : EXTRUDERS*2 + BED_MENU_OFFSET + 4; + if (printing_state == PRINT_STATE_WAIT_USER) + { + index += (printing_page == 1) ? 3 : 2; + } + else + { + menu.process_submenu(get_print_menuoption, len); + const char *message = lcd_getstatus(); + if (!menu.isSubmenuSelected() && message && *message) { + lcd_lib_draw_string_left(BOTTOM_MENU_YPOS, message); index += (printing_page == 1) ? 3 : 2; } - else + } + + uint8_t flags = 0; + for (; index < len; ++index) { + menu.drawSubMenu(drawPrintSubmenu, index, flags); + } + if (!(flags & MENU_STATUSLINE)) + { + if (printing_state == PRINT_STATE_HEATING) { - menu.process_submenu(get_print_menuoption, len); - const char *message = lcd_getstatus(); - if (!menu.isSubmenuSelected() && message && *message) - { - lcd_lib_draw_string_left(BOTTOM_MENU_YPOS, message); - index += (printing_page == 1) ? 3 : 2; - } + lcd_lib_draw_string_leftP(5, PSTR("Heating")); } - - uint8_t flags = 0; - for (; index < len; ++index) { - menu.drawSubMenu(drawPrintSubmenu, index, flags); + else if (printing_state == PRINT_STATE_HEATING_BED) + { + lcd_lib_draw_string_leftP(5, PSTR("Heating buildplate")); } - if (!(flags & MENU_STATUSLINE)) + else { - if (printing_state == PRINT_STATE_HEATING) - { - lcd_lib_draw_string_leftP(5, PSTR("Heating")); - } - else if (printing_state == PRINT_STATE_HEATING_BED) - { - lcd_lib_draw_string_leftP(5, PSTR("Heating buildplate")); - } - else - { - lcd_lib_draw_string_left(5, card.longFilename); - } + lcd_lib_draw_string_left(5, card.longFilename); } - lcd_lib_update_screen(); } + lcd_lib_update_screen(); } static char* lcd_expert_item(uint8_t nr) @@ -2178,7 +2161,7 @@ static const menu_t & get_extrude_menuoption(uint8_t nr, menu_t &opt) } else if (nr == menu_index++) { - opt.setData(MENU_INPLACE_EDIT, lcd_extrude_move); + opt.setData(MENU_INPLACE_EDIT, lcd_extrude_move, 2); } return opt; } @@ -2460,7 +2443,7 @@ static void drawRecoverSubmenu (uint8_t nr, uint8_t &flags) } } -void lcd_menu_expert_recover() +static void lcd_menu_expert_recover() { lcd_basic_screen(); lcd_lib_draw_hline(3, 124, 13); diff --git a/Marlin/tinkergnome.h b/Marlin/tinkergnome.h index 9cbfe3e6f..46c3baa38 100644 --- a/Marlin/tinkergnome.h +++ b/Marlin/tinkergnome.h @@ -20,6 +20,9 @@ extern uint8_t ui_mode; extern uint16_t led_timeout; extern const uint8_t standbyGfx[]; extern const uint8_t startGfx[]; +extern const uint8_t pauseGfx[]; +extern const uint8_t backGfx[]; +extern const uint8_t hourglassGfx[]; extern float recover_height;