gcode_macro: Add "rawparams" pseudo-variable

Signed-off-by: Pedro Lamas <pedrolamas@gmail.com>
This commit is contained in:
Pedro Lamas 2021-10-22 18:24:16 +01:00 committed by KevinOConnor
parent a5ec751406
commit 7ef7bf608a
5 changed files with 34 additions and 24 deletions

View File

@ -129,6 +129,20 @@ gcode:
M140 S{bed_temp} M140 S{bed_temp}
``` ```
### The "rawparams" variable
The full unparsed parameters for the running macro can be access via the `rawparams` pseudo-variable.
This is quite useful if you want to change the behavior of certain commands like the `M117`. For example:
```
[gcode_macro M117]
rename_existing: M117.1
gcode:
M117.1 { rawparams }
M118 { rawparams }
```
### The "printer" Variable ### The "printer" Variable
It is possible to inspect (and alter) the current state of the printer It is possible to inspect (and alter) the current state of the printer

View File

@ -35,19 +35,8 @@ class DisplayStatus:
curtime = self.printer.get_reactor().monotonic() curtime = self.printer.get_reactor().monotonic()
self.expire_progress = curtime + M73_TIMEOUT self.expire_progress = curtime + M73_TIMEOUT
def cmd_M117(self, gcmd): def cmd_M117(self, gcmd):
msg = gcmd.get_commandline() msg = gcmd.get_raw_command_parameters() or None
umsg = msg.upper() self.message = msg
if not umsg.startswith('M117'):
# Parse out additional info if M117 recd during a print
start = umsg.find('M117')
end = msg.rfind('*')
if end >= 0:
msg = msg[:end]
msg = msg[start:]
if len(msg) > 5:
self.message = msg[5:]
else:
self.message = None
def load_config(config): def load_config(config):
return DisplayStatus(config) return DisplayStatus(config)

View File

@ -180,6 +180,7 @@ class GCodeMacro:
kwparams = dict(self.variables) kwparams = dict(self.variables)
kwparams.update(self.template.create_template_context()) kwparams.update(self.template.create_template_context())
kwparams['params'] = gcmd.get_command_parameters() kwparams['params'] = gcmd.get_command_parameters()
kwparams['rawparams'] = gcmd.get_raw_command_parameters()
self.in_script = True self.in_script = True
try: try:
self.template.run_gcode_from_command(kwparams) self.template.run_gcode_from_command(kwparams)

View File

@ -22,17 +22,7 @@ class HostResponder:
gcode.register_command('RESPOND', self.cmd_RESPOND, True, gcode.register_command('RESPOND', self.cmd_RESPOND, True,
desc=self.cmd_RESPOND_help) desc=self.cmd_RESPOND_help)
def cmd_M118(self, gcmd): def cmd_M118(self, gcmd):
msg = gcmd.get_commandline() msg = gcmd.get_raw_command_parameters()
umsg = msg.upper()
if not umsg.startswith('M118'):
# Parse out additional info if M118 recd during a print
start = umsg.find('M118')
end = msg.rfind('*')
msg = msg[start:end]
if len(msg) > 5:
msg = msg[5:]
else:
msg = ''
gcmd.respond_raw("%s %s" % (self.default_prefix, msg)) gcmd.respond_raw("%s %s" % (self.default_prefix, msg))
cmd_RESPOND_help = ("Echo the message prepended with a prefix") cmd_RESPOND_help = ("Echo the message prepended with a prefix")
def cmd_RESPOND(self, gcmd): def cmd_RESPOND(self, gcmd):

View File

@ -26,6 +26,22 @@ class GCodeCommand:
return self._commandline return self._commandline
def get_command_parameters(self): def get_command_parameters(self):
return self._params return self._params
def get_raw_command_parameters(self):
rawparams = self._commandline
command = self._command
urawparams = rawparams.upper()
if not urawparams.startswith(command):
start = urawparams.find(command)
end = rawparams.rfind('*')
if end >= 0:
rawparams = rawparams[:end]
rawparams = rawparams[start:]
commandlen = len(command) + 1
if len(rawparams) > commandlen:
rawparams = rawparams[commandlen:]
else:
rawparams = ''
return rawparams
def ack(self, msg=None): def ack(self, msg=None):
if not self._need_ack: if not self._need_ack:
return False return False