3281 lines
106 KiB
C++
3281 lines
106 KiB
C++
/**
|
|
* Marlin 3D Printer Firmware
|
|
* Copyright (c) 2023 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/>.
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* lcd/extui/anycubic_vyper/dgus_tft.cpp
|
|
*/
|
|
|
|
#include "../../../inc/MarlinConfigPre.h"
|
|
|
|
#if ENABLED(ANYCUBIC_LCD_VYPER)
|
|
|
|
#include "dgus_tft.h"
|
|
#include "../anycubic/Tunes.h"
|
|
#include "FileNavigator.h"
|
|
|
|
#include "../../../gcode/queue.h"
|
|
#include "../../../sd/cardreader.h"
|
|
#include "../../../libs/numtostr.h"
|
|
#include "../../../MarlinCore.h"
|
|
#include "../../../core/serial.h"
|
|
#include "../../../module/stepper.h"
|
|
#include "../../../module/probe.h"
|
|
#include "../../../module/temperature.h"
|
|
|
|
#if ENABLED(POWER_LOSS_RECOVERY)
|
|
#include "../../../feature/powerloss.h"
|
|
#endif
|
|
|
|
#define DEBUG_OUT ACDEBUGLEVEL
|
|
#include "../../../core/debug_out.h"
|
|
|
|
#include <string>
|
|
|
|
namespace Anycubic {
|
|
|
|
const char MESSAGE_charu[] = {0xB4, 0xE6, 0xB4, 0xA2, 0xBF, 0xA8, 0xD2, 0xD1, 0xB2, 0xE5, 0xC8, 0xEB, 0x00}; // '忙'垄驴篓脪脩虏氓脠毛
|
|
const char MESSAGE_bachu[] = {0xB4, 0xE6, 0xB4, 0xA2, 0xBF, 0xA8, 0xD2, 0xD1, 0xB0, 0xCE, 0xB3, 0xF6, 0x00};
|
|
const char MESSAGE_wuka[] = {0xCE, 0xDE, 0xB4, 0xE6, 0xB4, 0xA2, 0xBF, 0xA8, 0x00};
|
|
const char MESSAGE_lianji[] = {0xC1, 0xAA, 0xBB, 0xFA, 0xD6, 0xD0, 0x00};
|
|
const char MESSAGE_tuoji[] = {0xCD, 0xD1, 0xBB, 0xFA, 0xB4, 0xF2, 0xD3, 0xA1, 0xD6, 0xD0, 0x00};
|
|
const char MESSAGE_zanting[] = {0xB4, 0xF2, 0xD3, 0xA1, 0xD4, 0xDD, 0xCD, 0xA3, 0xD6, 0xD0, 0x00};
|
|
const char MESSAGE_tingzhi[] = {0xCD, 0xA3, 0xD6, 0xB9, 0xB4, 0xF2, 0xD3, 0xA1, 0x00};
|
|
const char MESSAGE_wancheng[] = {0xCD, 0xEA, 0xB3, 0xC9, 0xB4, 0xF2, 0xD3, 0xA1, 0x00};
|
|
const char MESSAGE_hotend_heating[] = {0xB4, 0xF2, 0xD3, 0xA1, 0xCD, 0xB7, 0xD5, 0xFD, 0xD4, 0xDA, 0xBC, 0xD3, 0xC8, 0xC8, 0x00};
|
|
const char MESSAGE_hotend_over[] = {0xB4, 0xF2, 0xD3, 0xA1, 0xCD, 0xB7, 0xBC, 0xD3, 0xC8, 0xC8, 0xCD, 0xEA, 0xB3, 0xC9, 0x00};
|
|
const char MESSAGE_bed_heating[] = {0xC8, 0xC8, 0xB4, 0xB2, 0xD5, 0xFD, 0xD4, 0xDA, 0xBC, 0xD3, 0xC8, 0xC8, 0x00};
|
|
const char MESSAGE_bed_over[] = {0xC8, 0xC8, 0xB4, 0xB2, 0xBC, 0xD3, 0xC8, 0xC8, 0xCD, 0xEA, 0xB3, 0xC9, 0x00};
|
|
const char MESSAGE_ready[] = {0xD7, 0xBC, 0xB1, 0xB8, 0xBE, 0xCD, 0xD0, 0xF7, 0x00};
|
|
const char MESSAGE_cold[] = {0xB4, 0xF2, 0xD3, 0xA1, 0xCD, 0xB7, 0xCE, 0xC2, 0xB6, 0xC8, 0xB9, 0xFD, 0xB5, 0xCD, 0x00};
|
|
|
|
const char *p_mesage[] = { MESSAGE_charu, MESSAGE_bachu, MESSAGE_wuka, MESSAGE_lianji, MESSAGE_tuoji, MESSAGE_zanting,
|
|
MESSAGE_tingzhi, MESSAGE_wancheng, MESSAGE_hotend_heating, MESSAGE_hotend_over, MESSAGE_bed_heating,
|
|
MESSAGE_bed_over, MESSAGE_ready, MESSAGE_cold };
|
|
|
|
DgusTFT::p_fun fun_array[] = {
|
|
DgusTFT::page1, DgusTFT::page2, DgusTFT::page3, DgusTFT::page4, DgusTFT::page5, DgusTFT::page6,
|
|
DgusTFT::page7, DgusTFT::page8, DgusTFT::page9, DgusTFT::page10, DgusTFT::page11, DgusTFT::page12,
|
|
DgusTFT::page13, DgusTFT::page14, DgusTFT::page15, DgusTFT::page16, DgusTFT::page17, DgusTFT::page18,
|
|
DgusTFT::page19, DgusTFT::page20, DgusTFT::page21, DgusTFT::page22, DgusTFT::page23, DgusTFT::page24,
|
|
DgusTFT::page25, DgusTFT::page26, DgusTFT::page27, DgusTFT::page28, DgusTFT::page29, DgusTFT::page30,
|
|
DgusTFT::page31, DgusTFT::page32
|
|
#if HAS_LEVELING
|
|
, DgusTFT::page33 , DgusTFT::page34
|
|
#endif
|
|
};
|
|
|
|
printer_state_t DgusTFT::printer_state;
|
|
paused_state_t DgusTFT::pause_state;
|
|
#if HAS_HOTEND
|
|
heater_state_t DgusTFT::hotend_state;
|
|
#endif
|
|
#if HAS_HEATED_BED
|
|
heater_state_t DgusTFT::hotbed_state;
|
|
#endif
|
|
char DgusTFT::selectedfile[MAX_PATH_LEN];
|
|
char DgusTFT::panel_command[MAX_CMND_LEN];
|
|
uint8_t DgusTFT::command_len;
|
|
file_menu_t DgusTFT::file_menu;
|
|
|
|
bool DgusTFT::data_received;
|
|
uint8_t DgusTFT::data_buf[DATA_BUF_SIZE];
|
|
uint8_t DgusTFT::data_index;
|
|
uint16_t DgusTFT::page_index_now, DgusTFT::page_index_last, DgusTFT::page_index_last_2;
|
|
uint8_t DgusTFT::message_index;
|
|
uint8_t DgusTFT::pop_up_index;
|
|
uint32_t DgusTFT::key_value;
|
|
uint8_t DgusTFT::lcd_txtbox_index;
|
|
uint8_t DgusTFT::lcd_txtbox_page;
|
|
int16_t DgusTFT::feedrate_back;
|
|
lcd_info_t DgusTFT::lcd_info, DgusTFT::lcd_info_back;
|
|
language_t DgusTFT::ui_language;
|
|
uint16_t page_index_saved; // flags to keep from bombing the host display
|
|
uint8_t pop_up_index_saved;
|
|
uint32_t key_value_saved;
|
|
|
|
void DEBUG_PRINT_PAUSED_STATE(const paused_state_t state, FSTR_P const msg=nullptr);
|
|
void DEBUG_PRINT_PRINTER_STATE(const printer_state_t state, FSTR_P const msg=nullptr);
|
|
void DEBUG_PRINT_TIMER_EVENT(const timer_event_t event, FSTR_P const msg=nullptr);
|
|
void DEBUG_PRINT_MEDIA_EVENT(const media_event_t event, FSTR_P const msg=nullptr);
|
|
|
|
void set_brightness();
|
|
|
|
DgusTFT dgus;
|
|
|
|
DgusTFT::DgusTFT() {
|
|
data_buf[0] = '\0';
|
|
message_index = 100;
|
|
pop_up_index = 100;
|
|
page_index_now = page_index_last = page_index_last_2 = 1;
|
|
lcd_txtbox_index = 0;
|
|
feedrate_back = -1;
|
|
}
|
|
|
|
void DgusTFT::startup() {
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("DgusTFT::startup()");
|
|
#endif
|
|
selectedfile[0] = '\0';
|
|
panel_command[0] = '\0';
|
|
command_len = 0;
|
|
printer_state = AC_printer_idle;
|
|
pause_state = AC_paused_idle;
|
|
TERN_(HAS_HOTEND, hotend_state = AC_heater_off);
|
|
TERN_(HAS_HEATED_BED, hotbed_state = AC_heater_off);
|
|
file_menu = AC_menu_file;
|
|
set_language(ui_language); // use language stored in EEPROM
|
|
|
|
// Filament runout is handled by Marlin settings in Configuration.h
|
|
// opt_set FIL_RUNOUT_STATE HIGH // Pin state indicating that filament is NOT present.
|
|
// opt_enable FIL_RUNOUT_PULLUP
|
|
|
|
TFTSer.begin(115200);
|
|
|
|
// Signal Board has reset
|
|
tftSendLn(AC_msg_main_board_has_reset);
|
|
|
|
// Enable levelling and Disable end stops during print
|
|
// as Z home places nozzle above the bed so we need to allow it past the end stops
|
|
injectCommands(AC_cmnd_enable_leveling);
|
|
|
|
#if ACDEBUGLEVEL
|
|
DEBUG_ECHOLNPGM("startup AC Debug Level ", ACDEBUGLEVEL);
|
|
#endif
|
|
tftSendLn(AC_msg_ready);
|
|
}
|
|
|
|
void DgusTFT::paramInit() {
|
|
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("DgusTFT::paramInit()");
|
|
#endif
|
|
|
|
if (lcd_info.language == CHS)
|
|
page_index_now = 1;
|
|
else if (lcd_info.language == ENG)
|
|
page_index_now = 121;
|
|
|
|
lcdAudioSet(lcd_info.audio_on);
|
|
|
|
#if ACDEBUG(AC_MARLIN)
|
|
if (lcd_info.language == CHS)
|
|
DEBUG_ECHOLNPGM("paramInit lcd language: CHS");
|
|
else if (lcd_info.language == ENG)
|
|
DEBUG_ECHOLNPGM("paramInit lcd language: ENG");
|
|
|
|
if (lcd_info.audio_on)
|
|
DEBUG_ECHOLNPGM("paramInit lcd audio: ON");
|
|
else
|
|
DEBUG_ECHOLNPGM("paramInit lcd audio: OFF");
|
|
#endif
|
|
|
|
requestValueFromTFT(0x14); // get page ID
|
|
}
|
|
|
|
void DgusTFT::idleLoop() {
|
|
if (readTFTCommand()) {
|
|
processPanelRequest();
|
|
command_len = 0;
|
|
}
|
|
|
|
#if ACDEBUG(AC_MARLIN)
|
|
if (key_value) {
|
|
DEBUG_ECHOLNPGM("idleLoop page: ", page_index_now);
|
|
DEBUG_ECHOLNPGM("key: ", key_value);
|
|
}
|
|
#endif
|
|
|
|
// Periodically update main page
|
|
if ((page_index_now == 121 || page_index_now == 1) && ((millis() % 500) == 0)) {
|
|
TERN_(HAS_HOTEND, send_temperature_hotend(TXT_MAIN_HOTEND));
|
|
TERN_(HAS_HEATED_BED, send_temperature_bed(TXT_MAIN_BED));
|
|
set_brightness();
|
|
delay(1); // wait for millis() to advance so this clause isn't repeated
|
|
}
|
|
|
|
switch (page_index_now) {
|
|
case 115: page115(); break;
|
|
case 117: page117(); break;
|
|
//case 124: page124(); break;
|
|
//case 125: page125(); break;
|
|
case 170: page170(); break;
|
|
|
|
#if ENABLED(POWER_LOSS_RECOVERY)
|
|
case 171: page171(); break;
|
|
case 173: page173(); break;
|
|
#endif
|
|
|
|
#if HAS_LEVELING
|
|
case 175: page175(); break;
|
|
case 176: page176(); break;
|
|
#endif
|
|
|
|
case 177 ... 198: {
|
|
#if 0 // ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("line: ", __LINE__);
|
|
DEBUG_ECHOLNPGM("func: ", page_index_now);
|
|
#endif
|
|
//page177_to_198();
|
|
} break;
|
|
|
|
case 199 ... 200: {
|
|
#if 0 // ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("line: ", __LINE__);
|
|
DEBUG_ECHOLNPGM("func: ", page_index_now);
|
|
#endif
|
|
page199_to_200();
|
|
} break;
|
|
|
|
case 201: case 204: page201(); break;
|
|
case 202: case 205: page202(); break;
|
|
case 203: case 206: page203(); break;
|
|
|
|
default:
|
|
if (lcd_info.language == CHS) {
|
|
if (WITHIN(page_index_now, 1, 1 + COUNT(fun_array))) {
|
|
fun_array[page_index_now - 1]();
|
|
}
|
|
else {
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("line: ", __LINE__);
|
|
DEBUG_ECHOLNPGM("fun doesn't exist: ", page_index_now);
|
|
#endif
|
|
}
|
|
}
|
|
else if (lcd_info.language == ENG) {
|
|
if (WITHIN(page_index_now, 121, 121 + COUNT(fun_array))) {
|
|
fun_array[page_index_now - 121](); // ENG page_index is 120 more than CHS
|
|
}
|
|
else {
|
|
SERIAL_ECHOLNPGM("lcd function doesn't exist");
|
|
SERIAL_ECHOLNPGM("page_index_last: ", page_index_last);
|
|
SERIAL_ECHOLNPGM("page_index_last_2: ", page_index_last_2);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
pop_up_manager();
|
|
key_value = 0;
|
|
|
|
checkHeaters();
|
|
}
|
|
|
|
uint8_t FSHlength(FSTR_P FSHinput) {
|
|
PGM_P FSHinputPointer = reinterpret_cast<PGM_P>(FSHinput);
|
|
uint8_t stringLength = 0;
|
|
while (pgm_read_byte(FSHinputPointer++)) stringLength++;
|
|
return stringLength;
|
|
}
|
|
|
|
#undef GET_TEXT
|
|
#define GET_TEXT(MSG) Language_en::MSG
|
|
|
|
void DgusTFT::printerKilled(FSTR_P error_p, FSTR_P component_p) {
|
|
|
|
// copy string in FLASH to RAM for strcmp_P
|
|
|
|
uint8_t textLength = FSHlength(error_p);
|
|
char error[FSHlength(error_p) + 1];
|
|
memcpy_P(error, error_p, textLength + 1); // +1 for the null terminator
|
|
|
|
textLength = FSHlength(component_p);
|
|
char component[FSHlength(component_p) + 1];
|
|
memcpy_P(component, component_p, textLength + 1); // +1 for the null terminator
|
|
|
|
tftSendLn(AC_msg_kill_lcd);
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("printerKilled()\nerror: ", error, "\ncomponent: ", component);
|
|
#endif
|
|
|
|
if (strcmp_P(error, GET_TEXT(MSG_ERR_HEATING_FAILED)) == 0) {
|
|
|
|
if (strcmp_P(component, GET_TEXT(MSG_BED)) == 0) {
|
|
changePageOfTFT(PAGE_CHS_ABNORMAL_BED_HEATER);
|
|
SERIAL_ECHOLNPGM("Check Bed heater");
|
|
}
|
|
else if (strcmp_P(component, PSTR("E1")) == 0) {
|
|
changePageOfTFT(PAGE_CHS_ABNORMAL_HOTEND_HEATER);
|
|
SERIAL_ECHOLNPGM("Check E1 heater");
|
|
}
|
|
|
|
}
|
|
else if (strcmp_P(error, GET_TEXT(MSG_ERR_MINTEMP)) == 0) {
|
|
|
|
if (strcmp_P(component, GET_TEXT(MSG_BED)) == 0) {
|
|
changePageOfTFT(PAGE_CHS_ABNORMAL_BED_NTC);
|
|
SERIAL_ECHOLNPGM("Check Bed thermistor");
|
|
}
|
|
else if (strcmp_P(component, PSTR("E1")) == 0) {
|
|
changePageOfTFT(PAGE_CHS_ABNORMAL_HOTEND_NTC);
|
|
SERIAL_ECHOLNPGM("Check E1 thermistor");
|
|
}
|
|
|
|
}
|
|
else if (strcmp_P(error, GET_TEXT(MSG_ERR_MAXTEMP)) == 0) {
|
|
|
|
if (strcmp_P(component, GET_TEXT(MSG_BED)) == 0) {
|
|
changePageOfTFT(PAGE_CHS_ABNORMAL_BED_NTC);
|
|
SERIAL_ECHOLNPGM("Check Bed thermistor");
|
|
}
|
|
else if (strcmp_P(component, PSTR("E1")) == 0) {
|
|
changePageOfTFT(PAGE_CHS_ABNORMAL_HOTEND_NTC);
|
|
SERIAL_ECHOLNPGM("Check E1 thermistor");
|
|
}
|
|
|
|
}
|
|
else if (strcmp_P(error, GET_TEXT(MSG_ERR_THERMAL_RUNAWAY)) == 0) {
|
|
|
|
if (strcmp_P(component, GET_TEXT(MSG_BED)) == 0) {
|
|
changePageOfTFT(PAGE_CHS_ABNORMAL_BED_HEATER);
|
|
SERIAL_ECHOLNPGM("Check Bed thermal runaway");
|
|
}
|
|
else if (strcmp_P(component, PSTR("E1")) == 0) {
|
|
changePageOfTFT(PAGE_CHS_ABNORMAL_HOTEND_HEATER);
|
|
SERIAL_ECHOLNPGM("Check E1 thermal runaway");
|
|
}
|
|
|
|
}
|
|
else if (strcmp_P(error, GET_TEXT(MSG_KILL_HOMING_FAILED)) == 0) {
|
|
|
|
if (strcmp_P(component, PSTR("X")) == 0) {
|
|
changePageOfTFT(PAGE_CHS_ABNORMAL_X_ENDSTOP);
|
|
SERIAL_ECHOLNPGM("Check X endstop");
|
|
}
|
|
else if (strcmp_P(component, PSTR("Y")) == 0) {
|
|
changePageOfTFT(PAGE_CHS_ABNORMAL_Y_ENDSTOP);
|
|
SERIAL_ECHOLNPGM("Check Y endstop");
|
|
}
|
|
else if (strcmp_P(component, PSTR("Z")) == 0) {
|
|
changePageOfTFT(PAGE_CHS_ABNORMAL_Z_ENDSTOP);
|
|
SERIAL_ECHOLNPGM("Check Z endstop");
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void DgusTFT::set_descript_color(const uint16_t color, const uint8_t index/*=lcd_txtbox_index*/) {
|
|
sendColorToTFT(color, TXT_DESCRIPT_0 + 0x30 * (index - 1));
|
|
}
|
|
|
|
void DgusTFT::mediaEvent(media_event_t event) {
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_PRINT_MEDIA_EVENT(event);
|
|
#endif
|
|
switch (event) {
|
|
case AC_media_inserted:
|
|
|
|
filenavigator.reset();
|
|
|
|
lcd_txtbox_page = 0;
|
|
if (lcd_txtbox_index) {
|
|
set_descript_color(COLOR_BLUE);
|
|
lcd_txtbox_index = 0;
|
|
}
|
|
|
|
sendFileList(lcd_txtbox_index);
|
|
|
|
break;
|
|
|
|
case AC_media_removed:
|
|
tftSendLn(AC_msg_sd_card_removed);
|
|
|
|
filenavigator.reset();
|
|
|
|
lcd_txtbox_page = 0;
|
|
if (lcd_txtbox_index) {
|
|
set_descript_color(COLOR_BLUE);
|
|
lcd_txtbox_index = 0;
|
|
}
|
|
|
|
sendFileList(lcd_txtbox_index);
|
|
break;
|
|
|
|
case AC_media_error:
|
|
tftSendLn(AC_msg_no_sd_card);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void DgusTFT::timerEvent(timer_event_t event) {
|
|
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_PRINT_TIMER_EVENT(event);
|
|
DEBUG_PRINT_PRINTER_STATE(printer_state);
|
|
#endif
|
|
|
|
switch (event) {
|
|
case AC_timer_started:
|
|
setSoftEndstopState(false); // disable endstops to print
|
|
printer_state = AC_printer_printing;
|
|
tftSendLn(AC_msg_print_from_sd_card);
|
|
break;
|
|
|
|
case AC_timer_paused:
|
|
//printer_state = AC_printer_paused;
|
|
//pause_state = AC_paused_idle;
|
|
tftSendLn(AC_msg_paused);
|
|
break;
|
|
|
|
case AC_timer_stopped:
|
|
if (printer_state != AC_printer_idle) {
|
|
if (printer_state == AC_printer_stopping_from_media_remove) {
|
|
changePageOfTFT(PAGE_NO_SD);
|
|
}
|
|
else {
|
|
printer_state = AC_printer_stopping;
|
|
|
|
// Get Printing Time
|
|
uint32_t time = getProgress_seconds_elapsed() / 60;
|
|
char str_buf[20];
|
|
sprintf(str_buf, "%s H ", utostr3(time / 60));
|
|
sprintf(str_buf + strlen(str_buf), "%s M", utostr3(time % 60));
|
|
sendTxtToTFT(str_buf, TXT_FINISH_TIME);
|
|
changePageOfTFT(PAGE_PRINT_FINISH);
|
|
tftSendLn(AC_msg_print_complete);
|
|
pop_up_index = 100;
|
|
}
|
|
}
|
|
setSoftEndstopState(true); // enable endstops
|
|
break;
|
|
}
|
|
}
|
|
|
|
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
|
|
|
|
void DgusTFT::filamentRunout() {
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_PRINT_PRINTER_STATE(printer_state, F("filamentRunout() "));
|
|
|
|
// 1 Signal filament out
|
|
tftSendLn(isPrintingFromMedia() ? AC_msg_filament_out_alert : AC_msg_filament_out_block);
|
|
//printer_state = AC_printer_filament_out;
|
|
|
|
DEBUG_ECHOLNPGM("getFilamentRunoutState: ", getFilamentRunoutState());
|
|
#endif
|
|
|
|
pop_up_index = 15; // show filament lack.
|
|
|
|
if (READ(FIL_RUNOUT_PIN) == FIL_RUNOUT_STATE) {
|
|
playTune(FilamentOut);
|
|
|
|
feedrate_back = getFeedrate_percent();
|
|
|
|
if (isPrintingFromMedia()) {
|
|
pausePrint();
|
|
printer_state = AC_printer_pausing;
|
|
pause_state = AC_paused_filament_lack;
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif // FILAMENT_RUNOUT_SENSOR
|
|
|
|
void DgusTFT::confirmationRequest(const char * const msg) {
|
|
// M108 continue
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("HomingComplete, line: ", __LINE__);
|
|
DEBUG_ECHOLNPGM("confirmationRequest() ", msg);
|
|
DEBUG_PRINT_PRINTER_STATE(printer_state);
|
|
DEBUG_PRINT_PAUSED_STATE(pause_state);
|
|
#endif
|
|
|
|
switch (printer_state) {
|
|
case AC_printer_pausing: {
|
|
if (strcmp_P(msg, MARLIN_msg_print_paused) == 0 || strcmp_P(msg, MARLIN_msg_nozzle_parked) == 0) {
|
|
if (pause_state != AC_paused_filament_lack)
|
|
changePageOfTFT(PAGE_STATUS1); // enable continue button
|
|
printer_state = AC_printer_paused;
|
|
}
|
|
}
|
|
break;
|
|
|
|
#if ENABLED(POWER_LOSS_RECOVERY)
|
|
case AC_printer_resuming_from_power_outage:
|
|
#endif
|
|
case AC_printer_printing:
|
|
case AC_printer_paused:
|
|
// Heater timout, send acknowledgement
|
|
if (strcmp_P(msg, MARLIN_msg_heater_timeout) == 0) {
|
|
pause_state = AC_paused_heater_timed_out;
|
|
tftSendLn(AC_msg_paused); // enable continue button
|
|
playTune(HeaterTimeout);
|
|
}
|
|
// Reheat finished, send acknowledgement
|
|
else if (strcmp_P(msg, MARLIN_msg_reheat_done) == 0) {
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("send M108 ", __LINE__);
|
|
#endif
|
|
injectCommands(F("M108"));
|
|
|
|
if (pause_state != AC_paused_filament_lack)
|
|
pause_state = AC_paused_idle;
|
|
|
|
tftSendLn(AC_msg_paused); // enable continue button
|
|
}
|
|
// Filament Purging, send acknowledgement enter run mode
|
|
else if (strcmp_P(msg, MARLIN_msg_filament_purging) == 0) {
|
|
pause_state = AC_paused_purging_filament;
|
|
tftSendLn(AC_msg_paused); // enable continue button
|
|
}
|
|
else if (strcmp_P(msg, MARLIN_msg_nozzle_parked) == 0) {
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("send M108 ", __LINE__);
|
|
#endif
|
|
injectCommands(F("M108"));
|
|
|
|
if (pause_state != AC_paused_filament_lack)
|
|
pause_state = AC_paused_idle;
|
|
}
|
|
|
|
break;
|
|
|
|
default: break;
|
|
}
|
|
}
|
|
|
|
void DgusTFT::statusChange(const char * const msg) {
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("statusChange() ", msg);
|
|
DEBUG_PRINT_PRINTER_STATE(printer_state);
|
|
DEBUG_PRINT_PAUSED_STATE(pause_state);
|
|
#endif
|
|
bool msg_matched = false;
|
|
|
|
#if HAS_LEVELING
|
|
static grid_count_t probe_cnt = 0;
|
|
#endif
|
|
|
|
// The only way to get printer status is to parse messages
|
|
// Use the state to minimise the work we do here.
|
|
switch (printer_state) {
|
|
#if HAS_LEVELING
|
|
case AC_printer_probing:
|
|
|
|
if (strncmp_P(msg, MARLIN_msg_probing_point, strlen_P(MARLIN_msg_probing_point)) == 0)
|
|
probe_cnt++;
|
|
|
|
// If probing completes ok save the mesh and park
|
|
// Ignore the custom machine name
|
|
if (strcmp_P(msg + strlen(MACHINE_NAME), MARLIN_msg_ready) == 0) {
|
|
if (probe_cnt == GRID_MAX_POINTS) {
|
|
probe_cnt = 0;
|
|
injectCommands(F("M500")); // G27 park nozzle
|
|
//changePageOfTFT(PAGE_PreLEVEL);
|
|
fakeChangePageOfTFT(PAGE_PreLEVEL); // Prevent UI refreshing too quickly when probing is done
|
|
printer_state = AC_printer_idle;
|
|
msg_matched = true;
|
|
}
|
|
}
|
|
|
|
// If probing fails don't save the mesh raise the probe above the bad point
|
|
if (strcmp_P(msg, MARLIN_msg_probing_failed) == 0) {
|
|
playTune(BeepBeepBeeep);
|
|
injectCommands(F("G1 Z50 F500"));
|
|
changePageOfTFT(PAGE_CHS_ABNORMAL_LEVELING_SENSOR);
|
|
tftSendLn(AC_msg_probing_complete);
|
|
printer_state = AC_printer_idle;
|
|
msg_matched = true;
|
|
}
|
|
|
|
if (strcmp_P(msg, MARLIN_msg_probe_preheat_start) == 0)
|
|
changePageOfTFT(PAGE_CHS_PROBE_PREHEATING);
|
|
|
|
if (strcmp_P(msg, MARLIN_msg_probe_preheat_stop) == 0)
|
|
changePageOfTFT(PAGE_LEVELING);
|
|
|
|
break;
|
|
#endif
|
|
|
|
case AC_printer_printing:
|
|
if (strcmp_P(msg, MARLIN_msg_reheating) == 0) {
|
|
tftSendLn(AC_msg_paused); // enable continue button
|
|
changePageOfTFT(PAGE_STATUS2);
|
|
msg_matched = true;
|
|
}
|
|
else if (strcmp_P(msg, MARLIN_msg_media_removed) == 0) {
|
|
msg_matched = true;
|
|
printer_state = AC_printer_stopping_from_media_remove;
|
|
}
|
|
else {
|
|
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("setFilamentRunoutState: ", __LINE__);
|
|
#endif
|
|
setFilamentRunoutState(false);
|
|
#endif
|
|
}
|
|
break;
|
|
|
|
case AC_printer_pausing:
|
|
if (strcmp_P(msg, MARLIN_msg_print_paused) == 0) {
|
|
if (pause_state != AC_paused_filament_lack) {
|
|
changePageOfTFT(PAGE_STATUS1); // show resume
|
|
pause_state = AC_paused_idle;
|
|
}
|
|
|
|
printer_state = AC_printer_paused;
|
|
msg_matched = true;
|
|
}
|
|
break;
|
|
|
|
case AC_printer_paused:
|
|
if (strcmp_P(msg, MARLIN_msg_print_paused) == 0) {
|
|
if (pause_state != AC_paused_filament_lack) {
|
|
changePageOfTFT(PAGE_STATUS1); // show resume
|
|
pause_state = AC_paused_idle;
|
|
}
|
|
|
|
printer_state = AC_printer_paused;
|
|
msg_matched = true;
|
|
}
|
|
break;
|
|
|
|
case AC_printer_stopping:
|
|
if (strcmp_P(msg, MARLIN_msg_print_aborted) == 0) {
|
|
changePageOfTFT(PAGE_MAIN);
|
|
printer_state = AC_printer_idle;
|
|
msg_matched = true;
|
|
}
|
|
break;
|
|
|
|
default: break;
|
|
}
|
|
|
|
// If not matched earlier see if this was a heater message
|
|
if (!msg_matched) {
|
|
#if HAS_HOTEND
|
|
if (strcmp_P(msg, MARLIN_msg_extruder_heating) == 0) {
|
|
tftSendLn(AC_msg_nozzle_heating);
|
|
hotend_state = AC_heater_temp_set;
|
|
return;
|
|
}
|
|
#endif
|
|
#if HAS_HEATED_BED
|
|
if (strcmp_P(msg, MARLIN_msg_bed_heating) == 0) {
|
|
tftSendLn(AC_msg_bed_heating);
|
|
hotbed_state = AC_heater_temp_set;
|
|
}
|
|
#endif
|
|
}
|
|
}
|
|
|
|
#if ENABLED(POWER_LOSS_RECOVERY)
|
|
|
|
void DgusTFT::powerLossRecovery() {
|
|
printer_state = AC_printer_resuming_from_power_outage; // Play tune to notify user we can recover.
|
|
}
|
|
|
|
#endif // POWER_LOSS_RECOVERY
|
|
|
|
void DgusTFT::homingStart() {
|
|
if (!isPrintingFromMedia())
|
|
changePageOfTFT(PAGE_CHS_HOMING);
|
|
}
|
|
|
|
void DgusTFT::homingComplete() {
|
|
if (lcd_info.language == ENG && page_index_last > 120)
|
|
page_index_last -= 120;
|
|
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("HomingComplete, line: ", __LINE__);
|
|
DEBUG_ECHOLNPGM("page_index_last: ", page_index_last);
|
|
#endif
|
|
|
|
if (!isPrintingFromMedia())
|
|
changePageOfTFT(page_index_last);
|
|
}
|
|
|
|
void DgusTFT::tftSend(FSTR_P const fstr/*=nullptr*/) { // A helper to print PROGMEM string to the panel
|
|
#if ACDEBUG(AC_SOME)
|
|
DEBUG_ECHO(fstr);
|
|
#endif
|
|
PGM_P str = FTOP(fstr);
|
|
while (const char c = pgm_read_byte(str++)) TFTSer.write(c);
|
|
}
|
|
|
|
void DgusTFT::tftSendLn(FSTR_P const fstr/*=nullptr*/) {
|
|
if (fstr) {
|
|
#if ACDEBUG(AC_SOME)
|
|
DEBUG_ECHOPGM("> ");
|
|
#endif
|
|
tftSend(fstr);
|
|
#if ACDEBUG(AC_SOME)
|
|
SERIAL_EOL();
|
|
#endif
|
|
}
|
|
TFTSer.println();
|
|
}
|
|
|
|
void DgusTFT::sendValueToTFT(const uint16_t value, const uint16_t address) {
|
|
uint8_t data[] = { 0x5A, 0xA5, 0x05, 0x82, uint8_t(address >> 8), uint8_t(address & 0xFF), uint8_t(value >> 8), uint8_t(value & 0xFF) };
|
|
for (uint8_t i = 0; i < COUNT(data); ++i) TFTSer.write(data[i]);
|
|
}
|
|
|
|
void DgusTFT::requestValueFromTFT(const uint16_t address) {
|
|
uint8_t data[] = { 0x5A, 0xA5, 0x04, 0x83, uint8_t(address >> 8), uint8_t(address & 0xFF), 0x01 };
|
|
for (uint8_t i = 0; i < COUNT(data); ++i) TFTSer.write(data[i]);
|
|
}
|
|
|
|
void DgusTFT::sendTxtToTFT(const char *pdata, const uint16_t address) {
|
|
uint8_t data_len = strlen(pdata);
|
|
uint8_t data[] = { 0x5A, 0xA5, uint8_t(data_len + 5), 0x82, uint8_t(address >> 8), uint8_t(address & 0xFF) };
|
|
for (uint8_t i = 0; i < COUNT(data); ++i) TFTSer.write(data[i]);
|
|
for (uint8_t i = 0; i < data_len; ++i) TFTSer.write(pdata[i]);
|
|
TFTSer.write(0xFF); TFTSer.write(0xFF);
|
|
}
|
|
|
|
void DgusTFT::sendColorToTFT(const uint16_t color, const uint16_t address) {
|
|
uint8_t data[] = { 0x5A, 0xA5, 0x05, 0x82, uint8_t(address >> 8), uint8_t(address & 0xFF), uint8_t(color >> 8), uint8_t(color & 0xFF) };
|
|
for (uint8_t i = 0; i < COUNT(data); ++i) TFTSer.write(data[i]);
|
|
}
|
|
|
|
void DgusTFT::sendReadNumOfTxtToTFT(const uint8_t number, const uint16_t address) {
|
|
uint8_t data[] = { 0x5A, 0xA5, 0x04, 0x83, uint8_t(address >> 8), uint8_t(address & 0xFF), number };
|
|
for (uint8_t i = 0; i < COUNT(data); ++i) TFTSer.write(data[i]);
|
|
}
|
|
|
|
void DgusTFT::changePageOfTFT(const uint16_t page_index, const bool no_send/*=false*/) {
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("changePageOfTFT: ", page_index);
|
|
#endif
|
|
|
|
uint32_t data_temp = 0;
|
|
|
|
if (lcd_info.language == CHS) {
|
|
data_temp = page_index;
|
|
}
|
|
else if (lcd_info.language == ENG) {
|
|
switch (page_index) {
|
|
case PAGE_OUTAGE_RECOVERY:
|
|
data_temp = PAGE_ENG_OUTAGE_RECOVERY; break;
|
|
case PAGE_CHS_PROBE_PREHEATING:
|
|
data_temp = PAGE_ENG_PROBE_PREHEATING; break;
|
|
case PAGE_CHS_HOMING ... PAGE_ENG_HOMING:
|
|
data_temp = page_index + 12; break;
|
|
case PAGE_CHS_PROBE_PRECHECK ... PAGE_CHS_PROBE_PRECHECK_FAILED:
|
|
data_temp = page_index + 3; break;
|
|
default:
|
|
data_temp = page_index + 120; break;
|
|
}
|
|
}
|
|
|
|
if (!no_send) {
|
|
uint8_t data[] = { 0x5A, 0xA5, 0x07, 0x82, 0x00, 0x84, 0x5A, 0x01, uint8_t(data_temp >> 8), uint8_t(data_temp & 0xFF) };
|
|
for (uint8_t i = 0; i < COUNT(data); ++i) TFTSer.write(data[i]);
|
|
}
|
|
|
|
page_index_last_2 = page_index_last;
|
|
page_index_last = page_index_now;
|
|
page_index_now = data_temp;
|
|
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("page_index_last_2: ", page_index_last_2);
|
|
DEBUG_ECHOLNPGM("page_index_last: ", page_index_last);
|
|
DEBUG_ECHOLNPGM("page_index_now: ", page_index_now);
|
|
#endif
|
|
}
|
|
|
|
void DgusTFT::fakeChangePageOfTFT(const uint16_t page_index) {
|
|
#if ACDEBUG(AC_MARLIN)
|
|
if (page_index_saved != page_index_now)
|
|
DEBUG_ECHOLNPGM("fakeChangePageOfTFT: ", page_index);
|
|
#endif
|
|
changePageOfTFT(page_index, true);
|
|
}
|
|
|
|
void DgusTFT::lcdAudioSet(const bool audio_on) {
|
|
// On: 5A A5 07 82 00 80 5A 00 00 1A
|
|
// Off: 5A A5 07 82 00 80 5A 00 00 12
|
|
uint8_t data[] = { 0x5A, 0xA5, 0x07, 0x82, 0x00, 0x80, 0x5A, 0x00, 0x00, uint8_t(audio_on ? 0x1A : 0x12) };
|
|
for (uint8_t i = 0; i < 10; ++i) TFTSer.write(data[i]);
|
|
}
|
|
|
|
bool DgusTFT::readTFTCommand() {
|
|
static uint8_t length = 0, cnt = 0, tft_receive_steps = 0;
|
|
uint8_t data;
|
|
|
|
if (0 == TFTSer.available() || data_received) return false;
|
|
|
|
data = TFTSer.read();
|
|
|
|
if (tft_receive_steps == 0) {
|
|
if (data != 0x5A) {
|
|
cnt = 0;
|
|
length = 0;
|
|
data_index = 0;
|
|
data_received = false;
|
|
return false;
|
|
}
|
|
|
|
while (!TFTSer.available()) TERN_(USE_WATCHDOG, hal.watchdog_refresh());
|
|
|
|
data = TFTSer.read();
|
|
// MYSERIAL.write(data );
|
|
if (data == 0xA5) tft_receive_steps = 2;
|
|
}
|
|
else if (tft_receive_steps == 2) {
|
|
length = data;
|
|
tft_receive_steps = 3;
|
|
data_index = 0;
|
|
cnt = 0;
|
|
}
|
|
else if (tft_receive_steps == 3) {
|
|
if (data_index >= (DATA_BUF_SIZE -1)) {
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("lcd uart buff overflow: ", data_index);
|
|
#endif
|
|
data_index = 0;
|
|
data_received = false;
|
|
return false;
|
|
}
|
|
data_buf[data_index++] = data;
|
|
cnt++;
|
|
if (cnt >= length) { // Receive complete
|
|
tft_receive_steps = 0;
|
|
cnt = 0;
|
|
data_index = 0;
|
|
data_received = true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
#if 0
|
|
{
|
|
//SERIAL_ECHOLNPGM("readTFTCommand: ", millis());
|
|
//return -1;
|
|
|
|
bool command_ready = false;
|
|
uint8_t data = 0;
|
|
|
|
while (TFTSer.available() > 0 && command_len < MAX_CMND_LEN) {
|
|
data = TFTSer.read();
|
|
if (0 == command_len) {
|
|
// if
|
|
}
|
|
|
|
panel_command[command_len] =
|
|
if (panel_command[command_len] == '\n') {
|
|
command_ready = true;
|
|
break;
|
|
}
|
|
command_len++;
|
|
}
|
|
|
|
if (command_ready) {
|
|
panel_command[command_len] = 0x00;
|
|
#if ACDEBUG(AC_ALL)
|
|
DEBUG_ECHOLNPGM("< panel_command ", panel_command);
|
|
#endif
|
|
#if ACDEBUG(AC_SOME)
|
|
// Ignore status request commands
|
|
uint8_t req = atoi(&panel_command[1]);
|
|
if (req > 7 && req != 20) {
|
|
DEBUG_ECHOLNPGM("> ", panel_command);
|
|
DEBUG_PRINT_PRINTER_STATE(printer_state);
|
|
}
|
|
#endif
|
|
}
|
|
return command_ready;
|
|
}
|
|
#endif
|
|
|
|
int8_t DgusTFT::findCmdPos(const char * buff, const char q) {
|
|
for (int8_t pos = 0; pos < MAX_CMND_LEN; ++pos)
|
|
if (buff[pos] == q) return pos;
|
|
return -1;
|
|
}
|
|
|
|
void DgusTFT::checkHeaters() {
|
|
static uint32_t time_next = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, time_next)) return;
|
|
time_next = ms + 500;
|
|
|
|
float temp = 0;
|
|
|
|
#if HAS_HOTEND
|
|
// If the hotend temp is abnormal, confirm state before signalling panel
|
|
static uint8_t faultE0Duration = 0;
|
|
temp = getActualTemp_celsius(E0);
|
|
if (!WITHIN(temp, HEATER_0_MINTEMP, HEATER_0_MAXTEMP)) {
|
|
faultE0Duration++;
|
|
if (faultE0Duration >= AC_HEATER_FAULT_VALIDATION_TIME) {
|
|
tftSendLn(AC_msg_nozzle_temp_abnormal);
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("Extruder temp abnormal! : ", temp);
|
|
#endif
|
|
faultE0Duration = 0;
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#if HAS_HEATED_BED
|
|
static uint8_t faultBedDuration = 0;
|
|
temp = getActualTemp_celsius(BED);
|
|
if (!WITHIN(temp, BED_MINTEMP, BED_MAXTEMP)) {
|
|
faultBedDuration++;
|
|
if (faultBedDuration >= AC_HEATER_FAULT_VALIDATION_TIME) {
|
|
tftSendLn(AC_msg_bed_temp_abnormal);
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("Bed temp abnormal! : ", temp);
|
|
#endif
|
|
faultBedDuration = 0;
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#if 0
|
|
// Update panel with hotend heater status
|
|
if (hotend_state != AC_heater_temp_reached) {
|
|
if (WITHIN(getActualTemp_celsius(E0) - getTargetTemp_celsius(E0), -1, 1)) {
|
|
tftSendLn(AC_msg_nozzle_heating_done);
|
|
hotend_state = AC_heater_temp_reached;
|
|
}
|
|
}
|
|
|
|
// Update panel with bed heater status
|
|
if (hotbed_state != AC_heater_temp_reached) {
|
|
if (WITHIN(getActualTemp_celsius(BED) - getTargetTemp_celsius(BED), -0.5, 0.5)) {
|
|
tftSendLn(AC_msg_bed_heating_done);
|
|
hotbed_state = AC_heater_temp_reached;
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void DgusTFT::sendFileList(int8_t startindex) {
|
|
// Respond to panel request for 4 files starting at index
|
|
#if ACDEBUG(AC_INFO)
|
|
DEBUG_ECHOLNPGM("## sendFileList ## ", startindex);
|
|
#endif
|
|
filenavigator.getFiles(startindex);
|
|
}
|
|
|
|
void DgusTFT::selectFile() {
|
|
strlcpy(selectedfile, panel_command + 4, command_len - 3);
|
|
#if ACDEBUG(AC_FILE)
|
|
DEBUG_ECHOLNPGM(" Selected File: ", selectedfile);
|
|
#endif
|
|
switch (selectedfile[0]) {
|
|
case '/': // Valid file selected
|
|
tftSendLn(AC_msg_sd_file_open_success);
|
|
break;
|
|
case '<': // .. (go up folder level)
|
|
filenavigator.upDIR();
|
|
tftSendLn(AC_msg_sd_file_open_failed);
|
|
sendFileList(0);
|
|
break;
|
|
default: // enter sub folder
|
|
filenavigator.changeDIR(selectedfile);
|
|
tftSendLn(AC_msg_sd_file_open_failed);
|
|
sendFileList(0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void DgusTFT::processPanelRequest() {
|
|
uint16_t control_index = 0;
|
|
uint32_t control_value;
|
|
uint16_t temp;
|
|
char str_buf[20];
|
|
|
|
if (data_received) {
|
|
data_received = false;
|
|
|
|
if (0x83 == data_buf[0]) {
|
|
control_index = uint16_t(data_buf[1] << 8) | uint16_t(data_buf[2]);
|
|
if ((control_index & 0xF000) == KEY_ADDRESS) { // is KEY
|
|
//key_index = control_index;
|
|
key_value = (uint16_t(data_buf[4]) << 8) | uint16_t(data_buf[5]);
|
|
}
|
|
|
|
#if HAS_HOTEND
|
|
else if (control_index == TXT_HOTEND_TARGET || control_index == TXT_ADJUST_HOTEND) { // hotend target temp
|
|
control_value = (uint16_t(data_buf[4]) << 8) | uint16_t(data_buf[5]);
|
|
temp = constrain(uint16_t(control_value), 0, thermalManager.hotend_max_target(0));
|
|
setTargetTemp_celsius(temp, E0);
|
|
//sprintf(str_buf,"%u/%u", (uint16_t)thermalManager.degHotend(0), uint16_t(control_value));
|
|
//sendTxtToTFT(str_buf, TXT_PRINT_HOTEND);
|
|
}
|
|
#endif
|
|
|
|
#if HAS_HEATED_BED
|
|
else if (control_index == TXT_BED_TARGET || control_index == TXT_ADJUST_BED) {// bed target temp
|
|
control_value = (uint16_t(data_buf[4]) << 8) | uint16_t(data_buf[5]);
|
|
temp = constrain(uint16_t(control_value), 0, BED_MAX_TARGET);
|
|
setTargetTemp_celsius(temp, BED);
|
|
//sprintf(str_buf,"%u/%u", uint16_t(thermalManager.degBed()), uint16_t(control_value));
|
|
//sendTxtToTFT(str_buf, TXT_PRINT_BED);
|
|
}
|
|
#endif
|
|
|
|
#if HAS_FAN
|
|
else if (control_index == TXT_FAN_SPEED_TARGET) { // fan speed
|
|
control_value = (uint16_t(data_buf[4]) << 8) | uint16_t(data_buf[5]);
|
|
temp = constrain(uint16_t(control_value), 0, 100);
|
|
sendValueToTFT(temp, TXT_FAN_SPEED_NOW);
|
|
sendValueToTFT(temp, TXT_FAN_SPEED_TARGET);
|
|
setTargetFan_percent(temp, FAN0);
|
|
}
|
|
#endif
|
|
|
|
else if (control_index == TXT_PRINT_SPEED_TARGET || control_index == TXT_ADJUST_SPEED) { // print speed
|
|
control_value = (uint16_t(data_buf[4]) << 8) | uint16_t(data_buf[5]);
|
|
const uint16_t feedrate = constrain(uint16_t(control_value), 40, 999);
|
|
//feedrate_percentage=constrain(control_value,40,999);
|
|
sprintf(str_buf, "%u", feedrate);
|
|
sendTxtToTFT(str_buf, TXT_PRINT_SPEED);
|
|
sendValueToTFT(feedrate, TXT_PRINT_SPEED_NOW);
|
|
sendValueToTFT(feedrate, TXT_PRINT_SPEED_TARGET);
|
|
setFeedrate_percent(feedrate);
|
|
}
|
|
|
|
else if (control_index == REG_LCD_READY) {
|
|
control_value = (uint32_t(data_buf[3]) << 16) | (uint32_t(data_buf[4]) << 8) | uint32_t(data_buf[5]);
|
|
if (control_value == 0x010072) { // startup last gif
|
|
lcdAudioSet(lcd_info.audio_on);
|
|
|
|
sendValueToTFT(2, ADDRESS_MOVE_DISTANCE);
|
|
|
|
#if ENABLED(CASE_LIGHT_ENABLE)
|
|
sendValueToTFT(getCaseLightState(), ADDRESS_SYSTEM_LED_STATUS);
|
|
sendValueToTFT(getCaseLightState(), ADDRESS_PRINT_SETTING_LED_STATUS);
|
|
#endif
|
|
|
|
#if ENABLED(POWER_LOSS_RECOVERY)
|
|
const bool is_outage = AC_printer_resuming_from_power_outage == printer_state;
|
|
if (is_outage) {
|
|
changePageOfTFT(PAGE_OUTAGE_RECOVERY);
|
|
#if ENABLED(LONG_FILENAME_HOST_SUPPORT)
|
|
char filename[64] = { '\0' };
|
|
card.getLongPath(filename, recovery.info.sd_filename);
|
|
sendTxtToTFT(filename, TXT_OUTAGE_RECOVERY_FILE);
|
|
#else
|
|
sendTxtToTFT(recovery.info.sd_filename, TXT_OUTAGE_RECOVERY_FILE);
|
|
#endif
|
|
playTune(SOS);
|
|
}
|
|
#else
|
|
constexpr bool is_outage = false;
|
|
#endif
|
|
|
|
if (!is_outage) changePageOfTFT(PAGE_MAIN);
|
|
|
|
}
|
|
else if (control_value == 0x010000) { // startup first gif
|
|
// startup tunes are defined in Tunes.h
|
|
playTune(Anycubic_PowerOn); // takes 3500 ms
|
|
}
|
|
}
|
|
|
|
/*
|
|
else if ((control_index & 0xF000) == 0x2000) { // is TXT ADDRESS
|
|
tft_txt_index = control_index;
|
|
j = 0;
|
|
for (i = 4; ;i++) {
|
|
tft_txt_buf[j] = data_buf[i];
|
|
if (tft_txt_buf[j] == 0xFF) {
|
|
tft_txt_buf[j] = 0;
|
|
break;
|
|
}
|
|
j++;
|
|
}
|
|
}
|
|
*/
|
|
}
|
|
else if (0x82 == data_buf[0]) {
|
|
// send_cmd_to_pc(cmd ,start );
|
|
}
|
|
}
|
|
}
|
|
|
|
#if 0
|
|
{
|
|
// Break these up into logical blocks // as its easier to navigate than one huge switch case!
|
|
int8_t req = atoi(&panel_command[1]);
|
|
|
|
// Information requests A0 - A8 and A33
|
|
if (req <= 8 || req == 33) panelInfo(req);
|
|
|
|
// Simple Actions A9 - A28
|
|
else if (req <= 28) panelAction(req);
|
|
|
|
// Process Initiation
|
|
else if (req <= 34) panelProcess(req);
|
|
|
|
else tftSendLn();
|
|
}
|
|
#endif
|
|
|
|
void set_brightness() {
|
|
uint8_t data[] = { 0x5A, 0xA5, 0x07, 0x82, 0x00, 0x82, 0x64, 0x32, 0x03, 0xE8 };
|
|
for (uint8_t i = 0; i < COUNT(data); ++i) TFTSer.write(data[i]);
|
|
}
|
|
|
|
void DgusTFT::set_language(language_t language) {
|
|
lcd_info.language = ui_language = lcd_info_back.language = language;
|
|
}
|
|
|
|
void DgusTFT::toggle_language() {
|
|
lcd_info.language = ui_language = (lcd_info.language == CHS ? ENG : CHS);
|
|
}
|
|
|
|
void DgusTFT::goto_system_page() {
|
|
changePageOfTFT(lcd_info.language == CHS
|
|
? (lcd_info.audio_on ? PAGE_SYSTEM_CHS_AUDIO_ON : PAGE_SYSTEM_CHS_AUDIO_OFF)
|
|
: (lcd_info.audio_on ? 11 : 50) // PAGE_SYSTEM_ENG_AUDIO_ON/OFF - 120
|
|
);
|
|
}
|
|
|
|
void DgusTFT::toggle_audio() {
|
|
lcd_info.audio_on = !lcd_info.audio_on;
|
|
goto_system_page();
|
|
lcdAudioSet(lcd_info.audio_on);
|
|
}
|
|
|
|
void DgusTFT::store_changes() {
|
|
if (lcd_info_back.language != lcd_info.language || lcd_info_back.audio_on != lcd_info.audio_on) {
|
|
lcd_info_back = lcd_info;
|
|
injectCommands(F("M500"));
|
|
}
|
|
}
|
|
|
|
#if HAS_HOTEND
|
|
void DgusTFT::send_temperature_hotend(uint32_t addr) {
|
|
char str_buf[16];
|
|
sprintf(str_buf, "%u/%u", uint16_t(getActualTemp_celsius(E0)), uint16_t(getTargetTemp_celsius(E0)));
|
|
sendTxtToTFT(str_buf, addr);
|
|
}
|
|
#endif
|
|
|
|
#if HAS_HEATED_BED
|
|
void DgusTFT::send_temperature_bed(uint32_t addr) {
|
|
char str_buf[16];
|
|
sprintf(str_buf, "%u/%u", uint16_t(getActualTemp_celsius(BED)), uint16_t(getTargetTemp_celsius(BED)));
|
|
sendTxtToTFT(str_buf, addr);
|
|
}
|
|
#endif
|
|
|
|
void DgusTFT::page1() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if (page_index_saved != page_index_now || key_value_saved != key_value) {
|
|
DEBUG_ECHOLNPGM("page1 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: { // main page, print
|
|
lcd_txtbox_page = 0;
|
|
if (lcd_txtbox_index) {
|
|
set_descript_color(COLOR_BLUE);
|
|
lcd_txtbox_index = 0;
|
|
}
|
|
changePageOfTFT(PAGE_FILE);
|
|
sendFileList(0);
|
|
} break;
|
|
|
|
case 2: { // tool
|
|
changePageOfTFT(PAGE_TOOL);
|
|
#if ENABLED(CASE_LIGHT_ENABLE)
|
|
sendValueToTFT(getCaseLightState(), ADDRESS_SYSTEM_LED_STATUS);
|
|
#endif
|
|
} break;
|
|
|
|
case 3: // prepare
|
|
changePageOfTFT(PAGE_PREPARE);
|
|
break;
|
|
|
|
case 4: // system
|
|
goto_system_page();
|
|
break;
|
|
}
|
|
|
|
#if 0
|
|
if (message_index < 30) {
|
|
sendTxtToTFT(p_mesage[message_index], TXT_MAIN_MESSAGE);
|
|
message_index = 30;
|
|
}
|
|
#endif
|
|
|
|
#if HAS_HOTEND || HAS_HEATED_BED
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1500;
|
|
|
|
TERN_(HAS_HOTEND, send_temperature_hotend(TXT_PREHEAT_HOTEND));
|
|
TERN_(HAS_HEATED_BED, send_temperature_bed(TXT_PREHEAT_BED));
|
|
#endif
|
|
}
|
|
|
|
void DgusTFT::page2() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page2 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
char file_index = 0;
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: // return
|
|
changePageOfTFT(PAGE_MAIN);
|
|
set_descript_color(COLOR_BLUE);
|
|
break;
|
|
|
|
case 2: // page up
|
|
if (lcd_txtbox_page > 0) {
|
|
lcd_txtbox_page--;
|
|
|
|
set_descript_color(COLOR_BLUE);
|
|
lcd_txtbox_index = 0;
|
|
|
|
sendFileList(lcd_txtbox_page * 5);
|
|
}
|
|
break;
|
|
|
|
case 3: // page down
|
|
if ((lcd_txtbox_page + 1) * 5 < filenavigator.getFileNum()) {
|
|
lcd_txtbox_page++;
|
|
|
|
set_descript_color(COLOR_BLUE);
|
|
lcd_txtbox_index = 0;
|
|
|
|
sendFileList(lcd_txtbox_page * 5);
|
|
}
|
|
break;
|
|
|
|
case 4: // page refresh
|
|
if (!isMediaMounted()) safe_delay(500);
|
|
|
|
filenavigator.reset();
|
|
|
|
lcd_txtbox_page = 0;
|
|
if (lcd_txtbox_index) {
|
|
set_descript_color(COLOR_BLUE);
|
|
lcd_txtbox_index = 0;
|
|
}
|
|
sendFileList(lcd_txtbox_index);
|
|
break;
|
|
|
|
case 5: // resume of outage(last power off)
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_PRINT_PRINTER_STATE(printer_state);
|
|
#endif
|
|
if (lcd_txtbox_index > 0 && lcd_txtbox_index < 6) { // 1~5
|
|
|
|
if (filenavigator.filelist.seek(lcd_txtbox_page * 5 + (lcd_txtbox_index - 1))) {
|
|
|
|
set_descript_color(COLOR_BLUE);
|
|
|
|
TERN_(CASE_LIGHT_ENABLE, setCaseLightState(true));
|
|
|
|
char str_buf[20];
|
|
strlcpy_P(str_buf, filenavigator.filelist.longFilename(), 18);
|
|
sendTxtToTFT(str_buf, TXT_PRINT_NAME);
|
|
|
|
#if ENABLED(POWER_LOSS_RECOVERY)
|
|
if (printer_state == AC_printer_resuming_from_power_outage) {
|
|
// Need to home here to restore the Z position
|
|
//injectCommands(AC_cmnd_power_loss_recovery);
|
|
//SERIAL_ECHOLNPGM("start resuming from power outage: ", AC_cmnd_power_loss_recovery);
|
|
changePageOfTFT(PAGE_STATUS2); // show pause
|
|
injectCommands(F("M1000")); // home and start recovery
|
|
}
|
|
#endif
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 6: // start print
|
|
if (lcd_txtbox_index > 0 && lcd_txtbox_index < 6) { // 1~5
|
|
|
|
if (filenavigator.filelist.seek(lcd_txtbox_page * 5 + lcd_txtbox_index - 1)) {
|
|
#if 0
|
|
SERIAL_ECHOLNPGM("start print: ", lcd_txtbox_page * 5 + (lcd_txtbox_index - 1));
|
|
SERIAL_ECHOLNPGM("start print: ", filenavigator.filelist.shortFilename());
|
|
SERIAL_ECHOLNPGM("start print: ", filenavigator.filelist.longFilename());
|
|
#endif
|
|
|
|
set_descript_color(COLOR_BLUE);
|
|
|
|
// Allows printer to restart the job if we don't want to recover
|
|
if (printer_state == AC_printer_resuming_from_power_outage) {
|
|
injectCommands(F("M1000 C")); // Cancel recovery
|
|
printer_state = AC_printer_idle;
|
|
}
|
|
|
|
TERN_(CASE_LIGHT_ENABLE, setCaseLightState(true));
|
|
printFile(filenavigator.filelist.shortFilename());
|
|
|
|
char str_buf[20];
|
|
strlcpy_P(str_buf, filenavigator.filelist.longFilename(), 18);
|
|
sendTxtToTFT(str_buf, TXT_PRINT_NAME);
|
|
|
|
sprintf(str_buf, "%5.2f", getFeedrate_percent());
|
|
sendTxtToTFT(str_buf, TXT_PRINT_SPEED);
|
|
|
|
sprintf(str_buf, "%u", uint16_t(getProgress_percent()));
|
|
sendTxtToTFT(str_buf, TXT_PRINT_PROGRESS);
|
|
|
|
uint32_t time = 0;
|
|
sprintf(str_buf, "%s H ", utostr3(time / 60));
|
|
sprintf(str_buf + strlen(str_buf), "%s M", utostr3(time % 60));
|
|
sendTxtToTFT(str_buf, TXT_PRINT_TIME);
|
|
|
|
changePageOfTFT(PAGE_STATUS2);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 7: // txtbox 1 click
|
|
case 8: // txtbox 2 click
|
|
case 9: // txtbox 3 click
|
|
case 10: // txtbox 4 click
|
|
|
|
case 11: { // txtbox 5 click
|
|
static uint8_t lcd_txtbox_index_last = 0;
|
|
|
|
lcd_txtbox_index = key_value - 6;
|
|
|
|
// lcd_txtbox_page 0~...
|
|
// lcd_txtbox_index 1~5
|
|
file_index = lcd_txtbox_page * 5 + (lcd_txtbox_index - 1);
|
|
if (file_index < filenavigator.getFileNum()) {
|
|
|
|
set_descript_color(COLOR_RED);
|
|
|
|
if (lcd_txtbox_index_last && lcd_txtbox_index_last != lcd_txtbox_index) // 1~5
|
|
set_descript_color(COLOR_BLUE, lcd_txtbox_index_last);
|
|
lcd_txtbox_index_last = lcd_txtbox_index;
|
|
}
|
|
} break;
|
|
}
|
|
}
|
|
|
|
void DgusTFT::page3() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page3 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
char str_buf[20];
|
|
static uint8_t progress_last = 0;
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: // return
|
|
if (!isPrintingFromMedia()) // only idle status can return
|
|
changePageOfTFT(PAGE_FILE);
|
|
break;
|
|
|
|
case 2: // resume print
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_PRINT_PRINTER_STATE(printer_state);
|
|
DEBUG_PRINT_PAUSED_STATE(pause_state);
|
|
#endif
|
|
if ( pause_state == AC_paused_idle
|
|
|| pause_state == AC_paused_filament_lack
|
|
|| printer_state == AC_printer_resuming_from_power_outage
|
|
) {
|
|
printer_state = AC_printer_idle;
|
|
pause_state = AC_paused_idle;
|
|
resumePrint();
|
|
changePageOfTFT(PAGE_STATUS2); // show pause print
|
|
flash_time = ms + 1500;
|
|
}
|
|
else
|
|
setUserConfirmed();
|
|
break;
|
|
|
|
case 3: // print stop
|
|
if (isPrintingFromMedia())
|
|
changePageOfTFT(PAGE_STOP_CONF);
|
|
break;
|
|
|
|
case 4: // print change param
|
|
changePageOfTFT(PAGE_ADJUST);
|
|
TERN_(CASE_LIGHT_ENABLE, sendValueToTFT(getCaseLightState(), ADDRESS_PRINT_SETTING_LED_STATUS));
|
|
TERN_(HAS_HOTEND, sendValueToTFT(uint16_t(getTargetTemp_celsius(E0)), TXT_ADJUST_HOTEND));
|
|
TERN_(HAS_HEATED_BED, sendValueToTFT(uint16_t(getTargetTemp_celsius(BED)), TXT_ADJUST_BED));
|
|
feedrate_back = getFeedrate_percent();
|
|
sendValueToTFT(uint16_t(feedrate_back), TXT_ADJUST_SPEED);
|
|
flash_time = ms + 1500;
|
|
break;
|
|
}
|
|
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1500;
|
|
|
|
if (feedrate_back != getFeedrate_percent()) {
|
|
if (getFeedrate_percent() != 0)
|
|
sprintf(str_buf, "%5.2f", getFeedrate_percent());
|
|
else
|
|
sprintf(str_buf, "%d", feedrate_back);
|
|
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("print speed: ", str_buf);
|
|
DEBUG_ECHOLNPGM("feedrate_back: ", feedrate_back);
|
|
#endif
|
|
sendTxtToTFT(str_buf, TXT_PRINT_SPEED);
|
|
feedrate_back = getFeedrate_percent();
|
|
}
|
|
|
|
if (progress_last != getProgress_percent()) {
|
|
sprintf(str_buf, "%u", getProgress_percent());
|
|
sendTxtToTFT(str_buf, TXT_PRINT_PROGRESS);
|
|
progress_last = getProgress_percent();
|
|
}
|
|
|
|
// Get Printing Time
|
|
uint32_t time = getProgress_seconds_elapsed() / 60;
|
|
sprintf(str_buf, "%s H ", utostr3(time / 60));
|
|
sprintf(str_buf + strlen(str_buf), "%s M", utostr3(time % 60));
|
|
sendTxtToTFT(str_buf, TXT_PRINT_TIME);
|
|
|
|
TERN_(HAS_HOTEND, send_temperature_hotend(TXT_PRINT_HOTEND));
|
|
TERN_(HAS_HEATED_BED, send_temperature_bed(TXT_PRINT_BED));
|
|
}
|
|
|
|
void DgusTFT::page4() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page4 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
char str_buf[20];
|
|
static uint8_t progress_last = 0;
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: // return
|
|
if (!isPrintingFromMedia()) // only is idle status can return
|
|
changePageOfTFT(PAGE_FILE);
|
|
break;
|
|
|
|
case 2: // print pause
|
|
if (isPrintingFromMedia()) {
|
|
pausePrint();
|
|
printer_state = AC_printer_pausing;
|
|
pause_state = AC_paused_idle;
|
|
changePageOfTFT(PAGE_WAIT_PAUSE);
|
|
//injectCommands(F("M108")); // stop waiting temperature M109
|
|
}
|
|
break;
|
|
|
|
case 3: // print stop
|
|
if (isPrintingFromMedia())
|
|
changePageOfTFT(PAGE_STOP_CONF);
|
|
break;
|
|
|
|
case 4: // print settings
|
|
changePageOfTFT(PAGE_ADJUST);
|
|
TERN_(CASE_LIGHT_ENABLE, sendValueToTFT(getCaseLightState(), ADDRESS_PRINT_SETTING_LED_STATUS));
|
|
TERN_(HAS_HOTEND, sendValueToTFT(uint16_t(getTargetTemp_celsius(E0)), TXT_ADJUST_HOTEND));
|
|
TERN_(HAS_HEATED_BED, sendValueToTFT(uint16_t(getTargetTemp_celsius(BED)), TXT_ADJUST_BED));
|
|
feedrate_back = getFeedrate_percent();
|
|
sendValueToTFT((uint16_t)feedrate_back, TXT_ADJUST_SPEED);
|
|
TERN_(HAS_FAN, sendValueToTFT(uint16_t(getActualFan_percent(FAN0)), TXT_FAN_SPEED_TARGET));
|
|
str_buf[0] = 0;
|
|
strcat(str_buf, ftostr52sprj(getZOffset_mm()) + 3);
|
|
sendTxtToTFT(str_buf, TXT_LEVEL_OFFSET);
|
|
//sendTxtToTFT(ftostr52sprj(getZOffset_mm()), TXT_LEVEL_OFFSET);
|
|
requestValueFromTFT(TXT_ADJUST_SPEED); // attempt to make feedrate visible on visit to this page
|
|
break;
|
|
}
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1500;
|
|
|
|
if (feedrate_back != getFeedrate_percent()) {
|
|
if (getFeedrate_percent() != 0)
|
|
sprintf(str_buf, "%5.2f", getFeedrate_percent());
|
|
else
|
|
sprintf(str_buf, "%d", feedrate_back);
|
|
|
|
sendTxtToTFT(str_buf, TXT_PRINT_SPEED);
|
|
feedrate_back = getFeedrate_percent();
|
|
}
|
|
|
|
if (progress_last != getProgress_percent()) {
|
|
sprintf(str_buf, "%u", getProgress_percent());
|
|
sendTxtToTFT(str_buf, TXT_PRINT_PROGRESS);
|
|
progress_last = getProgress_percent();
|
|
}
|
|
|
|
uint32_t time = getProgress_seconds_elapsed() / 60;
|
|
sprintf(str_buf, "%s H ", utostr3(time / 60));
|
|
sprintf(str_buf + strlen(str_buf), "%s M", utostr3(time % 60));
|
|
sendTxtToTFT(str_buf, TXT_PRINT_TIME);
|
|
|
|
TERN_(HAS_HOTEND, send_temperature_hotend(TXT_PRINT_HOTEND));
|
|
TERN_(HAS_HEATED_BED, send_temperature_bed(TXT_PRINT_BED));
|
|
}
|
|
|
|
void DgusTFT::page5() { // print settings
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page5 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
static bool z_change = false;
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: // return
|
|
if (AC_printer_printing == printer_state)
|
|
changePageOfTFT(PAGE_STATUS2); // show pause
|
|
else if (AC_printer_paused == printer_state)
|
|
changePageOfTFT(PAGE_STATUS1); // show print
|
|
break;
|
|
|
|
#if ENABLED(MESH_EDIT_MENU)
|
|
|
|
case 2: { // -
|
|
float z_off = getZOffset_mm();
|
|
//SERIAL_ECHOLNPGM("z_off: ", z_off);
|
|
//setSoftEndstopState(false);
|
|
if (z_off <= -5) return;
|
|
z_off -= 0.05f;
|
|
setZOffset_mm(z_off);
|
|
|
|
char str_buf[10];
|
|
str_buf[0] = 0;
|
|
strcat(str_buf, ftostr52sprj(getZOffset_mm()) + 2);
|
|
sendTxtToTFT(str_buf, TXT_LEVEL_OFFSET);
|
|
//sendTxtToTFT(ftostr52sprj(getZOffset_mm()), TXT_LEVEL_OFFSET);
|
|
|
|
//if (isAxisPositionKnown(Z)) { // Move Z axis
|
|
// SERIAL_ECHOLNPGM("Z now:", getAxisPosition_mm(Z));
|
|
// const float currZpos = getAxisPosition_mm(Z);
|
|
// setAxisPosition_mm(currZpos-0.05, Z);
|
|
// SERIAL_ECHOLNPGM("Z now:", getAxisPosition_mm(Z));
|
|
//}
|
|
|
|
#if ENABLED(BABYSTEPPING)
|
|
int16_t steps = mmToWholeSteps(-0.05, Z);
|
|
babystepAxis_steps(steps, Z);
|
|
#endif
|
|
|
|
GRID_LOOP(x, y) {
|
|
const xy_uint8_t pos { x, y };
|
|
const float currval = getMeshPoint(pos);
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("x: ", x, " y: ", y, " z: ", currval);
|
|
#endif
|
|
setMeshPoint(pos, constrain(currval - 0.05f, AC_LOWEST_MESHPOINT_VAL, 5));
|
|
}
|
|
|
|
z_change = true;
|
|
|
|
//setSoftEndstopState(true);
|
|
} break;
|
|
|
|
case 3: { // +
|
|
float z_off = getZOffset_mm();
|
|
//SERIAL_ECHOLNPGM("z_off: ", z_off);
|
|
//setSoftEndstopState(false);
|
|
|
|
if (z_off >= 5) return;
|
|
z_off += 0.05f;
|
|
setZOffset_mm(z_off);
|
|
|
|
char str_buf[10];
|
|
str_buf[0] = '\0';
|
|
strcat(str_buf, ftostr52sprj(getZOffset_mm()) + 2);
|
|
sendTxtToTFT(str_buf, TXT_LEVEL_OFFSET);
|
|
//sendTxtToTFT(ftostr52sprj(getZOffset_mm()), TXT_LEVEL_OFFSET);
|
|
|
|
//int16_t steps = mmToWholeSteps(constrain(Zshift,-0.05,0.05), Z);
|
|
|
|
/*
|
|
if (isAxisPositionKnown(Z)) { // Move Z axis
|
|
SERIAL_ECHOLNPGM("Z now:", getAxisPosition_mm(Z));
|
|
const float currZpos = getAxisPosition_mm(Z);
|
|
setAxisPosition_mm(currZpos-0.05, Z);
|
|
SERIAL_ECHOLNPGM("Z now:", getAxisPosition_mm(Z));
|
|
}
|
|
*/
|
|
|
|
#if ENABLED(BABYSTEPPING)
|
|
int16_t steps = mmToWholeSteps(0.05, Z);
|
|
babystepAxis_steps(steps, Z);
|
|
#endif
|
|
|
|
GRID_LOOP(x, y) {
|
|
const xy_uint8_t pos { x, y };
|
|
const float currval = getMeshPoint(pos);
|
|
//SERIAL_ECHOLNPGM("x: ", x, " y: ", y, " z: ", currval);
|
|
setMeshPoint(pos, constrain(currval + 0.05f, AC_LOWEST_MESHPOINT_VAL, 5));
|
|
}
|
|
|
|
z_change = true;
|
|
|
|
//setSoftEndstopState(true);
|
|
} break;
|
|
|
|
#endif // MESH_EDIT_MENU
|
|
|
|
#if ENABLED(CASE_LIGHT_ENABLE)
|
|
case 4: { // light control
|
|
const bool cls = !getCaseLightState();
|
|
sendValueToTFT(cls, ADDRESS_PRINT_SETTING_LED_STATUS);
|
|
setCaseLightState(cls);
|
|
} break;
|
|
#endif
|
|
|
|
case 5:
|
|
changePageOfTFT(PAGE_DONE);
|
|
break;
|
|
|
|
case 6: break;
|
|
|
|
case 7:
|
|
TERN_(HAS_HEATED_BED, requestValueFromTFT(TXT_ADJUST_BED));
|
|
requestValueFromTFT(TXT_ADJUST_SPEED);
|
|
TERN_(HAS_HOTEND, requestValueFromTFT(TXT_ADJUST_HOTEND));
|
|
TERN_(HAS_FAN, requestValueFromTFT(TXT_FAN_SPEED_TARGET));
|
|
|
|
if (z_change == true) {
|
|
injectCommands(F("M500"));
|
|
z_change = false;
|
|
}
|
|
|
|
if (AC_printer_printing == printer_state)
|
|
changePageOfTFT(PAGE_STATUS2); // show pause
|
|
else if (AC_printer_paused == printer_state)
|
|
changePageOfTFT(PAGE_STATUS1); // show print
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
void DgusTFT::page6() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page6 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
switch (key_value) {
|
|
case 0: break;
|
|
case 1: break;
|
|
}
|
|
}
|
|
|
|
void DgusTFT::page7() { // tools
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page7 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: // return
|
|
changePageOfTFT(PAGE_MAIN);
|
|
break;
|
|
|
|
case 2:
|
|
changePageOfTFT(PAGE_MOVE);
|
|
break;
|
|
|
|
case 3: // set temperature
|
|
changePageOfTFT(PAGE_TEMP);
|
|
#if HAS_HOTEND
|
|
sendValueToTFT(uint16_t(getActualTemp_celsius(E0)), TXT_HOTEND_NOW);
|
|
sendValueToTFT(uint16_t(getTargetTemp_celsius(E0)), TXT_HOTEND_TARGET);
|
|
#endif
|
|
#if HAS_HEATED_BED
|
|
sendValueToTFT(uint16_t(getActualTemp_celsius(BED)), TXT_BED_NOW);
|
|
sendValueToTFT(uint16_t(getTargetTemp_celsius(BED)), TXT_BED_TARGET);
|
|
#endif
|
|
break;
|
|
|
|
case 4:
|
|
changePageOfTFT(PAGE_SPEED);
|
|
#if HAS_FAN
|
|
sendValueToTFT(uint16_t(getActualFan_percent(FAN0)), TXT_FAN_SPEED_NOW);
|
|
sendValueToTFT(uint16_t(getTargetFan_percent(FAN0)), TXT_FAN_SPEED_TARGET);
|
|
#endif
|
|
sendValueToTFT(uint16_t(getFeedrate_percent()), TXT_PRINT_SPEED_NOW);
|
|
sendValueToTFT(uint16_t(getFeedrate_percent()), TXT_PRINT_SPEED_TARGET);
|
|
break;
|
|
|
|
case 5: // turn off the xyz motor
|
|
if (!isMoving())
|
|
stepper.disable_all_steppers();
|
|
break;
|
|
|
|
#if ENABLED(CASE_LIGHT_ENABLE)
|
|
case 6: { // light control
|
|
const bool cls = !getCaseLightState();
|
|
sendValueToTFT(cls, ADDRESS_SYSTEM_LED_STATUS);
|
|
setCaseLightState(cls);
|
|
} break;
|
|
#endif
|
|
}
|
|
}
|
|
|
|
void DgusTFT::page8() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page8 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
//static uint16_t movespeed = 50;
|
|
static float move_dis = 1.0f;
|
|
|
|
if (key_value == 2 || key_value == 4
|
|
|| key_value == 6 || key_value == 8
|
|
|| key_value == 10 || (key_value == 12 && !isMoving())
|
|
) {
|
|
if (getAxisPosition_mm(Z) < 0) setAxisPosition_mm(0, Z, 8);
|
|
}
|
|
|
|
// if (!planner.movesplanned())return;
|
|
switch (key_value) {
|
|
case 0:
|
|
break;
|
|
|
|
case 1: // return
|
|
changePageOfTFT(PAGE_TOOL);
|
|
break;
|
|
|
|
case 5:
|
|
if (!isMoving())
|
|
injectCommands(F("G28 X"));
|
|
break;
|
|
|
|
case 9:
|
|
if (!isMoving())
|
|
injectCommands(F("G28 Y"));
|
|
break;
|
|
|
|
case 13:
|
|
if (!isMoving())
|
|
injectCommands(F("G28 Z"));
|
|
break;
|
|
|
|
case 17:
|
|
if (!isMoving())
|
|
injectCommands(F("G28"));
|
|
break;
|
|
|
|
case 2: // X-
|
|
if (!isMoving())
|
|
setAxisPosition_mm(getAxisPosition_mm(X) - move_dis, X, 50);
|
|
break;
|
|
|
|
case 4: // X+
|
|
if (!isMoving())
|
|
setAxisPosition_mm(getAxisPosition_mm(X) + move_dis, X, 50);
|
|
break;
|
|
|
|
case 6: // Y+
|
|
if (!isMoving())
|
|
setAxisPosition_mm(getAxisPosition_mm(Y) - move_dis, Y, 50);
|
|
break;
|
|
|
|
case 8: // Y-
|
|
if (!isMoving())
|
|
setAxisPosition_mm(getAxisPosition_mm(Y) + move_dis, Y, 50);
|
|
break;
|
|
|
|
case 10: // Z-
|
|
if (!isMoving())
|
|
setAxisPosition_mm(getAxisPosition_mm(Z) - move_dis, Z, 8);
|
|
break;
|
|
|
|
case 12: // Z+
|
|
if (!isMoving())
|
|
setAxisPosition_mm(getAxisPosition_mm(Z) + move_dis, Z, 8);
|
|
break;
|
|
|
|
case 3:
|
|
move_dis = 0.1f;
|
|
sendValueToTFT(1, ADDRESS_MOVE_DISTANCE);
|
|
break;
|
|
|
|
case 7:
|
|
move_dis = 1.0f;
|
|
sendValueToTFT(2, ADDRESS_MOVE_DISTANCE);
|
|
break;
|
|
|
|
case 11:
|
|
move_dis = 10.0f;
|
|
sendValueToTFT(3, ADDRESS_MOVE_DISTANCE);
|
|
break;
|
|
|
|
//case 14:
|
|
// movespeed = 3000; //SERIAL_ECHOLN(movespeed);
|
|
// break;
|
|
//
|
|
//case 15:
|
|
// movespeed = 2000; //SERIAL_ECHOLN(movespeed);
|
|
// break;
|
|
//
|
|
//case 16:
|
|
// movespeed = 1000; //SERIAL_ECHOLN(movespeed);
|
|
// break;
|
|
}
|
|
}
|
|
|
|
void DgusTFT::page9() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page9 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: // return
|
|
changePageOfTFT(PAGE_TOOL);
|
|
break;
|
|
|
|
case 2: break;
|
|
case 3: break;
|
|
case 4: break;
|
|
case 5: break;
|
|
|
|
case 6: // cooling
|
|
setTargetTemp_celsius(0, E0);
|
|
setTargetTemp_celsius(0, BED);
|
|
changePageOfTFT(PAGE_TOOL);
|
|
break;
|
|
|
|
case 7: // send target temp
|
|
requestValueFromTFT(TXT_HOTEND_TARGET);
|
|
requestValueFromTFT(TXT_BED_TARGET);
|
|
changePageOfTFT(PAGE_TOOL);
|
|
break;
|
|
}
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1500;
|
|
|
|
sendValueToTFT(uint16_t(getActualTemp_celsius(E0)), TXT_HOTEND_NOW);
|
|
sendValueToTFT(uint16_t(getActualTemp_celsius(BED)), TXT_BED_NOW);
|
|
}
|
|
|
|
void DgusTFT::page10() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page10 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
case 1: // return
|
|
changePageOfTFT(PAGE_TOOL);
|
|
break;
|
|
|
|
case 2: break;
|
|
case 3: break;
|
|
case 4: break;
|
|
case 5: break;
|
|
|
|
case 6: // ok
|
|
requestValueFromTFT(TXT_FAN_SPEED_TARGET);
|
|
requestValueFromTFT(TXT_PRINT_SPEED_TARGET);
|
|
changePageOfTFT(PAGE_TOOL);
|
|
break;
|
|
}
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1500;
|
|
|
|
sendValueToTFT(uint16_t(getActualFan_percent(FAN0)), TXT_FAN_SPEED_NOW);
|
|
sendValueToTFT(uint16_t(getFeedrate_percent()), TXT_PRINT_SPEED_NOW);
|
|
}
|
|
|
|
void DgusTFT::page11() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page11 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: // return
|
|
changePageOfTFT(PAGE_MAIN);
|
|
store_changes();
|
|
break;
|
|
|
|
case 2: // language
|
|
toggle_language();
|
|
goto_system_page();
|
|
break;
|
|
|
|
case 3: break;
|
|
|
|
case 4: // audio
|
|
toggle_audio();
|
|
break;
|
|
|
|
case 5: { // about
|
|
char str_ver[32];
|
|
//sprintf(str_ver, "%04d-%02d-%02d %02d:%02d:%02d\n", BUILD_YEAR, BUILD_MONTH, BUILD_DAY, BUILD_HOUR, BUILD_MIN, BUILD_SEC);
|
|
sprintf(str_ver, MAIN_BOARD_FIRMWARE_VER);
|
|
sendTxtToTFT(str_ver, TXT_VERSION);
|
|
changePageOfTFT(PAGE_ABOUT);
|
|
} break;
|
|
|
|
case 6:
|
|
changePageOfTFT(PAGE_RECORD);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void DgusTFT::page12() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page12 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
switch (key_value) {
|
|
case 0: break;
|
|
case 1: // return
|
|
changePageOfTFT(PAGE_SYSTEM_CHS_AUDIO_ON);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void DgusTFT::page13() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page13 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: // return
|
|
goto_system_page();
|
|
break;
|
|
|
|
case 2: break;
|
|
}
|
|
}
|
|
|
|
void DgusTFT::page14() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page14 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
switch (key_value) {
|
|
case 0: break;
|
|
case 1: break; // return
|
|
case 2: break;
|
|
case 3: break;
|
|
case 4: break;
|
|
}
|
|
}
|
|
|
|
void DgusTFT::page15() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page15 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: // return
|
|
changePageOfTFT(PAGE_MAIN);
|
|
break;
|
|
|
|
case 2:
|
|
changePageOfTFT(PAGE_PreLEVEL);
|
|
break;
|
|
|
|
#if HAS_HOTEND || HAS_HEATED_BED
|
|
case 3: {
|
|
changePageOfTFT(PAGE_PREHEAT);
|
|
TERN_(HAS_HOTEND, send_temperature_hotend(TXT_PREHEAT_HOTEND));
|
|
TERN_(HAS_HEATED_BED, send_temperature_bed(TXT_PREHEAT_BED));
|
|
} break;
|
|
#endif
|
|
|
|
#if HAS_EXTRUDERS
|
|
case 4: {
|
|
send_temperature_hotend(TXT_FILAMENT_TEMP);
|
|
changePageOfTFT(PAGE_FILAMENT);
|
|
} break;
|
|
#endif
|
|
}
|
|
}
|
|
|
|
void DgusTFT::page16() { // AUTO LEVELING
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page16 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
switch (key_value) {
|
|
case 0: break;
|
|
case 1: // return
|
|
changePageOfTFT(PAGE_PREPARE);
|
|
break;
|
|
|
|
case 2:
|
|
if (!isPrinting()) {
|
|
//changePageOfTFT(PAGE_LEVEL_ENSURE);
|
|
changePageOfTFT(PAGE_CHS_PROBE_PRECHECK);
|
|
}
|
|
break;
|
|
|
|
case 3: {
|
|
char str_buf[10];
|
|
str_buf[0] = '\0';
|
|
strcat(str_buf, ftostr52sprj(getZOffset_mm()) + 2);
|
|
sendTxtToTFT(str_buf, TXT_LEVEL_OFFSET);
|
|
//sendTxtToTFT(ftostr52sprj(getZOffset_mm()), TXT_LEVEL_OFFSET);
|
|
changePageOfTFT(PAGE_LEVEL_ADVANCE);
|
|
} break;
|
|
|
|
case 4:
|
|
changePageOfTFT(PAGE_AUTO_OFFSET);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void DgusTFT::page17() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page17 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
float z_off;
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: // return
|
|
changePageOfTFT(PAGE_PreLEVEL);
|
|
break;
|
|
|
|
case 2: {
|
|
setSoftEndstopState(false);
|
|
if (getZOffset_mm() <= -5) return;
|
|
z_off = getZOffset_mm() - 0.01f;
|
|
setZOffset_mm(z_off);
|
|
|
|
char str_buf[10];
|
|
strcat(str_buf, ftostr52sprj(getZOffset_mm()) + 2);
|
|
sendTxtToTFT(str_buf, TXT_LEVEL_OFFSET);
|
|
//sendTxtToTFT(ftostr52sprj(getZOffset_mm()), TXT_LEVEL_OFFSET);
|
|
|
|
if (isAxisPositionKnown(Z)) {
|
|
const float currZpos = getAxisPosition_mm(Z);
|
|
setAxisPosition_mm(currZpos - 0.01f, Z);
|
|
}
|
|
|
|
setSoftEndstopState(true);
|
|
} break;
|
|
|
|
case 3: {
|
|
setSoftEndstopState(false);
|
|
if (getZOffset_mm() >= 5) return;
|
|
z_off = getZOffset_mm() + 0.01f;
|
|
setZOffset_mm(z_off);
|
|
|
|
char str_buf[10];
|
|
strcat(str_buf, ftostr52sprj(getZOffset_mm()) + 2);
|
|
sendTxtToTFT(str_buf, TXT_LEVEL_OFFSET);
|
|
//sendTxtToTFT(ftostr52sprj(getZOffset_mm()), TXT_LEVEL_OFFSET);
|
|
|
|
if (isAxisPositionKnown(Z)) { // Move Z axis
|
|
const float currZpos = getAxisPosition_mm(Z);
|
|
setAxisPosition_mm(currZpos + 0.01f, Z);
|
|
}
|
|
|
|
setSoftEndstopState(true);
|
|
} break;
|
|
|
|
case 4:
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_ECHOLNPGM("z off: ", ftostr52sprj(getZOffset_mm()));
|
|
#endif
|
|
#if HAS_LEVELING
|
|
GRID_LOOP(x, y) {
|
|
const xy_uint8_t pos { x, y };
|
|
const float currval = getMeshPoint(pos);
|
|
setMeshPoint(pos, constrain(currval + getZOffset_mm(), AC_LOWEST_MESHPOINT_VAL, 5));
|
|
}
|
|
injectCommands(F("M500"));
|
|
#endif
|
|
changePageOfTFT(PAGE_PREPARE);
|
|
break;
|
|
}
|
|
}
|
|
|
|
#if HAS_HOTEND || HAS_HEATED_BED
|
|
|
|
void DgusTFT::page18() { // preheat
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page18 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: // return
|
|
changePageOfTFT(PAGE_PREPARE);
|
|
break;
|
|
|
|
case 2: // PLA
|
|
TERN_(HAS_HOTEND, setTargetTemp_celsius(190, E0));
|
|
TERN_(HAS_HEATED_BED, setTargetTemp_celsius(60, BED));
|
|
changePageOfTFT(PAGE_PREHEAT);
|
|
break;
|
|
|
|
case 3: // ABS
|
|
TERN_(HAS_HOTEND, setTargetTemp_celsius(240, E0));
|
|
TERN_(HAS_HEATED_BED, setTargetTemp_celsius(100, BED));
|
|
changePageOfTFT(PAGE_PREHEAT);
|
|
break;
|
|
}
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1500;
|
|
|
|
TERN_(HAS_HOTEND, send_temperature_hotend(TXT_PREHEAT_HOTEND));
|
|
TERN_(HAS_HEATED_BED, send_temperature_bed(TXT_PREHEAT_BED));
|
|
}
|
|
|
|
#endif // HAS_HOTEND || HAS_HEATED_BED
|
|
|
|
#if HAS_EXTRUDERS
|
|
|
|
void DgusTFT::page19() { // Filament
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page19 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
static char filament_status = 0;
|
|
static millis_t flash_time = 0;
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: // return
|
|
filament_status = 0;
|
|
injectCommands(F("G90"));
|
|
changePageOfTFT(PAGE_PREPARE);
|
|
break;
|
|
|
|
case 2: // Filament in
|
|
if (getActualTemp_celsius(E0) < 220) {
|
|
filament_status = 0;
|
|
changePageOfTFT(PAGE_FILAMENT_HEAT);
|
|
}
|
|
else {
|
|
filament_status = 1;
|
|
injectCommands(F("G91"));
|
|
}
|
|
break;
|
|
|
|
case 3: // filament out
|
|
if (getActualTemp_celsius(E0) < 220) {
|
|
filament_status = 0;
|
|
changePageOfTFT(PAGE_FILAMENT_HEAT);
|
|
}
|
|
else {
|
|
filament_status = 2;
|
|
injectCommands(F("G91"));
|
|
}
|
|
break;
|
|
|
|
case 4: // stop
|
|
filament_status = 0;
|
|
break;
|
|
|
|
}
|
|
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1500;
|
|
|
|
send_temperature_hotend(TXT_FILAMENT_TEMP);
|
|
|
|
if (!isPrinting()) {
|
|
if (filament_status == 1) {
|
|
if (canMove(E0) && !commandsInQueue())
|
|
injectCommands(AC_cmnd_manual_load_filament);
|
|
}
|
|
else if (filament_status == 2) {
|
|
if (canMove(E0) && !commandsInQueue())
|
|
injectCommands(AC_cmnd_manual_unload_filament);
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif // HAS_EXTRUDERS
|
|
|
|
void DgusTFT::page20() { // confirm
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page20 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
case 1: // return
|
|
changePageOfTFT(page_index_last);
|
|
break;
|
|
}
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1000;
|
|
}
|
|
|
|
void DgusTFT::page21() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page21 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: // return
|
|
changePageOfTFT(page_index_last);
|
|
break;
|
|
|
|
case 2: break;
|
|
}
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1000;
|
|
}
|
|
|
|
void DgusTFT::page22() { // print finish
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page22 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: // OK to finish
|
|
TERN_(CASE_LIGHT_ENABLE, setCaseLightState(false));
|
|
changePageOfTFT(PAGE_MAIN);
|
|
break;
|
|
|
|
case 2: break;
|
|
}
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1000;
|
|
}
|
|
|
|
void DgusTFT::page23() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page23 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
case 1: changePageOfTFT(page_index_last); break; // return
|
|
case 2: changePageOfTFT(page_index_last); break;
|
|
}
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1000;
|
|
}
|
|
|
|
void DgusTFT::page24() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page24 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
case 1: changePageOfTFT(page_index_last); break; // return
|
|
case 2: changePageOfTFT(page_index_last); break;
|
|
}
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1000;
|
|
}
|
|
|
|
void DgusTFT::page25() { // lack filament
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page25 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: // return
|
|
#if ACDEBUG(AC_MARLIN)
|
|
DEBUG_PRINT_PRINTER_STATE(printer_state);
|
|
DEBUG_PRINT_PAUSED_STATE(pause_state);
|
|
#endif
|
|
if (AC_printer_printing == printer_state)
|
|
changePageOfTFT(PAGE_STATUS2); // show pause
|
|
else if (AC_printer_paused == printer_state) {
|
|
//injectCommands(F("M108"));
|
|
changePageOfTFT(PAGE_STATUS1); // show resume
|
|
}
|
|
break;
|
|
}
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1000;
|
|
}
|
|
|
|
void DgusTFT::page26() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page26 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
case 1: changePageOfTFT(page_index_last); break; // return
|
|
case 2: break;
|
|
}
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1000;
|
|
}
|
|
|
|
void DgusTFT::page27() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page27 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: // print stop confirmed
|
|
if (isPrintingFromMedia()) {
|
|
printer_state = AC_printer_stopping;
|
|
stopPrint();
|
|
message_index = 6;
|
|
changePageOfTFT(PAGE_MAIN);
|
|
}
|
|
else {
|
|
if (printer_state == AC_printer_resuming_from_power_outage)
|
|
injectCommands(F("M1000 C")); // Cancel recovery
|
|
printer_state = AC_printer_idle;
|
|
}
|
|
break;
|
|
|
|
case 2: // return
|
|
if (AC_printer_printing == printer_state)
|
|
changePageOfTFT(PAGE_STATUS2); // show pause
|
|
else if (AC_printer_paused == printer_state)
|
|
changePageOfTFT(PAGE_STATUS1); // show print
|
|
break;
|
|
}
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1000;
|
|
}
|
|
|
|
void DgusTFT::page28() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page28 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
case 1: changePageOfTFT(page_index_last); break; // return
|
|
case 2: break;
|
|
}
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1000;
|
|
}
|
|
|
|
void DgusTFT::page29() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page29 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: // return
|
|
TERN_(CASE_LIGHT_ENABLE, setCaseLightState(false));
|
|
changePageOfTFT(PAGE_MAIN);
|
|
break;
|
|
|
|
case 2: break;
|
|
}
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1000;
|
|
}
|
|
|
|
void DgusTFT::page30() { // Auto heat filament
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page30 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: // return
|
|
setTargetTemp_celsius(230, E0);
|
|
changePageOfTFT(PAGE_FILAMENT);
|
|
break;
|
|
}
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1000;
|
|
}
|
|
|
|
void DgusTFT::page31() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page31 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
case 1: break; // return
|
|
case 2: break;
|
|
}
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1000;
|
|
}
|
|
|
|
void DgusTFT::page32() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page32 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1000;
|
|
}
|
|
|
|
#if HAS_LEVELING
|
|
|
|
void DgusTFT::page33() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if (page_index_saved != page_index_now) {
|
|
DEBUG_ECHOLNPGM("page33 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
}
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: // auto leveling start
|
|
injectCommands(F("G28\nG29"));
|
|
printer_state = AC_printer_probing;
|
|
|
|
// this will cause leveling->preheating->leveling
|
|
#if 0
|
|
#if ENABLED(PREHEAT_BEFORE_LEVELING)
|
|
if (getTargetTemp_celsius(E0) < LEVELING_NOZZLE_TEMP
|
|
|| getTargetTemp_celsius(BED) < LEVELING_BED_TEMP
|
|
) {
|
|
setTargetTemp_celsius(LEVELING_NOZZLE_TEMP, E0);
|
|
setTargetTemp_celsius(LEVELING_BED_TEMP, BED);
|
|
changePageOfTFT(PAGE_CHS_PROBE_PREHEATING);
|
|
}
|
|
else
|
|
changePageOfTFT(PAGE_LEVELING);
|
|
|
|
#else
|
|
changePageOfTFT(PAGE_LEVELING);
|
|
#endif
|
|
#endif
|
|
|
|
changePageOfTFT(PAGE_LEVELING);
|
|
break;
|
|
|
|
case 2:
|
|
changePageOfTFT(PAGE_PreLEVEL);
|
|
break;
|
|
}
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1500;
|
|
}
|
|
|
|
void DgusTFT::page34() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page34 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
#if HAS_HOTEND || HAS_HEATED_BED
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1500;
|
|
|
|
TERN_(HAS_HOTEND, send_temperature_hotend(TXT_MAIN_HOTEND));
|
|
TERN_(HAS_HEATED_BED, send_temperature_bed(TXT_MAIN_BED));
|
|
#endif
|
|
|
|
if (pop_up_index == 25) {
|
|
pop_up_index = 100;
|
|
changePageOfTFT(PAGE_PreLEVEL);
|
|
}
|
|
}
|
|
|
|
#endif // HAS_LEVELING
|
|
|
|
void DgusTFT::page115() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page115 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
|
|
case 0: break;
|
|
case 1: changePageOfTFT(PAGE_PreLEVEL); break;
|
|
|
|
case 2: {
|
|
injectCommands(F("M1024 S3")); // -1
|
|
//char value[20]
|
|
//sprintf_P(value, PSTR("G1 Z%iF%i")); enqueue_and_echo_command_now(value); }
|
|
} break;
|
|
|
|
case 3: injectCommands(F("M1024 S4")); break; // 1
|
|
case 4: injectCommands(F("M1024 S1")); break; // -0.1
|
|
case 5: injectCommands(F("M1024 S2")); break; // 0.1
|
|
case 6: injectCommands(F("M1024 S0")); break; // prepare, move x y to center
|
|
case 7: injectCommands(F("M1024 S5")); break; // 0.1
|
|
}
|
|
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1000;
|
|
}
|
|
|
|
void DgusTFT::page117() { // Page CHS Mute handler
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page117 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1:
|
|
changePageOfTFT(PAGE_MAIN);
|
|
store_changes();
|
|
break;
|
|
|
|
case 2: // language
|
|
toggle_language();
|
|
goto_system_page();
|
|
break;
|
|
|
|
case 3: break;
|
|
|
|
case 4: // audio
|
|
toggle_audio();
|
|
break;
|
|
|
|
case 5: // about
|
|
char str_ver[32];
|
|
//sprintf(str_ver, "%04d-%02d-%02d %02d:%02d:%02d\n", BUILD_YEAR, BUILD_MONTH, BUILD_DAY, BUILD_HOUR, BUILD_MIN, BUILD_SEC);
|
|
sprintf(str_ver, MAIN_BOARD_FIRMWARE_VER);
|
|
sendTxtToTFT(str_ver, TXT_VERSION);
|
|
changePageOfTFT(PAGE_ABOUT);
|
|
break;
|
|
|
|
case 6:
|
|
changePageOfTFT(PAGE_RECORD);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void DgusTFT::page124() { // first time into page 124 the feedrate percent is not set
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page124 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
//DEBUG_ECHOLNPGM("update feedrate percent");
|
|
}
|
|
#endif
|
|
sendValueToTFT(uint16_t(getFeedrate_percent()), TXT_PRINT_SPEED_NOW);
|
|
}
|
|
|
|
void DgusTFT::page125() { // first time into page 125 the feedrate percent is not set
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page125 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
//DEBUG_ECHOLNPGM("update feedrate percent");
|
|
}
|
|
#endif
|
|
sendValueToTFT(uint16_t(getFeedrate_percent()), TXT_PRINT_SPEED_NOW);
|
|
}
|
|
|
|
void DgusTFT::page170() { // ENG Mute handler
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page170 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1:
|
|
changePageOfTFT(PAGE_MAIN);
|
|
store_changes();
|
|
break;
|
|
|
|
case 2: // language
|
|
toggle_language();
|
|
goto_system_page();
|
|
break;
|
|
|
|
case 3: break;
|
|
|
|
case 4: // audio
|
|
toggle_audio();
|
|
break;
|
|
|
|
case 5: // about
|
|
char str_ver[32];
|
|
//sprintf(str_ver, "%04d-%02d-%02d %02d:%02d:%02d\n", BUILD_YEAR, BUILD_MONTH, BUILD_DAY, BUILD_HOUR, BUILD_MIN, BUILD_SEC);
|
|
sprintf(str_ver, MAIN_BOARD_FIRMWARE_VER);
|
|
sendTxtToTFT(str_ver, TXT_VERSION);
|
|
changePageOfTFT(PAGE_ABOUT);
|
|
break;
|
|
|
|
case 6:
|
|
changePageOfTFT(PAGE_RECORD);
|
|
break;
|
|
}
|
|
}
|
|
|
|
#if ENABLED(POWER_LOSS_RECOVERY)
|
|
|
|
void DgusTFT::page171() { // CHS power outage resume handler
|
|
#if ACDEBUG(AC_ALL)
|
|
if (page_index_saved != page_index_now) {
|
|
DEBUG_ECHOLNPGM("page171 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
}
|
|
#endif
|
|
#if ENABLED(LONG_FILENAME_HOST_SUPPORT)
|
|
char filename[64] = { '\0' };
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: { // resume
|
|
changePageOfTFT(PAGE_OUTAGE_RECOVERY);
|
|
#if ENABLED(LONG_FILENAME_HOST_SUPPORT)
|
|
card.getLongPath(filename, recovery.info.sd_filename);
|
|
filename[17] = '\0';
|
|
sendTxtToTFT(filename, TXT_OUTAGE_RECOVERY_FILE);
|
|
#else
|
|
sendTxtToTFT(recovery.info.sd_filename, TXT_OUTAGE_RECOVERY_FILE);
|
|
#endif
|
|
|
|
char str_buf[20] = { '\0' };
|
|
sprintf(str_buf, "%u", uint16_t(getFeedrate_percent()));
|
|
sendTxtToTFT(str_buf, TXT_PRINT_SPEED);
|
|
|
|
sprintf(str_buf, "%u", uint16_t(getProgress_percent()));
|
|
sendTxtToTFT(str_buf, TXT_PRINT_PROGRESS);
|
|
|
|
changePageOfTFT(PAGE_STATUS2); // show pause
|
|
injectCommands(F("M355 S1\nM1000")); // case light on, home and start recovery
|
|
} break;
|
|
|
|
case 2: // cancel
|
|
printer_state = AC_printer_idle;
|
|
changePageOfTFT(PAGE_MAIN);
|
|
injectCommands(F("M355 S0\nM1000 C")); // cancel recovery
|
|
break;
|
|
}
|
|
}
|
|
|
|
void DgusTFT::page173() { // ENG power outage resume handler
|
|
#if ACDEBUG(AC_ALL)
|
|
if (page_index_saved != page_index_now) {
|
|
DEBUG_ECHOLNPGM("page173 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
}
|
|
#endif
|
|
#if ENABLED(LONG_FILENAME_HOST_SUPPORT)
|
|
char filename[64] = { '\0' };
|
|
#endif
|
|
|
|
switch (key_value) {
|
|
case 0: break;
|
|
|
|
case 1: { // resume
|
|
changePageOfTFT(PAGE_OUTAGE_RECOVERY);
|
|
#if ENABLED(LONG_FILENAME_HOST_SUPPORT)
|
|
card.getLongPath(filename, recovery.info.sd_filename);
|
|
filename[17] = '\0';
|
|
sendTxtToTFT(filename, TXT_OUTAGE_RECOVERY_FILE);
|
|
#else
|
|
sendTxtToTFT(recovery.info.sd_filename, TXT_OUTAGE_RECOVERY_FILE);
|
|
#endif
|
|
|
|
char str_buf[20] = { '\0' };
|
|
sprintf(str_buf, "%u", uint16_t(getFeedrate_percent()));
|
|
sendTxtToTFT(str_buf, TXT_PRINT_SPEED);
|
|
|
|
sprintf(str_buf, "%u", uint16_t(getProgress_percent()));
|
|
sendTxtToTFT(str_buf, TXT_PRINT_PROGRESS);
|
|
|
|
changePageOfTFT(PAGE_STATUS2); // show pause
|
|
injectCommands(F("M355 S1\nM1000")); // case light on, home and start recovery
|
|
} break;
|
|
|
|
case 2: // cancel
|
|
printer_state = AC_printer_idle;
|
|
changePageOfTFT(PAGE_MAIN);
|
|
injectCommands(F("M355 S0\nM1000 C")); // cancel recovery
|
|
break;
|
|
}
|
|
}
|
|
|
|
#endif // POWER_LOSS_RECOVERY
|
|
|
|
#if HAS_LEVELING
|
|
|
|
void DgusTFT::page175() { // CHS probe preheating handler
|
|
#if ACDEBUG(AC_ALL)
|
|
if (page_index_saved != page_index_now) {
|
|
DEBUG_ECHOLNPGM("page175 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now);
|
|
page_index_saved = page_index_now;
|
|
}
|
|
#endif
|
|
|
|
#if HAS_HOTEND || HAS_HEATED_BED
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1500;
|
|
|
|
TERN_(HAS_HOTEND, send_temperature_hotend(TXT_MAIN_HOTEND));
|
|
TERN_(HAS_HEATED_BED, send_temperature_bed(TXT_MAIN_BED));
|
|
#endif
|
|
}
|
|
|
|
void DgusTFT::page176() { // ENG probe preheating handler
|
|
#if ACDEBUG(AC_ALL)
|
|
if (page_index_saved != page_index_now) {
|
|
DEBUG_ECHOLNPGM("page176 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now);
|
|
page_index_saved = page_index_now;
|
|
}
|
|
#endif
|
|
|
|
#if HAS_HOTEND || HAS_HEATED_BED
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1500;
|
|
|
|
TERN_(HAS_HOTEND, send_temperature_hotend(TXT_MAIN_HOTEND));
|
|
TERN_(HAS_HEATED_BED, send_temperature_bed(TXT_MAIN_BED));
|
|
#endif
|
|
}
|
|
|
|
#endif // HAS_LEVELING
|
|
|
|
void DgusTFT::page177_to_198() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page177_to_198 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
switch (key_value) {
|
|
case 1: // return
|
|
#if ACDEBUG(AC_MARLIN)
|
|
//DEBUG_ECHOLNPGM("page_index_now: ", page_index_now);
|
|
//DEBUG_ECHOLNPGM("page_index_last: ", page_index_last);
|
|
//DEBUG_ECHOLNPGM("page_index_last_2: ", page_index_last_2);
|
|
#endif
|
|
|
|
if ((WITHIN(page_index_now, PAGE_CHS_ABNORMAL_X_ENDSTOP, PAGE_CHS_ABNORMAL_Z_ENDSTOP))
|
|
|| (WITHIN(page_index_now, PAGE_ENG_ABNORMAL_X_ENDSTOP, PAGE_ENG_ABNORMAL_Z_ENDSTOP))
|
|
) {
|
|
if (lcd_info.language == ENG) {
|
|
if (page_index_last_2 > 120) page_index_last_2 -= 120;
|
|
if (page_index_last > 120) page_index_last -= 120;
|
|
}
|
|
|
|
if (PAGE_STATUS1 == page_index_last_2 || PAGE_STATUS2 == page_index_last_2 || PAGE_PRINT_FINISH == page_index_last)
|
|
changePageOfTFT(PAGE_MAIN);
|
|
else
|
|
changePageOfTFT(page_index_last_2);
|
|
}
|
|
else {
|
|
if (lcd_info.language == ENG && page_index_last > 120)
|
|
page_index_last -= 120;
|
|
changePageOfTFT(page_index_last);
|
|
}
|
|
|
|
onSurviveInKilled();
|
|
stepper.disable_all_steppers();
|
|
break;
|
|
|
|
default: break;
|
|
}
|
|
}
|
|
|
|
#if 0
|
|
void DgusTFT::page178_to_181_190_to_193() { // temperature abnormal
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page178_to_181_190_to_193 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
switch (key_value) {
|
|
case 1: // return
|
|
SERIAL_ECHOLNPGM("page_index_now: ", page_index_now);
|
|
SERIAL_ECHOLNPGM("page_index_last: ", page_index_last);
|
|
SERIAL_ECHOLNPGM("page_index_last_2: ", page_index_last_2);
|
|
|
|
if (isPrinting() || isPrintingPaused() || isPrintingFromMedia()) {
|
|
printer_state = AC_printer_stopping;
|
|
stopPrint();
|
|
changePageOfTFT(PAGE_MAIN);
|
|
}
|
|
else
|
|
changePageOfTFT(page_index_last);
|
|
|
|
onSurviveInKilled();
|
|
break;
|
|
|
|
default: break;
|
|
}
|
|
}
|
|
#endif
|
|
|
|
void DgusTFT::page199_to_200() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page199_to_200 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now, " key: ", key_value);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
switch (key_value) {
|
|
case 1: // return
|
|
#if ACDEBUG(AC_MARLIN)
|
|
//DEBUG_ECHOLNPGM("page_index_now: ", page_index_now);
|
|
//DEBUG_ECHOLNPGM("page_index_last: ", page_index_last);
|
|
//DEBUG_ECHOLNPGM("page_index_last_2: ", page_index_last_2);
|
|
#endif
|
|
onSurviveInKilled();
|
|
changePageOfTFT(PAGE_PreLEVEL);
|
|
break;
|
|
|
|
default: break;
|
|
}
|
|
}
|
|
|
|
inline void ProbeTare() {
|
|
#if PIN_EXISTS(AUTO_LEVEL_TX)
|
|
OUT_WRITE(AUTO_LEVEL_TX_PIN, LOW);
|
|
delay(300);
|
|
OUT_WRITE(AUTO_LEVEL_TX_PIN, HIGH);
|
|
delay(100);
|
|
#endif
|
|
}
|
|
|
|
inline bool getProbeState() { return PROBE_TRIGGERED(); }
|
|
|
|
void DgusTFT::page201() { // probe precheck
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page201 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
static millis_t probe_check_time = 0;
|
|
static millis_t temperature_time = 0;
|
|
static uint8_t probe_check_counter = 0;
|
|
static uint8_t probe_state_last = 0;
|
|
static bool probe_tare_flag = 0;
|
|
|
|
if (!probe_tare_flag) {
|
|
ProbeTare();
|
|
|
|
delay(100);
|
|
|
|
if (getProbeState()) { // triggered too early
|
|
probe_check_counter = 0;
|
|
probe_tare_flag = 0;
|
|
changePageOfTFT(PAGE_CHS_PROBE_PRECHECK_FAILED);
|
|
}
|
|
probe_tare_flag = 1;
|
|
}
|
|
|
|
switch (key_value) {
|
|
case 1: // cancel
|
|
probe_check_counter = 0;
|
|
probe_tare_flag = 0;
|
|
changePageOfTFT(PAGE_PreLEVEL);
|
|
break;
|
|
|
|
default: break;
|
|
}
|
|
|
|
if (ELAPSED(millis(), probe_check_time)) {
|
|
probe_check_time = millis() + 300;
|
|
|
|
if (!probe_state_last && getProbeState()) {
|
|
probe_check_counter = 0;
|
|
probe_tare_flag = 0;
|
|
changePageOfTFT(PAGE_CHS_PROBE_PRECHECK_OK);
|
|
}
|
|
|
|
probe_state_last = getProbeState();
|
|
|
|
if (probe_check_counter++ >= 200) { // waiting for 1 min
|
|
probe_check_counter = 0;
|
|
probe_tare_flag = 0;
|
|
changePageOfTFT(PAGE_CHS_PROBE_PRECHECK_FAILED);
|
|
}
|
|
}
|
|
|
|
if (ELAPSED(millis(), temperature_time)) {
|
|
temperature_time = millis() + 1500;
|
|
TERN_(HAS_HOTEND, send_temperature_hotend(TXT_MAIN_HOTEND));
|
|
TERN_(HAS_HEATED_BED, send_temperature_bed(TXT_MAIN_BED));
|
|
}
|
|
}
|
|
|
|
void DgusTFT::page202() { // probe precheck ok
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page202 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
|
|
//static millis_t flash_time = 0;
|
|
//static millis_t probe_check_counter = 0;
|
|
//static uint8_t probe_state_last = 0;
|
|
|
|
delay(3000);
|
|
|
|
injectCommands(F("G28\nG29"));
|
|
printer_state = AC_printer_probing;
|
|
changePageOfTFT(PAGE_LEVELING);
|
|
}
|
|
|
|
void DgusTFT::page203() { // probe precheck failed
|
|
#if ACDEBUG(AC_ALL)
|
|
if ((page_index_saved != page_index_now) || (key_value_saved != key_value)) {
|
|
DEBUG_ECHOLNPGM("page203 page_index_last_2: ", page_index_last_2, " page_index_last: ", page_index_last, " page_index_now: ", page_index_now);
|
|
page_index_saved = page_index_now;
|
|
key_value_saved = key_value;
|
|
}
|
|
#endif
|
|
//static millis_t probe_check_counter = 0;
|
|
//static uint8_t probe_state_last = 0;
|
|
|
|
#if HAS_HOTEND || HAS_HEATED_BED
|
|
static millis_t flash_time = 0;
|
|
const millis_t ms = millis();
|
|
if (PENDING(ms, flash_time)) return;
|
|
flash_time = ms + 1500;
|
|
|
|
TERN_(HAS_HOTEND, send_temperature_hotend(TXT_MAIN_HOTEND));
|
|
TERN_(HAS_HEATED_BED, send_temperature_bed(TXT_MAIN_BED));
|
|
#endif
|
|
}
|
|
|
|
void DgusTFT::pop_up_manager() {
|
|
#if ACDEBUG(AC_ALL)
|
|
if (pop_up_index_saved != pop_up_index) {
|
|
DEBUG_ECHOLNPGM("pop_up_manager pop_up_index: ", pop_up_index);
|
|
pop_up_index_saved = pop_up_index;
|
|
}
|
|
#endif
|
|
|
|
switch (pop_up_index) {
|
|
case 10: // T0 error
|
|
if (page_index_now != PAGE_ABNORMAL)
|
|
changePageOfTFT(PAGE_ABNORMAL);
|
|
pop_up_index = 100;
|
|
break;
|
|
|
|
case 15: // filament lack
|
|
case 23:
|
|
if (page_index_now != PAGE_FILAMENT_LACK)
|
|
changePageOfTFT(PAGE_FILAMENT_LACK);
|
|
pop_up_index = 100;
|
|
break;
|
|
|
|
case 16: // stop wait
|
|
changePageOfTFT(PAGE_WAIT_STOP);
|
|
pop_up_index = 100;
|
|
break;
|
|
|
|
case 18:
|
|
changePageOfTFT(PAGE_STATUS1);
|
|
pop_up_index = 100;
|
|
break;
|
|
|
|
case 24: { //
|
|
uint32_t time = getProgress_seconds_elapsed() / 60;
|
|
char str_buf[20];
|
|
sprintf(str_buf, "%s H ", utostr3(time / 60));
|
|
sprintf(str_buf + strlen(str_buf), "%s M", utostr3(time % 60));
|
|
sendTxtToTFT(str_buf, TXT_FINISH_TIME);
|
|
changePageOfTFT(PAGE_PRINT_FINISH);
|
|
//tftSendLn(AC_msg_print_complete); // no idea why this causes a compile error
|
|
pop_up_index = 100;
|
|
} break;
|
|
|
|
case 25: // LEVEL DONE
|
|
changePageOfTFT(PAGE_PreLEVEL);
|
|
pop_up_index = 100;
|
|
break;
|
|
}
|
|
}
|
|
|
|
void DEBUG_PRINT_PAUSED_STATE(const paused_state_t state, FSTR_P const msg/*=nullptr*/) {
|
|
if (msg) DEBUG_ECHO(msg);
|
|
DEBUG_ECHOPGM("Paused state: ", state, " ");
|
|
switch (state) {
|
|
case AC_paused_heater_timed_out: DEBUG_ECHOPGM("AC_paused_heater_timed_out"); break;
|
|
case AC_paused_filament_lack: DEBUG_ECHOPGM("AC_paused_filament_lack"); break;
|
|
case AC_paused_purging_filament: DEBUG_ECHOPGM("AC_paused_purging_filament"); break;
|
|
case AC_paused_idle: DEBUG_ECHOPGM("AC_paused_idle"); break;
|
|
}
|
|
DEBUG_EOL();
|
|
}
|
|
|
|
// Human-readable debugging
|
|
|
|
void DEBUG_PRINT_PRINTER_STATE(const printer_state_t state, FSTR_P const msg/*=nullptr*/) {
|
|
if (msg) DEBUG_ECHO(msg);
|
|
DEBUG_ECHOPGM("Printer State: ", state, " ");
|
|
switch (state) {
|
|
case AC_printer_idle: DEBUG_ECHOPGM("AC_printer_idle"); break;
|
|
case AC_printer_probing: DEBUG_ECHOPGM("AC_printer_probing"); break;
|
|
case AC_printer_printing: DEBUG_ECHOPGM("AC_printer_printing"); break;
|
|
case AC_printer_pausing: DEBUG_ECHOPGM("AC_printer_pausing"); break;
|
|
case AC_printer_paused: DEBUG_ECHOPGM("AC_printer_paused"); break;
|
|
case AC_printer_stopping: DEBUG_ECHOPGM("AC_printer_stopping"); break;
|
|
case AC_printer_stopping_from_media_remove: DEBUG_ECHOPGM("AC_printer_stopping_from_media_remove"); break;
|
|
case AC_printer_resuming_from_power_outage: DEBUG_ECHOPGM("AC_printer_resuming_from_power_outage"); break;
|
|
}
|
|
DEBUG_EOL();
|
|
}
|
|
|
|
void DEBUG_PRINT_TIMER_EVENT(const timer_event_t event, FSTR_P const msg/*=nullptr*/) {
|
|
if (msg) DEBUG_ECHOPGM(msg, event);
|
|
DEBUG_ECHOPGM("timerEvent() ", event, " ");
|
|
switch (event) {
|
|
case AC_timer_started: DEBUG_ECHOPGM("AC_timer_started"); break;
|
|
case AC_timer_paused: DEBUG_ECHOPGM("AC_timer_paused"); break;
|
|
case AC_timer_stopped: DEBUG_ECHOPGM("AC_timer_stopped"); break;
|
|
}
|
|
DEBUG_EOL();
|
|
}
|
|
|
|
void DEBUG_PRINT_MEDIA_EVENT(const media_event_t event, FSTR_P const msg/*=nullptr*/) {
|
|
if (msg) DEBUG_ECHOPGM(msg, event);
|
|
DEBUG_ECHOPGM("ProcessMediaStatus() ", event, " ");
|
|
switch (event) {
|
|
case AC_media_inserted: DEBUG_ECHOPGM("AC_media_inserted"); break;
|
|
case AC_media_removed: DEBUG_ECHOPGM("AC_media_removed"); break;
|
|
case AC_media_error: DEBUG_ECHOPGM("AC_media_error"); break;
|
|
}
|
|
DEBUG_EOL();
|
|
}
|
|
|
|
} // namespace
|
|
|
|
#endif // ANYCUBIC_LCD_VYPER
|