479 lines
15 KiB
C++
479 lines
15 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/>.
|
|
*
|
|
*/
|
|
#pragma once
|
|
|
|
/**
|
|
* lcd/extui/anycubic_vyper/dgus_tft.h
|
|
*/
|
|
|
|
#include "dgus_tft_defs.h"
|
|
#include "../../../inc/MarlinConfigPre.h"
|
|
#include "../ui_api.h"
|
|
|
|
#define MAIN_BOARD_FIRMWARE_VER "V2.4.5"
|
|
|
|
#define DATA_BUF_SIZE 64
|
|
|
|
/****************** PAGE INDEX***********************/
|
|
#define PAGE_OFFSET 0
|
|
#define PAGE_MAIN (1+PAGE_OFFSET)
|
|
#define PAGE_FILE (2+PAGE_OFFSET)
|
|
#define PAGE_STATUS1 (3+PAGE_OFFSET) // show resume
|
|
#define PAGE_STATUS2 (4+PAGE_OFFSET) // show pause
|
|
#define PAGE_ADJUST (5+PAGE_OFFSET)
|
|
#define PAGE_KEYBPARD (6+PAGE_OFFSET)
|
|
#define PAGE_TOOL (7+PAGE_OFFSET)
|
|
#define PAGE_MOVE (8+PAGE_OFFSET)
|
|
#define PAGE_TEMP (9+PAGE_OFFSET)
|
|
#define PAGE_SPEED (10+PAGE_OFFSET)
|
|
#define PAGE_SYSTEM_CHS_AUDIO_ON (11+PAGE_OFFSET)
|
|
#define PAGE_WIFI (12+PAGE_OFFSET)
|
|
#define PAGE_ABOUT (13+PAGE_OFFSET)
|
|
#define PAGE_RECORD (14+PAGE_OFFSET)
|
|
#define PAGE_PREPARE (15+PAGE_OFFSET)
|
|
#define PAGE_PreLEVEL (16+PAGE_OFFSET)
|
|
#define PAGE_LEVEL_ADVANCE (17+PAGE_OFFSET)
|
|
#define PAGE_PREHEAT (18+PAGE_OFFSET)
|
|
#define PAGE_FILAMENT (19+PAGE_OFFSET)
|
|
|
|
#define PAGE_DONE (20+PAGE_OFFSET)
|
|
#define PAGE_ABNORMAL (21+PAGE_OFFSET)
|
|
#define PAGE_PRINT_FINISH (22+PAGE_OFFSET)
|
|
#define PAGE_WAIT_STOP (23+PAGE_OFFSET)
|
|
#define PAGE_FILAMENT_LACK (25+PAGE_OFFSET)
|
|
#define PAGE_FORBIT (26+PAGE_OFFSET)
|
|
#define PAGE_STOP_CONF (27+PAGE_OFFSET)
|
|
#define PAGE_NO_SD (29+PAGE_OFFSET)
|
|
#define PAGE_FILAMENT_HEAT (30+PAGE_OFFSET)
|
|
#define PAGE_WAIT_PAUSE (32+PAGE_OFFSET)
|
|
|
|
#define PAGE_LEVEL_ENSURE (33+PAGE_OFFSET)
|
|
#define PAGE_LEVELING (34+PAGE_OFFSET)
|
|
|
|
#define PAGE_AUTO_OFFSET (115+PAGE_OFFSET)
|
|
|
|
#define PAGE_SYSTEM_CHS_AUDIO_OFF (117+PAGE_OFFSET)
|
|
|
|
#define PAGE_SYSTEM_ENG_AUDIO_ON (131+PAGE_OFFSET)
|
|
#define PAGE_SYSTEM_ENG_AUDIO_OFF (170+PAGE_OFFSET)
|
|
|
|
#define PAGE_OUTAGE_RECOVERY (171+PAGE_OFFSET)
|
|
#define PAGE_ENG_OUTAGE_RECOVERY (173+PAGE_OFFSET)
|
|
|
|
#define PAGE_CHS_PROBE_PREHEATING (176+PAGE_OFFSET)
|
|
#define PAGE_ENG_PROBE_PREHEATING (175+PAGE_OFFSET)
|
|
|
|
#define PAGE_CHS_HOMING (177+PAGE_OFFSET)
|
|
#define PAGE_CHS_ABNORMAL_BED_HEATER (178+PAGE_OFFSET)
|
|
#define PAGE_CHS_ABNORMAL_BED_NTC (179+PAGE_OFFSET)
|
|
#define PAGE_CHS_ABNORMAL_HOTEND_HEATER (180+PAGE_OFFSET)
|
|
#define PAGE_CHS_ABNORMAL_HOTEND_NTC (181+PAGE_OFFSET)
|
|
#define PAGE_CHS_ABNORMAL_ENDSTOP (182+PAGE_OFFSET)
|
|
#define PAGE_CHS_ABNORMAL_X_ENDSTOP (182+PAGE_OFFSET)
|
|
#define PAGE_CHS_ABNORMAL_Y_ENDSTOP (183+PAGE_OFFSET)
|
|
#define PAGE_CHS_ABNORMAL_Z_ENDSTOP (184+PAGE_OFFSET)
|
|
#define PAGE_CHS_ABNORMAL_ZL_ENDSTOP (185+PAGE_OFFSET)
|
|
#define PAGE_CHS_ABNORMAL_ZR_ENDSTOP (186+PAGE_OFFSET)
|
|
#define PAGE_CHS_ABNORMAL_LEVELING_SENSOR (187+PAGE_OFFSET)
|
|
#define PAGE_CHS_LEVELING_FAILED (188+PAGE_OFFSET)
|
|
|
|
#define PAGE_ENG_HOMING (189+PAGE_OFFSET)
|
|
#define PAGE_ENG_ABNORMAL_BED_HEATER (190+PAGE_OFFSET)
|
|
#define PAGE_ENG_ABNORMAL_BED_NTC (191+PAGE_OFFSET)
|
|
#define PAGE_ENG_ABNORMAL_HOTEND_HEATER (192+PAGE_OFFSET)
|
|
#define PAGE_ENG_ABNORMAL_HOTEND_NTC (193+PAGE_OFFSET)
|
|
#define PAGE_ENG_ABNORMAL_ENDSTOP (194+PAGE_OFFSET)
|
|
#define PAGE_ENG_ABNORMAL_X_ENDSTOP (194+PAGE_OFFSET)
|
|
#define PAGE_ENG_ABNORMAL_Y_ENDSTOP (195+PAGE_OFFSET)
|
|
#define PAGE_ENG_ABNORMAL_Z_ENDSTOP (196+PAGE_OFFSET)
|
|
#define PAGE_ENG_ABNORMAL_ZL_ENDSTOP (197+PAGE_OFFSET)
|
|
#define PAGE_ENG_ABNORMAL_ZR_ENDSTOP (198+PAGE_OFFSET)
|
|
#define PAGE_ENG_ABNORMAL_LEVELING_SENSOR (199+PAGE_OFFSET)
|
|
#define PAGE_ENG_LEVELING_FAILED (200+PAGE_OFFSET)
|
|
|
|
#define PAGE_CHS_PROBE_PRECHECK (201+PAGE_OFFSET)
|
|
#define PAGE_CHS_PROBE_PRECHECK_OK (202+PAGE_OFFSET)
|
|
#define PAGE_CHS_PROBE_PRECHECK_FAILED (203+PAGE_OFFSET)
|
|
|
|
#define PAGE_ENG_PROBE_PRECHECK (204+PAGE_OFFSET)
|
|
#define PAGE_ENG_PROBE_PRECHECK_OK (205+PAGE_OFFSET)
|
|
#define PAGE_ENG_PROBE_PRECHECK_FAILED (206+PAGE_OFFSET)
|
|
|
|
/****************** Lcd control **************************/
|
|
#define REG_LCD_READY 0x0014
|
|
|
|
/****************** TXT **************************/
|
|
|
|
// MAIN PAGE TXT
|
|
#define TXT_MAIN_BED 0x2000
|
|
#define TXT_MAIN_HOTEND 0x2030
|
|
#define TXT_MAIN_MESSAGE 0x2060
|
|
|
|
// FILE TXT
|
|
#define TXT_FILE_0 (0x2000+3*0x30)
|
|
#define TXT_DESCRIPT_0 0x5000 // DESCRIBE ADDRESS
|
|
#define TXT_FILE_1 (0x2000+4*0x30)
|
|
#define TXT_DESCRIPT_1 0x5030
|
|
#define TXT_FILE_2 (0x2000+5*0x30)
|
|
#define TXT_DESCRIPT_2 0x5060
|
|
#define TXT_FILE_3 (0x2000+6*0x30)
|
|
#define TXT_DESCRIPT_3 0x5090
|
|
#define TXT_FILE_4 (0x2000+7*0x30)
|
|
#define TXT_DESCRIPT_4 0x50C0
|
|
|
|
// PRINT TXT
|
|
#define TXT_PRINT_NAME 0x2000+8*0x30
|
|
#define TXT_PRINT_SPEED 0x2000+9*0x30
|
|
#define TXT_PRINT_TIME 0x2000+10*0x30
|
|
#define TXT_PRINT_PROGRESS 0x2000+11*0x30
|
|
#define TXT_PRINT_HOTEND 0x2000+12*0x30
|
|
#define TXT_PRINT_BED 0x2000+13*0x30
|
|
|
|
// PRINT ADJUST TXT
|
|
|
|
#define TXT_ADJUST_HOTEND (0x2000+14*0x30)
|
|
#define TXT_ADJUST_BED (0x2000+15*0x30)
|
|
#define TXT_ADJUST_SPEED (0x2000+16*0x30)
|
|
|
|
// TEMP SET TXT
|
|
|
|
#define TXT_BED_NOW (0x2000+17*0x30)
|
|
#define TXT_BED_TARGET (0x2000+18*0x30)
|
|
#define TXT_HOTEND_NOW (0x2000+19*0x30)
|
|
#define TXT_HOTEND_TARGET (0x2000+20*0x30)
|
|
|
|
// SPEED SET TXT
|
|
#define TXT_FAN_SPEED_NOW (0x2000+21*0x30)
|
|
#define TXT_FAN_SPEED_TARGET (0x2000+22*0x30)
|
|
#define TXT_PRINT_SPEED_NOW (0x2000+23*0x30)
|
|
#define TXT_PRINT_SPEED_TARGET (0x2000+24*0x30)
|
|
|
|
// ABOUT TXT
|
|
#define TXT_ABOUT (0x2000+25*0x30)
|
|
|
|
// RECORT TXT
|
|
#define TXT_RECORT_0 (0x2000+26*0x30)
|
|
#define TXT_RECORT_1 (0x2000+27*0x30)
|
|
#define TXT_RECORT_2 (0x2000+28*0x30)
|
|
#define TXT_RECORT_3 (0x2000+29*0x30)
|
|
#define TXT_RECORT_4 (0x2000+30*0x30)
|
|
#define TXT_RECORT_5 (0x2000+31*0x30)
|
|
|
|
// ADVANCE LEVEL TXT
|
|
#define TXT_LEVEL_OFFSET (0x2000+32*0x30)
|
|
|
|
// FILAMENT TXT
|
|
#define TXT_FILAMENT_TEMP (0x2000+33*0x30)
|
|
|
|
#define TXT_FINISH_TIME (0x2000+34*0x30)
|
|
#define TXT_VERSION (0x2000+35*0x30)
|
|
#define TXT_PREHEAT_HOTEND (0x2000+36*0x30)
|
|
#define TXT_PREHEAT_BED (0x2000+37*0x30)
|
|
|
|
#define TXT_OUTAGE_RECOVERY_FILE 0x2180
|
|
|
|
#define ADDRESS_SYSTEM_AUDIO 0x0080
|
|
|
|
#define ADDRESS_MOVE_DISTANCE 0x4300
|
|
#define ADDRESS_SYSTEM_LED_STATUS 0x4500
|
|
#define ADDRESS_PRINT_SETTING_LED_STATUS 0x4550
|
|
|
|
/*********************** KEY VALUE **************************/
|
|
#define KEY_ADDRESS 0x1000
|
|
|
|
// MAIN PAGE KEY
|
|
|
|
#define KEY_MAIN_TO_FILE 1
|
|
#define KEY_MAIN_TO_TOOL 2
|
|
#define KEY_MAIN_TO_PREPARE 3
|
|
#define KEY_MAIN_TO_SYSTEM 4
|
|
|
|
// FILE PAGE KEY
|
|
|
|
#define KEY_FILE_TO_MAIN 1
|
|
#define KEY_PRINT 6
|
|
#define KEY_RESUME 5
|
|
#define KEY_PgUp 2
|
|
#define KEY_pgDn 3
|
|
#define KEY_FLASH 4
|
|
#define KEY_FILE0 7
|
|
#define KEY_FILE1 8
|
|
#define KEY_FILE2 9
|
|
#define KEY_FILE3 10
|
|
#define KEY_FILE4 11
|
|
|
|
#define KEY_CONTINUE 2
|
|
#define KEY_PAUSE 2
|
|
#define KEY_STOP 3
|
|
#define KEY_TO_ADJUST 4
|
|
#define KEY_ADJUST_TO_PRINT 1
|
|
#define KEY_ADJUST_ENSURE 7
|
|
#define KEY_CHECK_DOOR 2
|
|
#define KEY_DONE_OFF 3
|
|
|
|
// TOOL PAGE KEY
|
|
|
|
#define KEY_TOOL_TO_MAIN 1
|
|
#define KEY_TOOL_TO_MOVE 2
|
|
#define KEY_TOOL_TO_TEMP 3
|
|
#define KEY_TOOL_TO_SPEED 4
|
|
#define KEY_TOOL_LIGHT 5
|
|
|
|
#define KEY_MOVE_TO_TOLL 1// move page
|
|
#define KEY_MOVE_X 2
|
|
#define KEY_01 3
|
|
#define KEY_MOVE_NX 4
|
|
#define KEY_HOME_X 5
|
|
#define KEY_MOVE_Y 6
|
|
#define KEY_1 7
|
|
#define KEY_MOVE_NY 8
|
|
#define KEY_HOME_Y 9
|
|
#define KEY_MOVE_Z 10
|
|
#define KEY_10 11
|
|
#define KEY_MOVE_NZ 12
|
|
#define KEY_HOME_Z 13
|
|
#define KEY_SPEED_LOW 14
|
|
#define KEY_SPEED_MIDDLE 15
|
|
#define KEY_SPEED_HIGHT 16
|
|
#define KEY_HOME_ALL 17
|
|
|
|
#define KEY_TEMP_TO_TOOL 1 //Temperature setting page
|
|
#define KEY_BED_ADD 2
|
|
#define KEY_BED_DEC 3
|
|
#define KEY_HOTEND_ADD 4
|
|
#define KEY_HOTEND_DEC 5
|
|
#define KEY_COOL 6
|
|
#define KEY_TEMP_ENSURE 7
|
|
|
|
#define KEY_SPEED_TO_TOOL 1 //speed setting page
|
|
#define KEY_FAN_SPEED_ADD 2
|
|
#define KEY_FAN_SPEED_DEC 3
|
|
#define KEY_PRINT_SPEED_ADD 4
|
|
#define KEY_PRINT_SPEED_DEC 5
|
|
#define KEY_SPEED_ENSURE 6
|
|
|
|
#define KEY_PREPARE_TO_MAIN 1 //PREPARE PAGE TO MAIN
|
|
#define KEY_PREPARE_TO_PreLEVE 2
|
|
#define KEY_PreLEVE_TO_PREPARE 1
|
|
#define KEY_PreLEVE_TO_LEVELING 2
|
|
#define KEY_PreLEVE_TO_ADVANCE 3
|
|
#define KEY_ADVANCE_TO_PreLEVE 1
|
|
#define KEY_LEVEL_ADD 3
|
|
#define KEY_LEVEL_DEC 2
|
|
#define KEY_LEVEL_ENSURE 4
|
|
|
|
|
|
#define KEY_PREPARE_TO_PREHEAT 3
|
|
#define KEY_PREHEAT_TO_PREPARE 1
|
|
#define KEY_PREHEAT_PLA 2
|
|
#define KEY_PREHEAT_ABS 3
|
|
|
|
#define KEY_PREPARE_TO_FILAMENT 4
|
|
#define KEY_FILAMENT_TO_PREPARE 1
|
|
#define KEY_RETREAT 3
|
|
#define KEY_FORWARD 2
|
|
#define KEY_FILAMENT_STOP 4
|
|
|
|
// SYSTEM PAGE KEY
|
|
|
|
#define KEY_SYS_TO_MAIN 1
|
|
#define KEY_LANGUAGE 2
|
|
#define KEY_SYS_TO_WIFI 3
|
|
#define KEY_WIFI_TO_SYS 1
|
|
|
|
#define KEY_BEEP 4
|
|
#define KEY_SYS_TO_ABOUT 5
|
|
#define KEY_ABOUT_TO_SYS 1
|
|
|
|
#define KEY_SYS_TO_RECORD 6
|
|
#define KEY_RECORD_TO_SYS 1
|
|
#define KEY_RECORD_PaUp 2
|
|
#define KEY_RECORD_PaDn 3
|
|
#define KEY_RECORD_FLASH 4
|
|
|
|
#define COLOR_RED 0xF800
|
|
#define COLOR_BLUE 0x0210
|
|
|
|
namespace Anycubic {
|
|
|
|
enum language_t : uint8_t { ENG, CHS };
|
|
|
|
class DgusTFT;
|
|
extern DgusTFT ui;
|
|
|
|
typedef struct _lcd_info_t {
|
|
language_t language;
|
|
bool audio_on;
|
|
} lcd_info_t;
|
|
|
|
class DgusTFT {
|
|
static printer_state_t printer_state;
|
|
static paused_state_t pause_state;
|
|
#if HAS_HOTEND
|
|
static heater_state_t hotend_state;
|
|
#endif
|
|
#if HAS_HEATED_BED
|
|
static heater_state_t hotbed_state;
|
|
#endif
|
|
static char panel_command[MAX_CMND_LEN];
|
|
static uint8_t command_len;
|
|
static char selectedfile[MAX_PATH_LEN];
|
|
static file_menu_t file_menu;
|
|
static bool data_received;
|
|
static uint8_t data_buf[DATA_BUF_SIZE];
|
|
static uint8_t data_index;
|
|
static uint16_t page_index_last, page_index_last_2;
|
|
static uint8_t message_index;
|
|
static uint8_t pop_up_index;
|
|
static uint32_t key_value;
|
|
static uint8_t lcd_txtbox_index;
|
|
static uint8_t lcd_txtbox_page;
|
|
static int16_t feedrate_back;
|
|
static language_t ui_language;
|
|
|
|
public:
|
|
DgusTFT();
|
|
|
|
static lcd_info_t lcd_info, lcd_info_back;
|
|
static uint16_t page_index_now;
|
|
|
|
static void Startup();
|
|
static void ParamInit();
|
|
static void IdleLoop();
|
|
static void PrinterKilled(FSTR_P,FSTR_P);
|
|
static void MediaEvent(media_event_t);
|
|
static void TimerEvent(timer_event_t);
|
|
static void FilamentRunout();
|
|
static void ConfirmationRequest(const char * const);
|
|
static void StatusChange(const char * const);
|
|
static void PowerLoss();
|
|
static void PowerLossRecovery();
|
|
static void HomingStart();
|
|
static void HomingComplete();
|
|
|
|
static void set_descript_color(const uint16_t color, const uint8_t index=lcd_txtbox_index);
|
|
static void set_language(language_t);
|
|
static void toggle_language();
|
|
static void goto_system_page();
|
|
static void toggle_audio();
|
|
static void store_changes();
|
|
|
|
#if HAS_HOTEND
|
|
static void send_temperature_hotend(uint32_t addr);
|
|
#endif
|
|
#if HAS_HEATED_BED
|
|
static void send_temperature_bed(uint32_t addr);
|
|
#endif
|
|
|
|
typedef void (*p_fun)();
|
|
static void page1();
|
|
static void page2();
|
|
static void page3();
|
|
static void page4();
|
|
static void page5();
|
|
static void page6();
|
|
static void page7(); // tool
|
|
static void page8();
|
|
static void page9();
|
|
static void page10(); // fan and print speed
|
|
static void page11(); // system
|
|
static void page12();
|
|
static void page13();
|
|
static void page14();
|
|
static void page15();
|
|
static void page16();
|
|
static void page17();
|
|
static void page18();
|
|
static void page19();
|
|
static void page20();
|
|
static void page21();
|
|
static void page22();
|
|
static void page23();
|
|
static void page24();
|
|
static void page25();
|
|
static void page26();
|
|
static void page27();
|
|
static void page28();
|
|
static void page29();
|
|
static void page30();
|
|
static void page31();
|
|
static void page32();
|
|
|
|
#if HAS_LEVELING
|
|
static void page33();
|
|
#endif
|
|
static void page34();
|
|
static void page115();
|
|
static void page117(); // CHS Mute handler
|
|
static void page124();
|
|
static void page125();
|
|
static void page170(); // ENG Mute handler
|
|
|
|
#if ENABLED(POWER_LOSS_RECOVERY)
|
|
static void page171(); // CHS power outage resume handler
|
|
static void page173(); // ENG power outage resume handler
|
|
#endif
|
|
#if HAS_LEVELING
|
|
static void page175(); // ENG probe preheating handler
|
|
static void page176(); // CHS probe preheating handler
|
|
#endif
|
|
|
|
static void page177_to_198();
|
|
//static void page178_to_181_190_to_193();
|
|
static void page199_to_200();
|
|
|
|
static void page201();
|
|
static void page202();
|
|
static void page203();
|
|
static void page204();
|
|
static void page205();
|
|
static void page206();
|
|
|
|
static void pop_up_manager();
|
|
|
|
static void SendtoTFT(FSTR_P const=nullptr);
|
|
static void SendtoTFTLN(FSTR_P const=nullptr);
|
|
static bool ReadTFTCommand();
|
|
static int8_t Findcmndpos(const char *, const char);
|
|
static void CheckHeaters();
|
|
static void SendFileList(int8_t);
|
|
static void SelectFile();
|
|
static void ProcessPanelRequest();
|
|
static void PanelInfo(uint8_t);
|
|
static void PanelAction(uint8_t);
|
|
static void PanelProcess(uint8_t);
|
|
|
|
static void SendValueToTFT(const uint16_t value, const uint16_t address);
|
|
static void RequestValueFromTFT(const uint16_t address);
|
|
static void SendTxtToTFT(const char *pdata, const uint16_t address);
|
|
static void SendColorToTFT(const uint16_t color, const uint16_t address);
|
|
static void SendReadNumOfTxtToTFT(const uint8_t number, const uint16_t address);
|
|
static void ChangePageOfTFT(const uint16_t page_index, const bool no_send=false);
|
|
static void FakeChangePageOfTFT(const uint16_t page_index);
|
|
static void LcdAudioSet(const bool audio_on);
|
|
|
|
private:
|
|
|
|
};
|
|
|
|
extern DgusTFT Dgus;
|
|
}
|