From 73e750d697d1733b91eef3a97ebbda6a550880f0 Mon Sep 17 00:00:00 2001 From: Knutwurst <36196269+knutwurst@users.noreply.github.com> Date: Tue, 7 Jul 2020 12:30:43 +0200 Subject: [PATCH] First working implementation of the special menu for the Mega X touchscreen. --- Marlin/Configuration.h | 4 +- Marlin/src/lcd/anycubic_touchscreen.cpp | 178 ++++++++++++++---------- 2 files changed, 103 insertions(+), 79 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index add097af..fc7ffc67 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 POWER_OUTAGE_TEST //=========================================================================== @@ -2353,6 +2353,6 @@ #define ANYCUBIC_TOUCHSCREEN #define ANYCUBIC_FILAMENT_RUNOUT_SENSOR -//#define ANYCUBIC_TFT_DEBUG +#define ANYCUBIC_TFT_DEBUG //#define KNUTWURST_MEGAS_DEBUG //#define KNUTWURST_TMC_DEBUG diff --git a/Marlin/src/lcd/anycubic_touchscreen.cpp b/Marlin/src/lcd/anycubic_touchscreen.cpp index fa4d5dd1..6a8b7707 100755 --- a/Marlin/src/lcd/anycubic_touchscreen.cpp +++ b/Marlin/src/lcd/anycubic_touchscreen.cpp @@ -54,7 +54,8 @@ int Temp_Buf_Bed_Temperature = 0; unsigned char ResumingFlag = 0; #endif -#define MAX_PRINTABLE_FILENAME_LEN 21 +//#define MAX_PRINTABLE_FILENAME_LEN 21 +#define MAX_PRINTABLE_FILENAME_LEN 30 void setup_OutageTestPin() { @@ -432,90 +433,90 @@ bool AnycubicTouchscreenClass::CodeSeen(char code) void AnycubicTouchscreenClass::HandleSpecialMenu() { - if (strcmp(SelectedDirectory, "") == 0) + if (strcmp(SelectedDirectory, ".gcode") == 0) { SpecialMenu = true; } - else if (strcmp(SelectedDirectory, "") == 0) + else if (strcmp(SelectedDirectory, ".gcode") == 0) { SERIAL_ECHOLNPGM("Special Menu: PID Tune Hotend"); queue.inject_P(PSTR("M106 S204\nM303 E0 S210 C15 U1")); } - else if (strcmp(SelectedDirectory, "") == 0) + else if (strcmp(SelectedDirectory, ".gcode") == 0) { SERIAL_ECHOLNPGM("Special Menu: PID Tune Ultrabase"); queue.inject_P(PSTR("M303 E-1 S60 C6 U1")); } - else if (strcmp(SelectedDirectory, "") == 0) + else if (strcmp(SelectedDirectory, ".gcode") == 0) { SERIAL_ECHOLNPGM("Special Menu: Save EEPROM"); queue.inject_P(PSTR("M500")); buzzer.tone(105, 1108); buzzer.tone(210, 1661); } - else if (strcmp(SelectedDirectory, "") == 0) + else if (strcmp(SelectedDirectory, ".gcode") == 0) { SERIAL_ECHOLNPGM("Special Menu: Load FW Defaults"); queue.inject_P(PSTR("M502")); buzzer.tone(105, 1661); buzzer.tone(210, 1108); } - else if (strcmp(SelectedDirectory, "") == 0) + else if (strcmp(SelectedDirectory, ".gcode") == 0) { SERIAL_ECHOLNPGM("Special Menu: Preheat Ultrabase"); queue.inject_P(PSTR("M140 S60")); } - else if (strcmp(SelectedDirectory, "") == 0) + else if (strcmp(SelectedDirectory, ".gcode") == 0) { SERIAL_ECHOLNPGM("Special Menu: Start Mesh Leveling"); queue.inject_P(PSTR("G29 S1")); } - else if (strcmp(SelectedDirectory, "") == 0) + else if (strcmp(SelectedDirectory, ".gcode") == 0) { SERIAL_ECHOLNPGM("Special Menu: Next Mesh Point"); queue.inject_P(PSTR("G29 S2")); } - else if (strcmp(SelectedDirectory, "") == 0) + else if (strcmp(SelectedDirectory, ".gcode") == 0) { SERIAL_ECHOLNPGM("Special Menu: Z Up 0.1"); queue.inject_P(PSTR("G91\nG1 Z+0.1\nG90")); } - else if (strcmp(SelectedDirectory, "") == 0) + else if (strcmp(SelectedDirectory, ".gcode") == 0) { SERIAL_ECHOLNPGM("Special Menu: Z Down 0.1"); queue.inject_P(PSTR("G91\nG1 Z-0.1\nG90")); } - else if (strcmp(SelectedDirectory, "") == 0) + else if (strcmp(SelectedDirectory, ".gcode") == 0) { SERIAL_ECHOLNPGM("Special Menu: Z Up 0.02"); queue.inject_P(PSTR("G91\nG1 Z+0.02\nG90")); } - else if (strcmp(SelectedDirectory, "") == 0) + else if (strcmp(SelectedDirectory, ".gcode") == 0) { SERIAL_ECHOLNPGM("Special Menu: Z Down 0.02"); queue.inject_P(PSTR("G91\nG1 Z-0.02\nG90")); } - else if (strcmp(SelectedDirectory, "") == 0) + else if (strcmp(SelectedDirectory, ".gcode") == 0) { SERIAL_ECHOLNPGM("Special Menu: Z Up 0.01"); queue.inject_P(PSTR("G91\nG1 Z+0.01\nG90")); } - else if (strcmp(SelectedDirectory, "") == 0) + else if (strcmp(SelectedDirectory, ".gcode") == 0) { SERIAL_ECHOLNPGM("Special Menu: Z Down 0.01"); queue.inject_P(PSTR("G91\nG1 Z-0.01\nG90")); } - else if (strcmp(SelectedDirectory, "") == 0) + else if (strcmp(SelectedDirectory, ".gcode") == 0) { SERIAL_ECHOLNPGM("Special Menu: Fil. Change Pause"); FilamentChangePause(); } - else if (strcmp(SelectedDirectory, "") == 0) + else if (strcmp(SelectedDirectory, ".gcode") == 0) { SERIAL_ECHOLNPGM("Special Menu: Fil. Change Resume"); FilamentChangeResume(); } - else if (strcmp(SelectedDirectory, "") == 0) + else if (strcmp(SelectedDirectory, ".gcode") == 0) { SERIAL_ECHOLNPGM("Special Menu: Disable Filament Sensor"); FilamentSensorEnabled = false; @@ -523,14 +524,14 @@ void AnycubicTouchscreenClass::HandleSpecialMenu() buzzer.tone(105, 1108); buzzer.tone(105, 1108); } - else if (strcmp(SelectedDirectory, "") == 0) + else if (strcmp(SelectedDirectory, ".gcode") == 0) { SERIAL_ECHOLNPGM("Special Menu: Enable Filament Sensor"); FilamentSensorEnabled = true; buzzer.tone(105, 1108); buzzer.tone(105, 1108); } - else if (strcmp(SelectedDirectory, "") == 0) + else if (strcmp(SelectedDirectory, ".gcode") == 0) { SpecialMenu = false; } @@ -543,56 +544,56 @@ void AnycubicTouchscreenClass::AnycubicTouchscreen() 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(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); break; 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(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".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(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".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(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".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(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); break; default: @@ -623,17 +624,17 @@ void AnycubicTouchscreenClass::AnycubicTouchscreen() { if (strcmp(card.getWorkDirName(), "/") == 0) { - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); SERIAL_ECHO(count); - SERIAL_ECHOLNPGM(""); + SERIAL_ECHOLNPGM(": .gcode"); } else { - HARDWARE_SERIAL_PROTOCOLLNPGM("/.."); - HARDWARE_SERIAL_PROTOCOLLNPGM("/.."); + HARDWARE_SERIAL_PROTOCOLLNPGM("/..gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("/..gcode"); SERIAL_ECHO(count); - SERIAL_ECHOLNPGM("/.."); + SERIAL_ECHOLNPGM(": /..gcode"); } } else @@ -649,34 +650,50 @@ void AnycubicTouchscreenClass::AnycubicTouchscreen() if(fileNameLen > MAX_PRINTABLE_FILENAME_LEN) fileNameLen = MAX_PRINTABLE_FILENAME_LEN; - char buffer[fileNameLen]; + char outputString[MAX_PRINTABLE_FILENAME_LEN]; - for (unsigned char i = 0; i < fileNameLen; i++) + for (unsigned char i = 0; i < MAX_PRINTABLE_FILENAME_LEN; i++) { - buffer[i] = card.longFilename[i]; - if (!isPrintable(buffer[i])) + if(i > fileNameLen) { - buffer[i] = '_'; + outputString[i] = ' '; + } + else + { + outputString[i] = card.longFilename[i]; + if (!isPrintable(outputString[i])) + { + outputString[i] = '_'; + } } } - buffer[fileNameLen] = '\0'; + + outputString[MAX_PRINTABLE_FILENAME_LEN - 6] = '.'; + outputString[MAX_PRINTABLE_FILENAME_LEN - 5] = 'g'; + outputString[MAX_PRINTABLE_FILENAME_LEN - 4] = 'c'; + outputString[MAX_PRINTABLE_FILENAME_LEN - 3] = 'o'; + outputString[MAX_PRINTABLE_FILENAME_LEN - 2] = 'd'; + outputString[MAX_PRINTABLE_FILENAME_LEN - 1] = 'e'; + outputString[MAX_PRINTABLE_FILENAME_LEN] = '\0'; + if (card.flag.filenameIsDir) { HARDWARE_SERIAL_PROTOCOLPGM("/"); HARDWARE_SERIAL_PROTOCOLLN(card.filename); HARDWARE_SERIAL_PROTOCOLPGM("/"); - HARDWARE_SERIAL_PROTOCOLLN(buffer); + HARDWARE_SERIAL_PROTOCOLLN(outputString); SERIAL_ECHO(count); - SERIAL_ECHOPGM("/"); - SERIAL_ECHOLN(buffer); + SERIAL_ECHOPGM(": /"); + SERIAL_ECHOLN(outputString); } else { HARDWARE_SERIAL_PROTOCOLLN(card.filename); - HARDWARE_SERIAL_PROTOCOLLN(buffer); + HARDWARE_SERIAL_PROTOCOLLN(outputString); SERIAL_ECHO(count); - SERIAL_ECHOLN(buffer); + SERIAL_ECHOPGM(": "); + SERIAL_ECHOLN(outputString); } } } @@ -684,8 +701,8 @@ void AnycubicTouchscreenClass::AnycubicTouchscreen() #endif else { - HARDWARE_SERIAL_PROTOCOLLNPGM(""); - HARDWARE_SERIAL_PROTOCOLLNPGM(""); + //HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + //HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); } } @@ -1408,6 +1425,10 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() break; case 26: // A26 refresh SD #ifdef SDSUPPORT +#ifdef ANYCUBIC_TFT_DEBUG + SERIAL_ECHOPAIR(" TFT Serial Debug: SelectedDirectory: ",SelectedDirectory); + SERIAL_EOL(); +#endif if (SelectedDirectory[0] == 0) { card.mount(); @@ -1422,6 +1443,9 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() { if (SelectedDirectory[0] == '<') { +#ifdef ANYCUBIC_TFT_DEBUG + SERIAL_ECHOLNPGM("TFT Serial Debug: Enter Special Menu"); +#endif HandleSpecialMenu(); } else