Merge branch 'bugfix-2.1.x' into ender3pro
This commit is contained in:
commit
d171865d52
32 changed files with 272 additions and 193 deletions
1
.github/workflows/ci-build-tests.yml
vendored
1
.github/workflows/ci-build-tests.yml
vendored
|
|
@ -21,6 +21,7 @@ on:
|
||||||
branches:
|
branches:
|
||||||
- bugfix-2.1.x
|
- bugfix-2.1.x
|
||||||
- 2.1.x
|
- 2.1.x
|
||||||
|
- release-*
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- config/**
|
- config/**
|
||||||
- data/**
|
- data/**
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@
|
||||||
* here we define this default string as the date where the latest release
|
* here we define this default string as the date where the latest release
|
||||||
* version was tagged.
|
* version was tagged.
|
||||||
*/
|
*/
|
||||||
#define STRING_DISTRIBUTION_DATE "2025-06-20"
|
//#define STRING_DISTRIBUTION_DATE "2025-06-29"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The protocol for communication to the host. Protocol indicates communication
|
* The protocol for communication to the host. Protocol indicates communication
|
||||||
|
|
|
||||||
|
|
@ -152,8 +152,8 @@
|
||||||
#include "feature/encoder_i2c.h"
|
#include "feature/encoder_i2c.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (HAS_TRINAMIC_CONFIG || HAS_TMC_SPI) && DISABLED(PSU_DEFAULT_OFF)
|
#if HAS_TRINAMIC_CONFIG
|
||||||
#include "feature/tmc_util.h"
|
#include "module/stepper/trinamic.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAS_CUTTER
|
#if HAS_CUTTER
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,13 @@ void DigipotI2C::init() {
|
||||||
Wire.begin();
|
Wire.begin();
|
||||||
#endif
|
#endif
|
||||||
// Set up initial currents as defined in Configuration_adv.h
|
// Set up initial currents as defined in Configuration_adv.h
|
||||||
static const float digipot_motor_current[] PROGMEM = TERN(DIGIPOT_USE_RAW_VALUES, DIGIPOT_MOTOR_CURRENT, DIGIPOT_I2C_MOTOR_CURRENTS);
|
static const float digipot_motor_current[] PROGMEM =
|
||||||
|
#if ENABLED(DIGIPOT_USE_RAW_VALUES)
|
||||||
|
DIGIPOT_MOTOR_CURRENT
|
||||||
|
#else
|
||||||
|
DIGIPOT_I2C_MOTOR_CURRENTS
|
||||||
|
#endif
|
||||||
|
;
|
||||||
for (uint8_t i = 0; i < COUNT(digipot_motor_current); ++i)
|
for (uint8_t i = 0; i < COUNT(digipot_motor_current); ++i)
|
||||||
set_current(i, pgm_read_float(&digipot_motor_current[i]));
|
set_current(i, pgm_read_float(&digipot_motor_current[i]));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -420,8 +420,11 @@ void PrintJobRecovery::resume() {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Interpret the saved Z according to flags
|
// Interpret the saved Z according to flags
|
||||||
const float z_print = resume_pos.z,
|
const float z_print = resume_pos.z;
|
||||||
z_raised = z_print + info.zraise;
|
|
||||||
|
#if ANY(Z_HOME_TO_MAX, POWER_LOSS_RECOVER_ZHOME) || DISABLED(BELTPRINTER)
|
||||||
|
const float z_raised = z_print + info.zraise;
|
||||||
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
// Home the axes that can safely be homed, and
|
// Home the axes that can safely be homed, and
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,12 @@
|
||||||
|
|
||||||
#if HAS_TRINAMIC_CONFIG
|
#if HAS_TRINAMIC_CONFIG
|
||||||
|
|
||||||
|
/**
|
||||||
|
* feature/tmc_util.cpp - Functions for debugging Trinamic stepper drivers.
|
||||||
|
* The main entry point is `tmc_report_all` which is called by M122 to collect
|
||||||
|
* and report diagnostic information about each enabled TMC driver.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "tmc_util.h"
|
#include "tmc_util.h"
|
||||||
#include "../MarlinCore.h"
|
#include "../MarlinCore.h"
|
||||||
|
|
||||||
|
|
@ -284,12 +290,13 @@
|
||||||
SString<50>(F(" driver overtemperature warning! ("), st.getMilliamps(), F("mA)")).echoln();
|
SString<50>(F(" driver overtemperature warning! ("), st.getMilliamps(), F("mA)")).echoln();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename TMC>
|
#if ENABLED(TMC_DEBUG)
|
||||||
void report_polled_driver_data(TMC &st, const TMC_driver_data &data) {
|
|
||||||
const uint32_t pwm_scale = get_pwm_scale(st);
|
template<typename TMC>
|
||||||
st.printLabel();
|
void report_polled_driver_data(TMC &st, const TMC_driver_data &data) {
|
||||||
SString<60> report(':', pwm_scale);
|
const uint32_t pwm_scale = get_pwm_scale(st);
|
||||||
#if ENABLED(TMC_DEBUG)
|
st.printLabel();
|
||||||
|
SString<60> report(':', pwm_scale);
|
||||||
#if HAS_TMCX1X0_OR_2240 || HAS_TMC220x
|
#if HAS_TMCX1X0_OR_2240 || HAS_TMC220x
|
||||||
report.append('/', data.cs_actual);
|
report.append('/', data.cs_actual);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -300,22 +307,21 @@
|
||||||
else
|
else
|
||||||
report += '-';
|
report += '-';
|
||||||
#endif
|
#endif
|
||||||
#endif
|
report += '|';
|
||||||
report += '|';
|
if (st.error_count) report += 'E'; // Error
|
||||||
if (st.error_count) report += 'E'; // Error
|
if (data.is_ot) report += 'O'; // Over-temperature
|
||||||
if (data.is_ot) report += 'O'; // Over-temperature
|
if (data.is_otpw) report += 'W'; // over-temperature pre-Warning
|
||||||
if (data.is_otpw) report += 'W'; // over-temperature pre-Warning
|
|
||||||
#if ENABLED(TMC_DEBUG)
|
|
||||||
if (data.is_stall) report += 'G'; // stallGuard
|
if (data.is_stall) report += 'G'; // stallGuard
|
||||||
if (data.is_stealth) report += 'T'; // stealthChop
|
if (data.is_stealth) report += 'T'; // stealthChop
|
||||||
if (data.is_standstill) report += 'I'; // standstIll
|
if (data.is_standstill) report += 'I'; // standstIll
|
||||||
#endif
|
if (st.flag_otpw) report += 'F'; // otpw Flag
|
||||||
if (st.flag_otpw) report += 'F'; // otpw Flag
|
report += '|';
|
||||||
report += '|';
|
if (st.otpw_count > 0) report += st.otpw_count;
|
||||||
if (st.otpw_count > 0) report += st.otpw_count;
|
report += '\t';
|
||||||
report += '\t';
|
report.echo();
|
||||||
report.echo();
|
}
|
||||||
}
|
|
||||||
|
#endif // TMC_DEBUG
|
||||||
|
|
||||||
#if CURRENT_STEP_DOWN > 0
|
#if CURRENT_STEP_DOWN > 0
|
||||||
|
|
||||||
|
|
@ -710,14 +716,8 @@
|
||||||
case TMC_FSACTIVE: if (st.fsactive()) SERIAL_CHAR('*'); break;
|
case TMC_FSACTIVE: if (st.fsactive()) SERIAL_CHAR('*'); break;
|
||||||
case TMC_DRV_CS_ACTUAL: if (st.CS_ACTUAL()) SERIAL_CHAR('*'); break;
|
case TMC_DRV_CS_ACTUAL: if (st.CS_ACTUAL()) SERIAL_CHAR('*'); break;
|
||||||
case TMC_STALLGUARD: if (st.stallguard()) SERIAL_CHAR('*'); break;
|
case TMC_STALLGUARD: if (st.stallguard()) SERIAL_CHAR('*'); break;
|
||||||
//case TMC_OT: if (st.ot()) SERIAL_CHAR('*'); break;
|
case TMC_OT: if (st.ot()) SERIAL_CHAR('*'); break;
|
||||||
case TMC_DEBUG_OTPW: print_true_or_false(st.otpw()); break;
|
|
||||||
//case TMC_S2GA: if (st.s2ga()) SERIAL_CHAR('*'); break;
|
|
||||||
//case TMC_S2GB: if (st.s2gb()) SERIAL_CHAR('*'); break;
|
|
||||||
//case TMC_OLA: if (st.ola()) SERIAL_CHAR('*'); break;
|
|
||||||
//case TMC_OLB: if (st.olb()) SERIAL_CHAR('*'); break;
|
|
||||||
case TMC_SG_RESULT: SERIAL_ECHO(st.SG_RESULT()); break;
|
case TMC_SG_RESULT: SERIAL_ECHO(st.SG_RESULT()); break;
|
||||||
case TMC_STST: if (!st.stst()) SERIAL_CHAR('*'); break;
|
|
||||||
default: break; // other...
|
default: break; // other...
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -844,7 +844,8 @@
|
||||||
case TMC_OT: if (st.ot()) SERIAL_CHAR('*'); break;
|
case TMC_OT: if (st.ot()) SERIAL_CHAR('*'); break;
|
||||||
case TMC_DRV_STATUS_HEX: {
|
case TMC_DRV_STATUS_HEX: {
|
||||||
const uint32_t drv_status = st.DRV_STATUS();
|
const uint32_t drv_status = st.DRV_STATUS();
|
||||||
SERIAL_CHAR('\t'); st.printLabel(); SERIAL_CHAR('\t'); print_hex_long(drv_status, ':', true);
|
SERIAL_CHAR('\t'); st.printLabel();
|
||||||
|
SERIAL_CHAR('\t'); print_hex_long(drv_status, ':', true);
|
||||||
if (drv_status == 0xFFFFFFFF || drv_status == 0) SERIAL_ECHOPGM("\t Bad response!");
|
if (drv_status == 0xFFFFFFFF || drv_status == 0) SERIAL_ECHOPGM("\t Bad response!");
|
||||||
SERIAL_EOL();
|
SERIAL_EOL();
|
||||||
} break;
|
} break;
|
||||||
|
|
@ -1167,6 +1168,9 @@
|
||||||
bool tmc_enable_stallguard(TMC2240Stepper &st) {
|
bool tmc_enable_stallguard(TMC2240Stepper &st) {
|
||||||
const bool stealthchop_was_enabled = st.en_pwm_mode();
|
const bool stealthchop_was_enabled = st.en_pwm_mode();
|
||||||
|
|
||||||
|
// TODO: Use StallGuard4 when stealthChop is enabled
|
||||||
|
// and leave stealthChop state unchanged.
|
||||||
|
|
||||||
st.TCOOLTHRS(0xFFFFF);
|
st.TCOOLTHRS(0xFFFFF);
|
||||||
st.en_pwm_mode(false);
|
st.en_pwm_mode(false);
|
||||||
st.diag0_stall(true);
|
st.diag0_stall(true);
|
||||||
|
|
@ -1250,75 +1254,3 @@ void test_tmc_connection(LOGICAL_AXIS_ARGS_LC(const bool)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // HAS_TRINAMIC_CONFIG
|
#endif // HAS_TRINAMIC_CONFIG
|
||||||
|
|
||||||
#if HAS_TMC_SPI
|
|
||||||
#define SET_CS_PIN(st) OUT_WRITE(st##_CS_PIN, HIGH)
|
|
||||||
void tmc_init_cs_pins() {
|
|
||||||
#if AXIS_HAS_SPI(X)
|
|
||||||
SET_CS_PIN(X);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(Y)
|
|
||||||
SET_CS_PIN(Y);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(Z)
|
|
||||||
SET_CS_PIN(Z);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(X2)
|
|
||||||
SET_CS_PIN(X2);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(Y2)
|
|
||||||
SET_CS_PIN(Y2);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(Z2)
|
|
||||||
SET_CS_PIN(Z2);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(Z3)
|
|
||||||
SET_CS_PIN(Z3);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(Z4)
|
|
||||||
SET_CS_PIN(Z4);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(I)
|
|
||||||
SET_CS_PIN(I);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(J)
|
|
||||||
SET_CS_PIN(J);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(K)
|
|
||||||
SET_CS_PIN(K);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(U)
|
|
||||||
SET_CS_PIN(U);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(V)
|
|
||||||
SET_CS_PIN(V);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(W)
|
|
||||||
SET_CS_PIN(W);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(E0)
|
|
||||||
SET_CS_PIN(E0);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(E1)
|
|
||||||
SET_CS_PIN(E1);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(E2)
|
|
||||||
SET_CS_PIN(E2);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(E3)
|
|
||||||
SET_CS_PIN(E3);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(E4)
|
|
||||||
SET_CS_PIN(E4);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(E5)
|
|
||||||
SET_CS_PIN(E5);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(E6)
|
|
||||||
SET_CS_PIN(E6);
|
|
||||||
#endif
|
|
||||||
#if AXIS_HAS_SPI(E7)
|
|
||||||
SET_CS_PIN(E7);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif // HAS_TMC_SPI
|
|
||||||
|
|
|
||||||
|
|
@ -474,7 +474,3 @@ void test_tmc_connection(LOGICAL_AXIS_DECL_LC(const bool, true));
|
||||||
#endif // HAS_HOMING_CURRENT
|
#endif // HAS_HOMING_CURRENT
|
||||||
|
|
||||||
#endif // HAS_TRINAMIC_CONFIG
|
#endif // HAS_TRINAMIC_CONFIG
|
||||||
|
|
||||||
#if HAS_TMC_SPI
|
|
||||||
void tmc_init_cs_pins();
|
|
||||||
#endif
|
|
||||||
|
|
|
||||||
|
|
@ -143,6 +143,11 @@ void GcodeSuite::G34() {
|
||||||
|
|
||||||
probe.use_probing_tool();
|
probe.use_probing_tool();
|
||||||
|
|
||||||
|
#ifdef EVENT_GCODE_BEFORE_G34
|
||||||
|
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Before G34 G-code: ", F(EVENT_GCODE_BEFORE_G34));
|
||||||
|
gcode.process_subcommands_now(F(EVENT_GCODE_BEFORE_G34));
|
||||||
|
#endif
|
||||||
|
|
||||||
TERN_(HAS_DUPLICATION_MODE, set_duplication_enabled(false));
|
TERN_(HAS_DUPLICATION_MODE, set_duplication_enabled(false));
|
||||||
|
|
||||||
// Compute a worst-case clearance height to probe from. After the first
|
// Compute a worst-case clearance height to probe from. After the first
|
||||||
|
|
@ -214,19 +219,20 @@ void GcodeSuite::G34() {
|
||||||
// Probing sanity check is disabled, as it would trigger even in normal cases because
|
// Probing sanity check is disabled, as it would trigger even in normal cases because
|
||||||
// current_position.z has been manually altered in the "dirty trick" above.
|
// current_position.z has been manually altered in the "dirty trick" above.
|
||||||
|
|
||||||
if (DEBUGGING(LEVELING))
|
const float minz = (Z_PROBE_LOW_POINT) - (z_probe * 0.5f);
|
||||||
DEBUG_ECHOLNPGM(
|
|
||||||
"Z_PROBE_LOW_POINT: ", p_float_t(Z_PROBE_LOW_POINT, 2),
|
if (DEBUGGING(LEVELING)) {
|
||||||
"z_probe: ", p_float_t(z_probe, 2),
|
DEBUG_ECHOPGM("Z_PROBE_LOW_POINT: " STRINGIFY(Z_PROBE_LOW_POINT));
|
||||||
"Probe Tgt: ", p_float_t((Z_PROBE_LOW_POINT) - z_probe * 0.5f, 2)
|
DEBUG_ECHOLNPGM(" z_probe: ", p_float_t(z_probe, 3),
|
||||||
);
|
" Probe Tgt: ", p_float_t(minz, 3));
|
||||||
|
}
|
||||||
|
|
||||||
const float z_probed_height = probe.probe_at_point(
|
const float z_probed_height = probe.probe_at_point(
|
||||||
DIFF_TERN(HAS_HOME_OFFSET, ppos, xy_pos_t(home_offset)), // xy
|
DIFF_TERN(HAS_HOME_OFFSET, ppos, xy_pos_t(home_offset)), // xy
|
||||||
raise_after, // raise_after
|
raise_after, // raise_after
|
||||||
(DEBUGGING(LEVELING) || DEBUGGING(INFO)) ? 3 : 0, // verbose_level
|
(DEBUGGING(LEVELING) || DEBUGGING(INFO)) ? 3 : 0, // verbose_level
|
||||||
true, false, // probe_relative, sanity_check
|
true, false, // probe_relative, sanity_check
|
||||||
(Z_PROBE_LOW_POINT) - (z_probe * 0.5f), // z_min_point
|
minz, // z_min_point
|
||||||
Z_TWEEN_SAFE_CLEARANCE // z_clearance
|
Z_TWEEN_SAFE_CLEARANCE // z_clearance
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -303,7 +309,7 @@ void GcodeSuite::G34() {
|
||||||
|
|
||||||
SERIAL_EOL();
|
SERIAL_EOL();
|
||||||
|
|
||||||
SString<15 + TERN0(TRIPLE_Z, 30) + TERN0(QUAD_Z, 45)> msg(F("1:2="), p_float_t(ABS(z_measured[1] - z_measured[0]), 3));
|
SString<15 + TERN0(TRIPLE_Z, 30) + TERN0(QUAD_Z, 45)> msg(F("2-1="), p_float_t(ABS(z_measured[1] - z_measured[0]), 3));
|
||||||
#if TRIPLE_Z
|
#if TRIPLE_Z
|
||||||
msg.append(F(" 3-2="), p_float_t(ABS(z_measured[2] - z_measured[1]), 3))
|
msg.append(F(" 3-2="), p_float_t(ABS(z_measured[2] - z_measured[1]), 3))
|
||||||
.append(F(" 3-1="), p_float_t(ABS(z_measured[2] - z_measured[0]), 3));
|
.append(F(" 3-1="), p_float_t(ABS(z_measured[2] - z_measured[0]), 3));
|
||||||
|
|
@ -414,7 +420,7 @@ void GcodeSuite::G34() {
|
||||||
SERIAL_ECHOLNPGM("G34 aborted.");
|
SERIAL_ECHOLNPGM("G34 aborted.");
|
||||||
else {
|
else {
|
||||||
SERIAL_ECHOLNPGM("Did ", iteration + (iteration != z_auto_align_iterations), " of ", z_auto_align_iterations);
|
SERIAL_ECHOLNPGM("Did ", iteration + (iteration != z_auto_align_iterations), " of ", z_auto_align_iterations);
|
||||||
SERIAL_ECHOLNPGM("Accuracy: ", p_float_t(z_maxdiff, 2));
|
SERIAL_ECHOLNPGM("Accuracy: ", p_float_t(z_maxdiff, 3));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stow the probe because the last call to probe.probe_at_point(...)
|
// Stow the probe because the last call to probe.probe_at_point(...)
|
||||||
|
|
@ -430,9 +436,9 @@ void GcodeSuite::G34() {
|
||||||
// Ideally, this would be equal to the 'z_probe * 0.5f' which was added earlier.
|
// Ideally, this would be equal to the 'z_probe * 0.5f' which was added earlier.
|
||||||
if (DEBUGGING(LEVELING))
|
if (DEBUGGING(LEVELING))
|
||||||
DEBUG_ECHOLNPGM(
|
DEBUG_ECHOLNPGM(
|
||||||
"z_measured_min: ", p_float_t(z_measured_min, 2),
|
"z_measured_min: ", p_float_t(z_measured_min, 3),
|
||||||
"Z_TWEEN_SAFE_CLEARANCE: ", p_float_t(Z_TWEEN_SAFE_CLEARANCE, 2),
|
"Z_TWEEN_SAFE_CLEARANCE: ", p_float_t(Z_TWEEN_SAFE_CLEARANCE, 3),
|
||||||
"zoffs: ", p_float_t(zoffs, 2)
|
"zoffs: ", p_float_t(zoffs, 3)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!err_break)
|
if (!err_break)
|
||||||
|
|
@ -440,6 +446,12 @@ void GcodeSuite::G34() {
|
||||||
sync_plan_position();
|
sync_plan_position();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef EVENT_GCODE_AFTER_G34
|
||||||
|
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("After G34 G-code: ", F(EVENT_GCODE_AFTER_G34));
|
||||||
|
planner.synchronize();
|
||||||
|
process_subcommands_now(F(EVENT_GCODE_AFTER_G34));
|
||||||
|
#endif
|
||||||
|
|
||||||
probe.use_probing_tool(false);
|
probe.use_probing_tool(false);
|
||||||
|
|
||||||
#if ALL(HAS_LEVELING, RESTORE_LEVELING_AFTER_G34)
|
#if ALL(HAS_LEVELING, RESTORE_LEVELING_AFTER_G34)
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,8 @@ void GcodeSuite::M993() {
|
||||||
W25QXX.SPI_FLASH_BufferRead(buf, addr, COUNT(buf));
|
W25QXX.SPI_FLASH_BufferRead(buf, addr, COUNT(buf));
|
||||||
addr += COUNT(buf);
|
addr += COUNT(buf);
|
||||||
card.write(buf, COUNT(buf));
|
card.write(buf, COUNT(buf));
|
||||||
if (addr % (COUNT(buf) * 10) == 0) SERIAL_CHAR('.');
|
if (!(addr % (COUNT(buf) * 10))) SERIAL_CHAR('.');
|
||||||
|
if (!(addr % (COUNT(buf) * 32))) hal.watchdog_refresh();
|
||||||
}
|
}
|
||||||
SERIAL_ECHOLNPGM(" done");
|
SERIAL_ECHOLNPGM(" done");
|
||||||
|
|
||||||
|
|
@ -78,7 +79,8 @@ void GcodeSuite::M994() {
|
||||||
card.read(buf, COUNT(buf));
|
card.read(buf, COUNT(buf));
|
||||||
W25QXX.SPI_FLASH_BufferWrite(buf, addr, COUNT(buf));
|
W25QXX.SPI_FLASH_BufferWrite(buf, addr, COUNT(buf));
|
||||||
addr += COUNT(buf);
|
addr += COUNT(buf);
|
||||||
if (addr % (COUNT(buf) * 10) == 0) SERIAL_CHAR('.');
|
if (!(addr % (COUNT(buf) * 10))) SERIAL_CHAR('.');
|
||||||
|
if (!(addr % (COUNT(buf) * 32))) hal.watchdog_refresh();
|
||||||
}
|
}
|
||||||
SERIAL_ECHOLNPGM(" done");
|
SERIAL_ECHOLNPGM(" done");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,9 @@
|
||||||
*
|
*
|
||||||
* With TMC_DEBUG:
|
* With TMC_DEBUG:
|
||||||
* V - Report raw register data. Refer to the datasheet to decipher the report.
|
* V - Report raw register data. Refer to the datasheet to decipher the report.
|
||||||
* S - Flag to enable/disable continuous debug reporting.
|
* S0 - Disable continuous debug reporting.
|
||||||
* P<ms> - Interval between continuous debug reports, in milliseconds.
|
* S1 - Enable continuous debug reporting with the default interval.
|
||||||
|
* P<ms> - Enable continuous debug reporting with the given interval in ms.
|
||||||
*/
|
*/
|
||||||
void GcodeSuite::M122() {
|
void GcodeSuite::M122() {
|
||||||
xyze_bool_t print_axis = ARRAY_N_1(LOGICAL_AXES, false);
|
xyze_bool_t print_axis = ARRAY_N_1(LOGICAL_AXES, false);
|
||||||
|
|
@ -51,12 +52,12 @@ void GcodeSuite::M122() {
|
||||||
|
|
||||||
#if ENABLED(TMC_DEBUG)
|
#if ENABLED(TMC_DEBUG)
|
||||||
#if ENABLED(MONITOR_DRIVER_STATUS)
|
#if ENABLED(MONITOR_DRIVER_STATUS)
|
||||||
const bool sflag = parser.seen_test('S'), sval = sflag && parser.value_bool();
|
const bool sflag = parser.seen('S'), sval = sflag && parser.value_bool();
|
||||||
if (sflag && !sval)
|
if (sflag && !sval) // "S0"
|
||||||
tmc_set_report_interval(0);
|
tmc_set_report_interval(0);
|
||||||
else if (parser.seenval('P'))
|
else if (parser.seenval('P')) // "P<ms>"
|
||||||
tmc_set_report_interval(_MAX(uint16_t(250), parser.value_ushort()));
|
tmc_set_report_interval(_MAX(uint16_t(250), parser.value_ushort()));
|
||||||
else if (sval)
|
else if (sval) // "S" or "S1"
|
||||||
tmc_set_report_interval(MONITOR_DRIVER_STATUS_INTERVAL_MS);
|
tmc_set_report_interval(MONITOR_DRIVER_STATUS_INTERVAL_MS);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,44 +40,44 @@
|
||||||
* M920: Set Homing Current for one or more axes
|
* M920: Set Homing Current for one or more axes
|
||||||
*
|
*
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* X[current] - Homing Current to use for X axis stepper(s)
|
* X<current> - Homing Current to use for X axis stepper(s)
|
||||||
* Y[current] - Homing Current to use for Y axis stepper(s)
|
* Y<current> - Homing Current to use for Y axis stepper(s)
|
||||||
* Z[current] - Homing Current to use for Z axis stepper(s)
|
* Z<current> - Homing Current to use for Z axis stepper(s)
|
||||||
* A[current] - Homing Current to use for A axis stepper(s)
|
* A<current> - Homing Current to use for A axis stepper(s)
|
||||||
* B[current] - Homing Current to use for B axis stepper(s)
|
* B<current> - Homing Current to use for B axis stepper(s)
|
||||||
* C[current] - Homing Current to use for C axis stepper(s)
|
* C<current> - Homing Current to use for C axis stepper(s)
|
||||||
* U[current] - Homing Current to use for U axis stepper(s)
|
* U<current> - Homing Current to use for U axis stepper(s)
|
||||||
* V[current] - Homing Current to use for V axis stepper(s)
|
* V<current> - Homing Current to use for V axis stepper(s)
|
||||||
* W[current] - Homing Current to use for W axis stepper(s)
|
* W<current> - Homing Current to use for W axis stepper(s)
|
||||||
*
|
*
|
||||||
* I<index> - For multi-stepper axes, the zero-based index of the stepper to modify in each axis.
|
* I<index> - For multi-stepper axes, the zero-based index of the stepper to modify in each axis.
|
||||||
* If omitted all steppers of each axis will be set to the given axis current.
|
* If omitted all steppers of each axis will be set to the given axis current.
|
||||||
*/
|
*/
|
||||||
void GcodeSuite::M920() {
|
void GcodeSuite::M920() {
|
||||||
bool report = true;
|
bool report = true;
|
||||||
const uint8_t index = parser.byteval(I_PARAM);
|
const int8_t index = parser.intval(I_PARAM, -1);
|
||||||
LOOP_NUM_AXES(i) if (parser.seen(AXIS_CHAR(i))) {
|
LOOP_NUM_AXES(i) if (parser.seen(AXIS_CHAR(i))) {
|
||||||
const int16_t value = parser.value_int();
|
const int16_t value = parser.value_int();
|
||||||
report = false;
|
report = false;
|
||||||
switch (i) {
|
switch (i) {
|
||||||
#if X_HAS_HOME_CURRENT
|
#if X_HAS_HOME_CURRENT
|
||||||
case X_AXIS:
|
case X_AXIS:
|
||||||
if (index < 1) homing_current_mA.X = value;
|
if (index <= 0) homing_current_mA.X = value;
|
||||||
TERN_(X2_HAS_HOME_CURRENT, if (!index || index == 1) homing_current_mA.X2 = value);
|
TERN_(X2_HAS_HOME_CURRENT, if (index < 0 || index == 1) homing_current_mA.X2 = value);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#if Y_HAS_HOME_CURRENT
|
#if Y_HAS_HOME_CURRENT
|
||||||
case Y_AXIS:
|
case Y_AXIS:
|
||||||
if (index < 1) homing_current_mA.Y = value;
|
if (index <= 0) homing_current_mA.Y = value;
|
||||||
TERN_(Y2_HAS_HOME_CURRENT, if (!index || index == 1) homing_current_mA.Y2 = value);
|
TERN_(Y2_HAS_HOME_CURRENT, if (index < 0 || index == 1) homing_current_mA.Y2 = value);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#if Z_HAS_HOME_CURRENT
|
#if Z_HAS_HOME_CURRENT
|
||||||
case Z_AXIS:
|
case Z_AXIS:
|
||||||
if (index < 1) homing_current_mA.Z = value;
|
if (index <= 0) homing_current_mA.Z = value;
|
||||||
TERN_(Z2_HAS_HOME_CURRENT, if (!index || index == 1) homing_current_mA.Z2 = value);
|
TERN_(Z2_HAS_HOME_CURRENT, if (index < 0 || index == 1) homing_current_mA.Z2 = value);
|
||||||
TERN_(Z3_HAS_HOME_CURRENT, if (!index || index == 2) homing_current_mA.Z3 = value);
|
TERN_(Z3_HAS_HOME_CURRENT, if (index < 0 || index == 2) homing_current_mA.Z3 = value);
|
||||||
TERN_(Z4_HAS_HOME_CURRENT, if (!index || index == 3) homing_current_mA.Z4 = value);
|
TERN_(Z4_HAS_HOME_CURRENT, if (index < 0 || index == 3) homing_current_mA.Z4 = value);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
OPTCODE(I_HAS_HOME_CURRENT, case I_AXIS: homing_current_mA.I = value; break)
|
OPTCODE(I_HAS_HOME_CURRENT, case I_AXIS: homing_current_mA.I = value; break)
|
||||||
|
|
@ -97,7 +97,7 @@ void GcodeSuite::M920_report(const bool forReplay/*=true*/) {
|
||||||
|
|
||||||
report_heading(forReplay, F(STR_HOMING_CURRENT));
|
report_heading(forReplay, F(STR_HOMING_CURRENT));
|
||||||
|
|
||||||
auto say_M920 = [](const bool forReplay, int16_t index=-1) {
|
auto say_M920 = [](const bool forReplay, int8_t index=-1) {
|
||||||
report_echo_start(forReplay);
|
report_echo_start(forReplay);
|
||||||
SERIAL_ECHOPGM(" M920");
|
SERIAL_ECHOPGM(" M920");
|
||||||
if (index >= 0) SERIAL_ECHOPGM(" " I_PARAM_STR, index);
|
if (index >= 0) SERIAL_ECHOPGM(" " I_PARAM_STR, index);
|
||||||
|
|
@ -113,6 +113,7 @@ void GcodeSuite::M920_report(const bool forReplay/*=true*/) {
|
||||||
TERN_(Y_SENSORLESS, SERIAL_ECHOPGM_P(SP_Y_STR, homing_current_mA.Y));
|
TERN_(Y_SENSORLESS, SERIAL_ECHOPGM_P(SP_Y_STR, homing_current_mA.Y));
|
||||||
TERN_(Z_SENSORLESS, SERIAL_ECHOPGM_P(SP_Z_STR, homing_current_mA.Z));
|
TERN_(Z_SENSORLESS, SERIAL_ECHOPGM_P(SP_Z_STR, homing_current_mA.Z));
|
||||||
#if X2_SENSORLESS || Y2_SENSORLESS || Z2_SENSORLESS || Z3_SENSORLESS || Z4_SENSORLESS
|
#if X2_SENSORLESS || Y2_SENSORLESS || Z2_SENSORLESS || Z3_SENSORLESS || Z4_SENSORLESS
|
||||||
|
SERIAL_EOL();
|
||||||
say_M920(forReplay);
|
say_M920(forReplay);
|
||||||
#endif
|
#endif
|
||||||
TERN_(I_SENSORLESS, SERIAL_ECHOPGM_P(SP_I_STR, homing_current_mA.I));
|
TERN_(I_SENSORLESS, SERIAL_ECHOPGM_P(SP_I_STR, homing_current_mA.I));
|
||||||
|
|
|
||||||
|
|
@ -677,7 +677,3 @@
|
||||||
#if ANY(PID_DEBUG, PID_BED_DEBUG, PID_CHAMBER_DEBUG)
|
#if ANY(PID_DEBUG, PID_BED_DEBUG, PID_CHAMBER_DEBUG)
|
||||||
#define HAS_PID_DEBUG 1
|
#define HAS_PID_DEBUG 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ALL(SPI_FLASH, HAS_MEDIA, MARLIN_DEV_MODE)
|
|
||||||
#define SPI_FLASH_BACKUP 1
|
|
||||||
#endif
|
|
||||||
|
|
|
||||||
|
|
@ -1591,3 +1591,8 @@
|
||||||
#undef AUTO_REPORT_SD_STATUS
|
#undef AUTO_REPORT_SD_STATUS
|
||||||
#define AUTO_REPORT_SD_STATUS
|
#define AUTO_REPORT_SD_STATUS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// SPI Flash Backup
|
||||||
|
#if ALL(SPI_FLASH, HAS_MEDIA, MARLIN_DEV_MODE)
|
||||||
|
#define SPI_FLASH_BACKUP 1
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -3593,3 +3593,8 @@
|
||||||
#if ANY(AUTO_BED_LEVELING_UBL, M100_FREE_MEMORY_WATCHER, DEBUG_GCODE_PARSER, TMC_DEBUG, MARLIN_DEV_MODE, DEBUG_CARDREADER, M20_TIMESTAMP_SUPPORT, HAS_STM32_UID)
|
#if ANY(AUTO_BED_LEVELING_UBL, M100_FREE_MEMORY_WATCHER, DEBUG_GCODE_PARSER, TMC_DEBUG, MARLIN_DEV_MODE, DEBUG_CARDREADER, M20_TIMESTAMP_SUPPORT, HAS_STM32_UID)
|
||||||
#define NEED_HEX_PRINT 1
|
#define NEED_HEX_PRINT 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// SPI Flash Backup
|
||||||
|
#if ALL(SPI_FLASH, HAS_MEDIA, MARLIN_DEV_MODE)
|
||||||
|
#define SPI_FLASH_BACKUP 1
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@
|
||||||
* version was tagged.
|
* version was tagged.
|
||||||
*/
|
*/
|
||||||
#ifndef STRING_DISTRIBUTION_DATE
|
#ifndef STRING_DISTRIBUTION_DATE
|
||||||
#define STRING_DISTRIBUTION_DATE "2025-06-17"
|
#define STRING_DISTRIBUTION_DATE "2025-06-29"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -853,9 +853,18 @@ void MarlinUI::draw_status_message(const bool blink) {
|
||||||
if (printJobOngoing()) {
|
if (printJobOngoing()) {
|
||||||
char buffer[8];
|
char buffer[8];
|
||||||
const duration_t remaint = get_remaining_time();
|
const duration_t remaint = get_remaining_time();
|
||||||
const uint8_t timepos = TPOFFSET - remaint.toDigital(buffer);
|
#if LCD_INFO_SCREEN_STYLE == 0
|
||||||
IF_DISABLED(LCD_INFO_SCREEN_STYLE, lcd_put_lchar(timepos - 1, 2, 0x20));
|
const uint8_t timepos = TPOFFSET - remaint.toDigital(buffer);
|
||||||
lcd_put_lchar(TERN(LCD_INFO_SCREEN_STYLE, 11, timepos), 2, 'R');
|
lcd_put_lchar(timepos - 1, 2, ' ');
|
||||||
|
#endif
|
||||||
|
lcd_put_lchar(
|
||||||
|
#if LCD_INFO_SCREEN_STYLE == 0
|
||||||
|
timepos
|
||||||
|
#else
|
||||||
|
11
|
||||||
|
#endif
|
||||||
|
, 2, 'R'
|
||||||
|
);
|
||||||
lcd_put_u8str(buffer);
|
lcd_put_u8str(buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -866,9 +875,18 @@ void MarlinUI::draw_status_message(const bool blink) {
|
||||||
const duration_t interactt = interaction_time;
|
const duration_t interactt = interaction_time;
|
||||||
if (printingIsActive() && interactt.value) {
|
if (printingIsActive() && interactt.value) {
|
||||||
char buffer[8];
|
char buffer[8];
|
||||||
const uint8_t timepos = TPOFFSET - interactt.toDigital(buffer);
|
#if LCD_INFO_SCREEN_STYLE == 0
|
||||||
IF_DISABLED(LCD_INFO_SCREEN_STYLE, lcd_put_lchar(timepos - 1, 2, 0x20));
|
const uint8_t timepos = TPOFFSET - interactt.toDigital(buffer);
|
||||||
lcd_put_lchar(TERN(LCD_INFO_SCREEN_STYLE, 11, timepos), 2, 'C');
|
lcd_put_lchar(timepos - 1, 2, ' ');
|
||||||
|
#endif
|
||||||
|
lcd_put_lchar(
|
||||||
|
#if LCD_INFO_SCREEN_STYLE == 0
|
||||||
|
timepos
|
||||||
|
#else
|
||||||
|
11
|
||||||
|
#endif
|
||||||
|
, 2, 'C'
|
||||||
|
);
|
||||||
lcd_put_u8str(buffer);
|
lcd_put_u8str(buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -879,9 +897,18 @@ void MarlinUI::draw_status_message(const bool blink) {
|
||||||
if (printJobOngoing()) {
|
if (printJobOngoing()) {
|
||||||
char buffer[8];
|
char buffer[8];
|
||||||
const duration_t elapsedt = print_job_timer.duration();
|
const duration_t elapsedt = print_job_timer.duration();
|
||||||
const uint8_t timepos = TPOFFSET - elapsedt.toDigital(buffer);
|
#if LCD_INFO_SCREEN_STYLE == 0
|
||||||
IF_DISABLED(LCD_INFO_SCREEN_STYLE, lcd_put_lchar(timepos - 1, 2, 0x20));
|
const uint8_t timepos = TPOFFSET - elapsedt.toDigital(buffer);
|
||||||
lcd_put_lchar(TERN(LCD_INFO_SCREEN_STYLE, 11, timepos), 2, 'E');
|
lcd_put_lchar(timepos - 1, 2, ' ');
|
||||||
|
#endif
|
||||||
|
lcd_put_lchar(
|
||||||
|
#if LCD_INFO_SCREEN_STYLE == 0
|
||||||
|
timepos
|
||||||
|
#else
|
||||||
|
11
|
||||||
|
#endif
|
||||||
|
, 2, 'E'
|
||||||
|
);
|
||||||
lcd_put_u8str(buffer);
|
lcd_put_u8str(buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -74,10 +74,13 @@ void lv_draw_advance_settings() {
|
||||||
scr = lv_screen_create(ADVANCED_UI, machine_menu.AdvancedConfTitle);
|
scr = lv_screen_create(ADVANCED_UI, machine_menu.AdvancedConfTitle);
|
||||||
|
|
||||||
int index = 0;
|
int index = 0;
|
||||||
lv_screen_menu_item(scr, machine_menu.PausePosition, PARA_UI_POS_X, PARA_UI_POS_Y, event_handler, ID_PAUSE_POS, index++);
|
lv_screen_menu_item(scr, machine_menu.PausePosition, PARA_UI_POS_X, PARA_UI_POS_Y, event_handler, ID_PAUSE_POS, index);
|
||||||
lv_screen_menu_item(scr, machine_menu.FilamentConf, PARA_UI_POS_X, PARA_UI_POS_Y * 2, event_handler, ID_FILAMENT_SETTINGS, index++);
|
index++;
|
||||||
|
lv_screen_menu_item(scr, machine_menu.FilamentConf, PARA_UI_POS_X, PARA_UI_POS_Y * 2, event_handler, ID_FILAMENT_SETTINGS, index);
|
||||||
|
index++;
|
||||||
#if ENABLED(MKS_WIFI_MODULE)
|
#if ENABLED(MKS_WIFI_MODULE)
|
||||||
lv_screen_menu_item(scr, machine_menu.WifiSettings, PARA_UI_POS_X, PARA_UI_POS_Y * 3, event_handler, ID_WIFI_PARA, index++);
|
lv_screen_menu_item(scr, machine_menu.WifiSettings, PARA_UI_POS_X, PARA_UI_POS_Y * 3, event_handler, ID_WIFI_PARA, index);
|
||||||
|
index++;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_ROTARY_ENCODER
|
#if HAS_ROTARY_ENCODER
|
||||||
lv_screen_menu_item(scr, machine_menu.EncoderSettings, PARA_UI_POS_X, PARA_UI_POS_Y * (index + 1), event_handler, ID_ENCODER_SETTINGS, index);
|
lv_screen_menu_item(scr, machine_menu.EncoderSettings, PARA_UI_POS_X, PARA_UI_POS_Y * (index + 1), event_handler, ID_ENCODER_SETTINGS, index);
|
||||||
|
|
|
||||||
|
|
@ -69,17 +69,21 @@ void lv_draw_motor_settings() {
|
||||||
scr = lv_screen_create(MOTOR_SETTINGS_UI, machine_menu.MotorConfTitle);
|
scr = lv_screen_create(MOTOR_SETTINGS_UI, machine_menu.MotorConfTitle);
|
||||||
|
|
||||||
#if ENABLED(EDITABLE_STEPS_PER_UNIT)
|
#if ENABLED(EDITABLE_STEPS_PER_UNIT)
|
||||||
lv_screen_menu_item(scr, machine_menu.StepsConf, PARA_UI_POS_X, PARA_UI_POS_Y, event_handler, ID_MOTOR_STEPS, index++);
|
lv_screen_menu_item(scr, machine_menu.StepsConf, PARA_UI_POS_X, PARA_UI_POS_Y, event_handler, ID_MOTOR_STEPS, index);
|
||||||
|
index++;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if USE_SENSORLESS
|
#if USE_SENSORLESS
|
||||||
lv_screen_menu_item(scr, machine_menu.HomingSensitivityConf, PARA_UI_POS_X, PARA_UI_POS_Y * (index + 1), event_handler, ID_HOME_SENSE, index++);
|
lv_screen_menu_item(scr, machine_menu.HomingSensitivityConf, PARA_UI_POS_X, PARA_UI_POS_Y * (index + 1), event_handler, ID_HOME_SENSE, index);
|
||||||
|
index++;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAS_TRINAMIC_CONFIG
|
#if HAS_TRINAMIC_CONFIG
|
||||||
lv_screen_menu_item(scr, machine_menu.TMCcurrentConf, PARA_UI_POS_X, PARA_UI_POS_Y * (index + 1), event_handler, ID_MOTOR_TMC_CURRENT, index++);
|
lv_screen_menu_item(scr, machine_menu.TMCcurrentConf, PARA_UI_POS_X, PARA_UI_POS_Y * (index + 1), event_handler, ID_MOTOR_TMC_CURRENT, index);
|
||||||
|
index++;
|
||||||
#if HAS_STEALTHCHOP
|
#if HAS_STEALTHCHOP
|
||||||
lv_screen_menu_item(scr, machine_menu.TMCStepModeConf, PARA_UI_POS_X, PARA_UI_POS_Y * (index + 1), event_handler, ID_MOTOR_STEP_MODE, index++);
|
lv_screen_menu_item(scr, machine_menu.TMCStepModeConf, PARA_UI_POS_X, PARA_UI_POS_Y * (index + 1), event_handler, ID_MOTOR_STEP_MODE, index);
|
||||||
|
index++;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X + 10, PARA_UI_BACK_POS_Y, event_handler, ID_MOTOR_RETURN, true);
|
lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X + 10, PARA_UI_BACK_POS_Y, event_handler, ID_MOTOR_RETURN, true);
|
||||||
|
|
|
||||||
|
|
@ -887,8 +887,6 @@ uint8_t exploreDisk(const char * const path, const uint8_t recu_level, const boo
|
||||||
|
|
||||||
const int16_t fileCnt = card.get_num_items();
|
const int16_t fileCnt = card.get_num_items();
|
||||||
|
|
||||||
MediaFile file;
|
|
||||||
MediaFile *diveDir;
|
|
||||||
for (int16_t i = 0; i < fileCnt; i++) {
|
for (int16_t i = 0; i < fileCnt; i++) {
|
||||||
card.selectFileByIndexSorted(i);
|
card.selectFileByIndexSorted(i);
|
||||||
|
|
||||||
|
|
@ -913,7 +911,7 @@ uint8_t exploreDisk(const char * const path, const uint8_t recu_level, const boo
|
||||||
}
|
}
|
||||||
|
|
||||||
static void wifi_gcode_exec(uint8_t * const cmd_line) {
|
static void wifi_gcode_exec(uint8_t * const cmd_line) {
|
||||||
int8_t tempBuf[100] = { 0 };
|
char tempBuf[100] = { '\0' };
|
||||||
int cmd_value;
|
int cmd_value;
|
||||||
volatile int print_rate;
|
volatile int print_rate;
|
||||||
|
|
||||||
|
|
@ -961,7 +959,7 @@ static void wifi_gcode_exec(uint8_t * const cmd_line) {
|
||||||
while (mStr[index] == ' ') index++;
|
while (mStr[index] == ' ') index++;
|
||||||
|
|
||||||
if (gCfgItems.wifi_type == ESP_WIFI) {
|
if (gCfgItems.wifi_type == ESP_WIFI) {
|
||||||
char * const path = (char *)tempBuf;
|
char * const path = tempBuf;
|
||||||
if (strlen(&mStr[index]) < 80) {
|
if (strlen(&mStr[index]) < 80) {
|
||||||
print_to_wifi(STR_BEGIN_FILE_LIST "\r\n");
|
print_to_wifi(STR_BEGIN_FILE_LIST "\r\n");
|
||||||
|
|
||||||
|
|
@ -1149,7 +1147,7 @@ static void wifi_gcode_exec(uint8_t * const cmd_line) {
|
||||||
if (uiCfg.print_state == WORKING || uiCfg.print_state == PAUSED|| uiCfg.print_state == REPRINTING) {
|
if (uiCfg.print_state == WORKING || uiCfg.print_state == PAUSED|| uiCfg.print_state == REPRINTING) {
|
||||||
print_rate = uiCfg.totalSend;
|
print_rate = uiCfg.totalSend;
|
||||||
ZERO(tempBuf);
|
ZERO(tempBuf);
|
||||||
sprintf_P((char *)tempBuf, PSTR("M27 %d\r\n"), print_rate);
|
sprintf_P(tempBuf, PSTR("M27 %d\r\n"), print_rate);
|
||||||
print_to_wifi(tempBuf);
|
print_to_wifi(tempBuf);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -1166,11 +1164,11 @@ static void wifi_gcode_exec(uint8_t * const cmd_line) {
|
||||||
|
|
||||||
if (gCfgItems.fileSysType == FILE_SYS_SD) {
|
if (gCfgItems.fileSysType == FILE_SYS_SD) {
|
||||||
ZERO(tempBuf);
|
ZERO(tempBuf);
|
||||||
sprintf_P((char *)tempBuf, PSTR("%s"), file_writer.saveFileName);
|
sprintf_P(tempBuf, PSTR("%s"), file_writer.saveFileName);
|
||||||
}
|
}
|
||||||
else if (gCfgItems.fileSysType == FILE_SYS_USB) {
|
else if (gCfgItems.fileSysType == FILE_SYS_USB) {
|
||||||
ZERO(tempBuf);
|
ZERO(tempBuf);
|
||||||
sprintf_P((char *)tempBuf, PSTR("%s"), (char *)file_writer.saveFileName);
|
sprintf_P(tempBuf, PSTR("%s"), (char *)file_writer.saveFileName);
|
||||||
}
|
}
|
||||||
mount_file_sys(gCfgItems.fileSysType);
|
mount_file_sys(gCfgItems.fileSysType);
|
||||||
|
|
||||||
|
|
@ -1181,7 +1179,7 @@ static void wifi_gcode_exec(uint8_t * const cmd_line) {
|
||||||
ZERO(file_writer.saveFileName);
|
ZERO(file_writer.saveFileName);
|
||||||
strcpy((char *)file_writer.saveFileName, &mStr[index]);
|
strcpy((char *)file_writer.saveFileName, &mStr[index]);
|
||||||
ZERO(tempBuf);
|
ZERO(tempBuf);
|
||||||
sprintf_P((char *)tempBuf, PSTR("Writing to file: %s\r\n"), (char *)file_writer.saveFileName);
|
sprintf_P(tempBuf, PSTR("Writing to file: %s\r\n"), (char *)file_writer.saveFileName);
|
||||||
wifi_ret_ack();
|
wifi_ret_ack();
|
||||||
print_to_wifi(tempBuf);
|
print_to_wifi(tempBuf);
|
||||||
wifi_link_state = WIFI_WAIT_TRANS_START;
|
wifi_link_state = WIFI_WAIT_TRANS_START;
|
||||||
|
|
@ -1203,7 +1201,7 @@ static void wifi_gcode_exec(uint8_t * const cmd_line) {
|
||||||
|
|
||||||
send_ok_to_wifi();
|
send_ok_to_wifi();
|
||||||
|
|
||||||
char *outBuf = (char *)tempBuf;
|
char *outBuf = tempBuf;
|
||||||
char tbuf[34];
|
char tbuf[34];
|
||||||
|
|
||||||
sprintf_P(tbuf, PSTR("%d /%d"), thermalManager.wholeDegHotend(0), thermalManager.degTargetHotend(0));
|
sprintf_P(tbuf, PSTR("%d /%d"), thermalManager.wholeDegHotend(0), thermalManager.degTargetHotend(0));
|
||||||
|
|
@ -1237,7 +1235,7 @@ static void wifi_gcode_exec(uint8_t * const cmd_line) {
|
||||||
strcat_P(outBuf, PSTR(" @:0 B@:0\r\n"));
|
strcat_P(outBuf, PSTR(" @:0 B@:0\r\n"));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sprintf_P((char *)tempBuf, PSTR("T:%d /%d B:%d /%d T0:%d /%d T1:%d /%d @:0 B@:0\r\n"),
|
sprintf_P(tempBuf, PSTR("T:%d /%d B:%d /%d T0:%d /%d T1:%d /%d @:0 B@:0\r\n"),
|
||||||
thermalManager.wholeDegHotend(0), thermalManager.degTargetHotend(0),
|
thermalManager.wholeDegHotend(0), thermalManager.degTargetHotend(0),
|
||||||
TERN0(HAS_HEATED_BED, thermalManager.wholeDegBed()),
|
TERN0(HAS_HEATED_BED, thermalManager.wholeDegBed()),
|
||||||
TERN0(HAS_HEATED_BED, thermalManager.degTargetBed()),
|
TERN0(HAS_HEATED_BED, thermalManager.degTargetBed()),
|
||||||
|
|
@ -1254,7 +1252,7 @@ static void wifi_gcode_exec(uint8_t * const cmd_line) {
|
||||||
case 992:
|
case 992:
|
||||||
if (uiCfg.print_state == WORKING || uiCfg.print_state == PAUSED) {
|
if (uiCfg.print_state == WORKING || uiCfg.print_state == PAUSED) {
|
||||||
ZERO(tempBuf);
|
ZERO(tempBuf);
|
||||||
sprintf_P((char *)tempBuf, PSTR("M992 %d%d:%d%d:%d%d\r\n"), print_time.hours/10, print_time.hours%10, print_time.minutes/10, print_time.minutes%10, print_time.seconds/10, print_time.seconds%10);
|
sprintf_P(tempBuf, PSTR("M992 %d%d:%d%d:%d%d\r\n"), print_time.hours/10, print_time.hours%10, print_time.minutes/10, print_time.minutes%10, print_time.seconds/10, print_time.seconds%10);
|
||||||
wifi_ret_ack();
|
wifi_ret_ack();
|
||||||
print_to_wifi(tempBuf);
|
print_to_wifi(tempBuf);
|
||||||
}
|
}
|
||||||
|
|
@ -1264,7 +1262,7 @@ static void wifi_gcode_exec(uint8_t * const cmd_line) {
|
||||||
if (uiCfg.print_state == WORKING || uiCfg.print_state == PAUSED) {
|
if (uiCfg.print_state == WORKING || uiCfg.print_state == PAUSED) {
|
||||||
ZERO(tempBuf);
|
ZERO(tempBuf);
|
||||||
if (strlen((char *)list_file.file_name[sel_id]) > (100 - 1)) return;
|
if (strlen((char *)list_file.file_name[sel_id]) > (100 - 1)) return;
|
||||||
sprintf_P((char *)tempBuf, PSTR("M994 %s;%d\n"), list_file.file_name[sel_id], (int)gCfgItems.curFilesize);
|
sprintf_P(tempBuf, PSTR("M994 %s;%d\n"), list_file.file_name[sel_id], (int)gCfgItems.curFilesize);
|
||||||
wifi_ret_ack();
|
wifi_ret_ack();
|
||||||
print_to_wifi(tempBuf);
|
print_to_wifi(tempBuf);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -656,7 +656,7 @@ public:
|
||||||
static FSTR_P get_preheat_label(const uint8_t m);
|
static FSTR_P get_preheat_label(const uint8_t m);
|
||||||
static void apply_preheat(const uint8_t m, const uint8_t pmask, const uint8_t e=active_extruder);
|
static void apply_preheat(const uint8_t m, const uint8_t pmask, const uint8_t e=active_extruder);
|
||||||
static void preheat_set_fan(const uint8_t m) { TERN_(HAS_FAN, apply_preheat(m, _BV(PT_FAN))); }
|
static void preheat_set_fan(const uint8_t m) { TERN_(HAS_FAN, apply_preheat(m, _BV(PT_FAN))); }
|
||||||
static void preheat_hotend(const uint8_t m, const uint8_t e=active_extruder) { TERN_(HAS_HOTEND, apply_preheat(m, _BV(PT_HOTEND))); }
|
static void preheat_hotend(const uint8_t m, const uint8_t e=active_extruder) { TERN_(HAS_HOTEND, apply_preheat(m, _BV(PT_HOTEND), e)); }
|
||||||
static void preheat_hotend_and_fan(const uint8_t m, const uint8_t e=active_extruder) { preheat_hotend(m, e); preheat_set_fan(m); }
|
static void preheat_hotend_and_fan(const uint8_t m, const uint8_t e=active_extruder) { preheat_hotend(m, e); preheat_set_fan(m); }
|
||||||
static void preheat_bed(const uint8_t m) { TERN_(HAS_HEATED_BED, apply_preheat(m, _BV(PT_BED))); }
|
static void preheat_bed(const uint8_t m) { TERN_(HAS_HEATED_BED, apply_preheat(m, _BV(PT_BED))); }
|
||||||
static void preheat_chamber(const uint8_t m) { TERN_(HAS_HEATED_CHAMBER, apply_preheat(m, _BV(PT_CHAMBER))); }
|
static void preheat_chamber(const uint8_t m) { TERN_(HAS_HEATED_CHAMBER, apply_preheat(m, _BV(PT_CHAMBER))); }
|
||||||
|
|
|
||||||
|
|
@ -107,6 +107,8 @@ xyz_pos_t Probe::offset; // Initialized by settings.load
|
||||||
|
|
||||||
#if HAS_PROBE_XY_OFFSET
|
#if HAS_PROBE_XY_OFFSET
|
||||||
const xy_pos_t &Probe::offset_xy = Probe::offset;
|
const xy_pos_t &Probe::offset_xy = Probe::offset;
|
||||||
|
#else
|
||||||
|
constexpr xy_pos_t Probe::offset_xy;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(SENSORLESS_PROBING)
|
#if ENABLED(SENSORLESS_PROBING)
|
||||||
|
|
|
||||||
|
|
@ -2882,7 +2882,7 @@ hal_timer_t Stepper::block_phase_isr() {
|
||||||
const bool forward_e = step_rate > 0;
|
const bool forward_e = step_rate > 0;
|
||||||
|
|
||||||
#if ENABLED(NONLINEAR_EXTRUSION)
|
#if ENABLED(NONLINEAR_EXTRUSION)
|
||||||
if (forward_e && ANY_AXIS_MOVES(current_block)) {
|
if (ne.settings.enabled && forward_e && ANY_AXIS_MOVES(current_block)) {
|
||||||
// Maximum polynomial value is just above 1, like 1.05..1.2, less than 2 anyway, so we can use 30 bits for fractional part
|
// Maximum polynomial value is just above 1, like 1.05..1.2, less than 2 anyway, so we can use 30 bits for fractional part
|
||||||
int32_t vd_q30 = ne.q30.A * sq(step_rate) + ne.q30.B * step_rate;
|
int32_t vd_q30 = ne.q30.A * sq(step_rate) + ne.q30.B * step_rate;
|
||||||
NOLESS(vd_q30, 0);
|
NOLESS(vd_q30, 0);
|
||||||
|
|
|
||||||
|
|
@ -154,6 +154,82 @@ enum StealthIndex : uint8_t {
|
||||||
TMC_SPI_DEFINE_E(7);
|
TMC_SPI_DEFINE_E(7);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if HAS_TMC_SPI
|
||||||
|
|
||||||
|
// Init CS pins (active-low) for TMC SPI drivers.
|
||||||
|
#define INIT_CS_PIN(st) OUT_WRITE(st##_CS_PIN, HIGH)
|
||||||
|
|
||||||
|
void tmc_init_cs_pins() {
|
||||||
|
#if AXIS_HAS_SPI(X)
|
||||||
|
INIT_CS_PIN(X);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(Y)
|
||||||
|
INIT_CS_PIN(Y);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(Z)
|
||||||
|
INIT_CS_PIN(Z);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(X2)
|
||||||
|
INIT_CS_PIN(X2);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(Y2)
|
||||||
|
INIT_CS_PIN(Y2);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(Z2)
|
||||||
|
INIT_CS_PIN(Z2);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(Z3)
|
||||||
|
INIT_CS_PIN(Z3);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(Z4)
|
||||||
|
INIT_CS_PIN(Z4);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(I)
|
||||||
|
INIT_CS_PIN(I);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(J)
|
||||||
|
INIT_CS_PIN(J);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(K)
|
||||||
|
INIT_CS_PIN(K);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(U)
|
||||||
|
INIT_CS_PIN(U);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(V)
|
||||||
|
INIT_CS_PIN(V);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(W)
|
||||||
|
INIT_CS_PIN(W);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(E0)
|
||||||
|
INIT_CS_PIN(E0);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(E1)
|
||||||
|
INIT_CS_PIN(E1);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(E2)
|
||||||
|
INIT_CS_PIN(E2);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(E3)
|
||||||
|
INIT_CS_PIN(E3);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(E4)
|
||||||
|
INIT_CS_PIN(E4);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(E5)
|
||||||
|
INIT_CS_PIN(E5);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(E6)
|
||||||
|
INIT_CS_PIN(E6);
|
||||||
|
#endif
|
||||||
|
#if AXIS_HAS_SPI(E7)
|
||||||
|
INIT_CS_PIN(E7);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // HAS_TMC_SPI
|
||||||
|
|
||||||
#ifndef TMC_BAUD_RATE
|
#ifndef TMC_BAUD_RATE
|
||||||
// Reduce baud rate for boards not already overriding TMC_BAUD_RATE for software serial.
|
// Reduce baud rate for boards not already overriding TMC_BAUD_RATE for software serial.
|
||||||
// Testing has shown that 115200 is not 100% reliable on AVR platforms, occasionally
|
// Testing has shown that 115200 is not 100% reliable on AVR platforms, occasionally
|
||||||
|
|
@ -313,6 +389,7 @@ enum StealthIndex : uint8_t {
|
||||||
// TMC2208/2209 Driver objects and inits
|
// TMC2208/2209 Driver objects and inits
|
||||||
//
|
//
|
||||||
#if HAS_TMC_UART
|
#if HAS_TMC_UART
|
||||||
|
|
||||||
#if AXIS_HAS_UART(X)
|
#if AXIS_HAS_UART(X)
|
||||||
#ifdef X_HARDWARE_SERIAL
|
#ifdef X_HARDWARE_SERIAL
|
||||||
TMC_UART_DEFINE(HW, X, X);
|
TMC_UART_DEFINE(HW, X, X);
|
||||||
|
|
@ -685,7 +762,8 @@ enum StealthIndex : uint8_t {
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
#endif // HAS_TMC_UART
|
||||||
|
|
||||||
#if HAS_DRIVER(TMC2208)
|
#if HAS_DRIVER(TMC2208)
|
||||||
template<char AXIS_LETTER, char DRIVER_ID, AxisEnum AXIS_ID>
|
template<char AXIS_LETTER, char DRIVER_ID, AxisEnum AXIS_ID>
|
||||||
|
|
|
||||||
|
|
@ -109,6 +109,10 @@
|
||||||
#define CHOPPER_TIMING_E CHOPPER_TIMING
|
#define CHOPPER_TIMING_E CHOPPER_TIMING
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if HAS_TMC_SPI
|
||||||
|
void tmc_init_cs_pins();
|
||||||
|
#endif
|
||||||
|
|
||||||
#if HAS_TMC_UART
|
#if HAS_TMC_UART
|
||||||
void tmc_serial_begin();
|
void tmc_serial_begin();
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -166,7 +166,7 @@
|
||||||
#if TEMP_SENSOR_IS_ANY_MAX_TC(2) && TEMP_SENSOR_2_HAS_SPI_PINS && DISABLED(TEMP_SENSOR_FORCE_HW_SPI)
|
#if TEMP_SENSOR_IS_ANY_MAX_TC(2) && TEMP_SENSOR_2_HAS_SPI_PINS && DISABLED(TEMP_SENSOR_FORCE_HW_SPI)
|
||||||
#define TEMP_SENSOR_2_USES_SW_SPI 1
|
#define TEMP_SENSOR_2_USES_SW_SPI 1
|
||||||
#endif
|
#endif
|
||||||
#if TEMP_SENSOR_IS_ANY_MAX_TC(BED) && TEMP_SENSOR_0_HAS_SPI_PINS && DISABLED(TEMP_SENSOR_FORCE_HW_SPI)
|
#if TEMP_SENSOR_IS_ANY_MAX_TC(BED) && TEMP_SENSOR_BED_HAS_SPI_PINS && DISABLED(TEMP_SENSOR_FORCE_HW_SPI)
|
||||||
#define TEMP_SENSOR_BED_USES_SW_SPI 1
|
#define TEMP_SENSOR_BED_USES_SW_SPI 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -226,7 +226,7 @@
|
||||||
#if ENABLED(SPI_FLASH)
|
#if ENABLED(SPI_FLASH)
|
||||||
#define HAS_SPI_FLASH 1
|
#define HAS_SPI_FLASH 1
|
||||||
#define SPI_DEVICE 2
|
#define SPI_DEVICE 2
|
||||||
#define SPI_FLASH_SIZE 0x1000000
|
#define SPI_FLASH_SIZE 0x1000000 // 16MB
|
||||||
#define SPI_FLASH_CS_PIN PB12
|
#define SPI_FLASH_CS_PIN PB12
|
||||||
#define SPI_FLASH_MOSI_PIN PC3
|
#define SPI_FLASH_MOSI_PIN PC3
|
||||||
#define SPI_FLASH_MISO_PIN PC2
|
#define SPI_FLASH_MISO_PIN PC2
|
||||||
|
|
|
||||||
|
|
@ -188,7 +188,7 @@ echo "Building example $CONFIG..."
|
||||||
# If doing many builds get a list of all environment names,
|
# If doing many builds get a list of all environment names,
|
||||||
# which also gives us the number of environments.
|
# which also gives us the number of environments.
|
||||||
if ((MANY)); then
|
if ((MANY)); then
|
||||||
ENVLIST=$(mfenvs) # BOARD_NAME_STRING (1234): [ env1 env2 env3 ... ]
|
ENVLIST=$(mfenvs -n) # BOARD_NAME_STRING (1234): [ env1 env2 env3 ... ]
|
||||||
ENVLIST=${ENVLIST##*: [ }
|
ENVLIST=${ENVLIST##*: [ }
|
||||||
ENVARRAY=(${ENVLIST% ]})
|
ENVARRAY=(${ENVLIST% ]})
|
||||||
ENVCOUNT=${#ENVARRAY[*]}
|
ENVCOUNT=${#ENVARRAY[*]}
|
||||||
|
|
@ -236,7 +236,7 @@ while ((1)); do
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# When building many, create sub-folders for each build env name
|
# When building many, create sub-folders for each build env name
|
||||||
if [[ -n $MANY && $ENVCOUNT -gt 1 ]]; then
|
if [[ -n $MANY ]]; then
|
||||||
ENV=${ENVARRAY[BUILDINDEX-1]}
|
ENV=${ENVARRAY[BUILDINDEX-1]}
|
||||||
ARCENVSUB="$ARCSUB/$ENV"
|
ARCENVSUB="$ARCSUB/$ENV"
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#
|
#
|
||||||
# mfenvs Print the current board and environment information
|
# mfenvs Print the current board and environment information
|
||||||
|
# Use -n to remove "*_xfer" environments from the list.
|
||||||
# Output -> "SHORT_NAME (###): [ env1 env2 env3 ... ]"
|
# Output -> "SHORT_NAME (###): [ env1 env2 env3 ... ]"
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
@ -27,6 +28,7 @@ BLINE=$( grep -E "define\s+BOARD_$MB\b" Marlin/src/core/boards.h )
|
||||||
BNUM=$( sed -E 's/^.+BOARD_[^ ]+ +([0-9]+).+$/\1/' <<<"$BLINE" )
|
BNUM=$( sed -E 's/^.+BOARD_[^ ]+ +([0-9]+).+$/\1/' <<<"$BLINE" )
|
||||||
[[ -z $BNUM ]] && { echo "Error - Can't find BOARD_$MB in core/boards.h." ; exit 1 ; }
|
[[ -z $BNUM ]] && { echo "Error - Can't find BOARD_$MB in core/boards.h." ; exit 1 ; }
|
||||||
ENVS=( $( grep -EA1 "MB\(.*\b$MB\b.*\)" Marlin/src/pins/pins.h | grep -E "#include.+//.+(env|$SYS):[^ ]+" | grep -oE "(env|$SYS):[^ ]+" | sed -E "s/(env|$SYS)://" ) )
|
ENVS=( $( grep -EA1 "MB\(.*\b$MB\b.*\)" Marlin/src/pins/pins.h | grep -E "#include.+//.+(env|$SYS):[^ ]+" | grep -oE "(env|$SYS):[^ ]+" | sed -E "s/(env|$SYS)://" ) )
|
||||||
|
[[ "$1" = "-n" ]] && ENVS=( $(printf "%s\n" "${ENVS[@]}" | grep -v "_xfer$") )
|
||||||
[[ -z $ENVS ]] && { errout "Error - Can't find target(s) for $MB ($BNUM)." ; exit 1 ; }
|
[[ -z $ENVS ]] && { errout "Error - Can't find target(s) for $MB ($BNUM)." ; exit 1 ; }
|
||||||
ECOUNT=${#ENVS[*]}
|
ECOUNT=${#ENVS[*]}
|
||||||
[[ $ECOUNT == 1 ]] && EOUT=$ENVS || EOUT="${ENVS[@]}"
|
[[ $ECOUNT == 1 ]] && EOUT=$ENVS || EOUT="${ENVS[@]}"
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,8 @@ opt_set MOTHERBOARD BOARD_BTT_SKR_V1_4_TURBO SERIAL_PORT -1 \
|
||||||
Z_MIN_ENDSTOP_HIT_STATE HIGH
|
Z_MIN_ENDSTOP_HIT_STATE HIGH
|
||||||
opt_enable PIDTEMPBED \
|
opt_enable PIDTEMPBED \
|
||||||
FILAMENT_RUNOUT_SENSOR NOZZLE_PARK_FEATURE ADVANCED_PAUSE_FEATURE \
|
FILAMENT_RUNOUT_SENSOR NOZZLE_PARK_FEATURE ADVANCED_PAUSE_FEATURE \
|
||||||
BLTOUCH BLTOUCH_FORCE_SW_MODE USE_PROBE_FOR_Z_HOMING Z_SAFE_HOMING QUICK_HOME Z_STEPPER_AUTO_ALIGN \
|
BLTOUCH BLTOUCH_FORCE_SW_MODE USE_PROBE_FOR_Z_HOMING Z_SAFE_HOMING QUICK_HOME \
|
||||||
|
Z_STEPPER_AUTO_ALIGN EVENT_GCODE_BEFORE_G34 EVENT_GCODE_AFTER_G34 \
|
||||||
AUTO_BED_LEVELING_BILINEAR EXTRAPOLATE_BEYOND_GRID RESTORE_LEVELING_AFTER_G28 LCD_BED_LEVELING MESH_EDIT_MENU \
|
AUTO_BED_LEVELING_BILINEAR EXTRAPOLATE_BEYOND_GRID RESTORE_LEVELING_AFTER_G28 LCD_BED_LEVELING MESH_EDIT_MENU \
|
||||||
EEPROM_SETTINGS EEPROM_AUTO_INIT \
|
EEPROM_SETTINGS EEPROM_AUTO_INIT \
|
||||||
SDSUPPORT CR10_STOCKDISPLAY SPEAKER LCD_INFO_MENU STATUS_MESSAGE_SCROLLING \
|
SDSUPPORT CR10_STOCKDISPLAY SPEAKER LCD_INFO_MENU STATUS_MESSAGE_SCROLLING \
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ MARLIN_TEST_BUILD = build_src_filter=+<src/tests>
|
||||||
POSTMORTEM_DEBUGGING = build_src_filter=+<src/HAL/shared/cpu_exception> +<src/HAL/shared/backtrace>
|
POSTMORTEM_DEBUGGING = build_src_filter=+<src/HAL/shared/cpu_exception> +<src/HAL/shared/backtrace>
|
||||||
build_flags=-funwind-tables
|
build_flags=-funwind-tables
|
||||||
MKS_WIFI_MODULE = QRCode=https://github.com/makerbase-mks/QRCode/archive/261c5a696a.zip
|
MKS_WIFI_MODULE = QRCode=https://github.com/makerbase-mks/QRCode/archive/261c5a696a.zip
|
||||||
HAS_TRINAMIC_CONFIG = TMCStepper=https://github.com/MarlinFirmware/TMCStepper/archive/v0.8.7.zip
|
HAS_TRINAMIC_CONFIG = TMCStepper=https://github.com/MarlinFirmware/TMCStepper/archive/v0.8.8.zip
|
||||||
build_src_filter=+<src/module/stepper/trinamic.cpp> +<src/gcode/feature/trinamic/M122.cpp> +<src/gcode/feature/trinamic/M906.cpp> +<src/gcode/feature/trinamic/M911-M914.cpp> +<src/gcode/feature/trinamic/M919.cpp>
|
build_src_filter=+<src/module/stepper/trinamic.cpp> +<src/gcode/feature/trinamic/M122.cpp> +<src/gcode/feature/trinamic/M906.cpp> +<src/gcode/feature/trinamic/M911-M914.cpp> +<src/gcode/feature/trinamic/M919.cpp>
|
||||||
HAS_STEPPER_CONTROL = build_src_filter=+<src/module/stepper/control.cpp>
|
HAS_STEPPER_CONTROL = build_src_filter=+<src/module/stepper/control.cpp>
|
||||||
HAS_T(RINAMIC_CONFIG|MC_SPI) = build_src_filter=+<src/feature/tmc_util.cpp>
|
HAS_T(RINAMIC_CONFIG|MC_SPI) = build_src_filter=+<src/feature/tmc_util.cpp>
|
||||||
|
|
|
||||||
|
|
@ -270,7 +270,7 @@ board_build.ldscript = mks_robin_pro.ld
|
||||||
#
|
#
|
||||||
[env:trigorilla_pro_maple]
|
[env:trigorilla_pro_maple]
|
||||||
extends = env:mks_robin_maple
|
extends = env:mks_robin_maple
|
||||||
build_flags = ${env:mks_robin_maple} -DSTM32_FLASH_SIZE=512
|
build_flags = ${env:mks_robin_maple.build_flags} -DSTM32_FLASH_SIZE=512
|
||||||
|
|
||||||
#
|
#
|
||||||
# MKS Robin E3D (STM32F103RCT6) and
|
# MKS Robin E3D (STM32F103RCT6) and
|
||||||
|
|
|
||||||
|
|
@ -320,7 +320,7 @@ build_unflags = ${env:STM32F407VG_btt.build_unflags} -DUSBD_USE_CDC
|
||||||
[env:STM32F407VG_btt_USB_debug]
|
[env:STM32F407VG_btt_USB_debug]
|
||||||
extends = env:STM32F407VG_btt_USB
|
extends = env:STM32F407VG_btt_USB
|
||||||
build_flags = ${env:STM32F407VG_btt_USB.build_flags} -O0
|
build_flags = ${env:STM32F407VG_btt_USB.build_flags} -O0
|
||||||
build_unflags = ${env:STM32F407VG_btt_USB.build_unflags} -Os -NDEBUG
|
build_unflags = ${env:STM32F407VG_btt_USB.build_unflags} -Os -DNDEBUG
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bigtreetech SKR V2.0 (STM32F429VGT6 ARM Cortex-M4) with USB Flash Drive Support
|
# Bigtreetech SKR V2.0 (STM32F429VGT6 ARM Cortex-M4) with USB Flash Drive Support
|
||||||
|
|
@ -340,7 +340,7 @@ build_unflags = ${env:STM32F429VG_btt.build_unflags} -DUSBD_USE_CDC
|
||||||
[env:STM32F429VG_btt_USB_debug]
|
[env:STM32F429VG_btt_USB_debug]
|
||||||
extends = env:STM32F429VG_btt_USB
|
extends = env:STM32F429VG_btt_USB
|
||||||
build_flags = ${env:STM32F429VG_btt_USB.build_flags} -O0
|
build_flags = ${env:STM32F429VG_btt_USB.build_flags} -O0
|
||||||
build_unflags = ${env:STM32F429VG_btt_USB.build_unflags} -Os -NDEBUG
|
build_unflags = ${env:STM32F429VG_btt_USB.build_unflags} -Os -DNDEBUG
|
||||||
|
|
||||||
#
|
#
|
||||||
# BigTreeTech Octopus V1.0/1.1 / Octopus Pro V1.0 (STM32F446ZET6 ARM Cortex-M4)
|
# BigTreeTech Octopus V1.0/1.1 / Octopus Pro V1.0 (STM32F446ZET6 ARM Cortex-M4)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue