🏗️ Support for up to 6 linear axes (#19112)
Co-authored-by: Scott Lahteine <github@thinkyhead.com>
This commit is contained in:
		
				
					committed by
					
						
						Scott Lahteine
					
				
			
			
				
	
			
			
			
						parent
						
							d3c56a76e7
						
					
				
				
					commit
					c1fca91103
				
			@@ -168,6 +168,51 @@ void setup_endstop_interrupts() {
 | 
			
		||||
      pciSetup(Z_MIN_PIN);
 | 
			
		||||
    #endif
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_I_MAX
 | 
			
		||||
    #if (digitalPinToInterrupt(I_MAX_PIN) != NOT_AN_INTERRUPT)
 | 
			
		||||
      _ATTACH(I_MAX_PIN);
 | 
			
		||||
    #else
 | 
			
		||||
      static_assert(digitalPinHasPCICR(I_MAX_PIN), "I_MAX_PIN is not interrupt-capable");
 | 
			
		||||
      pciSetup(I_MAX_PIN);
 | 
			
		||||
    #endif
 | 
			
		||||
  #elif HAS_I_MIN
 | 
			
		||||
    #if (digitalPinToInterrupt(I_MIN_PIN) != NOT_AN_INTERRUPT)
 | 
			
		||||
      _ATTACH(I_MIN_PIN);
 | 
			
		||||
    #else
 | 
			
		||||
      static_assert(digitalPinHasPCICR(I_MIN_PIN), "I_MIN_PIN is not interrupt-capable");
 | 
			
		||||
      pciSetup(I_MIN_PIN);
 | 
			
		||||
    #endif
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_J_MAX
 | 
			
		||||
    #if (digitalPinToInterrupt(J_MAX_PIN) != NOT_AN_INTERRUPT)
 | 
			
		||||
      _ATTACH(J_MAX_PIN);
 | 
			
		||||
    #else
 | 
			
		||||
      static_assert(digitalPinHasPCICR(J_MAX_PIN), "J_MAX_PIN is not interrupt-capable");
 | 
			
		||||
      pciSetup(J_MAX_PIN);
 | 
			
		||||
    #endif
 | 
			
		||||
  #elif HAS_J_MIN
 | 
			
		||||
    #if (digitalPinToInterrupt(J_MIN_PIN) != NOT_AN_INTERRUPT)
 | 
			
		||||
      _ATTACH(J_MIN_PIN);
 | 
			
		||||
    #else
 | 
			
		||||
      static_assert(digitalPinHasPCICR(J_MIN_PIN), "J_MIN_PIN is not interrupt-capable");
 | 
			
		||||
      pciSetup(J_MIN_PIN);
 | 
			
		||||
    #endif
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_K_MAX
 | 
			
		||||
    #if (digitalPinToInterrupt(K_MAX_PIN) != NOT_AN_INTERRUPT)
 | 
			
		||||
      _ATTACH(K_MAX_PIN);
 | 
			
		||||
    #else
 | 
			
		||||
      static_assert(digitalPinHasPCICR(K_MAX_PIN), "K_MAX_PIN is not interrupt-capable");
 | 
			
		||||
      pciSetup(K_MAX_PIN);
 | 
			
		||||
    #endif
 | 
			
		||||
  #elif HAS_K_MIN
 | 
			
		||||
    #if (digitalPinToInterrupt(K_MIN_PIN) != NOT_AN_INTERRUPT)
 | 
			
		||||
      _ATTACH(K_MIN_PIN);
 | 
			
		||||
    #else
 | 
			
		||||
      static_assert(digitalPinHasPCICR(K_MIN_PIN), "K_MIN_PIN is not interrupt-capable");
 | 
			
		||||
      pciSetup(K_MIN_PIN);
 | 
			
		||||
    #endif
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_X2_MAX
 | 
			
		||||
    #if (digitalPinToInterrupt(X2_MAX_PIN) != NOT_AN_INTERRUPT)
 | 
			
		||||
      _ATTACH(X2_MAX_PIN);
 | 
			
		||||
@@ -256,6 +301,5 @@ void setup_endstop_interrupts() {
 | 
			
		||||
      pciSetup(Z_MIN_PROBE_PIN);
 | 
			
		||||
    #endif
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  // If we arrive here without raising an assertion, each pin has either an EXT-interrupt or a PCI.
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -64,4 +64,10 @@ void setup_endstop_interrupts() {
 | 
			
		||||
  TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN));
 | 
			
		||||
  TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN));
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -59,4 +59,10 @@ void setup_endstop_interrupts() {
 | 
			
		||||
  TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN));
 | 
			
		||||
  TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN));
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -122,4 +122,37 @@ void setup_endstop_interrupts() {
 | 
			
		||||
    #endif
 | 
			
		||||
    _ATTACH(Z_MIN_PROBE_PIN);
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_I_MAX
 | 
			
		||||
    #if !LPC1768_PIN_INTERRUPT_M(I_MAX_PIN)
 | 
			
		||||
      #error "I_MAX_PIN is not INTERRUPT-capable."
 | 
			
		||||
    #endif
 | 
			
		||||
    _ATTACH(I_MAX_PIN);
 | 
			
		||||
  #elif HAS_I_MIN
 | 
			
		||||
    #if !LPC1768_PIN_INTERRUPT_M(I_MIN_PIN)
 | 
			
		||||
      #error "I_MIN_PIN is not INTERRUPT-capable."
 | 
			
		||||
    #endif
 | 
			
		||||
    _ATTACH(I_MIN_PIN);
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_J_MAX
 | 
			
		||||
    #if !LPC1768_PIN_INTERRUPT_M(J_MAX_PIN)
 | 
			
		||||
      #error "J_MAX_PIN is not INTERRUPT-capable."
 | 
			
		||||
    #endif
 | 
			
		||||
    _ATTACH(J_MAX_PIN);
 | 
			
		||||
  #elif HAS_J_MIN
 | 
			
		||||
    #if !LPC1768_PIN_INTERRUPT_M(J_MIN_PIN)
 | 
			
		||||
      #error "J_MIN_PIN is not INTERRUPT-capable."
 | 
			
		||||
    #endif
 | 
			
		||||
    _ATTACH(J_MIN_PIN);
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_K_MAX
 | 
			
		||||
    #if !LPC1768_PIN_INTERRUPT_M(K_MAX_PIN)
 | 
			
		||||
      #error "K_MAX_PIN is not INTERRUPT-capable."
 | 
			
		||||
    #endif
 | 
			
		||||
    _ATTACH(K_MAX_PIN);
 | 
			
		||||
  #elif HAS_K_MIN
 | 
			
		||||
    #if !LPC1768_PIN_INTERRUPT_M(K_MIN_PIN)
 | 
			
		||||
      #error "K_MIN_PIN is not INTERRUPT-capable."
 | 
			
		||||
    #endif
 | 
			
		||||
    _ATTACH(K_MIN_PIN);
 | 
			
		||||
  #endif
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -47,80 +47,38 @@
 | 
			
		||||
 | 
			
		||||
#include "../../module/endstops.h"
 | 
			
		||||
 | 
			
		||||
#define MATCH_EILINE(P1,P2)     (P1 != P2 && PIN_TO_EILINE(P1) == PIN_TO_EILINE(P2))
 | 
			
		||||
#if HAS_X_MAX
 | 
			
		||||
  #define MATCH_X_MAX_EILINE(P) MATCH_EILINE(P, X_MAX_PIN)
 | 
			
		||||
#else
 | 
			
		||||
  #define MATCH_X_MAX_EILINE(P) false
 | 
			
		||||
#endif
 | 
			
		||||
#if HAS_X_MIN
 | 
			
		||||
  #define MATCH_X_MIN_EILINE(P) MATCH_EILINE(P, X_MIN_PIN)
 | 
			
		||||
#else
 | 
			
		||||
  #define MATCH_X_MIN_EILINE(P) false
 | 
			
		||||
#endif
 | 
			
		||||
#if HAS_Y_MAX
 | 
			
		||||
   #define MATCH_Y_MAX_EILINE(P) MATCH_EILINE(P, Y_MAX_PIN)
 | 
			
		||||
#else
 | 
			
		||||
   #define MATCH_Y_MAX_EILINE(P) false
 | 
			
		||||
#endif
 | 
			
		||||
#if HAS_Y_MIN
 | 
			
		||||
  #define MATCH_Y_MIN_EILINE(P) MATCH_EILINE(P, Y_MIN_PIN)
 | 
			
		||||
#else
 | 
			
		||||
  #define MATCH_Y_MIN_EILINE(P) false
 | 
			
		||||
#endif
 | 
			
		||||
#if HAS_Z_MAX
 | 
			
		||||
   #define MATCH_Z_MAX_EILINE(P) MATCH_EILINE(P, Z_MAX_PIN)
 | 
			
		||||
#else
 | 
			
		||||
  #define MATCH_Z_MAX_EILINE(P) false
 | 
			
		||||
#endif
 | 
			
		||||
#if HAS_Z_MIN
 | 
			
		||||
  #define MATCH_Z_MIN_EILINE(P) MATCH_EILINE(P, Z_MIN_PIN)
 | 
			
		||||
#else
 | 
			
		||||
  #define MATCH_Z_MIN_EILINE(P) false
 | 
			
		||||
#endif
 | 
			
		||||
#if HAS_Z2_MAX
 | 
			
		||||
  #define MATCH_Z2_MAX_EILINE(P) MATCH_EILINE(P, Z2_MAX_PIN)
 | 
			
		||||
#else
 | 
			
		||||
  #define MATCH_Z2_MAX_EILINE(P) false
 | 
			
		||||
#endif
 | 
			
		||||
#if HAS_Z2_MIN
 | 
			
		||||
  #define MATCH_Z2_MIN_EILINE(P) MATCH_EILINE(P, Z2_MIN_PIN)
 | 
			
		||||
#else
 | 
			
		||||
  #define MATCH_Z2_MIN_EILINE(P) false
 | 
			
		||||
#endif
 | 
			
		||||
#if HAS_Z3_MAX
 | 
			
		||||
  #define MATCH_Z3_MAX_EILINE(P) MATCH_EILINE(P, Z3_MAX_PIN)
 | 
			
		||||
#else
 | 
			
		||||
  #define MATCH_Z3_MAX_EILINE(P) false
 | 
			
		||||
#endif
 | 
			
		||||
#if HAS_Z3_MIN
 | 
			
		||||
  #define MATCH_Z3_MIN_EILINE(P) MATCH_EILINE(P, Z3_MIN_PIN)
 | 
			
		||||
#else
 | 
			
		||||
  #define MATCH_Z3_MIN_EILINE(P) false
 | 
			
		||||
#endif
 | 
			
		||||
#if HAS_Z4_MAX
 | 
			
		||||
  #define MATCH_Z4_MAX_EILINE(P) MATCH_EILINE(P, Z4_MAX_PIN)
 | 
			
		||||
#else
 | 
			
		||||
  #define MATCH_Z4_MAX_EILINE(P) false
 | 
			
		||||
#endif
 | 
			
		||||
#if HAS_Z4_MIN
 | 
			
		||||
  #define MATCH_Z4_MIN_EILINE(P) MATCH_EILINE(P, Z4_MIN_PIN)
 | 
			
		||||
#else
 | 
			
		||||
  #define MATCH_Z4_MIN_EILINE(P) false
 | 
			
		||||
#endif
 | 
			
		||||
#if HAS_Z_MIN_PROBE_PIN
 | 
			
		||||
  #define MATCH_Z_MIN_PROBE_EILINE(P)   MATCH_EILINE(P, Z_MIN_PROBE_PIN)
 | 
			
		||||
#else
 | 
			
		||||
  #define MATCH_Z_MIN_PROBE_EILINE(P) false
 | 
			
		||||
#endif
 | 
			
		||||
#define AVAILABLE_EILINE(P)     (PIN_TO_EILINE(P) != -1                                 \
 | 
			
		||||
                                 && !MATCH_X_MAX_EILINE(P) && !MATCH_X_MIN_EILINE(P)    \
 | 
			
		||||
                                 && !MATCH_Y_MAX_EILINE(P) && !MATCH_Y_MIN_EILINE(P)    \
 | 
			
		||||
                                 && !MATCH_Z_MAX_EILINE(P) && !MATCH_Z_MIN_EILINE(P)    \
 | 
			
		||||
                                 && !MATCH_Z2_MAX_EILINE(P) && !MATCH_Z2_MIN_EILINE(P)  \
 | 
			
		||||
                                 && !MATCH_Z3_MAX_EILINE(P) && !MATCH_Z3_MIN_EILINE(P)  \
 | 
			
		||||
                                 && !MATCH_Z4_MAX_EILINE(P) && !MATCH_Z4_MIN_EILINE(P)  \
 | 
			
		||||
                                 && !MATCH_Z_MIN_PROBE_EILINE(P))
 | 
			
		||||
