From 9396ed765c708960df7ebf0c19a62728955ed788 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Mon, 10 Mar 2014 11:26:29 +0100 Subject: [PATCH] Virtual printer now supports "repetier style" target temperature reporting --- src/octoprint/settings.py | 3 +- src/octoprint/util/virtual.py | 72 +++++++++++++++++++++++------------ 2 files changed, 50 insertions(+), 25 deletions(-) diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index 3c796e67..8c489061 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -146,7 +146,8 @@ default_settings = { "okWithLinenumber": False, "numExtruders": 1, "includeCurrentToolInTemps": True, - "hasBed": True + "hasBed": True, + "repetierStyleTargetTemperature": False } } } diff --git a/src/octoprint/util/virtual.py b/src/octoprint/util/virtual.py index aad9e1aa..f309bbef 100644 --- a/src/octoprint/util/virtual.py +++ b/src/octoprint/util/virtual.py @@ -91,29 +91,15 @@ class VirtualPrinter(): #print "Send: %s" % (data.rstrip()) if 'M104' in data or 'M109' in data: - if not self._parseHotendCommand(data): - return + self._parseHotendCommand(data) + return + if 'M140' in data or 'M190' in data: - if not self._parseBedCommand(data): - return + self._parseBedCommand(data) + return if 'M105' in data: - # send simulated temperature data - if settings().getInt(["devel", "virtualPrinter", "numExtruders"]) > 1: - allTemps = [] - for i in range(len(self.temp)): - allTemps.append((i, self.temp[i], self.targetTemp[i])) - allTempsString = " ".join(map(lambda x: "T%d:%.2f /%.2f" % x, allTemps)) - - if settings().getBoolean(["devel", "virtualPrinter", "hasBed"]): - allTempsString = "B:%.2f /%.2f %s" % (self.bedTemp, self.bedTargetTemp, allTempsString) - - if settings().getBoolean(["devel", "virtualPrinter", "includeCurrentToolInTemps"]): - self.readList.append("ok T:%.2f /%.2f %s @:64\n" % (self.temp[self.currentExtruder], self.targetTemp[self.currentExtruder] + 1)) - else: - self.readList.append("ok %s @:64\n" % allTempsString) - else: - self.readList.append("ok T:%.2f /%.2f B:%.2f /%.2f @:64\n" % (self.temp[0], self.targetTemp[0], self.bedTemp, self.bedTargetTemp)) + self._processTemperatureQuery() elif 'M20' in data: if self._sdCardReady: self._listSd() @@ -204,6 +190,35 @@ class VirtualPrinter(): else: self.readList.append("Not SD printing") + def _processTemperatureQuery(self): + includeTarget = not settings().getBoolean(["devel", "virtualPrinter", "repetierStyleTargetTemperature"]) + + # send simulated temperature data + if settings().getInt(["devel", "virtualPrinter", "numExtruders"]) > 1: + allTemps = [] + for i in range(len(self.temp)): + allTemps.append((i, self.temp[i], self.targetTemp[i])) + allTempsString = " ".join(map(lambda x: "T%d:%.2f /%.2f" % x if includeTarget else "T%d:%.2f" % (x[0], x[1]), allTemps)) + + if settings().getBoolean(["devel", "virtualPrinter", "hasBed"]): + if includeTarget: + allTempsString = "B:%.2f /%.2f %s" % (self.bedTemp, self.bedTargetTemp, allTempsString) + else: + allTempsString = "B:%.2f %s" % (self.bedTemp, allTempsString) + + if settings().getBoolean(["devel", "virtualPrinter", "includeCurrentToolInTemps"]): + if includeTarget: + self.readList.append("ok T:%.2f /%.2f %s @:64\n" % (self.temp[self.currentExtruder], self.targetTemp[self.currentExtruder] + 1, allTempsString)) + else: + self.readList.append("ok T:%.2f %s @:64\n" % (self.temp[self.currentExtruder], allTempsString)) + else: + self.readList.append("ok %s @:64\n" % allTempsString) + else: + if includeTarget: + self.readList.append("ok T:%.2f /%.2f B:%.2f /%.2f @:64\n" % (self.temp[0], self.targetTemp[0], self.bedTemp, self.bedTargetTemp)) + else: + self.readList.append("ok T:%.2f B:%.2f @:64\n" % (self.temp[0], self.bedTemp)) + def _parseHotendCommand(self, line): tool = 0 toolMatch = re.search('T([0-9]+)', line) @@ -214,6 +229,7 @@ class VirtualPrinter(): pass if tool >= settings().getInt(["devel", "virtualPrinter", "numExtruders"]): + self._sendOk() return try: @@ -224,8 +240,12 @@ class VirtualPrinter(): if "M109" in line: self._heatupThread = threading.Thread(target=self._waitForHeatup, args=["tool%d" % tool]) self._heatupThread.start() - return False - return True + return + + self._sendOk() + + if settings().getBoolean(["devel", "virtualPrinter", "repetierStyleTargetTemperature"]): + self.readList.append("TargetExtr%d:%d" % (tool, self.targetTemp[tool])) def _parseBedCommand(self, line): try: @@ -236,8 +256,12 @@ class VirtualPrinter(): if "M190" in line: self._heatupThread = threading.Thread(target=self._waitForHeatup, args=["bed"]) self._heatupThread.start() - return False - return True + return + + self._sendOk() + + if settings().getBoolean(["devel", "virtualPrinter", "repetierStyleTargetTemperature"]): + self.readList.append("TargetBed:%d" % self.bedTargetTemp) def _writeSdFile(self, filename): file = os.path.join(self._virtualSd, filename).lower()