diff --git a/Marlin/src/gcode/feature/pause/G60.cpp b/Marlin/src/gcode/feature/pause/G60.cpp deleted file mode 100644 index 21dbe1bf81..0000000000 --- a/Marlin/src/gcode/feature/pause/G60.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Marlin 3D Printer Firmware - * Copyright (c) 2020 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 SAVED_POSITIONS - -#include "../../gcode.h" -#include "../../../module/motion.h" - -#define DEBUG_OUT ENABLED(SAVED_POSITIONS_DEBUG) -#include "../../../core/debug_out.h" - -bool report_stored_position(const uint8_t slot) { - if (!did_save_position[slot]) return false; - const xyze_pos_t &pos = stored_position[slot]; - SERIAL_ECHO(STR_SAVED_POSITION, slot, C(':')); - #if NUM_AXES - SERIAL_ECHOPGM_P(LOGICAL_AXIS_PAIRED_LIST( - SP_E_LBL, pos.e, - SP_X_LBL, pos.x, SP_Y_LBL, pos.y, SP_Z_LBL, pos.z, - SP_I_LBL, pos.i, SP_J_LBL, pos.j, SP_K_LBL, pos.k, - SP_U_LBL, pos.u, SP_V_LBL, pos.v, SP_W_LBL, pos.w - )); - #endif - SERIAL_EOL(); - return true; -} - -/** - * G60: Saved Positions - * - * S - Save to a memory slot. (default 0) - * Q - Restore from a memory slot. (default 0) - * D - Delete a memory slot. With no number, delete all. - */ -void GcodeSuite::G60() { - // With no parameters report any saved positions - if (!parser.seen_any()) { - uint8_t count = 0; - for (uint8_t s = 0; s < SAVED_POSITIONS; ++s) - if (report_stored_position(s)) ++count; - if (!count) SERIAL_ECHOLNPGM("No Saved Positions"); - return; - } - - // Only one of these parameters is permitted - const uint8_t seenD = parser.seen_test('D'), - seenQ = parser.seen_test('Q'), - seenS = parser.seen_test('S'); - if (seenD + seenQ + seenS > 1) return; - - // G60 D : Delete all saved positions - if (seenD && !parser.seenval('D')) { - did_save_position.reset(); - return; - } - - // G60 Dn / Q / S : Get the slot value - const uint8_t slot = parser.byteval(seenD ? 'D' : seenQ ? 'Q' : 'S'); - - // G60 Q : Redirect to G61(slot) - if (seenQ) return G61(slot); - - // Valid slot number? - if (SAVED_POSITIONS < 256 && slot >= SAVED_POSITIONS) { - SERIAL_ERROR_MSG(STR_INVALID_POS_SLOT STRINGIFY(SAVED_POSITIONS)); - return; - } - - // G60 Dn - if (seenD) { - SERIAL_ECHOLNPGM(STR_SAVED_POSITION, slot, ": DELETED"); - did_save_position.clear(slot); - return; - } - - // G60 S - stored_position[slot] = current_position; - did_save_position.set(slot); - report_stored_position(slot); -} - -#endif // SAVED_POSITIONS diff --git a/Marlin/src/gcode/feature/pause/G61.cpp b/Marlin/src/gcode/feature/pause/G60_G61.cpp similarity index 65% rename from Marlin/src/gcode/feature/pause/G61.cpp rename to Marlin/src/gcode/feature/pause/G60_G61.cpp index 7f2a45bc93..8a24433cdb 100644 --- a/Marlin/src/gcode/feature/pause/G61.cpp +++ b/Marlin/src/gcode/feature/pause/G60_G61.cpp @@ -24,7 +24,6 @@ #if SAVED_POSITIONS -#include "../../../module/planner.h" #include "../../gcode.h" #include "../../../module/motion.h" #include "../../../module/planner.h" @@ -32,6 +31,79 @@ #define DEBUG_OUT ENABLED(SAVED_POSITIONS_DEBUG) #include "../../../core/debug_out.h" +Flags did_save_position; +xyze_pos_t stored_position[SAVED_POSITIONS]; + +bool report_stored_position(const uint8_t slot) { + if (!did_save_position[slot]) return false; + const xyze_pos_t &pos = stored_position[slot]; + SERIAL_ECHO(STR_SAVED_POSITION, slot, C(':')); + #if NUM_AXES + SERIAL_ECHOPGM_P(LOGICAL_AXIS_PAIRED_LIST( + SP_E_LBL, pos.e, + SP_X_LBL, pos.x, SP_Y_LBL, pos.y, SP_Z_LBL, pos.z, + SP_I_LBL, pos.i, SP_J_LBL, pos.j, SP_K_LBL, pos.k, + SP_U_LBL, pos.u, SP_V_LBL, pos.v, SP_W_LBL, pos.w + )); + #endif + SERIAL_EOL(); + return true; +} + +/** + * G60: Saved Positions + * + * S - Save to a memory slot. (default 0) + * Q - Restore from a memory slot. (default 0) + * D - Delete a memory slot. With no number, delete all. + */ +void GcodeSuite::G60() { + // With no parameters report any saved positions + if (!parser.seen_any()) { + uint8_t count = 0; + for (uint8_t s = 0; s < SAVED_POSITIONS; ++s) + if (report_stored_position(s)) ++count; + if (!count) SERIAL_ECHOLNPGM("No Saved Positions"); + return; + } + + // Only one of these parameters is permitted + const uint8_t seenD = parser.seen_test('D'), + seenQ = parser.seen_test('Q'), + seenS = parser.seen_test('S'); + if (seenD + seenQ + seenS > 1) return; + + // G60 D : Delete all saved positions + if (seenD && !parser.seenval('D')) { + did_save_position.reset(); + return; + } + + // G60 Dn / Q / S : Get the slot value + const uint8_t slot = parser.byteval(seenD ? 'D' : seenQ ? 'Q' : 'S'); + + // G60 Q : Redirect to G61(slot) + if (seenQ) return G61(slot); + + // Valid slot number? + if (SAVED_POSITIONS < 256 && slot >= SAVED_POSITIONS) { + SERIAL_ERROR_MSG(STR_INVALID_POS_SLOT STRINGIFY(SAVED_POSITIONS)); + return; + } + + // G60 Dn + if (seenD) { + SERIAL_ECHOLNPGM(STR_SAVED_POSITION, slot, ": DELETED"); + did_save_position.clear(slot); + return; + } + + // G60 S + stored_position[slot] = current_position; + did_save_position.set(slot); + report_stored_position(slot); +} + /** * G61: Return to saved position * diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index 1282e605eb..cb99000451 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -107,12 +107,6 @@ xyze_pos_t current_position = LOGICAL_AXIS_ARRAY(0, X_HOME_POS, Y_HOME_POS, Z_IN */ xyze_pos_t destination; // {0} -// G60/G61 Position Save and Return -#if SAVED_POSITIONS - Flags did_save_position; - xyze_pos_t stored_position[SAVED_POSITIONS]; -#endif - // The active extruder (tool). Set with T command. #if HAS_MULTI_EXTRUDER uint8_t active_extruder = 0; // = 0 diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index e74562728d..7cafb2f019 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -48,12 +48,6 @@ extern bool relative_mode; extern xyze_pos_t current_position, // High-level current tool position destination; // Destination for a move -// G60/G61 Position Save and Return -#if SAVED_POSITIONS - extern Flags did_save_position; - extern xyze_pos_t stored_position[SAVED_POSITIONS]; -#endif - // Scratch space for a cartesian result extern xyz_pos_t cartes; diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp index 1d6fa06998..24ee80a2cc 100644 --- a/Marlin/src/sd/cardreader.cpp +++ b/Marlin/src/sd/cardreader.cpp @@ -1378,14 +1378,7 @@ void CardReader::cdroot() { #endif #endif - #else // !SDSORT_USES_RAM - - // By default re-read the names from SD for every compare - // retaining only two filenames at a time. This is very - // slow but is safest and uses minimal RAM. - char name1[LONG_FILENAME_LENGTH]; - - #endif + #endif // SDSORT_USES_RAM if (fileCnt > 1) { diff --git a/buildroot/share/PlatformIO/scripts/preflight-checks.py b/buildroot/share/PlatformIO/scripts/preflight-checks.py index 210dc8fd0b..2cb54d7c08 100644 --- a/buildroot/share/PlatformIO/scripts/preflight-checks.py +++ b/buildroot/share/PlatformIO/scripts/preflight-checks.py @@ -149,14 +149,18 @@ if pioutil.is_pio_build(): # Check for old files indicating an entangled Marlin (mixing old and new code) # mixedin = [] - p = project_dir / "Marlin/src/lcd/dogm" + p = mpath / "src/lcd/dogm" for f in [ "ultralcd_DOGM.cpp", "ultralcd_DOGM.h", "u8g_dev_ssd1306_sh1106_128x64_I2C.cpp", "u8g_dev_ssd1309_12864.cpp", "u8g_dev_st7565_64128n_HAL.cpp", "u8g_dev_st7920_128x64_HAL.cpp", "u8g_dev_tft_upscale_from_128x64.cpp", "u8g_dev_uc1701_mini12864_HAL.cpp", "ultralcd_st7920_u8glib_rrd_AVR.cpp" ]: if (p / f).is_file(): mixedin += [ f ] - p = project_dir / "Marlin/src/feature/bedlevel/abl" + p = mpath / "src/feature/bedlevel/abl" for f in [ "abl.cpp", "abl.h" ]: if (p / f).is_file(): mixedin += [ f ] + f = mpath / "src/gcode/feature/pause" + for f in [ "G60.cpp", "G61.cpp" ]: + if (p / f).is_file(): + mixedin += [ f ] if mixedin: err = "ERROR: Old files fell into your Marlin folder. Remove %s and try again" % ", ".join(mixedin) raise SystemExit(err) diff --git a/ini/features.ini b/ini/features.ini index a346793954..bd45dd02c1 100644 --- a/ini/features.ini +++ b/ini/features.ini @@ -319,7 +319,7 @@ HAS_ZV_SHAPING = build_src_filter=+ GRADIENT_MIX = build_src_filter=+ NONLINEAR_EXTRUSION = build_src_filter=+ -HAS_SAVED_POSITIONS = build_src_filter=+ + +HAS_SAVED_POSITIONS = build_src_filter=+ PARK_HEAD_ON_PAUSE = build_src_filter=+ FILAMENT_LOAD_UNLOAD_GCODES = build_src_filter=+ HAS_STEALTHCHOP = build_src_filter=+