Merge pull request #3034 from 3d-gussner/MK3_PFW-960
PFW-960 Improve M0/M1/M117
This commit is contained in:
commit
adf347fdf1
@ -3789,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
|
||||||
@ -5653,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();
|
||||||
@ -8113,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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -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()
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user