Merge remote-tracking branch 'upstream/MK3' into MK3_MK404

This commit is contained in:
3d-gussner 2021-02-18 11:39:36 +01:00
commit 4c8ba11417
3 changed files with 322 additions and 359 deletions

View File

@ -709,24 +709,7 @@ void softReset()
#endif #endif
// Factory reset function static void factory_reset_stats(){
// This function is used to erase parts or whole EEPROM memory which is used for storing calibration and and so on.
// Level input parameter sets depth of reset
int er_progress = 0;
static void factory_reset(char level)
{
lcd_clear();
switch (level) {
// Level 0: Language reset
case 0:
Sound_MakeCustom(100,0,false);
lang_reset();
break;
//Level 1: Reset statistics
case 1:
Sound_MakeCustom(100,0,false);
eeprom_update_dword((uint32_t *)EEPROM_TOTALTIME, 0); eeprom_update_dword((uint32_t *)EEPROM_TOTALTIME, 0);
eeprom_update_dword((uint32_t *)EEPROM_FILAMENTUSED, 0); eeprom_update_dword((uint32_t *)EEPROM_FILAMENTUSED, 0);
@ -744,17 +727,31 @@ static void factory_reset(char level)
eeprom_update_word((uint16_t *)EEPROM_MMU_LOAD_FAIL_TOT, 0); eeprom_update_word((uint16_t *)EEPROM_MMU_LOAD_FAIL_TOT, 0);
eeprom_update_byte((uint8_t *)EEPROM_MMU_FAIL, 0); eeprom_update_byte((uint8_t *)EEPROM_MMU_FAIL, 0);
eeprom_update_byte((uint8_t *)EEPROM_MMU_LOAD_FAIL, 0); eeprom_update_byte((uint8_t *)EEPROM_MMU_LOAD_FAIL, 0);
}
// Factory reset function
// This function is used to erase parts or whole EEPROM memory which is used for storing calibration and and so on.
// Level input parameter sets depth of reset
static void factory_reset(char level)
{
lcd_clear();
Sound_MakeCustom(100,0,false);
switch (level) {
lcd_menu_statistics(); case 0: // Level 0: Language reset
lang_reset();
break; break;
// Level 2: Prepare for shipping case 1: //Level 1: Reset statistics
case 2: factory_reset_stats();
//lcd_puts_P(PSTR("Factory RESET")); lcd_menu_statistics();
//lcd_puts_at_P(1,2,PSTR("Shipping prep")); break;
case 2: // Level 2: Prepare for shipping
factory_reset_stats();
// [[fallthrough]] // there is no break intentionally
case 4: // Level 4: Preparation after being serviced
// Force language selection at the next boot up. // Force language selection at the next boot up.
lang_reset(); lang_reset();
// Force the "Follow calibration flow" message at the next boot up. // Force the "Follow calibration flow" message at the next boot up.
@ -763,51 +760,29 @@ static void factory_reset(char level)
farm_mode = false; farm_mode = false;
eeprom_update_byte((uint8_t*)EEPROM_FARM_MODE, farm_mode); eeprom_update_byte((uint8_t*)EEPROM_FARM_MODE, farm_mode);
eeprom_update_dword((uint32_t *)EEPROM_TOTALTIME, 0);
eeprom_update_dword((uint32_t *)EEPROM_FILAMENTUSED, 0);
eeprom_update_byte((uint8_t *)EEPROM_CRASH_COUNT_X, 0);
eeprom_update_byte((uint8_t *)EEPROM_CRASH_COUNT_Y, 0);
eeprom_update_byte((uint8_t *)EEPROM_FERROR_COUNT, 0);
eeprom_update_byte((uint8_t *)EEPROM_POWER_COUNT, 0);
eeprom_update_word((uint16_t *)EEPROM_CRASH_COUNT_X_TOT, 0);
eeprom_update_word((uint16_t *)EEPROM_CRASH_COUNT_Y_TOT, 0);
eeprom_update_word((uint16_t *)EEPROM_FERROR_COUNT_TOT, 0);
eeprom_update_word((uint16_t *)EEPROM_POWER_COUNT_TOT, 0);
eeprom_update_word((uint16_t *)EEPROM_MMU_FAIL_TOT, 0);
eeprom_update_word((uint16_t *)EEPROM_MMU_LOAD_FAIL_TOT, 0);
eeprom_update_byte((uint8_t *)EEPROM_MMU_FAIL, 0);
eeprom_update_byte((uint8_t *)EEPROM_MMU_LOAD_FAIL, 0);
#ifdef FILAMENT_SENSOR #ifdef FILAMENT_SENSOR
fsensor_enable(); fsensor_enable();
fsensor_autoload_set(true); fsensor_autoload_set(true);
#endif //FILAMENT_SENSOR #endif //FILAMENT_SENSOR
Sound_MakeCustom(100,0,false);
//_delay_ms(2000);
break; break;
// Level 3: erase everything, whole EEPROM will be set to 0xFF case 3:{ // Level 3: erase everything, whole EEPROM will be set to 0xFF
case 3:
lcd_puts_P(PSTR("Factory RESET")); lcd_puts_P(PSTR("Factory RESET"));
lcd_puts_at_P(1, 2, PSTR("ERASING all data")); lcd_puts_at_P(1, 2, PSTR("ERASING all data"));
uint16_t er_progress = 0;
Sound_MakeCustom(100,0,false); lcd_set_cursor(3, 3);
er_progress = 0; lcd_space(6);
lcd_puts_at_P(3, 3, PSTR(" "));
lcd_set_cursor(3, 3); lcd_set_cursor(3, 3);
lcd_print(er_progress); lcd_print(er_progress);
// Erase EEPROM // Erase EEPROM
for (int i = 0; i < 4096; i++) { for (uint16_t i = 0; i < 4096; i++) {
eeprom_update_byte((uint8_t*)i, 0xFF); eeprom_update_byte((uint8_t*)i, 0xFF);
if (i % 41 == 0) { if (i % 41 == 0) {
er_progress++; er_progress++;
lcd_puts_at_P(3, 3, PSTR(" ")); lcd_set_cursor(3, 3);
lcd_space(6);
lcd_set_cursor(3, 3); lcd_set_cursor(3, 3);
lcd_print(er_progress); lcd_print(er_progress);
lcd_puts_P(PSTR("%")); lcd_puts_P(PSTR("%"));
@ -815,18 +790,17 @@ static void factory_reset(char level)
} }
softReset(); softReset();
}break;
break; #ifdef SNMM
case 4: case 5:
bowden_menu(); bowden_menu();
break; break;
#endif
default: default:
break; break;
} }
} }
extern "C" { extern "C" {
@ -857,10 +831,8 @@ void factory_reset()
{ {
lcd_clear(); lcd_clear();
lcd_puts_P(PSTR("Factory RESET")); lcd_puts_P(PSTR("Factory RESET"));
SET_OUTPUT(BEEPER); SET_OUTPUT(BEEPER);
if(eSoundMode!=e_SOUND_MODE_SILENT) if(eSoundMode!=e_SOUND_MODE_SILENT)
WRITE(BEEPER, HIGH); WRITE(BEEPER, HIGH);
@ -869,18 +841,17 @@ void factory_reset()
WRITE(BEEPER, LOW); WRITE(BEEPER, LOW);
_delay_ms(2000); _delay_ms(2000);
char level = reset_menu(); char level = reset_menu();
factory_reset(level); factory_reset(level);
switch (level) { switch (level) {
case 0: _delay_ms(0); break; case 0:
case 1: _delay_ms(0); break; case 1:
case 2: _delay_ms(0); break; case 2:
case 3: _delay_ms(0); break; case 3:
case 4: _delay_ms(0); break;
} }
} }
@ -3818,11 +3789,70 @@ void process_commands()
- TMC_SET_STEP - TMC_SET_STEP
- TMC_SET_CHOP - TMC_SET_CHOP
*/ */
if (code_seen_P(PSTR("M117"))) { //moved to highest priority place to be able to to print strings which includes "G", "PRUSA" and "^" if (code_seen_P(PSTR("M117"))) //moved to highest priority place to be able to to print strings which includes "G", "PRUSA" and "^"
{
starpos = (strchr(strchr_pointer + 5, '*')); starpos = (strchr(strchr_pointer + 5, '*'));
if (starpos != NULL) if (starpos != NULL)
*(starpos) = '\0'; *(starpos) = '\0';
lcd_setstatus(strchr_pointer + 5); lcd_setstatus(strchr_pointer + 5);
custom_message_type = CustomMsg::MsgUpdate;
}
/*!
### M0, M1 - Stop the printer <a href="https://reprap.org/wiki/G-code#M0:_Stop_or_Unconditional_stop">M0: Stop or Unconditional stop</a>
#### Usage
M0 [P<ms<] [S<sec>] [string]
M1 [P<ms>] [S<sec>] [string]
#### Parameters
- `P<ms>` - Expire time, in milliseconds
- `S<sec>` - Expire time, in seconds
- `string` - Must for M1 and optional for M0 message to display on the LCD
*/
else if (code_seen_P(PSTR("M0")) || code_seen_P(PSTR("M1 "))) {// M0 and M1 - (Un)conditional stop - Wait for user button press on LCD
char *src = strchr_pointer + 2;
codenum = 0;
bool hasP = false, hasS = false;
if (code_seen('P')) {
codenum = code_value(); // milliseconds to wait
hasP = codenum > 0;
}
if (code_seen('S')) {
codenum = code_value() * 1000; // seconds to wait
hasS = codenum > 0;
}
starpos = strchr(src, '*');
if (starpos != NULL) *(starpos) = '\0';
while (*src == ' ') ++src;
custom_message_type = CustomMsg::M0Wait;
if (!hasP && !hasS && *src != '\0') {
lcd_setstatus(src);
} else {
LCD_MESSAGERPGM(_i("Wait for user..."));////MSG_USERWAIT
}
lcd_ignore_click(); //call lcd_ignore_click aslo for else ???
st_synchronize();
previous_millis_cmd = _millis();
if (codenum > 0) {
codenum += _millis(); // keep track of when we started waiting
KEEPALIVE_STATE(PAUSED_FOR_USER);
while(_millis() < codenum && !lcd_clicked()) {
manage_heater();
manage_inactivity(true);
lcd_update(0);
}
KEEPALIVE_STATE(IN_HANDLER);
lcd_ignore_click(false);
} else {
marlin_wait_for_click();
}
if (IS_SD_PRINTING)
custom_message_type = CustomMsg::Status;
else
LCD_MESSAGERPGM(_T(WELCOME_MSG));
} }
#ifdef TMC2130 #ifdef TMC2130
@ -5682,60 +5712,10 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
switch(mcode_in_progress) switch(mcode_in_progress)
{ {
/*!
### M0, M1 - Stop the printer <a href="https://reprap.org/wiki/G-code#M0:_Stop_or_Unconditional_stop">M0: Stop or Unconditional stop</a>
*/
case 0: // M0 - Unconditional stop - Wait for user button press on LCD
case 1: // M1 - Conditional stop - Wait for user button press on LCD
{
char *src = strchr_pointer + 2;
codenum = 0;
bool hasP = false, hasS = false;
if (code_seen('P')) {
codenum = code_value(); // milliseconds to wait
hasP = codenum > 0;
}
if (code_seen('S')) {
codenum = code_value() * 1000; // seconds to wait
hasS = codenum > 0;
}
starpos = strchr(src, '*');
if (starpos != NULL) *(starpos) = '\0';
while (*src == ' ') ++src;
if (!hasP && !hasS && *src != '\0') {
lcd_setstatus(src);
} else {
LCD_MESSAGERPGM(_i("Wait for user..."));////MSG_USERWAIT
}
lcd_ignore_click(); //call lcd_ignore_click aslo for else ???
st_synchronize();
previous_millis_cmd = _millis();
if (codenum > 0){
codenum += _millis(); // keep track of when we started waiting
KEEPALIVE_STATE(PAUSED_FOR_USER);
while(_millis() < codenum && !lcd_clicked()){
manage_heater();
manage_inactivity(true);
lcd_update(0);
}
KEEPALIVE_STATE(IN_HANDLER);
lcd_ignore_click(false);
}else{
marlin_wait_for_click();
}
if (IS_SD_PRINTING)
LCD_MESSAGERPGM(_T(MSG_RESUMING_PRINT));
else
LCD_MESSAGERPGM(_T(WELCOME_MSG));
}
break;
/*! /*!
### M17 - Enable all axes <a href="https://reprap.org/wiki/G-code#M17:_Enable.2FPower_all_stepper_motors">M17: Enable/Power all stepper motors</a> ### M17 - Enable all axes <a href="https://reprap.org/wiki/G-code#M17:_Enable.2FPower_all_stepper_motors">M17: Enable/Power all stepper motors</a>
*/ */
case 17: case 17:
LCD_MESSAGERPGM(_i("No move."));////MSG_NO_MOVE LCD_MESSAGERPGM(_i("No move."));////MSG_NO_MOVE
enable_x(); enable_x();
@ -8142,8 +8122,7 @@ Sigma_Exit:
case 25: case 25:
case 601: case 601:
{ {
if (!isPrintPaused) if (!isPrintPaused) {
{
st_synchronize(); st_synchronize();
ClearToSend(); //send OK even before the command finishes executing because we want to make sure it is not skipped because of cmdqueue_pop_front(); ClearToSend(); //send OK even before the command finishes executing because we want to make sure it is not skipped because of cmdqueue_pop_front();
cmdqueue_pop_front(); //trick because we want skip this command (M601) after restore cmdqueue_pop_front(); //trick because we want skip this command (M601) after restore

View File

@ -752,35 +752,29 @@ void lcdui_print_time(void)
lcd_space(8 - chars); lcd_space(8 - chars);
} }
//Print status line on status screen //! @Brief Print status line on status screen
void lcdui_print_status_line(void) void lcdui_print_status_line(void)
{ {
if (IS_SD_PRINTING) if (IS_SD_PRINTING) {
{ if (strcmp(longFilenameOLD, (card.longFilename[0] ? card.longFilename : card.filename)) != 0) {
if (strcmp(longFilenameOLD, (card.longFilename[0] ? card.longFilename : card.filename)) != 0)
{
memset(longFilenameOLD, '\0', strlen(longFilenameOLD)); memset(longFilenameOLD, '\0', strlen(longFilenameOLD));
sprintf_P(longFilenameOLD, PSTR("%s"), (card.longFilename[0] ? card.longFilename : card.filename)); sprintf_P(longFilenameOLD, PSTR("%s"), (card.longFilename[0] ? card.longFilename : card.filename));
scrollstuff = 0; scrollstuff = 0;
} }
} }
if (heating_status) if (heating_status) { // If heating flag, show progress of heating
{ // If heating flag, show progress of heating
heating_status_counter++; heating_status_counter++;
if (heating_status_counter > 13) if (heating_status_counter > 13) {
{
heating_status_counter = 0; heating_status_counter = 0;
} }
lcd_set_cursor(7, 3); lcd_set_cursor(7, 3);
lcd_space(13); lcd_space(13);
for (unsigned int dots = 0; dots < heating_status_counter; dots++) for (unsigned int dots = 0; dots < heating_status_counter; dots++) {
{
lcd_putc_at(7 + dots, 3, '.'); lcd_putc_at(7 + dots, 3, '.');
} }
switch (heating_status) switch (heating_status) {
{
case 1: case 1:
lcd_puts_at_P(0, 3, _T(MSG_HEATING)); lcd_puts_at_P(0, 3, _T(MSG_HEATING));
break; break;
@ -801,62 +795,49 @@ void lcdui_print_status_line(void)
break; break;
} }
} }
else if ((IS_SD_PRINTING) && (custom_message_type == CustomMsg::Status)) else if ((IS_SD_PRINTING) && (custom_message_type == CustomMsg::Status)) { // If printing from SD, show what we are printing
{ // If printing from SD, show what we are printing if(strlen(longFilenameOLD) > LCD_WIDTH) {
if(strlen(longFilenameOLD) > LCD_WIDTH)
{
int inters = 0; int inters = 0;
int gh = scrollstuff; int gh = scrollstuff;
while (((gh - scrollstuff) < LCD_WIDTH) && (inters == 0)) while (((gh - scrollstuff) < LCD_WIDTH) && (inters == 0)) {
{ if (longFilenameOLD[gh] == '\0') {
if (longFilenameOLD[gh] == '\0')
{
lcd_set_cursor(gh - scrollstuff, 3); lcd_set_cursor(gh - scrollstuff, 3);
lcd_print(longFilenameOLD[gh - 1]); lcd_print(longFilenameOLD[gh - 1]);
scrollstuff = 0; scrollstuff = 0;
gh = scrollstuff; gh = scrollstuff;
inters = 1; inters = 1;
} } else {
else
{
lcd_set_cursor(gh - scrollstuff, 3); lcd_set_cursor(gh - scrollstuff, 3);
lcd_print(longFilenameOLD[gh - 1]); lcd_print(longFilenameOLD[gh - 1]);
gh++; gh++;
} }
} }
scrollstuff++; scrollstuff++;
} } else {
else
{
lcd_printf_P(PSTR("%-20s"), longFilenameOLD); lcd_printf_P(PSTR("%-20s"), longFilenameOLD);
} }
} } else { // Otherwise check for other special events
else switch (custom_message_type) {
{ // Otherwise check for other special events case CustomMsg::MsgUpdate: //Short message even while printing from SD
switch (custom_message_type)
{
case CustomMsg::Status: // Nothing special, print status message normally case CustomMsg::Status: // Nothing special, print status message normally
case CustomMsg::M0Wait: // M0/M1 Wait command working even from SD
lcd_print(lcd_status_message); lcd_print(lcd_status_message);
break; break;
case CustomMsg::MeshBedLeveling: // If mesh bed leveling in progress, show the status case CustomMsg::MeshBedLeveling: // If mesh bed leveling in progress, show the status
if (custom_message_state > 10) if (custom_message_state > 10) {
{
lcd_set_cursor(0, 3); lcd_set_cursor(0, 3);
lcd_space(20); lcd_space(20);
lcd_puts_at_P(0, 3, _T(MSG_CALIBRATE_Z_AUTO)); lcd_puts_at_P(0, 3, _T(MSG_CALIBRATE_Z_AUTO));
lcd_puts_P(PSTR(" : ")); lcd_puts_P(PSTR(" : "));
lcd_print(custom_message_state-10); lcd_print(custom_message_state-10);
} } else {
else
{
if (custom_message_state == 3) if (custom_message_state == 3)
{ {
lcd_puts_P(_T(WELCOME_MSG)); lcd_puts_P(_T(WELCOME_MSG));
lcd_setstatuspgm(_T(WELCOME_MSG)); lcd_setstatuspgm(_T(WELCOME_MSG));
custom_message_type = CustomMsg::Status; custom_message_type = CustomMsg::Status;
} }
if (custom_message_state > 3 && custom_message_state <= 10 ) if (custom_message_state > 3 && custom_message_state <= 10 ) {
{
lcd_set_cursor(0, 3); lcd_set_cursor(0, 3);
lcd_space(19); lcd_space(19);
lcd_puts_at_P(0, 3, _i("Calibration done"));////MSG_HOMEYZ_DONE lcd_puts_at_P(0, 3, _i("Calibration done"));////MSG_HOMEYZ_DONE
@ -869,8 +850,7 @@ void lcdui_print_status_line(void)
break; break;
case CustomMsg::PidCal: // PID tuning in progress case CustomMsg::PidCal: // PID tuning in progress
lcd_print(lcd_status_message); lcd_print(lcd_status_message);
if (pid_cycle <= pid_number_of_cycles && custom_message_state > 0) if (pid_cycle <= pid_number_of_cycles && custom_message_state > 0) {
{
lcd_set_cursor(10, 3); lcd_set_cursor(10, 3);
lcd_print(itostr3(pid_cycle)); lcd_print(itostr3(pid_cycle));
lcd_print('/'); lcd_print('/');
@ -878,7 +858,6 @@ void lcdui_print_status_line(void)
} }
break; break;
case CustomMsg::TempCal: // PINDA temp calibration in progress case CustomMsg::TempCal: // PINDA temp calibration in progress
{
char statusLine[LCD_WIDTH + 1]; char statusLine[LCD_WIDTH + 1];
sprintf_P(statusLine, PSTR("%-20S"), _T(MSG_TEMP_CALIBRATION)); sprintf_P(statusLine, PSTR("%-20S"), _T(MSG_TEMP_CALIBRATION));
char progress[4]; char progress[4];
@ -886,17 +865,18 @@ void lcdui_print_status_line(void)
memcpy(statusLine + 12, progress, sizeof(progress) - 1); memcpy(statusLine + 12, progress, sizeof(progress) - 1);
lcd_set_cursor(0, 3); lcd_set_cursor(0, 3);
lcd_print(statusLine); lcd_print(statusLine);
}
break; break;
case CustomMsg::TempCompPreheat: // temp compensation preheat case CustomMsg::TempCompPreheat: // temp compensation preheat
lcd_puts_at_P(0, 3, _i("PINDA Heating"));////MSG_PINDA_PREHEAT c=20 r=1 lcd_puts_at_P(0, 3, _i("PINDA Heating"));////MSG_PINDA_PREHEAT c=20 r=1
if (custom_message_state <= PINDA_HEAT_T) if (custom_message_state <= PINDA_HEAT_T) {
{
lcd_puts_P(PSTR(": ")); lcd_puts_P(PSTR(": "));
lcd_print(custom_message_state); //seconds lcd_print(custom_message_state); //seconds
lcd_print(' '); lcd_print(' ');
} }
break; break;
case CustomMsg::Resuming: //Resuming
lcd_puts_at_P(0, 3, _T(MSG_RESUMING_PRINT));
break;
} }
} }
@ -6136,15 +6116,15 @@ uint8_t choose_menu_P(const char *header, const char *item, const char *last_ite
char reset_menu() { char reset_menu() {
const uint8_t items_no = const uint8_t items_no =
#ifdef SNMM #ifdef SNMM
5; 6;
#else #else
4; 5;
#endif #endif
static int8_t first = 0; static int8_t first = 0;
int8_t enc_dif = 0; int8_t enc_dif = 0;
char cursor_pos = 0; char cursor_pos = 0;
const char *const item[items_no] PROGMEM = {PSTR("Language"), PSTR("Statistics"), PSTR("Shipping prep"), PSTR("All Data") const char *const item[items_no] PROGMEM = {PSTR("Language"), PSTR("Statistics"), PSTR("Shipping prep"), PSTR("All Data"), PSTR("Service prep")
#ifdef SNMM #ifdef SNMM
, PSTR("Bowden length") , PSTR("Bowden length")
#endif #endif
@ -6535,12 +6515,13 @@ void lcd_resume_print()
lcd_setstatuspgm(_T(MSG_FINISHING_MOVEMENTS)); lcd_setstatuspgm(_T(MSG_FINISHING_MOVEMENTS));
st_synchronize(); st_synchronize();
lcd_setstatuspgm(_T(MSG_RESUMING_PRINT)); ////MSG_RESUMING_PRINT c=20 custom_message_type = CustomMsg::Resuming;
isPrintPaused = false; isPrintPaused = false;
restore_print_from_ram_and_continue(default_retraction); restore_print_from_ram_and_continue(default_retraction);
pause_time += (_millis() - start_pause_print); //accumulate time when print is paused for correct statistics calculation pause_time += (_millis() - start_pause_print); //accumulate time when print is paused for correct statistics calculation
refresh_cmd_timeout(); refresh_cmd_timeout();
SERIAL_PROTOCOLLNRPGM(MSG_OCTOPRINT_RESUMED); //resume octoprint SERIAL_PROTOCOLLNRPGM(MSG_OCTOPRINT_RESUMED); //resume octoprint
custom_message_type = CustomMsg::Status;
} }
static void change_sheet() static void change_sheet()

View File

@ -120,6 +120,9 @@ enum class CustomMsg : uint_least8_t
PidCal, //!< PID tuning in progress PidCal, //!< PID tuning in progress
TempCal, //!< PINDA temperature calibration TempCal, //!< PINDA temperature calibration
TempCompPreheat, //!< Temperature compensation preheat TempCompPreheat, //!< Temperature compensation preheat
M0Wait, //!< M0/M1 Wait command working even from SD
MsgUpdate, //!< Short message even while printing from SD
Resuming, //!< Resuming message
}; };
extern CustomMsg custom_message_type; extern CustomMsg custom_message_type;