Skip to content

Commit 85f6090

Browse files
committed
🔧 Apply DEFAULT_VOLUME on boot
1 parent 99c29cd commit 85f6090

File tree

6 files changed

+64
-23
lines changed

6 files changed

+64
-23
lines changed

Marlin/Configuration_adv.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1960,7 +1960,8 @@
19601960
#if ENABLED(MULTI_VOLUME)
19611961
#define VOLUME_SD_ONBOARD
19621962
#define VOLUME_USB_FLASH_DRIVE
1963-
#define DEFAULT_SHARED_VOLUME SV_USB_FLASH_DRIVE
1963+
#define DEFAULT_VOLUME SD_ONBOARD // :[ 'SD_ONBOARD', 'USB_FLASH_DRIVE' ]
1964+
#define DEFAULT_SHARED_VOLUME USB_FLASH_DRIVE // :[ 'SD_ONBOARD', 'USB_FLASH_DRIVE' ]
19641965
#endif
19651966

19661967
#endif // HAS_MEDIA

Marlin/src/HAL/STM32/sd/msc_sd.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
class Sd2CardUSBMscHandler : public USBMscHandler {
4949
public:
5050
DiskIODriver* diskIODriver() {
51+
// TODO: Explore a variable shared volume, or auto share the un-mounted volume(s)
5152
#if HAS_MULTI_VOLUME
5253
#if SHARED_VOLUME_IS(SD_ONBOARD)
5354
return &card.media_driver_sdcard;

Marlin/src/inc/Changes.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -799,3 +799,31 @@
799799
#undef _POWERSTEP01
800800
#undef _TMC26X
801801
#undef _TMC26X_STANDALONE
802+
803+
#if ENABLED(MULTI_VOLUME)
804+
// Change to a generic ID without SV_ prefix
805+
#define SV_SD_ONBOARD 201
806+
#define SV_USB_FLASH_DRIVE 202
807+
#if DEFAULT_VOLUME_IS(SV_SD_ONBOARD) || SHARED_VOLUME_IS(SV_SD_ONBOARD)
808+
#error "SV_SD_ONBOARD is now SD_ONBOARD."
809+
#elif DEFAULT_VOLUME_IS(SV_USB_FLASH_DRIVE) || SHARED_VOLUME_IS(SV_USB_FLASH_DRIVE)
810+
#error "SV_USB_FLASH_DRIVE is now USB_FLASH_DRIVE."
811+
#endif
812+
// Skip less clear "bad value" errors in inc/SanityCheck.h
813+
#if DEFAULT_VOLUME_IS(SV_SD_ONBOARD)
814+
#undef DEFAULT_VOLUME
815+
#define DEFAULT_VOLUME SD_ONBOARD
816+
#elif DEFAULT_VOLUME_IS(SV_USB_FLASH_DRIVE)
817+
#undef DEFAULT_VOLUME
818+
#define DEFAULT_VOLUME USB_FLASH_DRIVE
819+
#endif
820+
#if SHARED_VOLUME_IS(SV_SD_ONBOARD)
821+
#undef DEFAULT_SHARED_VOLUME
822+
#define DEFAULT_SHARED_VOLUME SD_ONBOARD
823+
#elif SHARED_VOLUME_IS(SV_USB_FLASH_DRIVE)
824+
#undef DEFAULT_SHARED_VOLUME
825+
#define DEFAULT_SHARED_VOLUME USB_FLASH_DRIVE
826+
#endif
827+
#undef SV_SD_ONBOARD
828+
#undef SV_USB_FLASH_DRIVE
829+
#endif

Marlin/src/inc/Conditionals-4-adv.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,11 +1248,12 @@
12481248

12491249
#if ENABLED(MULTI_VOLUME)
12501250
#define HAS_MULTI_VOLUME 1
1251-
#define SV_SD_ONBOARD 101
1252-
#define SV_USB_FLASH_DRIVE 102
1253-
#define _VOLUME_ID(N) _CAT(SV_, N)
1254-
#define SHARED_VOLUME_IS(N) (DEFAULT_SHARED_VOLUME == _VOLUME_ID(N))
1251+
#define SD_ONBOARD 101
1252+
#define USB_FLASH_DRIVE 102
1253+
#define DEFAULT_VOLUME_IS(N) (DEFAULT_VOLUME == N)
1254+
#define SHARED_VOLUME_IS(N) (DEFAULT_SHARED_VOLUME == N)
12551255
#else
1256+
#define DEFAULT_VOLUME_IS(...) 0
12561257
#define SHARED_VOLUME_IS(...) 0
12571258
#endif
12581259

Marlin/src/inc/SanityCheck.h

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -416,10 +416,20 @@ static_assert(COUNT(arm) == LOGICAL_AXES, "AXIS_RELATIVE_MODES must contain " _L
416416
/**
417417
* SD Card Settings
418418
*/
419-
#if ALL(HAS_MEDIA, HAS_SD_DETECT, SD_CONNECTION_TYPICAL, ELB_FULL_GRAPHIC_CONTROLLER, HAS_MARLINUI_MENU) && SD_DETECT_STATE == LOW
420-
#error "SD_DETECT_STATE must be set HIGH for SD on the ELB_FULL_GRAPHIC_CONTROLLER."
419+
#if HAS_MEDIA
420+
#if HAS_MULTI_VOLUME
421+
#if !(DEFAULT_VOLUME_IS(SD_ONBOARD) || DEFAULT_VOLUME_IS(USB_FLASH_DRIVE))
422+
#error "DEFAULT_VOLUME must be either SD_ONBOARD or USB_FLASH_DRIVE."
423+
#endif
424+
#if !(SHARED_VOLUME_IS(SD_ONBOARD) || SHARED_VOLUME_IS(USB_FLASH_DRIVE))
425+
#error "DEFAULT_SHARED_VOLUME must be either SD_ONBOARD or USB_FLASH_DRIVE."
426+
#endif
427+
#endif
428+
#if ALL(ELB_FULL_GRAPHIC_CONTROLLER, HAS_MARLINUI_MENU, SD_CONNECTION_TYPICAL, HAS_SD_DETECT) && SD_DETECT_STATE == LOW
429+
#error "SD_DETECT_STATE must be set HIGH for SD on the ELB_FULL_GRAPHIC_CONTROLLER."
430+
#endif
431+
#undef SD_CONNECTION_TYPICAL
421432
#endif
422-
#undef SD_CONNECTION_TYPICAL
423433

424434
/**
425435
* SD File Sorting

Marlin/src/sd/cardreader.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,6 @@
2828

2929
#if HAS_MEDIA
3030

31-
#if HAS_MULTI_VOLUME && !SHARED_VOLUME_IS(SD_ONBOARD) && !SHARED_VOLUME_IS(USB_FLASH_DRIVE)
32-
#error "DEFAULT_SHARED_VOLUME must be either SV_SD_ONBOARD or SV_USB_FLASH_DRIVE."
33-
#endif
34-
3531
//#define DEBUG_CARDREADER
3632

3733
#include "cardreader.h"
@@ -144,7 +140,13 @@ int16_t CardReader::nrItems = -1;
144140
DiskIODriver_USBFlash CardReader::media_driver_usbFlash;
145141
#endif
146142

147-
DiskIODriver* CardReader::driver = nullptr;
143+
DiskIODriver* CardReader::driver = (
144+
#if HAS_USB_FLASH_DRIVE && !DEFAULT_VOLUME_IS(SD_ONBOARD)
145+
&CardReader::media_driver_usbFlash
146+
#else
147+
&CardReader::media_driver_sdcard
148+
#endif
149+
);
148150

149151
MarlinVolume CardReader::volume;
150152
MediaFile CardReader::myfile;
@@ -158,12 +160,6 @@ MediaFile CardReader::myfile;
158160
uint32_t CardReader::filesize, CardReader::sdpos;
159161

160162
CardReader::CardReader() {
161-
#if HAS_USB_FLASH_DRIVE && !SHARED_VOLUME_IS(SD_ONBOARD)
162-
selectMediaFlashDrive();
163-
#else
164-
selectMediaSDCard();
165-
#endif
166-
167163
#if ENABLED(SDCARD_SORT_ALPHA)
168164
sort_count = 0;
169165
#if ENABLED(SDSORT_GCODE)
@@ -604,11 +600,15 @@ void CardReader::manage_media() {
604600

605601
// Try to mount the media (but not at boot if SD_IGNORE_AT_STARTUP)
606602
if (TERN1(SD_IGNORE_AT_STARTUP, old_stat > MEDIA_BOOT)) {
603+
// If both SD/FD mount simultaneously prefer the default
607604
#if HAS_MULTI_VOLUME
608-
if ((vadd & INSERT_SD) && !isSDCardSelected())
609-
selectMediaSDCard();
610-
if ((vadd & INSERT_USB) && !isFlashDriveSelected())
611-
selectMediaFlashDrive();
605+
#if HAS_USB_FLASH_DRIVE && !DEFAULT_VOLUME_IS(SD_ONBOARD)
606+
if (vadd & INSERT_USB) selectMediaFlashDrive();
607+
else if (vadd & INSERT_SD) selectMediaSDCard();
608+
#else
609+
if (vadd & INSERT_SD) selectMediaSDCard();
610+
else if (vadd & INSERT_USB) selectMediaFlashDrive();
611+
#endif
612612
#endif
613613
safe_delay(500); // Time for inserted media to settle. May re-enter for multiple media?
614614
mount();

0 commit comments

Comments
 (0)