diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 72e14daef..3a29319e2 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-2" #define FW_PRUSA3D_MAGIC "PRUSA3DFW" #define FW_PRUSA3D_MAGIC_LEN 10 @@ -47,9 +47,6 @@ #define EEPROM_TEMP_CAL_ACTIVE (EEPROM_PROBE_TEMP_SHIFT - 1) #define EEPROM_BOWDEN_LENGTH (EEPROM_TEMP_CAL_ACTIVE - 2*4) //4 x int for bowden lengths for multimaterial #define EEPROM_CALIBRATION_STATUS_PINDA (EEPROM_BOWDEN_LENGTH - 1) //0 - not calibrated; 1 - calibrated - -#define EEPROM_FILENAME (EEPROM_CALIBRATION_STATUS_PINDA - 8) //8chars to store filename without extension -#define EEPROM_FILE_POSITION (EEPROM_FILENAME - 4) //32 bit for uint32_t file position // Currently running firmware, each digit stored as uint16_t. // The flavor differentiates a dev, alpha, beta, release candidate or a release version. diff --git a/Firmware/ConfigurationStore.cpp b/Firmware/ConfigurationStore.cpp index 5586ee3d3..e0f307a3e 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 @@ -352,17 +360,25 @@ void Config_RetrieveSettings() updatePID(); float tmp1[] = DEFAULT_AXIS_STEPS_PER_UNIT; axis_steps_per_unit[3] = tmp1[3]; - 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/Configuration_adv.h b/Firmware/Configuration_adv.h index 4936de47c..c7dc9b973 100644 --- a/Firmware/Configuration_adv.h +++ b/Firmware/Configuration_adv.h @@ -68,7 +68,7 @@ // When first starting the main fan, run it at full speed for the // given number of milliseconds. This gets the fan spinning reliably // before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu) -//#define FAN_KICKSTART_TIME 100 +#define FAN_KICKSTART_TIME 1000 diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 32d2df74f..a5c7ffa2a 100644 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -348,8 +348,4 @@ float temp_comp_interpolation(float temperature); void temp_compensation_apply(); void temp_compensation_start(); void wait_for_heater(long codenum); -void serialecho_temperatures(); - -extern void save_print_to_eeprom(); -extern void restore_print_from_eeprom(); -extern void position_menu(); \ No newline at end of file +void serialecho_temperatures(); \ No newline at end of file diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index d8919b9dc..6e2ce969f 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1046,7 +1046,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; @@ -1210,6 +1210,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, @@ -1380,6 +1386,7 @@ void get_command() continue; if(serial_char == '\n' || serial_char == '\r' || + (serial_char == ':' && comment_mode == false) || serial_count >= (MAX_CMD_SIZE - 1) ) { if(!serial_count) { //if empty line @@ -1388,8 +1395,7 @@ void get_command() } cmdbuffer[bufindw+serial_count+1] = 0; //terminate string if(!comment_mode){ - comment_mode = false; //for new command - if ((strchr_pointer = strstr(cmdbuffer+bufindw+1, "PRUSA")) == NULL && (strchr_pointer = strchr(cmdbuffer+bufindw+1, 'N')) != NULL) { + if ((strchr_pointer = strstr(cmdbuffer+bufindw+1, "PRUSA")) == NULL && (strchr_pointer = strchr(cmdbuffer+bufindw+1, 'N')) != NULL) { if ((strchr_pointer = strchr(cmdbuffer+bufindw+1, 'N')) != NULL) { // Line number met. When sending a G-code over a serial line, each line may be stamped with its index, @@ -3490,7 +3496,6 @@ void process_commands() starttime=millis(); break; case 25: //M25 - Pause SD print - save_print_to_eeprom(); card.pauseSDPrint(); break; case 26: //M26 - Set SD index @@ -4378,13 +4383,13 @@ Sigma_Exit: } } } - break; - case 110: // M110 - reset line pos - if (code_seen('N')) - gcode_LastN = code_value_long(); - else - gcode_LastN = 0; break; + case 110: // M110 - reset line pos + if (code_seen('N')) + gcode_LastN = code_value_long(); + else + gcode_LastN = 0; + break; case 115: // M115 if (code_seen('V')) { // Report the Prusa version number. @@ -4999,10 +5004,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 { @@ -6659,41 +6660,3 @@ void serialecho_temperatures() { SERIAL_PROTOCOL_F(degBed(), 1); SERIAL_PROTOCOLLN(""); } - - -void save_print_to_eeprom() { - - eeprom_update_dword((uint32_t*)(EEPROM_FILE_POSITION), card.get_sdpos()); - } - - void restore_print_from_eeprom() { - char cmd[30]; - char* c; - char filename[13]; - char str[5] = ".gco"; - for (int i = 0; i < 8; i++) { - filename[i] = eeprom_read_byte((uint8_t*)EEPROM_FILENAME + i); - } - filename[8] = '\0'; - MYSERIAL.print(filename); - strcat(filename, str); - sprintf_P(cmd, PSTR("M23 %s"), filename); - for (c = &cmd[4]; *c; c++) - *c = tolower(*c); - enquecommand(cmd); - uint32_t position = eeprom_read_dword((uint32_t*)(EEPROM_FILE_POSITION)); - SERIAL_ECHOPGM("Position read from eeprom:"); - MYSERIAL.println(position); - - card.setIndex(position); - enquecommand_P(PSTR("M24")); - sprintf_P(cmd, PSTR("M26 S%d"), position); - enquecommand(cmd); - } - - void position_menu() { - SERIAL_ECHOPGM("Percent done:"); - MYSERIAL.println(card.percentDone()); - SERIAL_ECHOPGM("sdpos:"); - MYSERIAL.println(card.get_sdpos()); - } \ No newline at end of file diff --git a/Firmware/cardreader.h b/Firmware/cardreader.h index ec7f3e7c5..3e87b3315 100644 --- a/Firmware/cardreader.h +++ b/Firmware/cardreader.h @@ -47,7 +47,6 @@ public: FORCE_INLINE void setIndex(long index) {sdpos = index;file.seekSet(index);}; FORCE_INLINE uint8_t percentDone(){if(!isFileOpen()) return 0; if(filesize) return sdpos/((filesize+99)/100); else return 0;}; FORCE_INLINE char* getWorkDirName(){workDir.getFilename(filename);return filename;}; - FORCE_INLINE uint32_t get_sdpos() { if (!isFileOpen()) return 0; else return(sdpos); }; bool ToshibaFlashAir_isEnabled() const { return card.getFlashAirCompatible(); } void ToshibaFlashAir_enable(bool enable) { card.setFlashAirCompatible(enable); } diff --git a/Firmware/language_all.cpp b/Firmware/language_all.cpp index 0599299ed..d2fcd0f9e 100644 --- a/Firmware/language_all.cpp +++ b/Firmware/language_all.cpp @@ -856,7 +856,7 @@ const char MSG_DATE_CZ[] PROGMEM = "Datum:"; const char MSG_DATE_IT[] PROGMEM = "Data"; const char MSG_DATE_ES[] PROGMEM = "Fecha:"; const char MSG_DATE_PL[] PROGMEM = "Data:"; -const char MSG_DATE_DE[] PROGMEM = "Datum:"; +const char MSG_DATE_DE[] PROGMEM = "Datum"; const char MSG_DATE_NL[] PROGMEM = "Datum:"; const char * const MSG_DATE_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_DATE_EN, @@ -868,6 +868,11 @@ const char * const MSG_DATE_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_DATE_NL }; +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"; @@ -1813,7 +1818,7 @@ const char MSG_MEASURED_SKEW_CZ[] PROGMEM = "Merene zkoseni:"; const char MSG_MEASURED_SKEW_IT[] PROGMEM = "Incl. misurata:"; const char MSG_MEASURED_SKEW_ES[] PROGMEM = "Inclin. medida:"; const char MSG_MEASURED_SKEW_PL[] PROGMEM = "Zmier. sciecie:"; -const char MSG_MEASURED_SKEW_DE[] PROGMEM = "Symmetrie:"; +const char MSG_MEASURED_SKEW_DE[] PROGMEM = "Schraeglauf:"; const char MSG_MEASURED_SKEW_NL[] PROGMEM = "Symmetrie:"; const char * const MSG_MEASURED_SKEW_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_MEASURED_SKEW_EN, @@ -3229,7 +3234,7 @@ const char MSG_SEVERE_SKEW_CZ[] PROGMEM = "Tezke zkoseni:"; const char MSG_SEVERE_SKEW_IT[] PROGMEM = "Inc. rilevante:"; const char MSG_SEVERE_SKEW_ES[] PROGMEM = "Inclin. severa:"; const char MSG_SEVERE_SKEW_PL[] PROGMEM = "Ostre sciecie:"; -const char MSG_SEVERE_SKEW_DE[] PROGMEM = "Schwere Asym.:"; +const char MSG_SEVERE_SKEW_DE[] PROGMEM = "Schwerer Schr.:"; const char MSG_SEVERE_SKEW_NL[] PROGMEM = "Hevige Asym.:"; const char * const MSG_SEVERE_SKEW_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_SEVERE_SKEW_EN, @@ -3295,7 +3300,7 @@ const char MSG_SLIGHT_SKEW_CZ[] PROGMEM = "Lehke zkoseni:"; const char MSG_SLIGHT_SKEW_IT[] PROGMEM = "Incl. leggera:"; const char MSG_SLIGHT_SKEW_ES[] PROGMEM = "Inclin. ligera:"; const char MSG_SLIGHT_SKEW_PL[] PROGMEM = "Lekkie sciecie:"; -const char MSG_SLIGHT_SKEW_DE[] PROGMEM = "Geringe Asym.:"; +const char MSG_SLIGHT_SKEW_DE[] PROGMEM = "Leichter Schr.:"; const char MSG_SLIGHT_SKEW_NL[] PROGMEM = "Geringe Asym.:"; const char * const MSG_SLIGHT_SKEW_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_SLIGHT_SKEW_EN, @@ -3795,7 +3800,7 @@ const char MSG_USED_CZ[] PROGMEM = "Pouzite behem tisku"; const char MSG_USED_IT[] PROGMEM = "Usati nella stampa"; const char MSG_USED_ES[] PROGMEM = "Usado en impresion"; const char MSG_USED_PL[] PROGMEM = "Uzyte przy druku"; -const char MSG_USED_DE[] PROGMEM = "Benutzt beim Druck"; +const char MSG_USED_DE[] PROGMEM = "Beim Druck benutzte"; const char MSG_USED_NL[] PROGMEM = "Gebruikt bij print"; const char * const MSG_USED_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_USED_EN, @@ -3930,7 +3935,7 @@ const char MSG_Y_DISTANCE_FROM_MIN_CZ[] PROGMEM = "Y vzdalenost od min:"; const char MSG_Y_DISTANCE_FROM_MIN_IT[] PROGMEM = "Distanza Y da min:"; const char MSG_Y_DISTANCE_FROM_MIN_ES[] PROGMEM = "Dist. Y desde min:"; const char MSG_Y_DISTANCE_FROM_MIN_PL[] PROGMEM = "Odleglosc Y od min.:"; -const char MSG_Y_DISTANCE_FROM_MIN_DE[] PROGMEM = "Y Entfernung von min"; +const char MSG_Y_DISTANCE_FROM_MIN_DE[] PROGMEM = "Y Entfernung vom min"; const char MSG_Y_DISTANCE_FROM_MIN_NL[] PROGMEM = "Y afstand van min"; const char * const MSG_Y_DISTANCE_FROM_MIN_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_Y_DISTANCE_FROM_MIN_EN, diff --git a/Firmware/language_all.h b/Firmware/language_all.h index 2d804e668..dacc0b991 100644 --- a/Firmware/language_all.h +++ b/Firmware/language_all.h @@ -151,6 +151,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_de.h b/Firmware/language_de.h index 3083bc17d..cb6e1c7d2 100644 --- a/Firmware/language_de.h +++ b/Firmware/language_de.h @@ -210,6 +210,7 @@ #define(length=20, lines=8) MSG_MOVE_CARRIAGE_TO_THE_TOP "Kalibrieren von XYZ. Drehen Sie den Knopf, bis beide Z-Schlitten obere Anschaege erreichen. Klicken wenn beide ganz oben sind." #define(length=20, lines=8) MSG_MOVE_CARRIAGE_TO_THE_TOP_Z "Kalibrieren von Z. Drehen Sie den Knopf, bis beide Z-Schlitten obere Anschaege erreichen. Klicken wenn beide ganz oben sind." +<<<<<<< HEAD #define(length=20, lines=8) MSG_CONFIRM_NOZZLE_CLEAN "Bitte reinigen Sie die Duese zur Kalibrierung. Klicken wenn sauber." #define(length=20, lines=8) MSG_CONFIRM_CARRIAGE_AT_THE_TOP "Sind beide Z Schlitten ganz oben?" @@ -324,4 +325,35 @@ #define MSG_RIGHT "Rechts:" #define MSG_MEASURED_SKEW "Symmetrie:" #define MSG_SLIGHT_SKEW "Geringe Asym.:" -#define MSG_SEVERE_SKEW "Schwere Asym.:" \ No newline at end of file +#define MSG_SEVERE_SKEW "Schwere Asym.:" +======= +#define MSG_LOAD_ALL "Alle laden" +#define MSG_LOAD_FILAMENT_1 "Filament 1 laden" +#define MSG_LOAD_FILAMENT_2 "Filament 2 laden" +#define MSG_LOAD_FILAMENT_3 "Filament 3 laden" +#define MSG_LOAD_FILAMENT_4 "Filament 4 laden" +#define MSG_UNLOAD_FILAMENT_1 "Filam. 1 entladen" +#define MSG_UNLOAD_FILAMENT_2 "Filam. 2 entladen" +#define MSG_UNLOAD_FILAMENT_3 "Filam. 3 entladen" +#define MSG_UNLOAD_FILAMENT_4 "Filam. 4 entladen" +#define MSG_UNLOAD_ALL "Alles entladen" +#define MSG_PREPARE_FILAMENT "Filam. bereithalten" +#define MSG_ALL "Alle" +#define MSG_USED "Beim Druck benutzte" +#define MSG_CURRENT "Aktuelles" +#define MSG_CHOOSE_EXTRUDER "Waehlen Sie Extruder" +#define MSG_EXTRUDER "Extruder" +#define MSG_EXTRUDER_1 "Extruder 1" +#define MSG_EXTRUDER_2 "Extruder 2" +#define MSG_EXTRUDER_3 "Extruder 3" +#define MSG_EXTRUDER_4 "Extruder 4" +#define MSG_DATE "Datum" +#define MSG_XYZ_DETAILS "XYZ Kal. Details" +#define MSG_Y_DISTANCE_FROM_MIN "Y Entfernung vom min" +#define MSG_LEFT "Links:" +#define MSG_CENTER "Mitte:" +#define MSG_RIGHT "Rechts:" +#define MSG_MEASURED_SKEW "Schraeglauf:" +#define MSG_SLIGHT_SKEW "Leichter Schr.:" +#define MSG_SEVERE_SKEW "Schwerer Schr.:" +>>>>>>> refs/remotes/prusa3d/MK2 diff --git a/Firmware/language_en.h b/Firmware/language_en.h index dec7b729e..bb5cf1db8 100644 --- a/Firmware/language_en.h +++ b/Firmware/language_en.h @@ -273,15 +273,9 @@ #define MSG_MESH_BED_LEVELING "Mesh Bed Leveling" #define MSG_MENU_CALIBRATION "Calibration" -<<<<<<< HEAD -#define(length=20) MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF "SD card [normal]" -#define(length=20) MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON "SD card [FlshAir]" -#define(length=20) MSG_PRINTER_DISCONNECTED "Printer disconnected" -======= #define(length=19, lines=1) MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF "SD card [normal]" #define(length=19, lines=1) MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON "SD card [FlshAir]" #define(length=20, lines=1) MSG_PRINTER_DISCONNECTED "Printer disconnected" ->>>>>>> refs/remotes/prusa3d/MK2 #define(length=20, lines=1) MSG_FINISHING_MOVEMENTS "Finishing movements" #define(length=20, lines=1) MSG_PRINT_PAUSED "Print paused" #define(length=20, lines=1) MSG_RESUMING_PRINT "Resuming print" @@ -320,3 +314,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 "Default settings loaded" diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 479c146c2..ab890a336 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -956,8 +956,6 @@ static void lcd_support_menu() START_MENU(); MENU_ITEM(back, MSG_MAIN, lcd_main_menu); - MENU_ITEM(submenu, PSTR("restore"), restore_print_from_eeprom); - MENU_ITEM(submenu, PSTR("position"), position_menu); // Ideally this block would be optimized out by the compiler. const uint8_t fw_string_len = strlen_P(FW_VERSION_STR_P()); @@ -2107,7 +2105,7 @@ void lcd_diag_show_end_stops() -void prusa_statistics(int _message) { +void prusa_statistics(int _message, uint8_t _fil_nr) { switch (_message) @@ -2176,14 +2174,18 @@ void prusa_statistics(int _message) { break; case 4: // print succesfull - SERIAL_ECHOLN("{[RES:1]"); + SERIAL_ECHO("{[RES:1][FIL:"); + MYSERIAL.print(int(_fil_nr)); + SERIAL_ECHO("]"); prusa_stat_printerstatus(status_number); prusa_stat_farm_number(); SERIAL_ECHOLN("}"); farm_timer = 2; break; case 5: // print not succesfull - SERIAL_ECHOLN("{[RES:0]"); + SERIAL_ECHO("{[RES:0][FIL:"); + MYSERIAL.print(int(_fil_nr)); + SERIAL_ECHO("]"); prusa_stat_printerstatus(status_number); prusa_stat_farm_number(); SERIAL_ECHOLN("}"); @@ -3664,8 +3666,91 @@ static void lcd_farm_no() } + +unsigned char lcd_choose_color() { + //function returns index of currently chosen item + //following part can be modified from 2 to 255 items: + //----------------------------------------------------- + unsigned char items_no = 2; + const char *item[items_no]; + item[0] = "Black"; + item[1] = "Orange"; + //----------------------------------------------------- + unsigned char active_rows; + static int first = 0; + int enc_dif = 0; + unsigned char cursor_pos = 1; + enc_dif = encoderDiff; + lcd_implementation_clear(); + lcd.setCursor(0, 1); + lcd.print(">"); + + active_rows = items_no < 3 ? items_no : 3; + + while (1) { + lcd_print_at_PGM(0, 0, PSTR("Choose color:")); + for (int i = 0; i < active_rows; i++) { + lcd.setCursor(1, i+1); + lcd.print(item[first + i]); + } + + manage_heater(); + manage_inactivity(true); + + if (abs((enc_dif - encoderDiff)) > 4) { + + if ((abs(enc_dif - encoderDiff)) > 1) { + if (enc_dif > encoderDiff) { + cursor_pos--; + } + + if (enc_dif < encoderDiff) { + cursor_pos++; + } + + if (cursor_pos > active_rows) { + cursor_pos = active_rows; + if (first < items_no - active_rows) { + first++; + lcd_implementation_clear(); + } + } + + if (cursor_pos < 1) { + cursor_pos = 1; + if (first > 0) { + first--; + lcd_implementation_clear(); + } + } + lcd.setCursor(0, 1); + lcd.print(" "); + lcd.setCursor(0, 2); + lcd.print(" "); + lcd.setCursor(0, 3); + lcd.print(" "); + lcd.setCursor(0, cursor_pos); + lcd.print(">"); + enc_dif = encoderDiff; + delay(100); + } + + } + + if (lcd_clicked()) { + while (lcd_clicked()); + delay(10); + while (lcd_clicked()); + return(cursor_pos + first - 1); + } + + } + +} + void lcd_confirm_print() { + uint8_t filament_type; int enc_dif = 0; int cursor_pos = 1; int _ret = 0; @@ -3714,14 +3799,14 @@ void lcd_confirm_print() if (cursor_pos == 1) { _ret = 1; - prusa_statistics(20); - prusa_statistics(4); + filament_type = lcd_choose_color(); + prusa_statistics(4, filament_type); } if (cursor_pos == 2) { _ret = 2; - prusa_statistics(20); - prusa_statistics(5); + filament_type = lcd_choose_color(); + prusa_statistics(5, filament_type); } } @@ -4051,7 +4136,7 @@ void lcd_sdcard_stop() lcd_return_to_status(); lcd_ignore_click(true); - + lcd_commands_type = LCD_COMMAND_STOP_PRINT; // Turn off the print fan @@ -4902,9 +4987,7 @@ static void menu_action_sdfile(const char* filename, char* longFilename) for (c = &cmd[4]; *c; c++) *c = tolower(*c); enquecommand(cmd); - for (int i = 0; i < 8; i++) { - eeprom_write_byte((uint8_t*)EEPROM_FILENAME+i, filename[i]); - } + enquecommand_P(PSTR("M24")); lcd_return_to_status(); } diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index 3d2ab5fc5..44d2792c8 100644 --- a/Firmware/ultralcd.h +++ b/Firmware/ultralcd.h @@ -26,8 +26,9 @@ void lcd_loading_color(); void lcd_force_language_selection(); void lcd_sdcard_stop(); - void prusa_statistics(int _message); + void prusa_statistics(int _message, uint8_t _col_nr = 0); void lcd_confirm_print(); + unsigned char lcd_choose_color(); void lcd_mylang(); bool lcd_detected(void); diff --git a/Firmware/ultralcd_implementation_hitachi_HD44780.h b/Firmware/ultralcd_implementation_hitachi_HD44780.h index f68e2e45c..d26b0c781 100644 --- a/Firmware/ultralcd_implementation_hitachi_HD44780.h +++ b/Firmware/ultralcd_implementation_hitachi_HD44780.h @@ -742,7 +742,6 @@ static void lcd_implementation_status_screen() if (IS_SD_PRINTING) { lcd.print(itostr3(card.percentDone())); - card.get_sdpos(); lcd.print('%'); } else @@ -1183,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); @@ -1218,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) { diff --git a/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h index 474d2e9e1..55dd6b9b4 100644 --- a/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h @@ -416,4 +416,5 @@ THERMISTORS SETTINGS #else #define DEFAULT_RETRACTION 1 //used for PINDA temp calibration and pause print #endif + #endif //__CONFIGURATION_PRUSA_H