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 diff --git a/Firmware/ConfigurationStore.cpp b/Firmware/ConfigurationStore.cpp index 5586ee3d3..0011e71df 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 "M1" +#else + #define EEPROM_VERSION "V1" +#endif + + #ifdef EEPROM_SETTINGS void Config_StoreSettings() @@ -264,13 +270,15 @@ void Config_PrintSettings() #ifdef EEPROM_SETTINGS -void Config_RetrieveSettings() +bool Config_RetrieveSettings() { int i=EEPROM_OFFSET; + bool previous_settings_retrieved = true; char stored_ver[4]; char ver[4]=EEPROM_VERSION; EEPROM_READ_VAR(i,stored_ver); //read stored version - // 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 @@ -350,19 +358,26 @@ 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"); } else { Config_ResetDefault(); + + //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 previous_settings_retrieved; } #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..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) - 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,6 +1209,12 @@ 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); // Store the currently running firmware into an eeprom, @@ -4950,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 9c967baf6..73f8477e1 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 = "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..9a275fa30 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 "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) {