gcode: Add support for CLEAR_SHUTDOWN command

Add ability to clear the MCU shutdown flag from the console.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor
2016-12-01 00:08:35 -05:00
parent fbd7cc243b
commit d2ecc9d80c
4 changed files with 17 additions and 15 deletions

View File

@@ -47,7 +47,7 @@ class GCodeParser:
def build_handlers(self):
handlers = ['G1', 'G4', 'G20', 'G21', 'G28', 'G90', 'G91', 'G92',
'M18', 'M82', 'M83', 'M105', 'M110', 'M114', 'M206',
'HELP', 'QUERY_ENDSTOPS', 'RESTART']
'HELP', 'QUERY_ENDSTOPS', 'RESTART', 'CLEAR_SHUTDOWN']
if self.heater_nozzle is not None:
handlers.extend(['M104', 'M109', 'PID_TUNE'])
if self.heater_bed is not None:
@@ -367,6 +367,14 @@ class GCodeParser:
temp = float(params.get('S', '60'))
heater.start_auto_tune(temp)
self.bg_temp(heater)
cmd_CLEAR_SHUTDOWN_when_not_ready = True
cmd_CLEAR_SHUTDOWN_help = "Clear firmware shutdown and restart"
def cmd_CLEAR_SHUTDOWN(self, params):
if self.toolhead is None:
self.cmd_default(params)
return
self.printer.mcu.clear_shutdown()
self.printer.request_restart()
cmd_RESTART_when_not_ready = True
cmd_RESTART_help = "Reload config file and restart host software"
def cmd_RESTART(self, params):

View File

@@ -26,9 +26,9 @@ Error configuring printer
"""
message_shutdown = """
This is an unrecoverable error. Please correct the
underlying issue and then manually restart both the
firmware and the host software.
Once the underlying issue is corrected, the "CLEAR_SHUTDOWN"
command can be used to clear the firmware flag and restart
the host software.
Printer is shutdown
"""

View File

@@ -308,7 +308,7 @@ class MCU:
self._timeout_timer = printer.reactor.register_timer(
self.timeout_handler)
# Config building
self._emergency_stop_cmd = None
self._emergency_stop_cmd = self._clear_shutdown_cmd = None
self._num_oids = 0
self._config_cmds = []
self._config_crc = None
@@ -348,6 +348,7 @@ class MCU:
self._timeout_timer, time.time() + self.COMM_TIMEOUT)
self._mcu_freq = float(self.serial.msgparser.config['CLOCK_FREQ'])
self._emergency_stop_cmd = self.lookup_command("emergency_stop")
self._clear_shutdown_cmd = self.lookup_command("clear_shutdown")
self.register_msg(self.handle_shutdown, 'shutdown')
self.register_msg(self.handle_shutdown, 'is_shutdown')
self.register_msg(self.handle_mcu_stats, 'stats')
@@ -387,6 +388,9 @@ class MCU:
return stats
def force_shutdown(self):
self.send(self._emergency_stop_cmd.encode())
def clear_shutdown(self):
logging.info("Sending clear_shutdown command")
self.send(self._clear_shutdown_cmd.encode())
def is_fileoutput(self):
return self._is_fileoutput
# Configuration phase