diff --git a/AUTHORS.md b/AUTHORS.md index c7f585f8..eb102816 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -61,10 +61,11 @@ date of first contribution): * [Siim Raud](https://github.com/2ndalpha) * ["geoporalis"](https://github.com/geoporalis) * [Andrew Malota](https://github.com/2bitoperations) - * [Alexander Leisentritt](https://github.com/Alex9779) - * [therealbstern](https://github.com/therealbstern) * [Ishwar Agarwal](https://github.com/agarwali) * [Kye Hoover](https://github.com/eykrevooh) + * [Joseph Carrick](https://github.com/carricktel) + * [Alexander Leisentritt](https://github.com/Alex9779) + * [therealbstern](https://github.com/therealbstern) * [Philipp Baum](https://github.com/philphilphil) * [Kyle Evans](https://github.com/kevans91) * [Javier MartÃnez Arrieta](https://github.com/Javierma) diff --git a/docs/configuration/config_yaml.rst b/docs/configuration/config_yaml.rst index 81c147cd..3465fd5d 100644 --- a/docs/configuration/config_yaml.rst +++ b/docs/configuration/config_yaml.rst @@ -855,7 +855,12 @@ Use the following settings to configure the serial connection to the printer: # Command to send in order to initiate a handshake with the printer. # Defaults to "M110 N0" which simply resets the line numbers in the firmware and which # should be acknowledged with a simple "ok". - helloCommand: M110 N0 + helloCommand: + - M110 N0 + + # Commands that should never be auto-uppercased when sent to the printer. Defaults to only M117. + autoUppercaseBlacklist: + - M117 # Whether to disconnect on errors or not disconnectOnErrors: true diff --git a/src/octoprint/server/api/settings.py b/src/octoprint/server/api/settings.py index 4223416e..64aefe22 100644 --- a/src/octoprint/server/api/settings.py +++ b/src/octoprint/server/api/settings.py @@ -154,6 +154,7 @@ def getSettings(): "ignoreErrorsFromFirmware": s.getBoolean(["serial", "ignoreErrorsFromFirmware"]), "disconnectOnErrors": s.getBoolean(["serial", "disconnectOnErrors"]), "triggerOkForM29": s.getBoolean(["serial", "triggerOkForM29"]), + "autoUppercaseBlacklist": s.get(["serial", "autoUppercaseBlacklist"]), "logPositionOnPause": s.getBoolean(["serial", "logPositionOnPause"]), "logPositionOnCancel": s.getBoolean(["serial", "logPositionOnCancel"]), "supportResendsWithoutOk": s.getBoolean(["serial", "supportResendsWithoutOk"]), @@ -377,6 +378,7 @@ def _saveSettings(data): if "ignoreErrorsFromFirmware" in data["serial"]: s.setBoolean(["serial", "ignoreErrorsFromFirmware"], data["serial"]["ignoreErrorsFromFirmware"]) if "disconnectOnErrors" in data["serial"]: s.setBoolean(["serial", "disconnectOnErrors"], data["serial"]["disconnectOnErrors"]) if "triggerOkForM29" in data["serial"]: s.setBoolean(["serial", "triggerOkForM29"], data["serial"]["triggerOkForM29"]) + if "autoUppercaseBlacklist" in data["serial"] and isinstance(data["serial"]["autoUppercaseBlacklist"], (list, tuple)): s.set(["serial", "autoUppercaseBlacklist"], data["serial"]["autoUppercaseBlacklist"]) if "supportResendsWithoutOk" in data["serial"]: s.setBoolean(["serial", "supportResendsWithoutOk"], data["serial"]["supportResendsWithoutOk"]) if "logPositionOnPause" in data["serial"]: s.setBoolean(["serial", "logPositionOnPause"], data["serial"]["logPositionOnPause"]) if "logPositionOnCancel" in data["serial"]: s.setBoolean(["serial", "logPositionOnCancel"], data["serial"]["logPositionOnCancel"]) diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index 0995599e..d5ec134c 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -111,6 +111,7 @@ default_settings = { "disconnectOnErrors": True, "ignoreErrorsFromFirmware": False, "logResends": True, + "autoUppercaseBlacklist": ["M117"], "supportResendsWithoutOk": False, "logPositionOnPause": True, "logPositionOnCancel": True, diff --git a/src/octoprint/static/js/app/viewmodels/settings.js b/src/octoprint/static/js/app/viewmodels/settings.js index c338aeda..7f558eeb 100644 --- a/src/octoprint/static/js/app/viewmodels/settings.js +++ b/src/octoprint/static/js/app/viewmodels/settings.js @@ -172,6 +172,7 @@ $(function() { self.serial_ignoreErrorsFromFirmware = ko.observable(undefined); self.serial_disconnectOnErrors = ko.observable(undefined); self.serial_triggerOkForM29 = ko.observable(undefined); + self.serial_autoUppercaseBlacklist = ko.observable(undefined); self.serial_supportResendsWithoutOk = ko.observable(undefined); self.serial_logPositionOnPause = ko.observable(undefined); self.serial_logPositionOnCancel = ko.observable(undefined); @@ -670,7 +671,8 @@ $(function() { additionalPorts : function() { return commentableLinesToArray(self.serial_additionalPorts()) }, additionalBaudrates: function() { return _.map(splitTextToArray(self.serial_additionalBaudrates(), ",", true, function(item) { return !isNaN(parseInt(item)); }), function(item) { return parseInt(item); }) }, longRunningCommands: function() { return splitTextToArray(self.serial_longRunningCommands(), ",", true) }, - checksumRequiringCommands: function() { return splitTextToArray(self.serial_checksumRequiringCommands(), ",", true) } + checksumRequiringCommands: function() { return splitTextToArray(self.serial_checksumRequiringCommands(), ",", true) }, + autoUppercaseBlacklist: function() { return splitTextToArray(self.serial_autoUppercaseBlacklist(), ",", true) }, }, scripts: { gcode: function() { @@ -781,7 +783,8 @@ $(function() { additionalPorts : function(value) { self.serial_additionalPorts(value.join("\n"))}, additionalBaudrates: function(value) { self.serial_additionalBaudrates(value.join(", "))}, longRunningCommands: function(value) { self.serial_longRunningCommands(value.join(", "))}, - checksumRequiringCommands: function(value) { self.serial_checksumRequiringCommands(value.join(", "))} + checksumRequiringCommands: function(value) { self.serial_checksumRequiringCommands(value.join(", "))}, + autoUppercaseBlacklist: function(value) { self.serial_autoUppercaseBlacklist(value.join(", "))} }, terminalFilters: function(value) { self.terminalFilters($.extend(true, [], value)) }, temperature: { diff --git a/src/octoprint/static/js/app/viewmodels/terminal.js b/src/octoprint/static/js/app/viewmodels/terminal.js index d154beb4..2ac68123 100644 --- a/src/octoprint/static/js/app/viewmodels/terminal.js +++ b/src/octoprint/static/js/app/viewmodels/terminal.js @@ -308,8 +308,12 @@ $(function() { var re = /^([gmt][0-9]+)(\s.*)?/; var commandMatch = command.match(re); + self.blacklist = splitTextToArray(self.settings.serial_autoUppercaseBlacklist(), ",", true); if (commandMatch != null) { command = commandMatch[1].toUpperCase() + ((commandMatch[2] !== undefined) ? commandMatch[2] : ""); + if (self.blacklist.indexOf(commandMatch[1].toUpperCase()) < 0){ + command = command.toUpperCase() + } } if (command) { diff --git a/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 b/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 index 5f367894..b49e4670 100644 --- a/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 +++ b/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 @@ -141,6 +141,13 @@ {{ _('Use this to specify which commands always need to be sent with a checksum. Comma separated list.') }} +