Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 5236721

Browse files
committedJan 29, 2023
Compile with no Y axis
1 parent 67bc855 commit 5236721

File tree

9 files changed

+169
-134
lines changed

9 files changed

+169
-134
lines changed
 

‎Marlin/src/core/serial.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -337,8 +337,8 @@ void serial_offset(const_float_t v, const uint8_t sp=0); // For v==0 draw space
337337
void print_bin(const uint16_t val);
338338
void print_pos(NUM_AXIS_ARGS(const_float_t), FSTR_P const prefix=nullptr, FSTR_P const suffix=nullptr);
339339

340-
inline void print_pos(const xyz_pos_t &xyz, FSTR_P const prefix=nullptr, FSTR_P const suffix=nullptr) {
341-
print_pos(NUM_AXIS_ELEM(xyz), prefix, suffix);
340+
inline void print_pos(const xyze_pos_t &xyze, FSTR_P const prefix=nullptr, FSTR_P const suffix=nullptr) {
341+
print_pos(NUM_AXIS_ELEM(xyze), prefix, suffix);
342342
}
343343

344344
#define SERIAL_POS(SUFFIX,VAR) do { print_pos(VAR, F(" " STRINGIFY(VAR) "="), F(" : " SUFFIX "\n")); }while(0)

‎Marlin/src/core/types.h

+55-38
Original file line numberDiff line numberDiff line change
@@ -430,21 +430,24 @@ struct XYval {
430430
FI XYval<T>& operator+=(const XYval<T> &rs) { x += rs.x; y += rs.y; return *this; }
431431
FI XYval<T>& operator-=(const XYval<T> &rs) { x -= rs.x; y -= rs.y; return *this; }
432432
FI XYval<T>& operator*=(const XYval<T> &rs) { x *= rs.x; y *= rs.y; return *this; }
433-
FI XYval<T>& operator+=(const XYZval<T> &rs) { x += rs.x; y += rs.y; return *this; }
434-
FI XYval<T>& operator-=(const XYZval<T> &rs) { x -= rs.x; y -= rs.y; return *this; }
435-
FI XYval<T>& operator*=(const XYZval<T> &rs) { x *= rs.x; y *= rs.y; return *this; }
436-
FI XYval<T>& operator+=(const XYZEval<T> &rs) { x += rs.x; y += rs.y; return *this; }
437-
FI XYval<T>& operator-=(const XYZEval<T> &rs) { x -= rs.x; y -= rs.y; return *this; }
438-
FI XYval<T>& operator*=(const XYZEval<T> &rs) { x *= rs.x; y *= rs.y; return *this; }
433+
FI XYval<T>& operator/=(const XYval<T> &rs) { x /= rs.x; y /= rs.y; return *this; }
434+
FI XYval<T>& operator+=(const XYZval<T> &rs) { NUM_AXIS_CODE(x += rs.x, y += rs.y,,,,,,, ); return *this; }
435+
FI XYval<T>& operator-=(const XYZval<T> &rs) { NUM_AXIS_CODE(x -= rs.x, y -= rs.y,,,,,,, ); return *this; }
436+
FI XYval<T>& operator*=(const XYZval<T> &rs) { NUM_AXIS_CODE(x *= rs.x, y *= rs.y,,,,,,, ); return *this; }
437+
FI XYval<T>& operator/=(const XYZval<T> &rs) { NUM_AXIS_CODE(x /= rs.x, y /= rs.y,,,,,,, ); return *this; }
438+
FI XYval<T>& operator+=(const XYZEval<T> &rs) { NUM_AXIS_CODE(x += rs.x, y += rs.y,,,,,,, ); return *this; }
439+
FI XYval<T>& operator-=(const XYZEval<T> &rs) { NUM_AXIS_CODE(x -= rs.x, y -= rs.y,,,,,,, ); return *this; }
440+
FI XYval<T>& operator*=(const XYZEval<T> &rs) { NUM_AXIS_CODE(x *= rs.x, y *= rs.y,,,,,,, ); return *this; }
441+
FI XYval<T>& operator/=(const XYZEval<T> &rs) { NUM_AXIS_CODE(x /= rs.x, y /= rs.y,,,,,,, ); return *this; }
439442
FI XYval<T>& operator*=(const float &p) { x *= p; y *= p; return *this; }
440443
FI XYval<T>& operator*=(const int &p) { x *= p; y *= p; return *this; }
441444
FI XYval<T>& operator>>=(const int &p) { _RS(x); _RS(y); return *this; }
442445
FI XYval<T>& operator<<=(const int &p) { _LS(x); _LS(y); return *this; }
443446

444447
// Exact comparisons. For floats a "NEAR" operation may be better.
445-
FI bool operator==(const XYval<T> &rs) const { return x == rs.x && y == rs.y; }
446-
FI bool operator==(const XYZval<T> &rs) const { return x == rs.x && y == rs.y; }
447-
FI bool operator==(const XYZEval<T> &rs) const { return x == rs.x && y == rs.y; }
448+
FI bool operator==(const XYval<T> &rs) const { return NUM_AXIS_GANG(x == rs.x, && y == rs.y,,,,,,, ); }
449+
FI bool operator==(const XYZval<T> &rs) const { return NUM_AXIS_GANG(x == rs.x, && y == rs.y,,,,,,, ); }
450+
FI bool operator==(const XYZEval<T> &rs) const { return NUM_AXIS_GANG(x == rs.x, && y == rs.y,,,,,,, ); }
448451
FI bool operator!=(const XYval<T> &rs) const { return !operator==(rs); }
449452
FI bool operator!=(const XYZval<T> &rs) const { return !operator==(rs); }
450453
FI bool operator!=(const XYZEval<T> &rs) const { return !operator==(rs); }
@@ -465,22 +468,27 @@ struct XYZval {
465468
FI void reset() { NUM_AXIS_GANG(x =, y =, z =, i =, j =, k =, u =, v =, w =) 0; }
466469

467470
// Setters taking struct types and arrays
468-
FI void set(const T px) { x = px; }
469-
FI void set(const T px, const T py) { x = px; y = py; }
470-
FI void set(const XYval<T> pxy) { x = pxy.x; y = pxy.y; }
471-
FI void set(const XYval<T> pxy, const T pz) { NUM_AXIS_CODE(x = pxy.x, y = pxy.y, z = pz, NOOP, NOOP, NOOP, NOOP, NOOP, NOOP); }
472-
FI void set(const T (&arr)[XY]) { x = arr[0]; y = arr[1]; }
473-
#if HAS_Z_AXIS
474-
FI void set(const T (&arr)[NUM_AXES]) { NUM_AXIS_CODE(x = arr[0], y = arr[1], z = arr[2], i = arr[3], j = arr[4], k = arr[5], u = arr[6], v = arr[7], w = arr[8]); }
475-
FI void set(NUM_AXIS_ARGS(const T)) { NUM_AXIS_CODE(a = x, b = y, c = z, _i = i, _j = j, _k = k, _u = u, _v = v, _w = w ); }
476-
#endif
471+
FI void set(const XYval<T> pxy) { NUM_AXIS_CODE(x = pxy.x, y = pxy.y,,,,,,,); }
472+
FI void set(const XYval<T> pxy, const T pz) { NUM_AXIS_CODE(x = pxy.x, y = pxy.y, z = pz,,,,,,); }
473+
FI void set(const T (&arr)[NUM_AXES]) { NUM_AXIS_CODE(x = arr[0], y = arr[1], z = arr[2], i = arr[3], j = arr[4], k = arr[5], u = arr[6], v = arr[7], w = arr[8]); }
477474
#if LOGICAL_AXES > NUM_AXES
478475
FI void set(const T (&arr)[LOGICAL_AXES]) { NUM_AXIS_CODE(x = arr[0], y = arr[1], z = arr[2], i = arr[3], j = arr[4], k = arr[5], u = arr[6], v = arr[7], w = arr[8]); }
479476
FI void set(LOGICAL_AXIS_ARGS(const T)) { NUM_AXIS_CODE(a = x, b = y, c = z, _i = i, _j = j, _k = k, _u = u, _v = v, _w = w ); }
480477
#if DISTINCT_AXES > LOGICAL_AXES
481478
FI void set(const T (&arr)[DISTINCT_AXES]) { NUM_AXIS_CODE(x = arr[0], y = arr[1], z = arr[2], i = arr[3], j = arr[4], k = arr[5], u = arr[6], v = arr[7], w = arr[8]); }
482479
#endif
483480
#endif
481+
482+
// Setter for all individual args
483+
FI void set(NUM_AXIS_ARGS(const T)) { NUM_AXIS_CODE(a = x, b = y, c = z, _i = i, _j = j, _k = k, _u = u, _v = v, _w = w); }
484+
485+
// Setters with fewer elements leave the rest untouched
486+
#if HAS_Y_AXIS
487+
FI void set(const T px) { x = px; }
488+
#endif
489+
#if HAS_Z_AXIS
490+
FI void set(const T px, const T py) { x = px; y = py; }
491+
#endif
484492
#if HAS_I_AXIS
485493
FI void set(const T px, const T py, const T pz) { x = px; y = py; z = pz; }
486494
#endif
@@ -620,9 +628,31 @@ struct XYZEval {
620628
// Reset all to 0
621629
FI void reset() { LOGICAL_AXIS_GANG(e =, x =, y =, z =, i =, j =, k =, u =, v =, w =) 0; }
622630

623-
// Setters for some number of linear axes, not all
624-
FI void set(const T px) { x = px; }
625-
FI void set(const T px, const T py) { x = px; y = py; }
631+
// Setters taking struct types and arrays
632+
FI void set(const XYval<T> pxy) { x = pxy.x; OPTCODE(HAS_Y_AXIS, y = pxy.y) }
633+
FI void set(const XYZval<T> pxyz) { set(NUM_AXIS_ELEM(pxyz)); }
634+
FI void set(const XYval<T> pxy, const T pz) { set(pxy); TERN_(HAS_Z_AXIS, z = pz); }
635+
FI void set(const T (&arr)[NUM_AXES]) { NUM_AXIS_CODE(x = arr[0], y = arr[1], z = arr[2], i = arr[3], j = arr[4], k = arr[5], u = arr[6], v = arr[7], w = arr[8]); }
636+
#if LOGICAL_AXES > NUM_AXES
637+
FI void set(const T (&arr)[LOGICAL_AXES]) { LOGICAL_AXIS_CODE(e = arr[LOGICAL_AXES-1], x = arr[0], y = arr[1], z = arr[2], i = arr[3], j = arr[4], k = arr[5], u = arr[6], v = arr[7], w = arr[8]); }
638+
FI void set(const XYval<T> pxy, const T pz, const T pe) { set(pxy, pz); e = pe; }
639+
FI void set(const XYZval<T> pxyz, const T pe) { set(pxyz); e = pe; }
640+
FI void set(LOGICAL_AXIS_ARGS(const T)) { LOGICAL_AXIS_CODE(_e = e, a = x, b = y, c = z, _i = i, _j = j, _k = k, _u = u, _v = v, _w = w); }
641+
#if DISTINCT_AXES > LOGICAL_AXES
642+
FI void set(const T (&arr)[DISTINCT_AXES]) { LOGICAL_AXIS_CODE(e = arr[LOGICAL_AXES-1], x = arr[0], y = arr[1], z = arr[2], i = arr[3], j = arr[4], k = arr[5], u = arr[6], v = arr[7], w = arr[8]); }
643+
#endif
644+
#endif
645+
646+
// Setter for all individual args
647+
FI void set(NUM_AXIS_ARGS(const T)) { NUM_AXIS_CODE(a = x, b = y, c = z, _i = i, _j = j, _k = k, _u = u, _v = v, _w = w); }
648+
649+
// Setters with fewer elements leave the rest untouched
650+
#if HAS_Y_AXIS
651+
FI void set(const T px) { x = px; }
652+
#endif
653+
#if HAS_Z_AXIS
654+
FI void set(const T px, const T py) { x = px; y = py; }
655+
#endif
626656
#if HAS_I_AXIS
627657
FI void set(const T px, const T py, const T pz) { x = px; y = py; z = pz; }
628658
#endif
@@ -642,19 +672,6 @@ struct XYZEval {
642672
FI void set(const T px, const T py, const T pz, const T pi, const T pj, const T pk, const T pu, const T pv) { x = px; y = py; z = pz; i = pi; j = pj; k = pk; u = pu; v = pv; }
643673
#endif
644674

645-
// Setters taking struct types and arrays
646-
FI void set(const XYval<T> pxy) { x = pxy.x; y = pxy.y; }
647-
FI void set(const XYZval<T> pxyz) { set(NUM_AXIS_ELEM(pxyz)); }
648-
#if HAS_Z_AXIS
649-
FI void set(NUM_AXIS_ARGS(const T)) { NUM_AXIS_CODE(a = x, b = y, c = z, _i = i, _j = j, _k = k, _u = u, _v = v, _w = w); }
650-
#endif
651-
FI void set(const XYval<T> pxy, const T pz) { set(pxy); TERN_(HAS_Z_AXIS, z = pz); }
652-
#if LOGICAL_AXES > NUM_AXES
653-
FI void set(const XYval<T> pxy, const T pz, const T pe) { set(pxy, pz); e = pe; }
654-
FI void set(const XYZval<T> pxyz, const T pe) { set(pxyz); e = pe; }
655-
FI void set(LOGICAL_AXIS_ARGS(const T)) { LOGICAL_AXIS_CODE(_e = e, a = x, b = y, c = z, _i = i, _j = j, _k = k, _u = u, _v = v, _w = w); }
656-
#endif
657-
658675
// Length reduced to one dimension
659676
FI T magnitude() const { return (T)sqrtf(LOGICAL_AXIS_GANG(+ e*e, + x*x, + y*y, + z*z, + i*i, + j*j, + k*k, + u*u, + v*v, + w*w)); }
660677
// Pointer to the data as a simple array
@@ -739,10 +756,10 @@ struct XYZEval {
739756
FI XYZEval<T> operator-() { return LOGICAL_AXIS_ARRAY(-e, -x, -y, -z, -i, -j, -k, -u, -v, -w); }
740757

741758
// Modifier operators
742-
FI XYZEval<T>& operator+=(const XYval<T> &rs) { x += rs.x; y += rs.y; return *this; }
743-
FI XYZEval<T>& operator-=(const XYval<T> &rs) { x -= rs.x; y -= rs.y; return *this; }
744-
FI XYZEval<T>& operator*=(const XYval<T> &rs) { x *= rs.x; y *= rs.y; return *this; }
745-
FI XYZEval<T>& operator/=(const XYval<T> &rs) { x /= rs.x; y /= rs.y; return *this; }
759+
FI XYZEval<T>& operator+=(const XYval<T> &rs) { NUM_AXIS_CODE(x += rs.x, y += rs.y,,,,,,, ); return *this; }
760+
FI XYZEval<T>& operator-=(const XYval<T> &rs) { NUM_AXIS_CODE(x -= rs.x, y -= rs.y,,,,,,, ); return *this; }
761+
FI XYZEval<T>& operator*=(const XYval<T> &rs) { NUM_AXIS_CODE(x *= rs.x, y *= rs.y,,,,,,, ); return *this; }
762+
FI XYZEval<T>& operator/=(const XYval<T> &rs) { NUM_AXIS_CODE(x /= rs.x, y /= rs.y,,,,,,, ); return *this; }
746763
FI XYZEval<T>& operator+=(const XYZval<T> &rs) { NUM_AXIS_CODE(x += rs.x, y += rs.y, z += rs.z, i += rs.i, j += rs.j, k += rs.k, u += rs.u, v += rs.v, w += rs.w); return *this; }
747764
FI XYZEval<T>& operator-=(const XYZval<T> &rs) { NUM_AXIS_CODE(x -= rs.x, y -= rs.y, z -= rs.z, i -= rs.i, j -= rs.j, k -= rs.k, u -= rs.u, v -= rs.v, w -= rs.w); return *this; }
748765
FI XYZEval<T>& operator*=(const XYZval<T> &rs) { NUM_AXIS_CODE(x *= rs.x, y *= rs.y, z *= rs.z, i *= rs.i, j *= rs.j, k *= rs.k, u *= rs.u, v *= rs.v, w *= rs.w); return *this; }

‎Marlin/src/gcode/calibrate/G28.cpp

+13-6
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,9 @@ void GcodeSuite::G28() {
403403
UNUSED(needZ); UNUSED(homeZZ);
404404
#else
405405
constexpr bool doZ = false;
406+
#if !HAS_Y_AXIS
407+
constexpr bool doY = false;
408+
#endif
406409
#endif
407410

408411
TERN_(HOME_Z_FIRST, if (doZ) homeaxis(Z_AXIS));
@@ -420,9 +423,11 @@ void GcodeSuite::G28() {
420423
// Diagonal move first if both are homing
421424
TERN_(QUICK_HOME, if (doX && doY) quick_home_xy());
422425

423-
// Home Y (before X)
424-
if (ENABLED(HOME_Y_BEFORE_X) && (doY || TERN0(CODEPENDENT_XY_HOMING, doX)))
425-
homeaxis(Y_AXIS);
426+
#if HAS_Y_AXIS
427+
// Home Y (before X)
428+
if (ENABLED(HOME_Y_BEFORE_X) && (doY || TERN0(CODEPENDENT_XY_HOMING, doX)))
429+
homeaxis(Y_AXIS);
430+
#endif
426431

427432
// Home X
428433
if (doX || (doY && ENABLED(CODEPENDENT_XY_HOMING) && DISABLED(HOME_Y_BEFORE_X))) {
@@ -455,9 +460,11 @@ void GcodeSuite::G28() {
455460
if (doI) homeaxis(I_AXIS);
456461
#endif
457462

458-
// Home Y (after X)
459-
if (DISABLED(HOME_Y_BEFORE_X) && doY)
460-
homeaxis(Y_AXIS);
463+
#if HAS_Y_AXIS
464+
// Home Y (after X)
465+
if (DISABLED(HOME_Y_BEFORE_X) && doY)
466+
homeaxis(Y_AXIS);
467+
#endif
461468

462469
#if BOTH(FOAMCUTTER_XYUV, HAS_J_AXIS)
463470
// Home J (after Y)

‎Marlin/src/inc/Conditionals_LCD.h

+26-34
Original file line numberDiff line numberDiff line change
@@ -603,12 +603,26 @@
603603
#else
604604
#undef EXTRUDERS
605605
#define EXTRUDERS 0
606+
#undef TEMP_SENSOR_0
607+
#undef TEMP_SENSOR_1
608+
#undef TEMP_SENSOR_2
609+
#undef TEMP_SENSOR_3
610+
#undef TEMP_SENSOR_4
611+
#undef TEMP_SENSOR_5
612+
#undef TEMP_SENSOR_6
613+
#undef TEMP_SENSOR_7
606614
#undef SINGLENOZZLE
607615
#undef SWITCHING_EXTRUDER
608616
#undef SWITCHING_NOZZLE
609617
#undef MIXING_EXTRUDER
610618
#undef HOTEND_IDLE_TIMEOUT
611619
#undef DISABLE_E
620+
#undef THERMAL_PROTECTION_HOTENDS
621+
#undef PREVENT_COLD_EXTRUSION
622+
#undef PREVENT_LENGTHY_EXTRUDE
623+
#undef FILAMENT_RUNOUT_SENSOR
624+
#undef FILAMENT_RUNOUT_DISTANCE_MM
625+
#undef DISABLE_INACTIVE_EXTRUDER
612626
#endif
613627

614628
#define E_OPTARG(N) OPTARG(HAS_MULTI_EXTRUDER, N)
@@ -682,20 +696,28 @@
682696

683697
#if E_STEPPERS <= 7
684698
#undef INVERT_E7_DIR
699+
#undef E7_DRIVER_TYPE
685700
#if E_STEPPERS <= 6
686701
#undef INVERT_E6_DIR
702+
#undef E6_DRIVER_TYPE
687703
#if E_STEPPERS <= 5
688704
#undef INVERT_E5_DIR
705+
#undef E5_DRIVER_TYPE
689706
#if E_STEPPERS <= 4
690707
#undef INVERT_E4_DIR
708+
#undef E4_DRIVER_TYPE
691709
#if E_STEPPERS <= 3
692710
#undef INVERT_E3_DIR
711+
#undef E3_DRIVER_TYPE
693712
#if E_STEPPERS <= 2
694713
#undef INVERT_E2_DIR
714+
#undef E2_DRIVER_TYPE
695715
#if E_STEPPERS <= 1
696716
#undef INVERT_E1_DIR
717+
#undef E1_DRIVER_TYPE
697718
#if E_STEPPERS == 0
698719
#undef INVERT_E0_DIR
720+
#undef E0_DRIVER_TYPE
699721
#endif
700722
#endif
701723
#endif
@@ -733,6 +755,7 @@
733755
#else
734756
#define NUM_AXES 1
735757
#endif
758+
#define HAS_X_AXIS 1
736759
#if NUM_AXES >= XY
737760
#define HAS_Y_AXIS 1
738761
#if NUM_AXES >= XYZ
@@ -767,31 +790,6 @@
767790
#endif
768791
#endif
769792

770-
#if E_STEPPERS <= 0
771-
#undef E0_DRIVER_TYPE
772-
#endif
773-
#if E_STEPPERS <= 1
774-
#undef E1_DRIVER_TYPE
775-
#endif
776-
#if E_STEPPERS <= 2
777-
#undef E2_DRIVER_TYPE
778-
#endif
779-
#if E_STEPPERS <= 3
780-
#undef E3_DRIVER_TYPE
781-
#endif
782-
#if E_STEPPERS <= 4
783-
#undef E4_DRIVER_TYPE
784-
#endif
785-
#if E_STEPPERS <= 5
786-
#undef E5_DRIVER_TYPE
787-
#endif
788-
#if E_STEPPERS <= 6
789-
#undef E6_DRIVER_TYPE
790-
#endif
791-
#if E_STEPPERS <= 7
792-
#undef E7_DRIVER_TYPE
793-
#endif
794-
795793
#if !HAS_Y_AXIS
796794
#undef ENDSTOPPULLUP_YMIN
797795
#undef ENDSTOPPULLUP_YMAX
@@ -807,7 +805,6 @@
807805
#undef MANUAL_Y_HOME_POS
808806
#undef MIN_SOFTWARE_ENDSTOP_Y
809807
#undef MAX_SOFTWARE_ENDSTOP_Y
810-
#undef SAFE_BED_LEVELING_START_Y
811808
#endif
812809

813810
#if !HAS_Z_AXIS
@@ -827,7 +824,6 @@
827824
#undef MANUAL_Z_HOME_POS
828825
#undef MIN_SOFTWARE_ENDSTOP_Z
829826
#undef MAX_SOFTWARE_ENDSTOP_Z
830-
#undef SAFE_BED_LEVELING_START_Z
831827
#endif
832828

833829
#if !HAS_I_AXIS
@@ -844,7 +840,6 @@
844840
#undef MANUAL_I_HOME_POS
845841
#undef MIN_SOFTWARE_ENDSTOP_I
846842
#undef MAX_SOFTWARE_ENDSTOP_I
847-
#undef SAFE_BED_LEVELING_START_I
848843
#endif
849844

850845
#if !HAS_J_AXIS
@@ -861,7 +856,6 @@
861856
#undef MANUAL_J_HOME_POS
862857
#undef MIN_SOFTWARE_ENDSTOP_J
863858
#undef MAX_SOFTWARE_ENDSTOP_J
864-
#undef SAFE_BED_LEVELING_START_J
865859
#endif
866860

867861
#if !HAS_K_AXIS
@@ -878,7 +872,6 @@
878872
#undef MANUAL_K_HOME_POS
879873
#undef MIN_SOFTWARE_ENDSTOP_K
880874
#undef MAX_SOFTWARE_ENDSTOP_K
881-
#undef SAFE_BED_LEVELING_START_K
882875
#endif
883876

884877
#if !HAS_U_AXIS
@@ -895,7 +888,6 @@
895888
#undef MANUAL_U_HOME_POS
896889
#undef MIN_SOFTWARE_ENDSTOP_U
897890
#undef MAX_SOFTWARE_ENDSTOP_U
898-
#undef SAFE_BED_LEVELING_START_U
899891
#endif
900892

901893
#if !HAS_V_AXIS
@@ -912,7 +904,6 @@
912904
#undef MANUAL_V_HOME_POS
913905
#undef MIN_SOFTWARE_ENDSTOP_V
914906
#undef MAX_SOFTWARE_ENDSTOP_V
915-
#undef SAFE_BED_LEVELING_START_V
916907
#endif
917908

918909
#if !HAS_W_AXIS
@@ -929,7 +920,6 @@
929920
#undef MANUAL_W_HOME_POS
930921
#undef MIN_SOFTWARE_ENDSTOP_W
931922
#undef MAX_SOFTWARE_ENDSTOP_W
932-
#undef SAFE_BED_LEVELING_START_W
933923
#endif
934924

935925
#ifdef X2_DRIVER_TYPE
@@ -1665,7 +1655,9 @@
16651655
#endif
16661656
#endif
16671657

1668-
#if X_HOME_DIR || (HAS_Y_AXIS && Y_HOME_DIR) || (HAS_Z_AXIS && Z_HOME_DIR) || (HAS_I_AXIS && I_HOME_DIR) || (HAS_J_AXIS && J_HOME_DIR) || (HAS_K_AXIS && K_HOME_DIR)
1658+
#if X_HOME_DIR || (HAS_Y_AXIS && Y_HOME_DIR) || (HAS_Z_AXIS && Z_HOME_DIR) \
1659+
|| (HAS_I_AXIS && I_HOME_DIR) || (HAS_J_AXIS && J_HOME_DIR) || (HAS_K_AXIS && K_HOME_DIR) \
1660+
|| (HAS_U_AXIS && U_HOME_DIR) || (HAS_V_AXIS && V_HOME_DIR) || (HAS_W_AXIS && W_HOME_DIR)
16691661
#define HAS_ENDSTOPS 1
16701662
#define COORDINATE_OKAY(N,L,H) WITHIN(N,L,H)
16711663
#else

‎Marlin/src/inc/Conditionals_adv.h

+31-20
Original file line numberDiff line numberDiff line change
@@ -86,31 +86,47 @@
8686
#undef PROBE_DEPLOY_STOW_MENU
8787
#endif
8888

89+
// Some options are disallowed without required axes
90+
#if !HAS_Y_AXIS
91+
#undef SAFE_BED_LEVELING_START_Y
92+
#undef ARC_SUPPORT
93+
#undef INPUT_SHAPING_Y
94+
#undef SHAPING_FREQ_Y
95+
#undef SHAPING_BUFFER_Y
96+
#endif
97+
#if !HAS_Z_AXIS
98+
#undef SAFE_BED_LEVELING_START_Z
99+
#endif
100+
#if !HAS_I_AXIS
101+
#undef SAFE_BED_LEVELING_START_I
102+
#endif
103+
#if !HAS_J_AXIS
104+
#undef SAFE_BED_LEVELING_START_J
105+
#endif
106+
#if !HAS_K_AXIS
107+
#undef SAFE_BED_LEVELING_START_K
108+
#endif
109+
#if !HAS_U_AXIS
110+
#undef SAFE_BED_LEVELING_START_U
111+
#endif
112+
#if !HAS_V_AXIS
113+
#undef SAFE_BED_LEVELING_START_V
114+
#endif
115+
#if !HAS_W_AXIS
116+
#undef SAFE_BED_LEVELING_START_W
117+
#endif
118+
119+
// Disallowed with no extruders
89120
#if !HAS_EXTRUDERS
90121
#define NO_VOLUMETRICS
91-
#undef TEMP_SENSOR_0
92-
#undef TEMP_SENSOR_1
93-
#undef TEMP_SENSOR_2
94-
#undef TEMP_SENSOR_3
95-
#undef TEMP_SENSOR_4
96-
#undef TEMP_SENSOR_5
97-
#undef TEMP_SENSOR_6
98-
#undef TEMP_SENSOR_7
99122
#undef FWRETRACT
100123
#undef PIDTEMP
101124
#undef AUTOTEMP
102125
#undef PID_EXTRUSION_SCALING
103126
#undef LIN_ADVANCE
104-
#undef FILAMENT_RUNOUT_SENSOR
105127
#undef ADVANCED_PAUSE_FEATURE
106-
#undef FILAMENT_RUNOUT_DISTANCE_MM
107-
#undef FILAMENT_LOAD_UNLOAD_GCODES
108-
#undef DISABLE_INACTIVE_EXTRUDER
109128
#undef FILAMENT_LOAD_UNLOAD_GCODES
110129
#undef EXTRUDER_RUNOUT_PREVENT
111-
#undef PREVENT_COLD_EXTRUSION
112-
#undef PREVENT_LENGTHY_EXTRUDE
113-
#undef THERMAL_PROTECTION_HOTENDS
114130
#undef THERMAL_PROTECTION_PERIOD
115131
#undef WATCH_TEMP_PERIOD
116132
#undef SHOW_TEMP_ADC_VALUES
@@ -1127,11 +1143,6 @@
11271143
#endif
11281144

11291145
// Input shaping
1130-
#if !HAS_Y_AXIS
1131-
#undef INPUT_SHAPING_Y
1132-
#undef SHAPING_FREQ_Y
1133-
#undef SHAPING_BUFFER_Y
1134-
#endif
11351146
#if EITHER(INPUT_SHAPING_X, INPUT_SHAPING_Y)
11361147
#define HAS_SHAPING 1
11371148
#endif

‎Marlin/src/inc/Conditionals_post.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -2250,7 +2250,7 @@
22502250
#define IS_Z3_ENDSTOP(A,M) (ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPERS >= 3 && Z3_USE_ENDSTOP == _##A##M##_)
22512251
#define IS_Z4_ENDSTOP(A,M) (ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPERS >= 4 && Z4_USE_ENDSTOP == _##A##M##_)
22522252

2253-
#define _HAS_STOP(A,M) (PIN_EXISTS(A##_##M) && !IS_PROBE_PIN(A,M) && !IS_X2_ENDSTOP(A,M) && !IS_Y2_ENDSTOP(A,M) && !IS_Z2_ENDSTOP(A,M) && !IS_Z3_ENDSTOP(A,M) && !IS_Z4_ENDSTOP(A,M))
2253+
#define _HAS_STOP(A,M) (HAS_##A##_AXIS && PIN_EXISTS(A##_##M) && !IS_PROBE_PIN(A,M) && !IS_X2_ENDSTOP(A,M) && !IS_Y2_ENDSTOP(A,M) && !IS_Z2_ENDSTOP(A,M) && !IS_Z3_ENDSTOP(A,M) && !IS_Z4_ENDSTOP(A,M))
22542254
#if _HAS_STOP(X,MIN)
22552255
#define HAS_X_MIN 1
22562256
#endif

‎Marlin/src/inc/SanityCheck.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -849,7 +849,9 @@ static_assert(COUNT(arm) == LOGICAL_AXES, "AXIS_RELATIVE_MODES must contain " _L
849849
* Validate that the bed size fits
850850
*/
851851
static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS) are too narrow to contain X_BED_SIZE.");
852-
static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS) are too narrow to contain Y_BED_SIZE.");
852+
#if HAS_Y_AXIS
853+
static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS) are too narrow to contain Y_BED_SIZE.");
854+
#endif
853855

854856
/**
855857
* Granular software endstops (Marlin >= 1.1.7)

‎Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/move_axis_screen.cpp

+36-30
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ void MoveAxisScreen::onRedraw(draw_mode_t what) {
6161
w.adjuster( 10, GET_TEXT_F(MSG_AXIS_E2), mydata.e_rel[1], canMove(E1));
6262
#if EXTRUDERS > 2
6363
w.adjuster( 12, GET_TEXT_F(MSG_AXIS_E3), mydata.e_rel[2], canMove(E2));
64-
#endif
65-
#if EXTRUDERS > 3
66-
w.adjuster( 14, GET_TEXT_F(MSG_AXIS_E4), mydata.e_rel[3], canMove(E3));
64+
#if EXTRUDERS > 3
65+
w.adjuster( 14, GET_TEXT_F(MSG_AXIS_E4), mydata.e_rel[3], canMove(E3));
66+
#endif
6767
#endif
6868
#endif
6969
#if Z_HOME_TO_MIN
@@ -79,40 +79,44 @@ bool BaseMoveAxisScreen::onTouchHeld(uint8_t tag) {
7979
switch (tag) {
8080
case 2: UI_DECREMENT_AXIS(X); break;
8181
case 3: UI_INCREMENT_AXIS(X); break;
82-
case 4: UI_DECREMENT_AXIS(Y); break;
83-
case 5: UI_INCREMENT_AXIS(Y); break;
84-
case 6: UI_DECREMENT_AXIS(Z); break;
85-
case 7: UI_INCREMENT_AXIS(Z); break;
86-
// For extruders, also update relative distances.
87-
case 8: UI_DECREMENT_AXIS(E0); mydata.e_rel[0] -= increment; break;
88-
case 9: UI_INCREMENT_AXIS(E0); mydata.e_rel[0] += increment; break;
89-
#if HAS_MULTI_EXTRUDER
90-
case 10: UI_DECREMENT_AXIS(E1); mydata.e_rel[1] -= increment; break;
91-
case 11: UI_INCREMENT_AXIS(E1); mydata.e_rel[1] += increment; break;
92-
#endif
93-
#if EXTRUDERS > 2
94-
case 12: UI_DECREMENT_AXIS(E2); mydata.e_rel[2] -= increment; break;
95-
case 13: UI_INCREMENT_AXIS(E2); mydata.e_rel[2] += increment; break;
82+
#if HAS_EXTRUDERS
83+
// For extruders, also update relative distances.
84+
case 8: UI_DECREMENT_AXIS(E0); mydata.e_rel[0] -= increment; break;
85+
case 9: UI_INCREMENT_AXIS(E0); mydata.e_rel[0] += increment; break;
86+
#if HAS_MULTI_EXTRUDER
87+
case 10: UI_DECREMENT_AXIS(E1); mydata.e_rel[1] -= increment; break;
88+
case 11: UI_INCREMENT_AXIS(E1); mydata.e_rel[1] += increment; break;
89+
#if EXTRUDERS > 2
90+
case 12: UI_DECREMENT_AXIS(E2); mydata.e_rel[2] -= increment; break;
91+
case 13: UI_INCREMENT_AXIS(E2); mydata.e_rel[2] += increment; break;
92+
#if EXTRUDERS > 3
93+
case 14: UI_DECREMENT_AXIS(E3); mydata.e_rel[3] -= increment; break;
94+
case 15: UI_INCREMENT_AXIS(E3); mydata.e_rel[3] += increment; break;
95+
#endif
96+
#endif
97+
#endif
9698
#endif
97-
#if EXTRUDERS > 3
98-
case 14: UI_DECREMENT_AXIS(E3); mydata.e_rel[3] -= increment; break;
99-
case 15: UI_INCREMENT_AXIS(E3); mydata.e_rel[3] += increment; break;
99+
#if HAS_Y_AXIS
100+
case 4: UI_DECREMENT_AXIS(Y); break;
101+
case 5: UI_INCREMENT_AXIS(Y); break;
102+
case 20: SpinnerDialogBox::enqueueAndWait(F("G28X")); break;
103+
case 21: SpinnerDialogBox::enqueueAndWait(F("G28Y")); break;
104+
#if HAS_Z_AXIS
105+
case 6: UI_DECREMENT_AXIS(Z); break;
106+
case 7: UI_INCREMENT_AXIS(Z); break;
107+
case 22: SpinnerDialogBox::enqueueAndWait(F("G28Z")); break;
108+
case 24: raiseZtoTop(); break;
109+
#endif
100110
#endif
101-
case 20: SpinnerDialogBox::enqueueAndWait(F("G28X")); break;
102-
case 21: SpinnerDialogBox::enqueueAndWait(F("G28Y")); break;
103-
case 22: SpinnerDialogBox::enqueueAndWait(F("G28Z")); break;
104111
case 23: SpinnerDialogBox::enqueueAndWait(F("G28")); break;
105-
case 24: raiseZtoTop(); break;
106112
default:
107113
return false;
108114
}
109-
#undef UI_DECREMENT_AXIS
110-
#undef UI_INCREMENT_AXIS
111115
return true;
112116
}
113117

114118
void BaseMoveAxisScreen::raiseZtoTop() {
115-
constexpr xyze_feedrate_t homing_feedrate = HOMING_FEEDRATE_MM_M;
119+
constexpr xyz_feedrate_t homing_feedrate = HOMING_FEEDRATE_MM_M;
116120
setAxisPosition_mm(Z_MAX_POS - 5, Z, homing_feedrate.z);
117121
}
118122

@@ -128,9 +132,11 @@ void BaseMoveAxisScreen::setManualFeedrate(ExtUI::axis_t axis, float increment_m
128132
ExtUI::setFeedrate_mm_s(getManualFeedrate(X_AXIS + (axis - ExtUI::X), increment_mm));
129133
}
130134

131-
void BaseMoveAxisScreen::setManualFeedrate(ExtUI::extruder_t, float increment_mm) {
132-
ExtUI::setFeedrate_mm_s(getManualFeedrate(E_AXIS, increment_mm));
133-
}
135+
#if HAS_EXTRUDERS
136+
void BaseMoveAxisScreen::setManualFeedrate(ExtUI::extruder_t, float increment_mm) {
137+
ExtUI::setFeedrate_mm_s(getManualFeedrate(E_AXIS, increment_mm));
138+
}
139+
#endif
134140

135141
void MoveAxisScreen::onIdle() {
136142
if (refresh_timer.elapsed(STATUS_UPDATE_INTERVAL)) {

‎Marlin/src/module/motion.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ void report_current_position_projected() {
361361

362362
// Return true if the given position is within the machine bounds.
363363
bool position_is_reachable(const_float_t rx, const_float_t ry) {
364-
if (!COORDINATE_OKAY(ry, Y_MIN_POS - fslop, Y_MAX_POS + fslop)) return false;
364+
if (TERN0(HAS_Y_AXIS, !COORDINATE_OKAY(ry, Y_MIN_POS - fslop, Y_MAX_POS + fslop))) return false;
365365
#if ENABLED(DUAL_X_CARRIAGE)
366366
if (active_extruder)
367367
return COORDINATE_OKAY(rx, X2_MIN_POS - fslop, X2_MAX_POS + fslop);
@@ -630,7 +630,7 @@ void do_blocking_move_to(NUM_AXIS_ARGS(const float), const_feedRate_t fr_mm_s/*=
630630
if (current_position.z < z) { current_position.z = z; line_to_current_position(z_feedrate); }
631631
#endif
632632

633-
current_position.set(x, y); line_to_current_position(xy_feedrate);
633+
current_position.set(x OPTARG(HAS_Y_AXIS, y)); line_to_current_position(xy_feedrate);
634634

635635
#if HAS_I_AXIS
636636
current_position.i = i; line_to_current_position(i_feedrate);

0 commit comments

Comments
 (0)
Please sign in to comment.