From 2168d6ac25e5820ccd362e26a615483488d68661 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 13 Mar 2018 23:00:31 -0500 Subject: [PATCH 1/2] Allow NULL prepend in lsDive --- Marlin/src/sd/cardreader.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp index ca68fe0dec..10e4396824 100644 --- a/Marlin/src/sd/cardreader.cpp +++ b/Marlin/src/sd/cardreader.cpp @@ -157,7 +157,7 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m case LS_SerialPrint: createFilename(filename, p); - SERIAL_PROTOCOL_P(port, prepend); + if (prepend) SERIAL_PROTOCOL_P(port, prepend); SERIAL_PROTOCOL_P(port, filename); SERIAL_PROTOCOLCHAR_P(port, ' '); SERIAL_PROTOCOLLN_P(port, p.fileSize); @@ -184,7 +184,7 @@ void CardReader::ls( ) { lsAction = LS_SerialPrint; root.rewind(); - lsDive("", root + lsDive(NULL, root #if NUM_SERIAL > 1 , NULL, port #endif @@ -227,7 +227,7 @@ void CardReader::ls( // Find the item, setting the long filename diveDir.rewind(); - lsDive("", diveDir, segment + lsDive(NULL, diveDir, segment #if NUM_SERIAL > 1 , port #endif @@ -322,7 +322,7 @@ void CardReader::openAndPrintFile(const char *name) { void CardReader::startFileprint() { if (cardOK) { sdprinting = true; - #if ENABLED(SDCARD_SORT_ALPHA) + #if SD_RESORT flush_presort(); #endif } @@ -639,7 +639,7 @@ void CardReader::getfilename(uint16_t nr, const char * const match/*=NULL*/) { lsAction = LS_GetFilename; nrFile_index = nr; curDir->rewind(); - lsDive("", *curDir, match); + lsDive(NULL, *curDir, match); } uint16_t CardReader::getnrfilenames() { @@ -647,7 +647,7 @@ uint16_t CardReader::getnrfilenames() { lsAction = LS_Count; nrFiles = 0; curDir->rewind(); - lsDive("", *curDir); + lsDive(NULL, *curDir); //SERIAL_ECHOLN(nrFiles); return nrFiles; } From 2e43438e0c3f2c5e0ec7b701c6f33a71136a601a Mon Sep 17 00:00:00 2001 From: TheSFReader Date: Sun, 11 Mar 2018 11:57:31 +0100 Subject: [PATCH 2/2] Add C parameter to M27 to include the long filename In answer to #10001 Add an option to retrieve the currently open file name (long filename if possible). --- Marlin/src/gcode/gcode.h | 4 ++- .../src/gcode/sdcard/M20-M30_M32-M34_M928.cpp | 31 +++++++++++++------ Marlin/src/sd/cardreader.cpp | 30 ++++++++++++++++++ Marlin/src/sd/cardreader.h | 5 +++ 4 files changed, 59 insertions(+), 11 deletions(-) diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index 548987c96f..3fd16a95fc 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -85,7 +85,9 @@ * M24 - Start/resume SD print. (Requires SDSUPPORT) * M25 - Pause SD print. (Requires SDSUPPORT) * M26 - Set SD position in bytes: "M26 S12345". (Requires SDSUPPORT) - * M27 - Report SD print status. (Requires SDSUPPORT) Or, with 'S' set the SD status auto-report interval. (Requires AUTO_REPORT_SD_STATUS) + * M27 - Report SD print status. (Requires SDSUPPORT) + * OR, with 'S' set the SD status auto-report interval. (Requires AUTO_REPORT_SD_STATUS) + * OR, with 'C' get the current filename. * M28 - Start SD write: "M28 /path/file.gco". (Requires SDSUPPORT) * M29 - Stop SD write. (Requires SDSUPPORT) * M30 - Delete file from SD: "M30 /path/file.gco" diff --git a/Marlin/src/gcode/sdcard/M20-M30_M32-M34_M928.cpp b/Marlin/src/gcode/sdcard/M20-M30_M32-M34_M928.cpp index 0901d6359a..59d45492a6 100644 --- a/Marlin/src/gcode/sdcard/M20-M30_M32-M34_M928.cpp +++ b/Marlin/src/gcode/sdcard/M20-M30_M32-M34_M928.cpp @@ -107,24 +107,35 @@ void GcodeSuite::M26() { } /** - * M27: Get SD Card status or set the SD status auto-report interval. + * M27: Get SD Card status + * OR, with 'S' set the SD status auto-report interval. (Requires AUTO_REPORT_SD_STATUS) + * OR, with 'C' get the current filename. */ void GcodeSuite::M27() { + #if NUM_SERIAL > 1 + const int16_t port = command_queue_port[cmd_queue_index_r]; + #endif + + if (parser.seen('C')) { + SERIAL_ECHOPGM_P(port, "Current file: "); + card.printFilename(); + } + #if ENABLED(AUTO_REPORT_SD_STATUS) - if (parser.seenval('S')) { + else if (parser.seenval('S')) card.set_auto_report_interval(parser.value_byte() #if NUM_SERIAL > 1 - , command_queue_port[cmd_queue_index_r] + , port #endif ); - } - else #endif - card.getStatus( - #if NUM_SERIAL > 1 - command_queue_port[cmd_queue_index_r] - #endif - ); + + else + card.getStatus( + #if NUM_SERIAL > 1 + port + #endif + ); } /** diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp index 10e4396824..5aba4c62f5 100644 --- a/Marlin/src/sd/cardreader.cpp +++ b/Marlin/src/sd/cardreader.cpp @@ -262,6 +262,32 @@ void CardReader::ls( #endif // LONG_FILENAME_HOST_SUPPORT +/** + * Echo the DOS 8.3 filename (and long filename, if any) + */ +void CardReader::printFilename( + #if NUM_SERIAL > 1 + const int8_t port/*= -1*/ + #endif +) { + if (file.isOpen()) { + char lfilename[FILENAME_LENGTH]; + file.getFilename(lfilename); + SERIAL_ECHO_P(port, lfilename); + #if ENABLED(LONG_FILENAME_HOST_SUPPORT) + getfilename(0, lfilename); + if (longFilename[0]) { + SERIAL_ECHO_P(port, ' '); + SERIAL_ECHO_P(port, longFilename); + } + #endif + } + else + SERIAL_ECHOPGM_P(port, "(no file)"); + + SERIAL_EOL_P(port); +} + void CardReader::initsd() { cardOK = false; if (root.isOpen()) root.close(); @@ -460,8 +486,12 @@ void CardReader::openFile(char* name, const bool read, const bool subcall/*=fals SERIAL_PROTOCOLPAIR(MSG_SD_FILE_OPENED, fname); SERIAL_PROTOCOLLNPAIR(MSG_SD_SIZE, filesize); SERIAL_PROTOCOLLNPGM(MSG_SD_FILE_SELECTED); + getfilename(0, fname); lcd_setstatus(longFilename[0] ? longFilename : fname); + //if (longFilename[0]) { + // SERIAL_PROTOCOLPAIR(MSG_SD_FILE_LONG_NAME, longFilename); + //} } else { SERIAL_PROTOCOLPAIR(MSG_SD_OPEN_FILE_FAIL, fname); diff --git a/Marlin/src/sd/cardreader.h b/Marlin/src/sd/cardreader.h index db4e7f216a..66a23d47c5 100644 --- a/Marlin/src/sd/cardreader.h +++ b/Marlin/src/sd/cardreader.h @@ -63,6 +63,11 @@ public: #endif ); void printingHasFinished(); + void printFilename( + #if NUM_SERIAL > 1 + const int8_t port = -1 + #endif + ); #if ENABLED(LONG_FILENAME_HOST_SUPPORT) void printLongPath(char *path