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:
parent
fbd7cc243b
commit
d2ecc9d80c
10
docs/Todo.md
10
docs/Todo.md
|
@ -14,16 +14,6 @@ Host user interaction
|
|||
* Provide startup scripts so that Klippy can startup at system
|
||||
bootup.
|
||||
|
||||
* Possibly rework the startup order of Klippy communication with
|
||||
octoprint and the mcu. Currently Klippy only starts communication
|
||||
with Octoprint after it connects with the firmware. However, this
|
||||
limits the ability for Klippy to communicate connection errors to
|
||||
the user. It also makes it difficult for Klippy to reconnect to the
|
||||
firmware and/or restart the firmware if it needs to.
|
||||
|
||||
* Support clearing MCU shutdown events from the host without having
|
||||
to restart the firmware.
|
||||
|
||||
* Allow loading of a new config without having to restart the mcu.
|
||||
|
||||
* Improve gcode interface:
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
"""
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue