-
-
Notifications
You must be signed in to change notification settings - Fork 19.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Cancel Objects - As seen at ERRF2019 (#15590)
- Loading branch information
1 parent
f6a799c
commit 93f0012
Showing
104 changed files
with
1,015 additions
and
105 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
/** | ||
* 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 <http://www.gnu.org/licenses/>. | ||
* | ||
*/ | ||
#include "../inc/MarlinConfig.h" | ||
|
||
#if ENABLED(CANCEL_OBJECTS) | ||
|
||
#include "cancel_object.h" | ||
#include "../gcode/gcode.h" | ||
#include "../lcd/ultralcd.h" | ||
|
||
CancelObject cancelable; | ||
|
||
int8_t CancelObject::object_count, // = 0 | ||
CancelObject::active_object = -1; | ||
uint32_t CancelObject::canceled; // = 0x0000 | ||
bool CancelObject::skipping; // = false | ||
|
||
void CancelObject::set_active_object(const int8_t obj) { | ||
active_object = obj; | ||
if (WITHIN(obj, 0, 31)) { | ||
if (obj >= object_count) object_count = obj + 1; | ||
skipping = TEST(canceled, obj); | ||
} | ||
else | ||
skipping = false; | ||
} | ||
|
||
void CancelObject::cancel_object(const int8_t obj) { | ||
if (WITHIN(obj, 0, 31)) { | ||
SBI(canceled, obj); | ||
if (obj == active_object) skipping = true; | ||
} | ||
} | ||
|
||
void CancelObject::uncancel_object(const int8_t obj) { | ||
if (WITHIN(obj, 0, 31)) { | ||
CBI(canceled, obj); | ||
if (obj == active_object) skipping = false; | ||
} | ||
} | ||
|
||
void CancelObject::report() { | ||
if (active_object >= 0) { | ||
SERIAL_ECHO_START(); | ||
SERIAL_ECHOLNPAIR("Active Object: ", int(active_object)); | ||
} | ||
|
||
if (canceled) { | ||
SERIAL_ECHO_START(); | ||
SERIAL_ECHOPGM("Canceled:"); | ||
for (int i = 0; i < object_count; i++) | ||
if (TEST(canceled, i)) { SERIAL_CHAR(' '); SERIAL_ECHO(i); } | ||
SERIAL_EOL(); | ||
} | ||
} | ||
|
||
#endif // CANCEL_OBJECTS |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
/** | ||
* 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 <http://www.gnu.org/licenses/>. | ||
* | ||
*/ | ||
#pragma once | ||
|
||
#include <stdint.h> | ||
|
||
class CancelObject { | ||
public: | ||
static bool skipping; | ||
static int8_t object_count, active_object; | ||
static uint32_t canceled; | ||
static void set_active_object(const int8_t obj); | ||
static void cancel_object(const int8_t obj); | ||
static void uncancel_object(const int8_t obj); | ||
static void report(); | ||
static inline void clear_active_object() { set_active_object(-1); } | ||
static inline void cancel_active_object() { cancel_object(active_object); } | ||
static inline void reset() { canceled = 0x0000; object_count = 0; clear_active_object(); } | ||
}; | ||
|
||
extern CancelObject cancelable; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
/** | ||
* 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 <http://www.gnu.org/licenses/>. | ||
* | ||
*/ | ||
|
||
#include "../../../inc/MarlinConfig.h" | ||
|
||
#if ENABLED(CANCEL_OBJECTS) | ||
|
||
#include "../../gcode.h" | ||
#include "../../../feature/cancel_object.h" | ||
|
||
/** | ||
* M486: A simple interface to cancel objects | ||
* | ||
* T[count] : Reset objects and/or set the count | ||
* S<index> : Start an object with the given index | ||
* P<index> : Cancel the object with the given index | ||
* U<index> : Un-cancel object with the given index | ||
* C : Cancel the current object (the last index given by S<index>) | ||
* S-1 : Start a non-object like a brim or purge tower that should always print | ||
*/ | ||
void GcodeSuite::M486() { | ||
|
||
if (parser.seen('T')) { | ||
cancelable.reset(); | ||
cancelable.object_count = parser.intval('T', 1); | ||
} | ||
|
||
if (parser.seen('S')) | ||
cancelable.set_active_object(parser.value_integer()); | ||
This comment has been minimized.
Sorry, something went wrong. |
||
|
||
if (parser.seen('C')) cancelable.cancel_active_object(); | ||
|
||
if (parser.seen('P')) cancelable.cancel_object(parser.value_integer()); | ||
|
||
if (parser.seen('U')) cancelable.uncancel_object(parser.value_integer()); | ||
} | ||
|
||
#endif // CANCEL_OBJECTS |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -114,15 +114,34 @@ int8_t GcodeSuite::get_target_e_stepper_from_command() { | |
*/ | ||
void GcodeSuite::get_destination_from_command() { | ||
xyze_bool_t seen = { false, false, false, false }; | ||
LOOP_XYZE(i) { | ||
|
||
#if ENABLED(CANCEL_OBJECTS) | ||
const bool &skip_move = cancelable.skipping; | ||
This comment has been minimized.
Sorry, something went wrong.
paukstelis
|
||
#else | ||
constexpr bool skip_move = false; | ||
#endif | ||
|
||
// Get new XYZ position, whether absolute or relative | ||
LOOP_XYZ(i) { | ||
if ( (seen[i] = parser.seenval(axis_codes[i])) ) { | ||
const float v = parser.value_axis_units((AxisEnum)i); | ||
destination[i] = axis_is_relative(AxisEnum(i)) ? current_position[i] + v : (i == E_AXIS) ? v : LOGICAL_TO_NATIVE(v, i); | ||
if (skip_move) | ||
destination[i] = current_position[i]; | ||
else | ||
destination[i] = axis_is_relative(AxisEnum(i)) ? current_position[i] + v : LOGICAL_TO_NATIVE(v, i); | ||
} | ||
else | ||
destination[i] = current_position[i]; | ||
} | ||
|
||
// Get new E position, whether absolute or relative | ||
if ( (seen.e = parser.seenval('E')) ) { | ||
const float v = parser.value_axis_units(E_AXIS); | ||
destination.e = axis_is_relative(E_AXIS) ? current_position.e + v : v; | ||
} | ||
else | ||
destination.e = current_position.e; | ||
|
||
#if ENABLED(POWER_LOSS_RECOVERY) && !PIN_EXISTS(POWER_LOSS) | ||
// Only update power loss recovery on moves with E | ||
if (recovery.enabled && IS_SD_PRINTING() && seen.e && (seen.x || seen.y)) | ||
|
@@ -133,7 +152,7 @@ void GcodeSuite::get_destination_from_command() { | |
feedrate_mm_s = parser.value_feedrate(); | ||
|
||
#if ENABLED(PRINTCOUNTER) | ||
if (!DEBUGGING(DRYRUN)) | ||
if (!DEBUGGING(DRYRUN) && !skip_move) | ||
print_job_timer.incFilamentUsed(destination.e - current_position.e); | ||
#endif | ||
|
||
|
@@ -322,6 +341,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) { | |
break; | ||
|
||
case 'M': switch (parser.codenum) { | ||
|
||
#if HAS_RESUME_CONTINUE | ||
case 0: // M0: Unconditional stop - Wait for user button press on LCD | ||
case 1: M0_M1(); break; // M1: Conditional stop - Wait for user button press on LCD | ||
|
@@ -667,6 +687,10 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) { | |
case 428: M428(); break; // M428: Apply current_position to home_offset | ||
#endif | ||
|
||
#if ENABLED(CANCEL_OBJECTS) | ||
case 486: M486(); break; // M486: Identify and cancel objects | ||
#endif | ||
|
||
case 500: M500(); break; // M500: Store settings in EEPROM | ||
case 501: M501(); break; // M501: Read settings from EEPROM | ||
case 502: M502(); break; // M502: Revert to default settings | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
value_integer is not defined. Should be value_int