@ -395,7 +395,7 @@
# elif TX_BUFFER_SIZE && (TX_BUFFER_SIZE < 2 || TX_BUFFER_SIZE > 256 || !IS_POWER_OF_2(TX_BUFFER_SIZE))
# error "TX_BUFFER_SIZE must be 0 or a power of 2 between 1 and 256."
# endif
# elif ENABLED(SERIAL_XON_XOFF) || ENABLED(SERIAL_STATS_MAX_RX_QUEUED) || ENABLED( SERIAL_STATS_DROPPED_RX)
# elif ANY(SERIAL_XON_XOFF, SERIAL_STATS_MAX_RX_QUEUED, SERIAL_STATS_DROPPED_RX)
# error "SERIAL_XON_XOFF and SERIAL_STATS_* features not supported on USB-native AVR devices."
# endif
@ -410,7 +410,7 @@
/**
* Dual / Triple Stepper Drivers
*/
# if ENABLED(X_DUAL_STEPPER_DRIVERS) && ENABLED( DUAL_X_CARRIAGE)
# if BOTH(X_DUAL_STEPPER_DRIVERS, DUAL_X_CARRIAGE)
# error "DUAL_X_CARRIAGE is not compatible with X_DUAL_STEPPER_DRIVERS."
# elif ENABLED(X_DUAL_STEPPER_DRIVERS) && !(HAS_X2_ENABLE && HAS_X2_STEP && HAS_X2_DIR)
# error "X_DUAL_STEPPER_DRIVERS requires X2 pins (and an extra E plug)."
@ -462,21 +462,21 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
# error "PULLDOWN pin mode is not available on the selected board."
# endif
# if ENABLED(ENDSTOPPULLUPS) && ENABLED( ENDSTOPPULLDOWNS)
# if BOTH(ENDSTOPPULLUPS, ENDSTOPPULLDOWNS)
# error "Enable only one of ENDSTOPPULLUPS or ENDSTOPPULLDOWNS."
# elif ENABLED(FIL_RUNOUT_PULLUP) && ENABLED( FIL_RUNOUT_PULLDOWN)
# elif BOTH(FIL_RUNOUT_PULLUP, FIL_RUNOUT_PULLDOWN)
# error "Enable only one of FIL_RUNOUT_PULLUP or FIL_RUNOUT_PULLDOWN."
# elif ENABLED(ENDSTOPPULLUP_XMAX) && ENABLED( ENDSTOPPULLDOWN_XMAX)
# elif BOTH(ENDSTOPPULLUP_XMAX, ENDSTOPPULLDOWN_XMAX)
# error "Enable only one of ENDSTOPPULLUP_X_MAX or ENDSTOPPULLDOWN_X_MAX."
# elif ENABLED(ENDSTOPPULLUP_YMAX) && ENABLED( ENDSTOPPULLDOWN_YMAX)
# elif BOTH(ENDSTOPPULLUP_YMAX, ENDSTOPPULLDOWN_YMAX)
# error "Enable only one of ENDSTOPPULLUP_Y_MAX or ENDSTOPPULLDOWN_Y_MAX."
# elif ENABLED(ENDSTOPPULLUP_ZMAX) && ENABLED( ENDSTOPPULLDOWN_ZMAX)
# elif BOTH(ENDSTOPPULLUP_ZMAX, ENDSTOPPULLDOWN_ZMAX)
# error "Enable only one of ENDSTOPPULLUP_Z_MAX or ENDSTOPPULLDOWN_Z_MAX."
# elif ENABLED(ENDSTOPPULLUP_XMIN) && ENABLED( ENDSTOPPULLDOWN_XMIN)
# elif BOTH(ENDSTOPPULLUP_XMIN, ENDSTOPPULLDOWN_XMIN)
# error "Enable only one of ENDSTOPPULLUP_X_MIN or ENDSTOPPULLDOWN_X_MIN."
# elif ENABLED(ENDSTOPPULLUP_YMIN) && ENABLED( ENDSTOPPULLDOWN_YMIN)
# elif BOTH(ENDSTOPPULLUP_YMIN, ENDSTOPPULLDOWN_YMIN)
# error "Enable only one of ENDSTOPPULLUP_Y_MIN or ENDSTOPPULLDOWN_Y_MIN."
# elif ENABLED(ENDSTOPPULLUP_ZMIN) && ENABLED( ENDSTOPPULLDOWN_ZMIN)
# elif BOTH(ENDSTOPPULLUP_ZMIN, ENDSTOPPULLDOWN_ZMIN)
# error "Enable only one of ENDSTOPPULLUP_Z_MIN or ENDSTOPPULLDOWN_Z_MIN."
# endif
@ -513,7 +513,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
/**
* Custom Boot and Status screens
*/
# if DISABLED(DOGLCD) && (ENABLED(SHOW_CUSTOM_BOOTSCREEN) || ENABLED(CUSTOM_STATUS_SCREEN_IMAGE) )
# if DISABLED(DOGLCD) && EITHER(SHOW_CUSTOM_BOOTSCREEN, CUSTOM_STATUS_SCREEN_IMAGE )
# error "Graphical LCD is required for SHOW_CUSTOM_BOOTSCREEN and CUSTOM_STATUS_SCREEN_IMAGE."
# endif
@ -568,9 +568,9 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
# if ENABLED(BABYSTEPPING)
# if ENABLED(SCARA)
# error "BABYSTEPPING is not implemented for SCARA yet."
# elif ENABLED(DELTA) && ENABLED( BABYSTEP_XY)
# elif BOTH(DELTA, BABYSTEP_XY)
# error "BABYSTEPPING only implemented for Z axis on deltabots."
# elif ENABLED(BABYSTEP_ZPROBE_OFFSET) && ENABLED( MESH_BED_LEVELING)
# elif BOTH(BABYSTEP_ZPROBE_OFFSET, MESH_BED_LEVELING)
# error "MESH_BED_LEVELING and BABYSTEP_ZPROBE_OFFSET is not a valid combination"
# elif ENABLED(BABYSTEP_ZPROBE_OFFSET) && !HAS_BED_PROBE
# error "BABYSTEP_ZPROBE_OFFSET requires a probe."
@ -580,7 +580,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
# error "BABYSTEP_ZPROBE_GFX_OVERLAY requires a BABYSTEP_ZPROBE_OFFSET."
# elif ENABLED(BABYSTEP_HOTEND_Z_OFFSET) && !HAS_HOTEND_OFFSET
# error "BABYSTEP_HOTEND_Z_OFFSET requires 2 or more HOTENDS."
# elif ENABLED(BABYSTEP_ALWAYS_AVAILABLE) && ENABLED( MOVE_Z_WHEN_IDLE)
# elif BOTH(BABYSTEP_ALWAYS_AVAILABLE, MOVE_Z_WHEN_IDLE)
# error "BABYSTEP_ALWAYS_AVAILABLE and MOVE_Z_WHEN_IDLE are incompatible."
# endif
# endif
@ -641,7 +641,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
/**
* Individual axis homing is useless for DELTAS
*/
# if ENABLED(INDIVIDUAL_AXIS_HOMING_MENU) && ENABLED( DELTA)
# if BOTH(INDIVIDUAL_AXIS_HOMING_MENU, DELTA)
# error "INDIVIDUAL_AXIS_HOMING_MENU is incompatible with DELTA kinematics."
# endif
@ -810,7 +810,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
# error "Enable only one of PARKING_EXTRUDER and MAGNETIC_PARKING_EXTRUDER."
# elif EXTRUDERS != 2
# error "PARKING_EXTRUDER requires exactly 2 EXTRUDERS."
# elif !PIN_EXISTS(SOL0) || !PIN_EXISTS( SOL1)
# elif !PIN_EXISTS(SOL0, SOL1)
# error "PARKING_EXTRUDER requires SOL0_PIN and SOL1_PIN."
# elif !defined(PARKING_EXTRUDER_PARKING_X)
# error "PARKING_EXTRUDER requires PARKING_EXTRUDER_PARKING_X."
@ -907,7 +907,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
/**
* Bed Heating Options - PID vs Limit Switching
*/
# if ENABLED(PIDTEMPBED) && ENABLED( BED_LIMIT_SWITCHING)
# if BOTH(PIDTEMPBED, BED_LIMIT_SWITCHING)
# error "To use BED_LIMIT_SWITCHING you must disable PIDTEMPBED."
# endif
@ -974,7 +974,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
/**
* Z_PROBE_SLED is incompatible with DELTA
*/
# if ENABLED(Z_PROBE_SLED) && ENABLED( DELTA)
# if BOTH(Z_PROBE_SLED, DELTA)
# error "You cannot use Z_PROBE_SLED with DELTA."
# endif
@ -1087,7 +1087,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
* Bed Leveling Requirements
*/
# if ENABLED(AUTO_BED_LEVELING_UBL) || ENABLED( AUTO_BED_LEVELING_3POINT)
# if EITHER(AUTO_BED_LEVELING_UBL, AUTO_BED_LEVELING_3POINT)
static_assert ( WITHIN ( PROBE_PT_1_X , MIN_PROBE_X , MAX_PROBE_X ) , " PROBE_PT_1_X is outside the probe region. " ) ;
static_assert ( WITHIN ( PROBE_PT_2_X , MIN_PROBE_X , MAX_PROBE_X ) , " PROBE_PT_2_X is outside the probe region. " ) ;
static_assert ( WITHIN ( PROBE_PT_3_X , MIN_PROBE_X , MAX_PROBE_X ) , " PROBE_PT_3_X is outside the probe region. " ) ;
@ -1221,8 +1221,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
/**
* Make sure DISABLE_ [ XYZ ] compatible with selected homing options
*/
# if ENABLED(DISABLE_X) || ENABLED(DISABLE_Y) || ENABLED( DISABLE_Z)
# if ENABLED(HOME_AFTER_DEACTIVATE) || ENABLED( Z_SAFE_HOMING)
# if ANY(DISABLE_X, DISABLE_Y, DISABLE_Z)
# if EITHER(HOME_AFTER_DEACTIVATE, Z_SAFE_HOMING)
# error "DISABLE_[XYZ] is not compatible with HOME_AFTER_DEACTIVATE or Z_SAFE_HOMING."
# endif
# endif
@ -1255,7 +1255,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
# if ENABLED(SAV_3DGLCD)
# if DISABLED(U8GLIB_SSD1306) && DISABLED(U8GLIB_SH1106)
# error "Enable a SAV_3DGLCD display type: U8GLIB_SSD1306 or U8GLIB_SH1106."
# elif ENABLED(U8GLIB_SSD1306) && ENABLED( U8GLIB_SH1106)
# elif BOTH(U8GLIB_SSD1306, U8GLIB_SH1106)
# error "Only enable one SAV_3DGLCD display type: U8GLIB_SSD1306 or U8GLIB_SH1106."
# endif
# endif
@ -1334,11 +1334,11 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
*/
# if !HAS_HEATER_0
# error "HEATER_0_PIN not defined for this board."
# elif !PIN_EXISTS(TEMP_0) && !PIN_EXISTS( MAX6675_SS)
# elif !ANY_PIN(TEMP_0, MAX6675_SS)
# error "TEMP_0_PIN not defined for this board."
# elif ((defined(__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__)) && (!PIN_EXISTS(E0_STEP) || !PIN_EXISTS(E0_DIR) ))
# elif ((defined(__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__)) && !PIN_EXISTS(E0_STEP, E0_DIR ))
# error "E0_STEP_PIN or E0_DIR_PIN not defined for this board."
# elif ( !(defined(__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__)) && (!PIN_EXISTS(E0_STEP) || !PIN_EXISTS( E0_DIR) || !HAS_E0_ENABLE))
# elif ( !(defined(__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__)) && (!PIN_EXISTS(E0_STEP, E0_DIR) || !HAS_E0_ENABLE))
# error "E0_STEP_PIN, E0_DIR_PIN, or E0_ENABLE_PIN not defined for this board."
# elif TEMP_SENSOR_0 == 0
# error "TEMP_SENSOR_0 is required."
@ -1356,7 +1356,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
# error "MAX6675_SS2_PIN (required for TEMP_SENSOR_1) not defined for this board."
# elif TEMP_SENSOR_1 == 0
# error "TEMP_SENSOR_1 is required with 2 or more HOTENDS."
# elif !PIN_EXISTS(TEMP_1) && !PIN_EXISTS( MAX6675_SS2)
# elif !ANY_PIN(TEMP_1, MAX6675_SS2)
# error "TEMP_1_PIN not defined for this board."
# endif
# if HOTENDS > 2
@ -1434,7 +1434,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
/**
* Temperature status LEDs
*/
# if ENABLED(TEMP_STAT_LEDS) && !PIN_EXISTS(STAT_LED_RED) && !PIN_EXISTS( STAT_LED_BLUE)
# if ENABLED(TEMP_STAT_LEDS) && !ANY_PIN(STAT_LED_RED, STAT_LED_BLUE)
# error "TEMP_STAT_LEDS requires STAT_LED_RED_PIN or STAT_LED_BLUE_PIN, preferably both."
# endif
@ -1442,7 +1442,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
* LED Control Menu
*/
# if ENABLED(LED_CONTROL_MENU) && !HAS_COLOR_LEDS
# error "LED_CONTROL_MENU requires BLINKM, RGB_LED, RGBW_LED, PCA9632, or NEOPIXEL_LED."
# error "LED_CONTROL_MENU requires BLINKM, RGB_LED, RGBW_LED, PCA9533, PCA9 632, or NEOPIXEL_LED."
# endif
/**
@ -1467,27 +1467,27 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
*/
# if DISABLED(MK2_MULTIPLEXER) // MK2_MULTIPLEXER uses E0 stepper only
# if E_STEPPERS
# if !(PIN_EXISTS(E0_STEP) && PIN_EXISTS( E0_DIR) && HAS_E0_ENABLE)
# if !(PIN_EXISTS(E0_STEP, E0_DIR) && HAS_E0_ENABLE)
# error "E0_STEP_PIN, E0_DIR_PIN, or E0_ENABLE_PIN not defined for this board."
# endif
# if E_STEPPERS > 1
# if !(PIN_EXISTS(E1_STEP) && PIN_EXISTS( E1_DIR) && HAS_E1_ENABLE)
# if !(PIN_EXISTS(E1_STEP, E1_DIR) && HAS_E1_ENABLE)
# error "E1_STEP_PIN, E1_DIR_PIN, or E1_ENABLE_PIN not defined for this board."
# endif
# if E_STEPPERS > 2
# if !(PIN_EXISTS(E2_STEP) && PIN_EXISTS( E2_DIR) && HAS_E2_ENABLE)
# if !(PIN_EXISTS(E2_STEP, E2_DIR) && HAS_E2_ENABLE)
# error "E2_STEP_PIN, E2_DIR_PIN, or E2_ENABLE_PIN not defined for this board."
# endif
# if E_STEPPERS > 3
# if !(PIN_EXISTS(E3_STEP) && PIN_EXISTS( E3_DIR) && HAS_E3_ENABLE)
# if !(PIN_EXISTS(E3_STEP, E3_DIR) && HAS_E3_ENABLE)
# error "E3_STEP_PIN, E3_DIR_PIN, or E3_ENABLE_PIN not defined for this board."
# endif
# if E_STEPPERS > 4
# if !(PIN_EXISTS(E4_STEP) && PIN_EXISTS( E4_DIR) && HAS_E4_ENABLE)
# if !(PIN_EXISTS(E4_STEP, E4_DIR) && HAS_E4_ENABLE)
# error "E4_STEP_PIN, E4_DIR_PIN, or E4_ENABLE_PIN not defined for this board."
# endif
# if E_STEPPERS > 5
# if !(PIN_EXISTS(E5_STEP) && PIN_EXISTS( E5_DIR) && HAS_E5_ENABLE)
# if !(PIN_EXISTS(E5_STEP, E5_DIR) && HAS_E5_ENABLE)
# error "E5_STEP_PIN, E5_DIR_PIN, or E5_ENABLE_PIN not defined for this board."
# endif
# endif // E_STEPPERS > 5
@ -1675,9 +1675,9 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
/**
* RGB_LED Requirements
*/
# define _RGB_TEST (PIN_EXISTS(RGB_LED_R) && PIN_EXISTS(RGB_LED_G) && PIN_EXISTS( RGB_LED_B))
# define _RGB_TEST (PIN_EXISTS(RGB_LED_R, RGB_LED_G, RGB_LED_B))
# if ENABLED(PRINTER_EVENT_LEDS) && !HAS_COLOR_LEDS
# error "PRINTER_EVENT_LEDS requires BLINKM, PCA9632, RGB_LED, RGBW_LED or NEOPIXEL_LED."
# error "PRINTER_EVENT_LEDS requires BLINKM, PCA9533, PCA9 632, RGB_LED, RGBW_LED or NEOPIXEL_LED."
# elif ENABLED(RGB_LED)
# if !_RGB_TEST
# error "RGB_LED requires RGB_LED_R_PIN, RGB_LED_G_PIN, and RGB_LED_B_PIN."
@ -1813,7 +1813,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
/**
* Check existing RX / TX pins against enable TMC UART drivers .
*/
# define INVALID_TMC2208(ST) (AXIS_DRIVER_TYPE(ST, TMC2208) && !(defined(ST##_HARDWARE_SERIAL) || (PIN_EXISTS(ST##_SERIAL_RX) && PIN_EXISTS( ST##_SERIAL_TX))))
# define INVALID_TMC2208(ST) (AXIS_DRIVER_TYPE(ST, TMC2208) && !(defined(ST##_HARDWARE_SERIAL) || (PIN_EXISTS(ST##_SERIAL_RX, ST##_SERIAL_TX))))
# if INVALID_TMC2208(X)
# error "TMC2208 on X requires X_HARDWARE_SERIAL or X_SERIAL_(RX|TX)_PIN."
# elif INVALID_TMC2208(X2)
@ -1887,7 +1887,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
// is necessary in order to reset the stallGuard indication between the initial movement of all three
// towers to +Z and the individual homing of each tower. This restriction can be removed once a means of
// clearing the stallGuard activated status is found.
# if ENABLED(DELTA) && !(ENABLED(STEALTHCHOP_XY) && ENABLED(STEALTHCHOP_Z) )
# if ENABLED(DELTA) && !BOTH(STEALTHCHOP_XY, STEALTHCHOP_Z )
# error "SENSORLESS_HOMING on DELTA currently requires STEALTHCHOP_XY and STEALTHCHOP_Z."
# elif X_SENSORLESS && X_HOME_DIR == -1 && (!X_MIN_ENDSTOP_INVERTING || DISABLED(ENDSTOPPULLUP_XMIN))
# error "SENSORLESS_HOMING requires X_MIN_ENDSTOP_INVERTING and ENDSTOPPULLUP_XMIN when homing to X_MIN."
@ -1909,7 +1909,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
// Sensorless homing/probing requirements
# if ENABLED(SENSORLESS_HOMING) && !(X_SENSORLESS || Y_SENSORLESS || Z_SENSORLESS)
# error "SENSORLESS_HOMING requires a TMC stepper driver with StallGuard on X, Y, or Z axes."
# elif ENABLED(SENSORLESS_PROBING) && ENABLED( DELTA) && !(X_SENSORLESS && Y_SENSORLESS && Z_SENSORLESS)
# elif BOTH(SENSORLESS_PROBING, DELTA) && !(X_SENSORLESS && Y_SENSORLESS && Z_SENSORLESS)
# error "SENSORLESS_PROBING for DELTA requires TMC stepper drivers with StallGuard on X, Y, and Z axes."
# elif ENABLED(SENSORLESS_PROBING) && !Z_SENSORLESS
# error "SENSORLESS_PROBING requires a TMC stepper driver with StallGuard on Z."
@ -1981,7 +1981,7 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
# undef _ARR_TEST
# if ENABLED(CNC_COORDINATE_SYSTEMS) && ENABLED( NO_WORKSPACE_OFFSETS)
# if BOTH(CNC_COORDINATE_SYSTEMS, NO_WORKSPACE_OFFSETS)
# error "CNC_COORDINATE_SYSTEMS is incompatible with NO_WORKSPACE_OFFSETS."
# endif
@ -2036,7 +2036,7 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
# error "PRINTCOUNTER requires EEPROM_SETTINGS. Please update your Configuration."
# endif
# if ENABLED(USB_FLASH_DRIVE_SUPPORT) && !(PIN_EXISTS(USB_CS) && PIN_EXISTS(USB_INTR) )
# if ENABLED(USB_FLASH_DRIVE_SUPPORT) && !PIN_EXISTS(USB_CS, USB_INTR )
# error "USB_CS_PIN and USB_INTR_PIN are required for USB_FLASH_DRIVE_SUPPORT."
# endif