diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h index 3a9a24a51c..f64c7513df 100644 --- a/Marlin/src/core/language.h +++ b/Marlin/src/core/language.h @@ -324,6 +324,7 @@ #define STR_TEMPERATURE_UNITS "Temperature Units" #define STR_USER_THERMISTORS "User thermistors" #define STR_DELAYED_POWEROFF "Delayed poweroff" +#define STR_STORED_MACROS "Stored macros" // // General axis names diff --git a/Marlin/src/gcode/feature/macro/M820.cpp b/Marlin/src/gcode/feature/macro/M820.cpp new file mode 100644 index 0000000000..9759f482ec --- /dev/null +++ b/Marlin/src/gcode/feature/macro/M820.cpp @@ -0,0 +1,52 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include "../../../inc/MarlinConfig.h" + +#if ENABLED(GCODE_MACROS) + +#include "../../gcode.h" +#include "../../queue.h" +#include "../../parser.h" + +extern char gcode_macros[GCODE_MACROS_SLOTS][GCODE_MACROS_SLOT_SIZE + 1]; + +/** + * M820: List defined M810 - M819 macros + */ +void GcodeSuite::M820() { + SERIAL_ECHOLNPGM(STR_STORED_MACROS); + bool some = false; + for (uint8_t i = 0; i < GCODE_MACROS_SLOTS; ++i) { + const char *cmd = gcode_macros[i]; + if (*cmd) { + SERIAL_ECHO(F("M81"), i, C(' ')); + char c; + while ((c = *cmd++)) SERIAL_CHAR(c == '\n' ? '|' : c); + SERIAL_EOL(); + some = true; + } + } + if (!some) SERIAL_ECHOLNPGM("None"); +} + +#endif // GCODE_MACROS diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index 1a840e8b81..9fed4dcada 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -1010,6 +1010,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) { case 810: case 811: case 812: case 813: case 814: case 815: case 816: case 817: case 818: case 819: M810_819(); break; // M810-M819: Define/execute G-code macro + case 820: M820(); break; // M820: Report macros to serial output #endif #if HAS_BED_PROBE diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index 2f72564997..c6b4a40d9f 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -1194,6 +1194,7 @@ private: #if ENABLED(GCODE_MACROS) static void M810_819(); + static void M820(); #endif #if HAS_BED_PROBE