diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index 05355ddccb..de6677fc9a 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -820,9 +820,6 @@ void idle(const bool no_stepper_sleep/*=false*/) { // Handle SD Card insert / remove TERN_(HAS_MEDIA, card.manage_media()); - // Handle USB Flash Drive insert / remove - TERN_(HAS_USB_FLASH_DRIVE, card.diskIODriver()->idle()); - // Announce Host Keepalive state (if any) TERN_(HOST_KEEPALIVE_FEATURE, gcode.host_keepalive()); diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/status_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/status_screen.cpp index 1a7ccd8be5..65ac4551b9 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/status_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/status_screen.cpp @@ -432,8 +432,10 @@ void StatusScreen::onIdle() { } void StatusScreen::onMediaMounted() { - if (AT_SCREEN(StatusScreen)) - setStatusMessage(GET_TEXT_F(MSG_MEDIA_INSERTED)); + if (!AT_SCREEN(StatusScreen)) return; + setStatusMessage(ExtUI::isMediaMountedSD() ? GET_TEXT_F(MSG_MEDIA_INSERTED_SD) : + ExtUI::isMediaMountedUSB() ? GET_TEXT_F(MSG_MEDIA_INSERTED_USB) : + GET_TEXT_F(MSG_MEDIA_INSERTED)); } void StatusScreen::onMediaRemoved() { diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.cpp index 420758ca88..7b9e8f9f34 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.cpp @@ -588,8 +588,10 @@ bool StatusScreen::onTouchEnd(uint8_t tag) { } void StatusScreen::onMediaMounted() { - if (AT_SCREEN(StatusScreen)) - setStatusMessage(GET_TEXT_F(MSG_MEDIA_INSERTED)); + if (!AT_SCREEN(StatusScreen)) return; + setStatusMessage(ExtUI::isMediaMountedSD() ? GET_TEXT_F(MSG_MEDIA_INSERTED_SD) : + ExtUI::isMediaMountedUSB() ? GET_TEXT_F(MSG_MEDIA_INSERTED_USB) : + GET_TEXT_F(MSG_MEDIA_INSERTED)); } void StatusScreen::onMediaRemoved() { diff --git a/Marlin/src/lcd/extui/ui_api.cpp b/Marlin/src/lcd/extui/ui_api.cpp index 7763bac05a..b3f4c39c24 100644 --- a/Marlin/src/lcd/extui/ui_api.cpp +++ b/Marlin/src/lcd/extui/ui_api.cpp @@ -1079,7 +1079,9 @@ namespace ExtUI { return isPrintingFromMedia() || printJobOngoing(); } - bool isMediaMounted() { return TERN0(HAS_MEDIA, card.isMounted()); } + bool isMediaMounted() { return card.isMounted(); } + bool isMediaMountedSD() { return card.isSDCardMounted(); } + bool isMediaMountedUSB() { return card.isFlashDriveMounted(); } // Pause/Resume/Stop are implemented in MarlinUI void pausePrint() { ui.pause_print(); } diff --git a/Marlin/src/lcd/extui/ui_api.h b/Marlin/src/lcd/extui/ui_api.h index 5e781706bc..7796a4e49f 100644 --- a/Marlin/src/lcd/extui/ui_api.h +++ b/Marlin/src/lcd/extui/ui_api.h @@ -464,6 +464,9 @@ namespace ExtUI { * Use these to operate on files */ bool isMediaMounted(); + bool isMediaMountedSD(); + bool isMediaMountedUSB(); + bool isPrintingFromMediaPaused(); bool isPrintingFromMedia(); bool isPrinting(); diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index d23e638a78..7ea17d5bb3 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -44,7 +44,7 @@ #if HAS_SDCARD && !HAS_USB_FLASH_DRIVE #define MEDIA_TYPE_EN "SD Card" -#elif HAS_USB_FLASH_DRIVE +#elif HAS_USB_FLASH_DRIVE && !HAS_SDCARD #define MEDIA_TYPE_EN "USB Drive" #else #define MEDIA_TYPE_EN "Media" diff --git a/Marlin/src/lcd/language/language_es.h b/Marlin/src/lcd/language/language_es.h index d1e4babf2b..a92efd5389 100644 --- a/Marlin/src/lcd/language/language_es.h +++ b/Marlin/src/lcd/language/language_es.h @@ -30,7 +30,7 @@ #if HAS_SDCARD && !HAS_USB_FLASH_DRIVE #define MEDIA_TYPE_ES "SD" -#elif HAS_USB_FLASH_DRIVE +#elif HAS_USB_FLASH_DRIVE && !HAS_SDCARD #define MEDIA_TYPE_ES "USB" #else #define MEDIA_TYPE_ES "SD/FD" diff --git a/Marlin/src/lcd/language/language_gl.h b/Marlin/src/lcd/language/language_gl.h index 6dd699f1bd..3b7620de90 100644 --- a/Marlin/src/lcd/language/language_gl.h +++ b/Marlin/src/lcd/language/language_gl.h @@ -32,7 +32,7 @@ #if HAS_SDCARD && !HAS_USB_FLASH_DRIVE #define MEDIA_TYPE_GL "SD" -#elif HAS_USB_FLASH_DRIVE +#elif HAS_USB_FLASH_DRIVE && !HAS_SDCARD #define MEDIA_TYPE_GL "FD" #else #define MEDIA_TYPE_GL "SD/FD" diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h index 424bcd8367..4bcde87859 100644 --- a/Marlin/src/lcd/language/language_it.h +++ b/Marlin/src/lcd/language/language_it.h @@ -40,7 +40,7 @@ #if HAS_SDCARD && !HAS_USB_FLASH_DRIVE #define MEDIA_TYPE_IT "SD" -#elif HAS_USB_FLASH_DRIVE +#elif HAS_USB_FLASH_DRIVE && !HAS_SDCARD #define MEDIA_TYPE_IT "USB" #else #define MEDIA_TYPE_IT "Media" diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index 8b7e64dda8..f6b1b60c7d 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -1907,7 +1907,12 @@ uint8_t expand_u8str_P(char * const outstr, PGM_P const ptpl, const int8_t ind, quick_feedback(); goto_screen(MEDIA_MENU_GATEWAY); #else - LCD_MESSAGE(MSG_MEDIA_INSERTED); + if (card.isSDCardSelected()) + LCD_MESSAGE(MSG_MEDIA_INSERTED_SD); + else if (card.isFlashDriveSelected()) + LCD_MESSAGE(MSG_MEDIA_INSERTED_USB); + else + LCD_MESSAGE(MSG_MEDIA_INSERTED); #endif } else { // Media Removed diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp index 9b0a37913a..21bc6e780a 100644 --- a/Marlin/src/sd/cardreader.cpp +++ b/Marlin/src/sd/cardreader.cpp @@ -501,7 +501,14 @@ void CardReader::mount() { cdroot(); else { #if ANY(HAS_SD_DETECT, HAS_USB_FLASH_DRIVE) - if (marlin_state != MarlinState::MF_INITIALIZING) LCD_ALERTMESSAGE(MSG_MEDIA_INIT_FAIL); + if (marlin_state != MarlinState::MF_INITIALIZING) { + if (isSDCardSelected()) + LCD_ALERTMESSAGE(MSG_MEDIA_INIT_FAIL_SD); + else if (isFlashDriveSelected()) + LCD_ALERTMESSAGE(MSG_MEDIA_INIT_FAIL_USB); + else + LCD_ALERTMESSAGE(MSG_MEDIA_INIT_FAIL); + } #endif } @@ -516,6 +523,10 @@ void CardReader::mount() { * Handle SD card events */ void CardReader::manage_media() { + #if HAS_USB_FLASH_DRIVE // Wrap for optimal non-virtual? + driver->idle(); // Handle device tasks (e.g., USB Drive insert / remove) + #endif + static uint8_t prev_stat = 2; // At boot we don't know if media is present or not uint8_t stat = uint8_t(isInserted()); if (stat == prev_stat) return; // Already checked and still no change? diff --git a/Marlin/src/sd/cardreader.h b/Marlin/src/sd/cardreader.h index 1fa23ececf..1a8843da58 100644 --- a/Marlin/src/sd/cardreader.h +++ b/Marlin/src/sd/cardreader.h @@ -143,10 +143,11 @@ public: } /** - * Media Detection - Inserted, Mounted, Job Running, Job Paused, etc. + * Media Detection - Inserted and Mounted Media * - * Marlin 2.1.x supports up to two drives, either an SD Card or USB-FD - * Onboard SD may have SPI or SDIO interface. USB FD may use MSC. + * Marlin 2.1.x supports up to two drives, either an SD Card or USB-FD. + * SD Card may have SPI or SDIO interface. + * SDIO / USB drives may be shared via MSC when not in use by Marlin. */ // No card detect line? Assume the card is inserted. @@ -169,8 +170,16 @@ public: // Mount and release physical media static void mount(); static void release(); + static bool isMounted() { return flag.mounted; } + static bool isSDCardMounted() { + return isMounted() && isSDCardSelected(); + } + static bool isFlashDriveMounted() { + return isMounted() && isFlashDriveSelected(); + } + // Handle media insert/remove (including mounting on boot-up) static void manage_media(); @@ -410,10 +419,17 @@ private: class CardReader { public: - static constexpr bool isFlashDriveInserted() { return false; } + static constexpr bool isSDCardSelected() { return false; } + static constexpr bool isFlashDriveSelected() { return false; } + static constexpr bool isSDCardInserted() { return false; } + static constexpr bool isFlashDriveInserted() { return false; } static constexpr bool isInserted() { return false; } + + static constexpr bool isSDCardMounted() { return false; } + static constexpr bool isFlashDriveMounted() { return false; } static constexpr bool isMounted() { return false; } + static constexpr bool isStillPrinting() { return false; } static constexpr bool isStillFetching() { return false; } static constexpr bool isPaused() { return false; } diff --git a/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp b/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp index 2ae38c64c0..e6e6f30ae6 100644 --- a/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp +++ b/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp @@ -30,7 +30,7 @@ * 3 - perform block range checking * 4 - print each block access */ -#define USB_DEBUG 1 +#define USB_DEBUG TERN(MARLIN_DEV_MODE, 1, 0) #define USB_STARTUP_DELAY 0 // uncomment to get 'printf' console debugging. NOT FOR UNO!