Browse Source

M27 refactoring and M27 L initial implementation

Voinea Dragos 3 years ago
parent
commit
6b6205d2f6
3 changed files with 33 additions and 26 deletions
  1. 1 1
      Firmware/Marlin_main.cpp
  2. 31 24
      Firmware/cardreader.cpp
  3. 1 1
      Firmware/cardreader.h

+ 1 - 1
Firmware/Marlin_main.cpp

@@ -5818,7 +5818,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
 	### M27 - Get SD status <a href="https://reprap.org/wiki/G-code#M27:_Report_SD_print_status">M27: Report SD print status</a>
     */
     case 27:
-      card.getStatus();
+      card.getStatus(code_seen('L'));
       break;
 
     /*!

+ 31 - 24
Firmware/cardreader.cpp

@@ -502,31 +502,38 @@ uint32_t CardReader::getFileSize()
 	return filesize;
 }
 
-void CardReader::getStatus()
+void CardReader::getStatus(bool arg_L)
 {
-  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_L)
+        {
+            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)
 {

+ 1 - 1
Firmware/cardreader.h

@@ -26,7 +26,7 @@ public:
   void release();
   void startFileprint();
   uint32_t getFileSize();
-  void getStatus();
+  void getStatus(bool arg_L);
   void printingHasFinished();
 
   void getfilename(uint16_t nr, const char* const match=NULL);