You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Ender3V2S1/Marlin/src/prouiex/custom_gcodes.cpp

195 lines
5.8 KiB
C++

/**
* Custom G-code implementation for PRO UI
* Author: Miguel A. Risco-Castillo (MRISCOC)
* Version: 3.1.0
* Date: 2023/10/27
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../inc/MarlinConfigPre.h"
#if ALL(PROUI_EX, HAS_CGCODE)
#include "../MarlinCore.h" // for wait_for_user
#include "../core/types.h"
#include "../gcode/gcode.h"
#include "../libs/buzzer.h"
#include "../lcd/marlinui.h"
#if HAS_MEDIA
#include "file_header.h"
#endif
#ifdef DWIN_LCD_PROUI
#include "../lcd/e3v2/proui/dwin.h"
#if ENABLED(LCD_BED_TRAMMING)
#include "../lcd/e3v2/proui/bed_tramming.h"
#endif
#endif
#include "custom_gcodes.h"
//=============================================================================
// Extended G-CODES
//=============================================================================
void cError() {
parser.unknown_command_warning();
}
#if HAS_CUSTOM_COLORS
// C11 Set color for UI element E
void C11() {
const int16_t E = parser.seenval('E') ? parser.value_byte() : 0; // UI element
if (E) {
hmiValue.Color[0] = parser.seenval('R') ? parser.value_byte() : 0;
hmiValue.Color[1] = parser.seenval('G') ? parser.value_byte() : 0;
hmiValue.Color[2] = parser.seenval('B') ? parser.value_byte() : 0;
dwinApplyColor(E);
} else dwinRedrawScreen();
}
#endif
#if ALL(HAS_BED_PROBE, HAS_TRAMMING_WIZARD)
// Bed tramming
void C35() {
if (parser.seenval('T')) {
const int8_t i = parser.value_byte();
if (WITHIN(i, 0, 4)) tram(i);
}
TERN_(HAS_TRAMMING_WIZARD, else runTrammingWizard());
}
#endif
// Cancel a Wait for User without an Emergecy Parser
void C108() {
#if DEBUG_DWIN
SERIAL_ECHOLNPGM(F("wait_for_user was "), wait_for_user);
SERIAL_ECHOLNPGM(F("checkkey was "), checkkey);
#endif
#if LCD_BACKLIGHT_TIMEOUT_MINS
ui.refresh_backlight_timeout();
#endif
#if HAS_LCD_BRIGHTNESS
if (!ui.backlight) ui.refresh_brightness();
#endif
wait_for_user = false;
DONE_BUZZ(true);
}
// Enable or disable preview screen
#if ALL(HAS_GCODE_PREVIEW, PREVIEW_MENU_ITEM)
void C250() {
if (parser.seenval('P')) {
hmiData.enablePreview = !!parser.value_byte();
}
SERIAL_ECHOLNPGM(F("PREVIEW:"), hmiData.enablePreview);
}
#endif
// lock/unlock screen
#if HAS_LOCKSCREEN
void C510() {
if (parser.seenval('U') && parser.value_int()) dwinUnLockScreen();
else dwinLockScreen();
}
#endif
#if ENABLED(DEBUG_DWIN)
void C997() {
SERIAL_ECHOLNPGM("Simulating a printer freeze");
TERN_(DWIN_LCD_PROUI, dwinRebootScreen());
while (1) {};
}
#elif NONE(PLATFORM_M997_SUPPORT, DWIN_LCD_PROUI)
void C997() {
SERIAL_ECHOLNPGM("Reboot printer");
hal.reboot();
}
#endif
// Special Creality DWIN GCodes
void customGcode(const int16_t codenum) {
switch(codenum) {
#if HAS_CUSTOM_COLORS
case 11: C11(); break; // Set color for UI element E
#endif
#if ALL(HAS_BED_PROBE, HAS_TRAMMING_WIZARD)
case 35: C35(); break; // Launch bed tramming wizard
#endif
case 108: C108(); break; // Cancel a Wait for User without an Emergecy Parser
#if HAS_LOCKSCREEN
case 510: C510(); break; // lock screen
#endif
#if ENABLED(DEBUG_DWIN) || NONE(PLATFORM_M997_SUPPORT, DWIN_LCD_PROUI)
case 997: C997(); break; // Simulate a printer freeze (or reboot)
#endif
#if HAS_MEDIA
case 10: proUIEx.C10(); break; // Mark the G-code file as a Configuration file
#endif
#if HAS_MESH
case 29: proUIEx.C29(); break; // Set probing area and mesh leveling settings
#endif
case 100: proUIEx.C100(); break; // Change Physical minimums
case 101: proUIEx.C101(); break; // Change Physical maximums
case 102: proUIEx.C102(); break; // Change Bed size
#if HAS_PROUI_MAXTEMP
case 104: proUIEx.C104(); break; // Set extruder max temperature (limited by maxtemp in thermistor table)
#endif
case 115: proUIEx.C115(); break; // ProUI Info
#if ENABLED(NOZZLE_PARK_FEATURE)
case 125: proUIEx.C125(); break; // Set park position
#endif
#if ALL(HAS_GCODE_PREVIEW, PREVIEW_MENU_ITEM)
case 250: C250(); break; // Enable or disable preview screen
#endif
#if HAS_PROUI_RUNOUT_SENSOR
case 412: proUIEx.C412(); break; // Set runout sensor active mode
#endif
case 562: proUIEx.C562(); break; // Invert Extruder
case 851: proUIEx.C851(); break; // If has a probe set z feed rate and multiprobe, if not, set manual z-offset
#if HAS_TOOLBAR
case 810: proUIEx.C810(); break; // Config toolbar
#endif
default: cError(); break;
}
}
void customGcodeReport(const bool forReplay/*=true*/) {
proUIEx.C100_report(forReplay);
proUIEx.C101_report(forReplay);
proUIEx.C102_report(forReplay);
#if HAS_MESH
proUIEx.C29_report(forReplay);
#endif
#if HAS_PROUI_MAXTEMP
proUIEx.C104_report(forReplay);
#endif
#if ENABLED(NOZZLE_PARK_FEATURE)
proUIEx.C125_report(forReplay);
#endif
#if HAS_PROUI_RUNOUT_SENSOR
proUIEx.C412_report(forReplay);
#endif
proUIEx.C562_report(forReplay);
#if HAS_BED_PROBE
proUIEx.C851_report(forReplay);
#endif
}
#endif // PROUI_EX && HAS_CGCODE