From 963d590728d8ab0882f4b1f19c0a638bce5e8a54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Wed, 12 Aug 2015 13:39:12 +0200 Subject: [PATCH] Allow specifying additional baud rates --- CHANGELOG.md | 2 ++ docs/configuration/config_yaml.rst | 4 ++++ src/octoprint/server/api/settings.py | 2 ++ src/octoprint/settings.py | 1 + src/octoprint/static/js/app/viewmodels/settings.js | 3 +++ .../dialogs/settings/serialconnection.jinja2 | 7 +++++++ src/octoprint/util/comm.py | 11 +++++++++++ 7 files changed, 30 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a25de9e..eabc7b99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,8 @@ before disconnecting from the printer for good. This way it is ensured that the `beforePrinterDisconnected` script or any further GCODE injected into it will actually get sent. +* Additional baud rates to allow for connecting can now be specified along side + additional serial ports via the settings dialog and the configuration file. * Documentation improvements ### Bug Fixes diff --git a/docs/configuration/config_yaml.rst b/docs/configuration/config_yaml.rst index e182e6bb..dc513fa9 100644 --- a/docs/configuration/config_yaml.rst +++ b/docs/configuration/config_yaml.rst @@ -611,6 +611,10 @@ Use the following settings to configure the serial connection to the printer: additionalPorts: - /dev/myPrinterSymlink + # Use this to define additional baud rates to offer for connecting to serial ports. Must be a + # valid integer. Defaults to not set + - 123456 + .. _sec-configuration-config_yaml-server: Server diff --git a/src/octoprint/server/api/settings.py b/src/octoprint/server/api/settings.py index 2e6c07ee..194e984f 100644 --- a/src/octoprint/server/api/settings.py +++ b/src/octoprint/server/api/settings.py @@ -84,6 +84,7 @@ def getSettings(): "timeoutSdStatus": s.getFloat(["serial", "timeout", "sdStatus"]), "log": s.getBoolean(["serial", "log"]), "additionalPorts": s.get(["serial", "additionalPorts"]), + "additionalBaudrates": s.get(["serial", "additionalBaudrates"]), "longRunningCommands": s.get(["serial", "longRunningCommands"]) }, "folder": { @@ -220,6 +221,7 @@ def setSettings(): if "timeoutTemperature" in data["serial"].keys(): s.setFloat(["serial", "timeout", "temperature"], data["serial"]["timeoutTemperature"]) if "timeoutSdStatus" in data["serial"].keys(): s.setFloat(["serial", "timeout", "sdStatus"], data["serial"]["timeoutSdStatus"]) if "additionalPorts" in data["serial"] and isinstance(data["serial"]["additionalPorts"], (list, tuple)): s.set(["serial", "additionalPorts"], data["serial"]["additionalPorts"]) + if "additionalBaudrates" in data["serial"] and isinstance(data["serial"]["additionalBaudrates"], (list, tuple)): s.set(["serial", "additionalBaudrates"], data["serial"]["additionalBaudrates"]) if "longRunningCommands" in data["serial"] and isinstance(data["serial"]["longRunningCommands"], (list, tuple)): s.set(["serial", "longRunningCommands"], data["serial"]["longRunningCommands"]) oldLog = s.getBoolean(["serial", "log"]) diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index 4de437a3..86d722b9 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -83,6 +83,7 @@ default_settings = { "sdStatus": 1 }, "additionalPorts": [], + "additionalBaudrates": [], "longRunningCommands": ["G4", "G28", "G29", "G30", "G32", "M400", "M226"] }, "server": { diff --git a/src/octoprint/static/js/app/viewmodels/settings.js b/src/octoprint/static/js/app/viewmodels/settings.js index 0c5d4179..2bbe5b74 100644 --- a/src/octoprint/static/js/app/viewmodels/settings.js +++ b/src/octoprint/static/js/app/viewmodels/settings.js @@ -131,6 +131,7 @@ $(function() { self.serial_timeoutSdStatus = ko.observable(undefined); self.serial_log = ko.observable(undefined); self.serial_additionalPorts = ko.observable(undefined); + self.serial_additionalBaudrates = ko.observable(undefined); self.serial_longRunningCommands = ko.observable(undefined); self.folder_uploads = ko.observable(undefined); @@ -430,6 +431,7 @@ $(function() { self.serial_timeoutSdStatus(response.serial.timeoutSdStatus); self.serial_log(response.serial.log); self.serial_additionalPorts(response.serial.additionalPorts.join("\n")); + self.serial_additionalBaudrates(response.serial.additionalBaudrates.join(", ")); self.serial_longRunningCommands(response.serial.longRunningCommands.join(", ")); self.folder_uploads(response.folder.uploads); @@ -518,6 +520,7 @@ $(function() { "timeoutSdStatus": self.serial_timeoutSdStatus(), "log": self.serial_log(), "additionalPorts": commentableLinesToArray(self.serial_additionalPorts()), + "additionalBaudrates": _.map(splitTextToArray(self.serial_additionalBaudrates(), ",", true, function(item) { return !isNaN(parseInt(item)); }), function(item) { return parseInt(item); }), "longRunningCommands": splitTextToArray(self.serial_longRunningCommands(), ",", true) }, "folder": { diff --git a/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 b/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 index 2f4e00d0..e6b0e3e0 100644 --- a/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 +++ b/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 @@ -84,4 +84,11 @@ {{ _('Use this to define additional glob patterns matching serial ports to list for connecting against, e.g. /dev/ttyAMA*. One entry per line.')|format(glob_url="http://docs.python.org/2/library/glob.html") }} +
+ +
+ + {{ _('Use this to define additional serial port baud rates to list for connecting with, e.g. 123456. Comma separated.')|format(glob_url="http://docs.python.org/2/library/glob.html") }} +
+
diff --git a/src/octoprint/util/comm.py b/src/octoprint/util/comm.py index b844cb8a..b4745b74 100644 --- a/src/octoprint/util/comm.py +++ b/src/octoprint/util/comm.py @@ -31,6 +31,8 @@ try: except: pass +_logger = logging.getLogger(__name__) + def serialList(): baselist=[] if os.name=="nt": @@ -64,6 +66,15 @@ def serialList(): def baudrateList(): ret = [250000, 230400, 115200, 57600, 38400, 19200, 9600] + additionalBaudrates = settings().get(["serial", "additionalBaudrates"]) + for additional in additionalBaudrates: + try: + ret.append(int(additional)) + except: + _logger.warn("{} is not a valid additional baudrate, ignoring it".format(additional)) + + ret.sort(reverse=True) + prev = settings().getInt(["serial", "baudrate"]) if prev in ret: ret.remove(prev)