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