#define MATCH_EILINE(P1,P2) (P1 != P2 && PIN_TO_EILINE(P1) == PIN_TO_EILINE(P2))
 | 
			
		||||
#define MATCH_X_MAX_EILINE(P)   TERN0(HAS_X_MAX,  DEFER4(MATCH_EILINE)(P, X_MAX_PIN))
 | 
			
		||||
#define MATCH_X_MIN_EILINE(P)   TERN0(HAS_X_MIN,  DEFER4(MATCH_EILINE)(P, X_MIN_PIN))
 | 
			
		||||
#define MATCH_Y_MAX_EILINE(P)   TERN0(HAS_Y_MAX,  DEFER4(MATCH_EILINE)(P, Y_MAX_PIN))
 | 
			
		||||
#define MATCH_Y_MIN_EILINE(P)   TERN0(HAS_Y_MIN,  DEFER4(MATCH_EILINE)(P, Y_MIN_PIN))
 | 
			
		||||
#define MATCH_Z_MAX_EILINE(P)   TERN0(HAS_Z_MAX,  DEFER4(MATCH_EILINE)(P, Z_MAX_PIN))
 | 
			
		||||
#define MATCH_Z_MIN_EILINE(P)   TERN0(HAS_Z_MIN,  DEFER4(MATCH_EILINE)(P, Z_MIN_PIN))
 | 
			
		||||
