|
|
|
@ -56,6 +56,10 @@
|
|
|
|
|
#include "gcode/parser.h"
|
|
|
|
|
#include "gcode/queue.h"
|
|
|
|
|
|
|
|
|
|
#if ENABLED(HOST_ACTION_COMMANDS)
|
|
|
|
|
#include "feature/host_actions.h"
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if HAS_BUZZER && DISABLED(LCD_USE_I2C_BUZZER)
|
|
|
|
|
#include "libs/buzzer.h"
|
|
|
|
|
#endif
|
|
|
|
@ -315,37 +319,98 @@ void disable_all_steppers() {
|
|
|
|
|
disable_e_steppers();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if HAS_ACTION_COMMANDS
|
|
|
|
|
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
|
|
|
|
|
|
|
|
|
|
void event_filament_runout() {
|
|
|
|
|
|
|
|
|
|
#if ENABLED(ADVANCED_PAUSE_FEATURE)
|
|
|
|
|
if (did_pause_print) return; // Action already in progress. Purge triggered repeated runout.
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if ENABLED(EXTENSIBLE_UI)
|
|
|
|
|
ExtUI::onFilamentRunout(ExtUI::getActiveTool());
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
const char tool = '0'
|
|
|
|
|
#if NUM_RUNOUT_SENSORS > 1
|
|
|
|
|
+ active_extruder
|
|
|
|
|
#endif
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
//action:out_of_filament
|
|
|
|
|
#if ENABLED(HOST_PROMPT_SUPPORT)
|
|
|
|
|
host_prompt_reason = PROMPT_FILAMENT_RUNOUT;
|
|
|
|
|
host_action_prompt_end();
|
|
|
|
|
host_action_prompt_begin(PSTR("FilamentRunout T"), false);
|
|
|
|
|
SERIAL_CHAR(tool);
|
|
|
|
|
SERIAL_EOL();
|
|
|
|
|
host_action_prompt_show();
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if ENABLED(HOST_ACTION_COMMANDS)
|
|
|
|
|
if (!runout.host_handling
|
|
|
|
|
&& ( strstr(FILAMENT_RUNOUT_SCRIPT, "M600")
|
|
|
|
|
|| strstr(FILAMENT_RUNOUT_SCRIPT, "M125")
|
|
|
|
|
#if ENABLED(ADVANCED_PAUSE_FEATURE)
|
|
|
|
|
|| strstr(FILAMENT_RUNOUT_SCRIPT, "M25")
|
|
|
|
|
#endif
|
|
|
|
|
)
|
|
|
|
|
) {
|
|
|
|
|
host_action_paused(false);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
// Legacy Repetier command for use until newer version supports standard dialog
|
|
|
|
|
// To be removed later when pause command also triggers dialog
|
|
|
|
|
#ifdef ACTION_ON_FILAMENT_RUNOUT
|
|
|
|
|
host_action(PSTR(ACTION_ON_FILAMENT_RUNOUT " T"), false);
|
|
|
|
|
SERIAL_CHAR(tool);
|
|
|
|
|
SERIAL_EOL();
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
host_action_pause(false);
|
|
|
|
|
}
|
|
|
|
|
SERIAL_ECHOPGM(" " ACTION_REASON_ON_FILAMENT_RUNOUT " ");
|
|
|
|
|
SERIAL_CHAR(tool);
|
|
|
|
|
SERIAL_EOL();
|
|
|
|
|
|
|
|
|
|
void host_action(const char * const pstr, const bool eol=true) {
|
|
|
|
|
SERIAL_ECHOPGM("//action:");
|
|
|
|
|
serialprintPGM(pstr);
|
|
|
|
|
if (eol) SERIAL_EOL();
|
|
|
|
|
#endif // HOST_ACTION_COMMANDS
|
|
|
|
|
|
|
|
|
|
if (!runout.host_handling)
|
|
|
|
|
enqueue_and_echo_commands_P(PSTR(FILAMENT_RUNOUT_SCRIPT));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef ACTION_ON_KILL
|
|
|
|
|
void host_action_kill() { host_action(PSTR(ACTION_ON_KILL)); }
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef ACTION_ON_PAUSE
|
|
|
|
|
void host_action_pause() { host_action(PSTR(ACTION_ON_PAUSE)); }
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef ACTION_ON_PAUSED
|
|
|
|
|
void host_action_paused() { host_action(PSTR(ACTION_ON_PAUSED)); }
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef ACTION_ON_RESUME
|
|
|
|
|
void host_action_resume() { host_action(PSTR(ACTION_ON_RESUME)); }
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef ACTION_ON_RESUMED
|
|
|
|
|
void host_action_resumed() { host_action(PSTR(ACTION_ON_RESUMED)); }
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef ACTION_ON_CANCEL
|
|
|
|
|
void host_action_cancel() { host_action(PSTR(ACTION_ON_CANCEL)); }
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef ACTION_ON_FILAMENT_RUNOUT
|
|
|
|
|
void host_action_filament_runout(const bool eol/*=true*/) { host_action(PSTR(ACTION_ON_FILAMENT_RUNOUT), eol); }
|
|
|
|
|
#endif
|
|
|
|
|
#endif // FILAMENT_RUNOUT_SENSOR
|
|
|
|
|
|
|
|
|
|
#if ENABLED(G29_RETRY_AND_RECOVER)
|
|
|
|
|
|
|
|
|
|
void event_probe_failure() {
|
|
|
|
|
#ifdef G29_FAILURE_COMMANDS
|
|
|
|
|
process_subcommands_now_P(PSTR(G29_FAILURE_COMMANDS));
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef ACTION_ON_G29_FAILURE
|
|
|
|
|
host_action(PSTR(ACTION_ON_G29_FAILURE)); }
|
|
|
|
|
#endif
|
|
|
|
|
#if ENABLED(G29_HALT_ON_FAILURE)
|
|
|
|
|
#ifdef ACTION_ON_CANCEL
|
|
|
|
|
host_action_cancel();
|
|
|
|
|
#endif
|
|
|
|
|
kill(PSTR(MSG_ERR_PROBING_FAILED));
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void event_probe_recover() {
|
|
|
|
|
#if ENABLED(HOST_PROMPT_SUPPORT)
|
|
|
|
|
host_prompt_do(PROMPT_INFO, PSTR("G29 Retrying"));
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef G29_RECOVER_COMMANDS
|
|
|
|
|
process_subcommands_now_P(PSTR(G29_RECOVER_COMMANDS));
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef ACTION_ON_G29_RECOVER
|
|
|
|
|
host_action(PSTR(ACTION_ON_G29_RECOVER));
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif // HAS_ACTION_COMMANDS
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Manage several activities:
|
|
|
|
|