diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index b1ad8d9629..a48a337270 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1960,7 +1960,8 @@ #if ENABLED(MULTI_VOLUME) #define VOLUME_SD_ONBOARD #define VOLUME_USB_FLASH_DRIVE - #define DEFAULT_SHARED_VOLUME SV_USB_FLASH_DRIVE + #define DEFAULT_VOLUME SD_ONBOARD // :[ 'SD_ONBOARD', 'USB_FLASH_DRIVE' ] + #define DEFAULT_SHARED_VOLUME USB_FLASH_DRIVE // :[ 'SD_ONBOARD', 'USB_FLASH_DRIVE' ] #endif #endif // HAS_MEDIA diff --git a/Marlin/src/HAL/STM32/sd/msc_sd.cpp b/Marlin/src/HAL/STM32/sd/msc_sd.cpp index f198b3e49a..9bb65aab4a 100644 --- a/Marlin/src/HAL/STM32/sd/msc_sd.cpp +++ b/Marlin/src/HAL/STM32/sd/msc_sd.cpp @@ -48,6 +48,7 @@ class Sd2CardUSBMscHandler : public USBMscHandler { public: DiskIODriver* diskIODriver() { + // TODO: Explore a variable shared volume, or auto share the un-mounted volume(s) #if HAS_MULTI_VOLUME #if SHARED_VOLUME_IS(SD_ONBOARD) return &card.media_driver_sdcard; diff --git a/Marlin/src/inc/Changes.h b/Marlin/src/inc/Changes.h index abd7db8011..839804d920 100644 --- a/Marlin/src/inc/Changes.h +++ b/Marlin/src/inc/Changes.h @@ -799,3 +799,31 @@ #undef _POWERSTEP01 #undef _TMC26X #undef _TMC26X_STANDALONE + +#if ENABLED(MULTI_VOLUME) + // Change to a generic ID without SV_ prefix + #define SV_SD_ONBOARD 201 + #define SV_USB_FLASH_DRIVE 202 + #if DEFAULT_VOLUME_IS(SV_SD_ONBOARD) || SHARED_VOLUME_IS(SV_SD_ONBOARD) + #error "SV_SD_ONBOARD is now SD_ONBOARD." + #elif DEFAULT_VOLUME_IS(SV_USB_FLASH_DRIVE) || SHARED_VOLUME_IS(SV_USB_FLASH_DRIVE) + #error "SV_USB_FLASH_DRIVE is now USB_FLASH_DRIVE." + #endif + // Skip less clear "bad value" errors in inc/SanityCheck.h + #if DEFAULT_VOLUME_IS(SV_SD_ONBOARD) + #undef DEFAULT_VOLUME + #define DEFAULT_VOLUME SD_ONBOARD + #elif DEFAULT_VOLUME_IS(SV_USB_FLASH_DRIVE) + #undef DEFAULT_VOLUME + #define DEFAULT_VOLUME USB_FLASH_DRIVE + #endif + #if SHARED_VOLUME_IS(SV_SD_ONBOARD) + #undef DEFAULT_SHARED_VOLUME + #define DEFAULT_SHARED_VOLUME SD_ONBOARD + #elif SHARED_VOLUME_IS(SV_USB_FLASH_DRIVE) + #undef DEFAULT_SHARED_VOLUME + #define DEFAULT_SHARED_VOLUME USB_FLASH_DRIVE + #endif + #undef SV_SD_ONBOARD + #undef SV_USB_FLASH_DRIVE +#endif diff --git a/Marlin/src/inc/Conditionals-4-adv.h b/Marlin/src/inc/Conditionals-4-adv.h index a9427c3605..629ee98273 100644 --- a/Marlin/src/inc/Conditionals-4-adv.h +++ b/Marlin/src/inc/Conditionals-4-adv.h @@ -1248,11 +1248,12 @@ #if ENABLED(MULTI_VOLUME) #define HAS_MULTI_VOLUME 1 - #define SV_SD_ONBOARD 101 - #define SV_USB_FLASH_DRIVE 102 - #define _VOLUME_ID(N) _CAT(SV_, N) - #define SHARED_VOLUME_IS(N) (DEFAULT_SHARED_VOLUME == _VOLUME_ID(N)) + #define SD_ONBOARD 101 + #define USB_FLASH_DRIVE 102 + #define DEFAULT_VOLUME_IS(N) (DEFAULT_VOLUME == N) + #define SHARED_VOLUME_IS(N) (DEFAULT_SHARED_VOLUME == N) #else + #define DEFAULT_VOLUME_IS(...) 0 #define SHARED_VOLUME_IS(...) 0 #endif diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 074cfe0dcb..cff241db72 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -416,10 +416,20 @@ static_assert(COUNT(arm) == LOGICAL_AXES, "AXIS_RELATIVE_MODES must contain " _L /** * SD Card Settings */ -#if ALL(HAS_MEDIA, HAS_SD_DETECT, SD_CONNECTION_TYPICAL, ELB_FULL_GRAPHIC_CONTROLLER, HAS_MARLINUI_MENU) && SD_DETECT_STATE == LOW - #error "SD_DETECT_STATE must be set HIGH for SD on the ELB_FULL_GRAPHIC_CONTROLLER." +#if HAS_MEDIA + #if HAS_MULTI_VOLUME + #if !(DEFAULT_VOLUME_IS(SD_ONBOARD) || DEFAULT_VOLUME_IS(USB_FLASH_DRIVE)) + #error "DEFAULT_VOLUME must be either SD_ONBOARD or USB_FLASH_DRIVE." + #endif + #if !(SHARED_VOLUME_IS(SD_ONBOARD) || SHARED_VOLUME_IS(USB_FLASH_DRIVE)) + #error "DEFAULT_SHARED_VOLUME must be either SD_ONBOARD or USB_FLASH_DRIVE." + #endif + #endif + #if ALL(ELB_FULL_GRAPHIC_CONTROLLER, HAS_MARLINUI_MENU, SD_CONNECTION_TYPICAL, HAS_SD_DETECT) && SD_DETECT_STATE == LOW + #error "SD_DETECT_STATE must be set HIGH for SD on the ELB_FULL_GRAPHIC_CONTROLLER." + #endif + #undef SD_CONNECTION_TYPICAL #endif -#undef SD_CONNECTION_TYPICAL /** * SD File Sorting diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp index 5502561ea4..b7d6f70f65 100644 --- a/Marlin/src/sd/cardreader.cpp +++ b/Marlin/src/sd/cardreader.cpp @@ -28,10 +28,6 @@ #if HAS_MEDIA -#if HAS_MULTI_VOLUME && !SHARED_VOLUME_IS(SD_ONBOARD) && !SHARED_VOLUME_IS(USB_FLASH_DRIVE) - #error "DEFAULT_SHARED_VOLUME must be either SV_SD_ONBOARD or SV_USB_FLASH_DRIVE." -#endif - //#define DEBUG_CARDREADER #include "cardreader.h" @@ -144,7 +140,13 @@ int16_t CardReader::nrItems = -1; DiskIODriver_USBFlash CardReader::media_driver_usbFlash; #endif -DiskIODriver* CardReader::driver = nullptr; +DiskIODriver* CardReader::driver = ( + #if HAS_USB_FLASH_DRIVE && !DEFAULT_VOLUME_IS(SD_ONBOARD) + &CardReader::media_driver_usbFlash + #else + &CardReader::media_driver_sdcard + #endif +); MarlinVolume CardReader::volume; MediaFile CardReader::myfile; @@ -158,12 +160,6 @@ MediaFile CardReader::myfile; uint32_t CardReader::filesize, CardReader::sdpos; CardReader::CardReader() { - #if HAS_USB_FLASH_DRIVE && !SHARED_VOLUME_IS(SD_ONBOARD) - selectMediaFlashDrive(); - #else - selectMediaSDCard(); - #endif - #if ENABLED(SDCARD_SORT_ALPHA) sort_count = 0; #if ENABLED(SDSORT_GCODE) @@ -604,11 +600,15 @@ void CardReader::manage_media() { // Try to mount the media (but not at boot if SD_IGNORE_AT_STARTUP) if (TERN1(SD_IGNORE_AT_STARTUP, old_stat > MEDIA_BOOT)) { + // If both SD/FD mount simultaneously prefer the default #if HAS_MULTI_VOLUME - if ((vadd & INSERT_SD) && !isSDCardSelected()) - selectMediaSDCard(); - if ((vadd & INSERT_USB) && !isFlashDriveSelected()) - selectMediaFlashDrive(); + #if HAS_USB_FLASH_DRIVE && !DEFAULT_VOLUME_IS(SD_ONBOARD) + if (vadd & INSERT_USB) selectMediaFlashDrive(); + else if (vadd & INSERT_SD) selectMediaSDCard(); + #else + if (vadd & INSERT_SD) selectMediaSDCard(); + else if (vadd & INSERT_USB) selectMediaFlashDrive(); + #endif #endif safe_delay(500); // Time for inserted media to settle. May re-enter for multiple media? mount();