/* AnycubicTouchscreen.h --- Support for Anycubic i3 Mega TFT Created by Christian Hopp on 2017-12-09 Modified by Oliver Köster on 2020-06-02 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef anycubic_touchscreen_h #define anycubic_touchscreen_h #include "../../../inc/MarlinConfigPre.h" #include "../../../module/probe.h" #define TFTBUFSIZE 4 #define TFT_MAX_CMD_SIZE 96 #define MSG_MY_VERSION CUSTOM_BUILD_VERSION #define MAX_PRINTABLE_FILENAME_LEN 26 enum AnycubicMediaPrintState { AMPRINTSTATE_NOT_PRINTING, AMPRINTSTATE_PRINTING, AMPRINTSTATE_PAUSE_REQUESTED, AMPRINTSTATE_PAUSED, AMPRINTSTATE_STOP_REQUESTED, AMPRINTSTATE_PROBING }; enum AnycubicMediaPauseState { AMPAUSESTATE_NOT_PAUSED, AMPAUSESTATE_PARKING, AMPAUSESTATE_PARKED, AMPAUSESTATE_FILAMENT_OUT, AMPAUSESTATE_FILAMENT_PURGING, AMPAUSESTATE_HEATER_TIMEOUT, AMPAUSESTATE_REHEATING, AMPAUSESTATE_REHEAT_FINISHED, AMPAUSESTATE_PAUSED }; #define SM_DIR_UP_S "DIR_UP~1.GCO" #define SM_SPECIAL_MENU_S "" #define SM_PID_HOTEND_L "" #define SM_PID_BED_L "" #define SM_SAVE_EEPROM_L "" #define SM_LOAD_DEFAULTS_L "" #define SM_PREHEAT_BED_L "" #define SM_MESH_MENU_L "" #define SM_MESH_START_L "" #define SM_MESH_NEXT_L "" #define SM_Z_UP_01_L "" #define SM_Z_DN_01_L "" #define SM_Z_UP_002_L "" #define SM_Z_DN_002_L "" #define SM_Z_UP_001_L "" #define SM_Z_DN_001_L "" #define SM_BLTOUCH_L "" #define SM_RESETLV_L "" #define SM_PAUSE_L "" #define SM_RESUME_L "" #define SM_DIS_FILSENS_L "" #define SM_EN_FILSENS_L "" #define SM_EXIT_L "" #define SM_BACK_L "" #define SM_FLOWMENU_L "" #define SM_FLOW_DISP_L "" #define SM_FLOW_UP_L "" #define SM_FLOW_DN_L "" #define SM_FLOW_EXIT_L "" #define SM_EZLVL_MENU_L "" #define SM_EZLVL_P1_L "" #define SM_EZLVL_P2_L "" #define SM_EZLVL_P3_L "" #define SM_EZLVL_P4_L "" #define SM_EZLVL_EXIT_L "" #define SM_BLTZMENU_L "" #define SM_BLTZ_DISP_L "" #define SM_BLTZ_UP_L "" #define SM_BLTZ_DN_L "" #define SM_BLTZ_EXIT_L "" #define SM_HS_DISABLE_L "" #define SM_HS_ENABLE_L "" #endif // !KNUTWURST_DGUS2_TFT #if ENABLED(KNUTWURST_DGUS2_TFT) #define SM_DIR_UP_L "/.. .gcode" #define SM_SPECIAL_MENU_L " .gcode" #define SM_PID_HOTEND_L " .gcode" #define SM_PID_BED_L ".gcode" #define SM_SAVE_EEPROM_L " .gcode" #define SM_LOAD_DEFAULTS_L " .gcode" #define SM_PREHEAT_BED_L " .gcode" #define SM_MESH_MENU_L " .gcode" #define SM_MESH_START_L ".gcode" #define SM_MESH_NEXT_L " .gcode" #define SM_Z_UP_01_L " .gcode" #define SM_Z_DN_01_L " .gcode" #define SM_Z_UP_002_L " .gcode" #define SM_Z_DN_002_L " .gcode" #define SM_Z_UP_001_L " .gcode" #define SM_Z_DN_001_L " .gcode" #define SM_BLTOUCH_L ".gcode" #define SM_RESETLV_L " .gcode" #define SM_PAUSE_L " .gcode" #define SM_RESUME_L ".gcode" #define SM_DIS_FILSENS_L ".gcode" #define SM_EN_FILSENS_L ".gcode" #define SM_EXIT_L " .gcode" #define SM_BACK_L " .gcode" #define SM_FLOWMENU_L " .gcode" #define SM_FLOW_DISP_L " .gcode" #define SM_FLOW_UP_L " .gcode" #define SM_FLOW_DN_L " .gcode" #define SM_FLOW_EXIT_L ".gcode" #define SM_EZLVL_MENU_L ".gcode" #define SM_EZLVL_P1_L " .gcode" #define SM_EZLVL_P2_L " .gcode" #define SM_EZLVL_P3_L " .gcode" #define SM_EZLVL_P4_L " .gcode" #define SM_EZLVL_EXIT_L ".gcode" #define SM_BLTZMENU_L " .gcode" #define SM_BLTZ_DISP_L " .gcode" #define SM_BLTZ_UP_L " .gcode" #define SM_BLTZ_DN_L " .gcode" #define SM_BLTZ_EXIT_L " .gcode" #define SM_HS_DISABLE_L " .gcode" #define SM_HS_ENABLE_L " .gcode" #endif // KNUTWURST_DGUS2_TFT class AnycubicTouchscreenClass { public: AnycubicTouchscreenClass(); void Setup(); void CommandScan(); void FilamentRunout(); void DoFilamentRunoutCheck(); void UserConfirmRequired(const char*); void SDCardStateChange(bool); void SDCardError(); void KillTFT(); void OnPrintTimerStarted(); void OnPrintTimerPaused(); void OnPrintTimerStopped(); #if BOTH(ANYCUBIC_TFT_DEBUG, KNUTWURST_DGUS2_TFT) void Command(const char* const command); #endif #if ENABLED(KNUTWURST_CHIRON) void LevelingDone(); #endif private: char TFTcmdbuffer[TFTBUFSIZE][TFT_MAX_CMD_SIZE]; int TFTbuflen = 0; int TFTbufindr = 0; int TFTbufindw = 0; char serial3_char; int serial3_count = 0; char* TFTstrchr_pointer; char FlagResumFromOutage = 0; uint16_t HeaterCheckCount = 0; int currentFlowRate = 0; bool PrintdoneAndPowerOFF = true; bool powerOFFflag = false; xy_uint8_t selectedmeshpoint; float live_Zoffset; static AnycubicMediaPrintState mediaPrintingState; static AnycubicMediaPauseState mediaPauseState; #if defined(POWER_OUTAGE_TEST) struct OutageDataStruct { char OutageDataVersion; char OutageFlag; float last_position[XYZE]; float last_bed_temp; float last_hotend_temp; long lastSDposition; } OutageData; #endif int CodeValueInt(); float CodeValue(); bool CodeSeen(char); void StartPrint(); void PausePrint(); void ResumePrint(); void StopPrint(); void GetCommandFromTFT(); void CheckHeaterError(); void HandleSpecialMenu(); void RenderCurrentFileList(); void RenderSpecialMenu(uint16_t); void RenderCurrentFolder(uint16_t); char currentTouchscreenSelection[64]; char currentFileOrDirectory[64]; String flowRateBuffer; String zOffsetBuffer; uint8_t SpecialMenu = false; uint8_t MMLMenu = false; uint8_t FlowMenu = false; uint8_t BLTouchMenu = false; uint8_t LevelMenu = false; uint8_t CaseLight = true; #if ENABLED(KNUTWURST_MEGA_P_LASER) typedef struct { unsigned char bfType[2]; unsigned char bfSize[4]; unsigned char bfReserved1[2]; unsigned char bfReserved2[2]; unsigned char bfOffBits[4]; unsigned char biSize[4]; unsigned char biWidth[4]; unsigned char biHeight[4]; unsigned char biPlanes[2]; unsigned char biBitCount[2]; unsigned char biCompression[4]; unsigned char biSizeImage[4]; unsigned char biXPelsPerMeter[4]; unsigned char biYPelsPerMeter[4]; unsigned char biClrUsed[4]; unsigned char biClrImportant[4]; } BMP_HEAD; typedef struct { unsigned long pic_file_size; unsigned long pic_ptr; unsigned long pic_start; float pic_pixel_distance; float laser_height; float x_offset; float y_offset; unsigned int pic_real_width; unsigned int pic_width; unsigned int pic_height; unsigned char pic_bit; unsigned char pic_width_odd; unsigned char pic_height_odd; unsigned char pic_print_status; unsigned char pic_dir; unsigned char pic_vector; unsigned char pic_x_mirror; unsigned char pic_y_mirror; unsigned char pic_laser_time; } PRINTER_STRUCT; #define PIC_FIXED 0.1f // // POINT/MM #define PIC_OPEN 50 // // ms #define PIC_SPEDD 20000 #define MIN_GRAY_VLAUE 20 #define LASER_PRINT_SPEED 30 // 50*60 #endif // if ENABLED(KNUTWURST_MEGA_P_LASER) }; extern AnycubicTouchscreenClass AnycubicTouchscreen; #endif // ifndef anycubic_touchscreen_h