Working Implementation of Anycubic Touchscreen. Also with UTF8 workaround when using invalid characters on SD.

This commit is contained in:
Knutwurst
2020-06-02 19:20:48 +02:00
parent 612108066d
commit 06bd56f54d
6 changed files with 222 additions and 159 deletions

View File

@@ -131,7 +131,6 @@ const char newSucc[] PROGMEM = "OK";
#define ANYCUBIC_SERIAL_ERRORLN(x) ANYCUBIC_SERIAL_PROTOCOLLN(x)
#define ANYCUBIC_SERIAL_ERRORLNPGM(x) ANYCUBIC_SERIAL_PROTOCOLLNPGM(x)
//##define ANYCUBIC_SERIAL_ECHO_START (AnycubicSerialprintPGM(newSucc))
#define ANYCUBIC_SERIAL_ECHOLN(x) ANYCUBIC_SERIAL_PROTOCOLLN(x)
#define ANYCUBIC_SERIAL_SUCC_START (AnycubicSerialprintPGM(newSucc))
#define ANYCUBIC_SERIAL_ECHOPAIR(name, value) (serial_echopair_P(PSTR(name), (value)))

View File

@@ -509,44 +509,49 @@ void AnycubicTouchscreenClass::Ls()
switch (filenumber)
{
case 0: // First Page
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Up 0.1>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Up 0.1>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Up 0.02>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Up 0.02>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Down 0.02>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Down 0.02>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Down 0.1>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Down 0.1>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Exit>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Exit>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Preheat Ultrabase>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Preheat Ultrabase>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<FilamentChange Pause>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<FilamentChange Pause>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<FilamentChange Resume>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<FilamentChange Resume>");
break;
case 4: // Second Page
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Preheat bed>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Preheat bed>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Start Mesh Leveling>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Start Mesh Leveling>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Next Mesh Point>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Next Mesh Point>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Save EEPROM>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Save EEPROM>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Up 0.1>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Up 0.1>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Down 0.1>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Down 0.1>");
break;
case 8: // Third Page
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Exit>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Exit>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Auto Tune Hotend PID>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Auto Tune Hotend PID>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Auto Tune Hotbed PID>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Auto Tune Hotbed PID>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<PID Tune Hotend>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<PID Tune Hotend>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<PID Tune Ultrabase>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<PID Tune Ultrabase>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Save EEPROM>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Save EEPROM>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Load FW Defaults>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Load FW Defaults>");
break;
/*
case 12: // Fourth Page
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<FilamentChange Pause>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<FilamentChange Pause>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<FilamentChange Resume>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<FilamentChange Resume>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Up 0.1>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Up 0.1>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Down 0.1>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Down 0.1>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Up 0.02>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Up 0.02>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Down 0.02>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Down 0.02>");
break;
*/
default:
break;
@@ -590,24 +595,54 @@ void AnycubicTouchscreenClass::Ls()
else
{
card.selectFileByIndex(cnt - 1);
// card.selectFileByIndex(cnt);
bool hasInvalidCharacter = false;
for (unsigned char currentChar = 0; currentChar < strlen(card.longFilename); currentChar++)
if (!isAscii(card.longFilename[currentChar]))
{
hasInvalidCharacter = true;
break;
}
if (card.flag.filenameIsDir)
{
ANYCUBIC_SERIAL_PROTOCOLPGM("/");
ANYCUBIC_SERIAL_PROTOCOLLN(card.filename);
ANYCUBIC_SERIAL_PROTOCOLPGM("/");
ANYCUBIC_SERIAL_PROTOCOLLN(card.longFilename);
SERIAL_ECHO(cnt);
SERIAL_ECHOPGM("/");
SERIAL_ECHOLN(card.longFilename);
if(hasInvalidCharacter)
{
ANYCUBIC_SERIAL_PROTOCOLPGM("/");
ANYCUBIC_SERIAL_PROTOCOLLN(card.filename);
ANYCUBIC_SERIAL_PROTOCOLPGM("/");
ANYCUBIC_SERIAL_PROTOCOLLN(card.filename);
SERIAL_ECHO(cnt);
SERIAL_ECHOPGM("/");
SERIAL_ECHOLN(card.filename);
}
else
{
ANYCUBIC_SERIAL_PROTOCOLPGM("/");
ANYCUBIC_SERIAL_PROTOCOLLN(card.longFilename);
ANYCUBIC_SERIAL_PROTOCOLPGM("/");
ANYCUBIC_SERIAL_PROTOCOLLN(card.longFilename);
SERIAL_ECHO(cnt);
SERIAL_ECHOPGM("/");
SERIAL_ECHOLN(card.longFilename);
}
}
else
{
ANYCUBIC_SERIAL_PROTOCOLLN(card.filename);
ANYCUBIC_SERIAL_PROTOCOLLN(card.longFilename);
SERIAL_ECHO(cnt);
SERIAL_ECHOLN(card.longFilename);
if(hasInvalidCharacter)
{
ANYCUBIC_SERIAL_PROTOCOLLN(card.filename);
ANYCUBIC_SERIAL_PROTOCOLLN(card.filename);
SERIAL_ECHO(cnt);
SERIAL_ECHOLN(card.filename);
}
else
{
ANYCUBIC_SERIAL_PROTOCOLLN(card.longFilename);
ANYCUBIC_SERIAL_PROTOCOLLN(card.longFilename);
SERIAL_ECHO(cnt);
SERIAL_ECHOLN(card.longFilename);
}
}
}
}
@@ -1152,7 +1187,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
thermalManager.setTargetHotend(tempvalue, 0);
}
}
// ANYCUBIC_SERIAL_ENTER();
// ANYCUBIC_SERIAL_ENTER();
break;
case 17: // A17 set heated bed temp
{