🔧 Apply DEFAULT_VOLUME on boot

This commit is contained in:
Scott Lahteine 2025-04-26 17:54:54 -05:00
parent 99c29cd924
commit 85f6090f20
6 changed files with 64 additions and 23 deletions

View file

@ -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

View file

@ -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;

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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();