#define MATCH_I_MAX_EILINE(P)   TERN0(HAS_I_MAX,  DEFER4(MATCH_EILINE)(P, I_MAX_PIN))
 | 
			
		||||
#define MATCH_I_MIN_EILINE(P)   TERN0(HAS_I_MIN,  DEFER4(MATCH_EILINE)(P, I_MIN_PIN))
 | 
			
		||||
#define MATCH_J_MAX_EILINE(P)   TERN0(HAS_J_MAX,  DEFER4(MATCH_EILINE)(P, J_MAX_PIN))
 | 
			
		||||
#define MATCH_J_MIN_EILINE(P)   TERN0(HAS_J_MIN,  DEFER4(MATCH_EILINE)(P, J_MIN_PIN))
 | 
			
		||||
#define MATCH_K_MAX_EILINE(P)   TERN0(HAS_K_MAX,  DEFER4(MATCH_EILINE)(P, K_MAX_PIN))
 | 
			
		||||
#define MATCH_K_MIN_EILINE(P)   TERN0(HAS_K_MIN,  DEFER4(MATCH_EILINE)(P, K_MIN_PIN))
 | 
			
		||||
#define MATCH_Z2_MAX_EILINE(P)  TERN0(HAS_Z2_MAX, DEFER4(MATCH_EILINE)(P, Z2_MAX_PIN))
 | 
			
		||||
