Add C parameter to M27 to include the long filename

In answer to 

Add an option to retrieve the currently open file name (long filename if possible).
2.0.x
TheSFReader committed by Scott Lahteine
parent 2168d6ac25
commit 2e43438e0c

@ -85,7 +85,9 @@
* M24 - Start/resume SD print. (Requires SDSUPPORT)
* M25 - Pause SD print. (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)
* M29 - Stop SD write. (Requires SDSUPPORT)
* M30 - Delete file from SD: "M30 /path/file.gco"

@ -107,22 +107,33 @@ 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() {
#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 (parser.seenval('S')) {
else if (parser.seenval('S'))
card.set_auto_report_interval(parser.value_byte()
#if NUM_SERIAL > 1
, command_queue_port[cmd_queue_index_r]
, port
#endif
);
}
else
#endif
else
card.getStatus(
#if NUM_SERIAL > 1
command_queue_port[cmd_queue_index_r]
port
#endif
);
}

@ -262,6 +262,32 @@ void CardReader::ls(
#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() {
cardOK = false;
if (root.isOpen()) root.close();
@ -460,8 +486,12 @@ void CardReader::openFile(char* name, const bool read, const bool subcall/*=fals
SERIAL_PROTOCOLPAIR(MSG_SD_FILE_OPENED, fname);
SERIAL_PROTOCOLLNPAIR(MSG_SD_SIZE, filesize);
SERIAL_PROTOCOLLNPGM(MSG_SD_FILE_SELECTED);
getfilename(0, fname);
lcd_setstatus(longFilename[0] ? longFilename : fname);
//if (longFilename[0]) {
// SERIAL_PROTOCOLPAIR(MSG_SD_FILE_LONG_NAME, longFilename);
//}
}
else {
SERIAL_PROTOCOLPAIR(MSG_SD_OPEN_FILE_FAIL, fname);

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

Loading…
Cancel
Save