Merge pull request #10055 from TheSFReader/getFilename

[2.0.x] Add 'C' to M27 to echo filename (plus long name, if any)
This commit is contained in:
Scott Lahteine 2018-03-16 00:02:27 -05:00 committed by GitHub
commit 899b4df7a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 65 additions and 17 deletions

View File

@ -85,7 +85,9 @@
* M24 - Start/resume SD print. (Requires SDSUPPORT) * M24 - Start/resume SD print. (Requires SDSUPPORT)
* M25 - Pause SD print. (Requires SDSUPPORT) * M25 - Pause SD print. (Requires SDSUPPORT)
* M26 - Set SD position in bytes: "M26 S12345". (Requires SDSUPPORT) * M26 - Set SD position in bytes: "M26 S12345". (Requires SDSUPPORT)
* M27 - Report SD print status. (Requires SDSUPPORT) Or, with 'S<seconds>' set the SD status auto-report interval. (Requires AUTO_REPORT_SD_STATUS) * M27 - Report SD print status. (Requires SDSUPPORT)
* OR, with 'S<seconds>' set the SD status auto-report interval. (Requires AUTO_REPORT_SD_STATUS)
* OR, with 'C' get the current filename.
* M28 - Start SD write: "M28 /path/file.gco". (Requires SDSUPPORT) * M28 - Start SD write: "M28 /path/file.gco". (Requires SDSUPPORT)
* M29 - Stop SD write. (Requires SDSUPPORT) * M29 - Stop SD write. (Requires SDSUPPORT)
* M30 - Delete file from SD: "M30 /path/file.gco" * M30 - Delete file from SD: "M30 /path/file.gco"

View File

