From 625b8acc8e986f4066611cc848f60842b21e0fed Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 19 Jul 2017 16:59:53 +0200 Subject: [PATCH 1/4] eeprom version for multimaterial changed, show message that hardcoded default settings were loaded during printer setup, improved scrolling in sd card menu --- Firmware/ConfigurationStore.cpp | 20 +++++++++++---- Firmware/ConfigurationStore.h | 2 +- Firmware/Marlin_main.cpp | 7 ++++-- Firmware/language_all.cpp | 5 ++++ Firmware/language_all.h | 2 ++ Firmware/language_en.h | 3 ++- .../ultralcd_implementation_hitachi_HD44780.h | 25 ++++++++++--------- 7 files changed, 43 insertions(+), 21 deletions(-) diff --git a/Firmware/ConfigurationStore.cpp b/Firmware/ConfigurationStore.cpp index 5586ee3d3..437836941 100644 --- a/Firmware/ConfigurationStore.cpp +++ b/Firmware/ConfigurationStore.cpp @@ -43,7 +43,13 @@ void _EEPROM_readData(int &pos, uint8_t* value, uint8_t size) // wrong data being written to the variables. // ALSO: always make sure the variables in the Store and retrieve sections are in the same order. -#define EEPROM_VERSION "V1" +#ifdef SNMM + #define EEPROM_VERSION "V1M" +#else + #define EEPROM_VERSION "V1" +#endif + + #ifdef EEPROM_SETTINGS void Config_StoreSettings() @@ -264,12 +270,15 @@ void Config_PrintSettings() #ifdef EEPROM_SETTINGS -void Config_RetrieveSettings() +bool Config_RetrieveSettings() { int i=EEPROM_OFFSET; + bool settings_from_eeprom; char stored_ver[4]; char ver[4]=EEPROM_VERSION; EEPROM_READ_VAR(i,stored_ver); //read stored version + SERIAL_ECHOLNPGM("Stored EEPROM version:"); + MYSERIAL.println(stored_ver); // SERIAL_ECHOLN("Version: [" << ver << "] Stored version: [" << stored_ver << "]"); if (strncmp(ver,stored_ver,3) == 0) { @@ -350,19 +359,20 @@ void Config_RetrieveSettings() calculate_volumetric_multipliers(); // Call updatePID (similar to when we have processed M301) updatePID(); - float tmp1[] = DEFAULT_AXIS_STEPS_PER_UNIT; - axis_steps_per_unit[3] = tmp1[3]; - SERIAL_ECHO_START; + SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Stored settings retrieved"); + settings_from_eeprom = true; } else { Config_ResetDefault(); + settings_from_eeprom = false; } #ifdef EEPROM_CHITCHAT Config_PrintSettings(); #endif + return settings_from_eeprom; } #endif diff --git a/Firmware/ConfigurationStore.h b/Firmware/ConfigurationStore.h index 164aed681..f3254318a 100644 --- a/Firmware/ConfigurationStore.h +++ b/Firmware/ConfigurationStore.h @@ -14,7 +14,7 @@ FORCE_INLINE void Config_PrintSettings() {} #ifdef EEPROM_SETTINGS void Config_StoreSettings(); -void Config_RetrieveSettings(); +bool Config_RetrieveSettings(); #else FORCE_INLINE void Config_StoreSettings() {} FORCE_INLINE void Config_RetrieveSettings() { Config_ResetDefault(); Config_PrintSettings(); } diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 9aaaa1920..a40a97910 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1045,7 +1045,7 @@ void setup() SERIAL_ECHOLN((int)sizeof(block_t)*BLOCK_BUFFER_SIZE); lcd_update_enable(false); // loads data from EEPROM if available else uses defaults (and resets step acceleration rate) - Config_RetrieveSettings(); + settings_from_eeprom = Config_RetrieveSettings(); SdFatUtil::set_stack_guard(); //writes magic number at the end of static variables to protect against overwriting static memory by stack tp_init(); // Initialize temperature loop plan_init(); // Initialize planner; @@ -1211,6 +1211,9 @@ void setup() for (int i = 0; i<4; i++) EEPROM_read_B(EEPROM_BOWDEN_LENGTH + i * 2, &bowden_length[i]); lcd_update_enable(true); + //If eeprom version for storing parameters to eeprom using M500 changed, default settings are used. Inform user in this case. + if(!setting_from_eeprom) lcd_show_fullscreen_message_and_wait_P(MSG_DEFAULT_SETTINGS_LOADED); + // Store the currently running firmware into an eeprom, // so the next time the firmware gets updated, it will know from which version it has been updated. update_current_firmware_version_to_eeprom(); @@ -4952,7 +4955,7 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp #endif - + case 500: // M500 Store settings in EEPROM diff --git a/Firmware/language_all.cpp b/Firmware/language_all.cpp index 9c967baf6..d72f1dc17 100644 --- a/Firmware/language_all.cpp +++ b/Firmware/language_all.cpp @@ -775,6 +775,11 @@ const char * const MSG_DATE_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_DATE_DE }; +const char MSG_DEFAULT_SETTINGS_LOADED_EN[] PROGMEM = "Hardcoded default settings loaded"; +const char * const MSG_DEFAULT_SETTINGS_LOADED_LANG_TABLE[1] PROGMEM = { + MSG_DEFAULT_SETTINGS_LOADED_EN +}; + const char MSG_DISABLE_STEPPERS_EN[] PROGMEM = "Disable steppers"; const char MSG_DISABLE_STEPPERS_CZ[] PROGMEM = "Vypnout motory"; const char MSG_DISABLE_STEPPERS_IT[] PROGMEM = "Disabilit motori"; diff --git a/Firmware/language_all.h b/Firmware/language_all.h index 00775307d..979123e35 100644 --- a/Firmware/language_all.h +++ b/Firmware/language_all.h @@ -150,6 +150,8 @@ extern const char* const MSG_CURRENT_LANG_TABLE[LANG_NUM]; #define MSG_CURRENT LANG_TABLE_SELECT(MSG_CURRENT_LANG_TABLE) extern const char* const MSG_DATE_LANG_TABLE[LANG_NUM]; #define MSG_DATE LANG_TABLE_SELECT(MSG_DATE_LANG_TABLE) +extern const char* const MSG_DEFAULT_SETTINGS_LOADED_LANG_TABLE[1]; +#define MSG_DEFAULT_SETTINGS_LOADED LANG_TABLE_SELECT_EXPLICIT(MSG_DEFAULT_SETTINGS_LOADED_LANG_TABLE, 0) extern const char* const MSG_DISABLE_STEPPERS_LANG_TABLE[LANG_NUM]; #define MSG_DISABLE_STEPPERS LANG_TABLE_SELECT(MSG_DISABLE_STEPPERS_LANG_TABLE) extern const char* const MSG_DWELL_LANG_TABLE[LANG_NUM]; diff --git a/Firmware/language_en.h b/Firmware/language_en.h index 721385648..eb986789a 100644 --- a/Firmware/language_en.h +++ b/Firmware/language_en.h @@ -310,4 +310,5 @@ #define(length=12, lines=1) MSG_RIGHT "Right:" #define(length=15, lines=1) MSG_MEASURED_SKEW "Measured skew:" #define(length=15, lines=1) MSG_SLIGHT_SKEW "Slight skew:" -#define(length=15, lines=1) MSG_SEVERE_SKEW "Severe skew:" \ No newline at end of file +#define(length=15, lines=1) MSG_SEVERE_SKEW "Severe skew:" +#define(length=20, lines=4) MSG_DEFAULT_SETTINGS_LOADED "Hardcoded default settings loaded" \ No newline at end of file diff --git a/Firmware/ultralcd_implementation_hitachi_HD44780.h b/Firmware/ultralcd_implementation_hitachi_HD44780.h index ba0df06bc..228a75d49 100644 --- a/Firmware/ultralcd_implementation_hitachi_HD44780.h +++ b/Firmware/ultralcd_implementation_hitachi_HD44780.h @@ -1182,33 +1182,34 @@ static void lcd_implementation_drawmenu_sdfile_selected(uint8_t row, const char* int i = 1; int j = 0; - int inter = 0; char* longFilenameTMP = longFilename; - - while( ((c = *longFilenameTMP) != '\0') && (inter == 0) ) + + while((c = *longFilenameTMP) != '\0') { lcd.setCursor(i, row); lcd.print(c); i++; longFilenameTMP++; - if(i==LCD_WIDTH){ + if(i==LCD_WIDTH) { i=1; j++; - longFilenameTMP = longFilename; - longFilenameTMP = longFilenameTMP+j; + longFilenameTMP = longFilename + j; n = LCD_WIDTH - 1; - for(int g = 0; ((g<300)&&(inter == 0)) ;g++){ + for(int g = 0; g<300 ;g++){ if(LCD_CLICKED || ( enc_dif != encoderDiff )){ - - // inter = 1; + longFilenameTMP = longFilename; + *(longFilenameTMP + LCD_WIDTH - 2) = '\0'; + int i = 1; + int j = 0; + break; }else{ - delay(1); + if (j == 1) delay(3); //wait around 1.2 s to start scrolling text + delay(1); //then scroll with redrawing every 300 ms } } } - } if(c!='\0'){ lcd.setCursor(i, row); @@ -1217,7 +1218,7 @@ static void lcd_implementation_drawmenu_sdfile_selected(uint8_t row, const char* } n=n-i+1; while(n--) - lcd.print(' '); + lcd.print(' '); } static void lcd_implementation_drawmenu_sdfile(uint8_t row, const char* pstr, const char* filename, char* longFilename) { From 63847b5b162257f61a5ff054ebce28a3bf9f79d1 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 19 Jul 2017 17:00:15 +0200 Subject: [PATCH 2/4] changed version --- Firmware/Configuration.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 4563c66bb..d20e4bb3d 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -5,7 +5,7 @@ #include "Configuration_prusa.h" // Firmware version -#define FW_version "3.0.12" +#define FW_version "3.0.12-1" #define FW_PRUSA3D_MAGIC "PRUSA3DFW" #define FW_PRUSA3D_MAGIC_LEN 10 From f2d34d4cd9c9b510def741f1eec22293cbab4a24 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 19 Jul 2017 17:05:36 +0200 Subject: [PATCH 3/4] changed multimaterial eeprom version --- Firmware/ConfigurationStore.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/ConfigurationStore.cpp b/Firmware/ConfigurationStore.cpp index 437836941..b4e58831a 100644 --- a/Firmware/ConfigurationStore.cpp +++ b/Firmware/ConfigurationStore.cpp @@ -44,7 +44,7 @@ void _EEPROM_readData(int &pos, uint8_t* value, uint8_t size) // ALSO: always make sure the variables in the Store and retrieve sections are in the same order. #ifdef SNMM - #define EEPROM_VERSION "V1M" + #define EEPROM_VERSION "M1" #else #define EEPROM_VERSION "V1" #endif From df342c646dff4e295d277e01693166bd1adf53b1 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 19 Jul 2017 20:59:38 +0200 Subject: [PATCH 4/4] dont show message that default settings are used if user has never run M500 --- Firmware/ConfigurationStore.cpp | 19 ++++++++++++------- Firmware/Marlin_main.cpp | 15 +++++++-------- Firmware/language_all.cpp | 2 +- Firmware/language_en.h | 2 +- 4 files changed, 21 insertions(+), 17 deletions(-) diff --git a/Firmware/ConfigurationStore.cpp b/Firmware/ConfigurationStore.cpp index b4e58831a..0011e71df 100644 --- a/Firmware/ConfigurationStore.cpp +++ b/Firmware/ConfigurationStore.cpp @@ -273,13 +273,12 @@ void Config_PrintSettings() bool Config_RetrieveSettings() { int i=EEPROM_OFFSET; - bool settings_from_eeprom; + bool previous_settings_retrieved = true; char stored_ver[4]; char ver[4]=EEPROM_VERSION; EEPROM_READ_VAR(i,stored_ver); //read stored version - SERIAL_ECHOLNPGM("Stored EEPROM version:"); - MYSERIAL.println(stored_ver); - // SERIAL_ECHOLN("Version: [" << ver << "] Stored version: [" << stored_ver << "]"); + + // SERIAL_ECHOLN("Version: [" << ver << "] Stored version: [" << stored_ver << "]"); if (strncmp(ver,stored_ver,3) == 0) { // version number match @@ -362,17 +361,23 @@ bool Config_RetrieveSettings() SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Stored settings retrieved"); - settings_from_eeprom = true; } else { Config_ResetDefault(); - settings_from_eeprom = false; + + //Return false to inform user that eeprom version was changed and firmware is using default hardcoded settings now. + //In case that storing to eeprom was not used yet, do not inform user that hardcoded settings are used. + if (eeprom_read_byte((uint8_t *)EEPROM_OFFSET) != 0xFF || + eeprom_read_byte((uint8_t *)EEPROM_OFFSET + 1) != 0xFF || + eeprom_read_byte((uint8_t *)EEPROM_OFFSET + 2) != 0xFF) { + previous_settings_retrieved = false; + } } #ifdef EEPROM_CHITCHAT Config_PrintSettings(); #endif - return settings_from_eeprom; + return previous_settings_retrieved; } #endif diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index a40a97910..0d7d5c6e2 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1045,7 +1045,7 @@ void setup() SERIAL_ECHOLN((int)sizeof(block_t)*BLOCK_BUFFER_SIZE); lcd_update_enable(false); // loads data from EEPROM if available else uses defaults (and resets step acceleration rate) - settings_from_eeprom = Config_RetrieveSettings(); + bool previous_settings_retrieved = Config_RetrieveSettings(); SdFatUtil::set_stack_guard(); //writes magic number at the end of static variables to protect against overwriting static memory by stack tp_init(); // Initialize temperature loop plan_init(); // Initialize planner; @@ -1209,11 +1209,14 @@ void setup() lcd_show_fullscreen_message_and_wait_P(MSG_FOLLOW_CALIBRATION_FLOW); } for (int i = 0; i<4; i++) EEPROM_read_B(EEPROM_BOWDEN_LENGTH + i * 2, &bowden_length[i]); + + //If eeprom version for storing parameters to eeprom using M500 changed, default settings are used. Inform user in this case + if (!previous_settings_retrieved) { + lcd_show_fullscreen_message_and_wait_P(MSG_DEFAULT_SETTINGS_LOADED); + } + lcd_update_enable(true); - //If eeprom version for storing parameters to eeprom using M500 changed, default settings are used. Inform user in this case. - if(!setting_from_eeprom) lcd_show_fullscreen_message_and_wait_P(MSG_DEFAULT_SETTINGS_LOADED); - // Store the currently running firmware into an eeprom, // so the next time the firmware gets updated, it will know from which version it has been updated. update_current_firmware_version_to_eeprom(); @@ -4953,10 +4956,6 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp } break; #endif - - - - case 500: // M500 Store settings in EEPROM { diff --git a/Firmware/language_all.cpp b/Firmware/language_all.cpp index d72f1dc17..73f8477e1 100644 --- a/Firmware/language_all.cpp +++ b/Firmware/language_all.cpp @@ -775,7 +775,7 @@ const char * const MSG_DATE_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_DATE_DE }; -const char MSG_DEFAULT_SETTINGS_LOADED_EN[] PROGMEM = "Hardcoded default settings loaded"; +const char MSG_DEFAULT_SETTINGS_LOADED_EN[] PROGMEM = "Default settings loaded"; const char * const MSG_DEFAULT_SETTINGS_LOADED_LANG_TABLE[1] PROGMEM = { MSG_DEFAULT_SETTINGS_LOADED_EN }; diff --git a/Firmware/language_en.h b/Firmware/language_en.h index eb986789a..9a275fa30 100644 --- a/Firmware/language_en.h +++ b/Firmware/language_en.h @@ -311,4 +311,4 @@ #define(length=15, lines=1) MSG_MEASURED_SKEW "Measured skew:" #define(length=15, lines=1) MSG_SLIGHT_SKEW "Slight skew:" #define(length=15, lines=1) MSG_SEVERE_SKEW "Severe skew:" -#define(length=20, lines=4) MSG_DEFAULT_SETTINGS_LOADED "Hardcoded default settings loaded" \ No newline at end of file +#define(length=20, lines=4) MSG_DEFAULT_SETTINGS_LOADED "Default settings loaded" \ No newline at end of file