From 5fdaead6633478946dd2f6eddaaf9636327a486c Mon Sep 17 00:00:00 2001 From: leptun Date: Mon, 29 Jul 2019 15:55:42 +0300 Subject: [PATCH 01/37] Fix language related warnings in LANG_MODE 0 --- Firmware/language.c | 6 +++--- Firmware/ultralcd.cpp | 4 ++++ Firmware/ultralcd.h | 3 +++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Firmware/language.c b/Firmware/language.c index c4b501b9..e4376096 100644 --- a/Firmware/language.c +++ b/Firmware/language.c @@ -17,10 +17,10 @@ uint8_t lang_selected = 0; #if (LANG_MODE == 0) //primary language only -uint8_t lang_select(uint8_t lang) { return 0; } +uint8_t lang_select(__attribute__((unused)) uint8_t lang) { return 0; } uint8_t lang_get_count() { return 1; } -uint16_t lang_get_code(uint8_t lang) { return LANG_CODE_EN; } -const char* lang_get_name_by_code(uint16_t code) { return _n("English"); } +uint16_t lang_get_code(__attribute__((unused)) uint8_t lang) { return LANG_CODE_EN; } +const char* lang_get_name_by_code(__attribute__((unused)) uint16_t code) { return _n("English"); } void lang_reset(void) { } uint8_t lang_is_selected(void) { return 1; } diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index acb369d9..cac952db 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -114,7 +114,9 @@ static const char* lcd_display_message_fullscreen_nonBlocking_P(const char *msg, /* Different menus */ 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(); //static void lcd_move_menu(); @@ -4733,6 +4735,7 @@ void lcd_wizard() { } } +#if (LANG_MODE != 0) void lcd_language() { lcd_update_enable(true); @@ -4752,6 +4755,7 @@ void lcd_language() else lang_select(LANG_ID_PRI); } +#endif static void wait_preheat() { diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index 2c57c944..62ba7519 100755 --- a/Firmware/ultralcd.h +++ b/Firmware/ultralcd.h @@ -6,6 +6,7 @@ #include "conv2str.h" #include "menu.h" #include "mesh_bed_calibration.h" +#include "config.h" extern void menu_lcd_longpress_func(void); extern void menu_lcd_charsetup_func(void); @@ -208,7 +209,9 @@ void lcd_set_degree(); void lcd_set_progress(); #endif +#if (LANG_MODE != 0) void lcd_language(); +#endif void lcd_wizard(); bool lcd_autoDepleteEnabled(); From 4e58a112e8935b5bf685e37a7cf2922b6171c6c9 Mon Sep 17 00:00:00 2001 From: rhounsell <53660397+rhounsell@users.noreply.github.com> Date: Thu, 8 Aug 2019 15:45:59 -0400 Subject: [PATCH 02/37] Fix for Toshiba FlashAir (or other) SD card initialization - add clock cycles between sending CMD0 and CMD8. Redone for MK3 branch) --- Firmware/Sd2Card.cpp | 15 +++++++++++++++ Firmware/Sd2Card.h | 2 ++ 2 files changed, 17 insertions(+) diff --git a/Firmware/Sd2Card.cpp b/Firmware/Sd2Card.cpp index c00c7ef9..cb1959be 100644 --- a/Firmware/Sd2Card.cpp +++ b/Firmware/Sd2Card.cpp @@ -319,6 +319,21 @@ bool Sd2Card::init(uint8_t sckRateID, uint8_t chipSelectPin) { goto fail; } } + + // send 0xFF until 0xFF received to give card some clock cycles + SERIAL_ECHOLNRPGM(PSTR("Sending 0xFF")); + spiSend(0XFF); + while ((status_ = spiRec()) != 0xFF) + { + spiSend(0XFF); + if (((uint16_t)_millis() - t0) > SD_CARD_ERROR_FF_TIMEOUT) + { + error(SD_CARD_ERROR_CMD8); + SERIAL_ECHOLNRPGM(PSTR("No 0xFF received")); + goto fail; + } + } + // check SD version if ((cardCommand(CMD8, 0x1AA) & R1_ILLEGAL_COMMAND)) { type(SD_CARD_TYPE_SD1); diff --git a/Firmware/Sd2Card.h b/Firmware/Sd2Card.h index 537d249c..f4cc59d7 100644 --- a/Firmware/Sd2Card.h +++ b/Firmware/Sd2Card.h @@ -105,6 +105,8 @@ uint8_t const SD_CARD_ERROR_SCK_RATE = 0X18; uint8_t const SD_CARD_ERROR_INIT_NOT_CALLED = 0X19; /** crc check error */ uint8_t const SD_CARD_ERROR_CRC = 0X20; +/** no response to sent 0xFF */ +uint8_t const SD_CARD_ERROR_FF_TIMEOUT = 0X21; /** Toshiba FlashAir: iSDIO */ uint8_t const SD_CARD_ERROR_CMD48 = 0x80; From 32fa8caab873e5b959f9393b825c236a85740347 Mon Sep 17 00:00:00 2001 From: rhounsell <53660397+rhounsell@users.noreply.github.com> Date: Sun, 11 Aug 2019 17:57:41 -0400 Subject: [PATCH 03/37] reinitialize the timestamp to ensure enough time to receive response for 0xFF sent. --- Firmware/Sd2Card.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Firmware/Sd2Card.cpp b/Firmware/Sd2Card.cpp index cb1959be..449590f1 100644 --- a/Firmware/Sd2Card.cpp +++ b/Firmware/Sd2Card.cpp @@ -321,6 +321,7 @@ bool Sd2Card::init(uint8_t sckRateID, uint8_t chipSelectPin) { } // send 0xFF until 0xFF received to give card some clock cycles + t0 = (uint16_t)_millis(); SERIAL_ECHOLNRPGM(PSTR("Sending 0xFF")); spiSend(0XFF); while ((status_ = spiRec()) != 0xFF) From 68491c9d4dd195b0764ae47ad12b043003904d33 Mon Sep 17 00:00:00 2001 From: leptun Date: Fri, 11 Oct 2019 19:06:37 +0300 Subject: [PATCH 04/37] First implementation --- Firmware/Marlin_main.cpp | 4 ---- Firmware/backlight.cpp | 33 +++++++++++++++++++++++++++++++++ Firmware/backlight.h | 13 +++++++++++++ Firmware/eeprom.h | 3 ++- Firmware/pins_Einsy_1_0.h | 2 +- Firmware/ultralcd.cpp | 5 +++++ 6 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 Firmware/backlight.cpp create mode 100644 Firmware/backlight.h diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 45dd118c..c076c8a0 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -989,10 +989,6 @@ void setup() ultralcd_init(); -#if (LCD_BL_PIN != -1) && defined (LCD_BL_PIN) - analogWrite(LCD_BL_PIN, 255); //set full brightnes -#endif //(LCD_BL_PIN != -1) && defined (LCD_BL_PIN) - spi_init(); lcd_splash(); diff --git a/Firmware/backlight.cpp b/Firmware/backlight.cpp new file mode 100644 index 00000000..d63104b5 --- /dev/null +++ b/Firmware/backlight.cpp @@ -0,0 +1,33 @@ +//backlight.cpp + +#include "backlight.h" +#include +#include +#include "eeprom.h" +#include "Marlin.h" +#include "pins.h" +#include "fastio.h" +// #include "Timer.h" +// #include "Configuration.h" + +int16_t backlightLevel = 0; +int16_t backlightLevel_old = 0; +// uint16_t backlightCounter = 0; + +void backlight_update() +{ + if (backlightLevel != backlightLevel_old) //update level + { + analogWrite(LCD_BL_PIN, backlightLevel); + backlightLevel_old = backlightLevel; + eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL, backlightLevel); + } +} + +void backlight_init() +{ + SET_OUTPUT(LCD_BL_PIN); + WRITE(LCD_BL_PIN,0); + backlightLevel = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL); + backlight_update(); +} diff --git a/Firmware/backlight.h b/Firmware/backlight.h new file mode 100644 index 00000000..d31a997e --- /dev/null +++ b/Firmware/backlight.h @@ -0,0 +1,13 @@ +//backlight.h +#ifndef _BACKLIGHT_H +#define _BACKLIGHT_H + +#include + +extern int16_t backlightLevel; + +extern void backlight_update(); +extern void backlight_init(); + + +#endif //_BACKLIGHT_H diff --git a/Firmware/eeprom.h b/Firmware/eeprom.h index 197c18c2..a8bab523 100644 --- a/Firmware/eeprom.h +++ b/Firmware/eeprom.h @@ -201,9 +201,10 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP #define EEPROM_SHEETS_BASE (EEPROM_CHECK_GCODE - EEPROM_SHEETS_SIZEOF) // Sheets static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_SHEETS_BASE); +#define EEPROM_BACKLIGHT_LEVEL (EEPROM_SHEETS_BASE-1) // uint8 //This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items. -#define EEPROM_LAST_ITEM EEPROM_SHEETS_BASE +#define EEPROM_LAST_ITEM EEPROM_BACKLIGHT_LEVEL // !!!!! // !!!!! this is end of EEPROM section ... all updates MUST BE inserted before this mark !!!!! // !!!!! diff --git a/Firmware/pins_Einsy_1_0.h b/Firmware/pins_Einsy_1_0.h index 33363388..005683c0 100755 --- a/Firmware/pins_Einsy_1_0.h +++ b/Firmware/pins_Einsy_1_0.h @@ -99,7 +99,7 @@ //#define KILL_PIN 32 -//#define LCD_BL_PIN 5 //backlight control pin +#define LCD_BL_PIN 5 //backlight control pin #define BEEPER 84 // Beeper on AUX-4 #define LCD_PINS_RS 82 #define LCD_PINS_ENABLE 61 // !!! changed from 18 (EINY03) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index f4952802..bfd7f9b5 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -18,6 +18,7 @@ #include "lcd.h" #include "menu.h" +#include "backlight.h" #include "util.h" #include "mesh_bed_leveling.h" @@ -5768,6 +5769,8 @@ static void lcd_settings_menu() SETTINGS_SD; SETTINGS_SOUND; + + MENU_ITEM_EDIT_int3_P(_i("Backlight"), &backlightLevel, 0, 255); if (farm_mode) { @@ -8567,6 +8570,7 @@ void ultralcd_init() else lcd_autoDeplete = autoDepleteRaw; } + backlight_init(); lcd_init(); lcd_refresh(); lcd_longpress_func = menu_lcd_longpress_func; @@ -8813,6 +8817,7 @@ void menu_lcd_lcdupdate_func(void) } } #endif//CARDINSERTED + backlight_update(); if (lcd_next_update_millis < _millis()) { if (abs(lcd_encoder_diff) >= ENCODER_PULSES_PER_STEP) From b2a1dc67869baa20ad840291078af6ec0112d1d1 Mon Sep 17 00:00:00 2001 From: leptun Date: Fri, 11 Oct 2019 19:23:38 +0300 Subject: [PATCH 05/37] Compile fix for firmware without LCD_BL_PIN --- Firmware/backlight.cpp | 4 ++++ Firmware/ultralcd.cpp | 11 ++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Firmware/backlight.cpp b/Firmware/backlight.cpp index d63104b5..067fc133 100644 --- a/Firmware/backlight.cpp +++ b/Firmware/backlight.cpp @@ -10,6 +10,8 @@ // #include "Timer.h" // #include "Configuration.h" +#ifdef LCD_BL_PIN + int16_t backlightLevel = 0; int16_t backlightLevel_old = 0; // uint16_t backlightCounter = 0; @@ -31,3 +33,5 @@ void backlight_init() backlightLevel = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL); backlight_update(); } + +#endif //LCD_BL_PIN \ No newline at end of file diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index bfd7f9b5..e58663ae 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -18,7 +18,10 @@ #include "lcd.h" #include "menu.h" + +#ifdef LCD_BL_PIN #include "backlight.h" +#endif //LCD_BL_PIN #include "util.h" #include "mesh_bed_leveling.h" @@ -5769,8 +5772,10 @@ static void lcd_settings_menu() SETTINGS_SD; SETTINGS_SOUND; - + +#ifdef LCD_BL_PIN MENU_ITEM_EDIT_int3_P(_i("Backlight"), &backlightLevel, 0, 255); +#endif //LCD_BL_PIN if (farm_mode) { @@ -8570,7 +8575,9 @@ void ultralcd_init() else lcd_autoDeplete = autoDepleteRaw; } +#ifdef LCD_BL_PIN backlight_init(); +#endif //LCD_BL_PIN lcd_init(); lcd_refresh(); lcd_longpress_func = menu_lcd_longpress_func; @@ -8817,7 +8824,9 @@ void menu_lcd_lcdupdate_func(void) } } #endif//CARDINSERTED +#ifdef LCD_BL_PIN backlight_update(); +#endif //LCD_BL_PIN if (lcd_next_update_millis < _millis()) { if (abs(lcd_encoder_diff) >= ENCODER_PULSES_PER_STEP) From 75f389a71d00a5c83cd10779c4312a9c2735d88d Mon Sep 17 00:00:00 2001 From: leptun Date: Sun, 13 Oct 2019 14:31:43 +0300 Subject: [PATCH 06/37] Auto-Dimming initial --- Firmware/backlight.cpp | 37 +++++++++++++++++++++++++++++++------ Firmware/backlight.h | 1 + Firmware/ultralcd.cpp | 8 +++++++- 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/Firmware/backlight.cpp b/Firmware/backlight.cpp index 067fc133..64a0e0c1 100644 --- a/Firmware/backlight.cpp +++ b/Firmware/backlight.cpp @@ -7,22 +7,47 @@ #include "Marlin.h" #include "pins.h" #include "fastio.h" -// #include "Timer.h" +#include "Timer.h" // #include "Configuration.h" #ifdef LCD_BL_PIN int16_t backlightLevel = 0; int16_t backlightLevel_old = 0; -// uint16_t backlightCounter = 0; +unsigned long backlightTimer_period = 10000ul; +bool backlightIsDimmed = true; +LongTimer backlightTimer; + +static void backlightDim() +{ + // if (backlightIsDimmed) return; + backlightLevel /= 4; //make the display half as bright. + backlightIsDimmed = true; +} + +static void backlightWake() +{ + // if (!backlightIsDimmed) return; + backlightLevel = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL); + backlightIsDimmed = false; +} + +void backlightTimer_reset() //used for resetting the timer and waking the display +{ + backlightTimer.start(); + if (backlightIsDimmed) backlightWake(); +} void backlight_update() { - if (backlightLevel != backlightLevel_old) //update level + if (backlightTimer.expired(backlightTimer_period)) backlightDim(); + + if (backlightLevel != backlightLevel_old) //update pwm duty cycle { analogWrite(LCD_BL_PIN, backlightLevel); backlightLevel_old = backlightLevel; - eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL, backlightLevel); + + if (!backlightIsDimmed) eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL, backlightLevel); //update eeprom value } } @@ -30,8 +55,8 @@ void backlight_init() { SET_OUTPUT(LCD_BL_PIN); WRITE(LCD_BL_PIN,0); - backlightLevel = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL); - backlight_update(); + backlightTimer_reset(); //initializes eeprom data and starts backlightTimer + backlight_update(); //actually sets the backlight to the correct level } #endif //LCD_BL_PIN \ No newline at end of file diff --git a/Firmware/backlight.h b/Firmware/backlight.h index d31a997e..ee656f88 100644 --- a/Firmware/backlight.h +++ b/Firmware/backlight.h @@ -8,6 +8,7 @@ extern int16_t backlightLevel; extern void backlight_update(); extern void backlight_init(); +extern void backlightTimer_reset(); #endif //_BACKLIGHT_H diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index e58663ae..825ccade 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -8726,6 +8726,7 @@ uint8_t get_message_level() void menu_lcd_longpress_func(void) { + backlightTimer_reset(); if (homing_flag || mesh_bed_leveling_flag || menu_menu == lcd_babystep_z || menu_menu == lcd_move_z) { // disable longpress during re-entry, while homing or calibration @@ -8837,9 +8838,14 @@ void menu_lcd_lcdupdate_func(void) Sound_MakeSound(e_SOUND_TYPE_EncoderMove); lcd_encoder_diff = 0; lcd_timeoutToStatus.start(); + backlightTimer_reset(); } - if (LCD_CLICKED) lcd_timeoutToStatus.start(); + if (LCD_CLICKED) + { + lcd_timeoutToStatus.start(); + backlightTimer_reset(); + } (*menu_menu)(); From 5a662413e6f7d64acca603ac9fbe4e0aa1bf3045 Mon Sep 17 00:00:00 2001 From: leptun Date: Sun, 13 Oct 2019 14:34:04 +0300 Subject: [PATCH 07/37] Fix compile for printer without backlight support --- Firmware/ultralcd.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 825ccade..6fa63c7c 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -8726,7 +8726,9 @@ uint8_t get_message_level() void menu_lcd_longpress_func(void) { +#ifdef LCD_BL_PIN backlightTimer_reset(); +#endif //LCD_BL_PIN if (homing_flag || mesh_bed_leveling_flag || menu_menu == lcd_babystep_z || menu_menu == lcd_move_z) { // disable longpress during re-entry, while homing or calibration @@ -8838,13 +8840,17 @@ void menu_lcd_lcdupdate_func(void) Sound_MakeSound(e_SOUND_TYPE_EncoderMove); lcd_encoder_diff = 0; lcd_timeoutToStatus.start(); +#ifdef LCD_BL_PIN backlightTimer_reset(); +#endif //LCD_BL_PIN } if (LCD_CLICKED) { lcd_timeoutToStatus.start(); +#ifdef LCD_BL_PIN backlightTimer_reset(); +#endif //LCD_BL_PIN } (*menu_menu)(); From 3b005ae38f424a30965e8ed9dee2e79939607b4c Mon Sep 17 00:00:00 2001 From: leptun Date: Wed, 16 Oct 2019 14:40:45 +0300 Subject: [PATCH 08/37] Backlight detection --- Firmware/backlight.cpp | 12 +++++++++++- Firmware/backlight.h | 1 + Firmware/ultralcd.cpp | 5 ++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Firmware/backlight.cpp b/Firmware/backlight.cpp index 64a0e0c1..72850d2c 100644 --- a/Firmware/backlight.cpp +++ b/Firmware/backlight.cpp @@ -12,6 +12,7 @@ #ifdef LCD_BL_PIN +bool backlightSupport = 0; int16_t backlightLevel = 0; int16_t backlightLevel_old = 0; unsigned long backlightTimer_period = 10000ul; @@ -21,7 +22,7 @@ LongTimer backlightTimer; static void backlightDim() { // if (backlightIsDimmed) return; - backlightLevel /= 4; //make the display half as bright. + backlightLevel /= 4; //make the display dimmer. backlightIsDimmed = true; } @@ -40,6 +41,7 @@ void backlightTimer_reset() //used for resetting the timer and waking the displa void backlight_update() { + if (!backlightSupport) return; if (backlightTimer.expired(backlightTimer_period)) backlightDim(); if (backlightLevel != backlightLevel_old) //update pwm duty cycle @@ -53,6 +55,14 @@ void backlight_update() void backlight_init() { +//check for backlight support on lcd + SET_INPUT(LCD_BL_PIN); + WRITE(LCD_BL_PIN,HIGH); + _delay(10); + backlightSupport = !READ(LCD_BL_PIN); + if (backlightSupport == 0) return; + +//initialize backlight pin SET_OUTPUT(LCD_BL_PIN); WRITE(LCD_BL_PIN,0); backlightTimer_reset(); //initializes eeprom data and starts backlightTimer diff --git a/Firmware/backlight.h b/Firmware/backlight.h index ee656f88..84a2a17e 100644 --- a/Firmware/backlight.h +++ b/Firmware/backlight.h @@ -5,6 +5,7 @@ #include extern int16_t backlightLevel; +extern bool backlightSupport; extern void backlight_update(); extern void backlight_init(); diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 6fa63c7c..715719ca 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -5774,7 +5774,10 @@ static void lcd_settings_menu() SETTINGS_SOUND; #ifdef LCD_BL_PIN - MENU_ITEM_EDIT_int3_P(_i("Backlight"), &backlightLevel, 0, 255); + if (backlightSupport) + { + MENU_ITEM_EDIT_int3_P(_i("Backlight"), &backlightLevel, 0, 255); + } #endif //LCD_BL_PIN if (farm_mode) From 25e0d23efe56ea7de0039e32e0c64434d158a98b Mon Sep 17 00:00:00 2001 From: leptun Date: Thu, 17 Oct 2019 13:11:32 +0300 Subject: [PATCH 09/37] Backlight overhaul and UI changes --- Firmware/backlight.cpp | 60 ++++++++++++++++++++++-------------------- Firmware/backlight.h | 12 ++++++++- Firmware/eeprom.h | 6 +++-- Firmware/ultralcd.cpp | 35 +++++++++++++++++++++++- 4 files changed, 80 insertions(+), 33 deletions(-) diff --git a/Firmware/backlight.cpp b/Firmware/backlight.cpp index 72850d2c..59f08b6f 100644 --- a/Firmware/backlight.cpp +++ b/Firmware/backlight.cpp @@ -8,49 +8,41 @@ #include "pins.h" #include "fastio.h" #include "Timer.h" -// #include "Configuration.h" #ifdef LCD_BL_PIN -bool backlightSupport = 0; -int16_t backlightLevel = 0; -int16_t backlightLevel_old = 0; +bool backlightSupport = 0; //only if it's true will any of the settings be visible to the user +int16_t backlightLevel_HIGH = 0; +int16_t backlightLevel_LOW = 0; +uint8_t backlightMode = BACKLIGHT_MODE_BRIGHT; unsigned long backlightTimer_period = 10000ul; -bool backlightIsDimmed = true; LongTimer backlightTimer; -static void backlightDim() +void backlight_save() //saves all backlight data to eeprom. { - // if (backlightIsDimmed) return; - backlightLevel /= 4; //make the display dimmer. - backlightIsDimmed = true; + eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_HIGH, (uint8_t)backlightLevel_HIGH); + eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_LOW, (uint8_t)backlightLevel_LOW); + eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_MODE, backlightMode); } -static void backlightWake() -{ - // if (!backlightIsDimmed) return; - backlightLevel = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL); - backlightIsDimmed = false; -} - -void backlightTimer_reset() //used for resetting the timer and waking the display +void backlightTimer_reset() //used for resetting the timer and waking the display. Triggered on events such as knob click, rotate and on full screen notifications. { + if (!backlightSupport) return; backlightTimer.start(); - if (backlightIsDimmed) backlightWake(); } void backlight_update() { if (!backlightSupport) return; - if (backlightTimer.expired(backlightTimer_period)) backlightDim(); - if (backlightLevel != backlightLevel_old) //update pwm duty cycle + if (backlightMode == BACKLIGHT_MODE_AUTO) { - analogWrite(LCD_BL_PIN, backlightLevel); - backlightLevel_old = backlightLevel; - - if (!backlightIsDimmed) eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL, backlightLevel); //update eeprom value + if (backlightTimer.expired(backlightTimer_period)) analogWrite(LCD_BL_PIN, backlightLevel_LOW); + else if (backlightTimer.running()) analogWrite(LCD_BL_PIN, backlightLevel_HIGH); + else {/*do nothing*/;} //display is dimmed. } + else if (backlightMode == BACKLIGHT_MODE_DIM) analogWrite(LCD_BL_PIN, backlightLevel_LOW); + else analogWrite(LCD_BL_PIN, backlightLevel_HIGH); } void backlight_init() @@ -60,13 +52,23 @@ void backlight_init() WRITE(LCD_BL_PIN,HIGH); _delay(10); backlightSupport = !READ(LCD_BL_PIN); - if (backlightSupport == 0) return; + if (!backlightSupport) return; -//initialize backlight pin +//initialize backlight + backlightMode = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_MODE); + if (backlightMode == 0xFF) //set default values + { + backlightMode = BACKLIGHT_MODE_AUTO; + backlightLevel_HIGH = 130; + backlightLevel_LOW = 50; + backlight_save(); + } + backlightLevel_HIGH = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_HIGH); + backlightLevel_LOW = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_LOW); + SET_OUTPUT(LCD_BL_PIN); - WRITE(LCD_BL_PIN,0); - backlightTimer_reset(); //initializes eeprom data and starts backlightTimer - backlight_update(); //actually sets the backlight to the correct level + backlightTimer_reset(); + backlight_update(); //sets brightness } #endif //LCD_BL_PIN \ No newline at end of file diff --git a/Firmware/backlight.h b/Firmware/backlight.h index 84a2a17e..f3e2ee60 100644 --- a/Firmware/backlight.h +++ b/Firmware/backlight.h @@ -4,12 +4,22 @@ #include -extern int16_t backlightLevel; +enum Backlight_Mode +{ + BACKLIGHT_MODE_BRIGHT = 0, + BACKLIGHT_MODE_DIM = 1, + BACKLIGHT_MODE_AUTO = 2, +}; + +extern int16_t backlightLevel_HIGH; +extern int16_t backlightLevel_LOW; +extern uint8_t backlightMode; extern bool backlightSupport; extern void backlight_update(); extern void backlight_init(); extern void backlightTimer_reset(); +extern void backlight_save(); #endif //_BACKLIGHT_H diff --git a/Firmware/eeprom.h b/Firmware/eeprom.h index a8bab523..f47a2333 100644 --- a/Firmware/eeprom.h +++ b/Firmware/eeprom.h @@ -201,10 +201,12 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP #define EEPROM_SHEETS_BASE (EEPROM_CHECK_GCODE - EEPROM_SHEETS_SIZEOF) // Sheets static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_SHEETS_BASE); -#define EEPROM_BACKLIGHT_LEVEL (EEPROM_SHEETS_BASE-1) // uint8 +#define EEPROM_BACKLIGHT_LEVEL_HIGH (EEPROM_SHEETS_BASE-1) // uint8 +#define EEPROM_BACKLIGHT_LEVEL_LOW (EEPROM_BACKLIGHT_LEVEL_HIGH-1) // uint8 +#define EEPROM_BACKLIGHT_MODE (EEPROM_BACKLIGHT_LEVEL_LOW-1) // uint8 //This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items. -#define EEPROM_LAST_ITEM EEPROM_BACKLIGHT_LEVEL +#define EEPROM_LAST_ITEM EEPROM_BACKLIGHT_MODE // !!!!! // !!!!! this is end of EEPROM section ... all updates MUST BE inserted before this mark !!!!! // !!!!! diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 715719ca..04718cf6 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -56,6 +56,7 @@ char longFilenameOLD[LONG_FILENAME_LENGTH]; static void lcd_sd_updir(); static void lcd_mesh_bed_leveling_settings(); +static void lcd_backlight_menu(); int8_t ReInitLCD = 0; @@ -5776,7 +5777,7 @@ static void lcd_settings_menu() #ifdef LCD_BL_PIN if (backlightSupport) { - MENU_ITEM_EDIT_int3_P(_i("Backlight"), &backlightLevel, 0, 255); + MENU_ITEM_SUBMENU_P(_i("Brightness"), lcd_backlight_menu); } #endif //LCD_BL_PIN @@ -7165,6 +7166,38 @@ static void lcd_mesh_bed_leveling_settings() //SETTINGS_MBL_MODE; } +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(_i("Level Bright"), &backlightLevel_HIGH, 0, 255); + MENU_ITEM_EDIT_int3_P(_i("Level Dimmed"), &backlightLevel_LOW, 0, 255); + switch (backlightMode) + { + case BACKLIGHT_MODE_BRIGHT: MENU_ITEM_FUNCTION_P(_i("Mode [Always on]"), backlight_mode_toggle); break; + case BACKLIGHT_MODE_DIM: MENU_ITEM_FUNCTION_P(_i("Mode [Always off]"), backlight_mode_toggle); break; + default: MENU_ITEM_FUNCTION_P(_i("Mode [Auto]"), backlight_mode_toggle); break; + } + + MENU_END(); +} + static void lcd_control_temperature_menu() { #ifdef PIDTEMP From 812eafd09c43554617c4748c88e43ffedbc6dea3 Mon Sep 17 00:00:00 2001 From: leptun Date: Thu, 17 Oct 2019 13:14:32 +0300 Subject: [PATCH 10/37] Fix compile for miniRambo --- Firmware/ultralcd.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 04718cf6..f4a60f7d 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -7166,6 +7166,7 @@ static void lcd_mesh_bed_leveling_settings() //SETTINGS_MBL_MODE; } +#ifdef LCD_BL_PIN static void backlight_mode_toggle() { switch (backlightMode) @@ -7197,6 +7198,7 @@ static void lcd_backlight_menu() MENU_END(); } +#endif //LCD_BL_PIN static void lcd_control_temperature_menu() { From 91e94aa0e894be8b9cf2734c72ae9357c92cea10 Mon Sep 17 00:00:00 2001 From: leptun Date: Fri, 18 Oct 2019 10:32:41 +0300 Subject: [PATCH 11/37] Adjustable timeout --- Firmware/backlight.cpp | 7 +++++-- Firmware/backlight.h | 1 + Firmware/eeprom.h | 3 ++- Firmware/ultralcd.cpp | 9 +++++---- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Firmware/backlight.cpp b/Firmware/backlight.cpp index 59f08b6f..5ceef595 100644 --- a/Firmware/backlight.cpp +++ b/Firmware/backlight.cpp @@ -15,7 +15,7 @@ bool backlightSupport = 0; //only if it's true will any of the settings be visib int16_t backlightLevel_HIGH = 0; int16_t backlightLevel_LOW = 0; uint8_t backlightMode = BACKLIGHT_MODE_BRIGHT; -unsigned long backlightTimer_period = 10000ul; +int16_t backlightTimer_period = 10; LongTimer backlightTimer; void backlight_save() //saves all backlight data to eeprom. @@ -23,6 +23,7 @@ void backlight_save() //saves all backlight data to eeprom. eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_HIGH, (uint8_t)backlightLevel_HIGH); eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_LOW, (uint8_t)backlightLevel_LOW); eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_MODE, backlightMode); + eeprom_update_word((uint16_t *)EEPROM_BACKLIGHT_TIMEOUT, backlightTimer_period); } void backlightTimer_reset() //used for resetting the timer and waking the display. Triggered on events such as knob click, rotate and on full screen notifications. @@ -37,7 +38,7 @@ void backlight_update() if (backlightMode == BACKLIGHT_MODE_AUTO) { - if (backlightTimer.expired(backlightTimer_period)) analogWrite(LCD_BL_PIN, backlightLevel_LOW); + if (backlightTimer.expired((uint32_t)backlightTimer_period * 1000ul)) analogWrite(LCD_BL_PIN, backlightLevel_LOW); else if (backlightTimer.running()) analogWrite(LCD_BL_PIN, backlightLevel_HIGH); else {/*do nothing*/;} //display is dimmed. } @@ -61,10 +62,12 @@ void backlight_init() backlightMode = BACKLIGHT_MODE_AUTO; backlightLevel_HIGH = 130; backlightLevel_LOW = 50; + backlightTimer_period = 10; //in seconds backlight_save(); } backlightLevel_HIGH = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_HIGH); backlightLevel_LOW = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_LOW); + backlightTimer_period = eeprom_read_word((uint16_t *)EEPROM_BACKLIGHT_TIMEOUT); SET_OUTPUT(LCD_BL_PIN); backlightTimer_reset(); diff --git a/Firmware/backlight.h b/Firmware/backlight.h index f3e2ee60..fc18dd5e 100644 --- a/Firmware/backlight.h +++ b/Firmware/backlight.h @@ -15,6 +15,7 @@ extern int16_t backlightLevel_HIGH; extern int16_t backlightLevel_LOW; extern uint8_t backlightMode; extern bool backlightSupport; +extern int16_t backlightTimer_period; extern void backlight_update(); extern void backlight_init(); diff --git a/Firmware/eeprom.h b/Firmware/eeprom.h index f47a2333..b869ac1c 100644 --- a/Firmware/eeprom.h +++ b/Firmware/eeprom.h @@ -204,9 +204,10 @@ static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_SHEETS_BASE); #define EEPROM_BACKLIGHT_LEVEL_HIGH (EEPROM_SHEETS_BASE-1) // uint8 #define EEPROM_BACKLIGHT_LEVEL_LOW (EEPROM_BACKLIGHT_LEVEL_HIGH-1) // uint8 #define EEPROM_BACKLIGHT_MODE (EEPROM_BACKLIGHT_LEVEL_LOW-1) // uint8 +#define EEPROM_BACKLIGHT_TIMEOUT (EEPROM_BACKLIGHT_MODE-2) // uint16 //This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items. -#define EEPROM_LAST_ITEM EEPROM_BACKLIGHT_MODE +#define EEPROM_LAST_ITEM EEPROM_BACKLIGHT_TIMEOUT // !!!!! // !!!!! this is end of EEPROM section ... all updates MUST BE inserted before this mark !!!!! // !!!!! diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index f4a60f7d..305ba7cb 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -7187,14 +7187,15 @@ static void lcd_backlight_menu() ); MENU_ITEM_BACK_P(_T(MSG_BACK)); - MENU_ITEM_EDIT_int3_P(_i("Level Bright"), &backlightLevel_HIGH, 0, 255); - MENU_ITEM_EDIT_int3_P(_i("Level Dimmed"), &backlightLevel_LOW, 0, 255); + MENU_ITEM_EDIT_int3_P(_i("Level Bright"), &backlightLevel_HIGH, backlightLevel_LOW, 255); + MENU_ITEM_EDIT_int3_P(_i("Level Dimmed"), &backlightLevel_LOW, 0, backlightLevel_HIGH); switch (backlightMode) { - case BACKLIGHT_MODE_BRIGHT: MENU_ITEM_FUNCTION_P(_i("Mode [Always on]"), backlight_mode_toggle); break; - case BACKLIGHT_MODE_DIM: MENU_ITEM_FUNCTION_P(_i("Mode [Always off]"), backlight_mode_toggle); break; + case BACKLIGHT_MODE_BRIGHT: MENU_ITEM_FUNCTION_P(_i("Mode [Bright]"), backlight_mode_toggle); break; + case BACKLIGHT_MODE_DIM: MENU_ITEM_FUNCTION_P(_i("Mode [Dim]"), backlight_mode_toggle); break; default: MENU_ITEM_FUNCTION_P(_i("Mode [Auto]"), backlight_mode_toggle); break; } + MENU_ITEM_EDIT_int3_P(_i("Timeout"), &backlightTimer_period, 1, 999); MENU_END(); } From 9fc42526e71c09415d15472df4acaf5f6bec6372 Mon Sep 17 00:00:00 2001 From: leptun Date: Fri, 18 Oct 2019 12:18:43 +0300 Subject: [PATCH 12/37] Backlight always on during calibration --- Firmware/Marlin_main.cpp | 3 +++ Firmware/backlight.cpp | 15 +++++++++++++++ Firmware/backlight.h | 10 ++++++++++ Firmware/ultralcd.cpp | 6 +++++- 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index c076c8a0..ff580eeb 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -63,6 +63,7 @@ #include "menu.h" #include "ultralcd.h" +#include "backlight.h" #include "planner.h" #include "stepper.h" @@ -2768,6 +2769,7 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level) #ifdef TMC2130 FORCE_HIGH_POWER_START; #endif // TMC2130 + FORCE_BL_ON_START; // Only Z calibration? if (!onlyZ) { @@ -2956,6 +2958,7 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level) #ifdef TMC2130 FORCE_HIGH_POWER_END; #endif // TMC2130 + FORCE_BL_ON_END; return final_result; } diff --git a/Firmware/backlight.cpp b/Firmware/backlight.cpp index 5ceef595..054c510f 100644 --- a/Firmware/backlight.cpp +++ b/Firmware/backlight.cpp @@ -18,6 +18,21 @@ uint8_t backlightMode = BACKLIGHT_MODE_BRIGHT; int16_t backlightTimer_period = 10; LongTimer backlightTimer; +void force_bl_on(bool section_start) +{ + if (section_start) + { + backlightMode = BACKLIGHT_MODE_BRIGHT; + if (backlightLevel_HIGH < 30) backlightLevel_HIGH = 30; + } + else + { + backlightMode = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_MODE); + backlightLevel_HIGH = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_HIGH); + } + backlight_update(); +} + void backlight_save() //saves all backlight data to eeprom. { eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_HIGH, (uint8_t)backlightLevel_HIGH); diff --git a/Firmware/backlight.h b/Firmware/backlight.h index fc18dd5e..99d777d9 100644 --- a/Firmware/backlight.h +++ b/Firmware/backlight.h @@ -3,6 +3,8 @@ #define _BACKLIGHT_H #include +#include "Marlin.h" +#include "pins.h" enum Backlight_Mode { @@ -17,6 +19,14 @@ extern uint8_t backlightMode; extern bool backlightSupport; extern int16_t backlightTimer_period; +#ifdef LCD_BL_PIN + #define FORCE_BL_ON_START force_bl_on(true) + #define FORCE_BL_ON_END force_bl_on(false) +#else + #define FORCE_BL_ON_START + #define FORCE_BL_ON_END +#endif +extern void force_bl_on(bool section_start); extern void backlight_update(); extern void backlight_init(); extern void backlightTimer_reset(); diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 305ba7cb..9d5776c7 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -5019,7 +5019,7 @@ void lcd_wizard(WizState state) // Make sure EEPROM_WIZARD_ACTIVE is true if entering using different entry point // other than WizState::Run - it is useful for debugging wizard. if (state != S::Run) eeprom_update_byte((uint8_t*)EEPROM_WIZARD_ACTIVE, 1); - + FORCE_BL_ON_START; while (!end) { printf_P(PSTR("Wizard state: %d\n"), state); switch (state) { @@ -5157,6 +5157,7 @@ void lcd_wizard(WizState state) } } + FORCE_BL_ON_END; printf_P(_N("Wizard end state: %d\n"), state); switch (state) { //final message case S::Restore: //printer was already calibrated @@ -7393,6 +7394,7 @@ bool lcd_selftest() #ifdef TMC2130 FORCE_HIGH_POWER_START; #endif // TMC2130 + FORCE_BL_ON_START; _delay(2000); KEEPALIVE_STATE(IN_HANDLER); @@ -7612,6 +7614,7 @@ bool lcd_selftest() #ifdef TMC2130 FORCE_HIGH_POWER_END; #endif // TMC2130 + FORCE_BL_ON_END; KEEPALIVE_STATE(NOT_BUSY); return(_result); } @@ -8021,6 +8024,7 @@ 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; From 0ed4a23ae724f6758b6d9701b718fc12e46e880b Mon Sep 17 00:00:00 2001 From: leptun Date: Fri, 18 Oct 2019 12:42:55 +0300 Subject: [PATCH 13/37] And another compile fix... --- Firmware/Marlin_main.cpp | 8 ++++++-- Firmware/backlight.h | 10 +++------- Firmware/ultralcd.cpp | 20 +++++++++++++++----- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index ff580eeb..76dca134 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -2769,7 +2769,9 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level) #ifdef TMC2130 FORCE_HIGH_POWER_START; #endif // TMC2130 - FORCE_BL_ON_START; + #ifdef LCD_BL_PIN + FORCE_BL_ON_START; + #endif // LCD_BL_PIN // Only Z calibration? if (!onlyZ) { @@ -2958,7 +2960,9 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level) #ifdef TMC2130 FORCE_HIGH_POWER_END; #endif // TMC2130 - FORCE_BL_ON_END; + #ifdef LCD_BL_PIN + FORCE_BL_ON_END; + #endif // LCD_BL_PIN return final_result; } diff --git a/Firmware/backlight.h b/Firmware/backlight.h index 99d777d9..ef005adf 100644 --- a/Firmware/backlight.h +++ b/Firmware/backlight.h @@ -19,13 +19,9 @@ extern uint8_t backlightMode; extern bool backlightSupport; extern int16_t backlightTimer_period; -#ifdef LCD_BL_PIN - #define FORCE_BL_ON_START force_bl_on(true) - #define FORCE_BL_ON_END force_bl_on(false) -#else - #define FORCE_BL_ON_START - #define FORCE_BL_ON_END -#endif +#define FORCE_BL_ON_START force_bl_on(true) +#define FORCE_BL_ON_END force_bl_on(false) + extern void force_bl_on(bool section_start); extern void backlight_update(); extern void backlight_init(); diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 9d5776c7..acaab10c 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -5019,7 +5019,9 @@ void lcd_wizard(WizState state) // Make sure EEPROM_WIZARD_ACTIVE is true if entering using different entry point // other than WizState::Run - it is useful for debugging wizard. if (state != S::Run) eeprom_update_byte((uint8_t*)EEPROM_WIZARD_ACTIVE, 1); - FORCE_BL_ON_START; + #ifdef LCD_BL_PIN + FORCE_BL_ON_START; + #endif // LCD_BL_PIN while (!end) { printf_P(PSTR("Wizard state: %d\n"), state); switch (state) { @@ -5157,7 +5159,9 @@ void lcd_wizard(WizState state) } } - FORCE_BL_ON_END; + #ifdef LCD_BL_PIN + FORCE_BL_ON_END; + #endif // LCD_BL_PIN printf_P(_N("Wizard end state: %d\n"), state); switch (state) { //final message case S::Restore: //printer was already calibrated @@ -7394,7 +7398,9 @@ bool lcd_selftest() #ifdef TMC2130 FORCE_HIGH_POWER_START; #endif // TMC2130 - FORCE_BL_ON_START; + #ifdef LCD_BL_PIN + FORCE_BL_ON_START; + #endif // LCD_BL_PIN _delay(2000); KEEPALIVE_STATE(IN_HANDLER); @@ -7614,7 +7620,9 @@ bool lcd_selftest() #ifdef TMC2130 FORCE_HIGH_POWER_END; #endif // TMC2130 - FORCE_BL_ON_END; + #ifdef LCD_BL_PIN + FORCE_BL_ON_END; + #endif // LCD_BL_PIN KEEPALIVE_STATE(NOT_BUSY); return(_result); } @@ -8024,7 +8032,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; + #ifdef LCD_BL_PIN + FORCE_BL_ON_END; + #endif // LCD_BL_PIN target_temperature[0] = 0; target_temperature_bed = 0; From d7b12faa95d038ac41f24f2b2ba9521891c21409 Mon Sep 17 00:00:00 2001 From: leptun Date: Sat, 19 Oct 2019 18:45:04 +0300 Subject: [PATCH 14/37] Add "Brightness" to Tune menu --- Firmware/ultralcd.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index acaab10c..f89cac58 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -7119,7 +7119,12 @@ static void lcd_tune_menu() default: MENU_ITEM_FUNCTION_P(_i(MSG_SOUND_MODE_LOUD),lcd_sound_state_set); } - +#ifdef LCD_BL_PIN + if (backlightSupport) + { + MENU_ITEM_SUBMENU_P(_i("Brightness"), lcd_backlight_menu); + } +#endif //LCD_BL_PIN MENU_END(); } From 4943e17bda06bf269a74af5a9d34357c3112f308 Mon Sep 17 00:00:00 2001 From: leptun Date: Sat, 19 Oct 2019 18:45:31 +0300 Subject: [PATCH 15/37] Preserve power during PP by turning off backlight --- Firmware/Marlin_main.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 76dca134..ac3d7d8b 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -9534,6 +9534,11 @@ void uvlo_() unsigned long time_start = _millis(); bool sd_print = card.sdprinting; // Conserve power as soon as possible. +#ifdef LCD_BL_PIN + backlightMode = BACKLIGHT_MODE_DIM; + backlightLevel_LOW = 0; + backlight_update(); +#endif //LCD_BL_PIN disable_x(); disable_y(); From 1e09f8c003a2623bd632dc4026bd7e9759598119 Mon Sep 17 00:00:00 2001 From: leptun Date: Wed, 30 Oct 2019 21:11:19 +0200 Subject: [PATCH 16/37] Wake on certain events EEPROM DIM and BRIGHT values swapped!!! --- Firmware/backlight.cpp | 24 ++++++++++++++++++++++-- Firmware/backlight.h | 5 +++-- Firmware/sound.cpp | 7 +++++++ Firmware/ultralcd.cpp | 1 + 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/Firmware/backlight.cpp b/Firmware/backlight.cpp index 054c510f..c57995cc 100644 --- a/Firmware/backlight.cpp +++ b/Firmware/backlight.cpp @@ -11,6 +11,8 @@ #ifdef LCD_BL_PIN +#define BL_FLASH_DELAY_MS 25 + bool backlightSupport = 0; //only if it's true will any of the settings be visible to the user int16_t backlightLevel_HIGH = 0; int16_t backlightLevel_LOW = 0; @@ -33,6 +35,24 @@ void force_bl_on(bool section_start) backlight_update(); } +void backlight_wake(const uint8_t flashNo) +{ + if (!backlightSupport) return; + + if (flashNo) + { + uint8_t backlightMode_bck = backlightMode; + for (uint8_t i = 0; i < (((backlightMode_bck == BACKLIGHT_MODE_AUTO) && !backlightTimer.running()) + (flashNo * 2)); i++) + { + backlightMode = !backlightMode; //toggles between BACKLIGHT_MODE_BRIGHT and BACKLIGHT_MODE_DIM + backlight_update(); + _delay(BL_FLASH_DELAY_MS); + } + backlightMode = backlightMode_bck; + } + backlightTimer_reset(); +} + void backlight_save() //saves all backlight data to eeprom. { eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_HIGH, (uint8_t)backlightLevel_HIGH); @@ -41,10 +61,11 @@ void backlight_save() //saves all backlight data to eeprom. eeprom_update_word((uint16_t *)EEPROM_BACKLIGHT_TIMEOUT, backlightTimer_period); } -void backlightTimer_reset() //used for resetting the timer and waking the display. Triggered on events such as knob click, rotate and on full screen notifications. +void backlightTimer_reset() //used for resetting the timer and waking the display. Triggered on user interactions. { if (!backlightSupport) return; backlightTimer.start(); + backlight_update(); } void backlight_update() @@ -86,7 +107,6 @@ void backlight_init() SET_OUTPUT(LCD_BL_PIN); backlightTimer_reset(); - backlight_update(); //sets brightness } #endif //LCD_BL_PIN \ No newline at end of file diff --git a/Firmware/backlight.h b/Firmware/backlight.h index ef005adf..fce908a3 100644 --- a/Firmware/backlight.h +++ b/Firmware/backlight.h @@ -8,8 +8,8 @@ enum Backlight_Mode { - BACKLIGHT_MODE_BRIGHT = 0, - BACKLIGHT_MODE_DIM = 1, + BACKLIGHT_MODE_DIM = 0, + BACKLIGHT_MODE_BRIGHT = 1, BACKLIGHT_MODE_AUTO = 2, }; @@ -27,6 +27,7 @@ extern void backlight_update(); extern void backlight_init(); extern void backlightTimer_reset(); extern void backlight_save(); +extern void backlight_wake(const uint8_t flashNo = 0); #endif //_BACKLIGHT_H diff --git a/Firmware/sound.cpp b/Firmware/sound.cpp index 52d880a0..39d513de 100644 --- a/Firmware/sound.cpp +++ b/Firmware/sound.cpp @@ -5,6 +5,7 @@ //#include //#include //#include "eeprom.h" +#include "backlight.h" //eSOUND_MODE eSoundMode=e_SOUND_MODE_LOUD; @@ -63,6 +64,7 @@ Sound_SaveMode(); //if critical is true then silend and once mode is ignored void Sound_MakeCustom(uint16_t ms,uint16_t tone_,bool critical){ + backlight_wake(1); if (!critical){ if (eSoundMode != e_SOUND_MODE_SILENT){ if(!tone_){ @@ -135,6 +137,7 @@ switch(eSoundMode) static void Sound_DoSound_Blind_Alert(void) { + backlight_wake(1); uint8_t nI; for(nI=0; nI<20; nI++) @@ -148,6 +151,7 @@ static void Sound_DoSound_Blind_Alert(void) static void Sound_DoSound_Encoder_Move(void) { + backlight_wake(); uint8_t nI; for(nI=0;nI<5;nI++) @@ -161,6 +165,7 @@ uint8_t nI; static void Sound_DoSound_Echo(void) { + backlight_wake(); uint8_t nI; for(nI=0;nI<10;nI++) @@ -174,6 +179,7 @@ for(nI=0;nI<10;nI++) static void Sound_DoSound_Prompt(void) { + backlight_wake(2); WRITE(BEEPER,HIGH); _delay_ms(500); WRITE(BEEPER,LOW); @@ -181,6 +187,7 @@ WRITE(BEEPER,LOW); static void Sound_DoSound_Alert(bool bOnce) { + backlight_wake(); uint8_t nI,nMax; nMax=bOnce?1:3; diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index f89cac58..0cf8667f 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -8868,6 +8868,7 @@ void menu_lcd_lcdupdate_func(void) lcd_draw_update = 2; lcd_oldcardstatus = IS_SD_INSERTED; lcd_refresh(); // to maybe revive the LCD if static electricity killed it. + backlight_wake(); if (lcd_oldcardstatus) { card.initsd(); From c899320590b5b9e41181026076697747ad898a5a Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Thu, 31 Oct 2019 15:08:07 +0100 Subject: [PATCH 17/37] Fix M81 Turn off Power Supply... ... as it should be active if PS_ON_PIN is defined and assinged to an actual pin. --- Firmware/Marlin_main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index a2cbece5..1cd6d997 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -6165,7 +6165,6 @@ Sigma_Exit: LCD_MESSAGERPGM(_T(WELCOME_MSG)); lcd_update(0); break; - #endif //! ### M81 - Turn off Power Supply // -------------------------------------- @@ -6189,6 +6188,7 @@ Sigma_Exit: LCD_MESSAGERPGM(CAT4(CUSTOM_MENDEL_NAME,PSTR(" "),MSG_OFF,PSTR("."))); lcd_update(0); break; + #endif //! ### M82 - Set E axis to absolute mode // --------------------------------------- From cd5ff783cfef9f74665c70c2da02d7427985d670 Mon Sep 17 00:00:00 2001 From: leptun Date: Thu, 31 Oct 2019 19:07:20 +0200 Subject: [PATCH 18/37] General fixes and improvements to code --- Firmware/Marlin_main.cpp | 14 +++++------ Firmware/backlight.cpp | 22 ++++++++++------ Firmware/backlight.h | 1 - Firmware/sound.cpp | 2 +- Firmware/ultralcd.cpp | 54 +++++++++++++++------------------------- 5 files changed, 43 insertions(+), 50 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index ac3d7d8b..ea6c9aa2 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -2769,10 +2769,10 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level) #ifdef TMC2130 FORCE_HIGH_POWER_START; #endif // TMC2130 - #ifdef LCD_BL_PIN - FORCE_BL_ON_START; - #endif // LCD_BL_PIN - // Only Z calibration? + + FORCE_BL_ON_START; + + // Only Z calibration? if (!onlyZ) { setTargetBed(0); @@ -2960,9 +2960,9 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level) #ifdef TMC2130 FORCE_HIGH_POWER_END; #endif // TMC2130 - #ifdef LCD_BL_PIN - FORCE_BL_ON_END; - #endif // LCD_BL_PIN + + FORCE_BL_ON_END; + return final_result; } diff --git a/Firmware/backlight.cpp b/Firmware/backlight.cpp index c57995cc..6500837e 100644 --- a/Firmware/backlight.cpp +++ b/Firmware/backlight.cpp @@ -20,6 +20,13 @@ uint8_t backlightMode = BACKLIGHT_MODE_BRIGHT; int16_t backlightTimer_period = 10; LongTimer backlightTimer; +static void backlightTimer_reset() //used for resetting the timer and waking the display. Triggered on user interactions. +{ + if (!backlightSupport) return; + backlightTimer.start(); + backlight_update(); +} + void force_bl_on(bool section_start) { if (section_start) @@ -61,13 +68,6 @@ void backlight_save() //saves all backlight data to eeprom. eeprom_update_word((uint16_t *)EEPROM_BACKLIGHT_TIMEOUT, backlightTimer_period); } -void backlightTimer_reset() //used for resetting the timer and waking the display. Triggered on user interactions. -{ - if (!backlightSupport) return; - backlightTimer.start(); - backlight_update(); -} - void backlight_update() { if (!backlightSupport) return; @@ -109,4 +109,12 @@ void backlight_init() backlightTimer_reset(); } +#else //LCD_BL_PIN + +void force_bl_on(__attribute__((unused)) bool section_start) {} +void backlight_update() {} +void backlight_init() {} +void backlight_save() {} +void backlight_wake(__attribute__((unused)) const uint8_t flashNo) {} + #endif //LCD_BL_PIN \ No newline at end of file diff --git a/Firmware/backlight.h b/Firmware/backlight.h index fce908a3..d9fdd0ad 100644 --- a/Firmware/backlight.h +++ b/Firmware/backlight.h @@ -25,7 +25,6 @@ extern int16_t backlightTimer_period; extern void force_bl_on(bool section_start); extern void backlight_update(); extern void backlight_init(); -extern void backlightTimer_reset(); extern void backlight_save(); extern void backlight_wake(const uint8_t flashNo = 0); diff --git a/Firmware/sound.cpp b/Firmware/sound.cpp index 39d513de..bf10271e 100644 --- a/Firmware/sound.cpp +++ b/Firmware/sound.cpp @@ -64,7 +64,7 @@ Sound_SaveMode(); //if critical is true then silend and once mode is ignored void Sound_MakeCustom(uint16_t ms,uint16_t tone_,bool critical){ - backlight_wake(1); + backlight_wake(); if (!critical){ if (eSoundMode != e_SOUND_MODE_SILENT){ if(!tone_){ diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 0cf8667f..b9b03f68 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -19,9 +19,7 @@ #include "lcd.h" #include "menu.h" -#ifdef LCD_BL_PIN #include "backlight.h" -#endif //LCD_BL_PIN #include "util.h" #include "mesh_bed_leveling.h" @@ -5019,10 +5017,10 @@ void lcd_wizard(WizState state) // Make sure EEPROM_WIZARD_ACTIVE is true if entering using different entry point // other than WizState::Run - it is useful for debugging wizard. if (state != S::Run) eeprom_update_byte((uint8_t*)EEPROM_WIZARD_ACTIVE, 1); - #ifdef LCD_BL_PIN - FORCE_BL_ON_START; - #endif // LCD_BL_PIN - while (!end) { + + FORCE_BL_ON_START; + + while (!end) { printf_P(PSTR("Wizard state: %d\n"), state); switch (state) { case S::Run: //Run wizard? @@ -5158,10 +5156,9 @@ void lcd_wizard(WizState state) default: break; } } - - #ifdef LCD_BL_PIN - FORCE_BL_ON_END; - #endif // LCD_BL_PIN + + FORCE_BL_ON_END; + printf_P(_N("Wizard end state: %d\n"), state); switch (state) { //final message case S::Restore: //printer was already calibrated @@ -7403,9 +7400,9 @@ bool lcd_selftest() #ifdef TMC2130 FORCE_HIGH_POWER_START; #endif // TMC2130 - #ifdef LCD_BL_PIN - FORCE_BL_ON_START; - #endif // LCD_BL_PIN + + FORCE_BL_ON_START; + _delay(2000); KEEPALIVE_STATE(IN_HANDLER); @@ -7625,10 +7622,10 @@ bool lcd_selftest() #ifdef TMC2130 FORCE_HIGH_POWER_END; #endif // TMC2130 - #ifdef LCD_BL_PIN - FORCE_BL_ON_END; - #endif // LCD_BL_PIN - KEEPALIVE_STATE(NOT_BUSY); + + FORCE_BL_ON_END; + + KEEPALIVE_STATE(NOT_BUSY); return(_result); } @@ -8037,10 +8034,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(); - #ifdef LCD_BL_PIN - FORCE_BL_ON_END; - #endif // LCD_BL_PIN - + + FORCE_BL_ON_END; + target_temperature[0] = 0; target_temperature_bed = 0; manage_heater(); @@ -8633,9 +8629,7 @@ void ultralcd_init() else lcd_autoDeplete = autoDepleteRaw; } -#ifdef LCD_BL_PIN backlight_init(); -#endif //LCD_BL_PIN lcd_init(); lcd_refresh(); lcd_longpress_func = menu_lcd_longpress_func; @@ -8784,9 +8778,7 @@ uint8_t get_message_level() void menu_lcd_longpress_func(void) { -#ifdef LCD_BL_PIN - backlightTimer_reset(); -#endif //LCD_BL_PIN + backlight_wake(); if (homing_flag || mesh_bed_leveling_flag || menu_menu == lcd_babystep_z || menu_menu == lcd_move_z) { // disable longpress during re-entry, while homing or calibration @@ -8886,9 +8878,7 @@ void menu_lcd_lcdupdate_func(void) } } #endif//CARDINSERTED -#ifdef LCD_BL_PIN backlight_update(); -#endif //LCD_BL_PIN if (lcd_next_update_millis < _millis()) { if (abs(lcd_encoder_diff) >= ENCODER_PULSES_PER_STEP) @@ -8899,17 +8889,13 @@ void menu_lcd_lcdupdate_func(void) Sound_MakeSound(e_SOUND_TYPE_EncoderMove); lcd_encoder_diff = 0; lcd_timeoutToStatus.start(); -#ifdef LCD_BL_PIN - backlightTimer_reset(); -#endif //LCD_BL_PIN + backlight_wake(); } if (LCD_CLICKED) { lcd_timeoutToStatus.start(); -#ifdef LCD_BL_PIN - backlightTimer_reset(); -#endif //LCD_BL_PIN + backlight_wake(); } (*menu_menu)(); From 459385708ebbb93206d0335451e8eb5acdca8484 Mon Sep 17 00:00:00 2001 From: leptun Date: Sat, 2 Nov 2019 13:15:13 +0200 Subject: [PATCH 19/37] Fix MMU needs user attention Statistics error --- Firmware/mmu.cpp | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index d8ae497b..89c43645 100755 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -1572,18 +1572,7 @@ void mmu_continue_loading(bool blocking) break; case Ls::Unload: stop_and_save_print_to_ram(0, 0); - - //lift z - current_position[Z_AXIS] += Z_PAUSE_LIFT; - if (current_position[Z_AXIS] > Z_MAX_POS) current_position[Z_AXIS] = Z_MAX_POS; - plan_buffer_line_curposXYZE(15, active_extruder); - st_synchronize(); - - //Move XY to side - current_position[X_AXIS] = X_PAUSE_POS; - current_position[Y_AXIS] = Y_PAUSE_POS; - plan_buffer_line_curposXYZE(50, active_extruder); - st_synchronize(); + long_pause(); mmu_command(MmuCmd::U0); manage_response(false, true, MMU_UNLOAD_MOVE); From 359c44712718b506166f159d9ec6a3c769180a9d Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Sat, 16 Nov 2019 22:44:34 +0200 Subject: [PATCH 20/37] Do not check for fanError if it is not enabled on resume Fix typos --- Firmware/ultralcd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 2ed8d5de..a6f92f47 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -6652,6 +6652,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 @@ -6682,9 +6683,8 @@ static bool fan_error_selftest() return 1; } #endif +#endif //FANCHECK return 0; - -#endif //FANCHECK } //! @brief Resume paused print From 2e0034d915b073d11807eb815e63a7c4374cd9c7 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Sun, 17 Nov 2019 09:53:14 +0200 Subject: [PATCH 21/37] Update Toggles and Translations --- Firmware/messages.c | 7 +++++++ Firmware/messages.h | 7 +++++++ Firmware/ultralcd.cpp | 17 ++++++----------- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/Firmware/messages.c b/Firmware/messages.c index f38c2939..9d878f6e 100644 --- a/Firmware/messages.c +++ b/Firmware/messages.c @@ -128,6 +128,13 @@ const char MSG_SOUND_BLIND[] PROGMEM_I1 = ISTR("Assist"); //// const char MSG_MESH[] PROGMEM_I1 = ISTR("Mesh"); //// const char MSG_Z_PROBE_NR[] PROGMEM_I1 = ISTR("Z-probe nr."); //// const char MSG_MAGNETS_COMP[] PROGMEM_I1 = ISTR("Magnets comp."); //// +const char MSG_BRIGHTNESS[] PROGMEM_I1 = ISTR("Brightness"); //// +const char MSG_BL_HIGH[] PROGMEM_I1 = ISTR("Level Bright"); //// +const char MSG_BL_LOW[] PROGMEM_I1 = ISTR("Level Dimmed"); //// +const char MSG_TIMEOUT[] PROGMEM_I1 = ISTR("Timeout"); //// +const char MSG_BRIGHT[] PROGMEM_I1 = ISTR("Bright"); //// +const char MSG_DIM[] PROGMEM_I1 = ISTR("Dim"); //// +const char MSG_AUTO[] PROGMEM_I1 = ISTR("Auto"); //// //not internationalized messages const char MSG_SD_WORKDIR_FAIL[] PROGMEM_N1 = "workDir open failed"; //// diff --git a/Firmware/messages.h b/Firmware/messages.h index 30671533..4de5c7cf 100644 --- a/Firmware/messages.h +++ b/Firmware/messages.h @@ -128,6 +128,13 @@ extern const char MSG_SOUND_BLIND[]; extern const char MSG_MESH[]; extern const char MSG_Z_PROBE_NR[]; extern const char MSG_MAGNETS_COMP[]; +extern const char MSG_BRIGHTNESS[]; +extern const char MSG_BL_HIGH[]; +extern const char MSG_BL_LOW[]; +extern const char MSG_TIMEOUT[]; +extern const char MSG_BRIGHT[]; +extern const char MSG_DIM[]; +extern const char MSG_AUTO[]; //not internationalized messages extern const char MSG_BROWNOUT_RESET[]; diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 1c2be1ac..0a721cfd 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -5787,7 +5787,7 @@ static void lcd_settings_menu() #ifdef LCD_BL_PIN if (backlightSupport) { - MENU_ITEM_SUBMENU_P(_i("Brightness"), lcd_backlight_menu); + MENU_ITEM_SUBMENU_P(_T(MSG_BRIGHTNESS), lcd_backlight_menu); } #endif //LCD_BL_PIN @@ -7113,7 +7113,7 @@ static void lcd_tune_menu() #ifdef LCD_BL_PIN if (backlightSupport) { - MENU_ITEM_SUBMENU_P(_i("Brightness"), lcd_backlight_menu); + MENU_ITEM_SUBMENU_P(_T(MSG_BRIGHTNESS), lcd_backlight_menu); } #endif //LCD_BL_PIN MENU_END(); @@ -7186,15 +7186,10 @@ static void lcd_backlight_menu() ); MENU_ITEM_BACK_P(_T(MSG_BACK)); - MENU_ITEM_EDIT_int3_P(_i("Level Bright"), &backlightLevel_HIGH, backlightLevel_LOW, 255); - MENU_ITEM_EDIT_int3_P(_i("Level Dimmed"), &backlightLevel_LOW, 0, backlightLevel_HIGH); - switch (backlightMode) - { - case BACKLIGHT_MODE_BRIGHT: MENU_ITEM_FUNCTION_P(_i("Mode [Bright]"), backlight_mode_toggle); break; - case BACKLIGHT_MODE_DIM: MENU_ITEM_FUNCTION_P(_i("Mode [Dim]"), backlight_mode_toggle); break; - default: MENU_ITEM_FUNCTION_P(_i("Mode [Auto]"), backlight_mode_toggle); break; - } - MENU_ITEM_EDIT_int3_P(_i("Timeout"), &backlightTimer_period, 1, 999); + 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(); } From 14104e7bf98b5bf28d6db64585a65bf40b55196a Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Sun, 17 Nov 2019 10:44:11 +0200 Subject: [PATCH 22/37] Clear error flag when fanError is disabled --- Firmware/ultralcd.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index a6f92f47..fdb1e954 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -2270,6 +2270,7 @@ 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); + if (fans_check_enabled == false) fan_check_error = EFCE_OK; //reset error if fanCheck is disabled during error. Allows resuming print. } #ifdef MMU_HAS_CUTTER From b077303156aec0a5a775654334aa405ba36aacc2 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Sun, 17 Nov 2019 11:10:13 +0200 Subject: [PATCH 23/37] Fix compile error --- Firmware/ultralcd.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index fdb1e954..3bc94b81 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -2270,7 +2270,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; //reset error if fanCheck is disabled during error. Allows resuming print. +#endif //FANCHECK } #ifdef MMU_HAS_CUTTER From 982c4cbf7b3b27ccabf181d07c30e62d944b113e Mon Sep 17 00:00:00 2001 From: vintagepc <53943260+vintagepc@users.noreply.github.com> Date: Thu, 21 Nov 2019 18:51:02 -0500 Subject: [PATCH 24/37] Candidate fix for homing fail hard reset --- Firmware/tmc2130.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Firmware/tmc2130.cpp b/Firmware/tmc2130.cpp index 42359ba8..f64457b5 100755 --- a/Firmware/tmc2130.cpp +++ b/Firmware/tmc2130.cpp @@ -807,15 +807,15 @@ void tmc2130_goto_step(uint8_t axis, uint8_t step, uint8_t dir, uint16_t delay_u { dir = tmc2130_get_inv(axis)?0:1; int steps = (int)step - (int)(mscnt >> shift); - if (steps < 0) - { - dir ^= 1; - steps = -steps; - } if (steps > static_cast(cnt / 2)) { dir ^= 1; - steps = cnt - steps; + steps = cnt - steps; // This can create a negative step value + } + if (steps < 0) + { + dir ^= 1; + steps = -steps; } cnt = steps; } From 92482f03abde99bb7634a507fee60b0f0d1b7771 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20B=C4=9Bl?= <35807926+mkbel@users.noreply.github.com> Date: Wed, 27 Nov 2019 17:23:16 +0100 Subject: [PATCH 25/37] Update README.md Add link for doxygen generated documentation. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 782ed6f7..6b0edf0a 100644 --- a/README.md +++ b/README.md @@ -178,6 +178,7 @@ Example: # 4. Documentation run [doxygen](http://www.doxygen.nl/) in Firmware folder +or visit https://prusa3d.github.io/Prusa-Firmware-Doc/index.html for doxygen generated output # 5. FAQ Q:I built firmware using Arduino and I see "?" instead of numbers in printer user interface. From 05a1debf3d9a89043b0c0a941cdab9dd204aaa97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20B=C4=9Bl?= <35807926+mkbel@users.noreply.github.com> Date: Wed, 27 Nov 2019 17:27:11 +0100 Subject: [PATCH 26/37] Update README.md /index.html becomes unnecessary after several seconds online. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6b0edf0a..9c50509a 100644 --- a/README.md +++ b/README.md @@ -178,7 +178,7 @@ Example: # 4. Documentation run [doxygen](http://www.doxygen.nl/) in Firmware folder -or visit https://prusa3d.github.io/Prusa-Firmware-Doc/index.html for doxygen generated output +or visit https://prusa3d.github.io/Prusa-Firmware-Doc for doxygen generated output # 5. FAQ Q:I built firmware using Arduino and I see "?" instead of numbers in printer user interface. From e7f2577233100a32abf050d1ba77492e9b3a1a91 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Fri, 29 Nov 2019 22:49:22 +0200 Subject: [PATCH 27/37] Fix kill messages --- Firmware/Marlin_main.cpp | 6 +++--- Firmware/cardreader.cpp | 8 ++++---- Firmware/cmdqueue.cpp | 2 +- Firmware/messages.c | 1 + Firmware/messages.h | 1 + Firmware/temperature.cpp | 2 +- 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index fe94fab5..5788e0dd 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -5944,7 +5944,7 @@ Sigma_Exit: //! ### M112 - Emergency stop // ----------------------------------------- case 112: - kill(_n(""), 3); + kill(MSG_M112_KILL, 3); break; //! ### M140 - Set bed temperature @@ -8626,7 +8626,7 @@ if(0) if( (_millis() - previous_millis_cmd) > max_inactive_time ) if(max_inactive_time) - kill(_n(""), 4); + kill(_n("Inactivity Shutdown"), 4); if(stepper_inactive_time) { if( (_millis() - previous_millis_cmd) > stepper_inactive_time ) { @@ -8667,7 +8667,7 @@ if(0) // ---------------------------------------------------------------- if ( killCount >= KILL_DELAY) { - kill("", 5); + kill(NULL, 5); } #endif diff --git a/Firmware/cardreader.cpp b/Firmware/cardreader.cpp index 047a2c76..545316d3 100644 --- a/Firmware/cardreader.cpp +++ b/Firmware/cardreader.cpp @@ -359,10 +359,10 @@ void CardReader::openFile(const char* name,bool read, bool replace_current/*=tru { if((int)file_subcall_ctr>(int)SD_PROCEDURE_DEPTH-1) { - SERIAL_ERROR_START; - SERIAL_ERRORPGM("trying to call sub-gcode files with too many levels. MAX level is:"); - SERIAL_ERRORLN(SD_PROCEDURE_DEPTH); - kill("", 1); + // SERIAL_ERROR_START; + // SERIAL_ERRORPGM("trying to call sub-gcode files with too many levels. MAX level is:"); + // SERIAL_ERRORLN(SD_PROCEDURE_DEPTH); + kill(_n("trying to call sub-gcode files with too many levels."), 1); return; } diff --git a/Firmware/cmdqueue.cpp b/Firmware/cmdqueue.cpp index e17db42a..c8693552 100755 --- a/Firmware/cmdqueue.cpp +++ b/Firmware/cmdqueue.cpp @@ -500,7 +500,7 @@ void get_command() //If command was e-stop process now if(strcmp(cmdbuffer+bufindw+CMDHDRSIZE, "M112") == 0) - kill("", 2); + kill(MSG_M112_KILL, 2); // Store the current line into buffer, move to the next line. // Store type of entry diff --git a/Firmware/messages.c b/Firmware/messages.c index bb2e9510..1d8847e1 100644 --- a/Firmware/messages.c +++ b/Firmware/messages.c @@ -160,3 +160,4 @@ const char MSG_OCTOPRINT_RESUMED[] PROGMEM_N1 = "// action:resumed"; //// const char MSG_OCTOPRINT_CANCEL[] PROGMEM_N1 = "// action:cancel"; //// const char MSG_FANCHECK_EXTRUDER[] PROGMEM_N1 = "Err: EXTR. FAN ERROR"; ////c=20 const char MSG_FANCHECK_PRINT[] PROGMEM_N1 = "Err: PRINT FAN ERROR"; ////c=20 +const char MSG_M112_KILL[] PROGMEM_N1 = "M112 called. Emergency Stop."; ////c=20 diff --git a/Firmware/messages.h b/Firmware/messages.h index 60a4cc1c..1dfbfa50 100644 --- a/Firmware/messages.h +++ b/Firmware/messages.h @@ -161,6 +161,7 @@ extern const char MSG_OCTOPRINT_RESUMED[]; extern const char MSG_OCTOPRINT_CANCEL[]; extern const char MSG_FANCHECK_EXTRUDER[]; extern const char MSG_FANCHECK_PRINT[]; +extern const char MSG_M112_KILL[]; #if defined(__cplusplus) } diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index a9373a54..88674cf9 100755 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -879,7 +879,7 @@ static float analog2temp(int raw, uint8_t e) { SERIAL_ERROR_START; SERIAL_ERROR((int)e); SERIAL_ERRORLNPGM(" - Invalid extruder number !"); - kill(PSTR(""), 6); + kill(NULL, 6); return 0.0; } #ifdef HEATER_0_USES_MAX6675 From 454e99dbb54086e2ce4a1ea7c1cb9317671c4668 Mon Sep 17 00:00:00 2001 From: Yuri D'Elia Date: Tue, 3 Dec 2019 15:50:21 +0100 Subject: [PATCH 28/37] Use lcd_print_stop() in M603, fix octoprint regression M603 shouldn't report a fatal error state. Use lcd_print_stop(). Regression introduced in PR #2274 --- Firmware/Marlin_main.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index fe94fab5..4dc5e2d3 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -7271,7 +7271,7 @@ Sigma_Exit: //! ### M603 - Stop print // ------------------------------- case 603: { - Stop(); + lcd_print_stop(); } break; @@ -8745,6 +8745,16 @@ void kill(const char *full_screen_message, unsigned char id) } // Wait for reset } +// Stop: Emergency stop used by overtemp functions which allows recovery +// +// In addition to stopping the print, this prevents subsequent G[0-3] commands to be +// processed via USB (using "Stopped") until the print is resumed via M999 or +// manually started from scratch with the LCD. +// +// Note that the current instruction is completely discarded, so resuming from Stop() +// will introduce either over/under extrusion on the current segment, and will not +// survive a power panic. Switching Stop() to use the pause machinery instead (with +// the addition of disabling the headers) could allow true recovery in the future. void Stop() { disable_heater(); From 4fce74140a55679318b09027d0e42ec7c0aa0cf6 Mon Sep 17 00:00:00 2001 From: Yuri D'Elia Date: Tue, 3 Dec 2019 19:35:29 +0100 Subject: [PATCH 29/37] Also abort planning in stop_and_save_print_to_ram Similarly to resume_print_from_ram_and_continue, abort any planning in mesh_plan_buffer_line already in stop_and_save_print_to_ram in case it is called for pausing only. --- Firmware/Marlin_main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index fe94fab5..33f67684 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -10249,6 +10249,7 @@ void stop_and_save_print_to_ram(float z_move, float e_move) memcpy(current_position, saved_pos, sizeof(saved_pos)); memcpy(destination, current_position, sizeof(destination)); #endif + waiting_inside_plan_buffer_line_print_aborted = true; //unroll the stack } } From 792d7ca6dc2029e7c6d81c6609eb89c06bb29ba7 Mon Sep 17 00:00:00 2001 From: Yuri D'Elia Date: Tue, 3 Dec 2019 19:54:06 +0100 Subject: [PATCH 30/37] Turn off heaters just prior to retraction to limit oozing --- Firmware/Marlin_main.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 33f67684..c8596bad 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -9555,9 +9555,11 @@ float temp_compensation_pinda_thermistor_offset(float temperature_pinda) void long_pause() //long pause print { st_synchronize(); - start_pause_print = _millis(); + // Stop heaters + setAllTargetHotends(0); + //retract current_position[E_AXIS] -= default_retraction; plan_buffer_line_curposXYZE(400, active_extruder); @@ -9572,8 +9574,7 @@ void long_pause() //long pause print current_position[Y_AXIS] = Y_PAUSE_POS; plan_buffer_line_curposXYZE(50, active_extruder); - // Turn off the hotends and print fan - setAllTargetHotends(0); + // Turn off the print fan fanSpeed = 0; } From d60230e494e6e4a60387b7fceab8e8be24648b70 Mon Sep 17 00:00:00 2001 From: Yuri D'Elia Date: Tue, 3 Dec 2019 19:55:33 +0100 Subject: [PATCH 31/37] Add some documentation --- Firmware/Marlin_main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index c8596bad..9924b61c 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -10221,7 +10221,9 @@ void stop_and_save_print_to_ram(float z_move, float e_move) sei(); if ((z_move != 0) || (e_move != 0)) { // extruder or z move #if 1 - // Rather than calling plan_buffer_line directly, push the move into the command queue, + // Rather than calling plan_buffer_line directly, push the move into the command queue so that + // the caller can continue processing. This is used during powerpanic to save the state as we + // move away from the print. char buf[48]; // First unretract (relative extrusion) From 063d0421ac71801bf0d8eb31ca9e51ef3950737f Mon Sep 17 00:00:00 2001 From: Yuri D'Elia Date: Tue, 3 Dec 2019 19:56:05 +0100 Subject: [PATCH 32/37] Call long_pause from the main loop (again) After calling stop_and_save_print_to_ram, perform the parking moves within the main loop as done before PR#1899 to avoid planning within an interrupted move (which would clear the abort flag too soon). --- Firmware/ultralcd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index cbfe017f..b9e86fc4 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -1100,6 +1100,7 @@ void lcd_commands() lcd_setstatuspgm(_i("Print paused"));////MSG_PRINT_PAUSED c=20 r=1 lcd_commands_type = LcdCommands::Idle; lcd_commands_step = 0; + long_pause(); } } @@ -1656,9 +1657,8 @@ void lcd_return_to_status() //! @brief Pause print, disable nozzle heater, move to park position 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) { From 8448b8d41390301a6cd3a5e4b31260d52bfff896 Mon Sep 17 00:00:00 2001 From: Yuri D'Elia Date: Tue, 3 Dec 2019 20:17:08 +0100 Subject: [PATCH 33/37] Keep destination updated in an aborted plan as well When aborting the plan destination is updated anyway to reflect the latest position. There's no use in this additional check. --- Firmware/Marlin_main.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 9924b61c..5bdae1bb 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -8415,8 +8415,6 @@ void prepare_move() plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate*feedmultiply*(1./(60.f*100.f)), active_extruder); #endif } - if (waiting_inside_plan_buffer_line_print_aborted) - return; set_current_to_destination(); } From 564bab7308f69bbe2857b806ecdd63e96a75067d Mon Sep 17 00:00:00 2001 From: Michal Fanta <45625875+michalxfanta@users.noreply.github.com> Date: Thu, 5 Dec 2019 11:42:42 +0100 Subject: [PATCH 34/37] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 31 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/enhancement.md | 20 +++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 20 +++++++++++++++ .github/ISSUE_TEMPLATE/question.md | 12 +++++++++ 4 files changed, 83 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/enhancement.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/question.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..196d5756 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,31 @@ +--- +name: Bug report +about: Create a report to help us improve +title: "[BUG]" +labels: bug +assignees: '' + +--- + +Please, before you create a new bug report, please make sure you searched in open and closed issues and couldn't find anything that matches. + +**Printer type** - [e.g. MK3S, MK3, MK2.5S, MK2.5, MK2S, MK2] +**Printer firmware version**- [e.g. 3.8.1, 3.8.1-RC1, ...] + +**MMU Upgrade** - [e.g. MMU2S, MMU2, MMU1] +**MMU upgrade firmware version [e.g. 1.0.6, 1.0.6-RC2, ...] + +**Describe the bug** + A clear and concise description of what the bug is. + +**To Reproduce** + Please describe steps to reproduce the behavior. + +**Expected behavior** + A clear and concise description of what you expected to happen. + +**G-code** + Please attach a G-code. This will make it easier for us to replicate the error. + +**Video** + Please attach a video. It usually helps to solve the problem. diff --git a/.github/ISSUE_TEMPLATE/enhancement.md b/.github/ISSUE_TEMPLATE/enhancement.md new file mode 100644 index 00000000..1592c6fc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/enhancement.md @@ -0,0 +1,20 @@ +--- +name: Enhancement +about: Suggest an idea for this project +title: " [ENHANCEMENT]" +labels: enhancement +assignees: '' + +--- + +Please, before you create a new feature request, please make sure you searched in open and closed issues and couldn't find anything that matches. + +Enter what type of printer or upgrade the enhancement applies to. +**Printer type** - [e.g. MK3S, MK3, MK2.5S, MK2.5, MK2S, MK2] +**MMU Upgrade** - [e.g. MMU2S, MMU2, MMU1] + +**Is your enhancement related to a problem? Please describe.** + A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** + A clear and concise description of what you want to happen. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..abc71cbb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: "[FEATURE REQUEST]" +labels: feature request +assignees: '' + +--- + +Please, before you create a new feature request, please make sure you searched in open and closed issues and couldn't find anything that matches. + +If it makes sense, enter what type of printer or upgrade the feature request applies to. +**Printer type** - [e.g. MK3S, MK3, MK2.5S, MK2.5, MK2S, MK2] +**MMU Upgrade** - [e.g. MMU2S, MMU2, MMU1] + +**Is your feature request related to a problem? Please describe.** + A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** + A clear and concise description of what you want to happen. diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 00000000..14ce734f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,12 @@ +--- +name: Question +about: What do you want to know? +title: "[QUESTION]" +labels: question +assignees: '' + +--- + +Please, before you create a new question, please make sure you searched in open and closed issues and couldn't find anything that matches. + +**What is your question?** From 89dfb00b04bff7fd1f8656744ef8d74bd79a9a6a Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Sun, 8 Dec 2019 08:43:43 +0200 Subject: [PATCH 35/37] Fix optiboot erase function after address 0xFFFF --- Firmware/optiboot_w25x20cl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/optiboot_w25x20cl.cpp b/Firmware/optiboot_w25x20cl.cpp index e84bf639..584c32fe 100644 --- a/Firmware/optiboot_w25x20cl.cpp +++ b/Firmware/optiboot_w25x20cl.cpp @@ -258,11 +258,11 @@ void optiboot_w25x20cl_enter() uint32_t addr = (((uint32_t)rampz) << 16) | address; // During a single bootloader run, only erase a 64kB block once. // An 8bit bitmask 'pages_erased' covers 512kB of FLASH memory. - if (address == 0 && (pages_erased & (1 << addr)) == 0) { + if ((address == 0) && (pages_erased & (1 << (addr >> 16))) == 0) { w25x20cl_wait_busy(); w25x20cl_enable_wr(); w25x20cl_block64_erase(addr); - pages_erased |= (1 << addr); + pages_erased |= (1 << (addr >> 16)); } w25x20cl_wait_busy(); w25x20cl_enable_wr(); From ed3a459090ccc4322dc0ba8dbe85064572b78884 Mon Sep 17 00:00:00 2001 From: DRracer Date: Wed, 23 Oct 2019 13:54:15 +0200 Subject: [PATCH 36/37] Revert "Skipped one translated sentence, because total translation size was >" This reverts commit 5c2b573415a19d57353463856017919e7376ffac. --- lang/lang_en_cz.txt | 2 +- lang/lang_en_de.txt | 2 +- lang/lang_en_es.txt | 2 +- lang/lang_en_fr.txt | 2 +- lang/lang_en_it.txt | 2 +- lang/lang_en_pl.txt | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lang/lang_en_cz.txt b/lang/lang_en_cz.txt index 0fc920ad..230055b1 100755 --- a/lang/lang_en_cz.txt +++ b/lang/lang_en_cz.txt @@ -1188,7 +1188,7 @@ # "The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)." -"\x00" +"Tiskarna zacne tisknout lomenou caru. Otacenim tlacitka nastavte optimalni vysku. Postupujte podle obrazku v handbooku (kapitola Kalibrace)." # "Y-correct:" diff --git a/lang/lang_en_de.txt b/lang/lang_en_de.txt index 91107d8e..11c36b40 100755 --- a/lang/lang_en_de.txt +++ b/lang/lang_en_de.txt @@ -1188,7 +1188,7 @@ # "The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)." -"\x00" +"Der Drucker beginnt mit dem Drucken einer Zickzacklinie. Drehen Sie den Knopf, bis Sie die optimale Hoehe erreicht haben. Ueberpruefen Sie die Bilder im Handbuch (Kapitel Kalibrierung)." # "Y-correct:" diff --git a/lang/lang_en_es.txt b/lang/lang_en_es.txt index 56539966..8255bd79 100755 --- a/lang/lang_en_es.txt +++ b/lang/lang_en_es.txt @@ -1188,7 +1188,7 @@ # "The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)." -"\x00" +"La impresora comenzara a imprimir una linea en zig-zag. Gira el dial hasta que la linea alcance la altura optima. Mira las fotos del manual (Capitulo de calibracion)." # "Y-correct:" diff --git a/lang/lang_en_fr.txt b/lang/lang_en_fr.txt index b0b62e9d..f6add948 100755 --- a/lang/lang_en_fr.txt +++ b/lang/lang_en_fr.txt @@ -1185,7 +1185,7 @@ # "The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)." -"\x00" +"L'imprimante commencera a imprimer une ligne en zig-zag. Tournez le bouton jusqu'a atteindre la hauteur optimale. Consultez les photos dans le manuel (chapitre Calibration)." # "Y-correct:" diff --git a/lang/lang_en_it.txt b/lang/lang_en_it.txt index 44285a43..672859a0 100755 --- a/lang/lang_en_it.txt +++ b/lang/lang_en_it.txt @@ -1187,7 +1187,7 @@ # "The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)." -"\x00" +"La stampante iniziera a stampare una linea a zig-zag. Gira la manopola fino a che non hai raggiungo l'altezza ottimale. Verifica con le immagini nel manuale (capitolo sulla calibrazione):" # "Y-correct:" diff --git a/lang/lang_en_pl.txt b/lang/lang_en_pl.txt index 25c4d14f..aa07cd75 100755 --- a/lang/lang_en_pl.txt +++ b/lang/lang_en_pl.txt @@ -1187,7 +1187,7 @@ # "The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)." -"\x00" +"Drukarka zacznie drukowanie linii w ksztalcie zygzaka. Ustaw optymalna wysokosc obracajac pokretlo. Porownaj z ilustracjami w Podreczniku (rozdzial Kalibracja)." # "Y-correct:" From 348bbbffb01fcdfe37602dd0fd0fd852fea66a68 Mon Sep 17 00:00:00 2001 From: Yuri D'Elia Date: Sun, 15 Dec 2019 22:22:44 +0100 Subject: [PATCH 37/37] Do not allow to resume a print twice while waiting for the hotend Clear isPrintPaused just prior to restore_print_from_ram_and_continue. --- Firmware/ultralcd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index b23cc223..e517b326 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -6752,10 +6752,10 @@ void lcd_resume_print() if (fan_error_selftest()) return; //abort if error persists + isPrintPaused = false; restore_print_from_ram_and_continue(0.0); pause_time += (_millis() - start_pause_print); //accumulate time when print is paused for correct statistics calculation refresh_cmd_timeout(); - isPrintPaused = false; SERIAL_PROTOCOLLNRPGM(MSG_OCTOPRINT_RESUMED); //resume octoprint } @@ -6907,7 +6907,7 @@ static void lcd_main_menu() { MENU_ITEM_FUNCTION_P(_i("Pause print"), lcd_pause_print);////MSG_PAUSE_PRINT } - else + else if(isPrintPaused) { #ifdef FANCHECK if((fan_check_error == EFCE_FIXED) || (fan_check_error == EFCE_OK))