First working implementation of the special menu for the Mega X touchscreen.

This commit is contained in:
Knutwurst
2020-07-07 12:30:43 +02:00
parent f6836ebdcb
commit 73e750d697
2 changed files with 103 additions and 79 deletions

View File

@@ -39,7 +39,7 @@
#define CONFIGURATION_H_VERSION 020005 #define CONFIGURATION_H_VERSION 020005
#define KNUTWURST_MEGAS #define KNUTWURST_MEGAS
#define KNUTWURST_TMC //#define KNUTWURST_TMC
//#define POWER_OUTAGE_TEST //#define POWER_OUTAGE_TEST
//=========================================================================== //===========================================================================
@@ -2353,6 +2353,6 @@
#define ANYCUBIC_TOUCHSCREEN #define ANYCUBIC_TOUCHSCREEN
#define ANYCUBIC_FILAMENT_RUNOUT_SENSOR #define ANYCUBIC_FILAMENT_RUNOUT_SENSOR
//#define ANYCUBIC_TFT_DEBUG #define ANYCUBIC_TFT_DEBUG
//#define KNUTWURST_MEGAS_DEBUG //#define KNUTWURST_MEGAS_DEBUG
//#define KNUTWURST_TMC_DEBUG //#define KNUTWURST_TMC_DEBUG

View File