#define MATCH_Z2_MIN_EILINE(P)  TERN0(HAS_Z2_MIN, DEFER4(MATCH_EILINE)(P, Z2_MIN_PIN))
 | 
			
		||||
#define MATCH_Z3_MAX_EILINE(P)  TERN0(HAS_Z3_MAX, DEFER4(MATCH_EILINE)(P, Z3_MAX_PIN))
 | 
			
		||||
#define MATCH_Z3_MIN_EILINE(P)  TERN0(HAS_Z3_MIN, DEFER4(MATCH_EILINE)(P, Z3_MIN_PIN))
 | 
			
		||||
#define MATCH_Z4_MAX_EILINE(P)  TERN0(HAS_Z4_MAX, DEFER4(MATCH_EILINE)(P, Z4_MAX_PIN))
 | 
			
		||||
#define MATCH_Z4_MIN_EILINE(P)  TERN0(HAS_Z4_MIN, DEFER4(MATCH_EILINE)(P, Z4_MIN_PIN))
 | 
			
		||||
#define MATCH_Z_MIN_PROBE_EILINE(P) TERN0(HAS_Z_MIN_PROBE_PIN, DEFER4(MATCH_EILINE)(P, Z_MIN_PROBE_PIN))
 | 
			
		||||
 | 
			
		||||
