From 5c0e8d594d343d4e38f6d2254916077e0f3a3c7d Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 21 Apr 2025 20:00:49 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Stub=20Card?= =?UTF-8?q?Reader,=20proper=20methods?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/DUE/usb/sd_mmc_spi_mem.cpp | 2 +- Marlin/src/HAL/LPC1768/HAL.cpp | 4 +- Marlin/src/HAL/STM32F1/HAL.cpp | 2 +- Marlin/src/MarlinCore.cpp | 12 +++-- Marlin/src/feature/mmu3/mmu3.cpp | 2 +- Marlin/src/feature/pause.cpp | 2 +- Marlin/src/feature/powerloss.cpp | 8 ++-- Marlin/src/gcode/feature/pause/M125.cpp | 2 +- Marlin/src/gcode/gcode.cpp | 2 +- Marlin/src/gcode/lcd/M73.cpp | 2 +- Marlin/src/gcode/queue.cpp | 2 +- Marlin/src/gcode/sd/M21_M22.cpp | 2 +- Marlin/src/gcode/sd/M24_M25.cpp | 2 +- Marlin/src/gcode/sd/M32.cpp | 2 +- Marlin/src/gcode/sd/M524.cpp | 2 +- Marlin/src/gcode/stats/M75-M78.cpp | 2 +- Marlin/src/lcd/HD44780/marlinui_HD44780.cpp | 2 +- Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp | 2 +- Marlin/src/lcd/e3v2/jyersui/dwin.cpp | 2 +- Marlin/src/lcd/e3v2/proui/dwin.cpp | 6 +-- .../generic/about_screen.cpp | 6 +-- Marlin/src/lcd/extui/mks_ui/draw_ui.cpp | 13 ----- Marlin/src/lcd/extui/mks_ui/draw_ui.h | 1 - .../lcd/extui/mks_ui/printer_operation.cpp | 2 +- .../extui/mks_ui/tft_lvgl_configuration.cpp | 2 +- Marlin/src/lcd/extui/ui_api.cpp | 7 +-- Marlin/src/lcd/marlinui.cpp | 6 +-- Marlin/src/lcd/sovol_rts/sovol_rts.cpp | 10 ++-- Marlin/src/module/temperature.cpp | 2 +- Marlin/src/sd/cardreader.cpp | 32 ++++++------- Marlin/src/sd/cardreader.h | 48 ++++++++----------- 31 files changed, 85 insertions(+), 106 deletions(-) diff --git a/Marlin/src/HAL/DUE/usb/sd_mmc_spi_mem.cpp b/Marlin/src/HAL/DUE/usb/sd_mmc_spi_mem.cpp index cf6739c5bd..ff6ff4859b 100644 --- a/Marlin/src/HAL/DUE/usb/sd_mmc_spi_mem.cpp +++ b/Marlin/src/HAL/DUE/usb/sd_mmc_spi_mem.cpp @@ -19,7 +19,7 @@ void sd_mmc_spi_mem_init() { } inline bool media_ready() { - return IS_SD_MOUNTED() && IS_SD_INSERTED() && !IS_SD_FILE_OPEN() && !IS_SD_PRINTING(); + return card.isMounted() && card.isInserted() && !card.isFileOpen() && !card.isStillPrinting(); } bool sd_mmc_spi_unload(bool) { return true; } diff --git a/Marlin/src/HAL/LPC1768/HAL.cpp b/Marlin/src/HAL/LPC1768/HAL.cpp index 55658acb76..6e4357777d 100644 --- a/Marlin/src/HAL/LPC1768/HAL.cpp +++ b/Marlin/src/HAL/LPC1768/HAL.cpp @@ -175,11 +175,11 @@ void MarlinHAL::idletask() { #if HAS_SHARED_MEDIA // If Marlin is using the SD card we need to lock it to prevent access from // a PC via USB. - // Other HALs use IS_SD_PRINTING() and IS_SD_FILE_OPEN() to check for access but + // Other HALs use card.isStillPrinting() and card.isFileOpen() to check for access but // this will not reliably detect delete operations. To be safe we will lock // the disk if Marlin has it mounted. Unfortunately there is currently no way // to unmount the disk from the LCD menu. - // if (IS_SD_PRINTING() || IS_SD_FILE_OPEN()) + // if (card.isStillPrinting() || card.isFileOpen()) if (card.isMounted()) MSC_Aquire_Lock(); else diff --git a/Marlin/src/HAL/STM32F1/HAL.cpp b/Marlin/src/HAL/STM32F1/HAL.cpp index e6cbb9fc06..d5f4ade79d 100644 --- a/Marlin/src/HAL/STM32F1/HAL.cpp +++ b/Marlin/src/HAL/STM32F1/HAL.cpp @@ -264,7 +264,7 @@ void MarlinHAL::idletask() { /** * When Marlin is using the SD card it should be locked to prevent it being * accessed from a PC over USB. - * Other HALs use (IS_SD_PRINTING() || IS_SD_FILE_OPEN()) to check for access + * Other HALs use (card.isStillPrinting() || card.isFileOpen()) to check for access * but this won't reliably detect other file operations. To be safe we just lock * the drive whenever Marlin has it mounted. LCDs should include an Unmount * command so drives can be released as needed. diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index f2b2589ee6..05355ddccb 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -269,6 +269,10 @@ #include "feature/rs485.h" #endif +#if !HAS_MEDIA + CardReader card; // Stub instance with "no media" methods +#endif + PGMSTR(M112_KILL_STR, "M112 Shutdown"); #if ENABLED(CONFIGURABLE_MACHINE_NAME) @@ -339,7 +343,7 @@ bool printer_busy() { /** * A Print Job exists when the timer is running or SD is printing */ -bool printJobOngoing() { return print_job_timer.isRunning() || IS_SD_PRINTING(); } +bool printJobOngoing() { return print_job_timer.isRunning() || card.isStillPrinting(); } /** * Printing is active when a job is underway but not paused @@ -350,7 +354,7 @@ bool printingIsActive() { return !did_pause_print && printJobOngoing(); } * Printing is paused according to SD or host indicators */ bool printingIsPaused() { - return did_pause_print || print_job_timer.isPaused() || IS_SD_PAUSED(); + return did_pause_print || print_job_timer.isPaused() || card.isPaused(); } void startOrResumeJob() { @@ -509,7 +513,7 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) { // Handle a standalone HOME button constexpr millis_t HOME_DEBOUNCE_DELAY = 1000UL; static millis_t next_home_key_ms; // = 0 - if (!IS_SD_PRINTING() && !READ(HOME_PIN)) { // HOME_PIN goes LOW when pressed + if (!card.isStillPrinting() && !READ(HOME_PIN)) { // HOME_PIN goes LOW when pressed if (ELAPSED(ms, next_home_key_ms)) { next_home_key_ms = ms + HOME_DEBOUNCE_DELAY; LCD_MESSAGE(MSG_AUTO_HOME); @@ -804,7 +808,7 @@ void idle(const bool no_stepper_sleep/*=false*/) { // Handle Power-Loss Recovery #if ENABLED(POWER_LOSS_RECOVERY) && PIN_EXISTS(POWER_LOSS) - if (IS_SD_PRINTING()) recovery.outage(); + if (card.isStillPrinting()) recovery.outage(); #endif // Run StallGuard endstop checks diff --git a/Marlin/src/feature/mmu3/mmu3.cpp b/Marlin/src/feature/mmu3/mmu3.cpp index b4d4c76afc..27a1dc05c9 100644 --- a/Marlin/src/feature/mmu3/mmu3.cpp +++ b/Marlin/src/feature/mmu3/mmu3.cpp @@ -456,7 +456,7 @@ namespace MMU3 { if (slot != extruder) { if ( //findaDetectsFilament() - //!IS_SD_PRINTING() && !usb_timer.running() + //!card.isStillPrinting() && !usb_timer.running() !marlin_printingIsActive() ) { // If Tcodes are used manually through the serial diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp index fbb78ccbf9..bd86133771 100644 --- a/Marlin/src/feature/pause.cpp +++ b/Marlin/src/feature/pause.cpp @@ -439,7 +439,7 @@ bool pause_print(const_float_t retract, const xyz_pos_t &park_point, const bool // Pause the print job and timer #if HAS_MEDIA - const bool was_sd_printing = IS_SD_PRINTING(); + const bool was_sd_printing = card.isStillPrinting(); if (was_sd_printing) { card.pauseSDPrint(); ++did_pause_print; // Indicate SD pause also diff --git a/Marlin/src/feature/powerloss.cpp b/Marlin/src/feature/powerloss.cpp index 3cd96e1155..27f3e44ca5 100644 --- a/Marlin/src/feature/powerloss.cpp +++ b/Marlin/src/feature/powerloss.cpp @@ -117,7 +117,7 @@ void PrintJobRecovery::enable(const bool onoff) { void PrintJobRecovery::changed() { if (!enabled) purge(); - else if (IS_SD_PRINTING()) + else if (card.isStillPrinting()) save(true); TERN_(EXTENSIBLE_UI, ExtUI::onSetPowerLoss(enabled)); } @@ -174,7 +174,7 @@ void PrintJobRecovery::prepare() { */ void PrintJobRecovery::save(const bool force/*=false*/, const float zraise/*=POWER_LOSS_ZRAISE*/, const bool raised/*=false*/) { - // We don't check IS_SD_PRINTING here so a save may occur during a pause + // We don't check isStillPrinting here so a save may occur during a pause #if SAVE_INFO_INTERVAL_MS > 0 static millis_t next_save_ms; // = 0 @@ -202,7 +202,7 @@ void PrintJobRecovery::save(const bool force/*=false*/, const float zraise/*=POW // Set Head and Foot to matching non-zero values if (!++info.valid_head) ++info.valid_head; // non-zero in sequence - //if (!IS_SD_PRINTING()) info.valid_head = 0; + //if (!card.isStillPrinting()) info.valid_head = 0; info.valid_foot = info.valid_head; // Machine state @@ -326,7 +326,7 @@ void PrintJobRecovery::save(const bool force/*=false*/, const float zraise/*=POW // Save the current position, distance that Z was (or should be) raised, // and a flag whether the raise was already done here. - if (IS_SD_PRINTING()) save(true, zraise, ENABLED(BACKUP_POWER_SUPPLY)); + if (card.isStillPrinting()) save(true, zraise, ENABLED(BACKUP_POWER_SUPPLY)); // Tell the LCD about the outage, even though it is about to die TERN_(EXTENSIBLE_UI, ExtUI::onPowerLoss()); diff --git a/Marlin/src/gcode/feature/pause/M125.cpp b/Marlin/src/gcode/feature/pause/M125.cpp index 71fa7c7b4d..75611760f1 100644 --- a/Marlin/src/gcode/feature/pause/M125.cpp +++ b/Marlin/src/gcode/feature/pause/M125.cpp @@ -88,7 +88,7 @@ void GcodeSuite::M125() { park_point += hotend_offset[active_extruder]; #endif - const bool sd_printing = IS_SD_PRINTING(); + const bool sd_printing = card.isStillPrinting(); ui.pause_show_message(PAUSE_MESSAGE_PARKING, PAUSE_MODE_PAUSE_PRINT); diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index 6dfc54d99e..469ab134d3 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -196,7 +196,7 @@ void GcodeSuite::get_destination_from_command() { #if ENABLED(POWER_LOSS_RECOVERY) && !PIN_EXISTS(POWER_LOSS) // Only update power loss recovery on moves with E - if (recovery.enabled && IS_SD_PRINTING() && seen.e && (seen.x || seen.y)) + if (recovery.enabled && card.isStillPrinting() && seen.e && (seen.x || seen.y)) recovery.save(); #endif diff --git a/Marlin/src/gcode/lcd/M73.cpp b/Marlin/src/gcode/lcd/M73.cpp index 6f74476240..5d9b3bd107 100644 --- a/Marlin/src/gcode/lcd/M73.cpp +++ b/Marlin/src/gcode/lcd/M73.cpp @@ -62,7 +62,7 @@ void GcodeSuite::M73() { #endif #if ENABLED(M73_REPORT) - if (TERN1(M73_REPORT_SD_ONLY, IS_SD_PRINTING())) { + if (TERN1(M73_REPORT_SD_ONLY, card.isStillPrinting())) { SERIAL_ECHO_START(); SERIAL_ECHOPGM(" M73"); #if ENABLED(SET_PROGRESS_PERCENT) diff --git a/Marlin/src/gcode/queue.cpp b/Marlin/src/gcode/queue.cpp index 657bfab08b..7fa55b70e8 100644 --- a/Marlin/src/gcode/queue.cpp +++ b/Marlin/src/gcode/queue.cpp @@ -570,7 +570,7 @@ void GCodeQueue::get_serial_commands() { static uint8_t sd_input_state = PS_NORMAL; // Get commands if there are more in the file - if (!IS_SD_FETCHING()) return; + if (!card.isStillFetching()) return; int sd_count = 0; while (!ring_buffer.full() && !card.eof()) { diff --git a/Marlin/src/gcode/sd/M21_M22.cpp b/Marlin/src/gcode/sd/M21_M22.cpp index 672dc80f00..eb1594fbaf 100644 --- a/Marlin/src/gcode/sd/M21_M22.cpp +++ b/Marlin/src/gcode/sd/M21_M22.cpp @@ -49,7 +49,7 @@ void GcodeSuite::M21() { * M22: Release SD Card */ void GcodeSuite::M22() { - if (!IS_SD_PRINTING()) card.release(); + if (!card.isStillPrinting()) card.release(); } #endif // HAS_MEDIA diff --git a/Marlin/src/gcode/sd/M24_M25.cpp b/Marlin/src/gcode/sd/M24_M25.cpp index 7bf1ab74d5..f4ad7c7dab 100644 --- a/Marlin/src/gcode/sd/M24_M25.cpp +++ b/Marlin/src/gcode/sd/M24_M25.cpp @@ -101,7 +101,7 @@ void GcodeSuite::M25() { #else // Set initial pause flag to prevent more commands from landing in the queue while we try to pause - if (IS_SD_PRINTING()) card.pauseSDPrint(); + if (card.isStillPrinting()) card.pauseSDPrint(); #if ENABLED(POWER_LOSS_RECOVERY) && DISABLED(DGUS_LCD_UI_MKS) if (recovery.enabled) recovery.save(true); diff --git a/Marlin/src/gcode/sd/M32.cpp b/Marlin/src/gcode/sd/M32.cpp index 3baa552e6e..552a75cdf4 100644 --- a/Marlin/src/gcode/sd/M32.cpp +++ b/Marlin/src/gcode/sd/M32.cpp @@ -40,7 +40,7 @@ * M32 S60 !PATH/TO/FILE.GCO# ; Start FILE.GCO at byte 60 */ void GcodeSuite::M32() { - if (IS_SD_PRINTING()) planner.synchronize(); + if (card.isStillPrinting()) planner.synchronize(); if (card.isMounted()) { const uint8_t call_procedure = parser.boolval('P'); diff --git a/Marlin/src/gcode/sd/M524.cpp b/Marlin/src/gcode/sd/M524.cpp index 61185b7e0b..d72aa0ac35 100644 --- a/Marlin/src/gcode/sd/M524.cpp +++ b/Marlin/src/gcode/sd/M524.cpp @@ -42,7 +42,7 @@ void GcodeSuite::M524() { #else - if (IS_SD_PRINTING()) + if (card.isStillPrinting()) card.abortFilePrintSoon(); else if (card.isMounted()) card.closefile(); diff --git a/Marlin/src/gcode/stats/M75-M78.cpp b/Marlin/src/gcode/stats/M75-M78.cpp index 8ab94577ef..4e1b1aff9d 100644 --- a/Marlin/src/gcode/stats/M75-M78.cpp +++ b/Marlin/src/gcode/stats/M75-M78.cpp @@ -43,7 +43,7 @@ void GcodeSuite::M75() { startOrResumeJob(); // ... ExtUI::onPrintTimerStarted() #if ENABLED(DWIN_LCD_PROUI) // TODO: Remove if M75 is never used - if (!IS_SD_PRINTING()) dwinPrintHeader(parser.has_string() ? parser.string_arg : GET_TEXT(MSG_HOST_START_PRINT)); + if (!card.isStillPrinting()) dwinPrintHeader(parser.has_string() ? parser.string_arg : GET_TEXT(MSG_HOST_START_PRINT)); #endif } diff --git a/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp b/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp index a0145d6165..265f62ab88 100644 --- a/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp +++ b/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp @@ -841,7 +841,7 @@ void MarlinUI::draw_status_message(const bool blink) { const uint8_t progress = get_progress_percent(); if (progress) { lcd_moveto(pc, pr); - lcd_put_u8str(F(TERN(IS_SD_PRINTING, "SD", "P:"))); + lcd_put_u8str(card.isStillPrinting() ? F("SD") : F("P:")); lcd_put_u8str(TERN(PRINT_PROGRESS_SHOW_DECIMALS, permyriadtostr4(get_progress_permyriad()), ui8tostr3rj(progress))); lcd_put_u8str(F("%")); } diff --git a/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp b/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp index 6766820cfd..4ac012ba93 100644 --- a/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp +++ b/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp @@ -603,7 +603,7 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const const uint8_t progress = ui.get_progress_percent(); if (progress) { lcd_moveto(0, 2); - lcd_put_u8str(F(TERN(IS_SD_PRINTING, "SD", "P:"))); + lcd_put_u8str(card.isStillPrinting() ? F("SD") : F("P:")); lcd.print(TERN(PRINT_PROGRESS_SHOW_DECIMALS, permyriadtostr4(ui.get_progress_permyriad()), ui8tostr3rj(progress))); lcd.write('%'); } diff --git a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp index d582b96ed7..aa087cefc4 100644 --- a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp @@ -4653,7 +4653,7 @@ void JyersDWIN::popupControl() { #if ENABLED(PARK_HEAD_ON_PAUSE) popupHandler(Popup_Home, true); #if HAS_MEDIA - if (IS_SD_PRINTING()) card.pauseSDPrint(); + if (card.isStillPrinting()) card.pauseSDPrint(); #endif planner.synchronize(); queue.inject(F("M125")); diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 7428a4b254..b1df0234b0 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -294,9 +294,9 @@ MenuItem *fanSpeedItem = nullptr; MenuItem *mMeshMoveZItem = nullptr; MenuItem *editZValueItem = nullptr; -bool isPrinting() { return printingIsActive() || printingIsPaused(); } -bool sdPrinting() { return isPrinting() && IS_SD_FILE_OPEN(); } -bool hostPrinting() { return isPrinting() && !IS_SD_FILE_OPEN(); } +bool isPrinting() { return printingIsActive() || printingIsPaused(); } +bool sdPrinting() { return isPrinting() && card.isStillPrinting(); } +bool hostPrinting() { return isPrinting() && !card.isStillPrinting(); } #define DWIN_LANGUAGE_EEPROM_ADDRESS 0x01 // Between 0x01 and 0x63 (EEPROM_OFFSET-1) // BL24CXX::check() uses 0x00 diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/about_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/about_screen.cpp index eac6e646e6..366151959b 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/about_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/about_screen.cpp @@ -62,11 +62,11 @@ void AboutScreen::onRedraw(draw_mode_t) { #ifdef LULZBOT_LCD_MACHINE_NAME cmd.tag(3); draw_text_box(cmd, BTN_POS(1,7), BTN_SIZE(4,3), F( - "Firmware:" + "Firmware:" ), OPT_CENTER, font_xlarge); draw_text_box(cmd, BTN_POS(1,10), BTN_SIZE(4,2), F( - "" LULZBOT_M115_EXTRUDER_TYPE "" + "" LULZBOT_M115_EXTRUDER_TYPE "" ), OPT_CENTER, font_xlarge); #endif @@ -77,7 +77,7 @@ void AboutScreen::onRedraw(draw_mode_t) { #endif draw_text_box(cmd, BTN_POS(1,19), BTN_SIZE(4,3), F( - "Version:" + "Version:" ), OPT_CENTER, font_xlarge); draw_text_box(cmd, BTN_POS(1,22), BTN_SIZE(4,2), F( diff --git a/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp b/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp index 92cc17f8cc..2e66db2c86 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp @@ -1332,19 +1332,6 @@ void lv_screen_menu_item_onoff_update(lv_obj_t *btn, const bool curValue) { lv_label_set_text((lv_obj_t*)btn->child_ll.head, curValue ? machine_menu.enable : machine_menu.disable); } -#if HAS_MEDIA - - void sd_detection() { - static bool last_sd_status; - const bool sd_status = IS_SD_INSERTED(); - if (sd_status != last_sd_status) { - last_sd_status = sd_status; - if (sd_status) card.mount(); else card.release(); - } - } - -#endif - void lv_ex_line(lv_obj_t *line, lv_point_t *points) { // Copy the previous line and apply the new style lv_line_set_points(line, points, 2); // Set the points diff --git a/Marlin/src/lcd/extui/mks_ui/draw_ui.h b/Marlin/src/lcd/extui/mks_ui/draw_ui.h index 10b8dcee28..33a0764d2c 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_ui.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_ui.h @@ -468,7 +468,6 @@ void GUI_RefreshPage(); void clear_cur_ui(); void draw_return_ui(); void goto_previous_ui(); -void sd_detection(); void gCfg_to_spiFlah(); void print_time_count(); diff --git a/Marlin/src/lcd/extui/mks_ui/printer_operation.cpp b/Marlin/src/lcd/extui/mks_ui/printer_operation.cpp index dc47cdb357..9999aa4843 100644 --- a/Marlin/src/lcd/extui/mks_ui/printer_operation.cpp +++ b/Marlin/src/lcd/extui/mks_ui/printer_operation.cpp @@ -88,7 +88,7 @@ void printer_state_polling() { } if (uiCfg.print_state == RESUMING) { - if (IS_SD_PAUSED()) { + if (card.isPaused()) { if (gCfgItems.pausePosX != (float)-1 && gCfgItems.pausePosY != (float)-1) { sprintf_P(public_buf_m, PSTR("G1 X%s Y%s"), dtostrf(uiCfg.current_x_position_bak, 1, 1, str_1), dtostrf(uiCfg.current_y_position_bak, 1, 1, str_1)); gcode.process_subcommands_now(public_buf_m); diff --git a/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp b/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp index e138449181..729d8bc4b2 100644 --- a/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp +++ b/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp @@ -136,7 +136,7 @@ void tft_lvgl_init() { #if HAS_USB_FLASH_DRIVE #if HAS_MULTI_VOLUME && !HAS_SD_HOST_DRIVE - if (IS_SD_INSERTED()) + if (card.isSDCardInserted()) card.selectMediaSDCard(); else card.selectMediaFlashDrive(); diff --git a/Marlin/src/lcd/extui/ui_api.cpp b/Marlin/src/lcd/extui/ui_api.cpp index b88df6ee9d..7763bac05a 100644 --- a/Marlin/src/lcd/extui/ui_api.cpp +++ b/Marlin/src/lcd/extui/ui_api.cpp @@ -1064,11 +1064,8 @@ namespace ExtUI { TERN(HAS_MEDIA, card.openAndPrintFile(filename), UNUSED(filename)); } - bool isPrintingFromMediaPaused() { - return IS_SD_PAUSED(); - } - - bool isPrintingFromMedia() { return IS_SD_PRINTING() || IS_SD_PAUSED(); } + bool isPrintingFromMedia() { return card.isStillPrinting() || card.isPaused(); } + bool isPrintingFromMediaPaused() { return card.isPaused(); } bool isPrinting() { return commandsInQueue() || isPrintingFromMedia() || printJobOngoing() || printingIsPaused(); diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index 1726c67930..8b7e64dda8 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -1540,7 +1540,7 @@ uint8_t expand_u8str_P(char * const outstr, PGM_P const ptpl, const int8_t ind, if (printingIsPaused()) msg = GET_TEXT_F(MSG_PRINT_PAUSED); #if HAS_MEDIA - else if (IS_SD_PRINTING()) + else if (card.isStillPrinting()) return set_status_no_expire(card.longest_filename()); #endif else if (print_job_timer.isRunning()) @@ -1743,7 +1743,7 @@ uint8_t expand_u8str_P(char * const outstr, PGM_P const ptpl, const int8_t ind, void MarlinUI::abort_print() { #if HAS_MEDIA wait_for_heatup = wait_for_user = false; - if (IS_SD_PRINTING()) + if (card.isStillPrinting()) card.abortFilePrintSoon(); else if (card.isMounted()) card.closefile(); @@ -1810,7 +1810,7 @@ uint8_t expand_u8str_P(char * const outstr, PGM_P const ptpl, const int8_t ind, void MarlinUI::resume_print() { reset_status(); TERN_(PARK_HEAD_ON_PAUSE, wait_for_heatup = wait_for_user = false); - TERN_(HAS_MEDIA, if (IS_SD_PAUSED()) queue.inject_P(M24_STR)); + TERN_(HAS_MEDIA, if (card.isPaused()) queue.inject_P(M24_STR)); #ifdef ACTION_ON_RESUME hostui.resume(); #endif diff --git a/Marlin/src/lcd/sovol_rts/sovol_rts.cpp b/Marlin/src/lcd/sovol_rts/sovol_rts.cpp index dcd5d9b384..bea95be96a 100644 --- a/Marlin/src/lcd/sovol_rts/sovol_rts.cpp +++ b/Marlin/src/lcd/sovol_rts/sovol_rts.cpp @@ -171,7 +171,7 @@ void RTS::sdCardInit() { // Clear the file name displayed in the print interface sendData(0, PRINT_FILE_TEXT_VP + j); } - lcd_sd_status = IS_SD_INSERTED(); + lcd_sd_status = card.isInserted(); } else { // Clean all filename Icons @@ -186,7 +186,7 @@ bool RTS::sdDetected() { static bool state = false, stable = false, was_present = false; static millis_t stable_ms = 0; - const bool present = IS_SD_INSERTED(); + const bool present = card.isInserted(); if (present != was_present) stable = false; else if (!stable) { @@ -1485,7 +1485,7 @@ void RTS::handleData() { sendData(cardRec.display_filename[cardRec.recordcount], PRINT_FILE_TEXT_VP); // Represents to update file list - if (update_sd && lcd_sd_status && IS_SD_INSERTED()) { + if (update_sd && lcd_sd_status && card.isInserted()) { for (uint16_t i = 0; i < cardRec.Filesum; i++) { delay(3); sendData(cardRec.display_filename[i], cardRec.addr[i]); @@ -1654,8 +1654,8 @@ void RTS_Update() { // Check the status of card rts.sdCardUpdate(); - sd_printing = IS_SD_PRINTING(); - card_insert_st = IS_SD_INSERTED(); + sd_printing = card.isStillPrinting(); + card_insert_st = card.isInserted(); if (!card_insert_st && sd_printing) { rts.gotoPage(ID_MediaFail_L, ID_MediaFail_D); diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 5c9f122067..0ef0a2f961 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -4772,7 +4772,7 @@ void Temperature::isr() { dwin_heat_time = elapsed.value; #elif ENABLED(SOVOL_SV06_RTS) update_time_value = RTS_UPDATE_VALUE; - if (IS_SD_PRINTING()) rts.refreshTime(); + if (card.isStillPrinting()) rts.refreshTime(); rts.start_print_flag = false; #else ui.reset_status(); diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp index cd20f921db..9b0a37913a 100644 --- a/Marlin/src/sd/cardreader.cpp +++ b/Marlin/src/sd/cardreader.cpp @@ -146,7 +146,7 @@ int16_t CardReader::nrItems = -1; DiskIODriver* CardReader::driver = nullptr; MarlinVolume CardReader::volume; -MediaFile CardReader::file; +MediaFile CardReader::myfile; #if HAS_MEDIA_SUBCALLS uint8_t CardReader::file_subcall_ctr; @@ -463,9 +463,9 @@ void CardReader::ls(const uint8_t lsflags/*=0*/) { // Echo the DOS 8.3 filename (and long filename, if any) // void CardReader::printSelectedFilename() { - if (file.isOpen()) { + if (myfile.isOpen()) { char dosFilename[FILENAME_LENGTH]; - file.getDosName(dosFilename); + myfile.getDosName(dosFilename); SERIAL_ECHO(dosFilename); #if ENABLED(LONG_FILENAME_HOST_SUPPORT) selectFileByName(dosFilename); @@ -517,7 +517,7 @@ void CardReader::mount() { */ void CardReader::manage_media() { static uint8_t prev_stat = 2; // At boot we don't know if media is present or not - uint8_t stat = uint8_t(IS_SD_INSERTED()); + uint8_t stat = uint8_t(isInserted()); if (stat == prev_stat) return; // Already checked and still no change? DEBUG_SECTION(cmm, "CardReader::manage_media()", true); @@ -626,7 +626,7 @@ void CardReader::endFilePrintNow(TERN_(SD_RESORT, const bool re_sort/*=false*/)) TERN_(ADVANCED_PAUSE_FEATURE, did_pause_print = 0); TERN_(DWIN_CREALITY_LCD, hmiFlag.print_finish = flag.sdprinting); flag.abort_sd_printing = false; - if (isFileOpen()) file.close(); + if (isFileOpen()) myfile.close(); TERN_(SD_RESORT, if (re_sort) presort()); } @@ -661,7 +661,7 @@ void CardReader::getAbsFilenameInCWD(char *dst) { appendAtom(workDirParents[i]); if (cnt < MAXPATHNAMELENGTH - (FILENAME_LENGTH) - 1) { // Leave room for filename and nul - appendAtom(file); + appendAtom(myfile); --dst; } *dst = '\0'; @@ -738,8 +738,8 @@ void CardReader::openFileRead(const char * const path, const uint8_t subcall_typ const char * const fname = diveToFile(true, diveDir, path); if (!fname) return openFailed(path); - if (file.open(diveDir, fname, O_READ)) { - filesize = file.fileSize(); + if (myfile.open(diveDir, fname, O_READ)) { + filesize = myfile.fileSize(); sdpos = 0; { // Don't remove this block, as the PORT_REDIRECT is a RAII @@ -778,7 +778,7 @@ void CardReader::openFileWrite(const char * const path) { if (!fname) return openFailed(path); #if DISABLED(SDCARD_READONLY) - if (file.open(diveDir, fname, O_CREAT | O_APPEND | O_WRITE | O_TRUNC)) { + if (myfile.open(diveDir, fname, O_CREAT | O_APPEND | O_WRITE | O_TRUNC)) { flag.saving = true; selectFileByName(fname); TERN_(EMERGENCY_PARSER, emergency_parser.disable()); @@ -832,7 +832,7 @@ void CardReader::removeFile(const char * const name) { #if ENABLED(SDCARD_READONLY) SERIAL_ECHOLNPGM("Deletion failed (read-only), File: ", fname, "."); #else - if (file.remove(itsDirPtr, fname)) { + if (myfile.remove(itsDirPtr, fname)) { SERIAL_ECHOLNPGM("File deleted:", fname); sdpos = 0; TERN_(SDCARD_SORT_ALPHA, presort()); @@ -866,7 +866,7 @@ void CardReader::write_command(char * const buf) { *npos = nullptr, *end = buf + strlen(buf) - 1; - file.writeError = false; + myfile.writeError = false; if ((npos = strchr(buf, 'N'))) { begin = strchr(npos, ' ') + 1; end = strchr(npos, '*') - 1; @@ -874,9 +874,9 @@ void CardReader::write_command(char * const buf) { end[1] = '\r'; end[2] = '\n'; end[3] = '\0'; - file.write(begin); + myfile.write(begin); - if (file.writeError) SERIAL_ERROR_MSG(STR_SD_ERR_WRITE_TO_FILE); + if (myfile.writeError) SERIAL_ERROR_MSG(STR_SD_ERR_WRITE_TO_FILE); } #if DISABLED(NO_SD_AUTOSTART) @@ -1001,8 +1001,8 @@ void CardReader::write_command(char * const buf) { // Close the working file. // void CardReader::closefile(const bool store_location/*=false*/) { - file.sync(); - file.close(); + myfile.sync(); + myfile.close(); flag.saving = flag.logging = false; sdpos = 0; @@ -1441,7 +1441,7 @@ int16_t CardReader::get_num_items() { // Return from procedure or close out the Print Job. // void CardReader::fileHasFinished() { - file.close(); + myfile.close(); #if HAS_MEDIA_SUBCALLS if (file_subcall_ctr > 0) { // Resume calling file after closing procedure diff --git a/Marlin/src/sd/cardreader.h b/Marlin/src/sd/cardreader.h index 7dfe7e344f..1fa23ececf 100644 --- a/Marlin/src/sd/cardreader.h +++ b/Marlin/src/sd/cardreader.h @@ -230,6 +230,7 @@ public: static void pauseSDPrint() { flag.sdprinting = false; } static bool isPrinting() { return flag.sdprinting; } static bool isStillPrinting() { return flag.sdprinting && !flag.abort_sd_printing; } + static bool isStillFetching() { return isStillPrinting() && !flag.sdprintdone; } static bool isPaused() { return isFileOpen() && !isPrinting(); } #if HAS_PRINT_PROGRESS_PERMYRIAD static uint16_t permyriadDone() { @@ -289,14 +290,14 @@ public: // Print File stats static uint32_t getFileSize() { return filesize; } static uint32_t getIndex() { return sdpos; } - static bool isFileOpen() { return isMounted() && file.isOpen(); } + static bool isFileOpen() { return isMounted() && myfile.isOpen(); } static bool eof() { return getIndex() >= getFileSize(); } // File data operations - static int16_t get() { int16_t out = (int16_t)file.read(); sdpos = file.curPosition(); return out; } - static int16_t read(void *buf, uint16_t nbyte) { return file.isOpen() ? file.read(buf, nbyte) : -1; } - static int16_t write(void *buf, uint16_t nbyte) { return file.isOpen() ? file.write(buf, nbyte) : -1; } - static void setIndex(const uint32_t index) { file.seekSet((sdpos = index)); } + static int16_t get() { int16_t out = (int16_t)myfile.read(); sdpos = myfile.curPosition(); return out; } + static int16_t read(void *buf, uint16_t nbyte) { return myfile.isOpen() ? myfile.read(buf, nbyte) : -1; } + static int16_t write(void *buf, uint16_t nbyte) { return myfile.isOpen() ? myfile.write(buf, nbyte) : -1; } + static void setIndex(const uint32_t index) { myfile.seekSet((sdpos = index)); } #if ENABLED(AUTO_REPORT_SD_STATUS) // @@ -313,7 +314,7 @@ private: static DiskIODriver *driver; static MarlinVolume volume; - static MediaFile file; + static MediaFile myfile; static uint32_t filesize, // Total size of the current file, in bytes sdpos; // Index most recently read (one behind file.getPos) @@ -405,31 +406,22 @@ private: #endif }; -#if HAS_USB_FLASH_DRIVE - #define IS_SD_INSERTED() DiskIODriver_USBFlash::isInserted() -#elif HAS_SD_DETECT - #define IS_SD_INSERTED() (READ(SD_DETECT_PIN) == SD_DETECT_STATE) -#else - // No card detect line? Assume the card is inserted. - #define IS_SD_INSERTED() true -#endif - -#define IS_SD_MOUNTED() card.isMounted() -#define IS_SD_PRINTING() card.isStillPrinting() -#define IS_SD_FETCHING() (!card.flag.sdprintdone && card.isStillPrinting()) -#define IS_SD_PAUSED() card.isPaused() -#define IS_SD_FILE_OPEN() card.isFileOpen() - -extern CardReader card; - #else // !HAS_MEDIA -#define IS_SD_MOUNTED() false -#define IS_SD_PRINTING() false -#define IS_SD_FETCHING() false -#define IS_SD_PAUSED() false -#define IS_SD_FILE_OPEN() false +class CardReader { +public: + static constexpr bool isFlashDriveInserted() { return false; } + static constexpr bool isSDCardInserted() { return false; } + static constexpr bool isInserted() { 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; } + static constexpr bool isFileOpen() { return false; } +}; #define LONG_FILENAME_LENGTH 0 #endif // !HAS_MEDIA + +extern CardReader card;