Browse Source

Save 16 bytes - pass ls_param by value to functions

... as ls_param is a 1-byte structure it is more conservative to pass it
to functions by value than by a pointer
D.R.racer 3 years ago
parent
commit
7011014abb
3 changed files with 13 additions and 13 deletions
  1. 2 4
      Firmware/Marlin_main.cpp
  2. 7 7
      Firmware/cardreader.cpp
  3. 4 2
      Firmware/cardreader.h

+ 2 - 4
Firmware/Marlin_main.cpp

@@ -5744,13 +5744,11 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
     - `L` - Reports ling filenames instead of just short filenames. Requires host software parsing.
     */
     case 20:
-    {
       KEEPALIVE_STATE(NOT_BUSY); // do not send busy messages during listing. Inhibits the output of manage_heater()
       SERIAL_PROTOCOLLNRPGM(_N("Begin file list"));////MSG_BEGIN_FILE_LIST
-      struct CardReader::ls_param params = {.LFN = code_seen('L'), .timestamp = code_seen('T')};
-      card.ls(params);
+      card.ls(CardReader::ls_param(code_seen('L'), code_seen('T')));
       SERIAL_PROTOCOLLNRPGM(_N("End file list"));////MSG_END_FILE_LIST
-    } break;
+    break;
 
     /*!
 	### M21 - Init SD card <a href="https://reprap.org/wiki/G-code#M21:_Initialize_SD_card">M21: Initialize SD card</a>

+ 7 - 7
Firmware/cardreader.cpp

@@ -63,7 +63,7 @@ char *createFilename(char *buffer,const dir_t &p) //buffer>12characters
 +*   LS_SerialPrint     - Print the full path and size of each file to serial output
 +*/
 
-void CardReader::lsDive(const char *prepend, SdFile parent, const char * const match/*=NULL*/, LsAction lsAction, struct ls_param *lsParams) {
+void CardReader::lsDive(const char *prepend, SdFile parent, const char * const match/*=NULL*/, LsAction lsAction, ls_param lsParams) {
 	static uint8_t recursionCnt = 0;
 	// RAII incrementer for the recursionCnt
 	class _incrementer
@@ -102,7 +102,7 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m
 				// Get a new directory object using the full path
 				// and dive recursively into it.
 				
-				if (lsParams->LFN)
+				if (lsParams.LFN)
 					printf_P(PSTR("DIR_ENTER: %s \"%s\"\n"), path, longFilename[0] ? longFilename : lfilename);
 				
 				SdFile dir;
@@ -114,7 +114,7 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m
 				lsDive(path, dir, NULL, lsAction, lsParams);
 				// close() is done automatically by destructor of SdFile
 				
-				if (lsParams->LFN)
+				if (lsParams.LFN)
 					puts_P(PSTR("DIR_EXIT"));
 			}
 			else {
@@ -133,7 +133,7 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m
 						MYSERIAL.write(' ');
 						SERIAL_PROTOCOL(p.fileSize);
 						
-						if (lsParams->timestamp)
+						if (lsParams.timestamp)
 						{
 							crmodDate = p.lastWriteDate;
 							crmodTime = p.lastWriteTime;
@@ -144,7 +144,7 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m
 							printf_P(PSTR(" %#lx"), ((uint32_t)crmodDate << 16) | crmodTime);
 						}
 						
-						if (lsParams->LFN)
+						if (lsParams.LFN)
 							printf_P(PSTR(" \"%s\""), LONGEST_FILENAME);
 						
 						SERIAL_PROTOCOLLN();
@@ -189,10 +189,10 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m
 		} // while readDir
 }
 
-void CardReader::ls(struct ls_param params)
+void CardReader::ls(ls_param params)
 {
   root.rewind();
-  lsDive("",root, NULL, LS_SerialPrint, &params);
+  lsDive("",root, NULL, LS_SerialPrint, params);
 }
 
 

+ 4 - 2
Firmware/cardreader.h

@@ -23,6 +23,8 @@ public:
   {
     bool LFN : 1;
     bool timestamp : 1;
+    inline ls_param():LFN(0), timestamp(0) { }
+    inline ls_param(bool LFN, bool timestamp):LFN(LFN), timestamp(timestamp) { }
   } __attribute__((packed));
   
   void initsd();
@@ -54,7 +56,7 @@ public:
   uint16_t getWorkDirDepth();
   
 
-  void ls(struct ls_param params);
+  void ls(ls_param params);
   bool chdir(const char * relpath, bool doPresort);
   void updir();
   void setroot(bool doPresort);
@@ -137,7 +139,7 @@ private:
   char* diveDirName;
 
   bool diveSubfolder (const char *&fileName);
-  void lsDive(const char *prepend, SdFile parent, const char * const match=NULL, LsAction lsAction = LS_GetFilename, struct ls_param *lsParams = NULL);
+  void lsDive(const char *prepend, SdFile parent, const char * const match=NULL, LsAction lsAction = LS_GetFilename, ls_param lsParams = ls_param());
 #ifdef SDCARD_SORT_ALPHA
   void flush_presort();
 #endif