Merge pull request #4610 from thinkyhead/rc_sd_pause_and_stop
Fix stopSDPrint so it works when paused
This commit is contained in:
commit
fef0e8ba86
3 changed files with 52 additions and 62 deletions
|
@ -60,35 +60,34 @@
|
||||||
#include "stopwatch.h"
|
#include "stopwatch.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define SERIAL_CHAR(x) MYSERIAL.write(x)
|
extern const char echomagic[] PROGMEM;
|
||||||
|
extern const char errormagic[] PROGMEM;
|
||||||
|
|
||||||
|
#define SERIAL_CHAR(x) (MYSERIAL.write(x))
|
||||||
#define SERIAL_EOL SERIAL_CHAR('\n')
|
#define SERIAL_EOL SERIAL_CHAR('\n')
|
||||||
|
|
||||||
#define SERIAL_PROTOCOLCHAR(x) SERIAL_CHAR(x)
|
#define SERIAL_PROTOCOLCHAR(x) SERIAL_CHAR(x)
|
||||||
#define SERIAL_PROTOCOL(x) MYSERIAL.print(x)
|
#define SERIAL_PROTOCOL(x) (MYSERIAL.print(x))
|
||||||
#define SERIAL_PROTOCOL_F(x,y) MYSERIAL.print(x,y)
|
#define SERIAL_PROTOCOL_F(x,y) (MYSERIAL.print(x,y))
|
||||||
#define SERIAL_PROTOCOLPGM(x) serialprintPGM(PSTR(x))
|
#define SERIAL_PROTOCOLPGM(x) (serialprintPGM(PSTR(x)))
|
||||||
#define SERIAL_PROTOCOLLN(x) do{ MYSERIAL.print(x); SERIAL_EOL; }while(0)
|
#define SERIAL_PROTOCOLLN(x) do{ MYSERIAL.print(x); SERIAL_EOL; }while(0)
|
||||||
#define SERIAL_PROTOCOLLNPGM(x) do{ serialprintPGM(PSTR(x "\n")); }while(0)
|
#define SERIAL_PROTOCOLLNPGM(x) (serialprintPGM(PSTR(x "\n")))
|
||||||
|
#define SERIAL_PROTOCOLPAIR(name, value) (serial_echopair_P(PSTR(name),(value)))
|
||||||
|
#define SERIAL_PROTOCOLLNPAIR(name, value) do{ SERIAL_PROTOCOLPAIR(name, value); SERIAL_EOL; }while(0)
|
||||||
|
|
||||||
#define SERIAL_PROTOCOLPAIR(name, value) SERIAL_ECHOPAIR(name, value)
|
#define SERIAL_ECHO_START (serialprintPGM(echomagic))
|
||||||
#define SERIAL_PROTOCOLLNPAIR(name, value) do{ SERIAL_ECHOPAIR(name, value); SERIAL_EOL; }while(0)
|
#define SERIAL_ECHO(x) SERIAL_PROTOCOL(x)
|
||||||
|
#define SERIAL_ECHOPGM(x) SERIAL_PROTOCOLPGM(x)
|
||||||
|
#define SERIAL_ECHOLN(x) SERIAL_PROTOCOLLN(x)
|
||||||
|
#define SERIAL_ECHOLNPGM(x) SERIAL_PROTOCOLLNPGM(x)
|
||||||
|
#define SERIAL_ECHOPAIR(name,value) SERIAL_PROTOCOLPAIR(name, value)
|
||||||
|
#define SERIAL_ECHOLNPAIR(name, value) SERIAL_PROTOCOLLNPAIR(name, value)
|
||||||
|
|
||||||
extern const char errormagic[] PROGMEM;
|
#define SERIAL_ERROR_START (serialprintPGM(errormagic))
|
||||||
extern const char echomagic[] PROGMEM;
|
#define SERIAL_ERROR(x) SERIAL_PROTOCOL(x)
|
||||||
|
#define SERIAL_ERRORPGM(x) SERIAL_PROTOCOLPGM(x)
|
||||||
#define SERIAL_ERROR_START serialprintPGM(errormagic)
|
#define SERIAL_ERRORLN(x) SERIAL_PROTOCOLLN(x)
|
||||||
#define SERIAL_ERROR(x) SERIAL_PROTOCOL(x)
|
#define SERIAL_ERRORLNPGM(x) SERIAL_PROTOCOLLNPGM(x)
|
||||||
#define SERIAL_ERRORPGM(x) SERIAL_PROTOCOLPGM(x)
|
|
||||||
#define SERIAL_ERRORLN(x) SERIAL_PROTOCOLLN(x)
|
|
||||||
#define SERIAL_ERRORLNPGM(x) SERIAL_PROTOCOLLNPGM(x)
|
|
||||||
|
|
||||||
#define SERIAL_ECHO_START serialprintPGM(echomagic)
|
|
||||||
#define SERIAL_ECHO(x) SERIAL_PROTOCOL(x)
|
|
||||||
#define SERIAL_ECHOPGM(x) SERIAL_PROTOCOLPGM(x)
|
|
||||||
#define SERIAL_ECHOLN(x) SERIAL_PROTOCOLLN(x)
|
|
||||||
#define SERIAL_ECHOLNPGM(x) SERIAL_PROTOCOLLNPGM(x)
|
|
||||||
|
|
||||||
#define SERIAL_ECHOPAIR(name,value) (serial_echopair_P(PSTR(name),(value)))
|
|
||||||
|
|
||||||
void serial_echopair_P(const char* s_P, const char *v);
|
void serial_echopair_P(const char* s_P, const char *v);
|
||||||
void serial_echopair_P(const char* s_P, char v);
|
void serial_echopair_P(const char* s_P, char v);
|
||||||
|
|
|
@ -32,12 +32,9 @@
|
||||||
#if ENABLED(SDSUPPORT)
|
#if ENABLED(SDSUPPORT)
|
||||||
|
|
||||||
CardReader::CardReader() {
|
CardReader::CardReader() {
|
||||||
|
sdprinting = cardOK = saving = logging = false;
|
||||||
filesize = 0;
|
filesize = 0;
|
||||||
sdpos = 0;
|
sdpos = 0;
|
||||||
sdprinting = false;
|
|
||||||
cardOK = false;
|
|
||||||
saving = false;
|
|
||||||
logging = false;
|
|
||||||
workDirDepth = 0;
|
workDirDepth = 0;
|
||||||
file_subcall_ctr = 0;
|
file_subcall_ctr = 0;
|
||||||
memset(workDirParents, 0, sizeof(workDirParents));
|
memset(workDirParents, 0, sizeof(workDirParents));
|
||||||
|
@ -276,19 +273,12 @@ void CardReader::openAndPrintFile(const char *name) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CardReader::startFileprint() {
|
void CardReader::startFileprint() {
|
||||||
if (cardOK)
|
if (cardOK) sdprinting = true;
|
||||||
sdprinting = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CardReader::pauseSDPrint() {
|
|
||||||
if (sdprinting) sdprinting = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CardReader::stopSDPrint() {
|
void CardReader::stopSDPrint() {
|
||||||
if (sdprinting) {
|
sdprinting = false;
|
||||||
sdprinting = false;
|
if (isFileOpen()) file.close();
|
||||||
file.close();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CardReader::openLogFile(char* name) {
|
void CardReader::openLogFile(char* name) {
|
||||||
|
@ -310,8 +300,11 @@ void CardReader::getAbsFilename(char *t) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CardReader::openFile(char* name, bool read, bool push_current/*=false*/) {
|
void CardReader::openFile(char* name, bool read, bool push_current/*=false*/) {
|
||||||
|
|
||||||
if (!cardOK) return;
|
if (!cardOK) return;
|
||||||
if (file.isOpen()) { //replacing current file by new file, or subfile call
|
|
||||||
|
uint8_t doing = 0;
|
||||||
|
if (isFileOpen()) { //replacing current file by new file, or subfile call
|
||||||
if (push_current) {
|
if (push_current) {
|
||||||
if (file_subcall_ctr > SD_PROCEDURE_DEPTH - 1) {
|
if (file_subcall_ctr > SD_PROCEDURE_DEPTH - 1) {
|
||||||
SERIAL_ERROR_START;
|
SERIAL_ERROR_START;
|
||||||
|
@ -321,40 +314,39 @@ void CardReader::openFile(char* name, bool read, bool push_current/*=false*/) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SERIAL_ECHO_START;
|
// Store current filename and position
|
||||||
SERIAL_ECHOPGM("SUBROUTINE CALL target:\"");
|
|
||||||
SERIAL_ECHO(name);
|
|
||||||
SERIAL_ECHOPGM("\" parent:\"");
|
|
||||||
|
|
||||||
//store current filename and position
|
|
||||||
getAbsFilename(proc_filenames[file_subcall_ctr]);
|
getAbsFilename(proc_filenames[file_subcall_ctr]);
|
||||||
|
|
||||||
SERIAL_ECHO(proc_filenames[file_subcall_ctr]);
|
SERIAL_ECHO_START;
|
||||||
SERIAL_ECHOPGM("\" pos");
|
SERIAL_ECHOPAIR("SUBROUTINE CALL target:\"", name);
|
||||||
SERIAL_ECHOLN(sdpos);
|
SERIAL_ECHOPAIR("\" parent:\"", proc_filenames[file_subcall_ctr]);
|
||||||
|
SERIAL_ECHOLNPAIR("\" pos", sdpos);
|
||||||
filespos[file_subcall_ctr] = sdpos;
|
filespos[file_subcall_ctr] = sdpos;
|
||||||
file_subcall_ctr++;
|
file_subcall_ctr++;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
SERIAL_ECHO_START;
|
doing = 1;
|
||||||
SERIAL_ECHOPGM("Now doing file: ");
|
|
||||||
SERIAL_ECHOLN(name);
|
|
||||||
}
|
}
|
||||||
file.close();
|
|
||||||
}
|
}
|
||||||
else { //opening fresh file
|
else { // Opening fresh file
|
||||||
file_subcall_ctr = 0; //resetting procedure depth in case user cancels print while in procedure
|
doing = 2;
|
||||||
|
file_subcall_ctr = 0; // Reset procedure depth in case user cancels print while in procedure
|
||||||
|
}
|
||||||
|
|
||||||
|
if (doing) {
|
||||||
SERIAL_ECHO_START;
|
SERIAL_ECHO_START;
|
||||||
SERIAL_ECHOPGM("Now fresh file: ");
|
SERIAL_ECHOPGM("Now ");
|
||||||
SERIAL_ECHOLN(name);
|
SERIAL_ECHO(doing == 1 ? "doing" : "fresh");
|
||||||
|
SERIAL_ECHOLNPAIR(" file: ", name);
|
||||||
}
|
}
|
||||||
sdprinting = false;
|
|
||||||
|
stopSDPrint();
|
||||||
|
|
||||||
SdFile myDir;
|
SdFile myDir;
|
||||||
curDir = &root;
|
curDir = &root;
|
||||||
char *fname = name;
|
char *fname = name;
|
||||||
|
|
||||||
char *dirname_start, *dirname_end;
|
char *dirname_start, *dirname_end;
|
||||||
|
|
||||||
if (name[0] == '/') {
|
if (name[0] == '/') {
|
||||||
dirname_start = &name[1];
|
dirname_start = &name[1];
|
||||||
while (dirname_start != NULL) {
|
while (dirname_start != NULL) {
|
||||||
|
@ -425,8 +417,7 @@ void CardReader::openFile(char* name, bool read, bool push_current/*=false*/) {
|
||||||
void CardReader::removeFile(char* name) {
|
void CardReader::removeFile(char* name) {
|
||||||
if (!cardOK) return;
|
if (!cardOK) return;
|
||||||
|
|
||||||
file.close();
|
stopSDPrint();
|
||||||
sdprinting = false;
|
|
||||||
|
|
||||||
SdFile myDir;
|
SdFile myDir;
|
||||||
curDir = &root;
|
curDir = &root;
|
||||||
|
|
|
@ -51,7 +51,6 @@ public:
|
||||||
void release();
|
void release();
|
||||||
void openAndPrintFile(const char *name);
|
void openAndPrintFile(const char *name);
|
||||||
void startFileprint();
|
void startFileprint();
|
||||||
void pauseSDPrint();
|
|
||||||
void stopSDPrint();
|
void stopSDPrint();
|
||||||
void getStatus();
|
void getStatus();
|
||||||
void printingHasFinished();
|
void printingHasFinished();
|
||||||
|
@ -70,6 +69,7 @@ public:
|
||||||
void updir();
|
void updir();
|
||||||
void setroot();
|
void setroot();
|
||||||
|
|
||||||
|
FORCE_INLINE void pauseSDPrint() { sdprinting = false; }
|
||||||
FORCE_INLINE bool isFileOpen() { return file.isOpen(); }
|
FORCE_INLINE bool isFileOpen() { return file.isOpen(); }
|
||||||
FORCE_INLINE bool eof() { return sdpos >= filesize; }
|
FORCE_INLINE bool eof() { return sdpos >= filesize; }
|
||||||
FORCE_INLINE int16_t get() { sdpos = file.curPosition(); return (int16_t)file.read(); }
|
FORCE_INLINE int16_t get() { sdpos = file.curPosition(); return (int16_t)file.read(); }
|
||||||
|
|
Reference in a new issue