mirror of
https://github.com/MarlinFirmware/Marlin.git
synced 2026-03-12 22:06:07 -06:00
🧑💻 Combine G60-G61 (#28149)
This commit is contained in:
parent
1c19cfcbc7
commit
5d59779a80
7 changed files with 81 additions and 127 deletions
|
|
@ -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 <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#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<slot> - Save to a memory slot. (default 0)
|
||||
* Q<slot> - Restore from a memory slot. (default 0)
|
||||
* D<slot> - 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
|
||||
|
|
@ -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<SAVED_POSITIONS> 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<slot> - Save to a memory slot. (default 0)
|
||||
* Q<slot> - Restore from a memory slot. (default 0)
|
||||
* D<slot> - 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
|
||||
*
|
||||
|
|
@ -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<SAVED_POSITIONS> did_save_position;
|
||||
xyze_pos_t stored_position[SAVED_POSITIONS];
|
||||
#endif
|
||||
|
||||
// The active extruder (tool). Set with T<extruder> command.
|
||||
#if HAS_MULTI_EXTRUDER
|
||||
uint8_t active_extruder = 0; // = 0
|
||||
|
|
|
|||
|
|
@ -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<SAVED_POSITIONS> did_save_position;
|
||||
extern xyze_pos_t stored_position[SAVED_POSITIONS];
|
||||
#endif
|
||||
|
||||
// Scratch space for a cartesian result
|
||||
extern xyz_pos_t cartes;
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -319,7 +319,7 @@ HAS_ZV_SHAPING = build_src_filter=+<src/gcode/feature/in
|
|||
GCODE_MACROS = build_src_filter=+<src/gcode/feature/macro>
|
||||
GRADIENT_MIX = build_src_filter=+<src/gcode/feature/mixing/M166.cpp>
|
||||
NONLINEAR_EXTRUSION = build_src_filter=+<src/gcode/feature/nonlinear>
|
||||
HAS_SAVED_POSITIONS = build_src_filter=+<src/gcode/feature/pause/G60.cpp> +<src/gcode/feature/pause/G61.cpp>
|
||||
HAS_SAVED_POSITIONS = build_src_filter=+<src/gcode/feature/pause/G60_G61.cpp>
|
||||
PARK_HEAD_ON_PAUSE = build_src_filter=+<src/gcode/feature/pause/M125.cpp>
|
||||
FILAMENT_LOAD_UNLOAD_GCODES = build_src_filter=+<src/gcode/feature/pause/M701_M702.cpp>
|
||||
HAS_STEALTHCHOP = build_src_filter=+<src/gcode/feature/trinamic/M569.cpp>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue