From 7e97639e38ad106d20d0d0dda3640ef17ef7cda5 Mon Sep 17 00:00:00 2001 From: InsanityAutomation Date: Sun, 18 Apr 2021 17:00:19 -0400 Subject: [PATCH 1/6] Update Version.h --- Marlin/Version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/Version.h b/Marlin/Version.h index a26b65dcea..76bd78de49 100644 --- a/Marlin/Version.h +++ b/Marlin/Version.h @@ -111,7 +111,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -#define STRING_DISTRIBUTION_DATE "2021-04-03" +#define STRING_DISTRIBUTION_DATE "2021-04-18" /** * Defines a generic printer name to be output to the LCD after booting Marlin. From bc12ada74d1dbc86d733dcd0ebc05649f8dd3b33 Mon Sep 17 00:00:00 2001 From: InsanityAutomation Date: Mon, 19 Apr 2021 17:50:31 -0400 Subject: [PATCH 2/6] 422 and 427 adjustments --- Marlin/Configuration.h | 10 ++++++++-- Marlin/Configuration_adv.h | 18 ++++++++++-------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 181a614169..4b52012415 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -463,7 +463,7 @@ #endif #endif -#if ANY(MachineEnder3V2, MachineEnder3Pro422, MachineEnder3Pro427) +#if ANY(MachineEnder3V2, MachineEnder3Pro422, MachineEnder3Pro427, Creality422, Creality427) #define POWER_LOSS_RECOVERY //Screen will not compile without PLR #if NONE(BedAC, BedDC) #define BedDC @@ -476,6 +476,12 @@ #define RET6_12864_LCD #endif +#if ENABLED(MachineEnder3Pro422) + #define Creality422 +#elif ENABLED(MachineEnder3Pro427) + #define Creality427 +#endif + #if EITHER(Creality422, Creality427) && DISABLED(MachineEnder3V2) #define RET6_12864_LCD #endif @@ -580,7 +586,7 @@ #define LCD_SERIAL_PORT 2 #define LCD_BAUDRATE 115200 #define SERIAL_CATCHALL 0 -#elif ANY(MachineEnder3Pro422, MachineEnder3Pro427) && DISABLED(MachineEnder3V2) +#elif ANY(Creality422, Creality427) && DISABLED(MachineEnder3V2) #define SERIAL_PORT_2 3 #endif diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 7ce9e11a52..22a5ff9c90 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -988,7 +988,7 @@ // Increase the slowdown divisor for larger buffer sizes. #define SLOWDOWN #if ENABLED(SLOWDOWN) - #if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11, SKRMiniE3V2, MachineEnder3V2) + #if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11, SKRMiniE3V2, MachineEnder3V2, Creality422, Creality427) #define SLOWDOWN_DIVISOR 4 #else #define SLOWDOWN_DIVISOR 2 @@ -1108,7 +1108,7 @@ * vibration and surface artifacts. The algorithm adapts to provide the best possible step smoothing at the * lowest stepping frequencies. */ -#if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11, MachineEnder3V2) +#if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11, MachineEnder3V2, Creality422, Creality427) #define ADAPTIVE_STEP_SMOOTHING #endif @@ -1334,7 +1334,7 @@ // The standard SD detect circuit reads LOW when media is inserted and HIGH when empty. // Enable this option and set to HIGH if your SD cards are incorrectly detected. - #if NONE(MachineCR10SPro, MachineCRX, MachineEnder5Plus, MachineCR10Max, MachineEnder3V2, MachineEnder3Pro422, MachineEnder3Pro427, SKR14Turbo, SKR14, , Creality422, Creality427) + #if NONE(MachineCR10SPro, MachineCRX, MachineEnder5Plus, MachineCR10Max, MachineEnder3V2, SKR14Turbo, SKR14, , Creality422, Creality427) #define SD_DETECT_STATE HIGH #endif @@ -2149,7 +2149,7 @@ // The number of linear moves that can be in the planner at once. // The value of BLOCK_BUFFER_SIZE must be a power of 2 (e.g. 8, 16, 32) -#if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11, SKRMiniE3V2, MachineEnder3V2) || DISABLED(EXTENSIBLE_UI) +#if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11, SKRMiniE3V2, MachineEnder3V2, Creality422, Creality427) || DISABLED(EXTENSIBLE_UI) #define BLOCK_BUFFER_SIZE 16 #else #define BLOCK_BUFFER_SIZE 8 @@ -2159,7 +2159,7 @@ // The ASCII buffer for serial input #define MAX_CMD_SIZE 96 -#if ANY(MachineCR10Orig, SKRMiniE3V2, MachineEnder3V2) //melzi has more ram than a 2560 +#if ANY(MachineCR10Orig, SKRMiniE3V2, MachineEnder3V2, Creality422, Creality427) //melzi has more ram than a 2560 #define BUFSIZE 16 #elif ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11) #define BUFSIZE 8 @@ -2218,7 +2218,7 @@ * Currently handles M108, M112, M410, M876 * NOTE: Not yet implemented for all platforms. */ -#if NONE(SKRPRO11, SKRMiniE3V2, MachineEnder3V2, MachineEnder3V2, MachineEnder3Pro422, MachineEnder3Pro427) +#if NONE(SKRPRO11, SKRMiniE3V2) #define EMERGENCY_PARSER #endif @@ -2276,7 +2276,7 @@ * * Note that M207 / M208 / M209 settings are saved to EEPROM. */ - #if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11, MachineEnder3V2) + #if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11, MachineEnder3V2, Creality422, Creality427) #define FWRETRACT #endif #if ENABLED(FWRETRACT) @@ -4103,7 +4103,9 @@ // // M43 - display pin status, toggle pins, watch pins, watch endstops & toggle LED, test servo probe // -//#define PINS_DEBUGGING +#if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11, MachineEnder3V2, Creality422, Creality427) + #define PINS_DEBUGGING +#endif // Enable Marlin dev mode which adds some special commands //#define MARLIN_DEV_MODE From 4f2730b6f81c46c6a3def9946a6caf5266502717 Mon Sep 17 00:00:00 2001 From: InsanityAutomation Date: Mon, 19 Apr 2021 22:52:18 -0400 Subject: [PATCH 3/6] Update Creality_DWIN.h --- Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.h | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.h b/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.h index 2035c97be1..f04c454e4a 100644 --- a/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.h +++ b/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.h @@ -110,12 +110,8 @@ namespace ExtUI { #define StatusMessageString 0x20E8 #endif -#if defined(MCU_LPC1769) || defined(MCU_LPC1768) - #define DWIN_SERIAL LCD_SERIAL -#elif defined(TARGET_STM32F4) +#if defined(TARGET_STM32F4) #define DWIN_SERIAL Serial1 -#elif defined(__STM32F1__) - #define DWIN_SERIAL MSerial3 #else #define DWIN_SERIAL LCD_SERIAL #endif From 8c181685d220efde0b7243c9b4bfc182cbcc02fb Mon Sep 17 00:00:00 2001 From: InsanityAutomation Date: Tue, 20 Apr 2021 11:23:25 -0400 Subject: [PATCH 4/6] First sweep --- Marlin/Configuration.h | 6 +- .../lcd/extui/lib/Creality/Creality_DWIN.cpp | 191 ++++++------------ .../lcd/extui/lib/Creality/FileNavigator.cpp | 144 +++++++++++++ .../lcd/extui/lib/Creality/FileNavigator.h | 60 ++++++ 4 files changed, 272 insertions(+), 129 deletions(-) create mode 100644 Marlin/src/lcd/extui/lib/Creality/FileNavigator.cpp create mode 100644 Marlin/src/lcd/extui/lib/Creality/FileNavigator.h diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 4b52012415..1a29b9dd13 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -582,10 +582,14 @@ #define LCD_SERIAL_PORT 0 #define LCD_BAUDRATE 115200 #define SERIAL_CATCHALL -1 -#elif ANY(MachineCR10SPro, MachineCRX, MachineEnder5Plus, MachineCR10Max) && NONE(GraphicLCD, MachineEnder3V2) +#elif ANY(MachineCR10SPro, MachineCRX, MachineEnder5Plus, MachineCR10Max) && NONE(GraphicLCD, MachineEnder3V2, Creality422, Creality427) #define LCD_SERIAL_PORT 2 #define LCD_BAUDRATE 115200 #define SERIAL_CATCHALL 0 +#elif ANY(MachineCR10SPro, MachineCRX, MachineEnder5Plus, MachineCR10Max) && DISABLED(GraphicLCD) + #define LCD_SERIAL_PORT 3 + #define LCD_BAUDRATE 115200 + #define SERIAL_CATCHALL 1 #elif ANY(Creality422, Creality427) && DISABLED(MachineEnder3V2) #define SERIAL_PORT_2 3 #endif diff --git a/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.cpp b/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.cpp index 9952632bd9..0105e09883 100644 --- a/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.cpp +++ b/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.cpp @@ -1,4 +1,5 @@ #include "Creality_DWIN.h" +#include "FileNavigator.h" #include #include #include @@ -7,6 +8,8 @@ #if ENABLED(EXTENSIBLE_UI) namespace ExtUI { + static uint16_t fileIndex = 0; + uint8_t recordcount = 0; uint8_t waitway_lock = 0; const float manual_feedrate_mm_m[] = MANUAL_FEEDRATE; uint8_t startprogress = 0; @@ -586,84 +589,6 @@ void RTSSHOW::RTS_SndData(unsigned long n, unsigned long addr, unsigned char cmd RTS_SndData(); } -void RTSSHOW::RTS_SDCardUpate(bool removed, bool inserted) -{ - SERIAL_ECHOLNPGM_P(PSTR("SDUpdate")); - bool shouldCheck; - if(!removed && !inserted) - shouldCheck = isMediaInserted(); - else - shouldCheck = false; - - if (inserted || shouldCheck) - { - ExtUI::FileList files; - files.count(); - - int addrnum = 0; - int num = 0; - for (uint16_t i = 0; i < files.count() && i < (uint16_t)MaxFileNumber + addrnum; i++) - { - files.seek(i); - files.filename(); - const char *pointFilename = files.longFilename(); - int filenamelen = strlen(files.longFilename()); - int j = 1; - while ((strncmp(&pointFilename[j], ".gcode", 6) && strncmp(&pointFilename[j], ".GCODE", 6)) && (j++) < filenamelen) - ; - if (j >= filenamelen) - { - addrnum++; - continue; - } - - if (j >= TEXTBYTELEN) - { - //strncpy(&files.longFilename[TEXTBYTELEN -3],"~~",2); - //files.longFilename()[TEXTBYTELEN-1] = '\0'; - j = TEXTBYTELEN - 1; - } - - strncpy(CardRecbuf.Cardshowfilename[num], files.longFilename(), j); - - strcpy(CardRecbuf.Cardfilename[num], files.shortFilename()); - CardRecbuf.addr[num] = SDFILE_ADDR + num * 10; - rtscheck.RTS_SndData(CardRecbuf.Cardshowfilename[num], CardRecbuf.addr[num]); - CardRecbuf.Filesum = (++num); - //SERIAL_ECHO(" CardRecbuf.Filesum =="); - //SERIAL_ECHO(CardRecbuf.Filesum); - rtscheck.RTS_SndData(1, FilenameIcon + CardRecbuf.Filesum); - } - rtscheck.RTS_SndData(17, IconPrintstatus); - return; - } - - if(removed || !shouldCheck) - { - for (int i = 0; i < MaxFileNumber; i++) - { - for (int j = 0; j < 10; j++) - rtscheck.RTS_SndData(0, SDFILE_ADDR + i * 10 + j); - } - - for (int j = 0; j < 10; j++) - { - rtscheck.RTS_SndData(0, Printfilename + j); //clean screen. - rtscheck.RTS_SndData(0, Choosefilename + j); //clean filename - } - for (int j = 0; j < 8; j++) - rtscheck.RTS_SndData(0, FilenameCount + j); - for (int j = 1; j <= MaxFileNumber; j++) - { - rtscheck.RTS_SndData(10, FilenameIcon + j); - rtscheck.RTS_SndData(10, FilenameIcon1 + j); - } - SERIAL_ECHOLNPGM_P(PSTR("***Card Removed***")); - rtscheck.RTS_SndData(18, IconPrintstatus); - return; - } -} - void RTSSHOW::RTS_HandleData() { int Checkkey = -1; @@ -767,7 +692,7 @@ SERIAL_ECHOLNPGM_P(PSTR("BeginSwitch")); { InforShowStatus = false; CardRecbuf.recordcount = -1; - RTS_SDCardUpate(false, false); + filenavigator.getFiles(0); SERIAL_ECHOLNPGM_P(PSTR("Handle Data PrintFile 1 Setting Screen ")); RTS_SndData(ExchangePageBase + 46, ExchangepageAddr); } @@ -1593,43 +1518,32 @@ SERIAL_ECHOLNPGM_P(PSTR("BeginSwitch")); break; case Filename: - SERIAL_ECHOLNPGM_P(PSTR("Filename")); + SERIAL_ECHOLNPGM_P(PSTR("Filename Selected")); if (isMediaInserted() && recdat.addr == FilenameChs) { - SERIAL_ECHOLNPGM_P(PSTR("Filename-Media")); - if (recdat.data[0] > (uint8_t)CardRecbuf.Filesum) - break; + SERIAL_ECHOLNPGM_P(PSTR("Has Media")); - SERIAL_ECHOLNPGM_P(PSTR("Recdata")); - CardRecbuf.recordcount = recdat.data[0] - 1; - for (int j = 0; j < 10; j++) - RTS_SndData(0, Choosefilename + j); - int filelen = strlen(CardRecbuf.Cardshowfilename[(int)CardRecbuf.recordcount]); - filelen = (TEXTBYTELEN - filelen) / 2; - if (filelen > 0) - { - char buf[20]; - memset(buf, 0, sizeof(buf)); - strncpy(buf, " ", filelen); - strcpy(&buf[filelen], CardRecbuf.Cardshowfilename[(int)CardRecbuf.recordcount]); - RTS_SndData(buf, Choosefilename); + recordcount = recdat.data[0] - 1; + if(filenavigator.currentindex == 0 && filenavigator.folderdepth > 0 && recordcount == 0) { + filenavigator.upDIR(); + filenavigator.getFiles(0); + return; } - else - RTS_SndData(CardRecbuf.Cardshowfilename[(int)CardRecbuf.recordcount], Choosefilename); - for (int j = 0; j < 8; j++) - RTS_SndData(0, FilenameCount + j); - char buf[20]; - memset(buf, 0, sizeof(buf)); - sprintf(buf, "%d/%d", (int)recdat.data[0], CardRecbuf.Filesum); - RTS_SndData(buf, FilenameCount); - delay_ms(2); - for (int j = 1; j <= CardRecbuf.Filesum; j++) + for (int j = 1; j <= CardRecbuf.Filesum; j++) // Clear filename BG Color and Frame { RTS_SndData((unsigned long)0xFFFF, FilenameNature + j * 16); // white RTS_SndData(10, FilenameIcon1 + j); //clean } + if(filenavigator.getIndexisDir(fileIndex + recordcount)) + filenavigator.changeDIR((char *)filenavigator.getIndexName(fileIndex + recordcount)); + else{ + for (int j = 0; j < 10; j++) // clear current filename + RTS_SndData(0, Choosefilename + j); + RTS_SndData(filenavigator.getIndexName(fileIndex + recordcount), Choosefilename); + } + RTS_SndData((unsigned long)0x87F0, FilenameNature + recdat.data[0] * 16); // Change BG of selected line to Light Green RTS_SndData(6, FilenameIcon1 + recdat.data[0]); // show frame } @@ -1639,31 +1553,14 @@ SERIAL_ECHOLNPGM_P(PSTR("BeginSwitch")); { if (CardRecbuf.recordcount < 0) break; - printFile(CardRecbuf.Cardfilename[(int)CardRecbuf.recordcount]); + printFile(filenavigator.getIndexName(fileIndex + recordcount)); for (int j = 0; j < 10; j++) //clean screen. RTS_SndData(0, Printfilename + j); - int filelen = strlen(CardRecbuf.Cardshowfilename[(int)CardRecbuf.recordcount]); - filelen = (TEXTBYTELEN - filelen) / 2; - if (filelen > 0) - { - char buf[20]; - memset(buf, 0, sizeof(buf)); - strncpy(buf, " ", filelen); - strcpy(&buf[filelen], CardRecbuf.Cardshowfilename[(int)CardRecbuf.recordcount]); - RTS_SndData(buf, Printfilename); - } - else - RTS_SndData(CardRecbuf.Cardshowfilename[(int)CardRecbuf.recordcount], Printfilename); + RTS_SndData(filenavigator.getIndexName(fileIndex + recordcount), Printfilename); delay_ms(2); - #if FAN_COUNT > 0 - for (uint8_t i = 0; i < FAN_COUNT; i++) - setTargetFan_percent(FanOn, (fan_t)i); - #endif - FanStatus = false; - RTS_SndData(1 + CEIconGrap, IconPrintstatus); // 1 for Heating delay_ms(2); RTS_SndData(ExchangePageBase + 53, ExchangepageAddr); @@ -1720,18 +1617,56 @@ void onPrinterKilled(PGM_P killMsg, PGM_P component) { void onMediaInserted() { SERIAL_ECHOLNPGM_P(PSTR("***Initing card is OK***")); - rtscheck.RTS_SDCardUpate(false, true); + filenavigator.getFiles(0); } void onMediaError() { - rtscheck.RTS_SDCardUpate(true, false); + for (int i = 0; i < MaxFileNumber; i++) + { + for (int j = 0; j < 10; j++) + rtscheck.RTS_SndData(0, SDFILE_ADDR + i * 10 + j); + } + + for (int j = 0; j < 10; j++) + { + rtscheck.RTS_SndData(0, Printfilename + j); //clean screen. + rtscheck.RTS_SndData(0, Choosefilename + j); //clean filename + } + for (int j = 0; j < 8; j++) + rtscheck.RTS_SndData(0, FilenameCount + j); + for (int j = 1; j <= MaxFileNumber; j++) + { + rtscheck.RTS_SndData(10, FilenameIcon + j); + rtscheck.RTS_SndData(10, FilenameIcon1 + j); + } + rtscheck.RTS_SndData(18, IconPrintstatus); + return; SERIAL_ECHOLNPGM_P(PSTR("***Initing card fails***")); } void onMediaRemoved() { - rtscheck.RTS_SDCardUpate(true, false); + for (int i = 0; i < MaxFileNumber; i++) + { + for (int j = 0; j < 10; j++) + rtscheck.RTS_SndData(0, SDFILE_ADDR + i * 10 + j); + } + + for (int j = 0; j < 10; j++) + { + rtscheck.RTS_SndData(0, Printfilename + j); //clean screen. + rtscheck.RTS_SndData(0, Choosefilename + j); //clean filename + } + for (int j = 0; j < 8; j++) + rtscheck.RTS_SndData(0, FilenameCount + j); + for (int j = 1; j <= MaxFileNumber; j++) + { + rtscheck.RTS_SndData(10, FilenameIcon + j); + rtscheck.RTS_SndData(10, FilenameIcon1 + j); + } + rtscheck.RTS_SndData(18, IconPrintstatus); + return; SERIAL_ECHOLN("***Card Removed***"); } diff --git a/Marlin/src/lcd/extui/lib/Creality/FileNavigator.cpp b/Marlin/src/lcd/extui/lib/Creality/FileNavigator.cpp new file mode 100644 index 0000000000..5789a6a3d2 --- /dev/null +++ b/Marlin/src/lcd/extui/lib/Creality/FileNavigator.cpp @@ -0,0 +1,144 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 . + * + */ + +/* **************************************** + * lcd/extui/lib/nextion/FileNavigator.cpp + * **************************************** + * Extensible_UI implementation for Nextion + * https://github.com/Skorpi08 + * ***************************************/ + +#include "../../../../inc/MarlinConfigPre.h" + + + +#include "FileNavigator.h" + +using namespace ExtUI; + +#define DEBUG_OUT NEXDEBUGLEVEL +#include "../../../../core/debug_out.h" + +FileList FileNavigator::filelist; // Instance of the Marlin file API +char FileNavigator::currentfoldername[MAX_PATH_LEN]; // Current folder path +uint16_t FileNavigator::lastindex; +uint8_t FileNavigator::folderdepth; +uint16_t FileNavigator::currentindex; // override the panel request + +FileNavigator filenavigator; + +FileNavigator::FileNavigator() { reset(); } + +void FileNavigator::reset() { + currentfoldername[0] = '\0'; + folderdepth = 0; + currentindex = 0; + lastindex = 0; + // Start at root folder + while (!filelist.isAtRootDir()) filelist.upDir(); + refresh(); +} + +void FileNavigator::refresh() { filelist.refresh(); } + + +bool FileNavigator::getIndexisDir(uint16_t index){ + filelist.seek(index); + return filelist.isDir(); +} + +const char *FileNavigator::getIndexName(uint16_t index){ + filelist.seek(index); + return filelist.shortFilename(); +} + +void FileNavigator::getFiles(uint16_t index) { + uint16_t files = DISPLAY_FILES, fseek = 0, fcnt = 0; + if (index == 0) + currentindex = 0; + else { + // Each time we change folder we reset the file index to 0 and keep track + // of the current position as the TFT panel isn't aware of folder trees. + --currentindex; // go back a file to take account of the .. added to the root. + if (index > lastindex) + currentindex += files + 1; + else if (currentindex >= files) + currentindex -= files - 1; + else + currentindex = 0; + } + lastindex = index; + + DEBUG_ECHOLNPAIR("index=", index, " currentindex=", currentindex); + + if (currentindex == 0 && folderdepth > 0) { // Add a link to go up a folder + files--; + rtscheck.RTS_SndData(filelist.shortFilename(), SDFILE_ADDR); + fcnt++; + } + + for (uint16_t seek = currentindex; seek < currentindex + files; seek++) { + if (filelist.seek(seek)) { + rtscheck.RTS_SndData(filelist.shortFilename(), (SDFILE_ADDR + (fcnt * 10))); + if (filelist.isDir()) + rtscheck.RTS_SndData((unsigned long)0x1A2B, (FilenameNature + (fcnt * 16))); // Change BG of selected line to Light Green + else + rtscheck.RTS_SndData((unsigned long)0xFFFF, FilenameNature + fcnt * 16); // white + rtscheck.RTS_SndData(1, FilenameIcon + ++fcnt); + fcnt++; + fseek = seek; + DEBUG_ECHOLNPAIR("-", seek, " '", filelist.longFilename(), "' '", currentfoldername, "", filelist.shortFilename(), "'\n"); + } + } +} + +void FileNavigator::changeDIR(char *folder) { + DEBUG_ECHOLNPAIR("currentfolder: ", currentfoldername, " New: ", folder); + if (folderdepth >= MAX_FOLDER_DEPTH) return; // limit the folder depth + strcat(currentfoldername, folder); + strcat(currentfoldername, "/"); + filelist.changeDir(folder); + refresh(); + folderdepth++; + currentindex = 0; +} + +void FileNavigator::upDIR() { + filelist.upDir(); + refresh(); + folderdepth--; + currentindex = 0; + // Remove the last child folder from the stored path + if (folderdepth == 0) { + currentfoldername[0] = '\0'; + reset(); + } + else { + char *pos = nullptr; + for (uint8_t f = 0; f < folderdepth; f++) + pos = strchr(currentfoldername, '/'); + pos[1] = '\0'; + } + DEBUG_ECHOLNPAIR("depth: ", folderdepth, " currentfoldername: ", currentfoldername); +} + +char* FileNavigator::getCurrentFolderName() { return currentfoldername; } diff --git a/Marlin/src/lcd/extui/lib/Creality/FileNavigator.h b/Marlin/src/lcd/extui/lib/Creality/FileNavigator.h new file mode 100644 index 0000000000..0f37e8eaa6 --- /dev/null +++ b/Marlin/src/lcd/extui/lib/Creality/FileNavigator.h @@ -0,0 +1,60 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 + +/* **************************************** + * lcd/extui/lib/nextion/FileNavigator.cpp + * **************************************** + * Extensible_UI implementation for Nextion + * https://github.com/Skorpi08 + * ***************************************/ + +#include "../../ui_api.h" +#include "Creality_DWIN.h" + +#define MAX_FOLDER_DEPTH 4 // Limit folder depth TFT has a limit for the file path +#define MAX_CMND_LEN 16 * MAX_FOLDER_DEPTH // Maximum Length for a Panel command +#define MAX_PATH_LEN 16 * MAX_FOLDER_DEPTH // Maximum number of characters in a SD file path +#define DISPLAY_FILES 5 + +using namespace ExtUI; + +class FileNavigator { + public: + FileNavigator(); + static void reset(); + static void getFiles(uint16_t); + static void upDIR(); + static void changeDIR(char *); + static void refresh(); + static char* getCurrentFolderName(); + static uint8_t folderdepth; + static uint16_t currentindex; + static bool getIndexisDir(uint16_t); + const char *getIndexName(uint16_t); + private: + static FileList filelist; + static char currentfoldername[MAX_PATH_LEN]; + static uint16_t lastindex; +}; + +extern FileNavigator filenavigator; From 39e4ae2d7af8bb60c10a6c9d6759805c992c4bf5 Mon Sep 17 00:00:00 2001 From: InsanityAutomation Date: Wed, 21 Apr 2021 19:08:16 -0400 Subject: [PATCH 5/6] Working --- .../lcd/extui/lib/Creality/Creality_DWIN.cpp | 79 +++++++++++++------ .../lcd/extui/lib/Creality/Creality_DWIN.h | 10 +-- .../lcd/extui/lib/Creality/FileNavigator.cpp | 56 ++++++++++--- .../lcd/extui/lib/Creality/FileNavigator.h | 3 +- 4 files changed, 103 insertions(+), 45 deletions(-) diff --git a/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.cpp b/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.cpp index 0105e09883..a9e0318e34 100644 --- a/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.cpp +++ b/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.cpp @@ -13,7 +13,6 @@ namespace ExtUI uint8_t waitway_lock = 0; const float manual_feedrate_mm_m[] = MANUAL_FEEDRATE; uint8_t startprogress = 0; - CRec CardRecbuf; char waitway = 0; int recnum = 0; @@ -263,6 +262,10 @@ void onIdle() } rtscheck.RTS_SndData((unsigned int)getProgress_percent(), Percentage); } + else if(getTargetTemp_celsius(BED)==0 && getTargetTemp_celsius(H0)==0) + { + rtscheck.RTS_SndData(0 + CEIconGrap, IconPrintstatus); + } else if (getActualTemp_celsius(BED) < (getTargetTemp_celsius(BED) - THERMAL_PROTECTION_BED_HYSTERESIS ) || (getActualTemp_celsius(H0) < (getTargetTemp_celsius(H0) - THERMAL_PROTECTION_HYSTERESIS))) { rtscheck.RTS_SndData(1 + CEIconGrap, IconPrintstatus); // Heating Status @@ -273,9 +276,11 @@ void onIdle() rtscheck.RTS_SndData(8 + CEIconGrap, IconPrintstatus); // Cooling Status PrinterStatusKey[1] = (PrinterStatusKey[1] == 0 ? 2 : PrinterStatusKey[1]); } + else + rtscheck.RTS_SndData(0 + CEIconGrap, IconPrintstatus); - rtscheck.RTS_SndData(getZOffset_mm() * 100, 0x1026); + rtscheck.RTS_SndData(getZOffset_mm() * 100, ProbeOffset_Z); //float temp_buf = getActualTemp_celsius(H0); rtscheck.RTS_SndData(getActualTemp_celsius(H0), NozzleTemp); rtscheck.RTS_SndData(getActualTemp_celsius(BED), Bedtemp); @@ -291,7 +296,6 @@ void onIdle() #if HAS_BED_PROBE rtscheck.RTS_SndData(getProbeOffset_mm(X) * 100, ProbeOffset_X); rtscheck.RTS_SndData(getProbeOffset_mm(Y) * 100, ProbeOffset_Y); - rtscheck.RTS_SndData(getZOffset_mm() * 100, ProbeOffset_Z); #endif #if HAS_PID_HEATING @@ -691,9 +695,9 @@ SERIAL_ECHOLNPGM_P(PSTR("BeginSwitch")); if (recdat.data[0] == 1) // card { InforShowStatus = false; - CardRecbuf.recordcount = -1; + SERIAL_ECHOLNPGM_P(PSTR("Handle Data PrintFile Pre")); filenavigator.getFiles(0); - SERIAL_ECHOLNPGM_P(PSTR("Handle Data PrintFile 1 Setting Screen ")); + SERIAL_ECHOLNPGM_P(PSTR("Handle Data PrintFile Post")); RTS_SndData(ExchangePageBase + 46, ExchangepageAddr); } else if (recdat.data[0] == 2) // return after printing result. @@ -849,15 +853,15 @@ SERIAL_ECHOLNPGM_P(PSTR("BeginSwitch")); smartAdjustAxis_steps(((getAxisSteps_per_mm(Z) * (getZOffset_mm() - tmp_zprobe_offset)) * -1), (axis_t)Z, false); //babystepAxis_steps(((int)getAxisSteps_per_mm(Z) * (getZOffset_mm() - tmp_zprobe_offset) * -1), (axis_t)Z); //setZOffset_mm(tmp_zprobe_offset); - injectCommands_P((PSTR("M500"))); } else { - RTS_SndData(getZOffset_mm() * 100, 0x1026); + RTS_SndData(getZOffset_mm() * 100, ProbeOffset_Z); } char zOffs[20], tmp1[11]; sprintf_P(zOffs, PSTR("Z Offset : %s"), dtostrf(getZOffset_mm(), 1, 3, tmp1)); onStatusChanged(zOffs); + rtscheck.RTS_SndData(getZOffset_mm() * 100, ProbeOffset_Z); break; case TempControl: @@ -1102,7 +1106,7 @@ SERIAL_ECHOLNPGM_P(PSTR("BeginSwitch")); else injectCommands_P(PSTR("G28Z\nG1F1500Z0.0")); - RTS_SndData(getZOffset_mm() * 100, 0x1026); + RTS_SndData(getZOffset_mm() * 100, ProbeOffset_Z); break; } case babystepUp: // Z-axis to Up @@ -1112,7 +1116,7 @@ SERIAL_ECHOLNPGM_P(PSTR("BeginSwitch")); smartAdjustAxis_steps((getAxisSteps_per_mm(Z) / 10), (axis_t)Z, false); //SERIAL_ECHOLNPAIR("Babystep Pos Steps : ", (int)(getAxisSteps_per_mm(Z) / 10)); //setZOffset_mm(getZOffset_mm() + 0.1); - RTS_SndData(getZOffset_mm() * 100, 0x1026); + RTS_SndData(getZOffset_mm() * 100, ProbeOffset_Z); char zOffs[20], tmp1[11]; sprintf_P(zOffs, PSTR("Z Offset : %s"), dtostrf(getZOffset_mm(), 1, 3, tmp1)); onStatusChanged(zOffs); @@ -1128,7 +1132,7 @@ SERIAL_ECHOLNPGM_P(PSTR("BeginSwitch")); //SERIAL_ECHOLNPAIR("Babystep Neg Steps : ", (int)((getAxisSteps_per_mm(Z) / 10) * -1)); //babystepAxis_steps((((int)getAxisSteps_per_mm(Z) / 10) * -1), (axis_t)Z); //setZOffset_mm(getZOffset_mm() - 0.1); - RTS_SndData(getZOffset_mm() * 100, 0x1026); + RTS_SndData(getZOffset_mm() * 100, ProbeOffset_Z); char zOffs[20], tmp1[11]; sprintf_P(zOffs, PSTR("Z Offset : %s"), dtostrf(getZOffset_mm(), 1, 3, tmp1)); onStatusChanged(zOffs); @@ -1217,7 +1221,7 @@ SERIAL_ECHOLNPGM_P(PSTR("BeginSwitch")); setLevelingActive(false); } #endif - RTS_SndData(getZOffset_mm() * 100, 0x1026); + RTS_SndData(getZOffset_mm() * 100, ProbeOffset_Z); break; } case validateMesh: @@ -1524,35 +1528,41 @@ SERIAL_ECHOLNPGM_P(PSTR("BeginSwitch")); SERIAL_ECHOLNPGM_P(PSTR("Has Media")); recordcount = recdat.data[0] - 1; - if(filenavigator.currentindex == 0 && filenavigator.folderdepth > 0 && recordcount == 0) { + if(filenavigator.currentindex == 0 && filenavigator.folderdepth > 0 && (fileIndex + recordcount) == 0) { filenavigator.upDIR(); + SERIAL_ECHOLNPGM_P(PSTR("GoUpDir")); filenavigator.getFiles(0); return; } - for (int j = 1; j <= CardRecbuf.Filesum; j++) // Clear filename BG Color and Frame + if(filenavigator.currentindex == 0 && filenavigator.folderdepth > 0) + recordcount = recordcount-1; // account for return dir link in file index + + for (int j = 1; j <= 4; j++) // Clear filename BG Color and Frame { RTS_SndData((unsigned long)0xFFFF, FilenameNature + j * 16); // white RTS_SndData(10, FilenameIcon1 + j); //clean } - - if(filenavigator.getIndexisDir(fileIndex + recordcount)) - filenavigator.changeDIR((char *)filenavigator.getIndexName(fileIndex + recordcount)); - else{ - for (int j = 0; j < 10; j++) // clear current filename + for (int j = 0; j < 10; j++) // clear current filename RTS_SndData(0, Choosefilename + j); - RTS_SndData(filenavigator.getIndexName(fileIndex + recordcount), Choosefilename); - } - RTS_SndData((unsigned long)0x87F0, FilenameNature + recdat.data[0] * 16); // Change BG of selected line to Light Green - RTS_SndData(6, FilenameIcon1 + recdat.data[0]); // show frame + if(filenavigator.getIndexisDir(fileIndex + recordcount)) { + SERIAL_ECHOLNPAIR("Is Dir ", (fileIndex + recordcount)); + filenavigator.changeDIR((char *)filenavigator.getIndexName(fileIndex + recordcount)); + filenavigator.getFiles(0); + return; + } + else{ + SERIAL_ECHOLNPAIR("Is File ", (fileIndex + recordcount)); + RTS_SndData(filenavigator.getIndexName(fileIndex + recordcount), Choosefilename); + RTS_SndData((unsigned long)0x87F0, FilenameNature + recdat.data[0] * 16); // Change BG of selected line to Light Green + RTS_SndData(6, FilenameIcon1 + recdat.data[0]); // show frame + } } else if (recdat.addr == FilenamePlay) { if (recdat.data[0] == 1 && isMediaInserted()) //for sure { - if (CardRecbuf.recordcount < 0) - break; printFile(filenavigator.getIndexName(fileIndex + recordcount)); for (int j = 0; j < 10; j++) //clean screen. @@ -1570,6 +1580,22 @@ SERIAL_ECHOLNPGM_P(PSTR("BeginSwitch")); PrinterStatusKey[0] = 1; PrinterStatusKey[1] = 3; } + else if(recdat.data[0] == 2) //Page Down + { + SERIAL_ECHOLNPGM_P(PSTR("PgDown")); + if((fileIndex+DISPLAY_FILES) < filenavigator.maxFiles()) { + fileIndex = fileIndex + DISPLAY_FILES; + filenavigator.getFiles(fileIndex); + } + } + else if(recdat.data[0] == 3) //Page Up + { + SERIAL_ECHOLNPGM_P(PSTR("PgUp")); + if(fileIndex>=DISPLAY_FILES) { + fileIndex = fileIndex - DISPLAY_FILES; + filenavigator.getFiles(fileIndex); + } + } else if (recdat.data[0] == 0) // return to main page { InforShowStatus = true; @@ -1617,11 +1643,13 @@ void onPrinterKilled(PGM_P killMsg, PGM_P component) { void onMediaInserted() { SERIAL_ECHOLNPGM_P(PSTR("***Initing card is OK***")); + filenavigator.reset(); filenavigator.getFiles(0); } void onMediaError() { + filenavigator.reset(); for (int i = 0; i < MaxFileNumber; i++) { for (int j = 0; j < 10; j++) @@ -1647,6 +1675,7 @@ void onMediaError() void onMediaRemoved() { + filenavigator.reset(); for (int i = 0; i < MaxFileNumber; i++) { for (int j = 0; j < 10; j++) @@ -1840,7 +1869,7 @@ void onConfigurationStoreRead(bool success) #endif SERIAL_ECHOLNPAIR("\n init zprobe_zoffset = ", getZOffset_mm()); - rtscheck.RTS_SndData(getZOffset_mm() * 100, 0x1026); + rtscheck.RTS_SndData(getZOffset_mm() * 100, ProbeOffset_Z); } #if ENABLED(POWER_LOSS_RECOVERY) diff --git a/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.h b/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.h index f04c454e4a..53e71d4310 100644 --- a/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.h +++ b/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.h @@ -52,7 +52,7 @@ namespace ExtUI { #define ProbeOffset_X 0x1236 #define ProbeOffset_Y 0x123A -#define ProbeOffset_Z 0x123E +#define ProbeOffset_Z 0x1026 #define HotendPID_AutoTmp 0x1252 #define BedPID_AutoTmp 0x1254 @@ -129,14 +129,6 @@ typedef struct DataBuf unsigned char reserv[4]; } DB; -typedef struct CardRecord -{ - char recordcount; - int Filesum; - unsigned long addr[FileNum]; - char Cardshowfilename[FileNum][FileNameLen]; - char Cardfilename[FileNum][FileNameLen]; -}CRec; class RTSSHOW { public: diff --git a/Marlin/src/lcd/extui/lib/Creality/FileNavigator.cpp b/Marlin/src/lcd/extui/lib/Creality/FileNavigator.cpp index 5789a6a3d2..151e40fd7b 100644 --- a/Marlin/src/lcd/extui/lib/Creality/FileNavigator.cpp +++ b/Marlin/src/lcd/extui/lib/Creality/FileNavigator.cpp @@ -71,8 +71,12 @@ const char *FileNavigator::getIndexName(uint16_t index){ return filelist.shortFilename(); } +uint16_t FileNavigator::maxFiles() { + return filelist.count(); +} + void FileNavigator::getFiles(uint16_t index) { - uint16_t files = DISPLAY_FILES, fseek = 0, fcnt = 0; + uint16_t files = DISPLAY_FILES, fcnt = 0; if (index == 0) currentindex = 0; else { @@ -88,25 +92,57 @@ void FileNavigator::getFiles(uint16_t index) { } lastindex = index; - DEBUG_ECHOLNPAIR("index=", index, " currentindex=", currentindex); + // Clear currently drawn screen + for (int i = 0; i < DISPLAY_FILES; i++) + { + for (int j = 0; j < 20; j++) + rtscheck.RTS_SndData(0, SDFILE_ADDR + (i * 20) + j); + } + + for (int j = 0; j < 10; j++) + { + rtscheck.RTS_SndData(0, Printfilename + j); //clean screen. + rtscheck.RTS_SndData(0, Choosefilename + j); //clean filename + } + for (int j = 0; j < 8; j++) + rtscheck.RTS_SndData(0, FilenameCount + j); + for (int j = 1; j <= DISPLAY_FILES; j++) + { + rtscheck.RTS_SndData(10, FilenameIcon + j); + rtscheck.RTS_SndData(10, FilenameIcon1 + j); + } + + SERIAL_ECHOLNPAIR("index=", index, " currentindex=", currentindex, "folderdepth=", folderdepth); if (currentindex == 0 && folderdepth > 0) { // Add a link to go up a folder files--; - rtscheck.RTS_SndData(filelist.shortFilename(), SDFILE_ADDR); + rtscheck.RTS_SndData("Up Directory", SDFILE_ADDR); fcnt++; } for (uint16_t seek = currentindex; seek < currentindex + files; seek++) { + SERIAL_ECHOLNPAIR("Seek", seek); if (filelist.seek(seek)) { - rtscheck.RTS_SndData(filelist.shortFilename(), (SDFILE_ADDR + (fcnt * 10))); - if (filelist.isDir()) - rtscheck.RTS_SndData((unsigned long)0x1A2B, (FilenameNature + (fcnt * 16))); // Change BG of selected line to Light Green + SERIAL_ECHOLN("seek done"); + const int filelen = strlen(filelist.filename()); + if(filelen > 20) + { + SERIAL_ECHOLN("trunc"); + char *buf = (char *)filelist.filename(); + //char buf[filelen]; + //strcpy(&buf[filelen], filelist.filename()); + buf[18] = '\0'; // cutoff at screen edge + rtscheck.RTS_SndData(buf, (SDFILE_ADDR + (fcnt * 20))); + } else - rtscheck.RTS_SndData((unsigned long)0xFFFF, FilenameNature + fcnt * 16); // white - rtscheck.RTS_SndData(1, FilenameIcon + ++fcnt); + rtscheck.RTS_SndData(filelist.filename(), (SDFILE_ADDR + (fcnt * 20))); + if (filelist.isDir()) + rtscheck.RTS_SndData((unsigned long)0x041F, (FilenameNature + ((1+fcnt) * 16))); // Change BG of selected line to Blue + else + rtscheck.RTS_SndData((unsigned long)0xFFFF, (FilenameNature + ((1+fcnt) * 16))); // white + rtscheck.RTS_SndData(1, FilenameIcon + (fcnt+1)); + SERIAL_ECHOLNPAIR("-", seek, " '", filelist.filename(), "' '", currentfoldername, "", filelist.shortFilename(), "'\n"); fcnt++; - fseek = seek; - DEBUG_ECHOLNPAIR("-", seek, " '", filelist.longFilename(), "' '", currentfoldername, "", filelist.shortFilename(), "'\n"); } } } diff --git a/Marlin/src/lcd/extui/lib/Creality/FileNavigator.h b/Marlin/src/lcd/extui/lib/Creality/FileNavigator.h index 0f37e8eaa6..0871eee081 100644 --- a/Marlin/src/lcd/extui/lib/Creality/FileNavigator.h +++ b/Marlin/src/lcd/extui/lib/Creality/FileNavigator.h @@ -34,7 +34,7 @@ #define MAX_FOLDER_DEPTH 4 // Limit folder depth TFT has a limit for the file path #define MAX_CMND_LEN 16 * MAX_FOLDER_DEPTH // Maximum Length for a Panel command #define MAX_PATH_LEN 16 * MAX_FOLDER_DEPTH // Maximum number of characters in a SD file path -#define DISPLAY_FILES 5 +#define DISPLAY_FILES 4 using namespace ExtUI; @@ -51,6 +51,7 @@ class FileNavigator { static uint16_t currentindex; static bool getIndexisDir(uint16_t); const char *getIndexName(uint16_t); + static uint16_t maxFiles(); private: static FileList filelist; static char currentfoldername[MAX_PATH_LEN]; From 8f09db27bdbc6df218569568a693ad1b297c6532 Mon Sep 17 00:00:00 2001 From: InsanityAutomation Date: Thu, 22 Apr 2021 14:49:26 -0400 Subject: [PATCH 6/6] file browse page display --- Marlin/Configuration.h | 6 +-- .../lcd/extui/lib/Creality/Creality_DWIN.cpp | 51 ++++++++++++------- .../lcd/extui/lib/Creality/Creality_DWIN.h | 13 +++-- .../lcd/extui/lib/Creality/FileNavigator.cpp | 25 +++++---- .../lcd/extui/lib/Creality/FileNavigator.h | 8 +-- Marlin/src/lcd/extui/ui_api.cpp | 2 + 6 files changed, 67 insertions(+), 38 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 1a29b9dd13..ae48010196 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -1070,9 +1070,9 @@ #else // If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it #if ANY(HotendMosquito, PID50W) - #define DEFAULT_Kp 25.95 - #define DEFAULT_Ki 3.08 - #define DEFAULT_Kd 54.74 + #define DEFAULT_Kp 16.8 + #define DEFAULT_Ki 1.2 + #define DEFAULT_Kd 54.3 #elif ENABLED(HotendStock) #if ANY(MachineCR10SPro, MachineCR10Max) #define DEFAULT_Kp 25.25 diff --git a/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.cpp b/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.cpp index a9e0318e34..799345c0e3 100644 --- a/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.cpp +++ b/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.cpp @@ -86,7 +86,7 @@ void onStartup() #else rtscheck.RTS_SndData(MACHINE_NAME, MacVersion); #endif - rtscheck.RTS_SndData(DETAILED_BUILD_VERSION, SoftVersion); + rtscheck.RTS_SndData(SHORT_BUILD_VERSION, SoftVersion); rtscheck.RTS_SndData(sizebuf, PrinterSize); rtscheck.RTS_SndData(WEBSITE_URL, CorpWebsite); @@ -262,22 +262,25 @@ void onIdle() } rtscheck.RTS_SndData((unsigned int)getProgress_percent(), Percentage); } - else if(getTargetTemp_celsius(BED)==0 && getTargetTemp_celsius(H0)==0) - { - rtscheck.RTS_SndData(0 + CEIconGrap, IconPrintstatus); - } - else if (getActualTemp_celsius(BED) < (getTargetTemp_celsius(BED) - THERMAL_PROTECTION_BED_HYSTERESIS ) || (getActualTemp_celsius(H0) < (getTargetTemp_celsius(H0) - THERMAL_PROTECTION_HYSTERESIS))) - { - rtscheck.RTS_SndData(1 + CEIconGrap, IconPrintstatus); // Heating Status - PrinterStatusKey[1] = (PrinterStatusKey[1] == 0 ? 1 : PrinterStatusKey[1]); - } - else if (getActualTemp_celsius(BED) > (getTargetTemp_celsius(BED) + THERMAL_PROTECTION_BED_HYSTERESIS) || (getActualTemp_celsius(H0) > (getTargetTemp_celsius(H0) + THERMAL_PROTECTION_HYSTERESIS))) - { - rtscheck.RTS_SndData(8 + CEIconGrap, IconPrintstatus); // Cooling Status - PrinterStatusKey[1] = (PrinterStatusKey[1] == 0 ? 2 : PrinterStatusKey[1]); - } else - rtscheck.RTS_SndData(0 + CEIconGrap, IconPrintstatus); + { + if(getTargetTemp_celsius(BED)==0 && getTargetTemp_celsius(H0)==0) + { + rtscheck.RTS_SndData(0 + CEIconGrap, IconPrintstatus); + } + else if (getActualTemp_celsius(BED) < (getTargetTemp_celsius(BED) - THERMAL_PROTECTION_BED_HYSTERESIS ) || (getActualTemp_celsius(H0) < (getTargetTemp_celsius(H0) - THERMAL_PROTECTION_HYSTERESIS))) + { + rtscheck.RTS_SndData(1 + CEIconGrap, IconPrintstatus); // Heating Status + PrinterStatusKey[1] = (PrinterStatusKey[1] == 0 ? 1 : PrinterStatusKey[1]); + } + else if (getActualTemp_celsius(BED) > (getTargetTemp_celsius(BED) + THERMAL_PROTECTION_BED_HYSTERESIS) || (getActualTemp_celsius(H0) > (getTargetTemp_celsius(H0) + THERMAL_PROTECTION_HYSTERESIS))) + { + rtscheck.RTS_SndData(8 + CEIconGrap, IconPrintstatus); // Cooling Status + PrinterStatusKey[1] = (PrinterStatusKey[1] == 0 ? 2 : PrinterStatusKey[1]); + } + else + rtscheck.RTS_SndData(0 + CEIconGrap, IconPrintstatus); + } rtscheck.RTS_SndData(getZOffset_mm() * 100, ProbeOffset_Z); @@ -348,6 +351,20 @@ void onIdle() AutoHomeIconNum = 0; } } + + if(isMediaInserted()) + { + uint16_t currPage; + if(fileIndex == 0) + currPage = 1; + else + currPage = CEIL((float)((float)fileIndex / (float)DISPLAY_FILES)) +1; + + uint16_t maxPages = CEIL(((float)filenavigator.maxFiles() / (float)DISPLAY_FILES)); + rtscheck.RTS_SndData(currPage, FilesCurentPage); + rtscheck.RTS_SndData(maxPages, FilesMaxPage); + } + void yield(); if (rtscheck.RTS_RecData() > 0) rtscheck.RTS_HandleData(); @@ -1768,7 +1785,7 @@ void onUserConfirmRequired(const char *const msg) } void onStatusChanged(const char *const statMsg) { - for (int j = 0; j < 40; j++) // Clear old message + for (int j = 0; j < 20; j++) // Clear old message rtscheck.RTS_SndData(' ', StatusMessageString+j); rtscheck.RTS_SndData(statMsg, StatusMessageString); } diff --git a/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.h b/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.h index 53e71d4310..048824dd10 100644 --- a/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.h +++ b/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.h @@ -97,6 +97,8 @@ namespace ExtUI { #define FilenameIcon 0x1200 #define FilenameIcon1 0x1220 #define Printfilename 0x2000 +#define FilesCurentPage 0x1310 +#define FilesMaxPage 0x1312 #define SDFILE_ADDR 0x200A #define FilenamePlay 0x20D2 #define FilenameChs 0x20D3 @@ -104,11 +106,12 @@ namespace ExtUI { #define FilenameCount 0x20DE #define FilenameNature 0x6003 -#if ANY(MachineCR10SPro, MachineEnder5Plus, MachineCR10Max) || ENABLED(Force10SProDisplay) - #define StatusMessageString 0x3000 -#else - #define StatusMessageString 0x20E8 -#endif +//#if ANY(MachineCR10SPro, MachineEnder5Plus, MachineCR10Max) || ENABLED(Force10SProDisplay) +// #define StatusMessageString 0x3000 +//#else +// #define StatusMessageString 0x20E8 +//#endif +#define StatusMessageString 0x2064 #if defined(TARGET_STM32F4) #define DWIN_SERIAL Serial1 diff --git a/Marlin/src/lcd/extui/lib/Creality/FileNavigator.cpp b/Marlin/src/lcd/extui/lib/Creality/FileNavigator.cpp index 151e40fd7b..0fd42b4b1e 100644 --- a/Marlin/src/lcd/extui/lib/Creality/FileNavigator.cpp +++ b/Marlin/src/lcd/extui/lib/Creality/FileNavigator.cpp @@ -21,14 +21,16 @@ */ /* **************************************** - * lcd/extui/lib/nextion/FileNavigator.cpp + * lcd/extui/lib/Creality/FileNavigator.cpp * **************************************** - * Extensible_UI implementation for Nextion - * https://github.com/Skorpi08 + * Extensible_UI implementation for Creality DWIN + * 10SPro, Max, CR10V2 + * Based on implementations for Anycubic Chiron and Nextion by Nick Wells and Skorpi08 + * Written by Insanity Automation * ***************************************/ #include "../../../../inc/MarlinConfigPre.h" - +#if ENABLED(EXTENSIBLE_UI) #include "FileNavigator.h" @@ -112,7 +114,7 @@ void FileNavigator::getFiles(uint16_t index) { rtscheck.RTS_SndData(10, FilenameIcon1 + j); } - SERIAL_ECHOLNPAIR("index=", index, " currentindex=", currentindex, "folderdepth=", folderdepth); + DEBUG_ECHOLNPAIR("index=", index, " currentindex=", currentindex, "folderdepth=", folderdepth); if (currentindex == 0 && folderdepth > 0) { // Add a link to go up a folder files--; @@ -121,13 +123,10 @@ void FileNavigator::getFiles(uint16_t index) { } for (uint16_t seek = currentindex; seek < currentindex + files; seek++) { - SERIAL_ECHOLNPAIR("Seek", seek); if (filelist.seek(seek)) { - SERIAL_ECHOLN("seek done"); const int filelen = strlen(filelist.filename()); if(filelen > 20) { - SERIAL_ECHOLN("trunc"); char *buf = (char *)filelist.filename(); //char buf[filelen]; //strcpy(&buf[filelen], filelist.filename()); @@ -137,11 +136,16 @@ void FileNavigator::getFiles(uint16_t index) { else rtscheck.RTS_SndData(filelist.filename(), (SDFILE_ADDR + (fcnt * 20))); if (filelist.isDir()) + { + rtscheck.RTS_SndData((uint8_t)4, FilenameIcon + (fcnt+1)); rtscheck.RTS_SndData((unsigned long)0x041F, (FilenameNature + ((1+fcnt) * 16))); // Change BG of selected line to Blue + } else + { + rtscheck.RTS_SndData((uint8_t)0, FilenameIcon + (fcnt+1)); rtscheck.RTS_SndData((unsigned long)0xFFFF, (FilenameNature + ((1+fcnt) * 16))); // white - rtscheck.RTS_SndData(1, FilenameIcon + (fcnt+1)); - SERIAL_ECHOLNPAIR("-", seek, " '", filelist.filename(), "' '", currentfoldername, "", filelist.shortFilename(), "'\n"); + } + DEBUG_ECHOLNPAIR("-", seek, " '", filelist.filename(), "' '", currentfoldername, "", filelist.shortFilename(), "'\n"); fcnt++; } } @@ -178,3 +182,4 @@ void FileNavigator::upDIR() { } char* FileNavigator::getCurrentFolderName() { return currentfoldername; } +#endif diff --git a/Marlin/src/lcd/extui/lib/Creality/FileNavigator.h b/Marlin/src/lcd/extui/lib/Creality/FileNavigator.h index 0871eee081..a205bb2820 100644 --- a/Marlin/src/lcd/extui/lib/Creality/FileNavigator.h +++ b/Marlin/src/lcd/extui/lib/Creality/FileNavigator.h @@ -22,10 +22,12 @@ #pragma once /* **************************************** - * lcd/extui/lib/nextion/FileNavigator.cpp + * lcd/extui/lib/Creality/FileNavigator.cpp * **************************************** - * Extensible_UI implementation for Nextion - * https://github.com/Skorpi08 + * Extensible_UI implementation for Creality DWIN + * 10SPro, Max, CR10V2 + * Based on implementations for Anycubic Chiron and Nextion by Nick Wells and Skorpi08 + * Written by Insanity Automation * ***************************************/ #include "../../ui_api.h" diff --git a/Marlin/src/lcd/extui/ui_api.cpp b/Marlin/src/lcd/extui/ui_api.cpp index 66bc10c411..187d6b37e3 100644 --- a/Marlin/src/lcd/extui/ui_api.cpp +++ b/Marlin/src/lcd/extui/ui_api.cpp @@ -1067,6 +1067,8 @@ namespace ExtUI { void onStatusChanged_P(PGM_P const pstr) { char msg[strlen_P(pstr) + 1]; strcpy_P(msg, pstr); + if(strlen(msg) > 20) + msg[20]="\0"; onStatusChanged(msg); }