Skip to content

Commit

Permalink
✨ M21 P / S / U - Select Volume (MarlinFirmware#23780)
Browse files Browse the repository at this point in the history
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
  • Loading branch information
2 people authored and Omkar Dhekne committed Mar 25, 2024
1 parent 02bc407 commit 83fc7ea
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 3 deletions.
5 changes: 4 additions & 1 deletion Marlin/Configuration_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -1631,7 +1631,10 @@
// Enable if SD detect is rendered useless (e.g., by using an SD extender)
//#define NO_SD_DETECT

// Multiple volume support - EXPERIMENTAL.
/**
* Multiple volume support - EXPERIMENTAL.
* Adds 'M21 Pm' / 'M21 S' / 'M21 U' to mount SD Card / USB Drive.
*/
//#define MULTI_VOLUME
#if ENABLED(MULTI_VOLUME)
#define VOLUME_SD_ONBOARD
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/gcode/gcode.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@
*
*** Print from Media (SDSUPPORT) ***
* M20 - List SD card. (Requires SDSUPPORT)
* M21 - Init SD card. (Requires SDSUPPORT)
* M21 - Init SD card. (Requires SDSUPPORT) With MULTI_VOLUME select a drive with `M21 Pn` / 'M21 S' / 'M21 U'.
* M22 - Release SD card. (Requires SDSUPPORT)
* M23 - Select SD file: "M23 /path/file.gco". (Requires SDSUPPORT)
* M24 - Start/resume SD print. (Requires SDSUPPORT)
Expand Down
5 changes: 5 additions & 0 deletions Marlin/src/gcode/host/M115.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,11 @@ void GcodeSuite::M115() {
// SDCARD (M20, M23, M24, etc.)
cap_line(F("SDCARD"), ENABLED(SDSUPPORT));

// MULTI_VOLUME (M21 S/M21 U)
#if ENABLED(SDSUPPORT)
cap_line(F("MULTI_VOLUME"), ENABLED(MULTI_VOLUME));
#endif

// REPEAT (M808)
cap_line(F("REPEAT"), ENABLED(GCODE_REPEAT_MARKERS));

Expand Down
15 changes: 14 additions & 1 deletion Marlin/src/gcode/sd/M21_M22.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,21 @@

/**
* M21: Init SD Card
*
* With MULTI_VOLUME:
* P0 or S - Change to the SD Card and mount it
* P1 or U - Change to the USB Drive and mount it
*/
void GcodeSuite::M21() { card.mount(); }
void GcodeSuite::M21() {
#if ENABLED(MULTI_VOLUME)
const int8_t vol = parser.intval('P', -1);
if (vol == 0 || parser.seen_test('S')) // "S" for SD Card
card.changeMedia(&card.media_driver_sdcard);
else if (vol == 1 || parser.seen_test('U')) // "U" for USB
card.changeMedia(&card.media_driver_usbFlash);
#endif
card.mount();
}

/**
* M22: Release SD Card
Expand Down

0 comments on commit 83fc7ea

Please sign in to comment.