Merge remote-tracking branch 'upstream/bugfix-2.0.x' into pr/20379

This commit is contained in:
Victor Mateus Oliveira
2020-12-07 18:00:58 -03:00
31 changed files with 318 additions and 172 deletions
+1
View File
@@ -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
+8
View File
@@ -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
+1 -1
View File
@@ -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
+21 -3
View File
@@ -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
+8 -8
View File
@@ -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
+1 -1
View File
@@ -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);
+7 -11
View File
@@ -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)
+9 -6
View File
@@ -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();
+12 -4
View File
@@ -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());
}
+4
View 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
+1 -1
View File
@@ -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
/**
+2
View File
@@ -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
+16 -3
View File
@@ -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
+10
View File
@@ -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
+13 -3
View File
@@ -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
+10 -3
View File
@@ -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
+6
View File
@@ -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 *);
+2 -2
View File
@@ -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");
+2 -2
View File
@@ -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 -18
View File
@@ -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
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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
+50 -43
View File
@@ -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
+1 -2
View File
@@ -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
+68 -49
View File
@@ -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);
}
+6 -4
View File
@@ -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);
+1 -1
View File
@@ -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
View File
@@ -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 =
#