/** * Marlin 3D Printer Firmware * Copyright (c) 2020 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 . * */ #pragma once /** * DWIN by Creality3D */ #include "../dwin_lcd.h" #include "rotary_encoder.h" #include "../../../libs/BL24CXX.h" #include "../../../inc/MarlinConfigPre.h" #if ANY(HAS_HOTEND, HAS_HEATED_BED, HAS_FAN) && PREHEAT_COUNT #define HAS_PREHEAT 1 #if PREHEAT_COUNT < 2 #error "Creality DWIN requires two material preheat presets." #endif #endif enum processID : uint8_t { // Process ID MainMenu, SelectFile, Prepare, Control, Leveling, PrintProcess, AxisMove, TemperatureID, Motion, Info, Tune, #if HAS_PREHEAT PLAPreheat, ABSPreheat, #endif MaxSpeed, MaxSpeed_value, MaxAcceleration, MaxAcceleration_value, MaxJerk, MaxJerk_value, Step, Step_value, // Last Process ID Last_Prepare, // Back Process ID Back_Main, Back_Print, // Date variable ID Move_X, Move_Y, Move_Z, #if HAS_HOTEND Extruder, ETemp, #endif Homeoffset, #if HAS_HEATED_BED BedTemp, #endif #if HAS_FAN FanSpeed, #endif PrintSpeed, // Window ID Print_window, Popup_Window }; // Picture ID #define Start_Process 0 #define Language_English 1 #define Language_Chinese 2 // ICON ID #define ICON 0x09 #define ICON_LOGO 0 #define ICON_Print_0 1 #define ICON_Print_1 2 #define ICON_Prepare_0 3 #define ICON_Prepare_1 4 #define ICON_Control_0 5 #define ICON_Control_1 6 #define ICON_Leveling_0 7 #define ICON_Leveling_1 8 #define ICON_HotendTemp 9 #define ICON_BedTemp 10 #define ICON_Speed 11 #define ICON_Zoffset 12 #define ICON_Back 13 #define ICON_File 14 #define ICON_PrintTime 15 #define ICON_RemainTime 16 #define ICON_Setup_0 17 #define ICON_Setup_1 18 #define ICON_Pause_0 19 #define ICON_Pause_1 20 #define ICON_Continue_0 21 #define ICON_Continue_1 22 #define ICON_Stop_0 23 #define ICON_Stop_1 24 #define ICON_Bar 25 #define ICON_More 26 #define ICON_Axis 27 #define ICON_CloseMotor 28 #define ICON_Homing 29 #define ICON_SetHome 30 #define ICON_PLAPreheat 31 #define ICON_ABSPreheat 32 #define ICON_Cool 33 #define ICON_Language 34 #define ICON_MoveX 35 #define ICON_MoveY 36 #define ICON_MoveZ 37 #define ICON_Extruder 38 #define ICON_Temperature 40 #define ICON_Motion 41 #define ICON_WriteEEPROM 42 #define ICON_ReadEEPROM 43 #define ICON_ResumeEEPROM 44 #define ICON_Info 45 #define ICON_SetEndTemp 46 #define ICON_SetBedTemp 47 #define ICON_FanSpeed 48 #define ICON_SetPLAPreheat 49 #define ICON_SetABSPreheat 50 #define ICON_MaxSpeed 51 #define ICON_MaxAccelerated 52 #define ICON_MaxJerk 53 #define ICON_Step 54 #define ICON_PrintSize 55 #define ICON_Version 56 #define ICON_Contact 57 #define ICON_StockConfiguraton 58 #define ICON_MaxSpeedX 59 #define ICON_MaxSpeedY 60 #define ICON_MaxSpeedZ 61 #define ICON_MaxSpeedE 62 #define ICON_MaxAccX 63 #define ICON_MaxAccY 64 #define ICON_MaxAccZ 65 #define ICON_MaxAccE 66 #define ICON_MaxSpeedJerkX 67 #define ICON_MaxSpeedJerkY 68 #define ICON_MaxSpeedJerkZ 69 #define ICON_MaxSpeedJerkE 70 #define ICON_StepX 71 #define ICON_StepY 72 #define ICON_StepZ 73 #define ICON_StepE 74 #define ICON_Setspeed 75 #define ICON_SetZOffset 76 #define ICON_Rectangle 77 #define ICON_BLTouch 78 #define ICON_TempTooLow 79 #define ICON_AutoLeveling 80 #define ICON_TempTooHigh 81 #define ICON_NoTips_C 82 #define ICON_NoTips_E 83 #define ICON_Continue_C 84 #define ICON_Continue_E 85 #define ICON_Cancel_C 86 #define ICON_Cancel_E 87 #define ICON_Confirm_C 88 #define ICON_Confirm_E 89 #define ICON_Info_0 90 #define ICON_Info_1 91 /** * 3-.0:The font size, 0x00-0x09, corresponds to the font size below: * 0x00=6*12 0x01=8*16 0x02=10*20 0x03=12*24 0x04=14*28 * 0x05=16*32 0x06=20*40 0x07=24*48 0x08=28*56 0x09=32*64 */ #define font6x12 0x00 #define font8x16 0x01 #define font10x20 0x02 #define font12x24 0x03 #define font14x28 0x04 #define font16x32 0x05 #define font20x40 0x06 #define font24x48 0x07 #define font28x56 0x08 #define font32x64 0x09 // Color #define Color_White 0xFFFF #define Color_Yellow 0xFF0F #define Color_Bg_Window 0x31E8 // Popup background color #define Color_Bg_Blue 0x1125 // Dark blue background color #define Color_Bg_Black 0x0841 // Black background color #define Color_Bg_Red 0xF00F // Red background color #define Popup_Text_Color 0xD6BA // Popup font background color #define Line_Color 0x3A6A // Split line color #define Rectangle_Color 0xEE2F // Blue square cursor color #define Percent_Color 0xFE29 // Percentage color #define BarFill_Color 0x10E4 // Fill color of progress bar #define Select_Color 0x33BB // Selected color extern uint8_t checkkey; extern float zprobe_zoffset; extern char print_filename[16]; extern millis_t dwin_heat_time; typedef struct { TERN_(HAS_HOTEND, int16_t E_Temp = 0); TERN_(HAS_HEATED_BED, int16_t Bed_Temp = 0); TERN_(HAS_PREHEAT, int16_t Fan_speed = 0); int16_t print_speed = 100; float Max_Feedspeed = 0; float Max_Acceleration = 0; float Max_Jerk = 0; float Max_Step = 0; float Move_X_scale = 0; float Move_Y_scale = 0; float Move_Z_scale = 0; #if HAS_HOTEND float Move_E_scale = 0; #endif float offset_value = 0; int8_t show_mode = 0; // -1: Temperature control 0: Printing temperature } HMI_value_t; #define DWIN_CHINESE 123 #define DWIN_ENGLISH 0 typedef struct { uint8_t language; bool pause_flag:1; bool pause_action:1; bool print_finish:1; bool done_confirm_flag:1; bool select_flag:1; bool home_flag:1; bool heat_flag:1; // 0: heating done 1: during heating #if ENABLED(PREVENT_COLD_EXTRUSION) bool ETempTooLow_flag:1; #endif #if HAS_LEVELING bool leveling_offset_flag:1; #endif #if HAS_FAN AxisEnum feedspeed_axis; #endif AxisEnum acc_axis, jerk_axis, step_axis; } HMI_Flag_t; extern HMI_value_t HMI_ValueStruct; extern HMI_Flag_t HMI_flag; // Show ICO void ICON_Print(bool show); void ICON_Prepare(bool show); void ICON_Control(bool show); void ICON_Leveling(bool show); void ICON_StartInfo(bool show); void ICON_Setting(bool show); void ICON_Pause(bool show); void ICON_Continue(bool show); void ICON_Stop(bool show); #if HAS_HOTEND || HAS_HEATED_BED // Popup message window void DWIN_Popup_Temperature(const bool toohigh); #endif #if HAS_HOTEND void Popup_Window_ETempTooLow(); #endif void Popup_Window_Resume(); void Popup_Window_Home(const bool parking=false); void Popup_Window_Leveling(); void Goto_PrintProcess(); void Goto_MainMenu(); // Variable control void HMI_Move_X(); void HMI_Move_Y(); void HMI_Move_Z(); void HMI_Move_E(); void HMI_Zoffset(); TERN_(HAS_HOTEND, void HMI_ETemp()); TERN_(HAS_HEATED_BED, void HMI_BedTemp()); TERN_(HAS_FAN, void HMI_FanSpeed()); void HMI_PrintSpeed(); void HMI_MaxFeedspeedXYZE(); void HMI_MaxAccelerationXYZE(); void HMI_MaxJerkXYZE(); void HMI_StepXYZE(); void update_variable(); void DWIN_Draw_Signed_Float(uint8_t size, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value); // SD Card void HMI_SDCardInit(); void HMI_SDCardUpdate(); // Main Process void Icon_print(bool value); void Icon_control(bool value); void Icon_temperature(bool value); void Icon_leveling(bool value); // Other void Draw_Status_Area(const bool with_update); // Status Area void HMI_StartFrame(const bool with_update); // Prepare the menu view void HMI_MainMenu(); // Main process screen void HMI_SelectFile(); // File page void HMI_Printing(); // Print page void HMI_Prepare(); // Prepare page void HMI_Control(); // Control page void HMI_Leveling(); // Level the page void HMI_AxisMove(); // Axis movement menu void HMI_Temperature(); // Temperature menu void HMI_Motion(); // Sports menu void HMI_Info(); // Information menu void HMI_Tune(); // Adjust the menu #if HAS_PREHEAT void HMI_PLAPreheatSetting(); // PLA warm-up setting void HMI_ABSPreheatSetting(); // ABS warm-up setting #endif void HMI_MaxSpeed(); // Maximum speed submenu void HMI_MaxAcceleration(); // Maximum acceleration submenu void HMI_MaxJerk(); // Maximum jerk speed submenu void HMI_Step(); // Transmission ratio void HMI_Init(); void DWIN_Update(); void EachMomentUpdate(); void DWIN_HandleScreen(); inline void DWIN_StartHoming() { HMI_flag.home_flag = true; } void DWIN_CompletedHoming(); void DWIN_CompletedLeveling();