@@ -54,7 +54,8 @@ int Temp_Buf_Bed_Temperature = 0;
unsigned char ResumingFlag = 0; unsigned char ResumingFlag = 0;
#endif #endif
#define MAX_PRINTABLE_FILENAME_LEN 21 //#define MAX_PRINTABLE_FILENAME_LEN 21
#define MAX_PRINTABLE_FILENAME_LEN 30
void setup_OutageTestPin() void setup_OutageTestPin()
{ {
@@ -432,90 +433,90 @@ bool AnycubicTouchscreenClass::CodeSeen(char code)
void AnycubicTouchscreenClass::HandleSpecialMenu() void AnycubicTouchscreenClass::HandleSpecialMenu()
{ {
if (strcmp(SelectedDirectory, "<special menu>") == 0) if (strcmp(SelectedDirectory, "<Special Menu>.gcode") == 0)
{ {
SpecialMenu = true; SpecialMenu = true;
} }
else if (strcmp(SelectedDirectory, "<pid tune hotend>") == 0) else if (strcmp(SelectedDirectory, "<PID Tune Hotend>.gcode") == 0)
{ {
SERIAL_ECHOLNPGM("Special Menu: PID Tune Hotend"); SERIAL_ECHOLNPGM("Special Menu: PID Tune Hotend");
queue.inject_P(PSTR("M106 S204\nM303 E0 S210 C15 U1")); queue.inject_P(PSTR("M106 S204\nM303 E0 S210 C15 U1"));
} }
else if (strcmp(SelectedDirectory, "<pid tune ultrabase>") == 0) else if (strcmp(SelectedDirectory, "<PID Tune Ultrabase>.gcode") == 0)
{ {
SERIAL_ECHOLNPGM("Special Menu: PID Tune Ultrabase"); SERIAL_ECHOLNPGM("Special Menu: PID Tune Ultrabase");
queue.inject_P(PSTR("M303 E-1 S60 C6 U1")); queue.inject_P(PSTR("M303 E-1 S60 C6 U1"));
} }
else if (strcmp(SelectedDirectory, "<save eeprom>") == 0) else if (strcmp(SelectedDirectory, "<Save EEPROM>.gcode") == 0)
{ {
SERIAL_ECHOLNPGM("Special Menu: Save EEPROM"); SERIAL_ECHOLNPGM("Special Menu: Save EEPROM");
queue.inject_P(PSTR("M500")); queue.inject_P(PSTR("M500"));
buzzer.tone(105, 1108); buzzer.tone(105, 1108);
buzzer.tone(210, 1661); buzzer.tone(210, 1661);
} }
else if (strcmp(SelectedDirectory, "<load fw defaults>") == 0) else if (strcmp(SelectedDirectory, "<Load FW Defaults>.gcode") == 0)
{ {
SERIAL_ECHOLNPGM("Special Menu: Load FW Defaults"); SERIAL_ECHOLNPGM("Special Menu: Load FW Defaults");
queue.inject_P(PSTR("M502")); queue.inject_P(PSTR("M502"));
buzzer.tone(105, 1661); buzzer.tone(105, 1661);
buzzer.tone(210, 1108); buzzer.tone(210, 1108);
} }
else if (strcmp(SelectedDirectory, "<preheat ultrabase>") == 0) else if (strcmp(SelectedDirectory, "<Preheat Ultrabase>.gcode") == 0)
{ {
SERIAL_ECHOLNPGM("Special Menu: Preheat Ultrabase"); SERIAL_ECHOLNPGM("Special Menu: Preheat Ultrabase");
queue.inject_P(PSTR("M140 S60")); queue.inject_P(PSTR("M140 S60"));
} }
else if (strcmp(SelectedDirectory, "<start mesh leveling>") == 0) else if (strcmp(SelectedDirectory, "<Start Mesh Leveling>.gcode") == 0)
{ {
SERIAL_ECHOLNPGM("Special Menu: Start Mesh Leveling"); SERIAL_ECHOLNPGM("Special Menu: Start Mesh Leveling");
queue.inject_P(PSTR("G29 S1")); queue.inject_P(PSTR("G29 S1"));
} }
else if (strcmp(SelectedDirectory, "<next mesh point>") == 0) else if (strcmp(SelectedDirectory, "<Next Mesh Point>.gcode") == 0)
{ {
SERIAL_ECHOLNPGM("Special Menu: Next Mesh Point"); SERIAL_ECHOLNPGM("Special Menu: Next Mesh Point");
queue.inject_P(PSTR("G29 S2")); queue.inject_P(PSTR("G29 S2"));
} }
else if (strcmp(SelectedDirectory, "<z up 0.1>") == 0) else if (strcmp(SelectedDirectory, "<Z Up 0.1>.gcode") == 0)
{ {
SERIAL_ECHOLNPGM("Special Menu: Z Up 0.1"); SERIAL_ECHOLNPGM("Special Menu: Z Up 0.1");
queue.inject_P(PSTR("G91\nG1 Z+0.1\nG90")); queue.inject_P(PSTR("G91\nG1 Z+0.1\nG90"));
} }
else if (strcmp(SelectedDirectory, "<z down 0.1>") == 0) else if (strcmp(SelectedDirectory, "<Z Down 0.1>.gcode") == 0)
{ {
SERIAL_ECHOLNPGM("Special Menu: Z Down 0.1"); SERIAL_ECHOLNPGM("Special Menu: Z Down 0.1");
queue.inject_P(PSTR("G91\nG1 Z-0.1\nG90")); queue.inject_P(PSTR("G91\nG1 Z-0.1\nG90"));
} }
else if (strcmp(SelectedDirectory, "<z up 0.02>") == 0) else if (strcmp(SelectedDirectory, "<Z Up 0.02>.gcode") == 0)
{ {
SERIAL_ECHOLNPGM("Special Menu: Z Up 0.02"); SERIAL_ECHOLNPGM("Special Menu: Z Up 0.02");
queue.inject_P(PSTR("G91\nG1 Z+0.02\nG90")); queue.inject_P(PSTR("G91\nG1 Z+0.02\nG90"));
} }
else if (strcmp(SelectedDirectory, "<z down 0.02>") == 0) else if (strcmp(SelectedDirectory, "<Z Down 0.02>.gcode") == 0)
{ {
SERIAL_ECHOLNPGM("Special Menu: Z Down 0.02"); SERIAL_ECHOLNPGM("Special Menu: Z Down 0.02");
queue.inject_P(PSTR("G91\nG1 Z-0.02\nG90")); queue.inject_P(PSTR("G91\nG1 Z-0.02\nG90"));
} }
else if (strcmp(SelectedDirectory, "<z up 0.01>") == 0) else if (strcmp(SelectedDirectory, "<Z Up 0.01>.gcode") == 0)
{ {
SERIAL_ECHOLNPGM("Special Menu: Z Up 0.01"); SERIAL_ECHOLNPGM("Special Menu: Z Up 0.01");
queue.inject_P(PSTR("G91\nG1 Z+0.01\nG90")); queue.inject_P(PSTR("G91\nG1 Z+0.01\nG90"));
} }
else if (strcmp(SelectedDirectory, "<z down 0.01>") == 0) else if (strcmp(SelectedDirectory, "<Z Down 0.01>.gcode") == 0)
{ {
SERIAL_ECHOLNPGM("Special Menu: Z Down 0.01"); SERIAL_ECHOLNPGM("Special Menu: Z Down 0.01");
queue.inject_P(PSTR("G91\nG1 Z-0.01\nG90")); queue.inject_P(PSTR("G91\nG1 Z-0.01\nG90"));
} }
else if (strcmp(SelectedDirectory, "<fil. change pause>") == 0) else if (strcmp(SelectedDirectory, "<Fil. Change Pause>.gcode") == 0)
{ {
SERIAL_ECHOLNPGM("Special Menu: Fil. Change Pause"); SERIAL_ECHOLNPGM("Special Menu: Fil. Change Pause");
FilamentChangePause(); FilamentChangePause();
} }
else if (strcmp(SelectedDirectory, "<fil. change resume>") == 0) else if (strcmp(SelectedDirectory, "<Fil. Change Resume>.gcode") == 0)
{ {
SERIAL_ECHOLNPGM("Special Menu: Fil. Change Resume"); SERIAL_ECHOLNPGM("Special Menu: Fil. Change Resume");
FilamentChangeResume(); FilamentChangeResume();
} }
else if (strcmp(SelectedDirectory, "<disable fil. sensor>") == 0) else if (strcmp(SelectedDirectory, "<Disable Fil. Sensor>.gcode") == 0)
{ {
SERIAL_ECHOLNPGM("Special Menu: Disable Filament Sensor"); SERIAL_ECHOLNPGM("Special Menu: Disable Filament Sensor");
FilamentSensorEnabled = false; FilamentSensorEnabled = false;
@@ -523,14 +524,14 @@ void AnycubicTouchscreenClass::HandleSpecialMenu()
buzzer.tone(105, 1108); buzzer.tone(105, 1108);
buzzer.tone(105, 1108); buzzer.tone(105, 1108);
} }
else if (strcmp(SelectedDirectory, "<enable fil. sensor>") == 0) else if (strcmp(SelectedDirectory, "<Enable Fil. Sensor>.gcode") == 0)
{ {
SERIAL_ECHOLNPGM("Special Menu: Enable Filament Sensor"); SERIAL_ECHOLNPGM("Special Menu: Enable Filament Sensor");
FilamentSensorEnabled = true; FilamentSensorEnabled = true;
buzzer.tone(105, 1108); buzzer.tone(105, 1108);
buzzer.tone(105, 1108); buzzer.tone(105, 1108);
} }
else if (strcmp(SelectedDirectory, "<exit>") == 0) else if (strcmp(SelectedDirectory, "<Exit>.gcode") == 0)
{ {
SpecialMenu = false; SpecialMenu = false;
} }
@@ -543,56 +544,56 @@ void AnycubicTouchscreenClass::AnycubicTouchscreen()
switch (filenumber) switch (filenumber)
{ {
case 0: // Page 1 case 0: // Page 1
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Preheat Ultrabase>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Preheat Ultrabase>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Preheat Ultrabase>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Preheat Ultrabase>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Fil. Change Pause>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Fil. Change Pause>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Fil. Change Pause>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Fil. Change Pause>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Fil. Change Resume>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Fil. Change Resume>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Fil. Change Resume>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Fil. Change Resume>.gcode");
break; break;
case 4: // Page 2 case 4: // Page 2
HARDWARE_SERIAL_PROTOCOLLNPGM("<Start Mesh Leveling>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Start Mesh Leveling>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Start Mesh Leveling>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Start Mesh Leveling>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Next Mesh Point>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Next Mesh Point>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Next Mesh Point>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Next Mesh Point>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.1>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.1>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.1>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.1>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.1>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.1>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.1>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.1>.gcode");
break; break;
case 8: // Page 3 case 8: // Page 3
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.02>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.02>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.02>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.02>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.02>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.02>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.02>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.02>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.01>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.01>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.01>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.01>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.01>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.01>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.01>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.01>.gcode");
break; break;
case 12: // Page 4 case 12: // Page 4
HARDWARE_SERIAL_PROTOCOLLNPGM("<PID Tune Hotend>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<PID Tune Hotend>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<PID Tune Hotend>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<PID Tune Hotend>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<PID Tune Ultrabase>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<PID Tune Ultrabase>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<PID Tune Ultrabase>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<PID Tune Ultrabase>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Save EEPROM>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Save EEPROM>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Save EEPROM>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Save EEPROM>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Load FW Defaults>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Load FW Defaults>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Load FW Defaults>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Load FW Defaults>.gcode");
break; break;
case 16: // Page 5 case 16: // Page 5
HARDWARE_SERIAL_PROTOCOLLNPGM("<Disable Fil. Sensor>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Disable Fil. Sensor>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Disable Fil. Sensor>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Disable Fil. Sensor>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Enable Fil. Sensor>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Enable Fil. Sensor>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Enable Fil. Sensor>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Enable Fil. Sensor>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>.gcode");
break; break;
default: default:
@@ -623,17 +624,17 @@ void AnycubicTouchscreenClass::AnycubicTouchscreen()
{ {
if (strcmp(card.getWorkDirName(), "/") == 0) if (strcmp(card.getWorkDirName(), "/") == 0)
{ {
HARDWARE_SERIAL_PROTOCOLLNPGM("<Special Menu>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Special Menu>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Special Menu>"); HARDWARE_SERIAL_PROTOCOLLNPGM("<Special Menu>.gcode");
SERIAL_ECHO(count); SERIAL_ECHO(count);
SERIAL_ECHOLNPGM("<Special_Menu>"); SERIAL_ECHOLNPGM(": <Special Menu>.gcode");
} }
else else
{ {
HARDWARE_SERIAL_PROTOCOLLNPGM("/.."); HARDWARE_SERIAL_PROTOCOLLNPGM("/..gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("/.."); HARDWARE_SERIAL_PROTOCOLLNPGM("/..gcode");
SERIAL_ECHO(count); SERIAL_ECHO(count);
SERIAL_ECHOLNPGM("/.."); SERIAL_ECHOLNPGM(": /..gcode");
} }
} }
else else
@@ -649,34 +650,50 @@ void AnycubicTouchscreenClass::AnycubicTouchscreen()
if(fileNameLen > MAX_PRINTABLE_FILENAME_LEN) if(fileNameLen > MAX_PRINTABLE_FILENAME_LEN)
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(i > fileNameLen)
if (!isPrintable(buffer[i]))
{ {
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) if (card.flag.filenameIsDir)
{ {
HARDWARE_SERIAL_PROTOCOLPGM("/"); HARDWARE_SERIAL_PROTOCOLPGM("/");
HARDWARE_SERIAL_PROTOCOLLN(card.filename); HARDWARE_SERIAL_PROTOCOLLN(card.filename);
HARDWARE_SERIAL_PROTOCOLPGM("/"); HARDWARE_SERIAL_PROTOCOLPGM("/");
HARDWARE_SERIAL_PROTOCOLLN(buffer); HARDWARE_SERIAL_PROTOCOLLN(outputString);
SERIAL_ECHO(count); SERIAL_ECHO(count);
SERIAL_ECHOPGM("/"); SERIAL_ECHOPGM(": /");
SERIAL_ECHOLN(buffer); SERIAL_ECHOLN(outputString);
} }
else else
{ {
HARDWARE_SERIAL_PROTOCOLLN(card.filename); HARDWARE_SERIAL_PROTOCOLLN(card.filename);
HARDWARE_SERIAL_PROTOCOLLN(buffer); HARDWARE_SERIAL_PROTOCOLLN(outputString);
SERIAL_ECHO(count); SERIAL_ECHO(count);
SERIAL_ECHOLN(buffer); SERIAL_ECHOPGM(": ");
SERIAL_ECHOLN(outputString);
} }
} }
} }
@@ -684,8 +701,8 @@ void AnycubicTouchscreenClass::AnycubicTouchscreen()
#endif #endif
else else
{ {
HARDWARE_SERIAL_PROTOCOLLNPGM("<Special_Menu>"); //HARDWARE_SERIAL_PROTOCOLLNPGM("<Special Menu>.gcode");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Special_Menu>"); //HARDWARE_SERIAL_PROTOCOLLNPGM("<Special Menu>.gcode");
} }
} }
@@ -1408,6 +1425,10 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
break; break;
case 26: // A26 refresh SD case 26: // A26 refresh SD
#ifdef SDSUPPORT #ifdef SDSUPPORT
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOPAIR(" TFT Serial Debug: SelectedDirectory: ",SelectedDirectory);
SERIAL_EOL();
#endif
if (SelectedDirectory[0] == 0) if (SelectedDirectory[0] == 0)
{ {
card.mount(); card.mount();
@@ -1422,6 +1443,9 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
{ {
if (SelectedDirectory[0] == '<') if (SelectedDirectory[0] == '<')
{ {
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("TFT Serial Debug: Enter Special Menu");
#endif
HandleSpecialMenu(); HandleSpecialMenu();
} }
else else