diff --git a/Marlin/src/lcd/anycubic_touchscreen.cpp b/Marlin/src/lcd/anycubic_touchscreen.cpp index 6a8b7707..4c3d84d0 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 30 +#define MAX_PRINTABLE_FILENAME_LEN 22 void setup_OutageTestPin() { @@ -137,7 +137,8 @@ void AnycubicTouchscreenClass::Setup() } #endif - SelectedDirectory[0] = 0; + currentTouchscreenSelection[0] = '\0'; + currentFileOrDirectory[0] = '\0'; SpecialMenu = false; FilamentSensorEnabled = true; @@ -433,90 +434,94 @@ bool AnycubicTouchscreenClass::CodeSeen(char code) void AnycubicTouchscreenClass::HandleSpecialMenu() { - if (strcmp(SelectedDirectory, ".gcode") == 0) +#ifdef ANYCUBIC_TFT_DEBUG + SERIAL_ECHOPAIR(" DEBUG: Special Menu Selection: ", currentTouchscreenSelection); + SERIAL_EOL(); +#endif + if (strcasestr(currentTouchscreenSelection, "") != NULL) { SpecialMenu = true; } - else if (strcmp(SelectedDirectory, ".gcode") == 0) + else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: PID Tune Hotend"); queue.inject_P(PSTR("M106 S204\nM303 E0 S210 C15 U1")); } - else if (strcmp(SelectedDirectory, ".gcode") == 0) + else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: PID Tune Ultrabase"); queue.inject_P(PSTR("M303 E-1 S60 C6 U1")); } - else if (strcmp(SelectedDirectory, ".gcode") == 0) + else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Save EEPROM"); queue.inject_P(PSTR("M500")); buzzer.tone(105, 1108); buzzer.tone(210, 1661); } - else if (strcmp(SelectedDirectory, ".gcode") == 0) + else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Load FW Defaults"); queue.inject_P(PSTR("M502")); buzzer.tone(105, 1661); buzzer.tone(210, 1108); } - else if (strcmp(SelectedDirectory, ".gcode") == 0) + else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Preheat Ultrabase"); queue.inject_P(PSTR("M140 S60")); } - else if (strcmp(SelectedDirectory, ".gcode") == 0) + else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Start Mesh Leveling"); queue.inject_P(PSTR("G29 S1")); } - else if (strcmp(SelectedDirectory, ".gcode") == 0) + else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Next Mesh Point"); queue.inject_P(PSTR("G29 S2")); } - else if (strcmp(SelectedDirectory, ".gcode") == 0) + else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Z Up 0.1"); queue.inject_P(PSTR("G91\nG1 Z+0.1\nG90")); } - else if (strcmp(SelectedDirectory, ".gcode") == 0) + else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Z Down 0.1"); queue.inject_P(PSTR("G91\nG1 Z-0.1\nG90")); } - else if (strcmp(SelectedDirectory, ".gcode") == 0) + else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Z Up 0.02"); queue.inject_P(PSTR("G91\nG1 Z+0.02\nG90")); } - else if (strcmp(SelectedDirectory, ".gcode") == 0) + else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Z Down 0.02"); queue.inject_P(PSTR("G91\nG1 Z-0.02\nG90")); } - else if (strcmp(SelectedDirectory, ".gcode") == 0) + else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Z Up 0.01"); queue.inject_P(PSTR("G91\nG1 Z+0.01\nG90")); } - else if (strcmp(SelectedDirectory, ".gcode") == 0) + else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Z Down 0.01"); queue.inject_P(PSTR("G91\nG1 Z-0.01\nG90")); } - else if (strcmp(SelectedDirectory, ".gcode") == 0) + else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Fil. Change Pause"); FilamentChangePause(); } - else if (strcmp(SelectedDirectory, ".gcode") == 0) + else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Fil. Change Resume"); FilamentChangeResume(); } - else if (strcmp(SelectedDirectory, ".gcode") == 0) + else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Disable Filament Sensor"); FilamentSensorEnabled = false; @@ -524,20 +529,20 @@ void AnycubicTouchscreenClass::HandleSpecialMenu() buzzer.tone(105, 1108); buzzer.tone(105, 1108); } - else if (strcmp(SelectedDirectory, ".gcode") == 0) + else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Enable Filament Sensor"); FilamentSensorEnabled = true; buzzer.tone(105, 1108); buzzer.tone(105, 1108); } - else if (strcmp(SelectedDirectory, ".gcode") == 0) + else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SpecialMenu = false; } } -void AnycubicTouchscreenClass::AnycubicTouchscreen() +void AnycubicTouchscreenClass::PrintList() { if (SpecialMenu) { @@ -631,10 +636,10 @@ void AnycubicTouchscreenClass::AnycubicTouchscreen() } else { - HARDWARE_SERIAL_PROTOCOLLNPGM("/..gcode"); - HARDWARE_SERIAL_PROTOCOLLNPGM("/..gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("DIR_UP.gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("DIR_UP.gcode"); SERIAL_ECHO(count); - SERIAL_ECHOLNPGM(": /..gcode"); + SERIAL_ECHOLNPGM(": DIR_UP.gcode"); } } else @@ -654,7 +659,7 @@ void AnycubicTouchscreenClass::AnycubicTouchscreen() for (unsigned char i = 0; i < MAX_PRINTABLE_FILENAME_LEN; i++) { - if(i > fileNameLen) + if(i >= fileNameLen) { outputString[i] = ' '; } @@ -1074,7 +1079,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() } case 8: // A8 GET SD LIST #ifdef SDSUPPORT - SelectedDirectory[0] = 0; + currentTouchscreenSelection[0] = 0; if (!IS_SD_INSERTED()) { HARDWARE_SERIAL_PROTOCOLPGM("J02"); @@ -1087,7 +1092,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() HARDWARE_SERIAL_PROTOCOLPGM("FN "); // Filelist start HARDWARE_SERIAL_ENTER(); - AnycubicTouchscreen(); + PrintList(); HARDWARE_SERIAL_PROTOCOLPGM("END"); // Filelist stop HARDWARE_SERIAL_ENTER(); } @@ -1156,15 +1161,15 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() starpos = (strchr(TFTstrchr_pointer + 4, '*')); if (TFTstrchr_pointer[4] == '/') { - strcpy(SelectedDirectory, TFTstrchr_pointer + 5); + strcpy(currentTouchscreenSelection, TFTstrchr_pointer + 5); } else if (TFTstrchr_pointer[4] == '<') { - strcpy(SelectedDirectory, TFTstrchr_pointer + 4); + strcpy(currentTouchscreenSelection, TFTstrchr_pointer + 4); } else { - SelectedDirectory[0] = 0; + currentTouchscreenSelection[0] = 0; if (starpos != NULL) *(starpos - 1) = '\0'; @@ -1426,22 +1431,29 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() case 26: // A26 refresh SD #ifdef SDSUPPORT #ifdef ANYCUBIC_TFT_DEBUG - SERIAL_ECHOPAIR(" TFT Serial Debug: SelectedDirectory: ",SelectedDirectory); + SERIAL_ECHOPAIR(" TFT Serial Debug: SelectedDirectory: ",currentTouchscreenSelection); SERIAL_EOL(); #endif - if (SelectedDirectory[0] == 0) + if (currentTouchscreenSelection[0] == 0) { card.mount(); } else { - if ((SelectedDirectory[0] == '.') && (SelectedDirectory[1] == '.')) + //if ((SelectedDirectory[0] == '.') && (SelectedDirectory[1] == '.')) + if ((currentTouchscreenSelection[0] == 'D') + && (currentTouchscreenSelection[1] == 'I') + && (currentTouchscreenSelection[2] == 'R') + && (currentTouchscreenSelection[3] == '_')) { +#ifdef ANYCUBIC_TFT_DEBUG + SERIAL_ECHOLNPGM("TFT Serial Debug: Directory UP (cd ..)"); +#endif card.cdup(); } else { - if (SelectedDirectory[0] == '<') + if (currentTouchscreenSelection[0] == '<') { #ifdef ANYCUBIC_TFT_DEBUG SERIAL_ECHOLNPGM("TFT Serial Debug: Enter Special Menu"); @@ -1450,12 +1462,15 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() } else { - card.cd(SelectedDirectory); + strcpy(currentFileOrDirectory, currentTouchscreenSelection); + int currentFileLen = strlen(currentFileOrDirectory); + currentFileOrDirectory[currentFileLen - 6] = '\0'; + card.cd(currentFileOrDirectory); } } } - SelectedDirectory[0] = 0; + currentTouchscreenSelection[0] = 0; if (!IS_SD_INSERTED()) { diff --git a/Marlin/src/lcd/anycubic_touchscreen.h b/Marlin/src/lcd/anycubic_touchscreen.h index 27924df7..7763d811 100755 --- a/Marlin/src/lcd/anycubic_touchscreen.h +++ b/Marlin/src/lcd/anycubic_touchscreen.h @@ -101,7 +101,7 @@ private: float CodeValue(); bool CodeSeen(char); - void AnycubicTouchscreen(); + void PrintList(); void StartPrint(); void PausePrint(); void StopPrint(); @@ -115,7 +115,8 @@ private: void ReheatNozzle(); void ParkAfterStop(); - char SelectedDirectory[30]; + char currentTouchscreenSelection[64]; + char currentFileOrDirectory[30]; uint8_t SpecialMenu = false; uint8_t FilamentSensorEnabled = true;