#define AVAILABLE_EILINE(P) ( PIN_TO_EILINE(P) != -1    \
 | 
			
		||||
  && !MATCH_X_MAX_EILINE(P) && !MATCH_X_MIN_EILINE(P)   \
 | 
			
		||||
  && !MATCH_Y_MAX_EILINE(P) && !MATCH_Y_MIN_EILINE(P)   \
 | 
			
		||||
  && !MATCH_Z_MAX_EILINE(P) && !MATCH_Z_MIN_EILINE(P)   \
 | 
			
		||||
  && !MATCH_I_MAX_EILINE(P) && !MATCH_I_MIN_EILINE(P)   \
 | 
			
		||||
  && !MATCH_J_MAX_EILINE(P) && !MATCH_J_MIN_EILINE(P)   \
 | 
			
		||||
  && !MATCH_K_MAX_EILINE(P) && !MATCH_K_MIN_EILINE(P)   \
 | 
			
		||||
  && !MATCH_Z2_MAX_EILINE(P) && !MATCH_Z2_MIN_EILINE(P) \
 | 
			
		||||
  && !MATCH_Z3_MAX_EILINE(P) && !MATCH_Z3_MIN_EILINE(P) \
 | 
			
		||||
  && !MATCH_Z4_MAX_EILINE(P) && !MATCH_Z4_MIN_EILINE(P) \
 | 
			
		||||
  && !MATCH_Z_MIN_PROBE_EILINE(P) )
 | 
			
		||||
 | 
			
		||||
// One ISR for all EXT-Interrupts
 | 
			
		||||
void endstop_ISR() { endstops.update(); }
 | 
			
		||||
