|
@@ -19,6 +19,8 @@
|
|
|
#include "lcd.h"
|
|
|
#include "menu.h"
|
|
|
|
|
|
+#include "backlight.h"
|
|
|
+
|
|
|
#include "util.h"
|
|
|
#include "mesh_bed_leveling.h"
|
|
|
#include "mesh_bed_calibration.h"
|
|
@@ -52,6 +54,7 @@
|
|
|
|
|
|
static void lcd_sd_updir();
|
|
|
static void lcd_mesh_bed_leveling_settings();
|
|
|
+static void lcd_backlight_menu();
|
|
|
|
|
|
int8_t ReInitLCD = 0;
|
|
|
|
|
@@ -108,7 +111,9 @@ static const char* lcd_display_message_fullscreen_nonBlocking_P(const char *msg,
|
|
|
|
|
|
|
|
|
static void lcd_status_screen();
|
|
|
+#if (LANG_MODE != 0)
|
|
|
static void lcd_language_menu();
|
|
|
+#endif
|
|
|
static void lcd_main_menu();
|
|
|
static void lcd_tune_menu();
|
|
|
|
|
@@ -997,6 +1002,7 @@ void lcd_commands()
|
|
|
lcd_setstatuspgm(_i("Print paused"));
|
|
|
lcd_commands_type = LcdCommands::Idle;
|
|
|
lcd_commands_step = 0;
|
|
|
+ long_pause();
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1553,9 +1559,8 @@ void lcd_return_to_status()
|
|
|
|
|
|
void lcd_pause_print()
|
|
|
{
|
|
|
- lcd_return_to_status();
|
|
|
stop_and_save_print_to_ram(0.0,0.0);
|
|
|
- long_pause();
|
|
|
+ lcd_return_to_status();
|
|
|
isPrintPaused = true;
|
|
|
if (LcdCommands::Idle == lcd_commands_type)
|
|
|
{
|
|
@@ -2179,6 +2184,9 @@ static void lcd_support_menu()
|
|
|
void lcd_set_fan_check() {
|
|
|
fans_check_enabled = !fans_check_enabled;
|
|
|
eeprom_update_byte((unsigned char *)EEPROM_FAN_CHECK_ENABLED, fans_check_enabled);
|
|
|
+#ifdef FANCHECK
|
|
|
+ if (fans_check_enabled == false) fan_check_error = EFCE_OK;
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
#ifdef MMU_HAS_CUTTER
|
|
@@ -4823,6 +4831,7 @@ void lcd_wizard() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+#if (LANG_MODE != 0)
|
|
|
void lcd_language()
|
|
|
{
|
|
|
lcd_update_enable(true);
|
|
@@ -4842,6 +4851,7 @@ void lcd_language()
|
|
|
else
|
|
|
lang_select(LANG_ID_PRI);
|
|
|
}
|
|
|
+#endif
|
|
|
|
|
|
static void wait_preheat()
|
|
|
{
|
|
@@ -4950,8 +4960,10 @@ void lcd_wizard(WizState state)
|
|
|
|
|
|
|
|
|
if (state != S::Run) eeprom_update_byte((uint8_t*)EEPROM_WIZARD_ACTIVE, 1);
|
|
|
-
|
|
|
- while (!end) {
|
|
|
+
|
|
|
+ FORCE_BL_ON_START;
|
|
|
+
|
|
|
+ while (!end) {
|
|
|
printf_P(PSTR("Wizard state: %d\n"), state);
|
|
|
switch (state) {
|
|
|
case S::Run:
|
|
@@ -5087,7 +5099,9 @@ void lcd_wizard(WizState state)
|
|
|
default: break;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+ FORCE_BL_ON_END;
|
|
|
+
|
|
|
printf_P(_N("Wizard end state: %d\n"), state);
|
|
|
switch (state) {
|
|
|
case S::Restore:
|
|
@@ -5724,6 +5738,13 @@ static void lcd_settings_menu()
|
|
|
SETTINGS_SD;
|
|
|
SETTINGS_SOUND;
|
|
|
|
|
|
+#ifdef LCD_BL_PIN
|
|
|
+ if (backlightSupport)
|
|
|
+ {
|
|
|
+ MENU_ITEM_SUBMENU_P(_T(MSG_BRIGHTNESS), lcd_backlight_menu);
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
if (farm_mode)
|
|
|
{
|
|
|
MENU_ITEM_SUBMENU_P(PSTR("Farm number"), lcd_farm_no);
|
|
@@ -6599,6 +6620,7 @@ static void lcd_test_menu()
|
|
|
static bool fan_error_selftest()
|
|
|
{
|
|
|
#ifdef FANCHECK
|
|
|
+ if (!fans_check_enabled) return 0;
|
|
|
|
|
|
fanSpeed = 255;
|
|
|
#ifdef FAN_SOFT_PWM
|
|
@@ -6629,9 +6651,8 @@ static bool fan_error_selftest()
|
|
|
return 1;
|
|
|
}
|
|
|
#endif
|
|
|
+#endif
|
|
|
return 0;
|
|
|
-
|
|
|
-#endif
|
|
|
}
|
|
|
|
|
|
|
|
@@ -6646,10 +6667,10 @@ void lcd_resume_print()
|
|
|
|
|
|
if (fan_error_selftest()) return;
|
|
|
|
|
|
+ isPrintPaused = false;
|
|
|
restore_print_from_ram_and_continue(0.0);
|
|
|
pause_time += (_millis() - start_pause_print);
|
|
|
refresh_cmd_timeout();
|
|
|
- isPrintPaused = false;
|
|
|
SERIAL_PROTOCOLLNRPGM(MSG_OCTOPRINT_RESUMED);
|
|
|
}
|
|
|
|
|
@@ -6801,7 +6822,7 @@ static void lcd_main_menu()
|
|
|
{
|
|
|
MENU_ITEM_FUNCTION_P(_i("Pause print"), lcd_pause_print);
|
|
|
}
|
|
|
- else
|
|
|
+ else if(isPrintPaused)
|
|
|
{
|
|
|
#ifdef FANCHECK
|
|
|
if((fan_check_error == EFCE_FIXED) || (fan_check_error == EFCE_OK))
|
|
@@ -7053,6 +7074,12 @@ static void lcd_tune_menu()
|
|
|
#endif
|
|
|
SETTINGS_MMU_MODE;
|
|
|
SETTINGS_SOUND;
|
|
|
+#ifdef LCD_BL_PIN
|
|
|
+ if (backlightSupport)
|
|
|
+ {
|
|
|
+ MENU_ITEM_SUBMENU_P(_T(MSG_BRIGHTNESS), lcd_backlight_menu);
|
|
|
+ }
|
|
|
+#endif
|
|
|
MENU_END();
|
|
|
}
|
|
|
|
|
@@ -7102,6 +7129,36 @@ static void lcd_mesh_bed_leveling_settings()
|
|
|
|
|
|
}
|
|
|
|
|
|
+#ifdef LCD_BL_PIN
|
|
|
+static void backlight_mode_toggle()
|
|
|
+{
|
|
|
+ switch (backlightMode)
|
|
|
+ {
|
|
|
+ case BACKLIGHT_MODE_BRIGHT: backlightMode = BACKLIGHT_MODE_DIM; break;
|
|
|
+ case BACKLIGHT_MODE_DIM: backlightMode = BACKLIGHT_MODE_AUTO; break;
|
|
|
+ case BACKLIGHT_MODE_AUTO: backlightMode = BACKLIGHT_MODE_BRIGHT; break;
|
|
|
+ default: backlightMode = BACKLIGHT_MODE_BRIGHT; break;
|
|
|
+ }
|
|
|
+ backlight_save();
|
|
|
+}
|
|
|
+
|
|
|
+static void lcd_backlight_menu()
|
|
|
+{
|
|
|
+ MENU_BEGIN();
|
|
|
+ ON_MENU_LEAVE(
|
|
|
+ backlight_save();
|
|
|
+ );
|
|
|
+
|
|
|
+ MENU_ITEM_BACK_P(_T(MSG_BACK));
|
|
|
+ MENU_ITEM_EDIT_int3_P(_T(MSG_BL_HIGH), &backlightLevel_HIGH, backlightLevel_LOW, 255);
|
|
|
+ MENU_ITEM_EDIT_int3_P(_T(MSG_BL_LOW), &backlightLevel_LOW, 0, backlightLevel_HIGH);
|
|
|
+ MENU_ITEM_TOGGLE_P(_T(MSG_MODE), ((backlightMode==BACKLIGHT_MODE_BRIGHT) ? _T(MSG_BRIGHT) : ((backlightMode==BACKLIGHT_MODE_DIM) ? _T(MSG_DIM) : _T(MSG_AUTO))), backlight_mode_toggle);
|
|
|
+ MENU_ITEM_EDIT_int3_P(_T(MSG_TIMEOUT), &backlightTimer_period, 1, 999);
|
|
|
+
|
|
|
+ MENU_END();
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
static void lcd_control_temperature_menu()
|
|
|
{
|
|
|
#ifdef PIDTEMP
|
|
@@ -7393,6 +7450,10 @@ bool lcd_selftest()
|
|
|
#if !IR_SENSOR_ANALOG
|
|
|
_delay(2000);
|
|
|
#endif
|
|
|
+
|
|
|
+ FORCE_BL_ON_START;
|
|
|
+
|
|
|
+ _delay(2000);
|
|
|
KEEPALIVE_STATE(IN_HANDLER);
|
|
|
#if IR_SENSOR_ANALOG
|
|
|
bool bAction;
|
|
@@ -7625,7 +7686,10 @@ bool lcd_selftest()
|
|
|
#ifdef TMC2130
|
|
|
FORCE_HIGH_POWER_END;
|
|
|
#endif
|
|
|
- KEEPALIVE_STATE(NOT_BUSY);
|
|
|
+
|
|
|
+ FORCE_BL_ON_END;
|
|
|
+
|
|
|
+ KEEPALIVE_STATE(NOT_BUSY);
|
|
|
return(_result);
|
|
|
}
|
|
|
|
|
@@ -8034,7 +8098,9 @@ static bool lcd_selfcheck_check_heater(bool _isbed)
|
|
|
static void lcd_selftest_error(TestError testError, const char *_error_1, const char *_error_2)
|
|
|
{
|
|
|
lcd_beeper_quick_feedback();
|
|
|
-
|
|
|
+
|
|
|
+ FORCE_BL_ON_END;
|
|
|
+
|
|
|
target_temperature[0] = 0;
|
|
|
target_temperature_bed = 0;
|
|
|
manage_heater();
|
|
@@ -8633,6 +8699,7 @@ void ultralcd_init()
|
|
|
else lcd_autoDeplete = autoDepleteRaw;
|
|
|
|
|
|
}
|
|
|
+ backlight_init();
|
|
|
lcd_init();
|
|
|
lcd_refresh();
|
|
|
lcd_longpress_func = menu_lcd_longpress_func;
|
|
@@ -8781,6 +8848,7 @@ uint8_t get_message_level()
|
|
|
|
|
|
void menu_lcd_longpress_func(void)
|
|
|
{
|
|
|
+ backlight_wake();
|
|
|
if (homing_flag || mesh_bed_leveling_flag || menu_menu == lcd_babystep_z || menu_menu == lcd_move_z)
|
|
|
{
|
|
|
|
|
@@ -8862,6 +8930,7 @@ void menu_lcd_lcdupdate_func(void)
|
|
|
lcd_draw_update = 2;
|
|
|
lcd_oldcardstatus = IS_SD_INSERTED;
|
|
|
lcd_refresh();
|
|
|
+ backlight_wake();
|
|
|
if (lcd_oldcardstatus)
|
|
|
{
|
|
|
card.initsd();
|
|
@@ -8881,6 +8950,7 @@ void menu_lcd_lcdupdate_func(void)
|
|
|
}
|
|
|
}
|
|
|
#endif
|
|
|
+ backlight_update();
|
|
|
if (lcd_next_update_millis < _millis())
|
|
|
{
|
|
|
if (abs(lcd_encoder_diff) >= ENCODER_PULSES_PER_STEP)
|
|
@@ -8891,9 +8961,14 @@ void menu_lcd_lcdupdate_func(void)
|
|
|
Sound_MakeSound(e_SOUND_TYPE_EncoderMove);
|
|
|
lcd_encoder_diff = 0;
|
|
|
lcd_timeoutToStatus.start();
|
|
|
+ backlight_wake();
|
|
|
}
|
|
|
|
|
|
- if (LCD_CLICKED) lcd_timeoutToStatus.start();
|
|
|
+ if (LCD_CLICKED)
|
|
|
+ {
|
|
|
+ lcd_timeoutToStatus.start();
|
|
|
+ backlight_wake();
|
|
|
+ }
|
|
|
|
|
|
(*menu_menu)();
|
|
|
|