Implement M0/M1 for EMERGENCY_PARSER

This commit is contained in:
Scott Lahteine 2016-09-11 20:51:53 -05:00
parent 786d1afb72
commit c5fa70809b
3 changed files with 68 additions and 27 deletions

View File

@ -266,6 +266,10 @@ extern bool axis_known_position[XYZ]; // axis[n].is_known
extern bool axis_homed[XYZ]; // axis[n].is_homed extern bool axis_homed[XYZ]; // axis[n].is_homed
extern volatile bool wait_for_heatup; extern volatile bool wait_for_heatup;
#if ENABLED(EMERGENCY_PARSER) && DISABLED(ULTIPANEL)
extern volatile bool wait_for_user;
#endif
extern float current_position[NUM_AXIS]; extern float current_position[NUM_AXIS];
extern float position_shift[XYZ]; extern float position_shift[XYZ];
extern float home_offset[XYZ]; extern float home_offset[XYZ];

View File

@ -509,6 +509,9 @@ MarlinSerial customizedSerial;
switch (state) { switch (state) {
case state_M108: case state_M108:
wait_for_heatup = false; wait_for_heatup = false;
#if DISABLED(ULTIPANEL)
wait_for_user = false;
#endif
break; break;
case state_M112: case state_M112:
kill(PSTR(MSG_KILLED)); kill(PSTR(MSG_KILLED));

View File

@ -351,6 +351,10 @@ static bool relative_mode = false;
volatile bool wait_for_heatup = true; volatile bool wait_for_heatup = true;
#if ENABLED(EMERGENCY_PARSER) && DISABLED(ULTIPANEL)
wait_for_user = false;
#endif
const char errormagic[] PROGMEM = "Error:"; const char errormagic[] PROGMEM = "Error:";
const char echomagic[] PROGMEM = "echo:"; const char echomagic[] PROGMEM = "echo:";
const char axis_codes[NUM_AXIS] = {'X', 'Y', 'Z', 'E'}; const char axis_codes[NUM_AXIS] = {'X', 'Y', 'Z', 'E'};
@ -3815,7 +3819,7 @@ inline void gcode_G92() {
sync_plan_position_e(); sync_plan_position_e();
} }
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL) || ENABLED(EMERGENCY_PARSER)
/** /**
* M0: Unconditional stop - Wait for user button press on LCD * M0: Unconditional stop - Wait for user button press on LCD
@ -3835,38 +3839,68 @@ inline void gcode_G92() {
hasS = codenum > 0; hasS = codenum > 0;
} }
if (!hasP && !hasS && *args != '\0') #if ENABLED(ULTIPANEL)
lcd_setstatus(args, true);
else { if (!hasP && !hasS && *args != '\0')
LCD_MESSAGEPGM(MSG_USERWAIT); lcd_setstatus(args, true);
#if ENABLED(LCD_PROGRESS_BAR) && PROGRESS_MSG_EXPIRE > 0 else {
dontExpireStatus(); LCD_MESSAGEPGM(MSG_USERWAIT);
#endif #if ENABLED(LCD_PROGRESS_BAR) && PROGRESS_MSG_EXPIRE > 0
} dontExpireStatus();
#endif
}
lcd_ignore_click();
#else
if (!hasP && !hasS && *args != '\0') {
SERIAL_ECHO_START;
SERIAL_ECHOLN(args);
}
#endif
lcd_ignore_click();
stepper.synchronize(); stepper.synchronize();
refresh_cmd_timeout(); refresh_cmd_timeout();
if (codenum > 0) {
codenum += previous_cmd_ms; // wait until this time for a click #if ENABLED(ULTIPANEL)
if (codenum > 0) {
codenum += previous_cmd_ms; // wait until this time for a click
KEEPALIVE_STATE(PAUSED_FOR_USER);
while (PENDING(millis(), codenum) && !lcd_clicked()) idle();
lcd_ignore_click(false);
}
else if (lcd_detected()) {
KEEPALIVE_STATE(PAUSED_FOR_USER);
while (!lcd_clicked()) idle();
}
else return;
if (IS_SD_PRINTING)
LCD_MESSAGEPGM(MSG_RESUMING);
else
LCD_MESSAGEPGM(WELCOME_MSG);
#else
KEEPALIVE_STATE(PAUSED_FOR_USER); KEEPALIVE_STATE(PAUSED_FOR_USER);
while (PENDING(millis(), codenum) && !lcd_clicked()) idle(); wait_for_user = true;
KEEPALIVE_STATE(IN_HANDLER);
lcd_ignore_click(false); if (codenum > 0) {
} codenum += previous_cmd_ms; // wait until this time for an M108
else { while (PENDING(millis(), codenum) && wait_for_user) idle();
if (!lcd_detected()) return; }
KEEPALIVE_STATE(PAUSED_FOR_USER); else while (wait_for_user) idle();
while (!lcd_clicked()) idle();
KEEPALIVE_STATE(IN_HANDLER); wait_for_user = false;
}
if (IS_SD_PRINTING) #endif
LCD_MESSAGEPGM(MSG_RESUMING);
else KEEPALIVE_STATE(IN_HANDLER);
LCD_MESSAGEPGM(WELCOME_MSG);
} }
#endif // ULTIPANEL #endif // ULTIPANEL || EMERGENCY_PARSER
/** /**
* M17: Enable power on all stepper motors * M17: Enable power on all stepper motors