From 6fff25481789fd6ffcae1a412404f01a2b00c1b8 Mon Sep 17 00:00:00 2001 From: Knutwurst <36196269+knutwurst@users.noreply.github.com> Date: Wed, 22 Jul 2020 09:39:43 +0200 Subject: [PATCH] Let's try something else... --- Marlin/Configuration_adv.h | 8 +- Marlin/src/lcd/anycubic_touchscreen.cpp | 153 ++++++++++++++---------- Marlin/src/lcd/anycubic_touchscreen.h | 2 + 3 files changed, 99 insertions(+), 64 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index fbc16b41..aa07801a 100755 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1726,8 +1726,8 @@ // @section serial // The ASCII buffer for serial input -#define MAX_CMD_SIZE 128 -#define BUFSIZE 8 +#define MAX_CMD_SIZE 96 +#define BUFSIZE 4 // Transmission to Host Buffer Size // To save 386 bytes of PROGMEM (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0. @@ -1736,13 +1736,13 @@ // For debug-echo: 128 bytes for the optimal speed. // Other output doesn't need to be that speedy. // :[0, 2, 4, 8, 16, 32, 64, 128, 256] -#define TX_BUFFER_SIZE 4 +#define TX_BUFFER_SIZE 0 // Host Receive Buffer Size // Without XON/XOFF flow control (see SERIAL_XON_XOFF below) 32 bytes should be enough. // To use flow control, set this buffer size to at least 1024 bytes. // :[0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048] -#define RX_BUFFER_SIZE 256 +#define RX_BUFFER_SIZE 32 #if RX_BUFFER_SIZE >= 1024 // Enable to have the controller send XON/XOFF control characters to diff --git a/Marlin/src/lcd/anycubic_touchscreen.cpp b/Marlin/src/lcd/anycubic_touchscreen.cpp index 7cb8b15f..b92ef338 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 24 +#define MAX_PRINTABLE_FILENAME_LEN 26 void setup_OutageTestPin() { @@ -113,6 +113,7 @@ AnycubicTouchscreenClass::AnycubicTouchscreenClass() void AnycubicTouchscreenClass::Setup() { HardwareSerial.begin(115200); + HARDWARE_SERIAL_ENTER(); HARDWARE_SERIAL_PROTOCOLPGM("J17"); // J17 Main board reset HARDWARE_SERIAL_ENTER(); delay(10); @@ -140,6 +141,7 @@ void AnycubicTouchscreenClass::Setup() currentFileOrDirectory[0] = '\0'; SpecialMenu = false; FilamentSensorEnabled = true; + MyFileNrCnt = 0; #ifdef STARTUP_CHIME buzzer.tone(100, 554); @@ -437,7 +439,6 @@ void AnycubicTouchscreenClass::HandleSpecialMenu() SERIAL_ECHOPAIR(" DEBUG: Special Menu Selection: ", currentTouchscreenSelection); SERIAL_EOL(); #endif - delay(10); if (strcasestr(currentTouchscreenSelection, "") != NULL) { SpecialMenu = true; @@ -471,6 +472,7 @@ void AnycubicTouchscreenClass::HandleSpecialMenu() SERIAL_ECHOLNPGM("Special Menu: Preheat Ultrabase"); queue.inject_P(PSTR("M140 S60")); } + #if DISABLED(KNUTWURST_BLTOUCH) else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Start Mesh Leveling"); @@ -504,13 +506,23 @@ void AnycubicTouchscreenClass::HandleSpecialMenu() else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Z Up 0.01"); - queue.inject_P(PSTR("G91\nG1 Z+0.01\nG90")); + 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) { SERIAL_ECHOLNPGM("Special Menu: Z Down 0.01"); - queue.inject_P(PSTR("G91\nG1 Z-0.01\nG90")); + queue.enqueue_now_P(PSTR("G91\nG1 Z+0.02\nG90")); + queue.enqueue_now_P(PSTR("G91\nG1 Z-0.03\nG90")); } + #endif + #if ENABLED(KNUTWURST_BLTOUCH) + else if (strcasestr(currentTouchscreenSelection, "") != NULL) + { + SERIAL_ECHOLNPGM("Special Menu: BLTouch Leveling"); + queue.inject_P(PSTR("G28\nG29")); + } + #endif else if (strcasestr(currentTouchscreenSelection, "") != NULL) { SERIAL_ECHOLNPGM("Special Menu: Fil. Change Pause"); @@ -542,6 +554,19 @@ void AnycubicTouchscreenClass::HandleSpecialMenu() } } +uint16_t AnycubicTouchscreenClass::MyGetFileNr() +{ + if(card.isMounted) + { + MyFileNrCnt=0; + //ReadMyfileNrFlag=true; + delay(10); + //card.Myls(); + MyFileNrCnt = card.countFilesInWorkDir(); + } + return MyFileNrCnt; +} + void AnycubicTouchscreenClass::PrintList() { if (SpecialMenu) @@ -549,96 +574,102 @@ void AnycubicTouchscreenClass::PrintList() switch (filenumber) { case 0: // Page 1 - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); break; case 4: // Page 2 - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); break; case 8: // Page 3 - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); break; case 12: // Page 4 - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); break; case 16: // Page 5 - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); + HARDWARE_SERIAL_PROTOCOLLNPGM(""); break; default: break; } } -#ifdef SDSUPPORT else if (card.isMounted()) { uint16_t count = filenumber; uint16_t max_files; - uint16_t dir_files = card.countFilesInWorkDir(); + //uint16_t MyFileNrCnt = card.countFilesInWorkDir(); - delay(10); // What is this shit? What if there are exactely 3 files+folders? // TODO: find something better than this crap. - if ((dir_files - filenumber) < 4) + if ((MyFileNrCnt - filenumber) < 4) { - max_files = dir_files; + max_files = MyFileNrCnt; } else { + //max_files = MyFileNrCnt; max_files = filenumber + 3; } for (count = filenumber; count <= max_files; count++) { + SERIAL_ECHOPGM("filenumber: "); + SERIAL_ECHOLN(filenumber); + SERIAL_ECHOPGM("max_files: "); + SERIAL_ECHOLN(max_files); + SERIAL_ECHOPGM("count: "); + SERIAL_ECHOLN(count); + if (count == 0) // Special Entry { if (strcmp(card.getWorkDirName(), "/") == 0) { - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); SERIAL_ECHO(count); SERIAL_ECHOLNPGM(": .gcode"); } else { - HARDWARE_SERIAL_PROTOCOLLN("DIR_UP.gcode"); - HARDWARE_SERIAL_PROTOCOLLN("DIR_UP.gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM("DIR_UP.gco"); + HARDWARE_SERIAL_PROTOCOLLNPGM("DIR_UP.gcode"); SERIAL_ECHO(count); SERIAL_ECHOLNPGM(": DIR_UP.gcode"); } @@ -647,6 +678,7 @@ void AnycubicTouchscreenClass::PrintList() { card.selectFileByIndex(count - 1); + // Bugfix for non-printable special characters // which are now replaced by underscores. int fileNameLen = strlen(card.longFilename); @@ -678,11 +710,12 @@ void AnycubicTouchscreenClass::PrintList() if (card.flag.filenameIsDir) { - HARDWARE_SERIAL_PROTOCOL("/"); - HARDWARE_SERIAL_PROTOCOLLN(card.filename); - HARDWARE_SERIAL_PROTOCOL("DIR_"); + HARDWARE_SERIAL_PROTOCOLPGM("/"); + HARDWARE_SERIAL_PROTOCOL(card.filename); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gco"); + HARDWARE_SERIAL_PROTOCOLPGM("DIR_"); HARDWARE_SERIAL_PROTOCOL(outputString); - HARDWARE_SERIAL_PROTOCOLLN(".gcode"); + HARDWARE_SERIAL_PROTOCOLLNPGM(".gcode"); SERIAL_ECHO(count); SERIAL_ECHOPGM(": /"); SERIAL_ECHOLN(outputString); @@ -693,12 +726,11 @@ void AnycubicTouchscreenClass::PrintList() HARDWARE_SERIAL_PROTOCOLLN(outputString); SERIAL_ECHO(count); SERIAL_ECHOPGM(": "); - SERIAL_ECHOLN(outputString); + SERIAL_ECHOLN(card.longFilename); } } } } -#endif } void AnycubicTouchscreenClass::CheckSDCardChange() @@ -1129,9 +1161,10 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() } else { - if (CodeSeen('S')) { + MyGetFileNr(); + + if (CodeSeen('S')) filenumber = CodeValue(); - } HARDWARE_SERIAL_PROTOCOLPGM("FN "); // Filelist start @@ -1508,7 +1541,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() { strcpy(currentFileOrDirectory, currentTouchscreenSelection); int currentFileLen = strlen(currentFileOrDirectory); - currentFileOrDirectory[currentFileLen - 6] = '\0'; + currentFileOrDirectory[currentFileLen - 4] = '\0'; card.cd(currentFileOrDirectory); } } diff --git a/Marlin/src/lcd/anycubic_touchscreen.h b/Marlin/src/lcd/anycubic_touchscreen.h index 53de777c..e54bfa8b 100755 --- a/Marlin/src/lcd/anycubic_touchscreen.h +++ b/Marlin/src/lcd/anycubic_touchscreen.h @@ -114,9 +114,11 @@ private: void FilamentChangeResume(); void ReheatNozzle(); void ParkAfterStop(); + uint16_t MyGetFileNr(); char currentTouchscreenSelection[30]; char currentFileOrDirectory[30]; + uint16_t MyFileNrCnt = 0; uint8_t SpecialMenu = false; uint8_t FilamentSensorEnabled = true;