From 4acb60ed545c0b61ab3388821f4e01c81e8854a3 Mon Sep 17 00:00:00 2001 From: Knutwurst <36196269+knutwurst@users.noreply.github.com> Date: Fri, 24 Jul 2020 19:46:54 +0200 Subject: [PATCH] Completely differen approach to handle the special menu by creating a fake filesystem. --- Marlin/Configuration.h | 2 +- Marlin/src/lcd/anycubic_touchscreen.cpp | 205 ++++++++++++++---------- 2 files changed, 121 insertions(+), 86 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 6d546505..f6c460c8 100755 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -39,7 +39,7 @@ #define CONFIGURATION_H_VERSION 020005 #define KNUTWURST_MEGAS -#define KNUTWURST_TMC +//#define KNUTWURST_TMC //#define KNUTWURST_BLTOUCH //#define KNUTWURST_DEBUG //#define POWER_OUTAGE_TEST diff --git a/Marlin/src/lcd/anycubic_touchscreen.cpp b/Marlin/src/lcd/anycubic_touchscreen.cpp index 228643f0..3eb29eba 100755 --- a/Marlin/src/lcd/anycubic_touchscreen.cpp +++ b/Marlin/src/lcd/anycubic_touchscreen.cpp @@ -55,7 +55,7 @@ unsigned char ResumingFlag = 0; #endif //#define MAX_PRINTABLE_FILENAME_LEN 21 -#define MAX_PRINTABLE_FILENAME_LEN 26 +#define MAX_PRINTABLE_FILENAME_LEN 23 void setup_OutageTestPin() { @@ -441,78 +441,92 @@ void AnycubicTouchscreenClass::HandleSpecialMenu() SERIAL_ECHOPAIR(" DEBUG: Special Menu Selection: ", currentTouchscreenSelection); SERIAL_EOL(); #endif - if (strcasestr(currentTouchscreenSelection, "") != NULL) + if ((strcasestr(currentTouchscreenSelection, "Special Menu") != NULL) + || (strcasestr(currentTouchscreenSelection, "_SPECI~1.GCO") != NULL)) { SpecialMenu = true; } - else if (strcasestr(currentTouchscreenSelection, "") != NULL) + else if ((strcasestr(currentTouchscreenSelection, "PID Tune Hotend") != NULL) + || (strcasestr(currentTouchscreenSelection, "_PIDTU~1.GCO") != NULL)) { SERIAL_ECHOLNPGM("Special Menu: PID Tune Hotend"); queue.inject_P(PSTR("M106 S204\nM303 E0 S210 C15 U1")); } - else if (strcasestr(currentTouchscreenSelection, "") != NULL) + else if ((strcasestr(currentTouchscreenSelection, "PID Tune Ultrabase") != NULL) + || (strcasestr(currentTouchscreenSelection, "_PIDTU~2.GCO") != NULL)) { SERIAL_ECHOLNPGM("Special Menu: PID Tune Ultrabase"); queue.inject_P(PSTR("M303 E-1 S60 C6 U1")); } - else if (strcasestr(currentTouchscreenSelection, "") != NULL) + else if ((strcasestr(currentTouchscreenSelection, "Save EEPROM") != NULL) + || (strcasestr(currentTouchscreenSelection, "_SAVEE~1.GCO") != NULL)) { SERIAL_ECHOLNPGM("Special Menu: Save EEPROM"); queue.inject_P(PSTR("M500")); buzzer.tone(105, 1108); buzzer.tone(210, 1661); } - else if (strcasestr(currentTouchscreenSelection, "") != NULL) + else if ((strcasestr(currentTouchscreenSelection, "Load FW Defaults") != NULL) + || (strcasestr(currentTouchscreenSelection, "_LOADF~1.GCO") != NULL)) { SERIAL_ECHOLNPGM("Special Menu: Load FW Defaults"); queue.inject_P(PSTR("M502")); buzzer.tone(105, 1661); buzzer.tone(210, 1108); } - else if (strcasestr(currentTouchscreenSelection, "") != NULL) + else if ((strcasestr(currentTouchscreenSelection, "Preheat Ultrabase") != NULL) + || (strcasestr(currentTouchscreenSelection, "_PREHE~1.GCO") != NULL)) { SERIAL_ECHOLNPGM("Special Menu: Preheat Ultrabase"); queue.inject_P(PSTR("M140 S60")); } #if DISABLED(KNUTWURST_BLTOUCH) - else if (strcasestr(currentTouchscreenSelection, "") != NULL) + else if ((strcasestr(currentTouchscreenSelection, "Start Mesh Leveling") != NULL) + || (strcasestr(currentTouchscreenSelection, "_START~1.GCO") != NULL)) { SERIAL_ECHOLNPGM("Special Menu: Start Mesh Leveling"); queue.inject_P(PSTR("G29 S1")); } - else if (strcasestr(currentTouchscreenSelection, "") != NULL) + else if ((strcasestr(currentTouchscreenSelection, "Next Mesh Point") != NULL) + || (strcasestr(currentTouchscreenSelection, "_NEXTM~1.GCO") != NULL)) { SERIAL_ECHOLNPGM("Special Menu: Next Mesh Point"); queue.inject_P(PSTR("G29 S2")); } - else if (strcasestr(currentTouchscreenSelection, "") != NULL) + else if ((strcasestr(currentTouchscreenSelection, "Z Up 0.1") != NULL) + || (strcasestr(currentTouchscreenSelection, "_ZUP01~1.GCO") != NULL)) { SERIAL_ECHOLNPGM("Special Menu: Z Up 0.1"); queue.inject_P(PSTR("G91\nG1 Z+0.1\nG90")); } - else if (strcasestr(currentTouchscreenSelection, "") != NULL) + else if ((strcasestr(currentTouchscreenSelection, "Z Down 0.1") != NULL) + || (strcasestr(currentTouchscreenSelection, "_ZDOWN~1.GCO") != NULL)) { SERIAL_ECHOLNPGM("Special Menu: Z Down 0.1"); queue.inject_P(PSTR("G91\nG1 Z-0.1\nG90")); } - else if (strcasestr(currentTouchscreenSelection, "") != NULL) + else if ((strcasestr(currentTouchscreenSelection, "Z Up 0.02") != NULL) + || (strcasestr(currentTouchscreenSelection, "_ZUP00~1.GCO") != NULL)) { SERIAL_ECHOLNPGM("Special Menu: Z Up 0.02"); queue.inject_P(PSTR("G91\nG1 Z+0.02\nG90")); } - else if (strcasestr(currentTouchscreenSelection, "") != NULL) + else if ((strcasestr(currentTouchscreenSelection, "Z Down 0.02") != NULL) + || (strcasestr(currentTouchscreenSelection, "_ZDOWN~2.GCO") != NULL)) { SERIAL_ECHOLNPGM("Special Menu: Z Down 0.02"); queue.inject_P(PSTR("G91\nG1 Z-0.02\nG90")); } - else if (strcasestr(currentTouchscreenSelection, "") != NULL) + else if ((strcasestr(currentTouchscreenSelection, "Z Up 0.01") != NULL) + || (strcasestr(currentTouchscreenSelection, "_ZUP00~2.GCO") != NULL)) { SERIAL_ECHOLNPGM("Special Menu: Z Up 0.01"); queue.enqueue_now_P(PSTR("G91\nG1 Z+0.03\nG90")); queue.enqueue_now_P(PSTR("G91\nG1 Z-0.02\nG90")); } - else if (strcasestr(currentTouchscreenSelection, "") != NULL) + else if ((strcasestr(currentTouchscreenSelection, "Z Down 0.01") != NULL) + || (strcasestr(currentTouchscreenSelection, "_ZDOWN~3.GCO") != NULL)) { SERIAL_ECHOLNPGM("Special Menu: Z Down 0.01"); queue.enqueue_now_P(PSTR("G91\nG1 Z+0.02\nG90")); @@ -521,24 +535,24 @@ void AnycubicTouchscreenClass::HandleSpecialMenu() #endif #if ENABLED(KNUTWURST_BLTOUCH) - else if (strcasestr(currentTouchscreenSelection, "") != NULL) + else if (strcasestr(currentTouchscreenSelection, "BLTouch Leveling") != NULL) { SERIAL_ECHOLNPGM("Special Menu: BLTouch Leveling"); queue.inject_P(PSTR("G28\nG29")); } #endif - else if (strcasestr(currentTouchscreenSelection, "") != NULL) + else if (strcasestr(currentTouchscreenSelection, "Fil. Change Pause") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Fil. Change Pause"); FilamentChangePause(); } - else if (strcasestr(currentTouchscreenSelection, "") != NULL) + else if (strcasestr(currentTouchscreenSelection, "Fil. Change Resume") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Fil. Change Resume"); FilamentChangeResume(); } - else if (strcasestr(currentTouchscreenSelection, "") != NULL) + else if (strcasestr(currentTouchscreenSelection, "Disable Fil. Sensor") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Disable Filament Sensor"); FilamentSensorEnabled = false; @@ -546,14 +560,14 @@ void AnycubicTouchscreenClass::HandleSpecialMenu() buzzer.tone(105, 1108); buzzer.tone(105, 1108); } - else if (strcasestr(currentTouchscreenSelection, "") != NULL) + else if (strcasestr(currentTouchscreenSelection, "Enable Fil. Sensor") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Enable Filament Sensor"); FilamentSensorEnabled = true; buzzer.tone(105, 1108); buzzer.tone(105, 1108); } - else if (strcasestr(currentTouchscreenSelection, "") != NULL) + else if (strcasestr(currentTouchscreenSelection, "Exit") != NULL) { SpecialMenu = false; } @@ -579,80 +593,80 @@ void AnycubicTouchscreenClass::PrintList() switch (filenumber) { case 0: // Page 1 - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM("_EXIT_~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Exit].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_PREHE~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Preheat Ultrabase].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_FILCH~2.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Fil. Change Pause].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_FILCH~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Fil. Change Resume].gcode"); break; #if DISABLED(KNUTWURST_BLTOUCH) case 4: // Page 2 - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM("_START~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Start Mesh Leveling].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_NEXTM~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Next Mesh Point].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_ZUP01~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Z Up 0.1].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_ZDOWN~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Z Down 0.1].gcode"); break; case 8: // Page 3 - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM("_ZUP00~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Z Up 0.02].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_ZDOWN~2.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Z Down 0.02].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_ZUP00~2.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Z Up 0.01].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_ZDOWN~3.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Z Down 0.01].gcode"); break; case 12: // Page 4 - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM("_PIDTU~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[PID Tune Hotend].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_PIDTU~2.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[PID Tune Ultrabase].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_SAVEE~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Save EEPROM].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_LOADF~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Load FW Defaults].gcode"); break; case 16: // Page 5 - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM("_DISAB~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Disable Fil. Sensor].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_ENABL~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Enable Fil. Sensor].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_EXIT_~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Exit].gcode"); break; #endif #if ENABLED(KNUTWURST_BLTOUCH) case 4: // Page 2 - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM("_BLTOU~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[BLTouch Leveling].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_PIDTU~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[PID Tune Hotend].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_PIDTU~2.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[PID Tune Ultrabase].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_DISAB~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Disable Fil. Sensor].gcode"); break; case 8: // Page 3 - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM("_ENABL~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Enable Fil. Sensor].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_SAVEE~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Save EEPROM].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_LOADF~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Load FW Defaults].gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_EXIT_~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Exit].gcode"); break; #endif @@ -675,7 +689,6 @@ void AnycubicTouchscreenClass::PrintList() } else { - //max_files = MyFileNrCnt; max_files = filenumber + 3; } @@ -692,14 +705,14 @@ void AnycubicTouchscreenClass::PrintList() { if (strcmp(card.getWorkDirName(), "/") == 0) { - HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); - HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("_SPECI~1.GCO"); + HARDWARE_SERIAL_PROTOCOLLNPGM("[Special Menu].gcode"); SERIAL_ECHO(count); - SERIAL_ECHOLNPGM(": .gcode"); + SERIAL_ECHOLNPGM(": [Special Menu].gcode"); } else { - HARDWARE_SERIAL_PROTOCOLLNPGM("DIR_UP.gco"); + HARDWARE_SERIAL_PROTOCOLLNPGM("DIR_UP~1.GCO"); HARDWARE_SERIAL_PROTOCOLLNPGM("DIR_UP.gcode"); SERIAL_ECHO(count); SERIAL_ECHOLNPGM(": DIR_UP.gcode"); @@ -719,9 +732,9 @@ void AnycubicTouchscreenClass::PrintList() if(fileNameLen > MAX_PRINTABLE_FILENAME_LEN) fileNameLen = MAX_PRINTABLE_FILENAME_LEN; - char outputString[MAX_PRINTABLE_FILENAME_LEN]; + char outputString[fileNameLen]; - for (unsigned char i = 0; i < MAX_PRINTABLE_FILENAME_LEN; i++) + for (unsigned char i = 0; i <= fileNameLen; i++) { if(i >= fileNameLen) { @@ -1270,18 +1283,36 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() if ((TFTstate != ANYCUBIC_TFT_STATE_SDOUTAGE)) { starpos = (strchr(TFTstrchr_pointer + 4, '*')); + if (TFTstrchr_pointer[4] == '/') { strcpy(currentTouchscreenSelection, TFTstrchr_pointer + 5); + +#ifdef ANYCUBIC_TFT_DEBUG + SERIAL_ECHOPAIR(" TFT Serial Debug: currentTouchscreenSelection: ",currentTouchscreenSelection); + SERIAL_EOL(); +#endif } - else if (TFTstrchr_pointer[4] == '<') + else if ((TFTstrchr_pointer[4] == '<') + || (TFTstrchr_pointer[4] == '[') + || (TFTstrchr_pointer[4] == '_')) { strcpy(currentTouchscreenSelection, TFTstrchr_pointer + 4); + +#ifdef ANYCUBIC_TFT_DEBUG + SERIAL_ECHOPAIR(" TFT Serial Debug: currentTouchscreenSelection: ",currentTouchscreenSelection); + SERIAL_EOL(); +#endif } + else { currentTouchscreenSelection[0] = 0; +#ifdef ANYCUBIC_TFT_DEBUG + SERIAL_ECHOLNPGM("TFT Serial Debug: Normal file open path"); +#endif + if (starpos != NULL) *(starpos - 1) = '\0'; card.openFileRead(TFTstrchr_pointer + 4); @@ -1542,7 +1573,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() case 26: // A26 refresh SD #ifdef SDSUPPORT #ifdef ANYCUBIC_TFT_DEBUG - SERIAL_ECHOPAIR(" TFT Serial Debug: SelectedDirectory: ",currentTouchscreenSelection); + SERIAL_ECHOPAIR(" TFT Serial Debug: currentTouchscreenSelection: ",currentTouchscreenSelection); SERIAL_EOL(); #endif if (currentTouchscreenSelection[0] == 0) @@ -1564,7 +1595,8 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() } else { - if (currentTouchscreenSelection[0] == '<') + if ((currentTouchscreenSelection[0] == '[') + || (currentTouchscreenSelection[0] == '_')) { #ifdef ANYCUBIC_TFT_DEBUG SERIAL_ECHOLNPGM("TFT Serial Debug: Enter Special Menu"); @@ -1573,6 +1605,9 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() } else { +#ifdef ANYCUBIC_TFT_DEBUG + SERIAL_ECHOLNPGM("TFT Serial Debug: Not a menu. Must be a directory!"); +#endif strcpy(currentFileOrDirectory, currentTouchscreenSelection); int currentFileLen = strlen(currentFileOrDirectory); currentFileOrDirectory[currentFileLen - 4] = '\0';