From 1477324fe83f4d02e86c320a56897a393a4c60d3 Mon Sep 17 00:00:00 2001 From: NeoTheFox Date: Wed, 10 Dec 2014 16:31:56 +0300 Subject: [PATCH] added DTR switch --- printrun/printcore.py | 9 +++++++-- printrun/pronsole.py | 6 +++--- printrun/pronterface.py | 2 +- printrun/settings.py | 1 + 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/printrun/printcore.py b/printrun/printcore.py index 0387a6ea4..3387d9357 100644 --- a/printrun/printcore.py +++ b/printrun/printcore.py @@ -62,10 +62,11 @@ def disable_hup(port): control_ttyhup(port, True) class printcore(): - def __init__(self, port = None, baud = None): + def __init__(self, port = None, baud = None, dtr=None): """Initializes a printcore instance. Pass the port and baud rate to connect immediately""" self.baud = None + self.dtr = None self.port = None self.analyzer = gcoder.GCode() # Serial instance connected to the printer, should be None when @@ -144,7 +145,7 @@ def disconnect(self): self.printing = False @locked - def connect(self, port = None, baud = None): + def connect(self, port = None, baud = None, dtr=None): """Set port and baudrate if given, then connect to printer """ if self.printer: @@ -153,6 +154,8 @@ def connect(self, port = None, baud = None): self.port = port if baud is not None: self.baud = baud + if dtr is not None: + self.dtr = dtr if self.port is not None and self.baud is not None: # Connect to socket if "port" is an IP, device if not host_regexp = re.compile("^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$") @@ -194,6 +197,8 @@ def connect(self, port = None, baud = None): parity = PARITY_ODD) self.printer.close() self.printer.parity = PARITY_NONE + if platform.system() != "Linux": #there is a bug in pySerial preventing this from working on Linux, sadly. + self.printer.setDTR(dtr); self.printer.open() except SerialException as e: self.logError(_("Could not connect to %s at baudrate %s:") % (self.port, self.baud) + diff --git a/printrun/pronsole.py b/printrun/pronsole.py index aa0744fe2..8aab3857a 100644 --- a/printrun/pronsole.py +++ b/printrun/pronsole.py @@ -715,9 +715,9 @@ def parse_cmdline(self, args): # Printer connection handling # -------------------------------------------------------------- - def connect_to_printer(self, port, baud): + def connect_to_printer(self, port, baud, dtr): try: - self.p.connect(port, baud) + self.p.connect(port, baud, dtr) except SerialException as e: # Currently, there is no errno, but it should be there in the future if e.errno == 2: @@ -765,7 +765,7 @@ def do_connect(self, l): if baud != self.settings.baudrate: self.settings.baudrate = baud self.save_in_rc("set baudrate", "set baudrate %d" % baud) - self.connect_to_printer(port, baud) + self.connect_to_printer(port, baud,dtr) def help_connect(self): self.log("Connect to printer") diff --git a/printrun/pronterface.py b/printrun/pronterface.py index 9327e08de..b3ca4ba55 100644 --- a/printrun/pronterface.py +++ b/printrun/pronterface.py @@ -1050,7 +1050,7 @@ def connect(self, event = None): self.paused = 0 if self.sdprinting: self.p.send_now("M26 S0") - if not self.connect_to_printer(port, baud): + if not self.connect_to_printer(port, baud, self.settings.dtr): return if port != self.settings.port: self.set("port", port) diff --git a/printrun/settings.py b/printrun/settings.py index b3b295487..45acebec4 100644 --- a/printrun/settings.py +++ b/printrun/settings.py @@ -263,6 +263,7 @@ def __init__(self, root): self._add(ComboSetting("baudrate", 115200, self.__baudrate_list(), _("Baud rate"), _("Communications Speed"))) self._add(BooleanSetting("tcp_streaming_mode", False, _("TCP streaming mode"), _("When using a TCP connection to the printer, the streaming mode will not wait for acks from the printer to send new commands. This will break things such as ETA prediction, but can result in smoother prints.")), root.update_tcp_streaming_mode) self._add(BooleanSetting("rpc_server", True, _("RPC server"), _("Enable RPC server to allow remotely querying print status")), root.update_rpc_server) + self._add(BooleanSetting("dtr", True, _("DTR"), _("Disabling DTR would prevent Arduino (RAMPS) from resetting upon connection"), "Printer")) self._add(SpinSetting("bedtemp_abs", 110, 0, 400, _("Bed temperature for ABS"), _("Heated Build Platform temp for ABS (deg C)"), "Printer")) self._add(SpinSetting("bedtemp_pla", 60, 0, 400, _("Bed temperature for PLA"), _("Heated Build Platform temp for PLA (deg C)"), "Printer")) self._add(SpinSetting("temperature_abs", 230, 0, 400, _("Extruder temperature for ABS"), _("Extruder temp for ABS (deg C)"), "Printer"))