From 59368ca24081e67567aac40e31ed6e7b827304e9 Mon Sep 17 00:00:00 2001 From: Teja Date: Fri, 9 Jan 2015 21:47:57 +0100 Subject: [PATCH] grbl state alarm treatment --- .../svgtogcode/templates/override_index.jinja2 | 4 ++-- src/octoprint/printer.py | 4 ++++ src/octoprint/server/api/printer.py | 2 +- src/octoprint/static/css/mrbeam.css | 3 ++- .../static/js/app/viewmodels/connection.js | 2 ++ .../static/js/app/viewmodels/control.js | 2 ++ src/octoprint/static/js/app/viewmodels/files.js | 1 + .../static/js/app/viewmodels/printerstate.js | 2 ++ src/octoprint/util/comm.py | 17 ++++++++++++++++- 9 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/octoprint/plugins/svgtogcode/templates/override_index.jinja2 b/src/octoprint/plugins/svgtogcode/templates/override_index.jinja2 index 76e095b0..44e1040f 100644 --- a/src/octoprint/plugins/svgtogcode/templates/override_index.jinja2 +++ b/src/octoprint/plugins/svgtogcode/templates/override_index.jinja2 @@ -154,7 +154,7 @@ var UI_API_KEY = "{{ uiApiKey }}";
- +
@@ -282,7 +282,7 @@ var UI_API_KEY = "{{ uiApiKey }}";
{{ _('Size') }}:
-
+
diff --git a/src/octoprint/printer.py b/src/octoprint/printer.py index 46ddd745..1a7a13fc 100644 --- a/src/octoprint/printer.py +++ b/src/octoprint/printer.py @@ -464,6 +464,7 @@ class Printer(): def _getStateFlags(self): return { "operational": self.isOperational(), + "locked": self.isLocked(), "printing": self.isPrinting(), "closedOrError": self.isClosedOrError(), "error": self.isError(), @@ -681,6 +682,9 @@ class Printer(): def isOperational(self): return self._comm is not None and self._comm.isOperational() + def isLocked(self): + return self._comm is not None and self._comm.isLocked() + def isPrinting(self): return self._comm is not None and self._comm.isPrinting() diff --git a/src/octoprint/server/api/printer.py b/src/octoprint/server/api/printer.py index 165a7b53..d52a4f64 100644 --- a/src/octoprint/server/api/printer.py +++ b/src/octoprint/server/api/printer.py @@ -19,7 +19,7 @@ import octoprint.util as util @api.route("/printer", methods=["GET"]) def printerState(): - if not printer.isOperational(): + if not (printer.isOperational() or printer.isLocked()): return make_response("Printer is not operational", 409) # process excludes diff --git a/src/octoprint/static/css/mrbeam.css b/src/octoprint/static/css/mrbeam.css index bb4274b0..7fadca5a 100644 --- a/src/octoprint/static/css/mrbeam.css +++ b/src/octoprint/static/css/mrbeam.css @@ -1568,7 +1568,7 @@ input.search-query, } -/* TODO ... don't use :hover ... tablets! */ +/* TODO ... don't use :hover ... tablets! .file_list_entry .action-buttons, .file_list_entry .uploaded, .file_list_entry .size { @@ -1580,6 +1580,7 @@ input.search-query, .file_list_entry:hover .size { display: block; } +*/ #area_preview { background-image: url(../img/crosshair.png); diff --git a/src/octoprint/static/js/app/viewmodels/connection.js b/src/octoprint/static/js/app/viewmodels/connection.js index 1b4505c2..07c7b409 100644 --- a/src/octoprint/static/js/app/viewmodels/connection.js +++ b/src/octoprint/static/js/app/viewmodels/connection.js @@ -13,6 +13,7 @@ function ConnectionViewModel(loginStateViewModel, settingsViewModel) { self.isErrorOrClosed = ko.observable(undefined); self.isOperational = ko.observable(undefined); + self.isLocked = ko.observable(undefined); self.isPrinting = ko.observable(undefined); self.isPaused = ko.observable(undefined); self.isError = ko.observable(undefined); @@ -69,6 +70,7 @@ function ConnectionViewModel(loginStateViewModel, settingsViewModel) { self.isErrorOrClosed(data.flags.closedOrError); self.isOperational(data.flags.operational); + self.isOperational(data.flags.locked); self.isPaused(data.flags.paused); self.isPrinting(data.flags.printing); self.isError(data.flags.error); diff --git a/src/octoprint/static/js/app/viewmodels/control.js b/src/octoprint/static/js/app/viewmodels/control.js index dfaaa422..200719d2 100644 --- a/src/octoprint/static/js/app/viewmodels/control.js +++ b/src/octoprint/static/js/app/viewmodels/control.js @@ -14,6 +14,7 @@ function ControlViewModel(loginStateViewModel, settingsViewModel, printerStateVi self.isErrorOrClosed = ko.observable(undefined); self.isOperational = ko.observable(undefined); + self.isLocked = ko.observable(undefined); self.isPrinting = ko.observable(undefined); self.isPaused = ko.observable(undefined); self.isError = ko.observable(undefined); @@ -60,6 +61,7 @@ function ControlViewModel(loginStateViewModel, settingsViewModel, printerStateVi self._processStateData = function(data) { self.isErrorOrClosed(data.flags.closedOrError); self.isOperational(data.flags.operational); + self.isLocked(data.flags.locked); self.isPaused(data.flags.paused); self.isPrinting(data.flags.printing); self.isError(data.flags.error); diff --git a/src/octoprint/static/js/app/viewmodels/files.js b/src/octoprint/static/js/app/viewmodels/files.js index f982dd63..dea02238 100644 --- a/src/octoprint/static/js/app/viewmodels/files.js +++ b/src/octoprint/static/js/app/viewmodels/files.js @@ -220,6 +220,7 @@ function GcodeFilesViewModel(printerStateViewModel, loginStateViewModel, slicing self.downloadLink = function(data) { if (data["refs"] && data["refs"]["download"]) { + console.log(data["refs"]) return data["refs"]["download"]; } else { return false; diff --git a/src/octoprint/static/js/app/viewmodels/printerstate.js b/src/octoprint/static/js/app/viewmodels/printerstate.js index bc8d1678..b8b6beba 100644 --- a/src/octoprint/static/js/app/viewmodels/printerstate.js +++ b/src/octoprint/static/js/app/viewmodels/printerstate.js @@ -6,6 +6,7 @@ function PrinterStateViewModel(loginStateViewModel) { self.stateString = ko.observable(undefined); self.isErrorOrClosed = ko.observable(undefined); self.isOperational = ko.observable(undefined); + self.isLocked = ko.observable(undefined); self.isPrinting = ko.observable(undefined); self.isPaused = ko.observable(undefined); self.isError = ko.observable(undefined); @@ -133,6 +134,7 @@ function PrinterStateViewModel(loginStateViewModel) { self.stateString(gettext(data.text)); self.isErrorOrClosed(data.flags.closedOrError); self.isOperational(data.flags.operational); + self.isLocked(data.flags.locked); self.isPaused(data.flags.paused); self.isPrinting(data.flags.printing); self.isError(data.flags.error); diff --git a/src/octoprint/util/comm.py b/src/octoprint/util/comm.py index 8f62ed86..6a4161cb 100644 --- a/src/octoprint/util/comm.py +++ b/src/octoprint/util/comm.py @@ -114,6 +114,7 @@ class MachineCom(object): STATE_ERROR = 9 STATE_CLOSED_WITH_ERROR = 10 STATE_TRANSFERING_FILE = 11 + STATE_LOCKED = 12 def __init__(self, port = None, baudrate = None, callbackObject = None): self._logger = logging.getLogger(__name__) @@ -263,6 +264,8 @@ class MachineCom(object): return "Error: %s" % (self.getShortErrorString()) if self._state == self.STATE_TRANSFERING_FILE: return "Transfering file to SD" + if self._state == self.STATE_LOCKED: + return "Locked" return "?%d?" % (self._state) def getShortErrorString(self): @@ -281,6 +284,9 @@ class MachineCom(object): def isOperational(self): return self._state == self.STATE_OPERATIONAL or self._state == self.STATE_PRINTING or self._state == self.STATE_PAUSED or self._state == self.STATE_TRANSFERING_FILE + + def isLocked(self): + return self._state == self.STATE_LOCKED def isPrinting(self): return self._state == self.STATE_PRINTING @@ -736,7 +742,15 @@ class MachineCom(object): grblMoving = True grblLastStatus = line - + + if("Alarm" in line): + self._changeState(self.STATE_LOCKED) + else: + if(grblMoving): + self._changeState(self.STATE_PRINTING) + else: + self._changeState(self.STATE_OPERATIONAL) + parts = line.strip("\r\n").split(":") pos = parts[1].split(",") @@ -745,6 +759,7 @@ class MachineCom(object): pos = parts[2].split(",") WPos = (float(pos[0]), float(pos[1]), float( pos[2].strip(">") )) + self._callback.mcPosUpdate(MPos, WPos)