Merge remote-tracking branch 'refs/remotes/prusa3d/MK2' into MK2

# Conflicts:
#	Firmware/Configuration.h
#	Firmware/ConfigurationStore.cpp
#	Firmware/Configuration_adv.h
#	Firmware/Marlin_main.cpp
#	Firmware/language_all.cpp
#	Firmware/language_all.h
#	Firmware/language_de.h
#	Firmware/language_en.h
#	Firmware/stepper.cpp
This commit is contained in:
3d-gussner 2017-08-01 15:38:47 +02:00
commit 1cc5f5972b
15 changed files with 198 additions and 108 deletions

View File

@ -5,7 +5,7 @@
#include "Configuration_prusa.h" #include "Configuration_prusa.h"
// Firmware version // Firmware version
#define FW_version "3.0.12" #define FW_version "3.0.12-2"
#define FW_PRUSA3D_MAGIC "PRUSA3DFW" #define FW_PRUSA3D_MAGIC "PRUSA3DFW"
#define FW_PRUSA3D_MAGIC_LEN 10 #define FW_PRUSA3D_MAGIC_LEN 10
@ -48,9 +48,6 @@
#define EEPROM_BOWDEN_LENGTH (EEPROM_TEMP_CAL_ACTIVE - 2*4) //4 x int for bowden lengths for multimaterial #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_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. // Currently running firmware, each digit stored as uint16_t.
// The flavor differentiates a dev, alpha, beta, release candidate or a release version. // The flavor differentiates a dev, alpha, beta, release candidate or a release version.
#define EEPROM_FIRMWARE_VERSION_END (FW_PRUSA3D_MAGIC_LEN+8) #define EEPROM_FIRMWARE_VERSION_END (FW_PRUSA3D_MAGIC_LEN+8)

View File