@ -107,24 +107,35 @@ void GcodeSuite::M26() {
} }
/** /**
* M27: Get SD Card status or set the SD status auto-report interval. * M27: Get SD Card status
* OR, with 'S<seconds>' set the SD status auto-report interval. (Requires AUTO_REPORT_SD_STATUS)
* OR, with 'C' get the current filename.
*/ */
void GcodeSuite::M27() { void GcodeSuite::M27() {
#if NUM_SERIAL > 1
const int16_t port = command_queue_port[cmd_queue_index_r];
#endif
if (parser.seen('C')) {
SERIAL_ECHOPGM_P(port, "Current file: ");
card.printFilename();
}
#if ENABLED(AUTO_REPORT_SD_STATUS) #if ENABLED(AUTO_REPORT_SD_STATUS)
if (parser.seenval('S')) { else if (parser.seenval('S'))
card.set_auto_report_interval(parser.value_byte() card.set_auto_report_interval(parser.value_byte()
#if NUM_SERIAL > 1 #if NUM_SERIAL > 1
, command_queue_port[cmd_queue_index_r] , port
#endif #endif
); );
}
else
#endif #endif
card.getStatus(
#if NUM_SERIAL > 1 else
command_queue_port[cmd_queue_index_r] card.getStatus(
#endif #if NUM_SERIAL > 1
); port
#endif
);
} }
/** /**

View File

@ -157,7 +157,7 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m
case LS_SerialPrint: case LS_SerialPrint:
createFilename(filename, p); createFilename(filename, p);
SERIAL_PROTOCOL_P(port, prepend); if (prepend) SERIAL_PROTOCOL_P(port, prepend);
SERIAL_PROTOCOL_P(port, filename); SERIAL_PROTOCOL_P(port, filename);
SERIAL_PROTOCOLCHAR_P(port, ' '); SERIAL_PROTOCOLCHAR_P(port, ' ');
SERIAL_PROTOCOLLN_P(port, p.fileSize); SERIAL_PROTOCOLLN_P(port, p.fileSize);
@ -184,7 +184,7 @@ void CardReader::ls(
) { ) {
lsAction = LS_SerialPrint; lsAction = LS_SerialPrint;
root.rewind(); root.rewind();
lsDive("", root lsDive(NULL, root
#if NUM_SERIAL > 1 #if NUM_SERIAL > 1
, NULL, port , NULL, port
#endif #endif
@ -227,7 +227,7 @@ void CardReader::ls(
// Find the item, setting the long filename // Find the item, setting the long filename
diveDir.rewind(); diveDir.rewind();
lsDive("", diveDir, segment lsDive(NULL, diveDir, segment
#if NUM_SERIAL > 1 #if NUM_SERIAL > 1
, port , port
#endif #endif
@ -262,6 +262,32 @@ void CardReader::ls(
#endif // LONG_FILENAME_HOST_SUPPORT #endif // LONG_FILENAME_HOST_SUPPORT
/**
* Echo the DOS 8.3 filename (and long filename, if any)
*/
void CardReader::printFilename(
#if NUM_SERIAL > 1
const int8_t port/*= -1*/
#endif
) {
if (file.isOpen()) {
char lfilename[FILENAME_LENGTH];
file.getFilename(lfilename);
SERIAL_ECHO_P(port, lfilename);
#if ENABLED(LONG_FILENAME_HOST_SUPPORT)
getfilename(0, lfilename);
if (longFilename[0]) {
SERIAL_ECHO_P(port, ' ');
SERIAL_ECHO_P(port, longFilename);
}
#endif
}
else
SERIAL_ECHOPGM_P(port, "(no file)");
SERIAL_EOL_P(port);
}
void CardReader::initsd() { void CardReader::initsd() {
cardOK = false; cardOK = false;
if (root.isOpen()) root.close(); if (root.isOpen()) root.close();
@ -322,7 +348,7 @@ void CardReader::openAndPrintFile(const char *name) {
void CardReader::startFileprint() { void CardReader::startFileprint() {
if (cardOK) { if (cardOK) {
sdprinting = true; sdprinting = true;
#if ENABLED(SDCARD_SORT_ALPHA) #if SD_RESORT
flush_presort(); flush_presort();
#endif #endif
} }
@ -460,8 +486,12 @@ void CardReader::openFile(char* name, const bool read, const bool subcall/*=fals
SERIAL_PROTOCOLPAIR(MSG_SD_FILE_OPENED, fname); SERIAL_PROTOCOLPAIR(MSG_SD_FILE_OPENED, fname);
SERIAL_PROTOCOLLNPAIR(MSG_SD_SIZE, filesize); SERIAL_PROTOCOLLNPAIR(MSG_SD_SIZE, filesize);
SERIAL_PROTOCOLLNPGM(MSG_SD_FILE_SELECTED); SERIAL_PROTOCOLLNPGM(MSG_SD_FILE_SELECTED);
getfilename(0, fname); getfilename(0, fname);
lcd_setstatus(longFilename[0] ? longFilename : fname); lcd_setstatus(longFilename[0] ? longFilename : fname);
//if (longFilename[0]) {
// SERIAL_PROTOCOLPAIR(MSG_SD_FILE_LONG_NAME, longFilename);
//}
} }
else { else {
SERIAL_PROTOCOLPAIR(MSG_SD_OPEN_FILE_FAIL, fname); SERIAL_PROTOCOLPAIR(MSG_SD_OPEN_FILE_FAIL, fname);
@ -639,7 +669,7 @@ void CardReader::getfilename(uint16_t nr, const char * const match/*=NULL*/) {
lsAction = LS_GetFilename; lsAction = LS_GetFilename;
nrFile_index = nr; nrFile_index = nr;
curDir->rewind(); curDir->rewind();
lsDive("", *curDir, match); lsDive(NULL, *curDir, match);
} }
uint16_t CardReader::getnrfilenames() { uint16_t CardReader::getnrfilenames() {
@ -647,7 +677,7 @@ uint16_t CardReader::getnrfilenames() {
lsAction = LS_Count; lsAction = LS_Count;
nrFiles = 0; nrFiles = 0;
curDir->rewind(); curDir->rewind();
lsDive("", *curDir); lsDive(NULL, *curDir);
//SERIAL_ECHOLN(nrFiles); //SERIAL_ECHOLN(nrFiles);
return nrFiles; return nrFiles;
} }

View File

@ -63,6 +63,11 @@ public:
#endif #endif
); );
void printingHasFinished(); void printingHasFinished();
void printFilename(
#if NUM_SERIAL > 1
const int8_t port = -1
#endif
);
#if ENABLED(LONG_FILENAME_HOST_SUPPORT) #if ENABLED(LONG_FILENAME_HOST_SUPPORT)
void printLongPath(char *path void printLongPath(char *path