diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 97c35ec63..b36241253 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -5841,9 +5841,15 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) /*! ### M27 - Get SD status M27: Report SD print status + #### Usage + + M27 [ P ] + + #### Parameters + - `P` - Show full SFN path instead of LFN only. */ case 27: - card.getStatus(); + card.getStatus(code_seen('P')); break; /*! diff --git a/Firmware/cardreader.cpp b/Firmware/cardreader.cpp index e228c5236..a96268972 100644 --- a/Firmware/cardreader.cpp +++ b/Firmware/cardreader.cpp @@ -502,31 +502,38 @@ uint32_t CardReader::getFileSize() return filesize; } -void CardReader::getStatus() +void CardReader::getStatus(bool arg_P) { - if(sdprinting) - { - if (isPrintPaused) { - SERIAL_PROTOCOLLNPGM("SD print paused"); - } - else if (saved_printing) { - SERIAL_PROTOCOLLNPGM("Print saved"); - } - else { - SERIAL_PROTOCOLLN(LONGEST_FILENAME); - SERIAL_PROTOCOLRPGM(_N("SD printing byte "));////MSG_SD_PRINTING_BYTE - SERIAL_PROTOCOL(sdpos); - SERIAL_PROTOCOL('/'); - SERIAL_PROTOCOLLN(filesize); - uint16_t time = ( _millis() - starttime ) / 60000U; - SERIAL_PROTOCOL(itostr2(time/60)); - SERIAL_PROTOCOL(':'); - SERIAL_PROTOCOLLN(itostr2(time%60)); - } - } - else { - SERIAL_PROTOCOLLNPGM("Not SD printing"); - } + if (isPrintPaused) + { + if (saved_printing && (saved_printing_type == PRINTING_TYPE_SD)) + SERIAL_PROTOCOLLNPGM("SD print paused"); + else + SERIAL_PROTOCOLLNPGM("Print saved"); + } + else if (sdprinting) + { + if (arg_P) + { + SERIAL_PROTOCOL('/'); + for (uint8_t i = 0; i < getWorkDirDepth(); i++) + printf_P(PSTR("%s/"), dir_names[i]); + puts(filename); + } + else + SERIAL_PROTOCOLLN(LONGEST_FILENAME); + + SERIAL_PROTOCOLRPGM(_N("SD printing byte "));////MSG_SD_PRINTING_BYTE + SERIAL_PROTOCOL(sdpos); + SERIAL_PROTOCOL('/'); + SERIAL_PROTOCOLLN(filesize); + uint16_t time = ( _millis() - starttime ) / 60000U; + SERIAL_PROTOCOL(itostr2(time/60)); + SERIAL_PROTOCOL(':'); + SERIAL_PROTOCOLLN(itostr2(time%60)); + } + else + SERIAL_PROTOCOLLNPGM("Not SD printing"); } void CardReader::write_command(char *buf) { diff --git a/Firmware/cardreader.h b/Firmware/cardreader.h index 25e97882e..524454002 100644 --- a/Firmware/cardreader.h +++ b/Firmware/cardreader.h @@ -26,7 +26,7 @@ public: void release(); void startFileprint(); uint32_t getFileSize(); - void getStatus(); + void getStatus(bool arg_P); void printingHasFinished(); void getfilename(uint16_t nr, const char* const match=NULL);