|
|
@ -734,7 +734,7 @@ void report_current_position_detail(); |
|
|
|
SERIAL_CHAR(')'); |
|
|
|
|
|
|
|
if (suffix) {serialprintPGM(suffix);} //won't compile for Teensy with the previous construction
|
|
|
|
else SERIAL_EOL; |
|
|
|
else SERIAL_EOL(); |
|
|
|
} |
|
|
|
|
|
|
|
void print_xyz(const char* prefix, const char* suffix, const float xyz[]) { |
|
|
@ -868,10 +868,10 @@ inline bool _enqueuecommand(const char* cmd, bool say_ok=false) { |
|
|
|
*/ |
|
|
|
bool enqueue_and_echo_command(const char* cmd, bool say_ok/*=false*/) { |
|
|
|
if (_enqueuecommand(cmd, say_ok)) { |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOPAIR(MSG_ENQUEUEING, cmd); |
|
|
|
SERIAL_CHAR('"'); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
return true; |
|
|
|
} |
|
|
|
return false; |
|
|
@ -1010,7 +1010,7 @@ void servo_init() { |
|
|
|
#endif // HAS_COLOR_LEDS
|
|
|
|
|
|
|
|
void gcode_line_error(const char* err, bool doFlush = true) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
serialprintPGM(err); |
|
|
|
SERIAL_ERRORLN(gcode_LastN); |
|
|
|
//Serial.println(gcode_N);
|
|
|
@ -1206,7 +1206,7 @@ inline void get_serial_commands() { |
|
|
|
card.checkautostart(true); |
|
|
|
} |
|
|
|
else if (n == -1) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ECHOLNPGM(MSG_SD_ERR_READ); |
|
|
|
} |
|
|
|
if (sd_char == '#') stop_buffering = true; |
|
|
@ -1261,7 +1261,7 @@ void get_available_commands() { |
|
|
|
bool get_target_extruder_from_command(int code) { |
|
|
|
if (parser.seen('T')) { |
|
|
|
if (parser.value_byte() >= EXTRUDERS) { |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_CHAR('M'); |
|
|
|
SERIAL_ECHO(code); |
|
|
|
SERIAL_ECHOLNPAIR(" " MSG_INVALID_EXTRUDER " ", parser.value_byte()); |
|
|
@ -1421,7 +1421,7 @@ static void set_axis_is_at_home(const AxisEnum axis) { |
|
|
|
if (DEBUGGING(LEVELING)) { |
|
|
|
SERIAL_ECHOPAIR(">>> set_axis_is_at_home(", axis_codes[axis]); |
|
|
|
SERIAL_CHAR(')'); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
@ -1510,7 +1510,7 @@ static void set_axis_is_at_home(const AxisEnum axis) { |
|
|
|
DEBUG_POS("", current_position); |
|
|
|
SERIAL_ECHOPAIR("<<< set_axis_is_at_home(", axis_codes[axis]); |
|
|
|
SERIAL_CHAR(')'); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
@ -1527,7 +1527,7 @@ inline float get_homing_bump_feedrate(const AxisEnum axis) { |
|
|
|
uint8_t hbd = pgm_read_byte(&homing_bump_divisor[axis]); |
|
|
|
if (hbd < 1) { |
|
|
|
hbd = 10; |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOLNPGM("Warning: Homing Bump Divisor < 1"); |
|
|
|
} |
|
|
|
return homing_feedrate(axis) / hbd; |
|
|
@ -1748,7 +1748,7 @@ static void clean_up_after_endstop_or_probe_move() { |
|
|
|
if (DEBUGGING(LEVELING)) { |
|
|
|
SERIAL_ECHOPAIR("do_probe_raise(", z_raise); |
|
|
|
SERIAL_CHAR(')'); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
@ -1777,7 +1777,7 @@ static void clean_up_after_endstop_or_probe_move() { |
|
|
|
zz = z && !axis_homed[Z_AXIS]; |
|
|
|
#endif |
|
|
|
if (xx || yy || zz) { |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOPGM(MSG_HOME " "); |
|
|
|
if (xx) SERIAL_ECHOPGM(MSG_X); |
|
|
|
if (yy) SERIAL_ECHOPGM(MSG_Y); |
|
|
@ -1811,7 +1811,7 @@ static void clean_up_after_endstop_or_probe_move() { |
|
|
|
if (DEBUGGING(LEVELING)) { |
|
|
|
SERIAL_ECHOPAIR("dock_sled(", stow); |
|
|
|
SERIAL_CHAR(')'); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
@ -2054,7 +2054,7 @@ static void clean_up_after_endstop_or_probe_move() { |
|
|
|
// (Measured completion time was 0.65 seconds
|
|
|
|
// after reset, deploy, and stow sequence)
|
|
|
|
if (TEST_BLTOUCH()) { // If it still claims to be triggered...
|
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_STOP_BLTOUCH); |
|
|
|
stop(); // punt!
|
|
|
|
} |
|
|
@ -2066,7 +2066,7 @@ static void clean_up_after_endstop_or_probe_move() { |
|
|
|
if (DEBUGGING(LEVELING)) { |
|
|
|
SERIAL_ECHOPAIR("set_bltouch_deployed(", deploy); |
|
|
|
SERIAL_CHAR(')'); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
#endif |
|
|
|
} |
|
|
@ -2098,7 +2098,7 @@ static void clean_up_after_endstop_or_probe_move() { |
|
|
|
// measured completion time was 0.65 seconds
|
|
|
|
// after reset, deploy & stow sequence
|
|
|
|
if (TEST_BLTOUCH()) { // If it still claims to be triggered...
|
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_STOP_BLTOUCH); |
|
|
|
stop(); // punt!
|
|
|
|
return true; |
|
|
@ -2111,7 +2111,7 @@ static void clean_up_after_endstop_or_probe_move() { |
|
|
|
#define _AUE_ARGS |
|
|
|
#endif |
|
|
|
if (axis_unhomed_error(_AUE_ARGS)) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_STOP_UNHOMED); |
|
|
|
stop(); |
|
|
|
return true; |
|
|
@ -2159,7 +2159,7 @@ static void clean_up_after_endstop_or_probe_move() { |
|
|
|
if (_TRIGGERED_WHEN_STOWED_TEST == deploy) { // State hasn't changed?
|
|
|
|
|
|
|
|
if (IsRunning()) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM("Z-Probe failed"); |
|
|
|
LCD_ALERTMESSAGEPGM("Err: ZPROBE"); |
|
|
|
} |
|
|
@ -2323,7 +2323,7 @@ static void clean_up_after_endstop_or_probe_move() { |
|
|
|
SERIAL_PROTOCOL_F(y, 3); |
|
|
|
SERIAL_PROTOCOLPGM(" Z: "); |
|
|
|
SERIAL_PROTOCOL_F(measured_z, 3); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE) |
|
|
@ -2523,7 +2523,7 @@ static void clean_up_after_endstop_or_probe_move() { |
|
|
|
SERIAL_PROTOCOLCHAR(' '); |
|
|
|
SERIAL_PROTOCOL((int)x); |
|
|
|
} |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
#endif |
|
|
|
#ifdef SCAD_MESH_OUTPUT |
|
|
|
SERIAL_PROTOCOLLNPGM("measured_z = ["); // open 2D array
|
|
|
@ -2561,12 +2561,12 @@ static void clean_up_after_endstop_or_probe_move() { |
|
|
|
SERIAL_PROTOCOLCHAR(']'); // close sub-array
|
|
|
|
if (y < sy - 1) SERIAL_PROTOCOLCHAR(','); |
|
|
|
#endif |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
#ifdef SCAD_MESH_OUTPUT |
|
|
|
SERIAL_PROTOCOLPGM("];"); // close 2D array
|
|
|
|
#endif |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
|
|
|
|
#endif |
|
|
@ -2596,7 +2596,7 @@ static void clean_up_after_endstop_or_probe_move() { |
|
|
|
#endif |
|
|
|
return; // Don't overwrite good values.
|
|
|
|
} |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
|
|
|
|
// Get X neighbors, Y neighbors, and XY neighbors
|
|
|
|
const uint8_t x1 = x + xdir, y1 = y + ydir, x2 = x1 + xdir, y2 = y1 + ydir; |
|
|
@ -2798,7 +2798,7 @@ static void do_homing_move(const AxisEnum axis, const float distance, const floa |
|
|
|
SERIAL_ECHOPAIR(", ", distance); |
|
|
|
SERIAL_ECHOPAIR(", ", fr_mm_s); |
|
|
|
SERIAL_CHAR(')'); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
@ -2841,7 +2841,7 @@ static void do_homing_move(const AxisEnum axis, const float distance, const floa |
|
|
|
if (DEBUGGING(LEVELING)) { |
|
|
|
SERIAL_ECHOPAIR("<<< do_homing_move(", axis_codes[axis]); |
|
|
|
SERIAL_CHAR(')'); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
#endif |
|
|
|
} |
|
|
@ -2896,7 +2896,7 @@ static void homeaxis(const AxisEnum axis) { |
|
|
|
if (DEBUGGING(LEVELING)) { |
|
|
|
SERIAL_ECHOPAIR(">>> homeaxis(", axis_codes[axis]); |
|
|
|
SERIAL_CHAR(')'); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
@ -3029,7 +3029,7 @@ static void homeaxis(const AxisEnum axis) { |
|
|
|
if (DEBUGGING(LEVELING)) { |
|
|
|
SERIAL_ECHOPAIR("<<< homeaxis(", axis_codes[axis]); |
|
|
|
SERIAL_CHAR(')'); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
#endif |
|
|
|
} // homeaxis()
|
|
|
@ -3176,15 +3176,15 @@ void gcode_get_destination() { |
|
|
|
switch (busy_state) { |
|
|
|
case IN_HANDLER: |
|
|
|
case IN_PROCESS: |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOLNPGM(MSG_BUSY_PROCESSING); |
|
|
|
break; |
|
|
|
case PAUSED_FOR_USER: |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOLNPGM(MSG_BUSY_PAUSED_FOR_USER); |
|
|
|
break; |
|
|
|
case PAUSED_FOR_INPUT: |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOLNPGM(MSG_BUSY_PAUSED_FOR_INPUT); |
|
|
|
break; |
|
|
|
default: |
|
|
@ -3302,7 +3302,7 @@ inline void gcode_G0_G1( |
|
|
|
} |
|
|
|
else { |
|
|
|
// Bad arguments
|
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_ERR_ARC_ARGS); |
|
|
|
} |
|
|
|
} |
|
|
@ -3543,7 +3543,7 @@ inline void gcode_G4() { |
|
|
|
else |
|
|
|
SERIAL_ECHOLNPGM(" (disabled)"); |
|
|
|
|
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
|
|
|
|
#elif ENABLED(MESH_BED_LEVELING) |
|
|
|
|
|
|
@ -3557,7 +3557,7 @@ inline void gcode_G4() { |
|
|
|
else |
|
|
|
SERIAL_ECHOPGM(" (disabled)"); |
|
|
|
|
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
|
|
|
|
#endif // MESH_BED_LEVELING
|
|
|
|
} |
|
|
@ -3613,7 +3613,7 @@ inline void gcode_G4() { |
|
|
|
// Disallow Z homing if X or Y are unknown
|
|
|
|
if (!axis_known_position[X_AXIS] || !axis_known_position[Y_AXIS]) { |
|
|
|
LCD_MESSAGEPGM(MSG_ERR_Z_HOMING); |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOLNPGM(MSG_ERR_Z_HOMING); |
|
|
|
return; |
|
|
|
} |
|
|
@ -3652,7 +3652,7 @@ inline void gcode_G4() { |
|
|
|
} |
|
|
|
else { |
|
|
|
LCD_MESSAGEPGM(MSG_ZPROBE_OUT); |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOLNPGM(MSG_ZPROBE_OUT); |
|
|
|
} |
|
|
|
|
|
|
@ -4300,14 +4300,14 @@ void home_all_axes() { gcode_G28(true); } |
|
|
|
|
|
|
|
if (parser.seen('W')) { |
|
|
|
if (!leveling_is_valid()) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM("No bilinear grid"); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
const float z = parser.seen('Z') && parser.has_value() ? parser.value_float() : NAN; |
|
|
|
if (!isnan(z) || !WITHIN(z, -10, 10)) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM("Bad Z value"); |
|
|
|
return; |
|
|
|
} |
|
|
@ -4837,11 +4837,11 @@ void home_all_axes() { gcode_G28(true); } |
|
|
|
SERIAL_PROTOCOL_F(plane_equation_coefficients[1], 8); |
|
|
|
SERIAL_PROTOCOLPGM(" d: "); |
|
|
|
SERIAL_PROTOCOL_F(plane_equation_coefficients[2], 8); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
if (verbose_level > 2) { |
|
|
|
SERIAL_PROTOCOLPGM("Mean of sampled points: "); |
|
|
|
SERIAL_PROTOCOL_F(mean, 8); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -4887,9 +4887,9 @@ void home_all_axes() { gcode_G28(true); } |
|
|
|
SERIAL_PROTOCOLCHAR(' '); |
|
|
|
SERIAL_PROTOCOL_F(diff, 5); |
|
|
|
} // xx
|
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} // yy
|
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
|
|
|
|
if (verbose_level > 3) { |
|
|
|
SERIAL_PROTOCOLLNPGM("\nCorrected Bed Height vs. Bed Topology:"); |
|
|
@ -4911,9 +4911,9 @@ void home_all_axes() { gcode_G28(true); } |
|
|
|
SERIAL_PROTOCOLCHAR(' '); |
|
|
|
SERIAL_PROTOCOL_F(diff, 5); |
|
|
|
} // xx
|
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} // yy
|
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
} //do_topography_map
|
|
|
|
|
|
|
@ -5163,7 +5163,7 @@ void home_all_axes() { gcode_G28(true); } |
|
|
|
|
|
|
|
SERIAL_PROTOCOLPGM("Checking... AC"); |
|
|
|
if (verbose_level == 0) SERIAL_PROTOCOLPGM(" (DRY-RUN)"); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
LCD_MESSAGEPGM("Checking... AC"); // TODO: Make translatable string
|
|
|
|
|
|
|
|
SERIAL_PROTOCOLPAIR(".Height:", DELTA_HEIGHT + home_offset[Z_AXIS]); |
|
|
@ -5179,7 +5179,7 @@ void home_all_axes() { gcode_G28(true); } |
|
|
|
SERIAL_PROTOCOL_F(endstop_adj[C_AXIS], 2); |
|
|
|
SERIAL_PROTOCOLPAIR(" Radius:", delta_radius); |
|
|
|
} |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
if (_7p_calibration && towers_set) { |
|
|
|
SERIAL_PROTOCOLPGM(".Tower angle : Tx:"); |
|
|
|
if (delta_tower_angle_trim[A_AXIS] >= 0) SERIAL_CHAR('+'); |
|
|
@ -5188,7 +5188,7 @@ void home_all_axes() { gcode_G28(true); } |
|
|
|
if (delta_tower_angle_trim[B_AXIS] >= 0) SERIAL_CHAR('+'); |
|
|
|
SERIAL_PROTOCOL_F(delta_tower_angle_trim[B_AXIS], 2); |
|
|
|
SERIAL_PROTOCOLPGM(" Tz:+0.00"); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
|
|
|
|
#if ENABLED(Z_PROBE_SLED) |
|
|
@ -5356,7 +5356,7 @@ void home_all_axes() { gcode_G28(true); } |
|
|
|
if (z_at_pt[9] >= 0) SERIAL_CHAR('+'); |
|
|
|
SERIAL_PROTOCOL_F(z_at_pt[9], 2); |
|
|
|
} |
|
|
|
if (!_4p_opposite_points) SERIAL_EOL; |
|
|
|
if (!_4p_opposite_points) SERIAL_EOL(); |
|
|
|
if ((_4p_opposite_points) || _7p_calibration) { |
|
|
|
if (_7p_calibration) { |
|
|
|
SERIAL_CHAR('.'); |
|
|
@ -5371,7 +5371,7 @@ void home_all_axes() { gcode_G28(true); } |
|
|
|
SERIAL_PROTOCOLPGM(" xy:"); |
|
|
|
if (z_at_pt[3] >= 0) SERIAL_CHAR('+'); |
|
|
|
SERIAL_PROTOCOL_F(z_at_pt[3], 2); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
} |
|
|
|
if (test_precision != 0.0) { // !forced end
|
|
|
@ -5384,7 +5384,7 @@ void home_all_axes() { gcode_G28(true); } |
|
|
|
SERIAL_PROTOCOLPGM("std dev:"); |
|
|
|
SERIAL_PROTOCOL_F(zero_std_dev, 3); |
|
|
|
} |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
LCD_MESSAGEPGM("Calibration OK"); // TODO: Make translatable string
|
|
|
|
} |
|
|
|
else { // !end iterations
|
|
|
@ -5395,7 +5395,7 @@ void home_all_axes() { gcode_G28(true); } |
|
|
|
SERIAL_PROTOCOL_SP(36); |
|
|
|
SERIAL_PROTOCOLPGM("std dev:"); |
|
|
|
SERIAL_PROTOCOL_F(zero_std_dev, 3); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
lcd_setstatus(mess); |
|
|
|
} |
|
|
|
SERIAL_PROTOCOLPAIR(".Height:", DELTA_HEIGHT + home_offset[Z_AXIS]); |
|
|
@ -5411,7 +5411,7 @@ void home_all_axes() { gcode_G28(true); } |
|
|
|
SERIAL_PROTOCOL_F(endstop_adj[C_AXIS], 2); |
|
|
|
SERIAL_PROTOCOLPAIR(" Radius:", delta_radius); |
|
|
|
} |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
if (_7p_calibration && towers_set) { |
|
|
|
SERIAL_PROTOCOLPGM(".Tower angle : Tx:"); |
|
|
|
if (delta_tower_angle_trim[A_AXIS] >= 0) SERIAL_CHAR('+'); |
|
|
@ -5420,11 +5420,11 @@ void home_all_axes() { gcode_G28(true); } |
|
|
|
if (delta_tower_angle_trim[B_AXIS] >= 0) SERIAL_CHAR('+'); |
|
|
|
SERIAL_PROTOCOL_F(delta_tower_angle_trim[B_AXIS], 2); |
|
|
|
SERIAL_PROTOCOLPGM(" Tz:+0.00"); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
if (zero_std_dev >= test_precision || zero_std_dev <= calibration_precision) |
|
|
|
serialprintPGM(save_message); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
else { // forced end
|
|
|
|
if (verbose_level == 0) { |
|
|
@ -5432,15 +5432,15 @@ void home_all_axes() { gcode_G28(true); } |
|
|
|
SERIAL_PROTOCOL_SP(39); |
|
|
|
SERIAL_PROTOCOLPGM("std dev:"); |
|
|
|
SERIAL_PROTOCOL_F(zero_std_dev, 3); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
else { |
|
|
|
SERIAL_PROTOCOLLNPGM("Calibration OK"); |
|
|
|
LCD_MESSAGEPGM("Calibration OK"); // TODO: Make translatable string
|
|
|
|
SERIAL_PROTOCOLPAIR(".Height:", DELTA_HEIGHT + home_offset[Z_AXIS]); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
serialprintPGM(save_message); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -5545,7 +5545,7 @@ void home_all_axes() { gcode_G28(true); } |
|
|
|
if (!parser.seen('F')) feedrate_mm_s = homing_feedrate(i); |
|
|
|
// If G38.2 fails throw an error
|
|
|
|
if (!G38_run_probe() && is_38_2) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM("Failed to reach target"); |
|
|
|
} |
|
|
|
break; |
|
|
@ -5685,7 +5685,7 @@ inline void gcode_G92() { |
|
|
|
#else |
|
|
|
|
|
|
|
if (!hasP && !hasS && args && *args) { |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOLN(args); |
|
|
|
} |
|
|
|
|
|
|
@ -5899,7 +5899,7 @@ inline void gcode_M17() { |
|
|
|
#if ENABLED(PREVENT_COLD_EXTRUSION) |
|
|
|
if (!thermalManager.allow_cold_extrude && |
|
|
|
thermalManager.degTargetHotend(active_extruder) < thermalManager.extrude_min_temp) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_TOO_COLD_FOR_M600); |
|
|
|
return false; |
|
|
|
} |
|
|
@ -6232,7 +6232,7 @@ inline void gcode_M31() { |
|
|
|
elapsed.toString(buffer); |
|
|
|
lcd_setstatus(buffer); |
|
|
|
|
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOLNPAIR("Print time: ", buffer); |
|
|
|
} |
|
|
|
|
|
|
@ -6330,7 +6330,7 @@ inline void gcode_M42() { |
|
|
|
if (pin_number < 0) return; |
|
|
|
|
|
|
|
if (pin_is_protected(pin_number)) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_ERR_PROTECTED_PIN); |
|
|
|
return; |
|
|
|
} |
|
|
@ -6391,12 +6391,12 @@ inline void gcode_M42() { |
|
|
|
inline void servo_probe_test() { |
|
|
|
#if !(NUM_SERVOS > 0 && HAS_SERVO_0) |
|
|
|
|
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM("SERVO not setup"); |
|
|
|
|
|
|
|
#elif !HAS_Z_SERVO_ENDSTOP |
|
|
|
|
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM("Z_ENDSTOP_SERVO_NR not setup"); |
|
|
|
|
|
|
|
#else |
|
|
@ -6832,7 +6832,7 @@ inline void gcode_M42() { |
|
|
|
SERIAL_PROTOCOLPGM(" range: "); |
|
|
|
SERIAL_PROTOCOL_F(max-min, 3); |
|
|
|
} |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -6841,7 +6841,7 @@ inline void gcode_M42() { |
|
|
|
if (STOW_PROBE()) return; |
|
|
|
|
|
|
|
SERIAL_PROTOCOLPGM("Finished!"); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
|
|
|
|
if (verbose_level > 0) { |
|
|
|
SERIAL_PROTOCOLPGM("Mean: "); |
|
|
@ -6852,13 +6852,13 @@ inline void gcode_M42() { |
|
|
|
SERIAL_PROTOCOL_F(max, 3); |
|
|
|
SERIAL_PROTOCOLPGM(" Range: "); |
|
|
|
SERIAL_PROTOCOL_F(max-min, 3); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
|
|
|
|
SERIAL_PROTOCOLPGM("Standard Deviation: "); |
|
|
|
SERIAL_PROTOCOL_F(sigma, 6); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
SERIAL_EOL(); |
|
|
|
|
|
|
|
clean_up_after_endstop_or_probe_move(); |
|
|
|
|
|
|
@ -7014,11 +7014,11 @@ inline void gcode_M105() { |
|
|
|
SERIAL_PROTOCOLPGM(MSG_OK); |
|
|
|
print_heaterstates(); |
|
|
|
#else // !HAS_TEMP_HOTEND && !HAS_TEMP_BED
|
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_ERR_NO_THERMISTORS); |
|
|
|
#endif |
|
|
|
|
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
|
|
|
|
#if ENABLED(AUTO_REPORT_TEMPERATURES) && (HAS_TEMP_HOTEND || HAS_TEMP_BED) |
|
|
@ -7041,7 +7041,7 @@ inline void gcode_M105() { |
|
|
|
if (auto_report_temp_interval && ELAPSED(millis(), next_temp_report_ms)) { |
|
|
|
next_temp_report_ms = millis() + 1000UL * auto_report_temp_interval; |
|
|
|
print_heaterstates(); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -7194,7 +7194,7 @@ inline void gcode_M109() { |
|
|
|
SERIAL_PROTOCOLLNPGM("?"); |
|
|
|
} |
|
|
|
#else |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
@ -7327,7 +7327,7 @@ inline void gcode_M109() { |
|
|
|
SERIAL_PROTOCOLLNPGM("?"); |
|
|
|
} |
|
|
|
#else |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
@ -7407,7 +7407,7 @@ inline void gcode_M111() { |
|
|
|
#endif |
|
|
|
}; |
|
|
|
|
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOPGM(MSG_DEBUG_PREFIX); |
|
|
|
if (marlin_debug_flags) { |
|
|
|
uint8_t comma = 0; |
|
|
@ -7421,7 +7421,7 @@ inline void gcode_M111() { |
|
|
|
else { |
|
|
|
SERIAL_ECHOPGM(MSG_DEBUG_OFF); |
|
|
|
} |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
|
|
|
|
#if ENABLED(HOST_KEEPALIVE_FEATURE) |
|
|
@ -7437,7 +7437,7 @@ inline void gcode_M111() { |
|
|
|
NOMORE(host_keepalive_interval, 60); |
|
|
|
} |
|
|
|
else { |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOLNPAIR("M113 S", (unsigned long)host_keepalive_interval); |
|
|
|
} |
|
|
|
} |
|
|
@ -7491,7 +7491,7 @@ inline void gcode_M140() { |
|
|
|
inline void gcode_M145() { |
|
|
|
uint8_t material = parser.seen('S') ? (uint8_t)parser.value_int() : 0; |
|
|
|
if (material >= COUNT(lcd_preheat_hotend_temp)) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_ERR_MATERIAL_INDEX); |
|
|
|
} |
|
|
|
else { |
|
|
@ -7697,7 +7697,7 @@ void report_current_position() { |
|
|
|
#if IS_SCARA |
|
|
|
SERIAL_PROTOCOLPAIR("SCARA Theta:", stepper.get_axis_position_degrees(A_AXIS)); |
|
|
|
SERIAL_PROTOCOLLNPAIR(" Psi+Theta:", stepper.get_axis_position_degrees(B_AXIS)); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
@ -7711,7 +7711,7 @@ void report_current_position() { |
|
|
|
SERIAL_CHAR(':'); |
|
|
|
SERIAL_PROTOCOL(dtostrf(pos[i], 8, precision, str)); |
|
|
|
} |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
|
|
|
|
inline void report_xyz(const float pos[XYZ]) { report_xyze(pos, 3); } |
|
|
@ -8214,7 +8214,7 @@ inline void gcode_M205() { |
|
|
|
if (sumAPX == 1) |
|
|
|
home_offset[A_AXIS] = parser.value_float(); |
|
|
|
else if (sumAPX > 1) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM("Only one of A, P, or X is allowed."); |
|
|
|
return; |
|
|
|
} |
|
|
@ -8224,7 +8224,7 @@ inline void gcode_M205() { |
|
|
|
if (sumBTY == 1) |
|
|
|
home_offset[B_AXIS] = parser.value_float(); |
|
|
|
else if (sumBTY > 1) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM("Only one of B, T, or Y is allowed."); |
|
|
|
return; |
|
|
|
} |
|
|
@ -8296,7 +8296,7 @@ inline void gcode_M205() { |
|
|
|
* Usage: M211 S1 to enable, M211 S0 to disable, M211 alone for report |
|
|
|
*/ |
|
|
|
inline void gcode_M211() { |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
#if HAS_SOFTWARE_ENDSTOPS |
|
|
|
if (parser.seen('S')) soft_endstops_enabled = parser.value_bool(); |
|
|
|
SERIAL_ECHOPGM(MSG_SOFT_ENDSTOPS); |
|
|
@ -8335,7 +8335,7 @@ inline void gcode_M211() { |
|
|
|
if (parser.seen('Z')) hotend_offset[Z_AXIS][target_extruder] = parser.value_linear_units(); |
|
|
|
#endif |
|
|
|
|
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOPGM(MSG_HOTEND_OFFSET); |
|
|
|
HOTEND_LOOP() { |
|
|
|
SERIAL_CHAR(' '); |
|
|
@ -8347,7 +8347,7 @@ inline void gcode_M211() { |
|
|
|
SERIAL_ECHO(hotend_offset[Z_AXIS][e]); |
|
|
|
#endif |
|
|
|
} |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
|
|
|
|
#endif // HOTENDS > 1
|
|
|
@ -8447,7 +8447,7 @@ inline void gcode_M226() { |
|
|
|
i2c.relay(bytes); |
|
|
|
} |
|
|
|
else { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLN("Bad i2c request"); |
|
|
|
} |
|
|
|
} |
|
|
@ -8466,13 +8466,13 @@ inline void gcode_M226() { |
|
|
|
if (parser.seen('S')) |
|
|
|
MOVE_SERVO(servo_index, parser.value_int()); |
|
|
|
else { |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOPAIR(" Servo ", servo_index); |
|
|
|
SERIAL_ECHOLNPAIR(": ", servo[servo_index].read()); |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ECHOPAIR("Servo ", servo_index); |
|
|
|
SERIAL_ECHOLNPGM(" out of range"); |
|
|
|
} |
|
|
@ -8528,7 +8528,7 @@ inline void gcode_M226() { |
|
|
|
#endif |
|
|
|
|
|
|
|
thermalManager.updatePID(); |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
#if ENABLED(PID_PARAMS_PER_HOTEND) |
|
|
|
SERIAL_ECHOPAIR(" e:", e); // specify extruder in serial output
|
|
|
|
#endif // PID_PARAMS_PER_HOTEND
|
|
|
@ -8539,10 +8539,10 @@ inline void gcode_M226() { |
|
|
|
//Kc does not have scaling applied above, or in resetting defaults
|
|
|
|
SERIAL_ECHOPAIR(" c:", PID_PARAM(Kc, e)); |
|
|
|
#endif |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
else { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLN(MSG_INVALID_EXTRUDER); |
|
|
|
} |
|
|
|
} |
|
|
@ -8558,7 +8558,7 @@ inline void gcode_M226() { |
|
|
|
|
|
|
|
thermalManager.updatePID(); |
|
|
|
|
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOPAIR(" p:", thermalManager.bedKp); |
|
|
|
SERIAL_ECHOPAIR(" i:", unscalePID_i(thermalManager.bedKi)); |
|
|
|
SERIAL_ECHOLNPAIR(" d:", unscalePID_d(thermalManager.bedKd)); |
|
|
@ -8611,7 +8611,7 @@ inline void gcode_M226() { |
|
|
|
if (parser.seen('C')) set_lcd_contrast(parser.value_int()); |
|
|
|
SERIAL_PROTOCOLPGM("lcd contrast value: "); |
|
|
|
SERIAL_PROTOCOL(lcd_contrast); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
|
|
|
|
#endif // HAS_LCD_CONTRAST
|
|
|
@ -8644,7 +8644,7 @@ inline void gcode_M226() { |
|
|
|
thermalManager.allow_cold_extrude = (thermalManager.extrude_min_temp == 0) || parser.value_bool(); |
|
|
|
else if (!seen_S) { |
|
|
|
// Report current state
|
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOPAIR("Cold extrudes are ", (thermalManager.allow_cold_extrude ? "en" : "dis")); |
|
|
|
SERIAL_ECHOPAIR("abled (min temp ", thermalManager.extrude_min_temp); |
|
|
|
SERIAL_ECHOLNPGM("C)"); |
|
|
@ -8678,7 +8678,7 @@ inline void gcode_M303() { |
|
|
|
|
|
|
|
KEEPALIVE_STATE(IN_HANDLER); |
|
|
|
#else |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_ERR_M303_DISABLED); |
|
|
|
#endif |
|
|
|
} |
|
|
@ -8767,7 +8767,7 @@ inline void gcode_M303() { |
|
|
|
break; |
|
|
|
#endif |
|
|
|
default: |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOLNPGM(MSG_INVALID_SOLENOID); |
|
|
|
break; |
|
|
|
} |
|
|
@ -8971,11 +8971,11 @@ void quickstop_stepper() { |
|
|
|
const bool new_status = leveling_is_active(); |
|
|
|
|
|
|
|
if (to_enable && !new_status) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_ERR_M420_FAILED); |
|
|
|
} |
|
|
|
|
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOLNPAIR("Bed Leveling ", new_status ? MSG_ON : MSG_OFF); |
|
|
|
} |
|
|
|
#endif |
|
|
@ -8999,11 +8999,11 @@ void quickstop_stepper() { |
|
|
|
const bool hasZ = parser.seen('Z'), hasQ = !hasZ && parser.seen('Q'); |
|
|
|
|
|
|
|
if (int(hasI && hasJ) + int(hasX && hasY) != 1 || !(hasZ || hasQ)) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_ERR_M421_PARAMETERS); |
|
|
|
} |
|
|
|
else if (ix < 0 || iy < 0) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_ERR_MESH_XY); |
|
|
|
} |
|
|
|
else |
|
|
@ -9027,11 +9027,11 @@ void quickstop_stepper() { |
|
|
|
const bool hasZ = parser.seen('Z'), hasQ = !hasZ && parser.seen('Q'); |
|
|
|
|
|
|
|
if (!hasI || !hasJ || !(hasZ || hasQ)) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_ERR_M421_PARAMETERS); |
|
|
|
} |
|
|
|
else if (!WITHIN(ix, 0, GRID_MAX_POINTS_X - 1) || !WITHIN(iy, 0, GRID_MAX_POINTS_Y - 1)) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_ERR_MESH_XY); |
|
|
|
} |
|
|
|
else { |
|
|
@ -9067,11 +9067,11 @@ void quickstop_stepper() { |
|
|
|
} |
|
|
|
|
|
|
|
if (int(hasC) + int(hasI && hasJ) != 1 || !(hasZ || hasQ)) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_ERR_M421_PARAMETERS); |
|
|
|
} |
|
|
|
else if (!WITHIN(ix, 0, GRID_MAX_POINTS_X - 1) || !WITHIN(iy, 0, GRID_MAX_POINTS_Y - 1)) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_ERR_MESH_XY); |
|
|
|
} |
|
|
|
else |
|
|
@ -9103,7 +9103,7 @@ void quickstop_stepper() { |
|
|
|
set_home_offset((AxisEnum)i, diff); |
|
|
|
} |
|
|
|
else { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_ERR_M428_TOO_FAR); |
|
|
|
LCD_ALERTMESSAGEPGM("Err: Too far!"); |
|
|
|
BUZZ(200, 40); |
|
|
@ -9202,7 +9202,7 @@ inline void gcode_M503() { |
|
|
|
} |
|
|
|
|
|
|
|
inline void gcode_M851() { |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOPGM(MSG_ZPROBE_ZOFFSET " "); |
|
|
|
if (parser.seen('Z')) { |
|
|
|
const float value = parser.value_linear_units(); |
|
|
@ -9217,7 +9217,7 @@ inline void gcode_M503() { |
|
|
|
else |
|
|
|
SERIAL_ECHOPAIR(": ", zprobe_zoffset); |
|
|
|
|
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
|
|
|
|
#endif // HAS_BED_PROBE
|
|
|
@ -9327,7 +9327,7 @@ inline void gcode_M503() { |
|
|
|
case DXC_DUPLICATION_MODE: |
|
|
|
if (parser.seen('X')) duplicate_extruder_x_offset = max(parser.value_linear_units(), X2_MIN_POS - x_home_pos(0)); |
|
|
|
if (parser.seen('R')) duplicate_extruder_temp_offset = parser.value_celsius_diff(); |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOPGM(MSG_HOTEND_OFFSET); |
|
|
|
SERIAL_CHAR(' '); |
|
|
|
SERIAL_ECHO(hotend_offset[X_AXIS][0]); |
|
|
@ -9352,7 +9352,7 @@ inline void gcode_M503() { |
|
|
|
inline void gcode_M605() { |
|
|
|
stepper.synchronize(); |
|
|
|
extruder_duplication_enabled = parser.seen('S') && parser.value_int() == (int)DXC_DUPLICATION_MODE; |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOLNPAIR(MSG_DUPLICATION_MODE, extruder_duplication_enabled ? MSG_ON : MSG_OFF); |
|
|
|
} |
|
|
|
|
|
|
@ -9382,12 +9382,12 @@ inline void gcode_M503() { |
|
|
|
} |
|
|
|
if (newR >= 0) planner.advance_ed_ratio = newR; |
|
|
|
|
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOPAIR("Advance K=", planner.extruder_advance_k); |
|
|
|
SERIAL_ECHOPGM(" E/D="); |
|
|
|
const float ratio = planner.advance_ed_ratio; |
|
|
|
if (ratio) SERIAL_ECHO(ratio); else SERIAL_ECHOPGM("Auto"); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
#endif // LIN_ADVANCE
|
|
|
|
|
|
|
@ -9407,7 +9407,7 @@ inline void gcode_M503() { |
|
|
|
SERIAL_CHAR(name); |
|
|
|
SERIAL_ECHOPGM(" axis temperature prewarn triggered: "); |
|
|
|
serialprintPGM(st.getOTPW() ? PSTR("true") : PSTR("false")); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
static void tmc2130_clear_otpw(TMC2130Stepper &st, const char name) { |
|
|
|
st.clear_otpw(); |
|
|
@ -9690,7 +9690,7 @@ inline void gcode_M355() { |
|
|
|
if (args) update_case_light(); |
|
|
|
|
|
|
|
// always report case light status
|
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
if (!case_light_on) { |
|
|
|
SERIAL_ECHOLN("Case light: off"); |
|
|
|
} |
|
|
@ -9700,7 +9700,7 @@ inline void gcode_M355() { |
|
|
|
} |
|
|
|
|
|
|
|
#else |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_ERR_M355_NONE); |
|
|
|
#endif // HAS_CASE_LIGHT
|
|
|
|
} |
|
|
@ -9799,7 +9799,7 @@ inline void gcode_M999() { |
|
|
|
#endif |
|
|
|
|
|
|
|
inline void invalid_extruder_error(const uint8_t &e) { |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_CHAR('T'); |
|
|
|
SERIAL_ECHO_F(e, DEC); |
|
|
|
SERIAL_ECHOLN(MSG_INVALID_EXTRUDER); |
|
|
@ -10120,7 +10120,7 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n |
|
|
|
|
|
|
|
#endif // HOTENDS <= 1
|
|
|
|
|
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOLNPAIR(MSG_ACTIVE_EXTRUDER, (int)active_extruder); |
|
|
|
|
|
|
|
#endif // !MIXING_EXTRUDER || MIXING_VIRTUAL_TOOLS <= 1
|
|
|
@ -10138,7 +10138,7 @@ inline void gcode_T(uint8_t tmp_extruder) { |
|
|
|
if (DEBUGGING(LEVELING)) { |
|
|
|
SERIAL_ECHOPAIR(">>> gcode_T(", tmp_extruder); |
|
|
|
SERIAL_CHAR(')'); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
DEBUG_POS("BEFORE", current_position); |
|
|
|
} |
|
|
|
#endif |
|
|
@ -10173,7 +10173,7 @@ void process_next_command() { |
|
|
|
char * const current_command = command_queue[cmd_queue_index_r]; |
|
|
|
|
|
|
|
if (DEBUGGING(ECHO)) { |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOLN(current_command); |
|
|
|
#if ENABLED(M100_FREE_MEMORY_WATCHER) |
|
|
|
SERIAL_ECHOPAIR("slot:", cmd_queue_index_r); |
|
|
@ -11021,7 +11021,7 @@ void ok_to_send() { |
|
|
|
SERIAL_PROTOCOLPGM(" P"); SERIAL_PROTOCOL(int(BLOCK_BUFFER_SIZE - planner.movesplanned() - 1)); |
|
|
|
SERIAL_PROTOCOLPGM(" B"); SERIAL_PROTOCOL(BUFSIZE - commands_in_queue); |
|
|
|
#endif |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
} |
|
|
|
|
|
|
|
#if HAS_SOFTWARE_ENDSTOPS |
|
|
@ -11813,13 +11813,13 @@ void prepare_move_to_destination() { |
|
|
|
if (destination[E_AXIS] != current_position[E_AXIS]) { |
|
|
|
if (thermalManager.tooColdToExtrude(active_extruder)) { |
|
|
|
current_position[E_AXIS] = destination[E_AXIS]; // Behave as if the move really took place, but ignore E part
|
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOLNPGM(MSG_ERR_COLD_EXTRUDE_STOP); |
|
|
|
} |
|
|
|
#if ENABLED(PREVENT_LENGTHY_EXTRUDE) |
|
|
|
if (labs(destination[E_AXIS] - current_position[E_AXIS]) > EXTRUDE_MAXLENGTH) { |
|
|
|
current_position[E_AXIS] = destination[E_AXIS]; // Behave as if the move really took place, but ignore E part
|
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOLNPGM(MSG_ERR_LONG_EXTRUDE_STOP); |
|
|
|
} |
|
|
|
#endif |
|
|
@ -12300,7 +12300,7 @@ void disable_all_steppers() { |
|
|
|
#endif |
|
|
|
} |
|
|
|
} |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
@ -12373,7 +12373,7 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) { |
|
|
|
const millis_t ms = millis(); |
|
|
|
|
|
|
|
if (max_inactive_time && ELAPSED(ms, previous_cmd_ms + max_inactive_time)) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ECHOLNPAIR(MSG_KILL_INACTIVE_TIME, parser.command_ptr); |
|
|
|
kill(PSTR(MSG_KILLED)); |
|
|
|
} |
|
|
@ -12424,7 +12424,7 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) { |
|
|
|
// KILL the machine
|
|
|
|
// ----------------------------------------------------------------
|
|
|
|
if (killCount >= KILL_DELAY) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_KILL_BUTTON); |
|
|
|
kill(PSTR(MSG_KILLED)); |
|
|
|
} |
|
|
@ -12575,7 +12575,7 @@ void idle( |
|
|
|
* After this the machine will need to be reset. |
|
|
|
*/ |
|
|
|
void kill(const char* lcd_msg) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_ERR_KILLED); |
|
|
|
|
|
|
|
thermalManager.disable_all_heaters(); |
|
|
@ -12618,7 +12618,7 @@ void stop() { |
|
|
|
|
|
|
|
if (IsRunning()) { |
|
|
|
Stopped_gcode_LastN = gcode_LastN; // Save last g_code for restart
|
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERROR_START(); |
|
|
|
SERIAL_ERRORLNPGM(MSG_ERR_STOPPED); |
|
|
|
LCD_MESSAGEPGM(MSG_STOPPED); |
|
|
|
safe_delay(350); // allow enough time for messages to get out before stopping
|
|
|
@ -12666,7 +12666,7 @@ void setup() { |
|
|
|
|
|
|
|
MYSERIAL.begin(BAUDRATE); |
|
|
|
SERIAL_PROTOCOLLNPGM("start"); |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
|
|
|
|
// Check startup - does nothing if bootloader sets MCUSR to 0
|
|
|
|
byte mcu = MCUSR; |
|
|
@ -12680,17 +12680,17 @@ void setup() { |
|
|
|
SERIAL_ECHOPGM(MSG_MARLIN); |
|
|
|
SERIAL_CHAR(' '); |
|
|
|
SERIAL_ECHOLNPGM(SHORT_BUILD_VERSION); |
|
|
|
SERIAL_EOL; |
|
|
|
SERIAL_EOL(); |
|
|
|
|
|
|
|
#if defined(STRING_DISTRIBUTION_DATE) && defined(STRING_CONFIG_H_AUTHOR) |
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOPGM(MSG_CONFIGURATION_VER); |
|
|
|
SERIAL_ECHOPGM(STRING_DISTRIBUTION_DATE); |
|
|
|
SERIAL_ECHOLNPGM(MSG_AUTHOR STRING_CONFIG_H_AUTHOR); |
|
|
|
SERIAL_ECHOLNPGM("Compiled: " __DATE__); |
|
|
|
#endif |
|
|
|
|
|
|
|
SERIAL_ECHO_START; |
|
|
|
SERIAL_ECHO_START(); |
|
|
|
SERIAL_ECHOPAIR(MSG_FREE_MEMORY, freeMemory()); |
|
|
|
SERIAL_ECHOLNPAIR(MSG_PLANNER_BUFFER_BYTES, (int)sizeof(block_t)*BLOCK_BUFFER_SIZE); |
|
|
|
|
|
|
|