@@ -204,5 +162,37 @@ void setup_endstop_interrupts() {
 | 
			
		||||
      #error "Z_MIN_PROBE_PIN has no EXTINT line available."
 | 
			
		||||
    #endif
 | 
			
		||||
    _ATTACH(Z_MIN_PROBE_PIN);
 | 
			
		||||
  #elif HAS_I_MAX
 | 
			
		||||
    #if !AVAILABLE_EILINE(I_MAX_PIN)
 | 
			
		||||
      #error "I_MAX_PIN has no EXTINT line available."
 | 
			
		||||
    #endif
 | 
			
		||||
    attachInterrupt(I_MAX_PIN, endstop_ISR, CHANGE);
 | 
			
		||||
  #elif HAS_I_MIN
 | 
			
		||||
    #if !AVAILABLE_EILINE(I_MIN_PIN)
 | 
			
		||||
      #error "I_MIN_PIN has no EXTINT line available."
 | 
			
		||||
    #endif
 | 
			
		||||
    attachInterrupt(I_MIN_PIN, endstop_ISR, CHANGE);
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_J_MAX
 | 
			
		||||
    #if !AVAILABLE_EILINE(J_MAX_PIN)
 | 
			
		||||
      #error "J_MAX_PIN has no EXTINT line available."
 | 
			
		||||
    #endif
 | 
			
		||||
    attachInterrupt(J_MAX_PIN, endstop_ISR, CHANGE);
 | 
			
		||||
  #elif HAS_J_MIN
 | 
			
		||||
    #if !AVAILABLE_EILINE(J_MIN_PIN)
 | 
			
		||||
      #error "J_MIN_PIN has no EXTINT line available."
 | 
			
		||||
    #endif
 | 
			
		||||
    attachInterrupt(J_MIN_PIN, endstop_ISR, CHANGE);
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_K_MAX
 | 
			
		||||
    #if !AVAILABLE_EILINE(K_MAX_PIN)
 | 
			
		||||
      #error "K_MAX_PIN has no EXTINT line available."
 | 
			
		||||
    #endif
 | 
			
		||||
    attachInterrupt(K_MAX_PIN, endstop_ISR, CHANGE);
 | 
			
		||||
  #elif HAS_K_MIN
 | 
			
		||||
    #if !AVAILABLE_EILINE(K_MIN_PIN)
 | 
			
		||||
      #error "K_MIN_PIN has no EXTINT line available."
 | 
			
		||||
    #endif
 | 
			
		||||
    attachInterrupt(K_MIN_PIN, endstop_ISR, CHANGE);
 | 
			
		||||
  #endif
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -46,4 +46,10 @@ void setup_endstop_interrupts() {
 | 
			
		||||
  TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN));
 | 
			
		||||
  TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN));
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -167,6 +167,15 @@ constexpr bool IsSerialClassAllowed(const HardwareSerial&) { return false; }
 | 
			
		||||
#if AXIS_HAS_HW_SERIAL(Z4)
 | 
			
		||||
  CHECK_AXIS_SERIAL(Z4);
 | 
			
		||||
#endif
 | 
			
		||||
#if AXIS_HAS_HW_SERIAL(I)
 | 
			
		||||
  CHECK_AXIS_SERIAL(I);
 | 
			
		||||
#endif
 | 
			
		||||
#if AXIS_HAS_HW_SERIAL(J)
 | 
			
		||||
  CHECK_AXIS_SERIAL(J);
 | 
			
		||||
#endif
 | 
			
		||||
#if AXIS_HAS_HW_SERIAL(K)
 | 
			
		||||
  CHECK_AXIS_SERIAL(K);
 | 
			
		||||
#endif
 | 
			
		||||
#if AXIS_HAS_HW_SERIAL(E0)
 | 
			
		||||
  CHECK_AXIS_SERIAL(E0);
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -71,4 +71,10 @@ void setup_endstop_interrupts() {
 | 
			
		||||
  TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN));
 | 
			
		||||
  TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN));
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -64,4 +64,10 @@ void setup_endstop_interrupts() {
 | 
			
		||||
  TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN));
 | 
			
		||||
  TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN));
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -63,4 +63,10 @@ void setup_endstop_interrupts() {
 | 
			
		||||
  TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN));
 | 
			
		||||
  TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN));
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -63,4 +63,10 @@ void setup_endstop_interrupts() {
 | 
			
		||||
  TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN));
 | 
			
		||||
  TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN));
 | 
			
		||||
  TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN));
 | 
			
		||||
  TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN));
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user