|
|
@ -472,50 +472,55 @@ void CardReader::mount() { |
|
|
|
#endif |
|
|
|
|
|
|
|
void CardReader::manage_media() { |
|
|
|
static uint8_t prev_stat = 2; // First call, no prior state
|
|
|
|
static uint8_t prev_stat = 2; // First call, no prior state
|
|
|
|
uint8_t stat = uint8_t(IS_SD_INSERTED()); |
|
|
|
if (stat == prev_stat) return; |
|
|
|
|
|
|
|
DEBUG_ECHOLNPGM("SD: Status changed from ", prev_stat, " to ", stat); |
|
|
|
DEBUG_SECTION(mm, "CardReader::manage_media", true); |
|
|
|
DEBUG_ECHOLNPGM("SD Status ", prev_stat, " -> ", stat); |
|
|
|
|
|
|
|
flag.workDirIsRoot = true; // Return to root on mount/release
|
|
|
|
flag.workDirIsRoot = true; // Return to root on mount/release
|
|
|
|
|
|
|
|
if (ui.detected()) { |
|
|
|
if (!ui.detected()) { |
|
|
|
DEBUG_ECHOLNPGM("SD: No UI Detected."); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
uint8_t old_stat = prev_stat; |
|
|
|
prev_stat = stat; // Change now to prevent re-entry
|
|
|
|
uint8_t old_stat = prev_stat; |
|
|
|
prev_stat = stat; // Change now to prevent re-entry
|
|
|
|
|
|
|
|
if (stat) { // Media Inserted
|
|
|
|
safe_delay(500); // Some boards need a delay to get settled
|
|
|
|
if (TERN1(SD_IGNORE_AT_STARTUP, old_stat != 2)) |
|
|
|
mount(); // Try to mount the media
|
|
|
|
#if MB(FYSETC_CHEETAH, FYSETC_CHEETAH_V12, FYSETC_AIO_II) |
|
|
|
reset_stepper_drivers(); // Workaround for Cheetah bug
|
|
|
|
#endif |
|
|
|
if (!isMounted()) stat = 0; // Not mounted?
|
|
|
|
} |
|
|
|
else { |
|
|
|
#if PIN_EXISTS(SD_DETECT) |
|
|
|
release(); // Card is released
|
|
|
|
#endif |
|
|
|
} |
|
|
|
if (stat) { // Media Inserted
|
|
|
|
safe_delay(500); // Some boards need a delay to get settled
|
|
|
|
|
|
|
|
ui.media_changed(old_stat, stat); // Update the UI
|
|
|
|
// Try to mount the media (only later with SD_IGNORE_AT_STARTUP)
|
|
|
|
if (TERN1(SD_IGNORE_AT_STARTUP, old_stat != 2)) mount(); |
|
|
|
if (!isMounted()) stat = 0; // Not mounted?
|
|
|
|
|
|
|
|
if (stat) { |
|
|
|
TERN_(SDCARD_EEPROM_EMULATION, settings.first_load()); |
|
|
|
if (old_stat == 2) { // First mount?
|
|
|
|
DEBUG_ECHOLNPGM("First mount."); |
|
|
|
#if ENABLED(POWER_LOSS_RECOVERY) |
|
|
|
recovery.check(); // Check for PLR file. (If not there then call autofile_begin)
|
|
|
|
#elif DISABLED(NO_SD_AUTOSTART) |
|
|
|
autofile_begin(); // Look for auto0.g on the next loop
|
|
|
|
#endif |
|
|
|
} |
|
|
|
} |
|
|
|
TERN_(RESET_STEPPERS_ON_MEDIA_INSERT, reset_stepper_drivers()); // Workaround for Cheetah bug
|
|
|
|
} |
|
|
|
else |
|
|
|
DEBUG_ECHOLNPGM("SD: No UI Detected."); |
|
|
|
else { |
|
|
|
#if PIN_EXISTS(SD_DETECT) |
|
|
|
release(); // Card is released
|
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
ui.media_changed(old_stat, stat); // Update the UI
|
|
|
|
|
|
|
|
if (!stat) return; // Exit if no media is present
|
|
|
|
|
|
|
|
TERN_(SDCARD_EEPROM_EMULATION, settings.first_load()); |
|
|
|
|
|
|
|
if (old_stat != 2) return; // First mount?
|
|
|
|
|
|
|
|
DEBUG_ECHOLNPGM("First mount."); |
|
|
|
|
|
|
|
bool do_auto = true; UNUSED(do_auto); |
|
|
|
|
|
|
|
// Check for PLR file.
|
|
|
|
TERN_(POWER_LOSS_RECOVERY, if (recovery.check()) do_auto = false); |
|
|
|
|
|
|
|
// Look for auto0.g on the next idle()
|
|
|
|
IF_DISABLED(NO_SD_AUTOSTART, if (do_auto) autofile_begin()); |
|
|
|
} |
|
|
|
|
|
|
|
/**
|
|
|
|