Merge remote-tracking branch 'upstream/bugfix-2.0.x' into pr/20379
This commit is contained in:
@@ -1197,6 +1197,7 @@
|
||||
|
||||
#define SD_MENU_CONFIRM_START // Confirm the selected SD file before printing
|
||||
|
||||
//#define NO_SD_AUTOSTART // Remove auto#.g file support completely to save some Flash, SRAM
|
||||
//#define MENU_ADDAUTOSTART // Add a menu option to run auto#.g files
|
||||
|
||||
//#define BROWSE_MEDIA_ON_INSERT // Open the file browser when media is inserted
|
||||
|
||||
@@ -212,3 +212,11 @@ inline void HAL_reboot() {} // reboot the board or restart the bootloader
|
||||
#ifndef strcmp_P
|
||||
#define strcmp_P(a, b) strcmp((a), (b))
|
||||
#endif
|
||||
|
||||
#ifndef strcat_P
|
||||
#define strcat_P(a, b) strcat((a), (b))
|
||||
#endif
|
||||
|
||||
#ifndef strcpy_P
|
||||
#define strcpy_P(a, b) strcpy((a), (b))
|
||||
#endif
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
#error "LCD_SERIAL_PORT must be -1 or from 1 to 3. Please update your configuration."
|
||||
#endif
|
||||
|
||||
#define SERIAL_GET_TX_BUFFER_FREE LCD_SERIAL.availableForWrite
|
||||
#define SERIAL_GET_TX_BUFFER_FREE() LCD_SERIAL.availableForWrite()
|
||||
#endif
|
||||
|
||||
// Set interrupt grouping for this MCU
|
||||
|
||||
@@ -77,6 +77,10 @@
|
||||
#include "lcd/dwin/e3v2/rotary_encoder.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(EXTENSIBLE_UI)
|
||||
#include "lcd/extui/ui_api.h"
|
||||
#endif
|
||||
|
||||
#if HAS_ETHERNET
|
||||
#include "feature/ethernet.h"
|
||||
#endif
|
||||
@@ -360,6 +364,8 @@ void enable_all_steppers() {
|
||||
ENABLE_AXIS_Y();
|
||||
ENABLE_AXIS_Z();
|
||||
enable_e_steppers();
|
||||
|
||||
TERN_(EXTENSIBLE_UI, ExtUI::onSteppersEnabled());
|
||||
}
|
||||
|
||||
void disable_e_steppers() {
|
||||
@@ -379,6 +385,8 @@ void disable_all_steppers() {
|
||||
DISABLE_AXIS_Y();
|
||||
DISABLE_AXIS_Z();
|
||||
disable_e_steppers();
|
||||
|
||||
TERN_(EXTENSIBLE_UI, ExtUI::onSteppersDisabled());
|
||||
}
|
||||
|
||||
#if ENABLED(G29_RETRY_AND_RECOVER)
|
||||
@@ -452,6 +460,7 @@ void startOrResumeJob() {
|
||||
#if ENABLED(SDSUPPORT)
|
||||
|
||||
inline void abortSDPrinting() {
|
||||
IF_DISABLED(NO_SD_AUTOSTART, card.autofile_cancel());
|
||||
card.endFilePrint(TERN_(SD_RESORT, true));
|
||||
queue.clear();
|
||||
quickstop_stepper();
|
||||
@@ -577,7 +586,7 @@ inline void manage_inactivity(const bool ignore_stepper_queue=false) {
|
||||
if (ELAPSED(ms, next_home_key_ms)) {
|
||||
next_home_key_ms = ms + HOME_DEBOUNCE_DELAY;
|
||||
LCD_MESSAGEPGM(MSG_AUTO_HOME);
|
||||
queue.enqueue_now_P(G28_STR);
|
||||
queue.inject_P(G28_STR);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -701,6 +710,10 @@ inline void manage_inactivity(const bool ignore_stepper_queue=false) {
|
||||
* - Handle Joystick jogging
|
||||
*/
|
||||
void idle(TERN_(ADVANCED_PAUSE_FEATURE, bool no_stepper_sleep/*=false*/)) {
|
||||
#if ENABLED(MARLIN_DEV_MODE)
|
||||
static uint8_t idle_depth = 0;
|
||||
if (++idle_depth > 5) SERIAL_ECHOLNPAIR("idle() call depth: ", int(idle_depth));
|
||||
#endif
|
||||
|
||||
// Core Marlin activities
|
||||
manage_inactivity(TERN_(ADVANCED_PAUSE_FEATURE, no_stepper_sleep));
|
||||
@@ -712,7 +725,7 @@ void idle(TERN_(ADVANCED_PAUSE_FEATURE, bool no_stepper_sleep/*=false*/)) {
|
||||
TERN_(MAX7219_DEBUG, max7219.idle_tasks());
|
||||
|
||||
// Return if setup() isn't completed
|
||||
if (marlin_state == MF_INITIALIZING) return;
|
||||
if (marlin_state == MF_INITIALIZING) goto IDLE_DONE;
|
||||
|
||||
// Handle filament runout sensors
|
||||
TERN_(HAS_FILAMENT_SENSOR, runout.run());
|
||||
@@ -756,6 +769,7 @@ void idle(TERN_(ADVANCED_PAUSE_FEATURE, bool no_stepper_sleep/*=false*/)) {
|
||||
|
||||
// Run i2c Position Encoders
|
||||
#if ENABLED(I2C_POSITION_ENCODERS)
|
||||
{
|
||||
static millis_t i2cpem_next_update_ms;
|
||||
if (planner.has_blocks_queued()) {
|
||||
const millis_t ms = millis();
|
||||
@@ -764,6 +778,7 @@ void idle(TERN_(ADVANCED_PAUSE_FEATURE, bool no_stepper_sleep/*=false*/)) {
|
||||
i2cpem_next_update_ms = ms + I2CPE_MIN_UPD_TIME_MS;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// Auto-report Temperatures / SD Status
|
||||
@@ -785,6 +800,10 @@ void idle(TERN_(ADVANCED_PAUSE_FEATURE, bool no_stepper_sleep/*=false*/)) {
|
||||
|
||||
// Update the LVGL interface
|
||||
TERN_(HAS_TFT_LVGL_UI, LV_TASK_HANDLER());
|
||||
|
||||
IDLE_DONE:
|
||||
TERN_(MARLIN_DEV_MODE, idle_depth--);
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1336,7 +1355,6 @@ void loop() {
|
||||
idle();
|
||||
|
||||
#if ENABLED(SDSUPPORT)
|
||||
card.checkautostart();
|
||||
if (card.flag.abort_sd_printing) abortSDPrinting();
|
||||
if (marlin_state == MF_SD_COMPLETE) finishSDPrinting();
|
||||
#endif
|
||||
|
||||
@@ -727,7 +727,7 @@
|
||||
* Probe all invalidated locations of the mesh that can be reached by the probe.
|
||||
* This attempts to fill in locations closest to the nozzle's start location first.
|
||||
*/
|
||||
void unified_bed_leveling::probe_entire_mesh(const xy_pos_t &pos, const bool do_ubl_mesh_map, const bool stow_probe, const bool do_furthest) {
|
||||
void unified_bed_leveling::probe_entire_mesh(const xy_pos_t &nearby, const bool do_ubl_mesh_map, const bool stow_probe, const bool do_furthest) {
|
||||
probe.deploy(); // Deploy before ui.capture() to allow for PAUSE_BEFORE_DEPLOY_STOW
|
||||
|
||||
TERN_(HAS_LCD_MENU, ui.capture());
|
||||
@@ -758,7 +758,7 @@
|
||||
|
||||
best = do_furthest
|
||||
? find_furthest_invalid_mesh_point()
|
||||
: find_closest_mesh_point_of_type(INVALID, pos, true);
|
||||
: find_closest_mesh_point_of_type(INVALID, nearby, true);
|
||||
|
||||
if (best.pos.x >= 0) { // mesh point found and is reachable by probe
|
||||
TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(best.pos, ExtUI::PROBE_START));
|
||||
@@ -788,8 +788,8 @@
|
||||
restore_ubl_active_state_and_leave();
|
||||
|
||||
do_blocking_move_to_xy(
|
||||
constrain(pos.x - probe.offset_xy.x, MESH_MIN_X, MESH_MAX_X),
|
||||
constrain(pos.y - probe.offset_xy.y, MESH_MIN_Y, MESH_MAX_Y)
|
||||
constrain(nearby.x - probe.offset_xy.x, MESH_MIN_X, MESH_MAX_X),
|
||||
constrain(nearby.y - probe.offset_xy.y, MESH_MIN_Y, MESH_MAX_Y)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1206,7 +1206,7 @@
|
||||
|
||||
found_a_NAN = true;
|
||||
|
||||
xy_int8_t near_pos { -1, -1 };
|
||||
xy_int8_t nearby { -1, -1 };
|
||||
float d1, d2 = 99999.9f;
|
||||
GRID_LOOP(k, l) {
|
||||
if (isnan(z_values[k][l])) continue;
|
||||
@@ -1221,7 +1221,7 @@
|
||||
|
||||
if (d1 < d2) { // Invalid mesh point (i,j) is closer to the defined point (k,l)
|
||||
d2 = d1;
|
||||
near_pos.set(i, j);
|
||||
nearby.set(i, j);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1229,8 +1229,8 @@
|
||||
// At this point d2 should have the near defined mesh point to invalid mesh point (i,j)
|
||||
//
|
||||
|
||||
if (found_a_real && near_pos.x >= 0 && d2 > farthest.distance) {
|
||||
farthest.pos = near_pos; // Found an invalid location farther from the defined mesh point
|
||||
if (found_a_real && nearby.x >= 0 && d2 > farthest.distance) {
|
||||
farthest.pos = nearby; // Found an invalid location farther from the defined mesh point
|
||||
farthest.distance = d2;
|
||||
}
|
||||
} // GRID_LOOP
|
||||
|
||||
@@ -152,7 +152,7 @@ class PrintJobRecovery {
|
||||
static void resume();
|
||||
static void purge();
|
||||
|
||||
static inline void cancel() { purge(); card.autostart_index = 0; }
|
||||
static inline void cancel() { purge(); IF_DISABLED(NO_SD_AUTOSTART, card.autofile_begin()); }
|
||||
|
||||
static void load();
|
||||
static void save(const bool force=ENABLED(SAVE_EACH_CMD_MODE), const float zraise=0);
|
||||
|
||||
@@ -177,6 +177,8 @@ G29_TYPE GcodeSuite::G29() {
|
||||
if (DISABLED(PROBE_MANUALLY) && seenQ) G29_RETURN(false);
|
||||
#endif
|
||||
|
||||
TERN_(EXTENSIBLE_UI, ExtUI::onMeshLevelingStart());
|
||||
|
||||
const bool seenA = TERN0(PROBE_MANUALLY, parser.seen('A')),
|
||||
no_action = seenA || seenQ,
|
||||
faux = ENABLED(DEBUG_LEVELING_FEATURE) && DISABLED(PROBE_MANUALLY) ? parser.boolval('C') : no_action;
|
||||
@@ -392,6 +394,11 @@ G29_TYPE GcodeSuite::G29() {
|
||||
|
||||
planner.synchronize();
|
||||
|
||||
#if ENABLED(AUTO_BED_LEVELING_3POINT)
|
||||
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> 3-point Leveling");
|
||||
points[0].z = points[1].z = points[2].z = 0; // Probe at 3 arbitrary points
|
||||
#endif
|
||||
|
||||
if (!faux) remember_feedrate_scaling_off();
|
||||
|
||||
// Disable auto bed leveling during G29.
|
||||
@@ -409,7 +416,6 @@ G29_TYPE GcodeSuite::G29() {
|
||||
#endif
|
||||
|
||||
#if ENABLED(AUTO_BED_LEVELING_BILINEAR)
|
||||
|
||||
if (TERN1(PROBE_MANUALLY, !no_action)
|
||||
&& (gridSpacing != bilinear_grid_spacing || probe_position_lf != bilinear_start)
|
||||
) {
|
||||
@@ -423,18 +429,8 @@ G29_TYPE GcodeSuite::G29() {
|
||||
// Can't re-enable (on error) until the new grid is written
|
||||
abl_should_enable = false;
|
||||
}
|
||||
|
||||
#endif // AUTO_BED_LEVELING_BILINEAR
|
||||
|
||||
#if ENABLED(AUTO_BED_LEVELING_3POINT)
|
||||
|
||||
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> 3-point Leveling");
|
||||
|
||||
// Probe at 3 arbitrary points
|
||||
points[0].z = points[1].z = points[2].z = 0;
|
||||
|
||||
#endif // AUTO_BED_LEVELING_3POINT
|
||||
|
||||
} // !g29_in_progress
|
||||
|
||||
#if ENABLED(PROBE_MANUALLY)
|
||||
|
||||
@@ -50,6 +50,10 @@
|
||||
#include "../../lcd/dwin/e3v2/dwin.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(EXTENSIBLE_UI)
|
||||
#include "../../lcd/extui/ui_api.h"
|
||||
#endif
|
||||
|
||||
#if HAS_L64XX // set L6470 absolute position registers to counts
|
||||
#include "../../libs/L64XX/L64XX_Marlin.h"
|
||||
#endif
|
||||
@@ -207,8 +211,6 @@ void GcodeSuite::G28() {
|
||||
|
||||
TERN_(LASER_MOVE_G28_OFF, cutter.set_inline_enabled(false)); // turn off laser
|
||||
|
||||
TERN_(DWIN_CREALITY_LCD, HMI_flag.home_flag = true);
|
||||
|
||||
#if ENABLED(DUAL_X_CARRIAGE)
|
||||
bool IDEX_saved_duplication_state = extruder_duplication_enabled;
|
||||
DualXMode IDEX_saved_mode = dual_x_carriage_mode;
|
||||
@@ -230,17 +232,17 @@ void GcodeSuite::G28() {
|
||||
return;
|
||||
}
|
||||
|
||||
TERN_(DWIN_CREALITY_LCD, DWIN_StartHoming());
|
||||
TERN_(EXTENSIBLE_UI, ExtUI::onHomingStart());
|
||||
|
||||
planner.synchronize(); // Wait for planner moves to finish!
|
||||
|
||||
SET_SOFT_ENDSTOP_LOOSE(false); // Reset a leftover 'loose' motion state
|
||||
|
||||
// Disable the leveling matrix before homing
|
||||
#if HAS_LEVELING
|
||||
|
||||
// Cancel the active G29 session
|
||||
TERN_(PROBE_MANUALLY, g29_in_progress = false);
|
||||
|
||||
TERN_(RESTORE_LEVELING_AFTER_G28, const bool leveling_was_active = planner.leveling_active);
|
||||
TERN_(PROBE_MANUALLY, g29_in_progress = false); // Cancel the active G29 session
|
||||
set_bed_leveling_enabled(false);
|
||||
#endif
|
||||
|
||||
@@ -461,6 +463,7 @@ void GcodeSuite::G28() {
|
||||
ui.refresh();
|
||||
|
||||
TERN_(DWIN_CREALITY_LCD, DWIN_CompletedHoming());
|
||||
TERN_(EXTENSIBLE_UI, ExtUI::onHomingComplete());
|
||||
|
||||
report_current_position();
|
||||
|
||||
|
||||
@@ -27,6 +27,10 @@
|
||||
#include "../gcode.h"
|
||||
#include "../../module/printcounter.h"
|
||||
|
||||
#if DISABLED(NO_SD_AUTOSTART)
|
||||
#include "../../sd/cardreader.h"
|
||||
#endif
|
||||
|
||||
#ifdef SD_FINISHED_RELEASECOMMAND
|
||||
#include "../queue.h"
|
||||
#endif
|
||||
@@ -60,6 +64,11 @@
|
||||
* M1001: Execute actions for SD print completion
|
||||
*/
|
||||
void GcodeSuite::M1001() {
|
||||
// If there's another auto#.g file to run...
|
||||
if (TERN(NO_SD_AUTOSTART, false, card.autofile_check())) return;
|
||||
|
||||
// Purge the recovery file...
|
||||
TERN_(POWER_LOSS_RECOVERY, recovery.purge());
|
||||
|
||||
// Report total print time
|
||||
const bool long_print = print_job_timer.duration() > 60;
|
||||
@@ -71,9 +80,6 @@ void GcodeSuite::M1001() {
|
||||
// Set the progress bar "done" state
|
||||
TERN_(LCD_SET_PROGRESS_MANUALLY, ui.set_progress_done());
|
||||
|
||||
// Purge the recovery file
|
||||
TERN_(POWER_LOSS_RECOVERY, recovery.purge());
|
||||
|
||||
// Announce SD file completion
|
||||
{
|
||||
PORT_REDIRECT(SERIAL_BOTH);
|
||||
@@ -93,9 +99,11 @@ void GcodeSuite::M1001() {
|
||||
|
||||
// Inject SD_FINISHED_RELEASECOMMAND, if any
|
||||
#ifdef SD_FINISHED_RELEASECOMMAND
|
||||
queue.inject_P(PSTR(SD_FINISHED_RELEASECOMMAND));
|
||||
gcode.process_subcommands_now_P(PSTR(SD_FINISHED_RELEASECOMMAND));
|
||||
#endif
|
||||
|
||||
TERN_(EXTENSIBLE_UI, ExtUI::onPrintFinished());
|
||||
|
||||
// Re-select the last printed file in the UI
|
||||
TERN_(SD_REPRINT_LAST_SELECTED_FILE, ui.reselect_last_file());
|
||||
}
|
||||
|
||||
@@ -142,6 +142,10 @@
|
||||
#undef SD_FINISHED_RELEASECOMMAND
|
||||
#endif
|
||||
|
||||
#if ENABLED(NO_SD_AUTOSTART)
|
||||
#undef MENU_ADDAUTOSTART
|
||||
#endif
|
||||
|
||||
#if EITHER(SDSUPPORT, LCD_SET_PROGRESS_MANUALLY)
|
||||
#define HAS_PRINT_PROGRESS 1
|
||||
#endif
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
* version was tagged.
|
||||
*/
|
||||
#ifndef STRING_DISTRIBUTION_DATE
|
||||
#define STRING_DISTRIBUTION_DATE "2020-12-05"
|
||||
#define STRING_DISTRIBUTION_DATE "2020-12-07"
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
||||
@@ -369,5 +369,7 @@ void DWIN_Update();
|
||||
void EachMomentUpdate();
|
||||
void DWIN_HandleScreen();
|
||||
|
||||
inline void DWIN_StartHoming() { HMI_flag.home_flag = true; }
|
||||
|
||||
void DWIN_CompletedHoming();
|
||||
void DWIN_CompletedLeveling();
|
||||
|
||||
@@ -62,6 +62,10 @@ namespace ExtUI {
|
||||
void onUserConfirmRequired(const char * const msg) { Chiron.ConfirmationRequest(msg); }
|
||||
void onStatusChanged(const char * const msg) { Chiron.StatusChange(msg); }
|
||||
|
||||
void onHomingStart() {}
|
||||
void onHomingComplete() {}
|
||||
void onPrintFinished() {}
|
||||
|
||||
void onFactoryReset() {}
|
||||
|
||||
void onStoreSettings(char *buff) {
|
||||
@@ -95,6 +99,8 @@ namespace ExtUI {
|
||||
}
|
||||
|
||||
#if HAS_MESH
|
||||
void onMeshLevelingStart() {}
|
||||
|
||||
void onMeshUpdate(const int8_t xpos, const int8_t ypos, const float zval) {
|
||||
// Called when any mesh points are updated
|
||||
//SERIAL_ECHOLNPAIR("onMeshUpdate() x:", xpos, " y:", ypos, " z:", zval);
|
||||
@@ -116,6 +122,9 @@ namespace ExtUI {
|
||||
// Called for temperature PID tuning result
|
||||
}
|
||||
#endif
|
||||
|
||||
void onSteppersDisabled() {}
|
||||
void onSteppersEnabled() {}
|
||||
}
|
||||
|
||||
#endif // ANYCUBIC_LCD_CHIRON
|
||||
|
||||
@@ -52,6 +52,11 @@ namespace ExtUI {
|
||||
void onFilamentRunout(const extruder_t extruder) { AnycubicTFT.OnFilamentRunout(); }
|
||||
void onUserConfirmRequired(const char * const msg) { AnycubicTFT.OnUserConfirmRequired(msg); }
|
||||
void onStatusChanged(const char * const msg) {}
|
||||
|
||||
void onHomingStart() {}
|
||||
void onHomingComplete() {}
|
||||
void onPrintFinished() {}
|
||||
|
||||
void onFactoryReset() {}
|
||||
|
||||
void onStoreSettings(char *buff) {
|
||||
@@ -84,9 +89,14 @@ namespace ExtUI {
|
||||
// whether successful or not.
|
||||
}
|
||||
|
||||
void onMeshUpdate(const int8_t xpos, const int8_t ypos, const float zval) {
|
||||
// Called when any mesh points are updated
|
||||
}
|
||||
#if HAS_MESH
|
||||
|
||||
void onMeshLevelingStart() {}
|
||||
|
||||
void onMeshUpdate(const int8_t xpos, const int8_t ypos, const float zval) {
|
||||
// Called when any mesh points are updated
|
||||
}
|
||||
#endif
|
||||
|
||||
#if ENABLED(POWER_LOSS_RECOVERY)
|
||||
void onPowerLossResume() {
|
||||
@@ -99,6 +109,9 @@ namespace ExtUI {
|
||||
// Called for temperature PID tuning result
|
||||
}
|
||||
#endif
|
||||
|
||||
void onSteppersDisabled() {}
|
||||
void onSteppersEnabled() {}
|
||||
}
|
||||
|
||||
#endif // ANYCUBIC_LCD_I3MEGA
|
||||
|
||||
@@ -76,7 +76,12 @@ namespace ExtUI {
|
||||
|
||||
void onStatusChanged(const char * const msg) { ScreenHandler.setstatusmessage(msg); }
|
||||
|
||||
void onHomingStart() {}
|
||||
void onHomingComplete() {}
|
||||
void onPrintFinished() {}
|
||||
|
||||
void onFactoryReset() {}
|
||||
|
||||
void onStoreSettings(char *buff) {
|
||||
// Called when saving to EEPROM (i.e. M500). If the ExtUI needs
|
||||
// permanent data to be stored, it can write up to eeprom_data_size bytes
|
||||
@@ -108,6 +113,8 @@ namespace ExtUI {
|
||||
}
|
||||
|
||||
#if HAS_MESH
|
||||
void onMeshLevelingStart() {}
|
||||
|
||||
void onMeshUpdate(const int8_t xpos, const int8_t ypos, const float zval) {
|
||||
// Called when any mesh points are updated
|
||||
}
|
||||
@@ -146,5 +153,8 @@ namespace ExtUI {
|
||||
}
|
||||
#endif
|
||||
|
||||
void onSteppersDisabled() {}
|
||||
void onSteppersEnabled() {}
|
||||
}
|
||||
|
||||
#endif // HAS_DGUS_LCD
|
||||
|
||||
@@ -47,9 +47,9 @@ namespace ExtUI {
|
||||
}
|
||||
void onIdle() {}
|
||||
void onPrinterKilled(PGM_P const error, PGM_P const component) {}
|
||||
void onMediaInserted() {};
|
||||
void onMediaError() {};
|
||||
void onMediaRemoved() {};
|
||||
void onMediaInserted() {}
|
||||
void onMediaError() {}
|
||||
void onMediaRemoved() {}
|
||||
void onPlayTone(const uint16_t frequency, const uint16_t duration) {}
|
||||
void onPrintTimerStarted() {}
|
||||
void onPrintTimerPaused() {}
|
||||
@@ -57,6 +57,11 @@ namespace ExtUI {
|
||||
void onFilamentRunout(const extruder_t extruder) {}
|
||||
void onUserConfirmRequired(const char * const msg) {}
|
||||
void onStatusChanged(const char * const msg) {}
|
||||
|
||||
void onHomingStart() {}
|
||||
void onHomingComplete() {}
|
||||
void onPrintFinished() {}
|
||||
|
||||
void onFactoryReset() {}
|
||||
|
||||
void onStoreSettings(char *buff) {
|
||||
@@ -90,6 +95,8 @@ namespace ExtUI {
|
||||
}
|
||||
|
||||
#if HAS_MESH
|
||||
void onMeshLevelingStart() {}
|
||||
|
||||
void onMeshUpdate(const int8_t xpos, const int8_t ypos, const float zval) {
|
||||
// Called when any mesh points are updated
|
||||
}
|
||||
@@ -110,6 +117,9 @@ namespace ExtUI {
|
||||
// Called for temperature PID tuning result
|
||||
}
|
||||
#endif
|
||||
|
||||
void onSteppersDisabled() {}
|
||||
void onSteppersEnabled() {}
|
||||
}
|
||||
|
||||
#endif // EXTUI_EXAMPLE && EXTENSIBLE_UI
|
||||
|
||||
@@ -87,8 +87,9 @@ namespace ExtUI {
|
||||
InterfaceSoundsScreen::playEventSound(InterfaceSoundsScreen::PRINTING_FINISHED);
|
||||
}
|
||||
|
||||
void onPrintTimerPaused() {
|
||||
}
|
||||
void onPrintTimerPaused() {}
|
||||
|
||||
void onPrintFinished() {}
|
||||
|
||||
void onFilamentRunout(const extruder_t extruder) {
|
||||
char lcd_msg[30];
|
||||
@@ -97,6 +98,9 @@ namespace ExtUI {
|
||||
InterfaceSoundsScreen::playEventSound(InterfaceSoundsScreen::PRINTING_FAILED, FTDI::PLAY_SYNCHRONOUS);
|
||||
}
|
||||
|
||||
void onHomingStart() {}
|
||||
void onHomingComplete() {}
|
||||
|
||||
void onFactoryReset() {
|
||||
InterfaceSettingsScreen::defaultSettings();
|
||||
}
|
||||
@@ -134,6 +138,8 @@ namespace ExtUI {
|
||||
}
|
||||
|
||||
#if HAS_LEVELING && HAS_MESH
|
||||
void onMeshLevelingStart() {}
|
||||
|
||||
void onMeshUpdate(const int8_t x, const int8_t y, const float val) {
|
||||
BedMeshScreen::onMeshUpdate(x, y, val);
|
||||
}
|
||||
@@ -170,6 +176,9 @@ namespace ExtUI {
|
||||
GOTO_SCREEN(StatusScreen);
|
||||
}
|
||||
#endif // HAS_PID_HEATING
|
||||
|
||||
void onSteppersDisabled() {}
|
||||
void onSteppersEnabled() {}
|
||||
}
|
||||
|
||||
#endif // TOUCH_UI_FTDI_EVE
|
||||
|
||||
@@ -511,12 +511,15 @@ namespace ExtUI {
|
||||
|
||||
// Not needed for Malyan LCD
|
||||
void onStatusChanged(const char * const) {}
|
||||
void onMediaInserted() {};
|
||||
void onMediaError() {};
|
||||
void onMediaRemoved() {};
|
||||
void onMediaInserted() {}
|
||||
void onMediaError() {}
|
||||
void onMediaRemoved() {}
|
||||
void onPlayTone(const uint16_t, const uint16_t) {}
|
||||
void onFilamentRunout(const extruder_t extruder) {}
|
||||
void onUserConfirmRequired(const char * const) {}
|
||||
void onHomingStart() {}
|
||||
void onHomingComplete() {}
|
||||
void onPrintFinished() {}
|
||||
void onFactoryReset() {}
|
||||
void onStoreSettings(char*) {}
|
||||
void onLoadSettings(const char*) {}
|
||||
@@ -524,6 +527,7 @@ namespace ExtUI {
|
||||
void onConfigurationStoreRead(bool) {}
|
||||
|
||||
#if HAS_MESH
|
||||
void onMeshLevelingStart() {}
|
||||
void onMeshUpdate(const int8_t xpos, const int8_t ypos, const float zval) {}
|
||||
void onMeshUpdate(const int8_t xpos, const int8_t ypos, const ExtUI::probe_state_t state) {}
|
||||
#endif
|
||||
@@ -531,6 +535,9 @@ namespace ExtUI {
|
||||
#if ENABLED(POWER_LOSS_RECOVERY)
|
||||
void onPowerLossResume() {}
|
||||
#endif
|
||||
|
||||
void onSteppersDisabled() {}
|
||||
void onSteppersEnabled() {}
|
||||
}
|
||||
|
||||
#endif // MALYAN_LCD
|
||||
|
||||
@@ -140,6 +140,7 @@ namespace ExtUI {
|
||||
bed_mesh_t& getMeshArray();
|
||||
float getMeshPoint(const xy_uint8_t &pos);
|
||||
void setMeshPoint(const xy_uint8_t &pos, const float zval);
|
||||
void onMeshLevelingStart();
|
||||
void onMeshUpdate(const int8_t xpos, const int8_t ypos, const float zval);
|
||||
inline void onMeshUpdate(const xy_int8_t &pos, const float zval) { onMeshUpdate(pos.x, pos.y, zval); }
|
||||
|
||||
@@ -344,11 +345,16 @@ namespace ExtUI {
|
||||
void onPrintTimerStarted();
|
||||
void onPrintTimerPaused();
|
||||
void onPrintTimerStopped();
|
||||
void onPrintFinished();
|
||||
void onFilamentRunout(const extruder_t extruder);
|
||||
void onUserConfirmRequired(const char * const msg);
|
||||
void onUserConfirmRequired_P(PGM_P const pstr);
|
||||
void onStatusChanged(const char * const msg);
|
||||
void onStatusChanged_P(PGM_P const pstr);
|
||||
void onHomingStart();
|
||||
void onHomingComplete();
|
||||
void onSteppersDisabled();
|
||||
void onSteppersEnabled();
|
||||
void onFactoryReset();
|
||||
void onStoreSettings(char *);
|
||||
void onLoadSettings(const char *);
|
||||
|
||||
@@ -431,9 +431,9 @@ namespace Language_en {
|
||||
PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Change Filament");
|
||||
PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Change Filament *");
|
||||
PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Load Filament");
|
||||
PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Load Filament *");
|
||||
PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Load *");
|
||||
PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Unload Filament");
|
||||
PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Unload Filament *");
|
||||
PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Unload *");
|
||||
PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Unload All");
|
||||
PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Attach Media");
|
||||
PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Change Media");
|
||||
|
||||
@@ -136,7 +136,7 @@ void menu_main() {
|
||||
// Run Auto Files
|
||||
//
|
||||
#if ENABLED(MENU_ADDAUTOSTART)
|
||||
ACTION_ITEM(MSG_RUN_AUTO_FILES, card.beginautostart);
|
||||
ACTION_ITEM(MSG_RUN_AUTO_FILES, card.autofile_begin);
|
||||
#endif
|
||||
|
||||
if (card_detected) {
|
||||
@@ -238,7 +238,7 @@ void menu_main() {
|
||||
// Autostart
|
||||
//
|
||||
#if ENABLED(MENU_ADDAUTOSTART)
|
||||
ACTION_ITEM(MSG_RUN_AUTO_FILES, card.beginautostart);
|
||||
ACTION_ITEM(MSG_RUN_AUTO_FILES, card.autofile_begin);
|
||||
#endif
|
||||
|
||||
if (card_detected) {
|
||||
|
||||
@@ -34,7 +34,11 @@
|
||||
//#define HAS_BTT_EXP_MOT 1
|
||||
|
||||
#if BOTH(HAS_WIRED_LCD,HAS_BTT_EXP_MOT)
|
||||
#ERROR "Having a LCD on EXP1/EXP2 and a expanion motor module on EXP1/EXP2 is not possable."
|
||||
#if EITHER(CR10_STOCKDISPLAY,ENDER2_STOCKDISPLAY)
|
||||
#define EXP_MOT_USE_EXP2_ONLY
|
||||
#else
|
||||
#error "Having a LCD that uses both EXP1/EXP2 and a expanion motor module on EXP1/EXP2 is not possible."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Ignore temp readings during development.
|
||||
@@ -133,36 +137,48 @@
|
||||
* (M3DIR) 0.15 | · · | 0.17 (M3STP) (M3RX) 0.28 | · · | 1.30 (M3DIAG)
|
||||
* ----- -----
|
||||
* EXP2 EXP1
|
||||
*
|
||||
* NB In EXP_MOT_USE_EXP2_ONLY mode EXP1 is not used and M2EN and M3EN need to be jumpered to M1EN
|
||||
*/
|
||||
|
||||
// M1 on Driver Expansion Module
|
||||
#define E2_STEP_PIN EXPA2_05_PIN
|
||||
#define E2_DIR_PIN EXPA2_06_PIN
|
||||
#define E2_ENABLE_PIN EXPA2_04_PIN
|
||||
#define E2_DIAG_PIN EXPA1_06_PIN
|
||||
#define E2_CS_PIN EXPA1_05_PIN
|
||||
#if HAS_TMC_UART
|
||||
#define E2_SERIAL_TX_PIN EXPA1_05_PIN
|
||||
#define E2_SERIAL_RX_PIN EXPA1_05_PIN
|
||||
#ifndef EXP_MOT_USE_EXP2_ONLY
|
||||
#define E2_DIAG_PIN EXPA1_06_PIN
|
||||
#define E2_CS_PIN EXPA1_05_PIN
|
||||
#if HAS_TMC_UART
|
||||
#define E2_SERIAL_TX_PIN EXPA1_05_PIN
|
||||
#define E2_SERIAL_RX_PIN EXPA1_05_PIN
|
||||
#endif
|
||||
#endif
|
||||
// M2 on Driver Expansion Module
|
||||
#define E3_STEP_PIN EXPA2_08_PIN
|
||||
#define E3_DIR_PIN EXPA2_07_PIN
|
||||
#define E3_ENABLE_PIN EXPA1_03_PIN
|
||||
#define E3_DIAG_PIN EXPA1_08_PIN
|
||||
#define E3_CS_PIN EXPA1_07_PIN
|
||||
#if HAS_TMC_UART
|
||||
#define E3_SERIAL_TX_PIN EXPA1_07_PIN
|
||||
#define E3_SERIAL_RX_PIN EXPA1_07_PIN
|
||||
#ifndef EXP_MOT_USE_EXP2_ONLY
|
||||
#define E3_ENABLE_PIN EXPA1_03_PIN
|
||||
#define E3_DIAG_PIN EXPA1_08_PIN
|
||||
#define E3_CS_PIN EXPA1_07_PIN
|
||||
#if HAS_TMC_UART
|
||||
#define E3_SERIAL_TX_PIN EXPA1_07_PIN
|
||||
#define E3_SERIAL_RX_PIN EXPA1_07_PIN
|
||||
#endif
|
||||
#else
|
||||
#define E3_ENABLE_PIN EXPA2_04_PIN
|
||||
#endif
|
||||
// M3 on Driver Expansion Module
|
||||
#define E4_STEP_PIN EXPA2_10_PIN
|
||||
#define E4_DIR_PIN EXPA2_09_PIN
|
||||
#define E4_ENABLE_PIN EXPA1_04_PIN
|
||||
#define E4_DIAG_PIN EXPA1_10_PIN
|
||||
#define E4_CS_PIN EXPA1_09_PIN
|
||||
#if HAS_TMC_UART
|
||||
#define E4_SERIAL_TX_PIN EXPA1_09_PIN
|
||||
#define E4_SERIAL_RX_PIN EXPA1_09_PIN
|
||||
#ifndef EXP_MOT_USE_EXP2_ONLY
|
||||
#define E4_ENABLE_PIN EXPA1_04_PIN
|
||||
#define E4_DIAG_PIN EXPA1_10_PIN
|
||||
#define E4_CS_PIN EXPA1_09_PIN
|
||||
#if HAS_TMC_UART
|
||||
#define E4_SERIAL_TX_PIN EXPA1_09_PIN
|
||||
#define E4_SERIAL_RX_PIN EXPA1_09_PIN
|
||||
#endif
|
||||
#else
|
||||
#define E4_ENABLE_PIN EXPA2_04_PIN
|
||||
#endif
|
||||
#endif // HAS_BTT_EXP_MOT
|
||||
|
||||
@@ -582,12 +582,12 @@
|
||||
#include "stm32f4/pins_VAKE403D.h" // STM32F4
|
||||
#elif MB(FYSETC_S6)
|
||||
#include "stm32f4/pins_FYSETC_S6.h" // STM32F4 env:FYSETC_S6
|
||||
#elif MB(FYSETC_S6_V2_0)
|
||||
#include "stm32f4/pins_FYSETC_S6_V2_0.h" // STM32F4 env:FYSETC_S6
|
||||
#elif MB(FLYF407ZG)
|
||||
#include "stm32f4/pins_FLYF407ZG.h" // STM32F4 env:FLYF407ZG
|
||||
#elif MB(MKS_ROBIN2)
|
||||
#include "stm32f4/pins_MKS_ROBIN2.h" // STM32F4 env:MKS_ROBIN2
|
||||
#elif MB(FYSETC_S6_V2_0)
|
||||
#include "stm32f4/pins_FYSETC_S6_V2_0.h" // STM32F4 env:FYSETC_S6
|
||||
|
||||
//
|
||||
// ARM Cortex M7
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
#if NOT_TARGET(__STM32F1__)
|
||||
#error "Oops! Select an STM32F1 board in 'Tools > Board.'"
|
||||
#elif HOTENDS > 1 || E_STEPPERS > 1
|
||||
#error "Creality_V4 only supports one hotend / E-stepper. Comment out this line to continue."
|
||||
#error "Creality V4 only supports one hotend / E-stepper. Comment out this line to continue."
|
||||
#endif
|
||||
|
||||
#ifndef BOARD_INFO_NAME
|
||||
|
||||
@@ -33,81 +33,88 @@
|
||||
#define BOARD_NAME "Creality v4.5.2"
|
||||
#define DEFAULT_MACHINE_NAME "Creality3D"
|
||||
|
||||
//
|
||||
// Release PB4 (Z_STEP_PIN) from JTAG NRST role
|
||||
//
|
||||
#define DISABLE_DEBUG
|
||||
|
||||
#define BOARD_NO_NATIVE_USB
|
||||
|
||||
//
|
||||
// EEPROM
|
||||
//
|
||||
#if NO_EEPROM_SELECTED
|
||||
#define IIC_BL24CXX_EEPROM // EEPROM on I2C-0
|
||||
#define IIC_BL24CXX_EEPROM // EEPROM on I2C-0
|
||||
//#define SDCARD_EEPROM_EMULATION
|
||||
#endif
|
||||
|
||||
#if ENABLED(IIC_BL24CXX_EEPROM)
|
||||
#define IIC_EEPROM_SDA PA11
|
||||
#define IIC_EEPROM_SCL PA12
|
||||
#define MARLIN_EEPROM_SIZE 0x800 // 2Kb (24C16)
|
||||
#define IIC_EEPROM_SDA PA11
|
||||
#define IIC_EEPROM_SCL PA12
|
||||
#define MARLIN_EEPROM_SIZE 0x800 // 2Kb (24C16)
|
||||
#elif ENABLED(SDCARD_EEPROM_EMULATION)
|
||||
#define MARLIN_EEPROM_SIZE 0x800 // 2Kb
|
||||
#define MARLIN_EEPROM_SIZE 0x800 // 2Kb
|
||||
#endif
|
||||
|
||||
//
|
||||
// Limit Switches
|
||||
//
|
||||
#define X_MIN_PIN PC4
|
||||
// #define X_MAX_PIN PA7
|
||||
#define Y_MIN_PIN PC5
|
||||
#define Z_MIN_PIN PA4
|
||||
#define PROBE_TARE_PIN PA5
|
||||
#define X_STOP_PIN PC4
|
||||
#define Y_STOP_PIN PC5
|
||||
#define Z_STOP_PIN PA4
|
||||
|
||||
#define FIL_RUNOUT_PIN PA7
|
||||
|
||||
//
|
||||
// Probe
|
||||
//
|
||||
#define PROBE_TARE_PIN PA5
|
||||
#define PROBE_ENABLE_PIN PC6 // Optoswitch to Enable Z Probe
|
||||
|
||||
//
|
||||
// Steppers
|
||||
//
|
||||
#define X_ENABLE_PIN PC3
|
||||
#define X_STEP_PIN PB8
|
||||
#define X_DIR_PIN PB7
|
||||
#define X_ENABLE_PIN PC3
|
||||
#define X_STEP_PIN PB8
|
||||
#define X_DIR_PIN PB7
|
||||
|
||||
#define Y_ENABLE_PIN PC3
|
||||
#define Y_STEP_PIN PB6
|
||||
#define Y_DIR_PIN PB5
|
||||
#define Y_ENABLE_PIN PC3
|
||||
#define Y_STEP_PIN PB6
|
||||
#define Y_DIR_PIN PB5
|
||||
|
||||
#define Z_ENABLE_PIN PC3
|
||||
#define Z_STEP_PIN PB4
|
||||
#define Z_DIR_PIN PB3
|
||||
#define Z_ENABLE_PIN PC3
|
||||
#define Z_STEP_PIN PB4
|
||||
#define Z_DIR_PIN PB3
|
||||
|
||||
#define E0_ENABLE_PIN PC3
|
||||
#define E0_STEP_PIN PC2
|
||||
#define E0_DIR_PIN PB9
|
||||
|
||||
|
||||
//
|
||||
// Release PB4 (Z_STEP_PIN) from JTAG NRST role
|
||||
//
|
||||
#define DISABLE_DEBUG
|
||||
#define E0_ENABLE_PIN PC3
|
||||
#define E0_STEP_PIN PC2
|
||||
#define E0_DIR_PIN PB9
|
||||
|
||||
//
|
||||
// Temperature Sensors
|
||||
//
|
||||
#define TEMP_0_PIN PB1 // TH1
|
||||
#define TEMP_BED_PIN PB0 // TB1
|
||||
#define TEMP_0_PIN PB1 // TH1
|
||||
#define TEMP_BED_PIN PB0 // TB1
|
||||
|
||||
//
|
||||
// Heaters / Fans
|
||||
//
|
||||
#define HEATER_0_PIN PA1 // HEATER1
|
||||
#define HEATER_BED_PIN PA2 // HOT BED
|
||||
|
||||
#define HEATER_0_PIN PA1 // HEATER1
|
||||
#define HEATER_BED_PIN PA2 // HOT BED
|
||||
|
||||
#define FAN_PIN PA0 // FAN
|
||||
#define FAN_PIN PA0 // FAN
|
||||
#define FAN_SOFT_PWM
|
||||
|
||||
/* SD card detect */
|
||||
#define SD_DETECT_PIN PC7
|
||||
#define NO_SD_HOST_DRIVE // SD is only seen by the printer
|
||||
//
|
||||
// SD Card
|
||||
//
|
||||
#define SD_DETECT_PIN PC7
|
||||
#define NO_SD_HOST_DRIVE // SD is only seen by the printer
|
||||
|
||||
#define SDIO_SUPPORT // Extra added by Creality
|
||||
#define SDIO_CLOCK 6000000 // In original source code overridden by Creality in sdio.h
|
||||
#define SDIO_SUPPORT // Extra added by Creality
|
||||
#define SDIO_CLOCK 6000000 // In original source code overridden by Creality in sdio.h
|
||||
|
||||
#define CASE_LIGHT_PIN PA6
|
||||
|
||||
#define FIL_RUNOUT_PIN PA7
|
||||
#define PROBE_ENABLE_PIN PC6 // Optoswitch to Enable Z Probe
|
||||
//
|
||||
// Misc. Functions
|
||||
//
|
||||
#define CASE_LIGHT_PIN PA6
|
||||
|
||||
@@ -42,7 +42,6 @@
|
||||
//
|
||||
#if NO_EEPROM_SELECTED
|
||||
#define FLASH_EEPROM_EMULATION
|
||||
//#define SRAM_EEPROM_EMULATION
|
||||
//#define I2C_EEPROM
|
||||
#endif
|
||||
|
||||
@@ -51,7 +50,7 @@
|
||||
// 128 kB sector allocated for EEPROM emulation.
|
||||
#define FLASH_EEPROM_LEVELING
|
||||
#elif ENABLED(I2C_EEPROM)
|
||||
#define MARLIN_EEPROM_SIZE 0x1000 // 4KB
|
||||
#define MARLIN_EEPROM_SIZE 0x0800 // 2KB
|
||||
#endif
|
||||
|
||||
//
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
#if NO_EEPROM_SELECTED
|
||||
#undef NO_EEPROM_SELECTED
|
||||
//#define FLASH_EEPROM_EMULATION
|
||||
//#define SRAM_EEPROM_EMULATION
|
||||
#define I2C_EEPROM
|
||||
#endif
|
||||
|
||||
|
||||
@@ -61,7 +61,8 @@
|
||||
|
||||
card_flags_t CardReader::flag;
|
||||
char CardReader::filename[FILENAME_LENGTH], CardReader::longFilename[LONG_FILENAME_LENGTH];
|
||||
int8_t CardReader::autostart_index;
|
||||
|
||||
IF_DISABLED(NO_SD_AUTOSTART, uint8_t CardReader::autofile_index); // = 0
|
||||
|
||||
#if BOTH(HAS_MULTI_SERIAL, BINARY_FILE_TRANSFER)
|
||||
int8_t CardReader::transfer_port_index;
|
||||
@@ -135,17 +136,17 @@ CardReader::CardReader() {
|
||||
//sort_reverse = false;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
flag.sdprinting = flag.mounted = flag.saving = flag.logging = false;
|
||||
filesize = sdpos = 0;
|
||||
|
||||
TERN_(HAS_MEDIA_SUBCALLS, file_subcall_ctr = 0);
|
||||
|
||||
IF_DISABLED(NO_SD_AUTOSTART, autofile_cancel());
|
||||
|
||||
workDirDepth = 0;
|
||||
ZERO(workDirParents);
|
||||
|
||||
// Disable autostart until card is initialized
|
||||
autostart_index = -1;
|
||||
|
||||
#if ENABLED(SDSUPPORT) && PIN_EXISTS(SD_DETECT)
|
||||
SET_INPUT_PULLUP(SD_DETECT_PIN);
|
||||
#endif
|
||||
@@ -442,12 +443,14 @@ void CardReader::manage_media() {
|
||||
|
||||
if (stat) {
|
||||
TERN_(SDCARD_EEPROM_EMULATION, settings.first_load());
|
||||
if (old_stat == 2) // First mount?
|
||||
if (old_stat == 2) { // First mount?
|
||||
DEBUG_ECHOLNPGM("First mount.");
|
||||
TERN(POWER_LOSS_RECOVERY,
|
||||
recovery.check(), // Check for PLR file. (If not there it will beginautostart)
|
||||
beginautostart() // Look for auto0.g on the next loop
|
||||
);
|
||||
#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
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -477,12 +480,12 @@ void CardReader::release() {
|
||||
* Enqueues M23 and M24 commands to initiate a media print.
|
||||
*/
|
||||
void CardReader::openAndPrintFile(const char *name) {
|
||||
char cmd[4 + strlen(name) + 1]; // Room for "M23 ", filename, and null
|
||||
char cmd[4 + strlen(name) + 1 + 3 + 1]; // Room for "M23 ", filename, "\n", "M24", and null
|
||||
extern const char M23_STR[];
|
||||
sprintf_P(cmd, M23_STR, name);
|
||||
for (char *c = &cmd[4]; *c; c++) *c = tolower(*c);
|
||||
queue.enqueue_one_now(cmd);
|
||||
queue.enqueue_now_P(M24_STR);
|
||||
strcat_P(cmd, PSTR("\nM24"));
|
||||
queue.inject(cmd);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -511,7 +514,7 @@ void CardReader::endFilePrint(TERN_(SD_RESORT, const bool re_sort/*=false*/)) {
|
||||
|
||||
void CardReader::openLogFile(char * const path) {
|
||||
flag.logging = DISABLED(SDCARD_READONLY);
|
||||
TERN(SDCARD_READONLY,,openFileWrite(path));
|
||||
IF_DISABLED(SDCARD_READONLY, openFileWrite(path));
|
||||
}
|
||||
|
||||
//
|
||||
@@ -662,14 +665,24 @@ void CardReader::openFileWrite(char * const path) {
|
||||
//
|
||||
bool CardReader::fileExists(const char * const path) {
|
||||
if (!isMounted()) return false;
|
||||
|
||||
DEBUG_ECHOLNPAIR("fileExists: ", path);
|
||||
|
||||
// Dive to the file's directory and get the base name
|
||||
SdFile *diveDir = nullptr;
|
||||
const char * const fname = diveToFile(false, diveDir, path);
|
||||
if (fname) {
|
||||
diveDir->rewind();
|
||||
selectByName(*diveDir, fname);
|
||||
//diveDir->close();
|
||||
}
|
||||
return !!fname;
|
||||
if (!fname) return false;
|
||||
|
||||
// Get the longname of the checked file
|
||||
//diveDir->rewind();
|
||||
//selectByName(*diveDir, fname);
|
||||
//diveDir->close();
|
||||
|
||||
// Try to open the file and return the result
|
||||
SdFile tmpFile;
|
||||
const bool success = tmpFile.open(diveDir, fname, O_READ);
|
||||
if (success) tmpFile.close();
|
||||
return success;
|
||||
}
|
||||
|
||||
//
|
||||
@@ -725,42 +738,48 @@ void CardReader::write_command(char * const buf) {
|
||||
if (file.writeError) SERIAL_ERROR_MSG(STR_SD_ERR_WRITE_TO_FILE);
|
||||
}
|
||||
|
||||
//
|
||||
// Run the next autostart file. Called:
|
||||
// - On boot after successful card init
|
||||
// - After finishing the previous autostart file
|
||||
// - From the LCD command to run the autostart file
|
||||
//
|
||||
#if DISABLED(NO_SD_AUTOSTART)
|
||||
/**
|
||||
* Run all the auto#.g files. Called:
|
||||
* - On boot after successful card init.
|
||||
* - From the LCD command to Run Auto Files
|
||||
*/
|
||||
void CardReader::autofile_begin() {
|
||||
autofile_index = 1;
|
||||
(void)autofile_check();
|
||||
}
|
||||
|
||||
void CardReader::checkautostart() {
|
||||
/**
|
||||
* Run the next auto#.g file. Called:
|
||||
* - On boot after successful card init
|
||||
* - After finishing the previous auto#.g file
|
||||
* - From the LCD command to begin the auto#.g files
|
||||
*
|
||||
* Return 'true' if there was nothing to do
|
||||
*/
|
||||
bool CardReader::autofile_check() {
|
||||
if (!autofile_index) return true;
|
||||
|
||||
if (autostart_index < 0 || flag.sdprinting) return;
|
||||
if (!isMounted())
|
||||
mount();
|
||||
else if (ENABLED(SDCARD_EEPROM_EMULATION))
|
||||
settings.first_load();
|
||||
|
||||
if (!isMounted()) mount();
|
||||
TERN_(SDCARD_EEPROM_EMULATION, else settings.first_load());
|
||||
|
||||
// Don't run auto#.g when a PLR file exists
|
||||
if (isMounted() && TERN1(POWER_LOSS_RECOVERY, !recovery.valid())) {
|
||||
char autoname[8];
|
||||
sprintf_P(autoname, PSTR("auto%c.g"), autostart_index + '0');
|
||||
dir_t p;
|
||||
root.rewind();
|
||||
while (root.readDir(&p, nullptr) > 0) {
|
||||
for (int8_t i = (int8_t)strlen((char*)p.name); i--;) p.name[i] = tolower(p.name[i]);
|
||||
if (p.name[9] != '~' && strncmp((char*)p.name, autoname, 5) == 0) {
|
||||
// Don't run auto#.g when a PLR file exists
|
||||
if (isMounted() && TERN1(POWER_LOSS_RECOVERY, !recovery.valid())) {
|
||||
char autoname[10];
|
||||
sprintf_P(autoname, PSTR("/auto%c.g"), '0' + autofile_index - 1);
|
||||
if (fileExists(autoname)) {
|
||||
cdroot();
|
||||
openAndPrintFile(autoname);
|
||||
autostart_index++;
|
||||
return;
|
||||
autofile_index++;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
autofile_cancel();
|
||||
return true;
|
||||
}
|
||||
autostart_index = -1;
|
||||
}
|
||||
|
||||
void CardReader::beginautostart() {
|
||||
autostart_index = 0;
|
||||
cdroot();
|
||||
}
|
||||
#endif
|
||||
|
||||
void CardReader::closefile(const bool store_location/*=false*/) {
|
||||
file.sync();
|
||||
@@ -1231,7 +1250,7 @@ void CardReader::fileHasFinished() {
|
||||
if (!isMounted()) return;
|
||||
if (recovery.file.isOpen()) return;
|
||||
if (!recovery.file.open(&root, recovery.filename, read ? O_READ : O_CREAT | O_WRITE | O_TRUNC | O_SYNC))
|
||||
SERIAL_ECHOLNPAIR(STR_SD_OPEN_FILE_FAIL, recovery.filename, ".");
|
||||
openFailed(recovery.filename);
|
||||
else if (!read)
|
||||
echo_write_to_file(recovery.filename);
|
||||
}
|
||||
|
||||
@@ -90,10 +90,12 @@ public:
|
||||
static void openLogFile(char * const path);
|
||||
static void write_command(char * const buf);
|
||||
|
||||
// Auto-Start files
|
||||
static int8_t autostart_index; // Index of autoX.g files
|
||||
static void beginautostart();
|
||||
static void checkautostart();
|
||||
#if DISABLED(NO_SD_AUTOSTART) // Auto-Start auto#.g file handling
|
||||
static uint8_t autofile_index; // Next auto#.g index to run, plus one. Ignored by autofile_check when zero.
|
||||
static void autofile_begin(); // Begin check. Called automatically after boot-up.
|
||||
static bool autofile_check(); // Check for the next auto-start file and run it.
|
||||
static inline void autofile_cancel() { autofile_index = 0; }
|
||||
#endif
|
||||
|
||||
// Basic file ops
|
||||
static void openFileRead(char * const path, const uint8_t subcall=0);
|
||||
|
||||
@@ -49,7 +49,7 @@ opt_set TEMP_SENSOR_4 1000
|
||||
opt_set TEMP_SENSOR_BED 1
|
||||
opt_enable AUTO_BED_LEVELING_UBL RESTORE_LEVELING_AFTER_G28 DEBUG_LEVELING_FEATURE G26_MESH_VALIDATION ENABLE_LEVELING_FADE_HEIGHT SKEW_CORRECTION \
|
||||
REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER LIGHTWEIGHT_UI STATUS_MESSAGE_SCROLLING BOOT_MARLIN_LOGO_SMALL \
|
||||
SDSUPPORT SDCARD_SORT_ALPHA USB_FLASH_DRIVE_SUPPORT SCROLL_LONG_FILENAMES CANCEL_OBJECTS \
|
||||
SDSUPPORT SDCARD_SORT_ALPHA USB_FLASH_DRIVE_SUPPORT SCROLL_LONG_FILENAMES CANCEL_OBJECTS NO_SD_AUTOSTART \
|
||||
EEPROM_SETTINGS EEPROM_CHITCHAT GCODE_MACROS CUSTOM_USER_MENUS \
|
||||
MULTI_NOZZLE_DUPLICATION CLASSIC_JERK LIN_ADVANCE QUICK_HOME \
|
||||
LCD_SET_PROGRESS_MANUALLY PRINT_PROGRESS_SHOW_DECIMALS SHOW_REMAINING_TIME \
|
||||
|
||||
+1
-1
@@ -203,7 +203,7 @@ extra_scripts =
|
||||
pre:buildroot/share/PlatformIO/scripts/common-dependencies.py
|
||||
pre:buildroot/share/PlatformIO/scripts/common-cxxflags.py
|
||||
post:buildroot/share/PlatformIO/scripts/common-dependencies-post.py
|
||||
build_flags = -fmax-errors=5 -g -D__MARLIN_FIRMWARE__ -fmerge-all-constants
|
||||
build_flags = -fmax-errors=5 -g -D__MARLIN_FIRMWARE__ -fmerge-constants
|
||||
lib_deps =
|
||||
|
||||
#
|
||||
|
||||
Reference in New Issue
Block a user