RepRapFirmware style M23 select file

RepRapFirmware enumerates the gcode files starting at /gcode, it will
also interpret any relative path as being relative to that folder.
However a full absolute path will actually interpret as from the real
root of the SD card :-(
This commit is contained in:
Mark Walker 2016-06-05 07:00:14 +00:00
parent ba4b7c09bf
commit ac685703c1
6 changed files with 15 additions and 1 deletions

View file

@ -434,6 +434,9 @@ Use the following settings to enable or disable OctoPrint features:
# Specifies whether support for SD printing and file management should be enabled # Specifies whether support for SD printing and file management should be enabled
sdSupport: true sdSupport: true
# Specifies whether firmware expects relative paths for selecting SD files
sdRelativePath: false
# Whether to always assume that an SD card is present in the printer. # Whether to always assume that an SD card is present in the printer.
# Needed by some firmwares which don't report the SD card status properly. # Needed by some firmwares which don't report the SD card status properly.
sdAlwaysAvailable: false sdAlwaysAvailable: false

View file

@ -362,7 +362,7 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback):
self._printAfterSelect = printAfterSelect self._printAfterSelect = printAfterSelect
self._posAfterSelect = pos self._posAfterSelect = pos
self._comm.selectFile("/" + path if sd else path, sd) self._comm.selectFile("/" + path if sd and not settings().getBoolean(["feature", "sdRelativePath"]) else path, sd)
self._setProgressData(completion=0) self._setProgressData(completion=0)
self._setCurrentZ(None) self._setCurrentZ(None)

View file

@ -68,6 +68,7 @@ def getSettings():
"alwaysSendChecksum": s.getBoolean(["feature", "alwaysSendChecksum"]), "alwaysSendChecksum": s.getBoolean(["feature", "alwaysSendChecksum"]),
"neverSendChecksum": s.getBoolean(["feature", "neverSendChecksum"]), "neverSendChecksum": s.getBoolean(["feature", "neverSendChecksum"]),
"sdSupport": s.getBoolean(["feature", "sdSupport"]), "sdSupport": s.getBoolean(["feature", "sdSupport"]),
"sdRelativePath": s.getBoolean(["feature", "sdRelativePath"]),
"sdAlwaysAvailable": s.getBoolean(["feature", "sdAlwaysAvailable"]), "sdAlwaysAvailable": s.getBoolean(["feature", "sdAlwaysAvailable"]),
"swallowOkAfterResend": s.getBoolean(["feature", "swallowOkAfterResend"]), "swallowOkAfterResend": s.getBoolean(["feature", "swallowOkAfterResend"]),
"repetierTargetTemp": s.getBoolean(["feature", "repetierTargetTemp"]), "repetierTargetTemp": s.getBoolean(["feature", "repetierTargetTemp"]),
@ -229,6 +230,7 @@ def _saveSettings(data):
if "alwaysSendChecksum" in data["feature"].keys(): s.setBoolean(["feature", "alwaysSendChecksum"], data["feature"]["alwaysSendChecksum"]) if "alwaysSendChecksum" in data["feature"].keys(): s.setBoolean(["feature", "alwaysSendChecksum"], data["feature"]["alwaysSendChecksum"])
if "neverSendChecksum" in data["feature"].keys(): s.setBoolean(["feature", "neverSendChecksum"], data["feature"]["neverSendChecksum"]) if "neverSendChecksum" in data["feature"].keys(): s.setBoolean(["feature", "neverSendChecksum"], data["feature"]["neverSendChecksum"])
if "sdSupport" in data["feature"].keys(): s.setBoolean(["feature", "sdSupport"], data["feature"]["sdSupport"]) if "sdSupport" in data["feature"].keys(): s.setBoolean(["feature", "sdSupport"], data["feature"]["sdSupport"])
if "sdRelativePath" in data["feature"].keys(): s.setBoolean(["feature", "sdRelativePath"], data["feature"]["sdRelativePath"])
if "sdAlwaysAvailable" in data["feature"].keys(): s.setBoolean(["feature", "sdAlwaysAvailable"], data["feature"]["sdAlwaysAvailable"]) if "sdAlwaysAvailable" in data["feature"].keys(): s.setBoolean(["feature", "sdAlwaysAvailable"], data["feature"]["sdAlwaysAvailable"])
if "swallowOkAfterResend" in data["feature"].keys(): s.setBoolean(["feature", "swallowOkAfterResend"], data["feature"]["swallowOkAfterResend"]) if "swallowOkAfterResend" in data["feature"].keys(): s.setBoolean(["feature", "swallowOkAfterResend"], data["feature"]["swallowOkAfterResend"])
if "repetierTargetTemp" in data["feature"].keys(): s.setBoolean(["feature", "repetierTargetTemp"], data["feature"]["repetierTargetTemp"]) if "repetierTargetTemp" in data["feature"].keys(): s.setBoolean(["feature", "repetierTargetTemp"], data["feature"]["repetierTargetTemp"])

View file

@ -166,6 +166,7 @@ default_settings = {
"sendChecksumWithUnknownCommands": False, "sendChecksumWithUnknownCommands": False,
"unknownCommandsNeedAck": False, "unknownCommandsNeedAck": False,
"sdSupport": True, "sdSupport": True,
"sdRelativePath": False,
"sdAlwaysAvailable": False, "sdAlwaysAvailable": False,
"swallowOkAfterResend": True, "swallowOkAfterResend": True,
"repetierTargetTemp": False, "repetierTargetTemp": False,

View file

@ -124,6 +124,7 @@ $(function() {
self.feature_waitForStart = ko.observable(undefined); self.feature_waitForStart = ko.observable(undefined);
self.feature_sendChecksum = ko.observable("print"); self.feature_sendChecksum = ko.observable("print");
self.feature_sdSupport = ko.observable(undefined); self.feature_sdSupport = ko.observable(undefined);
self.feature_sdRelativePath = ko.observable(undefined);
self.feature_sdAlwaysAvailable = ko.observable(undefined); self.feature_sdAlwaysAvailable = ko.observable(undefined);
self.feature_swallowOkAfterResend = ko.observable(undefined); self.feature_swallowOkAfterResend = ko.observable(undefined);
self.feature_repetierTargetTemp = ko.observable(undefined); self.feature_repetierTargetTemp = ko.observable(undefined);

View file

@ -27,6 +27,13 @@
</label> </label>
</div> </div>
</div> </div>
<div class="control-group">
<div class="controls">
<label class="checkbox">
<input type="checkbox" data-bind="checked: feature_sdRelativePath" id="settings-sdRelativePath"> {{ _('Select SD files by relative path') }} <span class="label">{{ _('RepRap Firmware') }}</span>
</label>
</div>
</div>
<div class="control-group"> <div class="control-group">
<div class="controls"> <div class="controls">
<label class="checkbox"> <label class="checkbox">