@ -43,7 +43,13 @@ void _EEPROM_readData(int &pos, uint8_t* value, uint8_t size)
// wrong data being written to the variables. // wrong data being written to the variables.
// ALSO: always make sure the variables in the Store and retrieve sections are in the same order. // ALSO: always make sure the variables in the Store and retrieve sections are in the same order.
#ifdef SNMM
#define EEPROM_VERSION "M1"
#else
#define EEPROM_VERSION "V1" #define EEPROM_VERSION "V1"
#endif
#ifdef EEPROM_SETTINGS #ifdef EEPROM_SETTINGS
void Config_StoreSettings() void Config_StoreSettings()
@ -264,12 +270,14 @@ void Config_PrintSettings()
#ifdef EEPROM_SETTINGS #ifdef EEPROM_SETTINGS
void Config_RetrieveSettings() bool Config_RetrieveSettings()
{ {
int i=EEPROM_OFFSET; int i=EEPROM_OFFSET;
bool previous_settings_retrieved = true;
char stored_ver[4]; char stored_ver[4];
char ver[4]=EEPROM_VERSION; char ver[4]=EEPROM_VERSION;
EEPROM_READ_VAR(i,stored_ver); //read stored 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) if (strncmp(ver,stored_ver,3) == 0)
{ {
@ -352,17 +360,25 @@ void Config_RetrieveSettings()
updatePID(); updatePID();
float tmp1[] = DEFAULT_AXIS_STEPS_PER_UNIT; float tmp1[] = DEFAULT_AXIS_STEPS_PER_UNIT;
axis_steps_per_unit[3] = tmp1[3]; axis_steps_per_unit[3] = tmp1[3];
SERIAL_ECHO_START; SERIAL_ECHO_START;
SERIAL_ECHOLNPGM("Stored settings retrieved"); SERIAL_ECHOLNPGM("Stored settings retrieved");
} }
else else
{ {
Config_ResetDefault(); 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 #ifdef EEPROM_CHITCHAT
Config_PrintSettings(); Config_PrintSettings();
#endif #endif
return previous_settings_retrieved;
} }
#endif #endif

View File

@ -14,7 +14,7 @@ FORCE_INLINE void Config_PrintSettings() {}
#ifdef EEPROM_SETTINGS #ifdef EEPROM_SETTINGS
void Config_StoreSettings(); void Config_StoreSettings();
void Config_RetrieveSettings(); bool Config_RetrieveSettings();
#else #else
FORCE_INLINE void Config_StoreSettings() {} FORCE_INLINE void Config_StoreSettings() {}
FORCE_INLINE void Config_RetrieveSettings() { Config_ResetDefault(); Config_PrintSettings(); } FORCE_INLINE void Config_RetrieveSettings() { Config_ResetDefault(); Config_PrintSettings(); }

View File

@ -68,7 +68,7 @@
// When first starting the main fan, run it at full speed for the // When first starting the main fan, run it at full speed for the
// given number of milliseconds. This gets the fan spinning reliably // 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) // 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

View File

@ -349,7 +349,3 @@ void temp_compensation_apply();
void temp_compensation_start(); void temp_compensation_start();
void wait_for_heater(long codenum); void wait_for_heater(long codenum);
void serialecho_temperatures(); void serialecho_temperatures();
extern void save_print_to_eeprom();
extern void restore_print_from_eeprom();
extern void position_menu();

View File

@ -1046,7 +1046,7 @@ void setup()
SERIAL_ECHOLN((int)sizeof(block_t)*BLOCK_BUFFER_SIZE); SERIAL_ECHOLN((int)sizeof(block_t)*BLOCK_BUFFER_SIZE);
lcd_update_enable(false); lcd_update_enable(false);
// loads data from EEPROM if available else uses defaults (and resets step acceleration rate) // 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 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 tp_init(); // Initialize temperature loop
plan_init(); // Initialize planner; plan_init(); // Initialize planner;
@ -1210,6 +1210,12 @@ void setup()
lcd_show_fullscreen_message_and_wait_P(MSG_FOLLOW_CALIBRATION_FLOW); 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]); 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); lcd_update_enable(true);
// Store the currently running firmware into an eeprom, // Store the currently running firmware into an eeprom,
@ -1380,6 +1386,7 @@ void get_command()
continue; continue;
if(serial_char == '\n' || if(serial_char == '\n' ||
serial_char == '\r' || serial_char == '\r' ||
(serial_char == ':' && comment_mode == false) ||
serial_count >= (MAX_CMD_SIZE - 1) ) serial_count >= (MAX_CMD_SIZE - 1) )
{ {
if(!serial_count) { //if empty line if(!serial_count) { //if empty line
@ -1388,7 +1395,6 @@ void get_command()
} }
cmdbuffer[bufindw+serial_count+1] = 0; //terminate string cmdbuffer[bufindw+serial_count+1] = 0; //terminate string
if(!comment_mode){ 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) if ((strchr_pointer = strchr(cmdbuffer+bufindw+1, 'N')) != NULL)
{ {
@ -3490,7 +3496,6 @@ void process_commands()
starttime=millis(); starttime=millis();
break; break;
case 25: //M25 - Pause SD print case 25: //M25 - Pause SD print
save_print_to_eeprom();
card.pauseSDPrint(); card.pauseSDPrint();
break; break;
case 26: //M26 - Set SD index case 26: //M26 - Set SD index
@ -5000,10 +5005,6 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
break; break;
#endif #endif
case 500: // M500 Store settings in EEPROM case 500: // M500 Store settings in EEPROM
{ {
Config_StoreSettings(); Config_StoreSettings();
@ -6659,41 +6660,3 @@ void serialecho_temperatures() {
SERIAL_PROTOCOL_F(degBed(), 1); SERIAL_PROTOCOL_F(degBed(), 1);
SERIAL_PROTOCOLLN(""); 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());
}

View File

@ -47,7 +47,6 @@ public:
FORCE_INLINE void setIndex(long index) {sdpos = index;file.seekSet(index);}; 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 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 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(); } bool ToshibaFlashAir_isEnabled() const { return card.getFlashAirCompatible(); }
void ToshibaFlashAir_enable(bool enable) { card.setFlashAirCompatible(enable); } void ToshibaFlashAir_enable(bool enable) { card.setFlashAirCompatible(enable); }

View File

@ -856,7 +856,7 @@ const char MSG_DATE_CZ[] PROGMEM = "Datum:";
const char MSG_DATE_IT[] PROGMEM = "Data"; const char MSG_DATE_IT[] PROGMEM = "Data";
const char MSG_DATE_ES[] PROGMEM = "Fecha:"; const char MSG_DATE_ES[] PROGMEM = "Fecha:";
const char MSG_DATE_PL[] PROGMEM = "Data:"; 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 MSG_DATE_NL[] PROGMEM = "Datum:";
const char * const MSG_DATE_LANG_TABLE[LANG_NUM] PROGMEM = { const char * const MSG_DATE_LANG_TABLE[LANG_NUM] PROGMEM = {
MSG_DATE_EN, MSG_DATE_EN,
@ -868,6 +868,11 @@ const char * const MSG_DATE_LANG_TABLE[LANG_NUM] PROGMEM = {
MSG_DATE_NL 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_EN[] PROGMEM = "Disable steppers";
const char MSG_DISABLE_STEPPERS_CZ[] PROGMEM = "Vypnout motory"; const char MSG_DISABLE_STEPPERS_CZ[] PROGMEM = "Vypnout motory";
const char MSG_DISABLE_STEPPERS_IT[] PROGMEM = "Disabilit motori"; 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_IT[] PROGMEM = "Incl. misurata:";
const char MSG_MEASURED_SKEW_ES[] PROGMEM = "Inclin. medida:"; const char MSG_MEASURED_SKEW_ES[] PROGMEM = "Inclin. medida:";
const char MSG_MEASURED_SKEW_PL[] PROGMEM = "Zmier. sciecie:"; 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 MSG_MEASURED_SKEW_NL[] PROGMEM = "Symmetrie:";
const char * const MSG_MEASURED_SKEW_LANG_TABLE[LANG_NUM] PROGMEM = { const char * const MSG_MEASURED_SKEW_LANG_TABLE[LANG_NUM] PROGMEM = {
MSG_MEASURED_SKEW_EN, 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_IT[] PROGMEM = "Inc. rilevante:";
const char MSG_SEVERE_SKEW_ES[] PROGMEM = "Inclin. severa:"; const char MSG_SEVERE_SKEW_ES[] PROGMEM = "Inclin. severa:";
const char MSG_SEVERE_SKEW_PL[] PROGMEM = "Ostre sciecie:"; 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 MSG_SEVERE_SKEW_NL[] PROGMEM = "Hevige Asym.:";
const char * const MSG_SEVERE_SKEW_LANG_TABLE[LANG_NUM] PROGMEM = { const char * const MSG_SEVERE_SKEW_LANG_TABLE[LANG_NUM] PROGMEM = {
MSG_SEVERE_SKEW_EN, 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_IT[] PROGMEM = "Incl. leggera:";
const char MSG_SLIGHT_SKEW_ES[] PROGMEM = "Inclin. ligera:"; const char MSG_SLIGHT_SKEW_ES[] PROGMEM = "Inclin. ligera:";
const char MSG_SLIGHT_SKEW_PL[] PROGMEM = "Lekkie sciecie:"; 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 MSG_SLIGHT_SKEW_NL[] PROGMEM = "Geringe Asym.:";
const char * const MSG_SLIGHT_SKEW_LANG_TABLE[LANG_NUM] PROGMEM = { const char * const MSG_SLIGHT_SKEW_LANG_TABLE[LANG_NUM] PROGMEM = {
MSG_SLIGHT_SKEW_EN, 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_IT[] PROGMEM = "Usati nella stampa";
const char MSG_USED_ES[] PROGMEM = "Usado en impresion"; const char MSG_USED_ES[] PROGMEM = "Usado en impresion";
const char MSG_USED_PL[] PROGMEM = "Uzyte przy druku"; 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 MSG_USED_NL[] PROGMEM = "Gebruikt bij print";
const char * const MSG_USED_LANG_TABLE[LANG_NUM] PROGMEM = { const char * const MSG_USED_LANG_TABLE[LANG_NUM] PROGMEM = {
MSG_USED_EN, 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_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_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_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 MSG_Y_DISTANCE_FROM_MIN_NL[] PROGMEM = "Y afstand van min";
const char * const MSG_Y_DISTANCE_FROM_MIN_LANG_TABLE[LANG_NUM] PROGMEM = { const char * const MSG_Y_DISTANCE_FROM_MIN_LANG_TABLE[LANG_NUM] PROGMEM = {
MSG_Y_DISTANCE_FROM_MIN_EN, MSG_Y_DISTANCE_FROM_MIN_EN,

View File

@ -151,6 +151,8 @@ extern const char* const MSG_CURRENT_LANG_TABLE[LANG_NUM];
#define MSG_CURRENT LANG_TABLE_SELECT(MSG_CURRENT_LANG_TABLE) #define MSG_CURRENT LANG_TABLE_SELECT(MSG_CURRENT_LANG_TABLE)
extern const char* const MSG_DATE_LANG_TABLE[LANG_NUM]; extern const char* const MSG_DATE_LANG_TABLE[LANG_NUM];
#define MSG_DATE LANG_TABLE_SELECT(MSG_DATE_LANG_TABLE) #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]; extern const char* const MSG_DISABLE_STEPPERS_LANG_TABLE[LANG_NUM];
#define MSG_DISABLE_STEPPERS LANG_TABLE_SELECT(MSG_DISABLE_STEPPERS_LANG_TABLE) #define MSG_DISABLE_STEPPERS LANG_TABLE_SELECT(MSG_DISABLE_STEPPERS_LANG_TABLE)
extern const char* const MSG_DWELL_LANG_TABLE[LANG_NUM]; extern const char* const MSG_DWELL_LANG_TABLE[LANG_NUM];

View File

@ -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 "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." #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_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?" #define(length=20, lines=8) MSG_CONFIRM_CARRIAGE_AT_THE_TOP "Sind beide Z Schlitten ganz oben?"
@ -325,3 +326,34 @@
#define MSG_MEASURED_SKEW "Symmetrie:" #define MSG_MEASURED_SKEW "Symmetrie:"
#define MSG_SLIGHT_SKEW "Geringe Asym.:" #define MSG_SLIGHT_SKEW "Geringe Asym.:"
#define MSG_SEVERE_SKEW "Schwere Asym.:" #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

View File

@ -273,15 +273,9 @@
#define MSG_MESH_BED_LEVELING "Mesh Bed Leveling" #define MSG_MESH_BED_LEVELING "Mesh Bed Leveling"
#define MSG_MENU_CALIBRATION "Calibration" #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_OFF "SD card [normal]"
#define(length=19, lines=1) MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON "SD card [FlshAir]" #define(length=19, lines=1) MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON "SD card [FlshAir]"
#define(length=20, lines=1) MSG_PRINTER_DISCONNECTED "Printer disconnected" #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_FINISHING_MOVEMENTS "Finishing movements"
#define(length=20, lines=1) MSG_PRINT_PAUSED "Print paused" #define(length=20, lines=1) MSG_PRINT_PAUSED "Print paused"
#define(length=20, lines=1) MSG_RESUMING_PRINT "Resuming print" #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_MEASURED_SKEW "Measured skew:"
#define(length=15, lines=1) MSG_SLIGHT_SKEW "Slight skew:" #define(length=15, lines=1) MSG_SLIGHT_SKEW "Slight skew:"
#define(length=15, lines=1) MSG_SEVERE_SKEW "Severe skew:" #define(length=15, lines=1) MSG_SEVERE_SKEW "Severe skew:"
#define(length=20, lines=4) MSG_DEFAULT_SETTINGS_LOADED "Default settings loaded"

View File

@ -956,8 +956,6 @@ static void lcd_support_menu()
START_MENU(); START_MENU();
MENU_ITEM(back, MSG_MAIN, lcd_main_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. // Ideally this block would be optimized out by the compiler.
const uint8_t fw_string_len = strlen_P(FW_VERSION_STR_P()); 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) switch (_message)
@ -2176,14 +2174,18 @@ void prusa_statistics(int _message) {
break; break;
case 4: // print succesfull 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_printerstatus(status_number);
prusa_stat_farm_number(); prusa_stat_farm_number();
SERIAL_ECHOLN("}"); SERIAL_ECHOLN("}");
farm_timer = 2; farm_timer = 2;
break; break;
case 5: // print not succesfull 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_printerstatus(status_number);
prusa_stat_farm_number(); prusa_stat_farm_number();
SERIAL_ECHOLN("}"); 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() void lcd_confirm_print()
{ {
uint8_t filament_type;
int enc_dif = 0; int enc_dif = 0;
int cursor_pos = 1; int cursor_pos = 1;
int _ret = 0; int _ret = 0;
@ -3714,14 +3799,14 @@ void lcd_confirm_print()
if (cursor_pos == 1) if (cursor_pos == 1)
{ {
_ret = 1; _ret = 1;
prusa_statistics(20); filament_type = lcd_choose_color();
prusa_statistics(4); prusa_statistics(4, filament_type);
} }
if (cursor_pos == 2) if (cursor_pos == 2)
{ {
_ret = 2; _ret = 2;
prusa_statistics(20); filament_type = lcd_choose_color();
prusa_statistics(5); prusa_statistics(5, filament_type);
} }
} }
@ -4902,9 +4987,7 @@ static void menu_action_sdfile(const char* filename, char* longFilename)
for (c = &cmd[4]; *c; c++) for (c = &cmd[4]; *c; c++)
*c = tolower(*c); *c = tolower(*c);
enquecommand(cmd); enquecommand(cmd);
for (int i = 0; i < 8; i++) {
eeprom_write_byte((uint8_t*)EEPROM_FILENAME+i, filename[i]);
}
enquecommand_P(PSTR("M24")); enquecommand_P(PSTR("M24"));
lcd_return_to_status(); lcd_return_to_status();
} }

View File

@ -26,8 +26,9 @@
void lcd_loading_color(); void lcd_loading_color();
void lcd_force_language_selection(); void lcd_force_language_selection();
void lcd_sdcard_stop(); void lcd_sdcard_stop();
void prusa_statistics(int _message); void prusa_statistics(int _message, uint8_t _col_nr = 0);
void lcd_confirm_print(); void lcd_confirm_print();
unsigned char lcd_choose_color();
void lcd_mylang(); void lcd_mylang();
bool lcd_detected(void); bool lcd_detected(void);

View File

@ -742,7 +742,6 @@ static void lcd_implementation_status_screen()
if (IS_SD_PRINTING) if (IS_SD_PRINTING)
{ {
lcd.print(itostr3(card.percentDone())); lcd.print(itostr3(card.percentDone()));
card.get_sdpos();
lcd.print('%'); lcd.print('%');
} }
else else
@ -1183,10 +1182,9 @@ static void lcd_implementation_drawmenu_sdfile_selected(uint8_t row, const char*
int i = 1; int i = 1;
int j = 0; int j = 0;
int inter = 0;
char* longFilenameTMP = longFilename; char* longFilenameTMP = longFilename;
while( ((c = *longFilenameTMP) != '\0') && (inter == 0) ) while((c = *longFilenameTMP) != '\0')
{ {
lcd.setCursor(i, row); lcd.setCursor(i, row);
@ -1196,20 +1194,22 @@ static void lcd_implementation_drawmenu_sdfile_selected(uint8_t row, const char*
if(i==LCD_WIDTH) { if(i==LCD_WIDTH) {
i=1; i=1;
j++; j++;
longFilenameTMP = longFilename; longFilenameTMP = longFilename + j;
longFilenameTMP = longFilenameTMP+j;
n = LCD_WIDTH - 1; 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 )){ if(LCD_CLICKED || ( enc_dif != encoderDiff )){
longFilenameTMP = longFilename;
// inter = 1; *(longFilenameTMP + LCD_WIDTH - 2) = '\0';
int i = 1;
int j = 0;
break;
}else{ }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'){ if(c!='\0'){
lcd.setCursor(i, row); lcd.setCursor(i, row);

View File

@ -416,4 +416,5 @@ THERMISTORS SETTINGS
#else #else
#define DEFAULT_RETRACTION 1 //used for PINDA temp calibration and pause print #define DEFAULT_RETRACTION 1 //used for PINDA temp calibration and pause print
#endif #endif
#endif //__CONFIGURATION_PRUSA_H #endif //__CONFIGURATION_PRUSA_H