🧑‍💻 Specific SD / FD methods

This commit is contained in:
Scott Lahteine 2025-04-22 22:30:14 -05:00
parent 5c0e8d594d
commit 06ef78dd19
13 changed files with 57 additions and 19 deletions

View file

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

View file

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

View file

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

View file

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

View file

@ -464,6 +464,9 @@ namespace ExtUI {
* Use these to operate on files
*/
bool isMediaMounted();
bool isMediaMountedSD();
bool isMediaMountedUSB();
bool isPrintingFromMediaPaused();
bool isPrintingFromMedia();
bool isPrinting();

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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