diff --git a/Marlin/src/gcode/calibrate/M666.cpp b/Marlin/src/gcode/calibrate/M666.cpp
index 96688f2bbf435f77960b0c74caf7636e3ad52ad4..6a87e2944bcf266f98585a7845aa90a4669a34c1 100644
--- a/Marlin/src/gcode/calibrate/M666.cpp
+++ b/Marlin/src/gcode/calibrate/M666.cpp
@@ -59,30 +59,49 @@
#endif
}
-#elif ENABLED(Z_DUAL_ENDSTOPS) // !DELTA && ENABLED(Z_DUAL_ENDSTOPS)
+#elif ENABLED(X_DUAL_ENDSTOPS) || ENABLED(Y_DUAL_ENDSTOPS) || ENABLED(Z_DUAL_ENDSTOPS)
#include "../../module/endstops.h"
/**
- * M666: For a Dual Endstop setup, set offsets for any 2nd endstops.
+ * M666: Set Dual Endstops offsets for X, Y, and/or Z.
+ * With no parameters report current offsets.
*/
- void GcodeSuite::M666() {
- SERIAL_ECHOPGM("Dual Endstop Adjustment (mm): ");
+ inline void gcode_M666() {
+ bool report = true;
#if ENABLED(X_DUAL_ENDSTOPS)
- if (parser.seen('X')) endstops.x_endstop_adj = parser.value_linear_units();
- SERIAL_ECHOPAIR(" X", endstops.x_endstop_adj);
+ if (parser.seen('X')) {
+ endstops.x_endstop_adj = parser.value_linear_units();
+ report = false;
+ }
#endif
#if ENABLED(Y_DUAL_ENDSTOPS)
- if (parser.seen('Y')) endstops.y_endstop_adj = parser.value_linear_units();
- SERIAL_ECHOPAIR(" Y", endstops.y_endstop_adj);
+ if (parser.seen('Y')) {
+ endstops.y_endstop_adj = parser.value_linear_units();
+ report = false;
+ }
#endif
#if ENABLED(Z_DUAL_ENDSTOPS)
- if (parser.seen('Z')) endstops.z_endstop_adj = parser.value_linear_units();
- SERIAL_ECHOPAIR(" Z", endstops.z_endstop_adj);
+ if (parser.seen('Z')) {
+ endstops.z_endstop_adj = parser.value_linear_units();
+ report = false;
+ }
#endif
- SERIAL_EOL();
+ if (report) {
+ SERIAL_ECHOPGM("Dual Endstop Adjustment (mm): ");
+ #if ENABLED(X_DUAL_ENDSTOPS)
+ SERIAL_ECHOPAIR(" X", endstops.x_endstop_adj);
+ #endif
+ #if ENABLED(Y_DUAL_ENDSTOPS)
+ SERIAL_ECHOPAIR(" Y", endstops.y_endstop_adj);
+ #endif
+ #if ENABLED(Z_DUAL_ENDSTOPS)
+ SERIAL_ECHOPAIR(" Z", endstops.z_endstop_adj);
+ #endif
+ SERIAL_EOL();
+ }
}
-#endif
+#endif // X_DUAL_ENDSTOPS || Y_DUAL_ENDSTOPS || Z_DUAL_ENDSTOPS
#endif // DELTA || Z_DUAL_ENDSTOPS
diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h
index 5c905bbc3a401302ce9dff750342c7f2b79d69e1..e04cc73f48512ba7faf1c87416d3e19b12eea24f 100644
--- a/Marlin/src/gcode/gcode.h
+++ b/Marlin/src/gcode/gcode.h
@@ -201,7 +201,7 @@
* M603 - Configure filament change: "M603 T<tool> U<unload_length> L<load_length>". (Requires ADVANCED_PAUSE_FEATURE)
* M605 - Set Dual X-Carriage movement mode: "M605 S<mode> [X<x_offset>] [R<temp_offset>]". (Requires DUAL_X_CARRIAGE)
* M665 - Set delta configurations: "M665 L<diagonal rod> R<delta radius> S<segments/s> A<rod A trim mm> B<rod B trim mm> C<rod C trim mm> I<tower A trim angle> J<tower B trim angle> K<tower C trim angle>" (Requires DELTA)
- * M666 - Set delta endstop adjustment. (Requires DELTA)
+ * M666 - Set/get offsets for delta (Requires DELTA) or dual endstops (Requires [XYZ]_DUAL_ENDSTOPS).
* M701 - Load filament (requires FILAMENT_LOAD_UNLOAD_GCODES)
* M702 - Unload filament (requires FILAMENT_LOAD_UNLOAD_GCODES)
* M851 - Set Z probe's Z offset in current units. (Negative = below the nozzle.)