diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp
index a5bd4e04a..73dd5df98 100755
--- a/Firmware/Marlin_main.cpp
+++ b/Firmware/Marlin_main.cpp
@@ -4005,7 +4005,7 @@ void process_commands()
} else if (code_seen_P(PSTR("M28"))) { // PRUSA M28
trace();
prusa_sd_card_upload = true;
- card.openFile(strchr_pointer+4,false);
+ card.openFileWrite(strchr_pointer+4);
} else if (code_seen_P(PSTR("SN"))) { // PRUSA SN
gcode_PRUSA_SN();
@@ -5769,7 +5769,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
starpos = (strchr(strchr_pointer + 4,'*'));
if(starpos!=NULL)
*(starpos)='\0';
- card.openFileFilteredGcode(strchr_pointer + 4);
+ card.openFileReadFilteredGcode(strchr_pointer + 4);
break;
/*!
@@ -5833,7 +5833,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
strchr_pointer = strchr(npos,' ') + 1;
*(starpos) = '\0';
}
- card.openFile(strchr_pointer+4,false);
+ card.openFileWrite(strchr_pointer+4);
break;
/*! ### M29 - Stop SD write M29: Stop writing to SD card
@@ -5894,7 +5894,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
if( card.cardOK )
{
- card.openFile(namestartpos,true,!call_procedure);
+ card.openFileReadFilteredGcode(namestartpos,!call_procedure);
if(code_seen('S'))
if(strchr_pointer(int)SD_PROCEDURE_DEPTH-1)
- {
- // SERIAL_ERROR_START;
- // SERIAL_ERRORPGM("trying to call sub-gcode files with too many levels. MAX level is:");
- // SERIAL_ERRORLN(SD_PROCEDURE_DEPTH);
- kill(_n("trying to call sub-gcode files with too many levels."), 1);
- return;
- }
-
- SERIAL_ECHO_START;
- SERIAL_ECHOPGM("SUBROUTINE CALL target:\"");
- SERIAL_ECHO(name);
- SERIAL_ECHOPGM("\" parent:\"");
-
- //store current filename and position
- getAbsFilename(filenames[file_subcall_ctr]);
-
- SERIAL_ECHO(filenames[file_subcall_ctr]);
- SERIAL_ECHOPGM("\" pos");
- SERIAL_ECHOLN(sdpos);
- filespos[file_subcall_ctr]=sdpos;
- file_subcall_ctr++;
- }
- else
- {
- SERIAL_ECHO_START;
- SERIAL_ECHOPGM("Now doing file: ");
- SERIAL_ECHOLN(name);
- }
- file.close();
- }
- else //opening fresh file
- {
- file_subcall_ctr=0; //resetting procedure depth in case user cancels print while in procedure
- SERIAL_ECHO_START;
- SERIAL_ECHOPGM("Now fresh file: ");
- SERIAL_ECHOLN(name);
- }
- sdprinting = false;
+ if(!cardOK)
+ return;
+ if(file.isOpen()){ //replacing current file by new file, or subfile call
- SdFile myDir;
- const char *fname=name;
- diveSubfolder(fname,myDir);
+ // @@TODO I doubt this is necessary for file saving:
- if(read)
- {
- if (file.open(curDir, fname, O_READ))
- {
- filesize = file.fileSize();
- SERIAL_PROTOCOLRPGM(_N("File opened: "));////MSG_SD_FILE_OPENED
- SERIAL_PROTOCOL(fname);
- SERIAL_PROTOCOLRPGM(_n(" Size: "));////MSG_SD_SIZE
- SERIAL_PROTOCOLLN(filesize);
- sdpos = 0;
-
- SERIAL_PROTOCOLLNRPGM(_N("File selected"));////MSG_SD_FILE_SELECTED
- getfilename(0, fname);
- lcd_setstatus(longFilename[0] ? longFilename : fname);
- lcd_setstatuspgm(PSTR("SD-PRINTING"));
+ if((int)file_subcall_ctr>(int)SD_PROCEDURE_DEPTH-1){
+ // SERIAL_ERROR_START;
+ // SERIAL_ERRORPGM("trying to call sub-gcode files with too many levels. MAX level is:");
+ // SERIAL_ERRORLN(SD_PROCEDURE_DEPTH);
+ kill(ofKill, 1);
+ return;
+ }
+
+ SERIAL_ECHO_START;
+ SERIAL_ECHORPGM(ofSubroutineCallTgt);
+ SERIAL_ECHO(name);
+ SERIAL_ECHORPGM(ofParent);
+
+ //store current filename and position
+ getAbsFilename(filenames[file_subcall_ctr]);
+
+ SERIAL_ECHO(filenames[file_subcall_ctr]);
+ SERIAL_ECHORPGM(ofPos);
+ SERIAL_ECHOLN(sdpos);
+ filespos[file_subcall_ctr]=sdpos;
+ file_subcall_ctr++;
+ file.close();
+ } else { //opening fresh file
+ file_subcall_ctr=0; //resetting procedure depth in case user cancels print while in procedure
+ SERIAL_ECHO_START;
+ SERIAL_ECHORPGM(ofNowFreshFile);
+ SERIAL_ECHOLN(name);
}
- else
- {
- SERIAL_PROTOCOLRPGM(MSG_SD_OPEN_FILE_FAIL);
- SERIAL_PROTOCOL(fname);
- SERIAL_PROTOCOLLN('.');
+ sdprinting = false;
+
+ SdFile myDir;
+ const char *fname=name;
+ diveSubfolder(fname,myDir);
+
+ //write
+ if (!file.open(curDir, fname, O_CREAT | O_APPEND | O_WRITE | O_TRUNC)){
+ SERIAL_PROTOCOLRPGM(MSG_SD_OPEN_FILE_FAIL);
+ SERIAL_PROTOCOL(fname);
+ SERIAL_PROTOCOLLN('.');
+ } else {
+ saving = true;
+ SERIAL_PROTOCOLRPGM(ofWritingToFile);////MSG_SD_WRITE_TO_FILE
+ SERIAL_PROTOCOLLN(name);
+ lcd_setstatus(fname);
}
- }
- else
- { //write
- if (!file.open(curDir, fname, O_CREAT | O_APPEND | O_WRITE | O_TRUNC))
- {
- SERIAL_PROTOCOLRPGM(MSG_SD_OPEN_FILE_FAIL);
- SERIAL_PROTOCOL(fname);
- SERIAL_PROTOCOLLN('.');
- }
- else
- {
- saving = true;
- SERIAL_PROTOCOLRPGM(_N("Writing to file: "));////MSG_SD_WRITE_TO_FILE
- SERIAL_PROTOCOLLN(name);
- lcd_setstatus(fname);
- }
- }
-
}
void CardReader::removeFile(const char* name)
@@ -1069,7 +1041,7 @@ void CardReader::printingHasFinished()
{
file.close();
file_subcall_ctr--;
- openFile(filenames[file_subcall_ctr],true,true);
+ openFileReadFilteredGcode(filenames[file_subcall_ctr],true);
setIndex(filespos[file_subcall_ctr]);
startFileprint();
}
diff --git a/Firmware/cardreader.h b/Firmware/cardreader.h
index 8dfb68c98..241d5e8b8 100644
--- a/Firmware/cardreader.h
+++ b/Firmware/cardreader.h
@@ -21,8 +21,8 @@ public:
//this is to delay autostart and hence the initialisaiton of the sd card to some seconds after the normal init, so the device is available quick after a reset
void checkautostart(bool x);
- void openFile(const char* name,bool read,bool replace_current=true);
- void openFileFilteredGcode(const char* name, bool replace_current = false);
+ void openFileWrite(const char* name);
+ void openFileReadFilteredGcode(const char* name, bool replace_current = false);
void openLogFile(const char* name);
void removeFile(const char* name);
void closefile(bool store_location=false);
diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp
index 78dddf2be..61f022c40 100755
--- a/Firmware/ultralcd.cpp
+++ b/Firmware/ultralcd.cpp
@@ -8474,7 +8474,7 @@ static void lcd_selftest_screen_step(int _row, int _col, int _state, const char
static bool check_file(const char* filename) {
if (farm_mode) return true;
- card.openFileFilteredGcode((char*)filename, true);
+ card.openFileReadFilteredGcode(filename, true);
bool result = false;
const uint32_t filesize = card.getFileSize();
uint32_t startPos = 0;