Scott Lahteine
5 years ago
committed by
GitHub
104 changed files with 1015 additions and 105 deletions
@ -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
|
@ -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; |
@ -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()); |
|||
|
|||
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
|
@ -0,0 +1,73 @@ |
|||
/**
|
|||
* 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/>.
|
|||
* |
|||
*/ |
|||
|
|||
//
|
|||
// Cancel Object Menu
|
|||
//
|
|||
|
|||
#include "../../inc/MarlinConfigPre.h" |
|||
|
|||
#if HAS_LCD_MENU && ENABLED(CANCEL_OBJECTS) |
|||
|
|||
#include "menu.h" |
|||
|
|||
#include "../../feature/cancel_object.h" |
|||
|
|||
//
|
|||
// TODO: Select the active object
|
|||
// upon entry to the menu and present
|
|||
// a confirmation screen.
|
|||
//
|
|||
void menu_cancelobject() { |
|||
START_MENU(); |
|||
MENU_BACK(MSG_MAIN); |
|||
|
|||
GCODES_ITEM(MSG_OBJECT_CANCEL, PSTR("M486 C")); |
|||
|
|||
// Draw cancelable items in a loop
|
|||
for (int8_t i = 0; i < cancelable.object_count; i++) { |
|||
if (!TEST(cancelable.canceled, i)) { |
|||
editable.int8 = i; |
|||
ACTION_ITEM(MSG_OBJECT_CANCEL, [](){ |
|||
cancelable.cancel_object(editable.int8); |
|||
ui.quick_feedback(); |
|||
}); |
|||
MENU_ITEM_ADDON_START(LCD_WIDTH - 2 - (i >= 10)); |
|||
lcd_put_int(i); |
|||
MENU_ITEM_ADDON_END(); |
|||
} |
|||
} |
|||
|
|||
/*
|
|||
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_OBJECT_CANCEL, &editable.int8, -1, 32, [](){ |
|||
if (editable.int8 > -1) { |
|||
cancelable.cancel_object(editable.int8); |
|||
ui.quick_feedback(); |
|||
editable.int8 = -1; |
|||
} |
|||
}); |
|||
*/ |
|||
|
|||
END_MENU(); |
|||
} |
|||
|
|||
#endif // HAS_LCD_MENU && CANCEL_OBJECTS
|
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue