virtual_sdcard: Don't wait for M25 in an SD gcode file
If an M25 is in a gcode file that is being printed from virtual SD, it would cause a permanent hang. Detect that case and don't wait for those M25 commands. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
ade65b90af
commit
05472bb8a3
|
@ -16,7 +16,7 @@ class VirtualSD:
|
||||||
self.file_position = self.file_size = 0
|
self.file_position = self.file_size = 0
|
||||||
# Work timer
|
# Work timer
|
||||||
self.reactor = printer.get_reactor()
|
self.reactor = printer.get_reactor()
|
||||||
self.must_pause_work = False
|
self.must_pause_work = self.cmd_from_sd = False
|
||||||
self.work_timer = None
|
self.work_timer = None
|
||||||
# Register commands
|
# Register commands
|
||||||
self.gcode = printer.lookup_object('gcode')
|
self.gcode = printer.lookup_object('gcode')
|
||||||
|
@ -64,7 +64,7 @@ class VirtualSD:
|
||||||
def do_pause(self):
|
def do_pause(self):
|
||||||
if self.work_timer is not None:
|
if self.work_timer is not None:
|
||||||
self.must_pause_work = True
|
self.must_pause_work = True
|
||||||
while self.work_timer is not None:
|
while self.work_timer is not None and not self.cmd_from_sd:
|
||||||
self.reactor.pause(self.reactor.monotonic() + .001)
|
self.reactor.pause(self.reactor.monotonic() + .001)
|
||||||
# G-Code commands
|
# G-Code commands
|
||||||
def cmd_error(self, params):
|
def cmd_error(self, params):
|
||||||
|
@ -177,6 +177,7 @@ class VirtualSD:
|
||||||
self.reactor.pause(self.reactor.monotonic() + 0.100)
|
self.reactor.pause(self.reactor.monotonic() + 0.100)
|
||||||
continue
|
continue
|
||||||
# Dispatch command
|
# Dispatch command
|
||||||
|
self.cmd_from_sd = True
|
||||||
try:
|
try:
|
||||||
self.gcode.run_script(lines[-1])
|
self.gcode.run_script(lines[-1])
|
||||||
except self.gcode.error as e:
|
except self.gcode.error as e:
|
||||||
|
@ -184,9 +185,11 @@ class VirtualSD:
|
||||||
except:
|
except:
|
||||||
logging.exception("virtual_sdcard dispatch")
|
logging.exception("virtual_sdcard dispatch")
|
||||||
break
|
break
|
||||||
|
self.cmd_from_sd = False
|
||||||
self.file_position += len(lines.pop()) + 1
|
self.file_position += len(lines.pop()) + 1
|
||||||
logging.info("Exiting SD card print (position %d)", self.file_position)
|
logging.info("Exiting SD card print (position %d)", self.file_position)
|
||||||
self.work_timer = None
|
self.work_timer = None
|
||||||
|
self.cmd_from_sd = False
|
||||||
return self.reactor.NEVER
|
return self.reactor.NEVER
|
||||||
|
|
||||||
def load_config(config):
|
def load_config(config):
|
||||||
|
|
Loading…
Reference in New Issue