Commit cb9f5b7c authored by Simone Primarosa's avatar Simone Primarosa

Update 4.2.0 dev

final test stage
parent f32fb713
/**
* Configuration_Overall.h
* Here you can define all your custom settings and they will overwrite configurations in the main configuration files.
*/
#define MECHANISM MECH_CARTESIAN
#define BAUDRATE 115200
#define MOTHERBOARD BOARD_RAMPS_13_EFB
#define POWER_SUPPLY 0
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_3 0
#define TEMP_SENSOR_BED 4
#define HEATER_0_MAXTEMP 275
#define HEATER_1_MAXTEMP 275
#define HEATER_2_MAXTEMP 275
#define HEATER_3_MAXTEMP 275
#define BED_MAXTEMP 150
#define HEATER_0_MINTEMP 5
#define HEATER_1_MINTEMP 5
#define HEATER_2_MINTEMP 5
#define HEATER_3_MINTEMP 5
#define BED_MINTEMP 5
#define PLA_PREHEAT_HOTEND_TEMP 190
#define PLA_PREHEAT_HPB_TEMP 60
#define PLA_PREHEAT_FAN_SPEED 255
#define ABS_PREHEAT_HOTEND_TEMP 240
#define ABS_PREHEAT_HPB_TEMP 100
#define ABS_PREHEAT_FAN_SPEED 255
#define GUM_PREHEAT_HOTEND_TEMP 230
#define GUM_PREHEAT_HPB_TEMP 60
#define GUM_PREHEAT_FAN_SPEED 255
#define EXTRUDERS 4
#define DRIVER_EXTRUDERS 1
#define LANGUAGE_CHOICE 7
#define CUSTOM_MACHINE_NAME "Prusa I3"
#undef ENDSTOPPULLUPS
#define ENDSTOPPULLUP_YMIN
#define ENDSTOPPULLUP_Z2MIN
#define ENDSTOPPULLUP_XMAX
#define ENDSTOPPULLUP_YMAX
#define ENDSTOPPULLUP_ZMAX
#define ENDSTOPPULLUP_Z2MAX
#define ENDSTOPPULLUP_ZPROBE
#define ENDSTOPPULLUP_EMIN
#define X_MIN_ENDSTOP_LOGIC false
#define Y_MIN_ENDSTOP_LOGIC false
#define Z_MIN_ENDSTOP_LOGIC false
#define Z2_MIN_ENDSTOP_LOGIC false
#define X_MAX_ENDSTOP_LOGIC false
#define Y_MAX_ENDSTOP_LOGIC false
#define Z_MAX_ENDSTOP_LOGIC false
#define Z2_MAX_ENDSTOP_LOGIC false
#define Z_PROBE_ENDSTOP_LOGIC false
#define E_MIN_ENDSTOP_LOGIC false
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1
#define E_HOME_DIR -1
#define X_ENABLE_ON 0
#define Y_ENABLE_ON 0
#define Z_ENABLE_ON 0
#define E_ENABLE_ON 0
#define INVERT_X_DIR true
#define INVERT_Y_DIR false
#define INVERT_Z_DIR false
#define INVERT_E0_DIR false
#define INVERT_E1_DIR false
#define INVERT_E2_DIR false
#define INVERT_E3_DIR false
#define DISABLE_X false
#define DISABLE_Y false
#define DISABLE_Z false
#define DISABLE_E false
#define X_MAX_POS 200
#define X_MIN_POS 0
#define Y_MAX_POS 200
#define Y_MIN_POS 0
#define Z_MAX_POS 200
#define Z_MIN_POS 0
#define LEFT_PROBE_BED_POSITION 20
#define RIGHT_PROBE_BED_POSITION 180
#define FRONT_PROBE_BED_POSITION 20
#define BACK_PROBE_BED_POSITION 180
#define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,4000,625,625,625,625}
#define DEFAULT_MAX_FEEDRATE {300,300,2,100,100,100,100}
#define DEFAULT_MAX_ACCELERATION {3000,3000,50,3000,3000,3000,3000}
#define DEFAULT_RETRACT_ACCELERATION {10000,10000,10000,10000}
#define DEFAULT_ACCELERATION 2500
#define DEFAULT_TRAVEL_ACCELERATION 3000
#define DEFAULT_XYJERK 10
#define DEFAULT_ZJERK 0.4
#define DEFAULT_EJERK {5.0,5.0,5.0,5.0}
#define HOMING_FEEDRATE {100*60,100*60,2*60,0}
#define PIDTEMP
#define DEFAULT_Kp {41.51,41.51,41.51,41.51}
#define DEFAULT_Ki {7.28,7.28,7.28,7.28}
#define DEFAULT_Kd {59.17,59.17,59.17,59.17}
#define PIDTEMPBED
#define DEFAULT_bedKp 10
#define DEFAULT_bedKi 1
#define DEFAULT_bedKd 305
#define EXTRUDER_AUTO_FAN_TEMPERATURE 50
#define EXTRUDER_AUTO_FAN_SPEED 255
#define PREVENT_DANGEROUS_EXTRUDE
#define PREVENT_LENGTHY_EXTRUDE
#define SINGLENOZZLE
#define MKR4
#define BOWDEN_LENGTH 250
#define LCD_PURGE_LENGTH 10
#define LCD_RETRACT_LENGTH 5
#define LCD_PURGE_FEEDRATE 3
#define LCD_RETRACT_FEEDRATE 5
#define LCD_LOAD_FEEDRATE 20
#define LCD_UNLOAD_FEEDRATE 20
#define Z_PROBE_REPEATABILITY_TEST // If not commented out, Z-Probe Repeatability test will be included if Auto Bed Leveling is Enabled.
#define AUTO_BED_LEVELING_GRID
#define AUTO_BED_LEVELING_GRID_POINTS 2
#define ABL_PROBE_PT_1_X 15
#define ABL_PROBE_PT_1_Y 180
#define ABL_PROBE_PT_2_X 15
#define ABL_PROBE_PT_2_Y 15
#define ABL_PROBE_PT_3_X 180
#define ABL_PROBE_PT_3_Y 15
#define X_PROBE_OFFSET_FROM_EXTRUDER 0
#define Y_PROBE_OFFSET_FROM_EXTRUDER 0
#define Z_PROBE_OFFSET_FROM_EXTRUDER -1
#define Z_RAISE_BEFORE_HOMING 10
#define Z_RAISE_BEFORE_PROBING 10
#define Z_RAISE_BETWEEN_PROBINGS 10
#define NUM_SERVOS 0
#define INVERT_Y2_VS_Y_DIR false
#define FILAMENT_SENSOR
#define FILAMENT_SENSOR_EXTRUDER_NUM 0
#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75
#define MEASURED_UPPER_LIMIT 2
#define MEASURED_LOWER_LIMIT 1.35
#define FILRUNOUT_PIN_INVERTING false;
#define FILAMENT_RUNOUT_SCRIPT "M600"
#define EEPROM_SETTINGS
#define EEPROM_CHITCHAT // Uncomment this to enable EEPROM Serial responses.
#define NEXTION
#define PROGRESS_BAR_BAR_TIME 3000
#define PROGRESS_BAR_MSG_TIME 1000
#define PROGRESS_MSG_EXPIRE 0
#define MICROSTEP_MODES {16,16,16,16}
#define MOTOR_CURRENT {1,1,1,1,1,1,1}
/* Below you will find the configuration string, that created with Configurator tool online marlinkimbra.it
========== Start configuration string ==========
{
"mechanism": 0,
"motherboards": "BOARD_RAMPS_13_EFB",
"printer": "custom",
"baudrates": 115200,
"testmode": "0",
"processor": 0,
"version": 0,
"extruders": 4,
"driverextruders": 1,
"singlenozzle": "1",
"mkr4": "1",
"npr2": "0",
"E0E1pin": -1,
"E0E2pin": -1,
"E0E3pin": -1,
"E1E3pin": -1,
"power": "0",
"defaultpower": "0",
"tempsensor0": "1",
"tempsensor1": "0",
"tempsensor2": "0",
"tempsensor3": "0",
"tempsensorbed": "4",
"heater0pin": "ORIG_HEATER_0_PIN",
"heater1pin": "ORIG_HEATER_1_PIN",
"heater2pin": "ORIG_HEATER_2_PIN",
"heater3pin": "ORIG_HEATER_3_PIN",
"heaterbedpin": "ORIG_HEATER_BED_PIN",
"temp0pin": "ORIG_TEMP_0_PIN",
"temp1pin": "ORIG_TEMP_1_PIN",
"temp2pin": "ORIG_TEMP_2_PIN",
"temp3pin": "ORIG_TEMP_3_PIN",
"tempbedpin": "ORIG_TEMP_BED_PIN",
"mintemp0": 5,
"mintemp1": 5,
"mintemp2": 5,
"mintemp3": 5,
"mintempbed": 5,
"maxtemp0": 275,
"maxtemp1": 275,
"maxtemp2": 275,
"maxtemp3": 275,
"maxtempbed": 150,
"pidtemp": "1",
"pidkp0": 41.51,
"pidki0": 7.28,
"pidkd0": 59.17,
"pidkp1": 41.51,
"pidki1": 7.28,
"pidkd1": 59.17,
"pidkp2": 41.51,
"pidki2": 7.28,
"pidkd2": 59.17,
"pidkp3": 41.51,
"pidki3": 7.28,
"pidkd3": 59.17,
"pidbedtemp": "1",
"pidbedkp": 10,
"pidbedki": 1,
"pidbedkd": 305,
"dangerousextrude": "1",
"lengthyextrude": "1",
"extrudemintemp": 170,
"autobed": "0",
"zprobingrepeat": "1",
"gridmode": "1",
"gridpoint": 2,
"Zsafehoming": "0",
"ZsafehomingX": 100,
"ZsafehomingY": 100,
"leftprobe": 20,
"rightprobe": 180,
"backprobe": 180,
"frontprobe": 20,
"Xprobe1": 15,
"Yprobe1": 180,
"Xprobe2": 15,
"Yprobe2": 15,
"Xprobe3": 180,
"Yprobe3": 15,
"Xprobeoffset": 0,
"Yprobeoffset": 0,
"Zprobeoffset": -1,
"Zraisebeforehoming": 10,
"Zraisebeforeprobe": 10,
"Zraisebetweenprobe": 10,
"Xmotor": {
"name": "X motor",
"step": "ORIG_X_STEP_PIN",
"dir": "ORIG_X_DIR_PIN",
"enable": "ORIG_X_ENABLE_PIN"
},
"Ymotor": {
"name": "Y motor",
"step": "ORIG_Y_STEP_PIN",
"dir": "ORIG_Y_DIR_PIN",
"enable": "ORIG_Y_ENABLE_PIN"
},
"Zmotor": {
"name": "Z motor",
"step": "ORIG_Z_STEP_PIN",
"dir": "ORIG_Z_DIR_PIN",
"enable": "ORIG_Z_ENABLE_PIN"
},
"Y2motor": {
"name": "Extruder 1",
"step": "ORIG_E1_STEP_PIN",
"dir": "ORIG_E1_DIR_PIN",
"enable": "ORIG_E1_ENABLE_PIN"
},
"Z2motor": {
"name": "Extruder 1",
"step": "ORIG_E1_STEP_PIN",
"dir": "ORIG_E1_DIR_PIN",
"enable": "ORIG_E1_ENABLE_PIN"
},
"E0motor": {
"name": "Extruder 0",
"step": "ORIG_E0_STEP_PIN",
"dir": "ORIG_E0_DIR_PIN",
"enable": "ORIG_E0_ENABLE_PIN"
},
"E1motor": {
"name": "Extruder 1",
"step": "ORIG_E1_STEP_PIN",
"dir": "ORIG_E1_DIR_PIN",
"enable": "ORIG_E1_ENABLE_PIN"
},
"E2motor": {
"name": "Extruder 2",
"step": "ORIG_E2_STEP_PIN",
"dir": "ORIG_E2_DIR_PIN",
"enable": "ORIG_E2_ENABLE_PIN"
},
"E3motor": {
"name": "Extruder 3",
"step": "ORIG_E3_STEP_PIN",
"dir": "ORIG_E3_DIR_PIN",
"enable": "ORIG_E3_ENABLE_PIN"
},
"Ydualstepper": "0",
"Y2vsYdir": "0",
"Zdualstepper": "0",
"Zdualendstop": "0",
"Xminpos": 0,
"Xmaxpos": 200,
"Yminpos": 0,
"Ymaxpos": 200,
"Zminpos": 0,
"Zmaxpos": 200,
"defaultacceleration": 2500,
"defaulttravelacceleration": 3000,
"maxXYjerk": 10,
"maxZjerk": 0.4,
"maxE0jerk": 5,
"maxE1jerk": 5,
"maxE2jerk": 5,
"maxE3jerk": 5,
"deltasegmentpersecond": 200,
"deltadiagonalrod": 220,
"deltasmoothrodoffset": 145,
"deltaeffectoroffset": 20,
"deltacarriageoffset": 20,
"deltaprinterradius": 70,
"deltaheight": 210,
"deltaautoprecision": 0.1,
"deltaautogrid": 20,
"deltaXprobeoffset": 0,
"deltaYprobeoffset": 0,
"deltaZprobeoffset": -10,
"deltaXdeploystart": 0,
"deltaYdeploystart": 0,
"deltaZdeploystart": 30,
"deltaXdeployend": 0,
"deltaYdeployend": 0,
"deltaZdeployend": 0,
"deltaXretractstart": 0,
"deltaYretractstart": 0,
"deltaZretractstart": 30,
"deltaXretractend": 0,
"deltaYretractend": 0,
"deltaZretractend": 0,
"Xmicrostep": 16,
"Ymicrostep": 16,
"Zmicrostep": 16,
"Emicrostep": 16,
"Xcurrent": 1000,
"Ycurrent": 1000,
"Zcurrent": 1000,
"E0current": 1000,
"E1current": 1000,
"E2current": 1000,
"E3current": 1000,
"Xstepspermm": 80,
"Ystepspermm": 80,
"Zstepspermm": 4000,
"E0stepspermm": 625,
"E1stepspermm": 625,
"E2stepspermm": 625,
"E3stepspermm": 625,
"Xmaxspeed": 300,
"Ymaxspeed": 300,
"Zmaxspeed": 2,
"E0maxspeed": 100,
"E1maxspeed": 100,
"E2maxspeed": 100,
"E3maxspeed": 100,
"E0retractionspeed": 100,
"E1retractionspeed": 100,
"E2retractionspeed": 100,
"E3retractionspeed": 100,
"Xhomingspeed": 100,
"Yhomingspeed": 100,
"Zhomingspeed": 2,
"Xmaxacceleration": 3000,
"Ymaxacceleration": 3000,
"Zmaxacceleration": 50,
"E0maxacceleration": 3000,
"E1maxacceleration": 3000,
"E2maxacceleration": 3000,
"E3maxacceleration": 3000,
"E0retractacceleration": 10000,
"E1retractacceleration": 10000,
"E2retractacceleration": 10000,
"E3retractacceleration": 10000,
"Xinvert": "1",
"Yinvert": 0,
"Zinvert": 0,
"E0invert": 0,
"E1invert": 0,
"E2invert": 0,
"E3invert": 0,
"Xinvertenable": 0,
"Yinvertenable": 0,
"Zinvertenable": 0,
"Einvertenable": 0,
"disableX": 0,
"disableY": 0,
"disableZ": 0,
"disableE": 0,
"Xhoming": 0,
"Yhoming": 0,
"Zhoming": 0,
"Ehoming": 0,
"Xminendstop": "0",
"Xmaxendstop": "0",
"Yminendstop": "0",
"Ymaxendstop": "0",
"Zminendstop": "0",
"Zmaxendstop": "0",
"Z2minendstop": "0",
"Z2maxendstop": "0",
"Zprobeendstop": "0",
"Eminendstop": "0",
"Xminpullup": "0",
"Xmaxpullup": "1",
"Yminpullup": "1",
"Ymaxpullup": "1",
"Zminpullup": "0",
"Zmaxpullup": "1",
"Z2minpullup": "1",
"Z2maxpullup": "1",
"Zprobepullup": "1",
"Eminpullup": "1",
"E0coolerpin": -1,
"E1coolerpin": -1,
"E2coolerpin": -1,
"E3coolerpin": -1,
"Ecoolerspeed": 255,
"Ecoolertemp": 50,
"fanpin": "ORIG_FAN_PIN",
"sdsupport": "0",
"eeprom": "1",
"eepromchitchat": "1",
"laserbeam": "0",
"laserpwrpin": 41,
"laserttlpin": 42,
"toshiba": "0",
"powerconsumption": "1",
"powerconsumptionpin": 11,
"filamentrunout": "0",
"filrunoutpin": 7,
"filamentrunoutsensor": "0",
"filamentrunoutscript": "M600",
"servos": "0",
"numservos": 0,
"Xservo": -1,
"Yservo": -1,
"Zservo": -1,
"angleextendservosX": 0,
"angleretractservosX": 0,
"angleextendservosY": 0,
"angleretractservosY": 0,
"angleextendservosZ": 0,
"angleretractservosZ": 0,
"displays": 12,
"invertrotaryswitch": 0,
"uilanguages": 7,
"uiprintername": "Prusa I3",
"easyload": 0,
"bowdenlenght": 250,
"lcdpurgelenght": 10,
"lcdretractlenght": 5,
"lcdpurgefeedrate": 3,
"lcdretractfeedrate": 5,
"lcdloadfeedrate": 20,
"lcdunloadfeedrate": 20,
"lcdprogressbar": 0,
"lcdprogressbarbartime": 3,
"lcdprogressbarmsgtime": 1,
"lcdprogressbarmsgexpire": 0,
"plahotendtemp": 190,
"plabedtemp": 60,
"plafanspeed": 255,
"abshotendtemp": 240,
"absbedtemp": 100,
"absfanspeed": 255,
"gumhotendtemp": 230,
"gumbedtemp": 60,
"gumfanspeed": 255,
"filamentsensor": "1",
"filamentsensorpin": 10,
"filamentsensorlcd": "0",
"filamentsensorextruder": 0,
"filamentsensordia": 1.75,
"filamentsensormaxdia": 2,
"filamentsensormindia": 1.35
}
========== End configuration string ==========
*/
*/
\ No newline at end of file
......@@ -65,21 +65,10 @@
//=========================== FEATURE ==============================
#if ENABLED(MKR4)
#if (EXTRUDERS == 2) && (DRIVER_EXTRUDERS == 1) // Use this for one driver and two extruder
#define E0E1_CHOICE_PIN 5
#elif (EXTRUDERS == 3) && (DRIVER_EXTRUDERS == 1) // Use this for one driver and 3 extruder
#define E0E1_CHOICE_PIN 5
#define E0E2_CHOICE_PIN 6
#elif (EXTRUDERS == 4) && (DRIVER_EXTRUDERS == 1) // Use this for one driver and 4 extruder
#define E0E1_CHOICE_PIN 4
#define E0E2_CHOICE_PIN 5
#define E0E3_CHOICE_PIN 6
#elif (EXTRUDERS == 3) && (DRIVER_EXTRUDERS == 2) // Use this for two driver and 3 extruder
#define E0E2_CHOICE_PIN 5
#elif (EXTRUDERS == 4) && (DRIVER_EXTRUDERS == 2) // Use this for two driver and 4 extruder
#define E0E2_CHOICE_PIN 5
#define E1E3_CHOICE_PIN 6
#endif //EXTRUDERS
#define E0E1_CHOICE_PIN -1
#define E0E2_CHOICE_PIN -1
#define E0E3_CHOICE_PIN -1
#define E1E3_CHOICE_PIN -1
#endif //MKR4
#if ENABLED(NPR2)
......@@ -87,8 +76,8 @@
#endif
#if ENABLED(LASERBEAM)
#define LASER_PWR_PIN 41
#define LASER_TTL_PIN 42
#define LASER_PWR_PIN -1
#define LASER_TTL_PIN -1
#endif
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
......@@ -128,5 +117,9 @@
#define X2_DIR_PIN -1
#endif
#if ENABLED(Z_PROBE_SLED)
#define SLED_PIN -1
#endif
//============================================================================
#endif
\ No newline at end of file
......@@ -300,11 +300,7 @@ const int sensitive_pins[] = SENSITIVE_PINS; ///< Sensitive pin list for M42
// Inactivity shutdown
millis_t previous_cmd_ms = 0;
static millis_t max_inactive_time = 0;
#if ENABLED(DEFAULT_STEPPER_DEACTIVE_TIME)
static millis_t stepper_inactive_time = DEFAULT_STEPPER_DEACTIVE_TIME * 1000L;
#else
static millis_t stepper_inactive_time = 0;
#endif
static millis_t stepper_inactive_time = DEFAULT_STEPPER_DEACTIVE_TIME * 1000L;
millis_t print_job_start_ms = 0; ///< Print job start time
millis_t print_job_stop_ms = 0; ///< Print job stop time
static uint8_t target_extruder;
......@@ -647,90 +643,116 @@ bool enqueuecommand(const char *cmd) {
}
#endif
void setup_killpin() {
#if HAS(KILL)
#if HAS(KILL)
void setup_killpin() {
SET_INPUT(KILL_PIN);
WRITE(KILL_PIN, HIGH);
#endif
}
}
#endif
void setup_filrunoutpin() {
#if HAS(FILRUNOUT)
#if HAS(FILRUNOUT)
void setup_filrunoutpin() {
pinMode(FILRUNOUT_PIN, INPUT);
#if ENABLED(ENDSTOPPULLUP_FIL_RUNOUT)
WRITE(FILRUNOUT_PIN, HIGH);
#endif
#endif
}
}
#endif
// Set home pin
void setup_homepin(void) {
#if HAS(HOME)
#if HAS(HOME)
void setup_homepin(void) {
SET_INPUT(HOME_PIN);
WRITE(HOME_PIN, HIGH);
#endif
}
}
#endif
void setup_photpin() {
#if HAS(PHOTOGRAPH)
#if HAS(PHOTOGRAPH)
void setup_photpin() {
OUT_WRITE(PHOTOGRAPH_PIN, LOW);
#endif
}
}
#endif
void setup_laserbeampin() {
#if ENABLED(LASERBEAM)
#if ENABLED(LASERBEAM)
void setup_laserbeampin() {
OUT_WRITE(LASER_PWR_PIN, LOW);
OUT_WRITE(LASER_TTL_PIN, LOW);
#endif
}
}
#endif
void setup_powerhold() {
#if HAS(SUICIDE)
OUT_WRITE(SUICIDE_PIN, HIGH);
#endif
#if HAS(POWER_SWITCH)
#if HAS(POWER_SWITCH)
void setup_powerhold() {
#if HAS(SUICIDE)
OUT_WRITE(SUICIDE_PIN, HIGH);
#endif
#if ENABLED(PS_DEFAULT_OFF)
OUT_WRITE(PS_ON_PIN, PS_ON_ASLEEP);
#else
OUT_WRITE(PS_ON_PIN, PS_ON_AWAKE);
#endif
#endif
}
}
#endif
void suicide() {
#if HAS(SUICIDE)
#if HAS(SUICIDE)
void suicide() {
OUT_WRITE(SUICIDE_PIN, LOW);
#endif
}
}
#endif
void servo_init() {
#if NUM_SERVOS >= 1 && HAS(SERVO_0)
servo[0].attach(SERVO0_PIN);
servo[0].detach(); // Just set up the pin. We don't have a position yet. Don't move to a random position.
#endif
#if NUM_SERVOS >= 2 && HAS(SERVO_1)
servo[1].attach(SERVO1_PIN);
servo[1].detach();
#endif
#if NUM_SERVOS >= 3 && HAS(SERVO_2)
servo[2].attach(SERVO2_PIN);
servo[2].detach();
#endif
#if NUM_SERVOS >= 4 && HAS(SERVO_3)
servo[3].attach(SERVO3_PIN);
servo[3].detach();
#endif
#if HAS(SERVO)
void servo_init() {
#if HAS(SERVO_0)
servo[0].attach(SERVO0_PIN);
servo[0].detach(); // Just set up the pin. We don't have a position yet. Don't move to a random position.
#endif
#if HAS(SERVO_1)
servo[1].attach(SERVO1_PIN);
servo[1].detach();
#endif
#if HAS(SERVO_2)
servo[2].attach(SERVO2_PIN);
servo[2].detach();
#endif
#if HAS(SERVO_3)
servo[3].attach(SERVO3_PIN);
servo[3].detach();
#endif
// Set position of Servo Endstops that are defined
#if HAS(SERVO_ENDSTOPS)
for (int i = 0; i < 3; i++)
if (servo_endstop_id[i] >= 0)
servo[servo_endstop_id[i]].move(servo_endstop_angle[i][1]);
#endif
// Set position of Servo Endstops that are defined
#if HAS(SERVO_ENDSTOPS)
for (int i = 0; i < 3; i++)
if (servo_endstop_id[i] >= 0)
servo[servo_endstop_id[i]].move(servo_endstop_angle[i][1]);
#endif
}
}
#endif
/**
* Led init
*/
#if ENABLED(TEMP_STAT_LEDS)
void setup_statled() {
#if ENABLED(STAT_LED_RED)
pinMode(STAT_LED_RED, OUTPUT);
digitalWrite(STAT_LED_RED, LOW); // turn it off
#endif
#if ENABLED(STAT_LED_BLUE)
pinMode(STAT_LED_BLUE, OUTPUT);
digitalWrite(STAT_LED_BLUE, LOW); // turn it off
#endif
}
#endif
/**
* Led init
*/
#if HAS(Z_PROBE_SLED)
void setup_zprobesled() {
pinMode(SLED_PIN, OUTPUT);
digitalWrite(SLED_PIN, LOW); // turn it off
}
#endif
/**
* Stepper Reset (RigidBoard, et.al.)
*/
......@@ -766,10 +788,15 @@ void setup() {
#if MB(ALLIGATOR)
setup_alligator_board();// Initialize Alligator Board
#endif
setup_killpin();
setup_filrunoutpin();
setup_powerhold();
#if HAS(KILL)
setup_killpin();
#endif
#if HAS(FILRUNOUT)
setup_filrunoutpin();
#endif
#if HAS(POWER_SWITCH)
setup_powerhold();
#endif
#if HAS(STEPPER_RESET)
disableStepperDrivers();
#endif
......@@ -789,11 +816,9 @@ void setup() {
ECHO_LM(DB, MSG_MARLIN " " BUILD_VERSION);
#ifdef STRING_DISTRIBUTION_DATE
#ifdef STRING_CONFIG_H_AUTHOR
ECHO_LM(DB, MSG_CONFIGURATION_VER STRING_DISTRIBUTION_DATE MSG_AUTHOR STRING_CONFIG_H_AUTHOR);
ECHO_LM(DB, MSG_COMPILED __DATE__);
#endif // STRING_CONFIG_H_AUTHOR
#if EXIST(STRING_DISTRIBUTION_DATE) && EXIST(STRING_CONFIG_H_AUTHOR)
ECHO_LM(DB, MSG_CONFIGURATION_VER STRING_DISTRIBUTION_DATE MSG_AUTHOR STRING_CONFIG_H_AUTHOR);
ECHO_LM(DB, MSG_COMPILED __DATE__);
#endif // STRING_DISTRIBUTION_DATE
ECHO_SMV(DB, MSG_FREE_MEMORY, freeMemory());
......@@ -817,10 +842,15 @@ void setup() {
watchdog_init();
#endif
st_init(); // Initialize stepper, this enables interrupts!
setup_photpin();
setup_laserbeampin(); // Initialize Laserbeam pin
servo_init();
#if HAS(PHOTOGRAPH)
setup_photpin();
#endif
#if ENABLED(LASERBEAM)
setup_laserbeampin(); // Initialize Laserbeam pin
#endif
#if HAS(SERVO)
servo_init();
#endif
#if HAS(STEPPER_RESET)
enableStepperDrivers();
#endif
......@@ -829,23 +859,16 @@ void setup() {
digipot_i2c_init();
#endif
#if ENABLED(Z_PROBE_SLED)
pinMode(SLED_PIN, OUTPUT);
digitalWrite(SLED_PIN, LOW); // turn it off
#if HAS(Z_PROBE_SLED)
setup_zprobesled();
#endif // Z_PROBE_SLED
setup_homepin();
#if ENABLED(STAT_LED_RED)
pinMode(STAT_LED_RED, OUTPUT);
digitalWrite(STAT_LED_RED, LOW); // turn it off
#if HAS(HOME)
setup_homepin();
#endif
#if ENABLED(STAT_LED_BLUE)
pinMode(STAT_LED_BLUE, OUTPUT);
digitalWrite(STAT_LED_BLUE, LOW); // turn it off
#if ENABLED(TEMP_STAT_LEDS)
setup_statled();
#endif
#if ENABLED(FIRMWARE_TEST)
FirmwareTest();
#endif // FIRMWARE_TEST
......@@ -1527,7 +1550,7 @@ static void clean_up_after_endstop_move() {
do_blocking_move_to_xy(x - X_PROBE_OFFSET_FROM_EXTRUDER, y - Y_PROBE_OFFSET_FROM_EXTRUDER); // this also updates current_position
#if DISABLED(Z_PROBE_SLED)
#if HASNT(Z_PROBE_SLED)
if (probe_action & ProbeDeploy) {
if (debugLevel & DEBUG_INFO) ECHO_LM(DB, "> ProbeDeploy");
deploy_z_probe();
......@@ -1537,7 +1560,7 @@ static void clean_up_after_endstop_move() {
run_z_probe();
float measured_z = current_position[Z_AXIS];
#if DISABLED(Z_PROBE_SLED)
#if HASNT(Z_PROBE_SLED)
if (probe_action & ProbeStow) {
if (debugLevel & DEBUG_INFO) ECHO_LM(DB, "> ProbeStow (stow_z_probe will do Z Raise)");
stow_z_probe();
......@@ -1556,7 +1579,7 @@ static void clean_up_after_endstop_move() {
return measured_z;
}
#if HAS(SERVO_ENDSTOPS) && DISABLED(Z_PROBE_SLED)
#if HAS(SERVO_ENDSTOPS) && HASNT(Z_PROBE_SLED)
void raise_z_for_servo() {
float zpos = current_position[Z_AXIS], z_dest = Z_RAISE_BEFORE_PROBING;
z_dest += axis_known_position[Z_AXIS] ? zprobe_zoffset : zpos;
......@@ -1587,14 +1610,14 @@ static void clean_up_after_endstop_move() {
current_position[axis] = 0;
sync_plan_position();
#if ENABLED(Z_PROBE_SLED)
#if HAS(Z_PROBE_SLED)
// Get Probe
if (axis == Z_AXIS) {
if (axis_home_dir < 0) dock_sled(false);
}
#endif
#if SERVO_LEVELING && DISABLED(Z_PROBE_SLED)
#if SERVO_LEVELING && HASNT(Z_PROBE_SLED)
// Deploy a probe if there is one, and homing towards the bed
if (axis == Z_AXIS) {
if (axis_home_dir < 0) deploy_z_probe();
......@@ -1690,7 +1713,7 @@ static void clean_up_after_endstop_move() {
}
#endif
#if SERVO_LEVELING && DISABLED(Z_PROBE_SLED)
#if SERVO_LEVELING && HASNT(Z_PROBE_SLED)
// Deploy a probe if there is one, and homing towards the bed
if (axis == Z_AXIS) {
if (axis_home_dir < 0) {
......@@ -2788,7 +2811,7 @@ static void clean_up_after_endstop_move() {
} // retract()
#endif //FWRETRACT
#if ENABLED(Z_PROBE_SLED)
#if HAS(Z_PROBE_SLED)
#if DISABLED(SLED_DOCKING_OFFSET)
#define SLED_DOCKING_OFFSET 0
......@@ -3612,7 +3635,7 @@ inline void gcode_G28() {
#endif // AUTO_BED_LEVELING_GRID
#if ENABLED(Z_PROBE_SLED)
#if HAS(Z_PROBE_SLED)
dock_sled(false); // engage (un-dock) the probe
#endif
......@@ -3862,7 +3885,7 @@ inline void gcode_G28() {
vector_3 probe_point = vector_3(eqnAMatrix[ind + 0 * abl2], eqnAMatrix[ind + 1 * abl2], eqnBVector[ind]);
probe_point.apply_rotation(inverse_bed_level_matrix);
current_position[Z_AXIS] = -zprobe_zoffset + (probe_point.z - rot_max_diff)
#if HAS(SERVO_ENDSTOPS) || ENABLED(Z_PROBE_SLED)
#if HAS(SERVO_ENDSTOPS) || HAS(Z_PROBE_SLED)
+ Z_RAISE_AFTER_PROBING
#endif
;
......@@ -3871,14 +3894,14 @@ inline void gcode_G28() {
if (debugLevel & DEBUG_INFO) ECHO_LMV(DB, "> AFTER apply_rotation_xyz > current_position[Z_AXIS]= ", current_position[Z_AXIS], 5);
}
#if ENABLED(Z_PROBE_SLED)
#if HAS(Z_PROBE_SLED)
dock_sled(true); // dock the probe
#endif
if (debugLevel & DEBUG_INFO) ECHO_LM(DB, "<<< gcode_G29");
}
#if DISABLED(Z_PROBE_SLED)
#if HASNT(Z_PROBE_SLED)
/**
* G30: Do a single Z probe at the current XY
*/
......@@ -4259,7 +4282,7 @@ inline void gcode_G92() {
hasS = codenum > 0;
}
if (!hasP && !hasS && *args != '\0')
if (HASNTP && HASNTS && *args != '\0')
lcd_setstatus(args, true);
else {
LCD_MESSAGEPGM(MSG_USERWAIT);
......@@ -5828,7 +5851,7 @@ inline void gcode_M226() {
#endif // DOGLCD
#if NUM_SERVOS > 0
#if HAS(SERVO)
/**
* M280: Get or set servo position. P<index> S<angle>
*/
......@@ -6095,7 +6118,7 @@ inline void gcode_M226() {
*/
inline void gcode_M400() { st_synchronize(); }
#if ENABLED(AUTO_BED_LEVELING_FEATURE) && DISABLED(Z_PROBE_SLED) && HAS(SERVO_ENDSTOPS)
#if ENABLED(AUTO_BED_LEVELING_FEATURE) && HASNT(Z_PROBE_SLED) && HAS(SERVO_ENDSTOPS)
/**
* M401: Engage Z Servo endstop if available
......@@ -6959,7 +6982,7 @@ void process_next_command() {
#if ENABLED(AUTO_BED_LEVELING_FEATURE)
case 29: // G29 Detailed Z-Probe, probes the bed at 3 or more points.
gcode_G29(); gcode_M114(); break;
#if DISABLED(Z_PROBE_SLED)
#if HASNT(Z_PROBE_SLED)
case 30: // G30 Single Z Probe
gcode_G30(); break;
#else // Z_PROBE_SLED
......@@ -7204,7 +7227,7 @@ void process_next_command() {
gcode_M250(); break;
#endif // DOGLCD
#if NUM_SERVOS > 0
#if HAS(SERVO)
case 280: // M280 - set servo position absolute. P: servo index, S: angle or microseconds
gcode_M280(); break;
#endif // NUM_SERVOS > 0
......
......@@ -361,7 +361,7 @@
#define MAX_PROBE_Y (min(Y_MAX_POS, Y_MAX_POS + Y_PROBE_OFFSET_FROM_EXTRUDER))
// Z_RAISE_AFTER_PROBING is not for all probes. Be sure that it is zero in that cases
#if (NUM_SERVOS == 0) && DISABLED(Z_PROBE_SLED)
#if DISABLED(ENABLE_SERVOS) && DISABLED(Z_PROBE_SLED)
#undef Z_RAISE_AFTER_PROBING
#define Z_RAISE_AFTER_PROBING 0
#endif
......@@ -557,13 +557,14 @@
#define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3)
#define HAS_FAN (PIN_EXISTS(FAN))
#define HAS_CONTROLLERFAN (ENABLED(CONTROLLERFAN) && PIN_EXISTS(CONTROLLERFAN))
#define HAS_SERVOS (ENABLED(ENABLE_SERVOS) && NUM_SERVOS > 0)
#define HAS_SERVO_0 (PIN_EXISTS(SERVO0))
#define HAS_SERVO_1 (PIN_EXISTS(SERVO1))
#define HAS_SERVO_2 (PIN_EXISTS(SERVO2))
#define HAS_SERVO_3 (PIN_EXISTS(SERVO3))
#define HAS_SERVOS ((ENABLED(ENABLE_SERVOS) && NUM_SERVOS > 0) && (HAS_SERVO_0 || HAS_SERVO_1 || HAS_SERVO_2 || HAS_SERVO_3))
#define HAS_FILAMENT_SENSOR (ENABLED(FILAMENT_SENSOR) && PIN_EXISTS(FILWIDTH))
#define HAS_POWER_CONSUMPTION_SENSOR (ENABLED(POWER_CONSUMPTION) && PIN_EXISTS(POWER_CONSUMPTION))
#define HAS_Z_PROBE_SLED (ENABLED(Z_PROBE_SLED) && PIN_EXISTS(SLED_PIN))
#define HAS_FILRUNOUT (ENABLED(FILAMENT_RUNOUT_SENSOR) && PIN_EXISTS(FILRUNOUT))
#define HAS_HOME (PIN_EXISTS(HOME))
#define HAS_KILL (PIN_EXISTS(KILL))
......@@ -583,10 +584,10 @@
#define HAS_SOLENOID_1 (PIN_EXISTS(SOL1))
#define HAS_SOLENOID_2 (PIN_EXISTS(SOL2))
#define HAS_SOLENOID_3 (PIN_EXISTS(SOL3))
#define HAS_MICROSTEPS (PIN_EXISTS(X_MS1))
#define HAS_MICROSTEPS_E0 (PIN_EXISTS(E0_MS1))
#define HAS_MICROSTEPS_E1 (PIN_EXISTS(E1_MS1))
#define HAS_MICROSTEPS_E2 (PIN_EXISTS(E2_MS1))
#define HAS_MICROSTEPS (ENABLED(USE_MICROSTEPS) && PIN_EXISTS(X_MS1))
#define HAS_MICROSTEPS_E0 (ENABLED(USE_MICROSTEPS) && PIN_EXISTS(E0_MS1))
#define HAS_MICROSTEPS_E1 (ENABLED(USE_MICROSTEPS) && PIN_EXISTS(E1_MS1))
#define HAS_MICROSTEPS_E2 (ENABLED(USE_MICROSTEPS) && PIN_EXISTS(E2_MS1))
#define HAS_STEPPER_RESET (PIN_EXISTS(STEPPER_RESET))
#define HAS_X_ENABLE (PIN_EXISTS(X_ENABLE))
#define HAS_X2_ENABLE (PIN_EXISTS(X2_ENABLE))
......
......@@ -1310,6 +1310,7 @@
* Alligator Board support 16 or 32 only value *
* *
***********************************************************************/
//#define USE_MICROSTEPS
#define MICROSTEP_MODES {16, 16, 16, 16} // X Y Z E - [1,2,4,8,16,32]
/***********************************************************************/
......@@ -1320,9 +1321,10 @@
* *
* Use it if you have low speed stepper driver *
* *
* Uncomment STEPPER_HIGH_LOW_DELAY to enable this feature *
* Uncomment STEPPER_HIGH_LOW to enable this feature *
* *
***********************************************************************/
//#define STEPPER_HIGH_LOW
//#define STEPPER_HIGH_LOW_DELAY 1u // Delay in microseconds
/***********************************************************************/
......
/**
* SanityCheck.h
*
* Test configuration values for errors at compile-time.
*/
#ifndef SANITYCHECK_H
#define SANITYCHECK_H
/**
* Dual Stepper Drivers
*/
#if ENABLED(Z_DUAL_STEPPER_DRIVERS) && ENABLED(Y_DUAL_STEPPER_DRIVERS)
#error CONFLICT ERROR: CONFLICT ERROR: You cannot have dual stepper drivers for both Y and Z.
#endif
/**
* Progress Bar
*/
#if ENABLED(LCD_PROGRESS_BAR)
#if DISABLED(SDSUPPORT)
#error CONFLICT ERROR: LCD_PROGRESS_BAR requires SDSUPPORT.
#endif
#if ENABLED(DOGLCD)
#error CONFLICT ERROR: LCD_PROGRESS_BAR does not apply to graphical displays.
#endif
#if ENABLED(FILAMENT_LCD_DISPLAY)
#error CONFLICT ERROR: LCD_PROGRESS_BAR and FILAMENT_LCD_DISPLAY are not fully compatible.
#endif
#if ENABLED(POWER_CONSUMPTION_LCD_DISPLAY)
#error CONFLICT ERROR: LCD_PROGRESS_BAR and POWER_CONSUMPTION_LCD_DISPLAY are not fully compatible.
#endif
#endif
/**
* Babystepping
*/
#if ENABLED(BABYSTEPPING)
#if MECH(COREXY) && ENABLED(BABYSTEP_XY)
#error CONFLICT ERROR: BABYSTEPPING only implemented for Z axis on CoreXY.
#endif
#if MECH(SCARA)
#error CONFLICT ERROR: BABYSTEPPING is not implemented for SCARA yet.
#endif
#if MECH(DELTA) && ENABLED(BABYSTEP_XY)
#error CONFLICT ERROR: BABYSTEPPING only implemented for Z axis on deltabots.
#endif
#endif
/**
* Extruder Runout Prevention
*/
#if ENABLED(EXTRUDER_RUNOUT_PREVENT) && EXTRUDER_RUNOUT_MINTEMP < EXTRUDE_MINTEMP
#error CONFLICT ERROR: EXTRUDER_RUNOUT_MINTEMP have to be greater than EXTRUDE_MINTEMP
#endif
/**
* Idle oozing prevent with Extruder Runout Prevention
*/
#if ENABLED(EXTRUDER_RUNOUT_PREVENT) && ENABLED(IDLE_OOZING_PREVENT)
#error CONFLICT ERROR: EXTRUDER_RUNOUT_PREVENT and IDLE_OOZING_PREVENT are incopatible. Please comment one of them.
#endif
/**
* Idle oozing prevent
*/
#if ENABLED(IDLE_OOZING_PREVENT) && IDLE_OOZING_MINTEMP < EXTRUDE_MINTEMP
#error CONFLICT ERROR: IDLE_OOZING_MINTEMP have to be greater than EXTRUDE_MINTEMP
#endif
/**
* Options only for EXTRUDERS == 1
*/
#if EXTRUDERS > 1
#if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
#error CONFLICT ERROR: EXTRUDERS must be 1 with TEMP_SENSOR_1_AS_REDUNDANT.
#endif
#if ENABLED(HEATERS_PARALLEL)
#error CONFLICT ERROR: EXTRUDERS must be 1 with HEATERS_PARALLEL.
#endif
#endif // EXTRUDERS > 1
/**
* Limited number of servos
*/
#if NUM_SERVOS > 4
#error CONFLICT ERROR: The maximum number of SERVOS in Marlin is 4.
#endif
#if NUM_SERVOS > 0
#if X_ENDSTOP_SERVO_NR >= 0 || Y_ENDSTOP_SERVO_NR >= 0 || Z_ENDSTOP_SERVO_NR >= 0
#if X_ENDSTOP_SERVO_NR >= NUM_SERVOS
#error CONFLICT ERROR: X_ENDSTOP_SERVO_NR must be smaller than NUM_SERVOS.
#elif Y_ENDSTOP_SERVO_NR >= NUM_SERVOS
#error CONFLICT ERROR: Y_ENDSTOP_SERVO_NR must be smaller than NUM_SERVOS.
#elif Z_ENDSTOP_SERVO_NR >= NUM_SERVOS
#error CONFLICT ERROR: Z_ENDSTOP_SERVO_NR must be smaller than NUM_SERVOS.
#endif
#endif
#endif
/**
* Servo deactivation depends on servo endstops
*/
#if ENABLED(DEACTIVATE_SERVOS_AFTER_MOVE) && HASNT(SERVO_ENDSTOPS)
#error CONFLICT ERROR: At least one of the ?_ENDSTOP_SERVO_NR is required for DEACTIVATE_SERVOS_AFTER_MOVE.
#endif
/**
* Required LCD language
*/
#if DISABLED(DOGLCD) && ENABLED(ULTRA_LCD) && DISABLED(DISPLAY_CHARSET_HD44780_JAPAN) && DISABLED(DISPLAY_CHARSET_HD44780_WESTERN) && DISABLED(DISPLAY_CHARSET_HD44780_CYRILLIC)
#error CONFLICT ERROR: You must enable either DISPLAY_CHARSET_HD44780_JAPAN or DISPLAY_CHARSET_HD44780_WESTERN or DISPLAY_CHARSET_HD44780_CYRILLIC for your LCD controller.
#endif
/**
* Auto Bed Leveling
*/
#if ENABLED(AUTO_BED_LEVELING_FEATURE)
/**
* Require a Z Min pin
*/
#if Z_MIN_PIN == -1
#if Z_PROBE_PIN == -1 || DISABLED(Z_PROBE_ENDSTOP) // It's possible for someone to set a pin for the Z Probe, but not enable it.
#if ENABLED(Z_PROBE_REPEATABILITY_TEST)
#error CONFLICT ERROR: You must have a Z_MIN or Z_PROBE endstop to enable Z_PROBE_REPEATABILITY_TEST.
#else
#error CONFLICT ERROR: AUTO_BED_LEVELING_FEATURE requires a Z_MIN or Z_PROBE endstop. Z_MIN_PIN or Z_PROBE_PIN must point to a valid hardware pin.
#endif
#endif
#endif
/**
* Require a Z Probe Pin if Z_PROBE_ENDSTOP is enabled.
*/
#if ENABLED(Z_PROBE_ENDSTOP)
#if NOTEXIST(Z_PROBE_PIN)
#error CONFLICT ERROR: You must have a Z_PROBE_PIN defined in pins2tool.h file if you enable Z_PROBE_ENDSTOP.
#erro sistema pins2tool.h
#endif
#if Z_PROBE_PIN == -1
#error CONFLICT ERROR: You must set Z_PROBE_PIN to a valid pin if you enable Z_PROBE_ENDSTOP.
#endif
#if DISABLED(ENABLE_SERVOS)
#error CONFLICT ERROR: You must enable ENABLE_SERVOS and must have NUM_SERVOS defined and there must be at least 1 configured to use Z_PROBE_ENDSTOP.
#endif
#if NUM_SERVOS < 1
#error CONFLICT ERROR: You must have at least 1 servo defined for NUM_SERVOS to use Z_PROBE_ENDSTOP.
#endif
#if Z_ENDSTOP_SERVO_NR < 0
#error CONFLICT ERROR: You must have Z_ENDSTOP_SERVO_NR set to at least 0 or above to use Z_PROBE_ENDSTOP.
#endif
#if NOTEXIST(SERVO_ENDSTOP_ANGLES)
#error CONFLICT ERROR: You must have SERVO_ENDSTOP_ANGLES defined for Z Extend and Retract to use Z_PROBE_ENDSTOP.
#endif
#endif
/**
* Check if Probe_Offset * Grid Points is greater than Probing Range
*/
#if ENABLED(AUTO_BED_LEVELING_GRID)
// Be sure points are in the right order
#if LEFT_PROBE_BED_POSITION > RIGHT_PROBE_BED_POSITION
#error CONFLICT ERROR: LEFT_PROBE_BED_POSITION must be less than RIGHT_PROBE_BED_POSITION.
#elif FRONT_PROBE_BED_POSITION > BACK_PROBE_BED_POSITION
#error CONFLICT ERROR: BACK_PROBE_BED_POSITION must be less than FRONT_PROBE_BED_POSITION.
#endif
// Make sure probing points are reachable
#if LEFT_PROBE_BED_POSITION < MIN_PROBE_X
#error CONFLICT ERROR: "The given LEFT_PROBE_BED_POSITION can't be reached by the probe."
#elif RIGHT_PROBE_BED_POSITION > MAX_PROBE_X
#error CONFLICT ERROR: "The given RIGHT_PROBE_BED_POSITION can't be reached by the probe."
#elif FRONT_PROBE_BED_POSITION < MIN_PROBE_Y
#error CONFLICT ERROR: "The given FRONT_PROBE_BED_POSITION can't be reached by the probe."
#elif BACK_PROBE_BED_POSITION > MAX_PROBE_Y
#error CONFLICT ERROR: "The given BACK_PROBE_BED_POSITION can't be reached by the probe."
#endif
#else // !AUTO_BED_LEVELING_GRID
// Check the triangulation points
#if ABL_PROBE_PT_1_X < MIN_PROBE_X || ABL_PROBE_PT_1_X > MAX_PROBE_X
#error CONFLICT ERROR: "The given ABL_PROBE_PT_1_X can't be reached by the probe."
#elif ABL_PROBE_PT_2_X < MIN_PROBE_X || ABL_PROBE_PT_2_X > MAX_PROBE_X
#error CONFLICT ERROR: "The given ABL_PROBE_PT_2_X can't be reached by the probe."
#elif ABL_PROBE_PT_3_X < MIN_PROBE_X || ABL_PROBE_PT_3_X > MAX_PROBE_X
#error CONFLICT ERROR: "The given ABL_PROBE_PT_3_X can't be reached by the probe."
#elif ABL_PROBE_PT_1_Y < MIN_PROBE_Y || ABL_PROBE_PT_1_Y > MAX_PROBE_Y
#error CONFLICT ERROR: "The given ABL_PROBE_PT_1_Y can't be reached by the probe."
#elif ABL_PROBE_PT_2_Y < MIN_PROBE_Y || ABL_PROBE_PT_2_Y > MAX_PROBE_Y
#error CONFLICT ERROR: "The given ABL_PROBE_PT_2_Y can't be reached by the probe."
#elif ABL_PROBE_PT_3_Y < MIN_PROBE_Y || ABL_PROBE_PT_3_Y > MAX_PROBE_Y
#error CONFLICT ERROR: "The given ABL_PROBE_PT_3_Y can't be reached by the probe."
#endif
#endif // !AUTO_BED_LEVELING_GRID
#endif // AUTO_BED_LEVELING_FEATURE
/**
* ULTIPANEL encoder
*/
#if ENABLED(ULTIPANEL) && DISABLED(NEWPANEL) && DISABLED(SR_LCD_2W_NL) && DISABLED(SHIFT_CLK)
#error CONFLICT ERROR: ULTIPANEL requires some kind of encoder.
#endif
/**
* Delta & Z_PROBE_ENDSTOP
*/
#if MECH(DELTA) && ENABLED(Z_PROBE_ENDSTOP)
#if NOTEXIST(Z_PROBE_PIN)
#error CONFLICT ERROR: You must have a Z_PROBE_PIN defined in your pins2tool.h file if you enable Z_PROBE_ENDSTOP
#endif
#if Z_PROBE_PIN == -1
#error CONFLICT ERROR: You must set Z_PROBE_PIN to a valid pin if you enable Z_PROBE_ENDSTOP
#endif
#endif
/**
* Dual X Carriage requirements
*/
#if ENABLED(DUAL_X_CARRIAGE)
#if EXTRUDERS == 1 || MECH(COREXY) \
|| HASNT(X2_ENABLE) || HASNT(X2_STEP) || HASNT(X2_DIR) \
|| NOTEXIST(X2_HOME_POS) || NOTEXIST(X2_MIN_POS) || NOTEXIST(X2_MAX_POS) \
|| HASNT(X_MAX)
#error CONFLICT ERROR: Missing or invalid definitions for DUAL_X_CARRIAGE mode.
#endif
#if X_HOME_DIR != -1 || X2_HOME_DIR != 1
#error CONFLICT ERROR: Please use canonical x-carriage assignment.
#endif
#endif // DUAL_X_CARRIAGE
/**
* Make sure auto fan pins don't conflict with the fan pin
*/
#if HAS(AUTO_FAN) && HAS(FAN)
#if EXTRUDER_0_AUTO_FAN_PIN == FAN_PIN
#error CONFLICT ERROR: You cannot set EXTRUDER_0_AUTO_FAN_PIN equal to FAN_PIN.
#elif EXTRUDER_1_AUTO_FAN_PIN == FAN_PIN
#error CONFLICT ERROR: You cannot set EXTRUDER_1_AUTO_FAN_PIN equal to FAN_PIN.
#elif EXTRUDER_2_AUTO_FAN_PIN == FAN_PIN
#error CONFLICT ERROR: You cannot set EXTRUDER_2_AUTO_FAN_PIN equal to FAN_PIN.
#elif EXTRUDER_3_AUTO_FAN_PIN == FAN_PIN
#error CONFLICT ERROR: You cannot set EXTRUDER_3_AUTO_FAN_PIN equal to FAN_PIN.
#endif
#endif
#if HAS(FAN) && CONTROLLERFAN_PIN == FAN_PIN
#error CONFLICT ERROR: You cannot set CONTROLLERFAN_PIN equal to FAN_PIN.
#endif
/**
* Test required HEATER defines
*/
#if HOTENDS > 3
#if HASNT(HEATER_3)
#error CONFLICT ERROR: HEATER_3_PIN not defined for this board
#endif
#elif HOTENDS > 2
#if HASNT(HEATER_2)
#error CONFLICT ERROR: HEATER_2_PIN not defined for this board
#endif
#elif HOTENDS > 1 || ENABLED(HEATERS_PARALLEL)
#if HASNT(HEATER_1)
#error CONFLICT ERROR: HEATER_1_PIN not defined for this board
#endif
#elif HOTENDS > 0
#if HASNT(HEATER_0)
#error CONFLICT ERROR: HEATER_0_PIN not defined for this board
#endif
#endif
#if DISABLED(SDSUPPORT) && ENABLED(SD_SETTINGS)
#error CONFLICT ERROR: You have to enable SDSUPPORT to use SD_SETTINGS
#endif
/**
* Warnings for old configurations
*/
#if ENABLED(X_HOME_RETRACT_MM)
#error CONFLICT ERROR: [XYZ]_HOME_RETRACT_MM settings have been renamed [XYZ]_HOME_BUMP_MM.
#endif
#if WATCH_TEMP_PERIOD > 500
#error CONFLICT ERROR: WATCH_TEMP_PERIOD now uses seconds instead of milliseconds.
#endif
#if DISABLED(THERMAL_PROTECTION_HOTENDS) && (ENABLED(WATCH_TEMP_PERIOD) || ENABLED(THERMAL_PROTECTION_PERIOD))
#error CONFLICT ERROR: Thermal Runaway Protection for hotends must now be enabled with THERMAL_PROTECTION_HOTENDS.
#endif
#if DISABLED(THERMAL_PROTECTION_BED) && ENABLED(THERMAL_PROTECTION_BED_PERIOD)
#error CONFLICT ERROR: Thermal Runaway Protection for the bed must now be enabled with THERMAL_PROTECTION_BED.
#endif
#if ENABLED(PROBE_SERVO_DEACTIVATION_DELAY)
#error CONFLICT ERROR: PROBE_SERVO_DEACTIVATION_DELAY has been replaced with DEACTIVATE_SERVOS_AFTER_MOVE and SERVO_DEACTIVATION_DELAY.
#endif
#if MECH(COREXZ) && ENABLED(Z_LATE_ENABLE)
#error CONFLICT ERROR: "Z_LATE_ENABLE can't be used with COREXZ."
#endif
#if ENABLED(BEEPER)
#error CONFLICT ERROR: BEEPER has been replaced with BEEPER_PIN. Please update your pins definitions.
#endif
#if ENABLED(SDCARDDETECT)
#error CONFLICT ERROR: SDCARDDETECT is now SD_DETECT_PIN. Please update your pins definitions.
#endif
#if ENABLED(SDCARDDETECTINVERTED)
#error CONFLICT ERROR: SDCARDDETECTINVERTED is now SD_DETECT_INVERTED. Please update your configuration.
#endif
#if ENABLED(POWER_CONSUMPTION) && !PIN_EXISTS(POWER_CONSUMPTION)
#error CONFLICT ERROR: You have to set a valid POWER_CONSUMPTION_PIN in pins.h in order to use this feature.
#endif
#endif //SANITYCHECK_H
#ifndef DEPENDENCY_H
#define DEPENDENCY_H
/*
* This file check if some essential options aren't been defined.
* This file is usefult to see dependency between features while developing.
*/
// Serial comunication
#if NOTEXIST(SERIAL_PORT)
#error DEPENDENCY ERROR: Missing setting SERIAL_PORT
#endif
#if NOTEXIST(BAUDRATE)
#error DEPENDENCY ERROR: Missing setting BAUDRATE
#endif
#if NOTEXIST(MACHINE_UUID)
#error DEPENDENCY ERROR: Missing setting MACHINE_UUID
#endif
//board
#if NOTEXIST(MOTHERBOARD)
#error DEPENDENCY ERROR: Missing setting MOTHERBOARD
#endif
//Mechanism
#if NOTEXIST(MECHANISM)
#error DEPENDENCY ERROR: Missing setting MECHANISM
#endif
//Power supply
#if NOTEXIST(POWER_SUPPLY)
#error DEPENDENCY ERROR: Missing setting POWER_SUPPLY
#endif
//Thermistor
#if NOTEXIST(TEMP_SENSOR_0)
#error DEPENDENCY ERROR: Missing setting TEMP_SENSOR_0
#endif
#if NOTEXIST(TEMP_SENSOR_1)
#error DEPENDENCY ERROR: Missing setting TEMP_SENSOR_1
#endif
#if NOTEXIST(TEMP_SENSOR_2)
#error DEPENDENCY ERROR: Missing setting TEMP_SENSOR_2
#endif
#if NOTEXIST(TEMP_SENSOR_3)
#error DEPENDENCY ERROR: Missing setting TEMP_SENSOR_3
#endif
#if NOTEXIST(TEMP_SENSOR_BED)
#error DEPENDENCY ERROR: Missing setting TEMP_SENSOR_BED
#endif
#if (THERMISTORHEATER_0 == 998) || (THERMISTORHEATER_1 == 998) || (THERMISTORHEATER_2 == 998) || (THERMISTORHEATER_3 == 998) || (THERMISTORBED == 998) //User defined table
#if NOTEXIST(DUMMY_THERMISTOR_998_VALUE)
#error DEPENDENCY ERROR: Missing setting DUMMY_THERMISTOR_998_VALUE
#endif
#endif
//Temperature
/**
* Temperature defines
*/
#if defined(TEMP_RESIDENCY_TIME)
#if NOTEXIST(TEMP_HYSTERESIS)
#error DEPENDENCY ERROR: Missing setting TEMP_HYSTERESIS
#endif
#if NOTEXIST(TEMP_WINDOW)
#error DEPENDENCY ERROR: Missing setting TEMP_WINDOW
#endif
#endif
#if TEMP_SENSOR_0 != 0
#if NOTEXIST(HEATER_0_MAXTEMP)
#error DEPENDENCY ERROR: Missing setting HEATER_0_MAXTEMP
#endif
#if NOTEXIST(HEATER_0_MINTEMP)
#error DEPENDENCY ERROR: Missing setting HEATER_0_MINTEMP
#endif
#endif
#if TEMP_SENSOR_1 != 0
#if NOTEXIST(HEATER_1_MAXTEMP)
#error DEPENDENCY ERROR: Missing setting HEATER_1_MAXTEMP
#endif
#if NOTEXIST(HEATER_0_MINTEMP)
#error DEPENDENCY ERROR: Missing setting HEATER_1_MINTEMP
#endif
#endif
#if TEMP_SENSOR_2 != 0
#if NOTEXIST(HEATER_2_MAXTEMP)
#error DEPENDENCY ERROR: Missing setting HEATER_2_MAXTEMP
#endif
#if NOTEXIST(HEATER_0_MINTEMP)
#error DEPENDENCY ERROR: Missing setting HEATER_2_MINTEMP
#endif
#endif
#if TEMP_SENSOR_3 != 0
#if NOTEXIST(HEATER_3_MAXTEMP)
#error DEPENDENCY ERROR: Missing setting HEATER_3_MAXTEMP
#endif
#if NOTEXIST(HEATER_0_MINTEMP)
#error DEPENDENCY ERROR: Missing setting HEATER_3_MINTEMP
#endif
#endif
#if TEMP_SENSOR_BED != 0
#if NOTEXIST(BED_MAXTEMP)
#error DEPENDENCY ERROR: Missing setting BED_MAXTEMP
#endif
#if NOTEXIST(HEATER_0_MINTEMP)
#error DEPENDENCY ERROR: Missing setting BED_MINTEMP
#endif
#endif
#if NOTEXIST(PLA_PREHEAT_HOTEND_TEMP)
#error DEPENDENCY ERROR: Missing setting PLA_PREHEAT_HOTEND_TEMP
#endif
#if NOTEXIST(PLA_PREHEAT_HPB_TEMP)
#error DEPENDENCY ERROR: Missing setting PLA_PREHEAT_HPB_TEMP
#endif
#if NOTEXIST(PLA_PREHEAT_FAN_SPEED)
#error DEPENDENCY ERROR: Missing setting PLA_PREHEAT_FAN_SPEED
#endif
#if NOTEXIST(ABS_PREHEAT_HOTEND_TEMP)
#error DEPENDENCY ERROR: Missing setting ABS_PREHEAT_HOTEND_TEMP
#endif
#if NOTEXIST(ABS_PREHEAT_HPB_TEMP)
#error DEPENDENCY ERROR: Missing setting ABS_PREHEAT_HPB_TEMP
#endif
#if NOTEXIST(ABS_PREHEAT_FAN_SPEED)
#error DEPENDENCY ERROR: Missing setting ABS_PREHEAT_FAN_SPEED
#endif
#if NOTEXIST(GUM_PREHEAT_HOTEND_TEMP)
#error DEPENDENCY ERROR: Missing setting GUM_PREHEAT_HOTEND_TEMP
#endif
#if NOTEXIST(GUM_PREHEAT_HPB_TEMP)
#error DEPENDENCY ERROR: Missing setting GUM_PREHEAT_HPB_TEMP
#endif
#if NOTEXIST(GUM_PREHEAT_FAN_SPEED)
#error DEPENDENCY ERROR: Missing setting GUM_PREHEAT_FAN_SPEED
#endif
//extruders
#if NOTEXIST(EXTRUDERS)
#error DEPENDENCY ERROR: Missing setting EXTRUDERS
#endif
#if NOTEXIST(DRIVER_EXTRUDERS)
#error DEPENDENCY ERROR: Missing setting DRIVER_EXTRUDERS
#endif
//Language
#if NOTEXIST(LANGUAGE_CHOICE)
#error DEPENDENCY ERROR: Missing setting LANGUAGE_CHOICE
#endif
///FEATURE
//Temperature
#if NOTEXIST(PID_MAX)
#error DEPENDENCY ERROR: Missing setting PID_MAX
#endif
#if NOTEXIST(MAX_BED_POWER)
#error DEPENDENCY ERROR: Missing setting MAX_BED_POWER
#endif
#if defined(PIDTEMP) || defined(PIDTEMPBED)
#if NOTEXIST(MAX_OVERSHOOT_PID_AUTOTUNE)
#error DEPENDENCY ERROR: Missing setting MAX_OVERSHOOT_PID_AUTOTUNE
#endif
#endif
#if defined(PIDTEMP)
#if NOTEXIST(PID_OPENLOOP) && NOTEXIST(PID_FUNCTIONAL_RANGE)
#error DEPENDENCY ERROR: Missing setting PID_FUNCTIONAL_RANGE
#endif
#if NOTEXIST(PID_INTEGRAL_DRIVE_MAX)
#error DEPENDENCY ERROR: Missing setting PID_INTEGRAL_DRIVE_MAX
#endif
#if NOTEXIST(DEFAULT_Kp)
#error DEPENDENCY ERROR: Missing setting DEFAULT_Kp
#endif
#if NOTEXIST(DEFAULT_Ki)
#error DEPENDENCY ERROR: Missing setting DEFAULT_Ki
#endif
#if NOTEXIST(DEFAULT_Kd)
#error DEPENDENCY ERROR: Missing setting DEFAULT_Kd
#endif
#endif
#if defined(PIDTEMPBED)
#if NOTEXIST(PID_BED_INTEGRAL_DRIVE_MAX)
#error DEPENDENCY ERROR: Missing setting PID_BED_INTEGRAL_DRIVE_MAX
#endif
#if NOTEXIST(DEFAULT_bedKp)
#error DEPENDENCY ERROR: Missing setting DEFAULT_bedKp
#endif
#if NOTEXIST(DEFAULT_bedKi)
#error DEPENDENCY ERROR: Missing setting DEFAULT_bedKi
#endif
#if NOTEXIST(DEFAULT_bedKd)
#error DEPENDENCY ERROR: Missing setting DEFAULT_bedKd
#endif
#endif
#if defined(BED_LIMIT_SWITCHING)
#if NOTEXIST(BED_HYSTERESIS)
#error DEPENDENCY ERROR: Missing setting BED_HYSTERESIS
#endif
#if NOTEXIST(BED_CHECK_INTERVAL)
#error DEPENDENCY ERROR: Missing setting BED_CHECK_INTERVAL
#endif
#endif
#if defined(THERMAL_PROTECTION_HOTENDS)
#if NOTEXIST(THERMAL_PROTECTION_PERIOD)
#error DEPENDENCY ERROR: Missing setting THERMAL_PROTECTION_PERIOD
#endif
#if NOTEXIST(THERMAL_PROTECTION_HYSTERESIS)
#error DEPENDENCY ERROR: Missing setting THERMAL_PROTECTION_HYSTERESIS
#endif
#if NOTEXIST(WATCH_TEMP_PERIOD)
#error DEPENDENCY ERROR: Missing setting WATCH_TEMP_PERIOD
#endif
#if NOTEXIST(WATCH_TEMP_INCREASE)
#error DEPENDENCY ERROR: Missing setting WATCH_TEMP_INCREASE
#endif
#endif
#if defined(THERMAL_PROTECTION_BED)
#if NOTEXIST(THERMAL_PROTECTION_BED_PERIOD)
#error DEPENDENCY ERROR: Missing setting THERMAL_PROTECTION_BED_PERIOD
#endif
#if NOTEXIST(THERMAL_PROTECTION_BED_HYSTERESIS)
#error DEPENDENCY ERROR: Missing setting THERMAL_PROTECTION_BED_HYSTERESIS
#endif
#endif
//fan
#if NOTEXIST(SOFT_PWM_SCALE)
#error DEPENDENCY ERROR: Missing setting SOFT_PWM_SCALE
#endif
#if defined(CONTROLLERFAN)
#if NOTEXIST(CONTROLLERFAN_SECS)
#error DEPENDENCY ERROR: Missing setting CONTROLLERFAN_SECS
#endif
#if NOTEXIST(CONTROLLERFAN_SPEED)
#error DEPENDENCY ERROR: Missing setting CONTROLLERFAN_SPEED
#endif
#if NOTEXIST(CONTROLLERFAN_MIN_SPEED)
#error DEPENDENCY ERROR: Missing setting CONTROLLERFAN_MIN_SPEED
#endif
#endif
#if defined(EXTRUDER_AUTO_FAN)
#if NOTEXIST(EXTRUDER_AUTO_FAN_TEMPERATURE)
#error DEPENDENCY ERROR: Missing setting EXTRUDER_AUTO_FAN_TEMPERATURE
#endif
#if NOTEXIST(EXTRUDER_AUTO_FAN_SPEED)
#error DEPENDENCY ERROR: Missing setting EXTRUDER_AUTO_FAN_SPEED
#endif
#if NOTEXIST(EXTRUDER_AUTO_FAN_MIN_SPEED)
#error DEPENDENCY ERROR: Missing setting EXTRUDER_AUTO_FAN_MIN_SPEED
#endif
#endif
//extruder
#if defined(PREVENT_DANGEROUS_EXTRUDE)
#if NOTEXIST(EXTRUDE_MINTEMP)
#error DEPENDENCY ERROR: Missing setting EXTRUDE_MINTEMP
#endif
#if defined(PREVENT_LENGTHY_EXTRUDE)
#if NOTEXIST(EXTRUDE_MAXLENGTH)
#error DEPENDENCY ERROR: Missing setting EXTRUDE_MAXLENGTH
#endif
#endif
#endif
#if defined(NPR2)
#if NOTEXIST(COLOR_STEP)
#error DEPENDENCY ERROR: Missing setting COLOR_STEP
#endif
#if NOTEXIST(COLOR_SLOWRATE)
#error DEPENDENCY ERROR: Missing setting COLOR_SLOWRATE
#endif
#if NOTEXIST(COLOR_HOMERATE)
#error DEPENDENCY ERROR: Missing setting COLOR_HOMERATE
#endif
#if NOTEXIST(MOTOR_ANGLE)
#error DEPENDENCY ERROR: Missing setting MOTOR_ANGLE
#endif
#if NOTEXIST(DRIVER_MICROSTEP)
#error DEPENDENCY ERROR: Missing setting DRIVER_MICROSTEP
#endif
#if NOTEXIST(CARTER_MOLTIPLICATOR)
#error DEPENDENCY ERROR: Missing setting CARTER_MOLTIPLICATOR
#endif
#endif
#if defined(IDLE_OOZING_PREVENT)
#if NOTEXIST(IDLE_OOZING_MINTEMP)
#error DEPENDENCY ERROR: Missing setting IDLE_OOZING_MINTEMP
#endif
#if NOTEXIST(IDLE_OOZING_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting IDLE_OOZING_FEEDRATE
#endif
#if NOTEXIST(IDLE_OOZING_SECONDS)
#error DEPENDENCY ERROR: Missing setting IDLE_OOZING_SECONDS
#endif
#if NOTEXIST(IDLE_OOZING_LENGTH)
#error DEPENDENCY ERROR: Missing setting IDLE_OOZING_LENGTH
#endif
#if NOTEXIST(IDLE_OOZING_RECOVER_LENGTH)
#error DEPENDENCY ERROR: Missing setting IDLE_OOZING_RECOVER_LENGTH
#endif
#if NOTEXIST(IDLE_OOZING_RECOVER_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting IDLE_OOZING_RECOVER_FEEDRATE
#endif
#endif
#if defined(EXTRUDER_RUNOUT_PREVENT)
#if NOTEXIST(EXTRUDER_RUNOUT_MINTEMP)
#error DEPENDENCY ERROR: Missing setting EXTRUDER_RUNOUT_MINTEMP
#endif
#if NOTEXIST(EXTRUDER_RUNOUT_SECONDS)
#error DEPENDENCY ERROR: Missing setting EXTRUDER_RUNOUT_SECONDS
#endif
#if NOTEXIST(EXTRUDER_RUNOUT_ESTEPS)
#error DEPENDENCY ERROR: Missing setting EXTRUDER_RUNOUT_ESTEPS
#endif
#if NOTEXIST(EXTRUDER_RUNOUT_SPEED)
#error DEPENDENCY ERROR: Missing setting EXTRUDER_RUNOUT_SPEED
#endif
#if NOTEXIST(EXTRUDER_RUNOUT_EXTRUDE)
#error DEPENDENCY ERROR: Missing setting EXTRUDER_RUNOUT_EXTRUDE
#endif
#endif
#if defined(EASY_LOAD)
#if NOTEXIST(BOWDEN_LENGTH)
#error DEPENDENCY ERROR: Missing setting BOWDEN_LENGTH
#endif
#if NOTEXIST(LCD_PURGE_LENGTH)
#error DEPENDENCY ERROR: Missing setting LCD_PURGE_LENGTH
#endif
#if NOTEXIST(LCD_RETRACT_LENGTH)
#error DEPENDENCY ERROR: Missing setting LCD_RETRACT_LENGTH
#endif
#if NOTEXIST(LCD_PURGE_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting LCD_PURGE_FEEDRATE
#endif
#if NOTEXIST(LCD_RETRACT_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting LCD_RETRACT_FEEDRATE
#endif
#if NOTEXIST(LCD_LOAD_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting LCD_LOAD_FEEDRATE
#endif
#if NOTEXIST(LCD_UNLOAD_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting LCD_UNLOAD_FEEDRATE
#endif
#endif
#if defined(ADVANCE)
#if NOTEXIST(EXTRUDER_ADVANCE_K)
#error DEPENDENCY ERROR: Missing setting EXTRUDER_ADVANCE_K
#endif
#if NOTEXIST(D_FILAMENT)
#error DEPENDENCY ERROR: Missing setting D_FILAMENT
#endif
#if NOTEXIST(STEPS_MM_E)
#error DEPENDENCY ERROR: Missing setting STEPS_MM_E
#endif
#endif
#if defined(FILAMENTCHANGEENABLE)
#if NOTEXIST(FILAMENTCHANGE_XPOS)
#error DEPENDENCY ERROR: Missing setting FILAMENTCHANGE_XPOS
#endif
#if NOTEXIST(FILAMENTCHANGE_YPOS)
#error DEPENDENCY ERROR: Missing setting FILAMENTCHANGE_YPOS
#endif
#if NOTEXIST(FILAMENTCHANGE_ZADD)
#error DEPENDENCY ERROR: Missing setting FILAMENTCHANGE_ZADD
#endif
#if NOTEXIST(FILAMENTCHANGE_FIRSTRETRACT)
#error DEPENDENCY ERROR: Missing setting FILAMENTCHANGE_FIRSTRETRACT
#endif
#if NOTEXIST(FILAMENTCHANGE_FINALRETRACT)
#error DEPENDENCY ERROR: Missing setting FILAMENTCHANGE_FINALRETRACT
#endif
#if NOTEXIST(FILAMENTCHANGE_PRINTEROFF)
#error DEPENDENCY ERROR: Missing setting FILAMENTCHANGE_PRINTEROFF
#endif
#endif
//Motion
#if NOTEXIST(SOFTWARE_MIN_ENDSTOPS)
#error DEPENDENCY ERROR: Missing setting SOFTWARE_MIN_ENDSTOPS
#endif
#if NOTEXIST(SOFTWARE_MAX_ENDSTOPS)
#error DEPENDENCY ERROR: Missing setting SOFTWARE_MAX_ENDSTOPS
#endif
#if defined(AUTO_BED_LEVELING_FEATURE)
#if defined(AUTO_BED_LEVELING_GRID)
#if NOTEXIST(MIN_PROBE_EDGE)
#error DEPENDENCY ERROR: Missing setting MIN_PROBE_EDGE
#endif
#if NOTEXIST(AUTO_BED_LEVELING_GRID_POINTS)
#error DEPENDENCY ERROR: Missing setting AUTO_BED_LEVELING_GRID_POINTS
#endif
#else
#if NOTEXIST(ABL_PROBE_PT_1_X)
#error DEPENDENCY ERROR: Missing setting ABL_PROBE_PT_1_X
#endif
#if NOTEXIST(ABL_PROBE_PT_1_Y)
#error DEPENDENCY ERROR: Missing setting ABL_PROBE_PT_1_Y
#endif
#if NOTEXIST(ABL_PROBE_PT_2_X)
#error DEPENDENCY ERROR: Missing setting ABL_PROBE_PT_2_X
#endif
#if NOTEXIST(ABL_PROBE_PT_2_Y)
#error DEPENDENCY ERROR: Missing setting ABL_PROBE_PT_2_Y
#endif
#if NOTEXIST(ABL_PROBE_PT_3_X)
#error DEPENDENCY ERROR: Missing setting ABL_PROBE_PT_3_X
#endif
#if NOTEXIST(ABL_PROBE_PT_3_Y)
#error DEPENDENCY ERROR: Missing setting ABL_PROBE_PT_3_Y
#endif
#endif
#if NOTEXIST(X_PROBE_OFFSET_FROM_EXTRUDER)
#error DEPENDENCY ERROR: Missing setting X_PROBE_OFFSET_FROM_EXTRUDER
#endif
#if NOTEXIST(Y_PROBE_OFFSET_FROM_EXTRUDER)
#error DEPENDENCY ERROR: Missing setting Y_PROBE_OFFSET_FROM_EXTRUDER
#endif
#if NOTEXIST(Z_PROBE_OFFSET_FROM_EXTRUDER)
#error DEPENDENCY ERROR: Missing setting Z_PROBE_OFFSET_FROM_EXTRUDER
#endif
#if NOTEXIST(Z_RAISE_BEFORE_HOMING)
#error DEPENDENCY ERROR: Missing setting Z_RAISE_BEFORE_HOMING
#endif
#if NOTEXIST(Z_RAISE_BEFORE_PROBING)
#error DEPENDENCY ERROR: Missing setting Z_RAISE_BEFORE_PROBING
#endif
#if NOTEXIST(Z_RAISE_BETWEEN_PROBINGS)
#error DEPENDENCY ERROR: Missing setting Z_RAISE_BETWEEN_PROBINGS
#endif
#if NOTEXIST(Z_RAISE_AFTER_PROBING)
#error DEPENDENCY ERROR: Missing setting Z_RAISE_AFTER_PROBING
#endif
#if defined(Z_PROBE_SLED)
#if NOTEXIST(SLED_DOCKING_OFFSET)
#error DEPENDENCY ERROR: Missing setting SLED_DOCKING_OFFSET
#endif
#endif
#if defined(Z_SAFE_HOMING)
#if NOTEXIST(Z_SAFE_HOMING_X_POINT)
#error DEPENDENCY ERROR: Missing setting Z_SAFE_HOMING_X_POINT
#endif
#if NOTEXIST(Z_SAFE_HOMING_Y_POINT)
#error DEPENDENCY ERROR: Missing setting Z_SAFE_HOMING_Y_POINT
#endif
#endif
#endif
#if ENABLED(ENABLE_SERVOS)
#if NOTEXIST(NUM_SERVOS)
#error DEPENDENCY ERROR: Missing setting NUM_SERVOS 0
#endif
#if NUM_SERVOS > 0
#if NOTEXIST(X_ENDSTOP_SERVO_NR)
#error DEPENDENCY ERROR: Missing setting X_ENDSTOP_SERVO_NR
#endif
#if NOTEXIST(Y_ENDSTOP_SERVO_NR)
#error DEPENDENCY ERROR: Missing setting Y_ENDSTOP_SERVO_NR
#endif
#if NOTEXIST(Z_ENDSTOP_SERVO_NR)
#error DEPENDENCY ERROR: Missing setting Z_ENDSTOP_SERVO_NR
#endif
#if NOTEXIST(X_ENDSTOP_SERVO_ANGLES)
#error DEPENDENCY ERROR: Missing setting X_ENDSTOP_SERVO_ANGLES
#endif
#if NOTEXIST(Y_ENDSTOP_SERVO_ANGLES)
#error DEPENDENCY ERROR: Missing setting Y_ENDSTOP_SERVO_ANGLES
#endif
#if NOTEXIST(Z_ENDSTOP_SERVO_ANGLES)
#error DEPENDENCY ERROR: Missing setting Z_ENDSTOP_SERVO_ANGLES
#endif
#if NOTEXIST(SERVO_DEACTIVATION_DELAY)
#error DEPENDENCY ERROR: Missing setting SERVO_DEACTIVATION_DELAY
#endif
#endif
#endif
#if defined(BABYSTEPPING)
#if NOTEXIST(BABYSTEP_INVERT_Z)
#error DEPENDENCY ERROR: Missing setting BABYSTEP_INVERT_Z
#endif
#if NOTEXIST(BABYSTEP_Z_MULTIPLICATOR)
#error DEPENDENCY ERROR: Missing setting BABYSTEP_Z_MULTIPLICATOR
#endif
#endif
#if defined(FWRETRACT)
#if NOTEXIST(MIN_RETRACT)
#error DEPENDENCY ERROR: Missing setting MIN_RETRACT
#endif
#if NOTEXIST(RETRACT_LENGTH)
#error DEPENDENCY ERROR: Missing setting RETRACT_LENGTH
#endif
#if NOTEXIST(RETRACT_LENGTH_SWAP)
#error DEPENDENCY ERROR: Missing setting RETRACT_LENGTH_SWAP
#endif
#if NOTEXIST(RETRACT_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting RETRACT_FEEDRATE
#endif
#if NOTEXIST(RETRACT_ZLIFT)
#error DEPENDENCY ERROR: Missing setting RETRACT_ZLIFT
#endif
#if NOTEXIST(RETRACT_RECOVER_LENGTH)
#error DEPENDENCY ERROR: Missing setting RETRACT_RECOVER_LENGTH
#endif
#if NOTEXIST(RETRACT_RECOVER_LENGTH_SWAP)
#error DEPENDENCY ERROR: Missing setting RETRACT_RECOVER_LENGTH_SWAP
#endif
#if NOTEXIST(RETRACT_RECOVER_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting RETRACT_RECOVER_FEEDRATE
#endif
#endif
#if defined(DUAL_X_CARRIAGE)
#if NOTEXIST(X2_MIN_POS)
#error DEPENDENCY ERROR: Missing setting X2_MIN_POS
#endif
#if NOTEXIST(X2_MAX_POS)
#error DEPENDENCY ERROR: Missing setting X2_MAX_POS
#endif
#if NOTEXIST(X2_HOME_DIR)
#error DEPENDENCY ERROR: Missing setting X2_HOME_DIR
#endif
#if NOTEXIST(X2_HOME_POS)
#error DEPENDENCY ERROR: Missing setting X2_HOME_POS
#endif
#if NOTEXIST(DEFAULT_DUAL_X_CARRIAGE_MODE)
#error DEPENDENCY ERROR: Missing setting DEFAULT_DUAL_X_CARRIAGE_MODE
#endif
#if NOTEXIST(TOOLCHANGE_PARK_ZLIFT)
#error DEPENDENCY ERROR: Missing setting TOOLCHANGE_PARK_ZLIFT
#endif
#if NOTEXIST(TOOLCHANGE_UNPARK_ZLIFT)
#error DEPENDENCY ERROR: Missing setting TOOLCHANGE_UNPARK_ZLIFT
#endif
#if NOTEXIST(DEFAULT_DUPLICATION_X_OFFSET)
#error DEPENDENCY ERROR: Missing setting DEFAULT_DUPLICATION_X_OFFSET
#endif
#endif
#if defined(Y_DUAL_STEPPER_DRIVERS)
#if NOTEXIST(INVERT_Y2_VS_Y_DIR)
#error DEPENDENCY ERROR: Missing setting INVERT_Y2_VS_Y_DIR
#endif
#endif
//sensors
#if defined(FILAMENT_SENSOR)
#if NOTEXIST(FILAMENT_SENSOR_EXTRUDER_NUM)
#error DEPENDENCY ERROR: Missing setting FILAMENT_SENSOR_EXTRUDER_NUM
#endif
#if NOTEXIST(MEASUREMENT_DELAY_CM)
#error DEPENDENCY ERROR: Missing setting MEASUREMENT_DELAY_CM
#endif
#if NOTEXIST(DEFAULT_NOMINAL_FILAMENT_DIA)
#error DEPENDENCY ERROR: Missing setting DEFAULT_NOMINAL_FILAMENT_DIA
#endif
#if NOTEXIST(MEASURED_UPPER_LIMIT)
#error DEPENDENCY ERROR: Missing setting MEASURED_UPPER_LIMIT
#endif
#if NOTEXIST(MEASURED_LOWER_LIMIT)
#error DEPENDENCY ERROR: Missing setting MEASURED_LOWER_LIMIT
#endif
#if NOTEXIST(MAX_MEASUREMENT_DELAY)
#error DEPENDENCY ERROR: Missing setting MAX_MEASUREMENT_DELAY
#endif
#if NOTEXIST(DEFAULT_MEASURED_FILAMENT_DIA)
#error DEPENDENCY ERROR: Missing setting DEFAULT_MEASURED_FILAMENT_DIA
#endif
#endif
#if defined(FILAMENT_RUNOUT_SENSOR)
#if NOTEXIST(FILRUNOUT_PIN_INVERTING)
#error DEPENDENCY ERROR: Missing setting FILRUNOUT_PIN_INVERTING
#endif
#if NOTEXIST(ENDSTOPPULLUP_FIL_RUNOUT)
#error DEPENDENCY ERROR: Missing setting ENDSTOPPULLUP_FIL_RUNOUT
#endif
#if NOTEXIST(FILAMENT_RUNOUT_SCRIPT)
#error DEPENDENCY ERROR: Missing setting FILAMENT_RUNOUT_SCRIPT
#endif
#endif
#if defined(POWER_CONSUMPTION)
#if NOTEXIST(POWER_VOLTAGE)
#error DEPENDENCY ERROR: Missing setting POWER_VOLTAGE
#endif
#if NOTEXIST(POWER_SENSITIVITY)
#error DEPENDENCY ERROR: Missing setting POWER_SENSITIVITY
#endif
#if NOTEXIST(POWER_OFFSET)
#error DEPENDENCY ERROR: Missing setting POWER_OFFSET
#endif
#if NOTEXIST(POWER_ZERO)
#error DEPENDENCY ERROR: Missing setting POWER_ZERO
#endif
#if NOTEXIST(POWER_ERROR)
#error DEPENDENCY ERROR: Missing setting POWER_ERROR
#endif
#if NOTEXIST(POWER_EFFICIENCY)
#error DEPENDENCY ERROR: Missing setting POWER_EFFICIENCY
#endif
#endif
//addon
#if defined(SDSUPPORT)
#if NOTEXIST(SD_FINISHED_STEPPERRELEASE)
#error DEPENDENCY ERROR: Missing setting SD_FINISHED_STEPPERRELEASE
#endif
#if NOTEXIST(SD_FINISHED_RELEASECOMMAND)
#error DEPENDENCY ERROR: Missing setting SD_FINISHED_RELEASECOMMAND
#endif
#if defined(SD_SETTINGS)
#if NOTEXIST(SD_CFG_SECONDS)
#error DEPENDENCY ERROR: Missing setting SD_CFG_SECONDS
#endif
#if NOTEXIST(CFG_SD_FILE)
#error DEPENDENCY ERROR: Missing setting CFG_SD_FILE
#endif
#if NOTEXIST(CFG_SD_MAX_KEY_LEN)
#error DEPENDENCY ERROR: Missing setting CFG_SD_MAX_KEY_LEN
#endif
#if NOTEXIST(CFG_SD_MAX_VALUE_LEN)
#error DEPENDENCY ERROR: Missing setting CFG_SD_MAX_VALUE_LEN
#endif
#endif
#endif
#if NOTEXIST(DISPLAY_CHARSET_HD44780_JAPAN) && NOTEXIST(DISPLAY_CHARSET_HD44780_WESTERN) && NOTEXIST(DISPLAY_CHARSET_HD44780_CYRILLIC)
#error DEPENDENCY ERROR: Missing setting DISPLAY_CHARSET_HD44780_JAPAN or DISPLAY_CHARSET_HD44780_WESTERN or DISPLAY_CHARSET_HD44780_CYRILLIC
#endif
#if defined(SHOW_BOOTSCREEN)
#if NOTEXIST(STRING_SPLASH_LINE1)
#error DEPENDENCY ERROR: Missing setting STRING_SPLASH_LINE1
#endif
#if NOTEXIST(SPLASH_SCREEN_DURATION)
#error DEPENDENCY ERROR: Missing setting SPLASH_SCREEN_DURATION
#endif
#endif
#if ENABLED(ULTIPANEL)
#if defined(ENCODER_RATE_MULTIPLIER)
#if NOTEXIST(ENCODER_10X_STEPS_PER_SEC)
#error DEPENDENCY ERROR: Missing setting ENCODER_10X_STEPS_PER_SEC
#endif
#if NOTEXIST(ENCODER_100X_STEPS_PER_SEC)
#error DEPENDENCY ERROR: Missing setting ENCODER_100X_STEPS_PER_SEC
#endif
#endif
#endif
#if MB(ALLIGATOR)
#if NOTEXIST(UI_VOLTAGE_LEVEL)
#error DEPENDENCY ERROR: Missing setting UI_VOLTAGE_LEVEL
#endif
#endif
#if defined(REPRAPWORLD_KEYPAD)
#if NOTEXIST(REPRAPWORLD_KEYPAD_MOVE_STEP)
#error DEPENDENCY ERROR: Missing setting REPRAPWORLD_KEYPAD_MOVE_STEP
#endif
#endif
#if ENABLED(ULTIPANEL)
#if defined(LCD_PROGRESS_BAR)
#if NOTEXIST(PROGRESS_BAR_BAR_TIME)
#error DEPENDENCY ERROR: Missing setting PROGRESS_BAR_BAR_TIME
#endif
#if NOTEXIST(PROGRESS_BAR_MSG_TIME)
#error DEPENDENCY ERROR: Missing setting PROGRESS_BAR_MSG_TIME
#endif
#if NOTEXIST(PROGRESS_MSG_EXPIRE)
#error DEPENDENCY ERROR: Missing setting PROGRESS_MSG_EXPIRE
#endif
#endif
#endif
#if defined(CHDK)
#if NOTEXIST(CHDK_DELAY)
#error DEPENDENCY ERROR: Missing setting CHDK_DELAY
#endif
#endif
//adv motion
#if defined(DIGIPOT_I2C)
#if NOTEXIST(DIGIPOT_I2C_NUM_CHANNELS)
#error DEPENDENCY ERROR: Missing setting DIGIPOT_I2C_NUM_CHANNELS
#endif
#if NOTEXIST(DIGIPOT_I2C_MOTOR_CURRENTS)
#error DEPENDENCY ERROR: Missing setting DIGIPOT_I2C_MOTOR_CURRENTS
#endif
#endif
#if defined(HAVE_TMCDRIVER)
#if defined(X_IS_TMC)
#if NOTEXIST(X_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting X_MAX_CURRENT
#endif
#if NOTEXIST(X_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting X_SENSE_RESISTOR
#endif
#if NOTEXIST(X_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting X_MICROSTEPS
#endif
#endif
#if defined(X2_IS_TMC)
#if NOTEXIST(X2_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting X2_MAX_CURRENT
#endif
#if NOTEXIST(X2_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting X2_SENSE_RESISTOR
#endif
#if NOTEXIST(X2_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting X2_MICROSTEPS
#endif
#endif
#if defined(Y_IS_TMC)
#if NOTEXIST(Y_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting Y_MAX_CURRENT
#endif
#if NOTEXIST(Y_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting Y_SENSE_RESISTOR
#endif
#if NOTEXIST(Y_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting Y_MICROSTEPS
#endif
#endif
#if defined(Y2_IS_TMC)
#if NOTEXIST(Y2_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting Y2_MAX_CURRENT
#endif
#if NOTEXIST(Y2_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting Y2_SENSE_RESISTOR
#endif
#if NOTEXIST(Y2_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting Y2_MICROSTEPS
#endif
#endif
#if defined(Z_IS_TMC)
#if NOTEXIST(Z_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting Z_MAX_CURRENT
#endif
#if NOTEXIST(Z_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting Z_SENSE_RESISTOR
#endif
#if NOTEXIST(Z_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting Z_MICROSTEPS
#endif
#endif
#if defined(Z2_IS_TMC)
#if NOTEXIST(Z2_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting Z2_MAX_CURRENT
#endif
#if NOTEXIST(Z2_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting Z2_SENSE_RESISTOR
#endif
#if NOTEXIST(Z2_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting Z2_MICROSTEPS
#endif
#endif
#if defined(E0_IS_TMC)
#if NOTEXIST(E0_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting E0_MAX_CURRENT
#endif
#if NOTEXIST(E0_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting E0_SENSE_RESISTOR
#endif
#if NOTEXIST(E0_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting E0_MICROSTEPS
#endif
#endif
#if defined(E1_IS_TMC)
#if NOTEXIST(E1_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting E1_MAX_CURRENT
#endif
#if NOTEXIST(E1_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting E1_SENSE_RESISTOR
#endif
#if NOTEXIST(E1_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting E1_MICROSTEPS
#endif
#endif
#if defined(E2_IS_TMC)
#if NOTEXIST(E2_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting E2_MAX_CURRENT
#endif
#if NOTEXIST(E2_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting E2_SENSE_RESISTOR
#endif
#if NOTEXIST(E2_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting E2_MICROSTEPS
#endif
#endif
#if defined(E3_IS_TMC)
#if NOTEXIST(E3_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting E3_MAX_CURRENT
#endif
#if NOTEXIST(E3_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting E3_SENSE_RESISTOR
#endif
#if NOTEXIST(E3_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting E3_MICROSTEPS
#endif
#endif
#endif
#if defined(HAVE_L6470DRIVER)
#if defined(X_IS_L6470)
#if NOTEXIST(X_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting X_MICROSTEPS
#endif
#if NOTEXIST(X_K_VAL)
#error DEPENDENCY ERROR: Missing setting X_K_VAL
#endif
#if NOTEXIST(X_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting X_OVERCURRENT
#endif
#if NOTEXIST(X_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting X_STALLCURRENT
#endif
#endif
#if defined(X2_IS_L6470)
#if NOTEXIST(X2_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting X2_MICROSTEPS
#endif
#if NOTEXIST(X2_K_VAL)
#error DEPENDENCY ERROR: Missing setting X2_K_VAL
#endif
#if NOTEXIST(X2_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting X2_OVERCURRENT
#endif
#if NOTEXIST(X2_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting X2_STALLCURRENT
#endif
#endif
#if defined(Y_IS_L6470)
#if NOTEXIST(Y_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting Y_MICROSTEPS
#endif
#if NOTEXIST(Y_K_VAL)
#error DEPENDENCY ERROR: Missing setting Y_K_VAL
#endif
#if NOTEXIST(Y_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting Y_OVERCURRENT
#endif
#if NOTEXIST(Y_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting Y_STALLCURRENT
#endif
#endif
#if defined(Y2_IS_L6470)
#if NOTEXIST(Y2_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting Y2_MICROSTEPS
#endif
#if NOTEXIST(Y2_K_VAL)
#error DEPENDENCY ERROR: Missing setting Y2_K_VAL
#endif
#if NOTEXIST(Y2_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting Y2_OVERCURRENT
#endif
#if NOTEXIST(Y2_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting Y2_STALLCURRENT
#endif
#endif
#if defined(Z_IS_L6470)
#if NOTEXIST(Z_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting Z_MICROSTEPS
#endif
#if NOTEXIST(Z_K_VAL)
#error DEPENDENCY ERROR: Missing setting Z_K_VAL
#endif
#if NOTEXIST(Z_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting Z_OVERCURRENT
#endif
#if NOTEXIST(Z_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting Z_STALLCURRENT
#endif
#endif
#if defined(Z2_IS_L6470)
#if NOTEXIST(Z2_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting Z2_MICROSTEPS
#endif
#if NOTEXIST(Z2_K_VAL)
#error DEPENDENCY ERROR: Missing setting Z2_K_VAL
#endif
#if NOTEXIST(Z2_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting Z2_OVERCURRENT
#endif
#if NOTEXIST(Z2_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting Z2_STALLCURRENT
#endif
#endif
#if defined(E0_IS_L6470)
#if NOTEXIST(E0_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting E0_MICROSTEPS
#endif
#if NOTEXIST(E0_K_VAL)
#error DEPENDENCY ERROR: Missing setting E0_K_VAL
#endif
#if NOTEXIST(E0_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting E0_OVERCURRENT
#endif
#if NOTEXIST(E0_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting E0_STALLCURRENT
#endif
#endif
#if defined(E1_IS_L6470)
#if NOTEXIST(E1_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting E1_MICROSTEPS
#endif
#if NOTEXIST(E1_K_VAL)
#error DEPENDENCY ERROR: Missing setting E1_K_VAL
#endif
#if NOTEXIST(E1_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting E1_OVERCURRENT
#endif
#if NOTEXIST(E1_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting E1_STALLCURRENT
#endif
#endif
#if defined(E2_IS_L6470)
#if NOTEXIST(E2_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting E2_MICROSTEPS
#endif
#if NOTEXIST(E2_K_VAL)
#error DEPENDENCY ERROR: Missing setting E2_K_VAL
#endif
#if NOTEXIST(E2_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting E2_OVERCURRENT
#endif
#if NOTEXIST(E2_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting E2_STALLCURRENT
#endif
#endif
#if defined(E3_IS_L6470)
#if NOTEXIST(E3_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting E3_MICROSTEPS
#endif
#if NOTEXIST(E3_K_VAL)
#error DEPENDENCY ERROR: Missing setting E3_K_VAL
#endif
#if NOTEXIST(E3_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting E3_OVERCURRENT
#endif
#if NOTEXIST(E3_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting E3_STALLCURRENT
#endif
#endif
#endif
//buffer
#if NOTEXIST(BLOCK_BUFFER_SIZE)
#error DEPENDENCY ERROR: Missing setting BLOCK_BUFFER_SIZE
#endif
#if NOTEXIST(MAX_CMD_SIZE)
#error DEPENDENCY ERROR: Missing setting MAX_CMD_SIZE
#endif
#if NOTEXIST(BUFSIZE)
#error DEPENDENCY ERROR: Missing setting BUFSIZE
#endif
#if NOTEXIST(NUM_POSITON_SLOTS)
#error DEPENDENCY ERROR: Missing setting NUM_POSITON_SLOTS
#endif
#if NOTEXIST(DROP_SEGMENTS)
#error DEPENDENCY ERROR: Missing setting DROP_SEGMENTS
#endif
#if NOTEXIST(DROP_SEGMENTS)
#error DEPENDENCY ERROR: Missing setting DROP_SEGMENTS
#endif
#if NOTEXIST(DEFAULT_MINSEGMENTTIME)
#error DEPENDENCY ERROR: Missing setting DEFAULT_MINSEGMENTTIME
#endif
#if NOTEXIST(MM_PER_ARC_SEGMENT)
#error DEPENDENCY ERROR: Missing setting MM_PER_ARC_SEGMENT
#endif
#if NOTEXIST(N_ARC_CORRECTION)
#error DEPENDENCY ERROR: Missing setting N_ARC_CORRECTION
#endif
//Machines
#if NOTEXIST(X_MIN_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting X_MIN_ENDSTOP_LOGIC
#endif
#if NOTEXIST(Y_MIN_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting Y_MIN_ENDSTOP_LOGIC
#endif
#if NOTEXIST(Z_MIN_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting Z_MIN_ENDSTOP_LOGIC
#endif
#if NOTEXIST(Z2_MIN_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting Z2_MIN_ENDSTOP_LOGIC
#endif
#if NOTEXIST(X_MAX_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting X_MAX_ENDSTOP_LOGIC
#endif
#if NOTEXIST(Y_MAX_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting Y_MAX_ENDSTOP_LOGIC
#endif
#if NOTEXIST(Z_MAX_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting Z_MAX_ENDSTOP_LOGIC
#endif
#if NOTEXIST(Z2_MAX_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting Z2_MAX_ENDSTOP_LOGIC
#endif
#if NOTEXIST(Z_PROBE_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting Z_PROBE_ENDSTOP_LOGIC
#endif
#if NOTEXIST(E_MIN_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting E_MIN_ENDSTOP_LOGIC
#endif
#if NOTEXIST(X_HOME_DIR)
#error DEPENDENCY ERROR: Missing setting X_HOME_DIR
#endif
#if NOTEXIST(Y_HOME_DIR)
#error DEPENDENCY ERROR: Missing setting Y_HOME_DIR
#endif
#if NOTEXIST(Z_HOME_DIR)
#error DEPENDENCY ERROR: Missing setting Z_HOME_DIR
#endif
#if NOTEXIST(E_HOME_DIR)
#error DEPENDENCY ERROR: Missing setting E_HOME_DIR
#endif
#if NOTEXIST(X_ENABLE_ON)
#error DEPENDENCY ERROR: Missing setting X_ENABLE_ON
#endif
#if NOTEXIST(Y_ENABLE_ON)
#error DEPENDENCY ERROR: Missing setting Y_ENABLE_ON
#endif
#if NOTEXIST(Z_ENABLE_ON)
#error DEPENDENCY ERROR: Missing setting Z_ENABLE_ON
#endif
#if NOTEXIST(E_ENABLE_ON)
#error DEPENDENCY ERROR: Missing setting E_ENABLE_ON
#endif
#if NOTEXIST(INVERT_X_STEP_PIN)
#error DEPENDENCY ERROR: Missing setting INVERT_X_STEP_PIN
#endif
#if NOTEXIST(INVERT_Y_STEP_PIN)
#error DEPENDENCY ERROR: Missing setting INVERT_Y_STEP_PIN
#endif
#if NOTEXIST(INVERT_Z_STEP_PIN)
#error DEPENDENCY ERROR: Missing setting INVERT_Z_STEP_PIN
#endif
#if NOTEXIST(INVERT_E_STEP_PIN)
#error DEPENDENCY ERROR: Missing setting INVERT_E_STEP_PIN
#endif
#if NOTEXIST(INVERT_X_DIR)
#error DEPENDENCY ERROR: Missing setting INVERT_X_DIR
#endif
#if NOTEXIST(INVERT_Y_DIR)
#error DEPENDENCY ERROR: Missing setting INVERT_Y_DIR
#endif
#if NOTEXIST(INVERT_Z_DIR)
#error DEPENDENCY ERROR: Missing setting INVERT_Z_DIR
#endif
#if NOTEXIST(INVERT_E0_DIR)
#error DEPENDENCY ERROR: Missing setting INVERT_E0_DIR
#endif
#if NOTEXIST(INVERT_E1_DIR)
#error DEPENDENCY ERROR: Missing setting INVERT_E1_DIR
#endif
#if NOTEXIST(INVERT_E2_DIR)
#error DEPENDENCY ERROR: Missing setting INVERT_E2_DIR
#endif
#if NOTEXIST(INVERT_E3_DIR)
#error DEPENDENCY ERROR: Missing setting INVERT_E3_DIR
#endif
#if NOTEXIST(DISABLE_X)
#error DEPENDENCY ERROR: Missing setting DISABLE_X
#endif
#if NOTEXIST(DISABLE_Y)
#error DEPENDENCY ERROR: Missing setting DISABLE_Y
#endif
#if NOTEXIST(DISABLE_Z)
#error DEPENDENCY ERROR: Missing setting DISABLE_Z
#endif
#if NOTEXIST(DISABLE_E)
#error DEPENDENCY ERROR: Missing setting DISABLE_E
#endif
#if NOTEXIST(DISABLE_INACTIVE_EXTRUDER)
#error DEPENDENCY ERROR: Missing setting DISABLE_INACTIVE_EXTRUDER
#endif
#if NOTEXIST(X_MAX_POS)
#error DEPENDENCY ERROR: Missing setting X_MAX_POS
#endif
#if NOTEXIST(X_MIN_POS)
#error DEPENDENCY ERROR: Missing setting X_MIN_POS
#endif
#if NOTEXIST(Y_MAX_POS)
#error DEPENDENCY ERROR: Missing setting Y_MAX_POS
#endif
#if NOTEXIST(Y_MIN_POS)
#error DEPENDENCY ERROR: Missing setting Y_MIN_POS
#endif
#if NOTEXIST(Z_MAX_POS)
#error DEPENDENCY ERROR: Missing setting Z_MAX_POS
#endif
#if NOTEXIST(Z_MIN_POS)
#error DEPENDENCY ERROR: Missing setting Z_MIN_POS
#endif
#if NOTEXIST(E_MIN_POS)
#error DEPENDENCY ERROR: Missing setting E_MIN_POS
#endif
#if NOTEXIST(AXIS_RELATIVE_MODES)
#error DEPENDENCY ERROR: Missing setting AXIS_RELATIVE_MODES
#endif
#if NOTEXIST(DEFAULT_AXIS_STEPS_PER_UNIT)
#error DEPENDENCY ERROR: Missing setting DEFAULT_AXIS_STEPS_PER_UNIT
#endif
#if ENABLED(ULTIPANEL) && NOTEXIST(MANUAL_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting MANUAL_FEEDRATE
#endif
#if NOTEXIST(DEFAULT_MINTRAVELFEEDRATE)
#error DEPENDENCY ERROR: Missing setting DEFAULT_MINTRAVELFEEDRATE
#endif
#if NOTEXIST(MINIMUM_PLANNER_SPEED)
#error DEPENDENCY ERROR: Missing setting MINIMUM_PLANNER_SPEED
#endif
#if NOTEXIST(DEFAULT_MAX_ACCELERATION)
#error DEPENDENCY ERROR: Missing setting DEFAULT_MAX_ACCELERATION
#endif
#if NOTEXIST(DEFAULT_RETRACT_ACCELERATION)
#error DEPENDENCY ERROR: Missing setting DEFAULT_RETRACT_ACCELERATION
#endif
#if NOTEXIST(DEFAULT_ACCELERATION)
#error DEPENDENCY ERROR: Missing setting DEFAULT_ACCELERATION
#endif
#if NOTEXIST(DEFAULT_TRAVEL_ACCELERATION)
#error DEPENDENCY ERROR: Missing setting DEFAULT_TRAVEL_ACCELERATION
#endif
#if NOTEXIST(DEFAULT_XYJERK)
#error DEPENDENCY ERROR: Missing setting DEFAULT_XYJERK
#endif
#if NOTEXIST(DEFAULT_ZJERK)
#error DEPENDENCY ERROR: Missing setting DEFAULT_ZJERK
#endif
#if NOTEXIST(HOMING_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting HOMING_FEEDRATE
#endif
#if NOTEXIST(X_HOME_BUMP_MM)
#error DEPENDENCY ERROR: Missing setting X_HOME_BUMP_MM
#endif
#if NOTEXIST(Y_HOME_BUMP_MM)
#error DEPENDENCY ERROR: Missing setting Y_HOME_BUMP_MM
#endif
#if NOTEXIST(Z_HOME_BUMP_MM)
#error DEPENDENCY ERROR: Missing setting Z_HOME_BUMP_MM
#endif
#if NOTEXIST(HOMING_BUMP_DIVISOR)
#error DEPENDENCY ERROR: Missing setting HOMING_BUMP_DIVISOR
#endif
#if NOTEXIST(LEFT_PROBE_BED_POSITION)
#error DEPENDENCY ERROR: Missing setting LEFT_PROBE_BED_POSITION
#endif
#if NOTEXIST(RIGHT_PROBE_BED_POSITION)
#error DEPENDENCY ERROR: Missing setting RIGHT_PROBE_BED_POSITION
#endif
#if NOTEXIST(FRONT_PROBE_BED_POSITION)
#error DEPENDENCY ERROR: Missing setting FRONT_PROBE_BED_POSITION
#endif
#if !MECH(DELTA)
#if NOTEXIST(XY_TRAVEL_SPEED)
#error DEPENDENCY ERROR: Missing setting XY_TRAVEL_SPEED
#endif
#endif
#if ENABLED(MANUAL_HOME_POSITIONS)
#if NOTEXIST(MANUAL_X_HOME_POS)
#error DEPENDENCY ERROR: Missing setting MANUAL_X_HOME_POS
#endif
#if NOTEXIST(MANUAL_Y_HOME_POS)
#error DEPENDENCY ERROR: Missing setting MANUAL_Y_HOME_POS
#endif
#if NOTEXIST(MANUAL_Z_HOME_POS)
#error DEPENDENCY ERROR: Missing setting MANUAL_Z_HOME_POS
#endif
#endif
#if MECH(COREXY) || MECH(COREXZ)
#if NOTEXIST(COREX_YZ_FACTOR)
#error DEPENDENCY ERROR: Missing setting COREX_YZ_FACTOR
#endif
#endif
#if MECH(SCARA)
#if NOTEXIST(LINKAGE_1)
#error DEPENDENCY ERROR: Missing setting LINKAGE_1
#endif
#if NOTEXIST(LINKAGE_2)
#error DEPENDENCY ERROR: Missing setting LINKAGE_2
#endif
#if NOTEXIST(SCARA_OFFSET_X)
#error DEPENDENCY ERROR: Missing setting SCARA_OFFSET_X
#endif
#if NOTEXIST(SCARA_OFFSET_Y)
#error DEPENDENCY ERROR: Missing setting SCARA_OFFSET_Y
#endif
#if NOTEXIST(SCARA_RAD2DEG)
#error DEPENDENCY ERROR: Missing setting SCARA_RAD2DEG
#endif
#if NOTEXIST(THETA_HOMING_OFFSET)
#error DEPENDENCY ERROR: Missing setting THETA_HOMING_OFFSET
#endif
#if NOTEXIST(PSI_HOMING_OFFSET)
#error DEPENDENCY ERROR: Missing setting PSI_HOMING_OFFSET
#endif
#endif
#if MECH(DELTA)
#if NOTEXIST(DEFAULT_DELTA_DIAGONAL_ROD)
#error DEPENDENCY ERROR: Missing setting DEFAULT_DELTA_DIAGONAL_ROD
#endif
#if NOTEXIST(DELTA_SMOOTH_ROD_OFFSET)
#error DEPENDENCY ERROR: Missing setting DELTA_SMOOTH_ROD_OFFSET
#endif
#if NOTEXIST(DELTA_CARRIAGE_OFFSET)
#error DEPENDENCY ERROR: Missing setting DELTA_CARRIAGE_OFFSET
#endif
#if NOTEXIST(PRINTER_RADIUS)
#error DEPENDENCY ERROR: Missing setting PRINTER_RADIUS
#endif
#if NOTEXIST(DEFAULT_DELTA_RADIUS)
#error DEPENDENCY ERROR: Missing setting DEFAULT_DELTA_RADIUS
#endif
#if NOTEXIST(AUTOCAL_TRAVELRATE)
#error DEPENDENCY ERROR: Missing setting AUTOCAL_TRAVELRATE
#endif
#if NOTEXIST(AUTOCAL_PROBERATE)
#error DEPENDENCY ERROR: Missing setting AUTOCAL_PROBERATE
#endif
#if NOTEXIST(AUTOCALIBRATION_PRECISION)
#error DEPENDENCY ERROR: Missing setting AUTOCALIBRATION_PRECISION
#endif
#if NOTEXIST(TOWER_A_ENDSTOP_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_A_ENDSTOP_ADJ
#endif
#if NOTEXIST(TOWER_B_ENDSTOP_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_B_ENDSTOP_ADJ
#endif
#if NOTEXIST(TOWER_C_ENDSTOP_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_C_ENDSTOP_ADJ
#endif
#if NOTEXIST(TOWER_A_POSITION_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_A_POSITION_ADJ
#endif
#if NOTEXIST(TOWER_B_POSITION_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_B_POSITION_ADJ
#endif
#if NOTEXIST(TOWER_C_POSITION_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_C_POSITION_ADJ
#endif
#if NOTEXIST(TOWER_A_RADIUS_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_A_RADIUS_ADJ
#endif
#if NOTEXIST(TOWER_B_RADIUS_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_B_RADIUS_ADJ
#endif
#if NOTEXIST(TOWER_C_RADIUS_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_C_RADIUS_ADJ
#endif
#if NOTEXIST(TOWER_A_DIAGROD_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_A_DIAGROD_ADJ
#endif
#if NOTEXIST(TOWER_B_DIAGROD_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_B_DIAGROD_ADJ
#endif
#if NOTEXIST(TOWER_C_DIAGROD_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_C_DIAGROD_ADJ
#endif
#if NOTEXIST(Z_PROBE_OFFSET)
#error DEPENDENCY ERROR: Missing setting Z_PROBE_OFFSET
#endif
#if NOTEXIST(Z_PROBE_DEPLOY_START_LOCATION)
#error DEPENDENCY ERROR: Missing setting Z_PROBE_DEPLOY_START_LOCATION
#endif
#if NOTEXIST(Z_PROBE_DEPLOY_END_LOCATION)
#error DEPENDENCY ERROR: Missing setting Z_PROBE_DEPLOY_END_LOCATION
#endif
#if NOTEXIST(Z_PROBE_RETRACT_START_LOCATION)
#error DEPENDENCY ERROR: Missing setting Z_PROBE_RETRACT_START_LOCATION
#endif
#if NOTEXIST(Z_PROBE_RETRACT_END_LOCATION)
#error DEPENDENCY ERROR: Missing setting Z_PROBE_RETRACT_END_LOCATION
#endif
#if NOTEXIST(Z_RAISE_BETWEEN_PROBINGS)
#error DEPENDENCY ERROR: Missing setting Z_RAISE_BETWEEN_PROBINGS
#endif
#if NOTEXIST(AUTO_BED_LEVELING_GRID_POINTS)
#error DEPENDENCY ERROR: Missing setting AUTO_BED_LEVELING_GRID_POINTS
#endif
#endif
#endif
\ No newline at end of file
......@@ -49,8 +49,7 @@
#include "language.h"
#include "conditionals.h"
#include "dependencies.h"
#include "conflicts.h"
#include "sanitycheck.h"
#include "comunication.h"
......
/**
* sanitycheck.h
*
* Test configuration values for errors at compile-time.
*/
#ifndef SANITYCHECK_H
#define SANITYCHECK_H
#if NOTEXIST(SERIAL_PORT)
#error DEPENDENCY ERROR: Missing setting SERIAL_PORT
#endif
#if NOTEXIST(BAUDRATE)
#error DEPENDENCY ERROR: Missing setting BAUDRATE
#endif
#if NOTEXIST(MACHINE_UUID)
#error DEPENDENCY ERROR: Missing setting MACHINE_UUID
#endif
//board
#if NOTEXIST(MOTHERBOARD)
#error DEPENDENCY ERROR: Missing setting MOTHERBOARD
#endif
//Mechanism
#if NOTEXIST(MECHANISM)
#error DEPENDENCY ERROR: Missing setting MECHANISM
#endif
//Power supply
#if NOTEXIST(POWER_SUPPLY)
#error DEPENDENCY ERROR: Missing setting POWER_SUPPLY
#endif
//Thermistor
#if NOTEXIST(TEMP_SENSOR_0)
#error DEPENDENCY ERROR: Missing setting TEMP_SENSOR_0
#endif
#if NOTEXIST(TEMP_SENSOR_1)
#error DEPENDENCY ERROR: Missing setting TEMP_SENSOR_1
#endif
#if NOTEXIST(TEMP_SENSOR_2)
#error DEPENDENCY ERROR: Missing setting TEMP_SENSOR_2
#endif
#if NOTEXIST(TEMP_SENSOR_3)
#error DEPENDENCY ERROR: Missing setting TEMP_SENSOR_3
#endif
#if NOTEXIST(TEMP_SENSOR_BED)
#error DEPENDENCY ERROR: Missing setting TEMP_SENSOR_BED
#endif
#if (THERMISTORHEATER_0 == 998) || (THERMISTORHEATER_1 == 998) || (THERMISTORHEATER_2 == 998) || (THERMISTORHEATER_3 == 998) || (THERMISTORBED == 998) //User EXIST table
#if NOTEXIST(DUMMY_THERMISTOR_998_VALUE)
#error DEPENDENCY ERROR: Missing setting DUMMY_THERMISTOR_998_VALUE
#endif
#endif
//Temperature
/**
* Temperature defines
*/
#if EXIST(TEMP_RESIDENCY_TIME)
#if NOTEXIST(TEMP_HYSTERESIS)
#error DEPENDENCY ERROR: Missing setting TEMP_HYSTERESIS
#endif
#if NOTEXIST(TEMP_WINDOW)
#error DEPENDENCY ERROR: Missing setting TEMP_WINDOW
#endif
#endif
#if TEMP_SENSOR_0 != 0
#if NOTEXIST(HEATER_0_MAXTEMP)
#error DEPENDENCY ERROR: Missing setting HEATER_0_MAXTEMP
#endif
#if NOTEXIST(HEATER_0_MINTEMP)
#error DEPENDENCY ERROR: Missing setting HEATER_0_MINTEMP
#endif
#endif
#if TEMP_SENSOR_1 != 0
#if NOTEXIST(HEATER_1_MAXTEMP)
#error DEPENDENCY ERROR: Missing setting HEATER_1_MAXTEMP
#endif
#if NOTEXIST(HEATER_0_MINTEMP)
#error DEPENDENCY ERROR: Missing setting HEATER_1_MINTEMP
#endif
#endif
#if TEMP_SENSOR_2 != 0
#if NOTEXIST(HEATER_2_MAXTEMP)
#error DEPENDENCY ERROR: Missing setting HEATER_2_MAXTEMP
#endif
#if NOTEXIST(HEATER_0_MINTEMP)
#error DEPENDENCY ERROR: Missing setting HEATER_2_MINTEMP
#endif
#endif
#if TEMP_SENSOR_3 != 0
#if NOTEXIST(HEATER_3_MAXTEMP)
#error DEPENDENCY ERROR: Missing setting HEATER_3_MAXTEMP
#endif
#if NOTEXIST(HEATER_0_MINTEMP)
#error DEPENDENCY ERROR: Missing setting HEATER_3_MINTEMP
#endif
#endif
#if TEMP_SENSOR_BED != 0
#if NOTEXIST(BED_MAXTEMP)
#error DEPENDENCY ERROR: Missing setting BED_MAXTEMP
#endif
#if NOTEXIST(HEATER_0_MINTEMP)
#error DEPENDENCY ERROR: Missing setting BED_MINTEMP
#endif
#endif
#if NOTEXIST(PLA_PREHEAT_HOTEND_TEMP)
#error DEPENDENCY ERROR: Missing setting PLA_PREHEAT_HOTEND_TEMP
#endif
#if NOTEXIST(PLA_PREHEAT_HPB_TEMP)
#error DEPENDENCY ERROR: Missing setting PLA_PREHEAT_HPB_TEMP
#endif
#if NOTEXIST(PLA_PREHEAT_FAN_SPEED)
#error DEPENDENCY ERROR: Missing setting PLA_PREHEAT_FAN_SPEED
#endif
#if NOTEXIST(ABS_PREHEAT_HOTEND_TEMP)
#error DEPENDENCY ERROR: Missing setting ABS_PREHEAT_HOTEND_TEMP
#endif
#if NOTEXIST(ABS_PREHEAT_HPB_TEMP)
#error DEPENDENCY ERROR: Missing setting ABS_PREHEAT_HPB_TEMP
#endif
#if NOTEXIST(ABS_PREHEAT_FAN_SPEED)
#error DEPENDENCY ERROR: Missing setting ABS_PREHEAT_FAN_SPEED
#endif
#if NOTEXIST(GUM_PREHEAT_HOTEND_TEMP)
#error DEPENDENCY ERROR: Missing setting GUM_PREHEAT_HOTEND_TEMP
#endif
#if NOTEXIST(GUM_PREHEAT_HPB_TEMP)
#error DEPENDENCY ERROR: Missing setting GUM_PREHEAT_HPB_TEMP
#endif
#if NOTEXIST(GUM_PREHEAT_FAN_SPEED)
#error DEPENDENCY ERROR: Missing setting GUM_PREHEAT_FAN_SPEED
#endif
//extruders
#if NOTEXIST(EXTRUDERS)
#error DEPENDENCY ERROR: Missing setting EXTRUDERS
#endif
#if NOTEXIST(DRIVER_EXTRUDERS)
#error DEPENDENCY ERROR: Missing setting DRIVER_EXTRUDERS
#endif
//Language
#if NOTEXIST(LANGUAGE_CHOICE)
#error DEPENDENCY ERROR: Missing setting LANGUAGE_CHOICE
#endif
///FEATURE
//Temperature
#if NOTEXIST(PID_MAX)
#error DEPENDENCY ERROR: Missing setting PID_MAX
#endif
#if NOTEXIST(MAX_BED_POWER)
#error DEPENDENCY ERROR: Missing setting MAX_BED_POWER
#endif
#if EXIST(PIDTEMP) || EXIST(PIDTEMPBED)
#if NOTEXIST(MAX_OVERSHOOT_PID_AUTOTUNE)
#error DEPENDENCY ERROR: Missing setting MAX_OVERSHOOT_PID_AUTOTUNE
#endif
#endif
#if EXIST(PIDTEMP)
#if NOTEXIST(PID_OPENLOOP) && NOTEXIST(PID_FUNCTIONAL_RANGE)
#error DEPENDENCY ERROR: Missing setting PID_FUNCTIONAL_RANGE
#endif
#if NOTEXIST(PID_INTEGRAL_DRIVE_MAX)
#error DEPENDENCY ERROR: Missing setting PID_INTEGRAL_DRIVE_MAX
#endif
#if NOTEXIST(DEFAULT_Kp)
#error DEPENDENCY ERROR: Missing setting DEFAULT_Kp
#endif
#if NOTEXIST(DEFAULT_Ki)
#error DEPENDENCY ERROR: Missing setting DEFAULT_Ki
#endif
#if NOTEXIST(DEFAULT_Kd)
#error DEPENDENCY ERROR: Missing setting DEFAULT_Kd
#endif
#endif
#if EXIST(PIDTEMPBED)
#if NOTEXIST(PID_BED_INTEGRAL_DRIVE_MAX)
#error DEPENDENCY ERROR: Missing setting PID_BED_INTEGRAL_DRIVE_MAX
#endif
#if NOTEXIST(DEFAULT_bedKp)
#error DEPENDENCY ERROR: Missing setting DEFAULT_bedKp
#endif
#if NOTEXIST(DEFAULT_bedKi)
#error DEPENDENCY ERROR: Missing setting DEFAULT_bedKi
#endif
#if NOTEXIST(DEFAULT_bedKd)
#error DEPENDENCY ERROR: Missing setting DEFAULT_bedKd
#endif
#endif
#if EXIST(BED_LIMIT_SWITCHING)
#if NOTEXIST(BED_HYSTERESIS)
#error DEPENDENCY ERROR: Missing setting BED_HYSTERESIS
#endif
#if NOTEXIST(BED_CHECK_INTERVAL)
#error DEPENDENCY ERROR: Missing setting BED_CHECK_INTERVAL
#endif
#endif
#if EXIST(THERMAL_PROTECTION_HOTENDS)
#if NOTEXIST(THERMAL_PROTECTION_PERIOD)
#error DEPENDENCY ERROR: Missing setting THERMAL_PROTECTION_PERIOD
#endif
#if NOTEXIST(THERMAL_PROTECTION_HYSTERESIS)
#error DEPENDENCY ERROR: Missing setting THERMAL_PROTECTION_HYSTERESIS
#endif
#if NOTEXIST(WATCH_TEMP_PERIOD)
#error DEPENDENCY ERROR: Missing setting WATCH_TEMP_PERIOD
#endif
#if NOTEXIST(WATCH_TEMP_INCREASE)
#error DEPENDENCY ERROR: Missing setting WATCH_TEMP_INCREASE
#endif
#endif
#if EXIST(THERMAL_PROTECTION_BED)
#if NOTEXIST(THERMAL_PROTECTION_BED_PERIOD)
#error DEPENDENCY ERROR: Missing setting THERMAL_PROTECTION_BED_PERIOD
#endif
#if NOTEXIST(THERMAL_PROTECTION_BED_HYSTERESIS)
#error DEPENDENCY ERROR: Missing setting THERMAL_PROTECTION_BED_HYSTERESIS
#endif
#endif
//fan
#if NOTEXIST(SOFT_PWM_SCALE)
#error DEPENDENCY ERROR: Missing setting SOFT_PWM_SCALE
#endif
#if EXIST(CONTROLLERFAN)
#if NOTEXIST(CONTROLLERFAN_SECS)
#error DEPENDENCY ERROR: Missing setting CONTROLLERFAN_SECS
#endif
#if NOTEXIST(CONTROLLERFAN_SPEED)
#error DEPENDENCY ERROR: Missing setting CONTROLLERFAN_SPEED
#endif
#if NOTEXIST(CONTROLLERFAN_MIN_SPEED)
#error DEPENDENCY ERROR: Missing setting CONTROLLERFAN_MIN_SPEED
#endif
#endif
#if EXIST(EXTRUDER_AUTO_FAN)
#if NOTEXIST(EXTRUDER_AUTO_FAN_TEMPERATURE)
#error DEPENDENCY ERROR: Missing setting EXTRUDER_AUTO_FAN_TEMPERATURE
#endif
#if NOTEXIST(EXTRUDER_AUTO_FAN_SPEED)
#error DEPENDENCY ERROR: Missing setting EXTRUDER_AUTO_FAN_SPEED
#endif
#if NOTEXIST(EXTRUDER_AUTO_FAN_MIN_SPEED)
#error DEPENDENCY ERROR: Missing setting EXTRUDER_AUTO_FAN_MIN_SPEED
#endif
#endif
//extruder
#if EXIST(PREVENT_DANGEROUS_EXTRUDE)
#if NOTEXIST(EXTRUDE_MINTEMP)
#error DEPENDENCY ERROR: Missing setting EXTRUDE_MINTEMP
#endif
#if EXIST(PREVENT_LENGTHY_EXTRUDE)
#if NOTEXIST(EXTRUDE_MAXLENGTH)
#error DEPENDENCY ERROR: Missing setting EXTRUDE_MAXLENGTH
#endif
#endif
#endif
#if EXIST(NPR2)
#if NOTEXIST(COLOR_STEP)
#error DEPENDENCY ERROR: Missing setting COLOR_STEP
#endif
#if NOTEXIST(COLOR_SLOWRATE)
#error DEPENDENCY ERROR: Missing setting COLOR_SLOWRATE
#endif
#if NOTEXIST(COLOR_HOMERATE)
#error DEPENDENCY ERROR: Missing setting COLOR_HOMERATE
#endif
#if NOTEXIST(MOTOR_ANGLE)
#error DEPENDENCY ERROR: Missing setting MOTOR_ANGLE
#endif
#if NOTEXIST(DRIVER_MICROSTEP)
#error DEPENDENCY ERROR: Missing setting DRIVER_MICROSTEP
#endif
#if NOTEXIST(CARTER_MOLTIPLICATOR)
#error DEPENDENCY ERROR: Missing setting CARTER_MOLTIPLICATOR
#endif
#endif
#if EXIST(IDLE_OOZING_PREVENT)
#if NOTEXIST(IDLE_OOZING_MINTEMP)
#error DEPENDENCY ERROR: Missing setting IDLE_OOZING_MINTEMP
#endif
#if NOTEXIST(IDLE_OOZING_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting IDLE_OOZING_FEEDRATE
#endif
#if NOTEXIST(IDLE_OOZING_SECONDS)
#error DEPENDENCY ERROR: Missing setting IDLE_OOZING_SECONDS
#endif
#if NOTEXIST(IDLE_OOZING_LENGTH)
#error DEPENDENCY ERROR: Missing setting IDLE_OOZING_LENGTH
#endif
#if NOTEXIST(IDLE_OOZING_RECOVER_LENGTH)
#error DEPENDENCY ERROR: Missing setting IDLE_OOZING_RECOVER_LENGTH
#endif
#if NOTEXIST(IDLE_OOZING_RECOVER_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting IDLE_OOZING_RECOVER_FEEDRATE
#endif
#endif
#if EXIST(EXTRUDER_RUNOUT_PREVENT)
#if NOTEXIST(EXTRUDER_RUNOUT_MINTEMP)
#error DEPENDENCY ERROR: Missing setting EXTRUDER_RUNOUT_MINTEMP
#endif
#if NOTEXIST(EXTRUDER_RUNOUT_SECONDS)
#error DEPENDENCY ERROR: Missing setting EXTRUDER_RUNOUT_SECONDS
#endif
#if NOTEXIST(EXTRUDER_RUNOUT_ESTEPS)
#error DEPENDENCY ERROR: Missing setting EXTRUDER_RUNOUT_ESTEPS
#endif
#if NOTEXIST(EXTRUDER_RUNOUT_SPEED)
#error DEPENDENCY ERROR: Missing setting EXTRUDER_RUNOUT_SPEED
#endif
#if NOTEXIST(EXTRUDER_RUNOUT_EXTRUDE)
#error DEPENDENCY ERROR: Missing setting EXTRUDER_RUNOUT_EXTRUDE
#endif
#endif
#if EXIST(EASY_LOAD)
#if NOTEXIST(BOWDEN_LENGTH)
#error DEPENDENCY ERROR: Missing setting BOWDEN_LENGTH
#endif
#if NOTEXIST(LCD_PURGE_LENGTH)
#error DEPENDENCY ERROR: Missing setting LCD_PURGE_LENGTH
#endif
#if NOTEXIST(LCD_RETRACT_LENGTH)
#error DEPENDENCY ERROR: Missing setting LCD_RETRACT_LENGTH
#endif
#if NOTEXIST(LCD_PURGE_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting LCD_PURGE_FEEDRATE
#endif
#if NOTEXIST(LCD_RETRACT_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting LCD_RETRACT_FEEDRATE
#endif
#if NOTEXIST(LCD_LOAD_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting LCD_LOAD_FEEDRATE
#endif
#if NOTEXIST(LCD_UNLOAD_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting LCD_UNLOAD_FEEDRATE
#endif
#endif
#if EXIST(ADVANCE)
#if NOTEXIST(EXTRUDER_ADVANCE_K)
#error DEPENDENCY ERROR: Missing setting EXTRUDER_ADVANCE_K
#endif
#if NOTEXIST(D_FILAMENT)
#error DEPENDENCY ERROR: Missing setting D_FILAMENT
#endif
#if NOTEXIST(STEPS_MM_E)
#error DEPENDENCY ERROR: Missing setting STEPS_MM_E
#endif
#endif
#if EXIST(FILAMENTCHANGEENABLE)
#if NOTEXIST(FILAMENTCHANGE_XPOS)
#error DEPENDENCY ERROR: Missing setting FILAMENTCHANGE_XPOS
#endif
#if NOTEXIST(FILAMENTCHANGE_YPOS)
#error DEPENDENCY ERROR: Missing setting FILAMENTCHANGE_YPOS
#endif
#if NOTEXIST(FILAMENTCHANGE_ZADD)
#error DEPENDENCY ERROR: Missing setting FILAMENTCHANGE_ZADD
#endif
#if NOTEXIST(FILAMENTCHANGE_FIRSTRETRACT)
#error DEPENDENCY ERROR: Missing setting FILAMENTCHANGE_FIRSTRETRACT
#endif
#if NOTEXIST(FILAMENTCHANGE_FINALRETRACT)
#error DEPENDENCY ERROR: Missing setting FILAMENTCHANGE_FINALRETRACT
#endif
#if NOTEXIST(FILAMENTCHANGE_PRINTEROFF)
#error DEPENDENCY ERROR: Missing setting FILAMENTCHANGE_PRINTEROFF
#endif
#endif
//Motion
#if NOTEXIST(SOFTWARE_MIN_ENDSTOPS)
#error DEPENDENCY ERROR: Missing setting SOFTWARE_MIN_ENDSTOPS
#endif
#if NOTEXIST(SOFTWARE_MAX_ENDSTOPS)
#error DEPENDENCY ERROR: Missing setting SOFTWARE_MAX_ENDSTOPS
#endif
#if EXIST(AUTO_BED_LEVELING_FEATURE)
#if EXIST(AUTO_BED_LEVELING_GRID)
#if NOTEXIST(MIN_PROBE_EDGE)
#error DEPENDENCY ERROR: Missing setting MIN_PROBE_EDGE
#endif
#if NOTEXIST(AUTO_BED_LEVELING_GRID_POINTS)
#error DEPENDENCY ERROR: Missing setting AUTO_BED_LEVELING_GRID_POINTS
#endif
#else
#if NOTEXIST(ABL_PROBE_PT_1_X)
#error DEPENDENCY ERROR: Missing setting ABL_PROBE_PT_1_X
#endif
#if NOTEXIST(ABL_PROBE_PT_1_Y)
#error DEPENDENCY ERROR: Missing setting ABL_PROBE_PT_1_Y
#endif
#if NOTEXIST(ABL_PROBE_PT_2_X)
#error DEPENDENCY ERROR: Missing setting ABL_PROBE_PT_2_X
#endif
#if NOTEXIST(ABL_PROBE_PT_2_Y)
#error DEPENDENCY ERROR: Missing setting ABL_PROBE_PT_2_Y
#endif
#if NOTEXIST(ABL_PROBE_PT_3_X)
#error DEPENDENCY ERROR: Missing setting ABL_PROBE_PT_3_X
#endif
#if NOTEXIST(ABL_PROBE_PT_3_Y)
#error DEPENDENCY ERROR: Missing setting ABL_PROBE_PT_3_Y
#endif
#endif
#if NOTEXIST(X_PROBE_OFFSET_FROM_EXTRUDER)
#error DEPENDENCY ERROR: Missing setting X_PROBE_OFFSET_FROM_EXTRUDER
#endif
#if NOTEXIST(Y_PROBE_OFFSET_FROM_EXTRUDER)
#error DEPENDENCY ERROR: Missing setting Y_PROBE_OFFSET_FROM_EXTRUDER
#endif
#if NOTEXIST(Z_PROBE_OFFSET_FROM_EXTRUDER)
#error DEPENDENCY ERROR: Missing setting Z_PROBE_OFFSET_FROM_EXTRUDER
#endif
#if NOTEXIST(Z_RAISE_BEFORE_HOMING)
#error DEPENDENCY ERROR: Missing setting Z_RAISE_BEFORE_HOMING
#endif
#if NOTEXIST(Z_RAISE_BEFORE_PROBING)
#error DEPENDENCY ERROR: Missing setting Z_RAISE_BEFORE_PROBING
#endif
#if NOTEXIST(Z_RAISE_BETWEEN_PROBINGS)
#error DEPENDENCY ERROR: Missing setting Z_RAISE_BETWEEN_PROBINGS
#endif
#if NOTEXIST(Z_RAISE_AFTER_PROBING)
#error DEPENDENCY ERROR: Missing setting Z_RAISE_AFTER_PROBING
#endif
#if EXIST(Z_PROBE_SLED)
#if NOTEXIST(SLED_DOCKING_OFFSET)
#error DEPENDENCY ERROR: Missing setting SLED_DOCKING_OFFSET
#endif
#endif
#if EXIST(Z_SAFE_HOMING)
#if NOTEXIST(Z_SAFE_HOMING_X_POINT)
#error DEPENDENCY ERROR: Missing setting Z_SAFE_HOMING_X_POINT
#endif
#if NOTEXIST(Z_SAFE_HOMING_Y_POINT)
#error DEPENDENCY ERROR: Missing setting Z_SAFE_HOMING_Y_POINT
#endif
#endif
#endif
#if ENABLED(ENABLE_SERVOS)
#if NOTEXIST(NUM_SERVOS)
#error DEPENDENCY ERROR: Missing setting NUM_SERVOS
#endif
#if NUM_SERVOS > 0
#if NOTEXIST(X_ENDSTOP_SERVO_NR)
#error DEPENDENCY ERROR: Missing setting X_ENDSTOP_SERVO_NR
#endif
#if NOTEXIST(Y_ENDSTOP_SERVO_NR)
#error DEPENDENCY ERROR: Missing setting Y_ENDSTOP_SERVO_NR
#endif
#if NOTEXIST(Z_ENDSTOP_SERVO_NR)
#error DEPENDENCY ERROR: Missing setting Z_ENDSTOP_SERVO_NR
#endif
#if NOTEXIST(X_ENDSTOP_SERVO_ANGLES)
#error DEPENDENCY ERROR: Missing setting X_ENDSTOP_SERVO_ANGLES
#endif
#if NOTEXIST(Y_ENDSTOP_SERVO_ANGLES)
#error DEPENDENCY ERROR: Missing setting Y_ENDSTOP_SERVO_ANGLES
#endif
#if NOTEXIST(Z_ENDSTOP_SERVO_ANGLES)
#error DEPENDENCY ERROR: Missing setting Z_ENDSTOP_SERVO_ANGLES
#endif
#if NOTEXIST(SERVO_DEACTIVATION_DELAY)
#error DEPENDENCY ERROR: Missing setting SERVO_DEACTIVATION_DELAY
#endif
#endif
#endif
#if EXIST(BABYSTEPPING)
#if NOTEXIST(BABYSTEP_INVERT_Z)
#error DEPENDENCY ERROR: Missing setting BABYSTEP_INVERT_Z
#endif
#if NOTEXIST(BABYSTEP_Z_MULTIPLICATOR)
#error DEPENDENCY ERROR: Missing setting BABYSTEP_Z_MULTIPLICATOR
#endif
#endif
#if EXIST(FWRETRACT)
#if NOTEXIST(MIN_RETRACT)
#error DEPENDENCY ERROR: Missing setting MIN_RETRACT
#endif
#if NOTEXIST(RETRACT_LENGTH)
#error DEPENDENCY ERROR: Missing setting RETRACT_LENGTH
#endif
#if NOTEXIST(RETRACT_LENGTH_SWAP)
#error DEPENDENCY ERROR: Missing setting RETRACT_LENGTH_SWAP
#endif
#if NOTEXIST(RETRACT_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting RETRACT_FEEDRATE
#endif
#if NOTEXIST(RETRACT_ZLIFT)
#error DEPENDENCY ERROR: Missing setting RETRACT_ZLIFT
#endif
#if NOTEXIST(RETRACT_RECOVER_LENGTH)
#error DEPENDENCY ERROR: Missing setting RETRACT_RECOVER_LENGTH
#endif
#if NOTEXIST(RETRACT_RECOVER_LENGTH_SWAP)
#error DEPENDENCY ERROR: Missing setting RETRACT_RECOVER_LENGTH_SWAP
#endif
#if NOTEXIST(RETRACT_RECOVER_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting RETRACT_RECOVER_FEEDRATE
#endif
#endif
#if EXIST(DUAL_X_CARRIAGE)
#if NOTEXIST(X2_MIN_POS)
#error DEPENDENCY ERROR: Missing setting X2_MIN_POS
#endif
#if NOTEXIST(X2_MAX_POS)
#error DEPENDENCY ERROR: Missing setting X2_MAX_POS
#endif
#if NOTEXIST(X2_HOME_DIR)
#error DEPENDENCY ERROR: Missing setting X2_HOME_DIR
#endif
#if NOTEXIST(X2_HOME_POS)
#error DEPENDENCY ERROR: Missing setting X2_HOME_POS
#endif
#if NOTEXIST(DEFAULT_DUAL_X_CARRIAGE_MODE)
#error DEPENDENCY ERROR: Missing setting DEFAULT_DUAL_X_CARRIAGE_MODE
#endif
#if NOTEXIST(TOOLCHANGE_PARK_ZLIFT)
#error DEPENDENCY ERROR: Missing setting TOOLCHANGE_PARK_ZLIFT
#endif
#if NOTEXIST(TOOLCHANGE_UNPARK_ZLIFT)
#error DEPENDENCY ERROR: Missing setting TOOLCHANGE_UNPARK_ZLIFT
#endif
#if NOTEXIST(DEFAULT_DUPLICATION_X_OFFSET)
#error DEPENDENCY ERROR: Missing setting DEFAULT_DUPLICATION_X_OFFSET
#endif
#endif
#if EXIST(Y_DUAL_STEPPER_DRIVERS)
#if NOTEXIST(INVERT_Y2_VS_Y_DIR)
#error DEPENDENCY ERROR: Missing setting INVERT_Y2_VS_Y_DIR
#endif
#endif
//sensors
#if EXIST(FILAMENT_SENSOR)
#if NOTEXIST(FILAMENT_SENSOR_EXTRUDER_NUM)
#error DEPENDENCY ERROR: Missing setting FILAMENT_SENSOR_EXTRUDER_NUM
#endif
#if NOTEXIST(MEASUREMENT_DELAY_CM)
#error DEPENDENCY ERROR: Missing setting MEASUREMENT_DELAY_CM
#endif
#if NOTEXIST(DEFAULT_NOMINAL_FILAMENT_DIA)
#error DEPENDENCY ERROR: Missing setting DEFAULT_NOMINAL_FILAMENT_DIA
#endif
#if NOTEXIST(MEASURED_UPPER_LIMIT)
#error DEPENDENCY ERROR: Missing setting MEASURED_UPPER_LIMIT
#endif
#if NOTEXIST(MEASURED_LOWER_LIMIT)
#error DEPENDENCY ERROR: Missing setting MEASURED_LOWER_LIMIT
#endif
#if NOTEXIST(MAX_MEASUREMENT_DELAY)
#error DEPENDENCY ERROR: Missing setting MAX_MEASUREMENT_DELAY
#endif
#if NOTEXIST(DEFAULT_MEASURED_FILAMENT_DIA)
#error DEPENDENCY ERROR: Missing setting DEFAULT_MEASURED_FILAMENT_DIA
#endif
#endif
#if EXIST(FILAMENT_RUNOUT_SENSOR)
#if NOTEXIST(FILRUNOUT_PIN_INVERTING)
#error DEPENDENCY ERROR: Missing setting FILRUNOUT_PIN_INVERTING
#endif
#if NOTEXIST(ENDSTOPPULLUP_FIL_RUNOUT)
#error DEPENDENCY ERROR: Missing setting ENDSTOPPULLUP_FIL_RUNOUT
#endif
#if NOTEXIST(FILAMENT_RUNOUT_SCRIPT)
#error DEPENDENCY ERROR: Missing setting FILAMENT_RUNOUT_SCRIPT
#endif
#endif
#if EXIST(POWER_CONSUMPTION)
#if NOTEXIST(POWER_VOLTAGE)
#error DEPENDENCY ERROR: Missing setting POWER_VOLTAGE
#endif
#if NOTEXIST(POWER_SENSITIVITY)
#error DEPENDENCY ERROR: Missing setting POWER_SENSITIVITY
#endif
#if NOTEXIST(POWER_OFFSET)
#error DEPENDENCY ERROR: Missing setting POWER_OFFSET
#endif
#if NOTEXIST(POWER_ZERO)
#error DEPENDENCY ERROR: Missing setting POWER_ZERO
#endif
#if NOTEXIST(POWER_ERROR)
#error DEPENDENCY ERROR: Missing setting POWER_ERROR
#endif
#if NOTEXIST(POWER_EFFICIENCY)
#error DEPENDENCY ERROR: Missing setting POWER_EFFICIENCY
#endif
#endif
//addon
#if EXIST(SDSUPPORT)
#if NOTEXIST(SD_FINISHED_STEPPERRELEASE)
#error DEPENDENCY ERROR: Missing setting SD_FINISHED_STEPPERRELEASE
#endif
#if NOTEXIST(SD_FINISHED_RELEASECOMMAND)
#error DEPENDENCY ERROR: Missing setting SD_FINISHED_RELEASECOMMAND
#endif
#if EXIST(SD_SETTINGS)
#if NOTEXIST(SD_CFG_SECONDS)
#error DEPENDENCY ERROR: Missing setting SD_CFG_SECONDS
#endif
#if NOTEXIST(CFG_SD_FILE)
#error DEPENDENCY ERROR: Missing setting CFG_SD_FILE
#endif
#if NOTEXIST(CFG_SD_MAX_KEY_LEN)
#error DEPENDENCY ERROR: Missing setting CFG_SD_MAX_KEY_LEN
#endif
#if NOTEXIST(CFG_SD_MAX_VALUE_LEN)
#error DEPENDENCY ERROR: Missing setting CFG_SD_MAX_VALUE_LEN
#endif
#endif
#endif
#if NOTEXIST(DISPLAY_CHARSET_HD44780_JAPAN) && NOTEXIST(DISPLAY_CHARSET_HD44780_WESTERN) && NOTEXIST(DISPLAY_CHARSET_HD44780_CYRILLIC)
#error DEPENDENCY ERROR: Missing setting DISPLAY_CHARSET_HD44780_JAPAN or DISPLAY_CHARSET_HD44780_WESTERN or DISPLAY_CHARSET_HD44780_CYRILLIC
#endif
#if EXIST(SHOW_BOOTSCREEN)
#if NOTEXIST(STRING_SPLASH_LINE1)
#error DEPENDENCY ERROR: Missing setting STRING_SPLASH_LINE1
#endif
#if NOTEXIST(SPLASH_SCREEN_DURATION)
#error DEPENDENCY ERROR: Missing setting SPLASH_SCREEN_DURATION
#endif
#endif
#if ENABLED(ULTIPANEL)
#if EXIST(ENCODER_RATE_MULTIPLIER)
#if NOTEXIST(ENCODER_10X_STEPS_PER_SEC)
#error DEPENDENCY ERROR: Missing setting ENCODER_10X_STEPS_PER_SEC
#endif
#if NOTEXIST(ENCODER_100X_STEPS_PER_SEC)
#error DEPENDENCY ERROR: Missing setting ENCODER_100X_STEPS_PER_SEC
#endif
#endif
#endif
#if MB(ALLIGATOR)
#if NOTEXIST(UI_VOLTAGE_LEVEL)
#error DEPENDENCY ERROR: Missing setting UI_VOLTAGE_LEVEL
#endif
#endif
#if EXIST(REPRAPWORLD_KEYPAD)
#if NOTEXIST(REPRAPWORLD_KEYPAD_MOVE_STEP)
#error DEPENDENCY ERROR: Missing setting REPRAPWORLD_KEYPAD_MOVE_STEP
#endif
#endif
#if ENABLED(ULTIPANEL)
#if EXIST(LCD_PROGRESS_BAR)
#if NOTEXIST(PROGRESS_BAR_BAR_TIME)
#error DEPENDENCY ERROR: Missing setting PROGRESS_BAR_BAR_TIME
#endif
#if NOTEXIST(PROGRESS_BAR_MSG_TIME)
#error DEPENDENCY ERROR: Missing setting PROGRESS_BAR_MSG_TIME
#endif
#if NOTEXIST(PROGRESS_MSG_EXPIRE)
#error DEPENDENCY ERROR: Missing setting PROGRESS_MSG_EXPIRE
#endif
#endif
#endif
#if EXIST(CHDK)
#if NOTEXIST(CHDK_DELAY)
#error DEPENDENCY ERROR: Missing setting CHDK_DELAY
#endif
#endif
//adv motion
#if EXIST(USE_MICROSTEPS)
#if NOTEXIST(MICROSTEP_MODES)
#error DEPENDENCY ERROR: Missing setting MICROSTEP_MODES
#endif
#endif
#if NOTEXIST(DEFAULT_STEPPER_DEACTIVE_TIME)
#error DEPENDENCY ERROR: Missing setting DEFAULT_STEPPER_DEACTIVE_TIME
#endif
#if ENABLED(STEPPER_HIGH_LOW)
#if NOTEXIST(STEPPER_HIGH_LOW_DELAY)
#error DEPENDENCY ERROR: Missing setting STEPPER_HIGH_LOW_DELAY
#endif
#endif
#if EXIST(DIGIPOT_I2C)
#if NOTEXIST(DIGIPOT_I2C_NUM_CHANNELS)
#error DEPENDENCY ERROR: Missing setting DIGIPOT_I2C_NUM_CHANNELS
#endif
#if NOTEXIST(DIGIPOT_I2C_MOTOR_CURRENTS)
#error DEPENDENCY ERROR: Missing setting DIGIPOT_I2C_MOTOR_CURRENTS
#endif
#endif
#if EXIST(HAVE_TMCDRIVER)
#if EXIST(X_IS_TMC)
#if NOTEXIST(X_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting X_MAX_CURRENT
#endif
#if NOTEXIST(X_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting X_SENSE_RESISTOR
#endif
#if NOTEXIST(X_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting X_MICROSTEPS
#endif
#endif
#if EXIST(X2_IS_TMC)
#if NOTEXIST(X2_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting X2_MAX_CURRENT
#endif
#if NOTEXIST(X2_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting X2_SENSE_RESISTOR
#endif
#if NOTEXIST(X2_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting X2_MICROSTEPS
#endif
#endif
#if EXIST(Y_IS_TMC)
#if NOTEXIST(Y_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting Y_MAX_CURRENT
#endif
#if NOTEXIST(Y_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting Y_SENSE_RESISTOR
#endif
#if NOTEXIST(Y_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting Y_MICROSTEPS
#endif
#endif
#if EXIST(Y2_IS_TMC)
#if NOTEXIST(Y2_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting Y2_MAX_CURRENT
#endif
#if NOTEXIST(Y2_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting Y2_SENSE_RESISTOR
#endif
#if NOTEXIST(Y2_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting Y2_MICROSTEPS
#endif
#endif
#if EXIST(Z_IS_TMC)
#if NOTEXIST(Z_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting Z_MAX_CURRENT
#endif
#if NOTEXIST(Z_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting Z_SENSE_RESISTOR
#endif
#if NOTEXIST(Z_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting Z_MICROSTEPS
#endif
#endif
#if EXIST(Z2_IS_TMC)
#if NOTEXIST(Z2_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting Z2_MAX_CURRENT
#endif
#if NOTEXIST(Z2_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting Z2_SENSE_RESISTOR
#endif
#if NOTEXIST(Z2_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting Z2_MICROSTEPS
#endif
#endif
#if EXIST(E0_IS_TMC)
#if NOTEXIST(E0_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting E0_MAX_CURRENT
#endif
#if NOTEXIST(E0_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting E0_SENSE_RESISTOR
#endif
#if NOTEXIST(E0_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting E0_MICROSTEPS
#endif
#endif
#if EXIST(E1_IS_TMC)
#if NOTEXIST(E1_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting E1_MAX_CURRENT
#endif
#if NOTEXIST(E1_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting E1_SENSE_RESISTOR
#endif
#if NOTEXIST(E1_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting E1_MICROSTEPS
#endif
#endif
#if EXIST(E2_IS_TMC)
#if NOTEXIST(E2_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting E2_MAX_CURRENT
#endif
#if NOTEXIST(E2_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting E2_SENSE_RESISTOR
#endif
#if NOTEXIST(E2_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting E2_MICROSTEPS
#endif
#endif
#if EXIST(E3_IS_TMC)
#if NOTEXIST(E3_MAX_CURRENT)
#error DEPENDENCY ERROR: Missing setting E3_MAX_CURRENT
#endif
#if NOTEXIST(E3_SENSE_RESISTOR)
#error DEPENDENCY ERROR: Missing setting E3_SENSE_RESISTOR
#endif
#if NOTEXIST(E3_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting E3_MICROSTEPS
#endif
#endif
#endif
#if EXIST(HAVE_L6470DRIVER)
#if EXIST(X_IS_L6470)
#if NOTEXIST(X_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting X_MICROSTEPS
#endif
#if NOTEXIST(X_K_VAL)
#error DEPENDENCY ERROR: Missing setting X_K_VAL
#endif
#if NOTEXIST(X_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting X_OVERCURRENT
#endif
#if NOTEXIST(X_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting X_STALLCURRENT
#endif
#endif
#if EXIST(X2_IS_L6470)
#if NOTEXIST(X2_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting X2_MICROSTEPS
#endif
#if NOTEXIST(X2_K_VAL)
#error DEPENDENCY ERROR: Missing setting X2_K_VAL
#endif
#if NOTEXIST(X2_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting X2_OVERCURRENT
#endif
#if NOTEXIST(X2_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting X2_STALLCURRENT
#endif
#endif
#if EXIST(Y_IS_L6470)
#if NOTEXIST(Y_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting Y_MICROSTEPS
#endif
#if NOTEXIST(Y_K_VAL)
#error DEPENDENCY ERROR: Missing setting Y_K_VAL
#endif
#if NOTEXIST(Y_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting Y_OVERCURRENT
#endif
#if NOTEXIST(Y_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting Y_STALLCURRENT
#endif
#endif
#if EXIST(Y2_IS_L6470)
#if NOTEXIST(Y2_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting Y2_MICROSTEPS
#endif
#if NOTEXIST(Y2_K_VAL)
#error DEPENDENCY ERROR: Missing setting Y2_K_VAL
#endif
#if NOTEXIST(Y2_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting Y2_OVERCURRENT
#endif
#if NOTEXIST(Y2_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting Y2_STALLCURRENT
#endif
#endif
#if EXIST(Z_IS_L6470)
#if NOTEXIST(Z_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting Z_MICROSTEPS
#endif
#if NOTEXIST(Z_K_VAL)
#error DEPENDENCY ERROR: Missing setting Z_K_VAL
#endif
#if NOTEXIST(Z_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting Z_OVERCURRENT
#endif
#if NOTEXIST(Z_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting Z_STALLCURRENT
#endif
#endif
#if EXIST(Z2_IS_L6470)
#if NOTEXIST(Z2_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting Z2_MICROSTEPS
#endif
#if NOTEXIST(Z2_K_VAL)
#error DEPENDENCY ERROR: Missing setting Z2_K_VAL
#endif
#if NOTEXIST(Z2_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting Z2_OVERCURRENT
#endif
#if NOTEXIST(Z2_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting Z2_STALLCURRENT
#endif
#endif
#if EXIST(E0_IS_L6470)
#if NOTEXIST(E0_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting E0_MICROSTEPS
#endif
#if NOTEXIST(E0_K_VAL)
#error DEPENDENCY ERROR: Missing setting E0_K_VAL
#endif
#if NOTEXIST(E0_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting E0_OVERCURRENT
#endif
#if NOTEXIST(E0_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting E0_STALLCURRENT
#endif
#endif
#if EXIST(E1_IS_L6470)
#if NOTEXIST(E1_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting E1_MICROSTEPS
#endif
#if NOTEXIST(E1_K_VAL)
#error DEPENDENCY ERROR: Missing setting E1_K_VAL
#endif
#if NOTEXIST(E1_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting E1_OVERCURRENT
#endif
#if NOTEXIST(E1_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting E1_STALLCURRENT
#endif
#endif
#if EXIST(E2_IS_L6470)
#if NOTEXIST(E2_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting E2_MICROSTEPS
#endif
#if NOTEXIST(E2_K_VAL)
#error DEPENDENCY ERROR: Missing setting E2_K_VAL
#endif
#if NOTEXIST(E2_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting E2_OVERCURRENT
#endif
#if NOTEXIST(E2_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting E2_STALLCURRENT
#endif
#endif
#if EXIST(E3_IS_L6470)
#if NOTEXIST(E3_MICROSTEPS)
#error DEPENDENCY ERROR: Missing setting E3_MICROSTEPS
#endif
#if NOTEXIST(E3_K_VAL)
#error DEPENDENCY ERROR: Missing setting E3_K_VAL
#endif
#if NOTEXIST(E3_OVERCURRENT)
#error DEPENDENCY ERROR: Missing setting E3_OVERCURRENT
#endif
#if NOTEXIST(E3_STALLCURRENT)
#error DEPENDENCY ERROR: Missing setting E3_STALLCURRENT
#endif
#endif
#endif
//buffer
#if NOTEXIST(BLOCK_BUFFER_SIZE)
#error DEPENDENCY ERROR: Missing setting BLOCK_BUFFER_SIZE
#endif
#if NOTEXIST(MAX_CMD_SIZE)
#error DEPENDENCY ERROR: Missing setting MAX_CMD_SIZE
#endif
#if NOTEXIST(BUFSIZE)
#error DEPENDENCY ERROR: Missing setting BUFSIZE
#endif
#if NOTEXIST(NUM_POSITON_SLOTS)
#error DEPENDENCY ERROR: Missing setting NUM_POSITON_SLOTS
#endif
#if NOTEXIST(DROP_SEGMENTS)
#error DEPENDENCY ERROR: Missing setting DROP_SEGMENTS
#endif
#if NOTEXIST(DROP_SEGMENTS)
#error DEPENDENCY ERROR: Missing setting DROP_SEGMENTS
#endif
#if NOTEXIST(DEFAULT_MINSEGMENTTIME)
#error DEPENDENCY ERROR: Missing setting DEFAULT_MINSEGMENTTIME
#endif
#if NOTEXIST(MM_PER_ARC_SEGMENT)
#error DEPENDENCY ERROR: Missing setting MM_PER_ARC_SEGMENT
#endif
#if NOTEXIST(N_ARC_CORRECTION)
#error DEPENDENCY ERROR: Missing setting N_ARC_CORRECTION
#endif
//Machines
#if NOTEXIST(X_MIN_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting X_MIN_ENDSTOP_LOGIC
#endif
#if NOTEXIST(Y_MIN_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting Y_MIN_ENDSTOP_LOGIC
#endif
#if NOTEXIST(Z_MIN_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting Z_MIN_ENDSTOP_LOGIC
#endif
#if NOTEXIST(Z2_MIN_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting Z2_MIN_ENDSTOP_LOGIC
#endif
#if NOTEXIST(X_MAX_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting X_MAX_ENDSTOP_LOGIC
#endif
#if NOTEXIST(Y_MAX_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting Y_MAX_ENDSTOP_LOGIC
#endif
#if NOTEXIST(Z_MAX_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting Z_MAX_ENDSTOP_LOGIC
#endif
#if NOTEXIST(Z2_MAX_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting Z2_MAX_ENDSTOP_LOGIC
#endif
#if NOTEXIST(Z_PROBE_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting Z_PROBE_ENDSTOP_LOGIC
#endif
#if NOTEXIST(E_MIN_ENDSTOP_LOGIC)
#error DEPENDENCY ERROR: Missing setting E_MIN_ENDSTOP_LOGIC
#endif
#if NOTEXIST(X_HOME_DIR)
#error DEPENDENCY ERROR: Missing setting X_HOME_DIR
#endif
#if NOTEXIST(Y_HOME_DIR)
#error DEPENDENCY ERROR: Missing setting Y_HOME_DIR
#endif
#if NOTEXIST(Z_HOME_DIR)
#error DEPENDENCY ERROR: Missing setting Z_HOME_DIR
#endif
#if NOTEXIST(E_HOME_DIR)
#error DEPENDENCY ERROR: Missing setting E_HOME_DIR
#endif
#if NOTEXIST(X_ENABLE_ON)
#error DEPENDENCY ERROR: Missing setting X_ENABLE_ON
#endif
#if NOTEXIST(Y_ENABLE_ON)
#error DEPENDENCY ERROR: Missing setting Y_ENABLE_ON
#endif
#if NOTEXIST(Z_ENABLE_ON)
#error DEPENDENCY ERROR: Missing setting Z_ENABLE_ON
#endif
#if NOTEXIST(E_ENABLE_ON)
#error DEPENDENCY ERROR: Missing setting E_ENABLE_ON
#endif
#if NOTEXIST(INVERT_X_STEP_PIN)
#error DEPENDENCY ERROR: Missing setting INVERT_X_STEP_PIN
#endif
#if NOTEXIST(INVERT_Y_STEP_PIN)
#error DEPENDENCY ERROR: Missing setting INVERT_Y_STEP_PIN
#endif
#if NOTEXIST(INVERT_Z_STEP_PIN)
#error DEPENDENCY ERROR: Missing setting INVERT_Z_STEP_PIN
#endif
#if NOTEXIST(INVERT_E_STEP_PIN)
#error DEPENDENCY ERROR: Missing setting INVERT_E_STEP_PIN
#endif
#if NOTEXIST(INVERT_X_DIR)
#error DEPENDENCY ERROR: Missing setting INVERT_X_DIR
#endif
#if NOTEXIST(INVERT_Y_DIR)
#error DEPENDENCY ERROR: Missing setting INVERT_Y_DIR
#endif
#if NOTEXIST(INVERT_Z_DIR)
#error DEPENDENCY ERROR: Missing setting INVERT_Z_DIR
#endif
#if NOTEXIST(INVERT_E0_DIR)
#error DEPENDENCY ERROR: Missing setting INVERT_E0_DIR
#endif
#if NOTEXIST(INVERT_E1_DIR)
#error DEPENDENCY ERROR: Missing setting INVERT_E1_DIR
#endif
#if NOTEXIST(INVERT_E2_DIR)
#error DEPENDENCY ERROR: Missing setting INVERT_E2_DIR
#endif
#if NOTEXIST(INVERT_E3_DIR)
#error DEPENDENCY ERROR: Missing setting INVERT_E3_DIR
#endif
#if NOTEXIST(DISABLE_X)
#error DEPENDENCY ERROR: Missing setting DISABLE_X
#endif
#if NOTEXIST(DISABLE_Y)
#error DEPENDENCY ERROR: Missing setting DISABLE_Y
#endif
#if NOTEXIST(DISABLE_Z)
#error DEPENDENCY ERROR: Missing setting DISABLE_Z
#endif
#if NOTEXIST(DISABLE_E)
#error DEPENDENCY ERROR: Missing setting DISABLE_E
#endif
#if NOTEXIST(DISABLE_INACTIVE_EXTRUDER)
#error DEPENDENCY ERROR: Missing setting DISABLE_INACTIVE_EXTRUDER
#endif
#if NOTEXIST(X_MAX_POS)
#error DEPENDENCY ERROR: Missing setting X_MAX_POS
#endif
#if NOTEXIST(X_MIN_POS)
#error DEPENDENCY ERROR: Missing setting X_MIN_POS
#endif
#if NOTEXIST(Y_MAX_POS)
#error DEPENDENCY ERROR: Missing setting Y_MAX_POS
#endif
#if NOTEXIST(Y_MIN_POS)
#error DEPENDENCY ERROR: Missing setting Y_MIN_POS
#endif
#if NOTEXIST(Z_MAX_POS)
#error DEPENDENCY ERROR: Missing setting Z_MAX_POS
#endif
#if NOTEXIST(Z_MIN_POS)
#error DEPENDENCY ERROR: Missing setting Z_MIN_POS
#endif
#if NOTEXIST(E_MIN_POS)
#error DEPENDENCY ERROR: Missing setting E_MIN_POS
#endif
#if NOTEXIST(AXIS_RELATIVE_MODES)
#error DEPENDENCY ERROR: Missing setting AXIS_RELATIVE_MODES
#endif
#if NOTEXIST(DEFAULT_AXIS_STEPS_PER_UNIT)
#error DEPENDENCY ERROR: Missing setting DEFAULT_AXIS_STEPS_PER_UNIT
#endif
#if ENABLED(ULTIPANEL) && NOTEXIST(MANUAL_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting MANUAL_FEEDRATE
#endif
#if NOTEXIST(DEFAULT_MINTRAVELFEEDRATE)
#error DEPENDENCY ERROR: Missing setting DEFAULT_MINTRAVELFEEDRATE
#endif
#if NOTEXIST(MINIMUM_PLANNER_SPEED)
#error DEPENDENCY ERROR: Missing setting MINIMUM_PLANNER_SPEED
#endif
#if NOTEXIST(DEFAULT_MAX_ACCELERATION)
#error DEPENDENCY ERROR: Missing setting DEFAULT_MAX_ACCELERATION
#endif
#if NOTEXIST(DEFAULT_RETRACT_ACCELERATION)
#error DEPENDENCY ERROR: Missing setting DEFAULT_RETRACT_ACCELERATION
#endif
#if NOTEXIST(DEFAULT_ACCELERATION)
#error DEPENDENCY ERROR: Missing setting DEFAULT_ACCELERATION
#endif
#if NOTEXIST(DEFAULT_TRAVEL_ACCELERATION)
#error DEPENDENCY ERROR: Missing setting DEFAULT_TRAVEL_ACCELERATION
#endif
#if NOTEXIST(DEFAULT_XYJERK)
#error DEPENDENCY ERROR: Missing setting DEFAULT_XYJERK
#endif
#if NOTEXIST(DEFAULT_ZJERK)
#error DEPENDENCY ERROR: Missing setting DEFAULT_ZJERK
#endif
#if NOTEXIST(HOMING_FEEDRATE)
#error DEPENDENCY ERROR: Missing setting HOMING_FEEDRATE
#endif
#if NOTEXIST(X_HOME_BUMP_MM)
#error DEPENDENCY ERROR: Missing setting X_HOME_BUMP_MM
#endif
#if NOTEXIST(Y_HOME_BUMP_MM)
#error DEPENDENCY ERROR: Missing setting Y_HOME_BUMP_MM
#endif
#if NOTEXIST(Z_HOME_BUMP_MM)
#error DEPENDENCY ERROR: Missing setting Z_HOME_BUMP_MM
#endif
#if NOTEXIST(HOMING_BUMP_DIVISOR)
#error DEPENDENCY ERROR: Missing setting HOMING_BUMP_DIVISOR
#endif
#if NOTEXIST(LEFT_PROBE_BED_POSITION)
#error DEPENDENCY ERROR: Missing setting LEFT_PROBE_BED_POSITION
#endif
#if NOTEXIST(RIGHT_PROBE_BED_POSITION)
#error DEPENDENCY ERROR: Missing setting RIGHT_PROBE_BED_POSITION
#endif
#if NOTEXIST(FRONT_PROBE_BED_POSITION)
#error DEPENDENCY ERROR: Missing setting FRONT_PROBE_BED_POSITION
#endif
#if !MECH(DELTA)
#if NOTEXIST(XY_TRAVEL_SPEED)
#error DEPENDENCY ERROR: Missing setting XY_TRAVEL_SPEED
#endif
#endif
#if ENABLED(MANUAL_HOME_POSITIONS)
#if NOTEXIST(MANUAL_X_HOME_POS)
#error DEPENDENCY ERROR: Missing setting MANUAL_X_HOME_POS
#endif
#if NOTEXIST(MANUAL_Y_HOME_POS)
#error DEPENDENCY ERROR: Missing setting MANUAL_Y_HOME_POS
#endif
#if NOTEXIST(MANUAL_Z_HOME_POS)
#error DEPENDENCY ERROR: Missing setting MANUAL_Z_HOME_POS
#endif
#endif
#if MECH(COREXY) || MECH(COREXZ)
#if NOTEXIST(COREX_YZ_FACTOR)
#error DEPENDENCY ERROR: Missing setting COREX_YZ_FACTOR
#endif
#endif
#if MECH(SCARA)
#if NOTEXIST(LINKAGE_1)
#error DEPENDENCY ERROR: Missing setting LINKAGE_1
#endif
#if NOTEXIST(LINKAGE_2)
#error DEPENDENCY ERROR: Missing setting LINKAGE_2
#endif
#if NOTEXIST(SCARA_OFFSET_X)
#error DEPENDENCY ERROR: Missing setting SCARA_OFFSET_X
#endif
#if NOTEXIST(SCARA_OFFSET_Y)
#error DEPENDENCY ERROR: Missing setting SCARA_OFFSET_Y
#endif
#if NOTEXIST(SCARA_RAD2DEG)
#error DEPENDENCY ERROR: Missing setting SCARA_RAD2DEG
#endif
#if NOTEXIST(THETA_HOMING_OFFSET)
#error DEPENDENCY ERROR: Missing setting THETA_HOMING_OFFSET
#endif
#if NOTEXIST(PSI_HOMING_OFFSET)
#error DEPENDENCY ERROR: Missing setting PSI_HOMING_OFFSET
#endif
#endif
#if MECH(DELTA)
#if NOTEXIST(DEFAULT_DELTA_DIAGONAL_ROD)
#error DEPENDENCY ERROR: Missing setting DEFAULT_DELTA_DIAGONAL_ROD
#endif
#if NOTEXIST(DELTA_SMOOTH_ROD_OFFSET)
#error DEPENDENCY ERROR: Missing setting DELTA_SMOOTH_ROD_OFFSET
#endif
#if NOTEXIST(DELTA_CARRIAGE_OFFSET)
#error DEPENDENCY ERROR: Missing setting DELTA_CARRIAGE_OFFSET
#endif
#if NOTEXIST(PRINTER_RADIUS)
#error DEPENDENCY ERROR: Missing setting PRINTER_RADIUS
#endif
#if NOTEXIST(DEFAULT_DELTA_RADIUS)
#error DEPENDENCY ERROR: Missing setting DEFAULT_DELTA_RADIUS
#endif
#if NOTEXIST(AUTOCAL_TRAVELRATE)
#error DEPENDENCY ERROR: Missing setting AUTOCAL_TRAVELRATE
#endif
#if NOTEXIST(AUTOCAL_PROBERATE)
#error DEPENDENCY ERROR: Missing setting AUTOCAL_PROBERATE
#endif
#if NOTEXIST(AUTOCALIBRATION_PRECISION)
#error DEPENDENCY ERROR: Missing setting AUTOCALIBRATION_PRECISION
#endif
#if NOTEXIST(TOWER_A_ENDSTOP_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_A_ENDSTOP_ADJ
#endif
#if NOTEXIST(TOWER_B_ENDSTOP_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_B_ENDSTOP_ADJ
#endif
#if NOTEXIST(TOWER_C_ENDSTOP_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_C_ENDSTOP_ADJ
#endif
#if NOTEXIST(TOWER_A_POSITION_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_A_POSITION_ADJ
#endif
#if NOTEXIST(TOWER_B_POSITION_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_B_POSITION_ADJ
#endif
#if NOTEXIST(TOWER_C_POSITION_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_C_POSITION_ADJ
#endif
#if NOTEXIST(TOWER_A_RADIUS_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_A_RADIUS_ADJ
#endif
#if NOTEXIST(TOWER_B_RADIUS_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_B_RADIUS_ADJ
#endif
#if NOTEXIST(TOWER_C_RADIUS_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_C_RADIUS_ADJ
#endif
#if NOTEXIST(TOWER_A_DIAGROD_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_A_DIAGROD_ADJ
#endif
#if NOTEXIST(TOWER_B_DIAGROD_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_B_DIAGROD_ADJ
#endif
#if NOTEXIST(TOWER_C_DIAGROD_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_C_DIAGROD_ADJ
#endif
#if NOTEXIST(Z_PROBE_OFFSET)
#error DEPENDENCY ERROR: Missing setting Z_PROBE_OFFSET
#endif
#if NOTEXIST(Z_PROBE_DEPLOY_START_LOCATION)
#error DEPENDENCY ERROR: Missing setting Z_PROBE_DEPLOY_START_LOCATION
#endif
#if NOTEXIST(Z_PROBE_DEPLOY_END_LOCATION)
#error DEPENDENCY ERROR: Missing setting Z_PROBE_DEPLOY_END_LOCATION
#endif
#if NOTEXIST(Z_PROBE_RETRACT_START_LOCATION)
#error DEPENDENCY ERROR: Missing setting Z_PROBE_RETRACT_START_LOCATION
#endif
#if NOTEXIST(Z_PROBE_RETRACT_END_LOCATION)
#error DEPENDENCY ERROR: Missing setting Z_PROBE_RETRACT_END_LOCATION
#endif
#if NOTEXIST(Z_RAISE_BETWEEN_PROBINGS)
#error DEPENDENCY ERROR: Missing setting Z_RAISE_BETWEEN_PROBINGS
#endif
#if NOTEXIST(AUTO_BED_LEVELING_GRID_POINTS)
#error DEPENDENCY ERROR: Missing setting AUTO_BED_LEVELING_GRID_POINTS
#endif
#endif
/**
* Board
*/
#if NOTEXIST(KNOWN_BOARD)
#error DEPENDENCY ERROR: You have to set a valid MOTHERBOARD.
#endif
/**
* Mechanics
*/
#if NOTEXIST(KNOWN_MECH)
#error DEPENDENCY ERROR: You have to set a valid MECHANICS.
#endif
/**
* Dual Stepper Drivers
*/
#if ENABLED(Z_DUAL_STEPPER_DRIVERS) && ENABLED(Y_DUAL_STEPPER_DRIVERS)
#error CONFLICT ERROR: You cannot have dual stepper drivers for both Y and Z.
#endif
/**
* Progress Bar
*/
#if ENABLED(LCD_PROGRESS_BAR)
#if DISABLED(SDSUPPORT)
#error DEPENDENCY ERROR: LCD_PROGRESS_BAR requires SDSUPPORT.
#endif
#if ENABLED(DOGLCD)
#error CONFLICT ERROR: LCD_PROGRESS_BAR does not apply to graphical displays.
#endif
#if ENABLED(FILAMENT_LCD_DISPLAY)
#error CONFLICT ERROR: LCD_PROGRESS_BAR and FILAMENT_LCD_DISPLAY are not fully compatible.
#endif
#if ENABLED(POWER_CONSUMPTION_LCD_DISPLAY)
#error CONFLICT ERROR: LCD_PROGRESS_BAR and POWER_CONSUMPTION_LCD_DISPLAY are not fully compatible.
#endif
#endif
/**
* Babystepping
*/
#if ENABLED(BABYSTEPPING)
#if MECH(COREXY) && ENABLED(BABYSTEP_XY)
#error CONFLICT ERROR: BABYSTEPPING only implemented for Z axis on CoreXY.
#endif
#if MECH(SCARA)
#error CONFLICT ERROR: BABYSTEPPING is not implemented for SCARA yet.
#endif
#if MECH(DELTA) && ENABLED(BABYSTEP_XY)
#error CONFLICT ERROR: BABYSTEPPING only implemented for Z axis on deltabots.
#endif
#endif
/**
* Extruder Runout Prevention
*/
#if DISABLED(PREVENT_DANGEROUS_EXTRUDE) && ENABLED(EXTRUDER_RUNOUT_PREVENT)
#error DEPENDENCY ERROR: EXTRUDER_RUNOUT_PREVENT needs PREVENT_DANGEROUS_EXTRUDE
#endif
#if ENABLED(EXTRUDER_RUNOUT_PREVENT) && EXTRUDER_RUNOUT_MINTEMP < EXTRUDE_MINTEMP
#error CONFLICT ERROR: EXTRUDER_RUNOUT_MINTEMP have to be greater than EXTRUDE_MINTEMP
#endif
/**
* Idle oozing prevent with Extruder Runout Prevention
*/
#if ENABLED(EXTRUDER_RUNOUT_PREVENT) && ENABLED(IDLE_OOZING_PREVENT)
#error CONFLICT ERROR: EXTRUDER_RUNOUT_PREVENT and IDLE_OOZING_PREVENT are incopatible. Please comment one of them.
#endif
/**
* Idle oozing prevent
*/
#if DISABLED(PREVENT_DANGEROUS_EXTRUDE) && ENABLED(IDLE_OOZING_PREVENT)
#error DEPENDENCY ERROR: IDLE_OOZING_MINTEMP needs PREVENT_DANGEROUS_EXTRUDE
#endif
#if ENABLED(IDLE_OOZING_PREVENT) && IDLE_OOZING_MINTEMP < EXTRUDE_MINTEMP
#error CONFLICT ERROR: IDLE_OOZING_MINTEMP have to be greater than EXTRUDE_MINTEMP
#endif
/**
* Options only for EXTRUDERS == 1
*/
#if EXTRUDERS > 1
#if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
#error CONFLICT ERROR: EXTRUDERS must be 1 with TEMP_SENSOR_1_AS_REDUNDANT.
#endif
#if ENABLED(HEATERS_PARALLEL)
#error CONFLICT ERROR: EXTRUDERS must be 1 with HEATERS_PARALLEL.
#endif
#endif // EXTRUDERS > 1
/**
* Limited number of servos
*/
#if NUM_SERVOS > 4
#error CONFLICT ERROR: The maximum number of SERVOS in Marlin is 4.
#endif
#if ENABLED(ENABLE_SERVOS)
#if NUM_SERVOS < 1
#error CONFLICT ERROR: NUM_SERVOS has to be at least one if you enable ENABLE_SERVOS
#endif
#if X_ENDSTOP_SERVO_NR >= 0 || Y_ENDSTOP_SERVO_NR >= 0 || Z_ENDSTOP_SERVO_NR >= 0
#if X_ENDSTOP_SERVO_NR >= NUM_SERVOS
#error CONFLICT ERROR: X_ENDSTOP_SERVO_NR must be smaller than NUM_SERVOS.
#elif Y_ENDSTOP_SERVO_NR >= NUM_SERVOS
#error CONFLICT ERROR: Y_ENDSTOP_SERVO_NR must be smaller than NUM_SERVOS.
#elif Z_ENDSTOP_SERVO_NR >= NUM_SERVOS
#error CONFLICT ERROR: Z_ENDSTOP_SERVO_NR must be smaller than NUM_SERVOS.
#endif
#endif
#endif
/**
* Servo deactivation depends on servo endstops
*/
#if ENABLED(DEACTIVATE_SERVOS_AFTER_MOVE) && HASNT(SERVO_ENDSTOPS)
#error DEPENDENCY ERROR: At least one of the ?_ENDSTOP_SERVO_NR is required for DEACTIVATE_SERVOS_AFTER_MOVE.
#endif
/**
* Required LCD language
*/
#if DISABLED(DOGLCD) && ENABLED(ULTRA_LCD) && DISABLED(DISPLAY_CHARSET_HD44780_JAPAN) && DISABLED(DISPLAY_CHARSET_HD44780_WESTERN) && DISABLED(DISPLAY_CHARSET_HD44780_CYRILLIC)
#error DEPENDENCY ERROR: You must enable either DISPLAY_CHARSET_HD44780_JAPAN or DISPLAY_CHARSET_HD44780_WESTERN or DISPLAY_CHARSET_HD44780_CYRILLIC for your LCD controller.
#endif
/**
* Required LCD for FILAMENTCHANGEENABLE
*/
#if ENABLED(FILAMENTCHANGEENABLE) && DISABLED(ULTRA_LCD)
#error DEPENDENCY ERROR: You must have LCD in order to use FILAMENTCHANGEENABLE
#endif
/**
* Auto Bed Leveling
*/
#if ENABLED(AUTO_BED_LEVELING_FEATURE)
/**
* Require a Z Min pin
*/
#if Z_MIN_PIN == -1
#if Z_PROBE_PIN == -1 || DISABLED(Z_PROBE_ENDSTOP) // It's possible for someone to set a pin for the Z Probe, but not enable it.
#if ENABLED(Z_PROBE_REPEATABILITY_TEST)
#error DEPENDENCY ERROR: You must have a Z_MIN or Z_PROBE endstop to enable Z_PROBE_REPEATABILITY_TEST.
#else
#error DEPENDENCY ERROR: AUTO_BED_LEVELING_FEATURE requires a Z_MIN or Z_PROBE endstop. Z_MIN_PIN or Z_PROBE_PIN must point to a valid hardware pin.
#endif
#endif
#endif
/**
* Require a Z Probe Pin if Z_PROBE_ENDSTOP is enabled.
*/
#if ENABLED(Z_PROBE_ENDSTOP)
#if !PIN_EXISTS(Z_PROBE_PIN)
#error DEPENDENCY ERROR: You must set Z_PROBE_PIN to a valid pin if you enable Z_PROBE_ENDSTOP
#endif
#if DISABLED(ENABLE_SERVOS)
#error DEPENDENCY ERROR: You must enable ENABLE_SERVOS and must have NUM_SERVOS EXIST and there must be at least 1 configured to use Z_PROBE_ENDSTOP.
#endif
#if NUM_SERVOS < 1
#error DEPENDENCY ERROR: You must have at least 1 servo EXIST for NUM_SERVOS to use Z_PROBE_ENDSTOP.
#endif
#if Z_ENDSTOP_SERVO_NR < 0
#error DEPENDENCY ERROR: You must have Z_ENDSTOP_SERVO_NR set to at least 0 or above to use Z_PROBE_ENDSTOP.
#endif
#if NOTEXIST(SERVO_ENDSTOP_ANGLES)
#error DEPENDENCY ERROR: You must have SERVO_ENDSTOP_ANGLES EXIST for Z Extend and Retract to use Z_PROBE_ENDSTOP.
#endif
#endif
/**
* Check if Probe_Offset * Grid Points is greater than Probing Range
*/
#if ENABLED(AUTO_BED_LEVELING_GRID)
// Be sure points are in the right order
#if LEFT_PROBE_BED_POSITION > RIGHT_PROBE_BED_POSITION
#error CONFLICT ERROR: LEFT_PROBE_BED_POSITION must be less than RIGHT_PROBE_BED_POSITION.
#elif FRONT_PROBE_BED_POSITION > BACK_PROBE_BED_POSITION
#error CONFLICT ERROR: BACK_PROBE_BED_POSITION must be less than FRONT_PROBE_BED_POSITION.
#endif
// Make sure probing points are reachable
#if LEFT_PROBE_BED_POSITION < MIN_PROBE_X
#error CONFLICT ERROR: "The given LEFT_PROBE_BED_POSITION can't be reached by the probe."
#elif RIGHT_PROBE_BED_POSITION > MAX_PROBE_X
#error CONFLICT ERROR: "The given RIGHT_PROBE_BED_POSITION can't be reached by the probe."
#elif FRONT_PROBE_BED_POSITION < MIN_PROBE_Y
#error CONFLICT ERROR: "The given FRONT_PROBE_BED_POSITION can't be reached by the probe."
#elif BACK_PROBE_BED_POSITION > MAX_PROBE_Y
#error CONFLICT ERROR: "The given BACK_PROBE_BED_POSITION can't be reached by the probe."
#endif
#else // !AUTO_BED_LEVELING_GRID
// Check the triangulation points
#if ABL_PROBE_PT_1_X < MIN_PROBE_X || ABL_PROBE_PT_1_X > MAX_PROBE_X
#error CONFLICT ERROR: "The given ABL_PROBE_PT_1_X can't be reached by the probe."
#elif ABL_PROBE_PT_2_X < MIN_PROBE_X || ABL_PROBE_PT_2_X > MAX_PROBE_X
#error CONFLICT ERROR: "The given ABL_PROBE_PT_2_X can't be reached by the probe."
#elif ABL_PROBE_PT_3_X < MIN_PROBE_X || ABL_PROBE_PT_3_X > MAX_PROBE_X
#error CONFLICT ERROR: "The given ABL_PROBE_PT_3_X can't be reached by the probe."
#elif ABL_PROBE_PT_1_Y < MIN_PROBE_Y || ABL_PROBE_PT_1_Y > MAX_PROBE_Y
#error CONFLICT ERROR: "The given ABL_PROBE_PT_1_Y can't be reached by the probe."
#elif ABL_PROBE_PT_2_Y < MIN_PROBE_Y || ABL_PROBE_PT_2_Y > MAX_PROBE_Y
#error CONFLICT ERROR: "The given ABL_PROBE_PT_2_Y can't be reached by the probe."
#elif ABL_PROBE_PT_3_Y < MIN_PROBE_Y || ABL_PROBE_PT_3_Y > MAX_PROBE_Y
#error CONFLICT ERROR: "The given ABL_PROBE_PT_3_Y can't be reached by the probe."
#endif
#endif // !AUTO_BED_LEVELING_GRID
#endif // AUTO_BED_LEVELING_FEATURE
/**
* ULTIPANEL encoder
*/
#if ENABLED(ULTIPANEL) && DISABLED(NEWPANEL) && DISABLED(SR_LCD_2W_NL) && DISABLED(SHIFT_CLK)
#error DEPENDENCY ERROR: ULTIPANEL requires some kind of encoder.
#endif
/**
* Delta & Z_PROBE_ENDSTOP
*/
#if MECH(DELTA) && ENABLED(Z_PROBE_ENDSTOP)
#if PIN_EXISTS(Z_PROBE_PIN)
#error DEPENDENCY ERROR: You must set Z_PROBE_PIN to a valid pin if you enable Z_PROBE_ENDSTOP
#endif
#endif
/**
* Dual X Carriage requirements
*/
#if ENABLED(DUAL_X_CARRIAGE)
#if EXTRUDERS == 1 || MECH(COREXY) \
|| HASNT(X2_ENABLE) || HASNT(X2_STEP) || HASNT(X2_DIR) \
|| NOTEXIST(X2_HOME_POS) || NOTEXIST(X2_MIN_POS) || NOTEXIST(X2_MAX_POS) \
|| HASNT(X_MAX)
#error DEPENDENCY ERROR: Missing or invalid definitions for DUAL_X_CARRIAGE mode.
#endif
#if X_HOME_DIR != -1 || X2_HOME_DIR != 1
#error CONFLICT ERROR: Please use canonical x-carriage assignment.
#endif
#endif // DUAL_X_CARRIAGE
/**
* Make sure auto fan pins don't conflict with the fan pin
*/
#if HAS(AUTO_FAN) && HAS(FAN)
#if EXTRUDER_0_AUTO_FAN_PIN == FAN_PIN
#error CONFLICT ERROR: You cannot set EXTRUDER_0_AUTO_FAN_PIN equal to FAN_PIN.
#elif EXTRUDER_1_AUTO_FAN_PIN == FAN_PIN
#error CONFLICT ERROR: You cannot set EXTRUDER_1_AUTO_FAN_PIN equal to FAN_PIN.
#elif EXTRUDER_2_AUTO_FAN_PIN == FAN_PIN
#error CONFLICT ERROR: You cannot set EXTRUDER_2_AUTO_FAN_PIN equal to FAN_PIN.
#elif EXTRUDER_3_AUTO_FAN_PIN == FAN_PIN
#error CONFLICT ERROR: You cannot set EXTRUDER_3_AUTO_FAN_PIN equal to FAN_PIN.
#endif
#endif
#if HAS(FAN) && CONTROLLERFAN_PIN == FAN_PIN
#error CONFLICT ERROR: You cannot set CONTROLLERFAN_PIN equal to FAN_PIN.
#endif
/**
* Test required HEATER defines
*/
#if HOTENDS > 3
#if HASNT(HEATER_3)
#error DEPENDENCY ERROR: HEATER_3_PIN not EXIST for this board
#endif
#elif HOTENDS > 2
#if HASNT(HEATER_2)
#error DEPENDENCY ERROR: HEATER_2_PIN not EXIST for this board
#endif
#elif HOTENDS > 1 || ENABLED(HEATERS_PARALLEL)
#if HASNT(HEATER_1)
#error DEPENDENCY ERROR: HEATER_1_PIN not EXIST for this board
#endif
#elif HOTENDS > 0
#if HASNT(HEATER_0)
#error DEPENDENCY ERROR: HEATER_0_PIN not EXIST for this board
#endif
#endif
#if DISABLED(SDSUPPORT) && ENABLED(SD_SETTINGS)
#error DEPENDENCY ERROR: You have to enable SDSUPPORT to use SD_SETTINGS
#endif
#if MECH(COREXZ) && ENABLED(Z_LATE_ENABLE)
#error CONFLICT ERROR: "Z_LATE_ENABLE can't be used with COREXZ."
#endif
#if ENABLED(POWER_CONSUMPTION) && !PIN_EXISTS(POWER_CONSUMPTION)
#error DEPENDENCY ERROR: You have to set POWER_CONSUMPTION_PIN to a valid pin if you enable POWER_CONSUMPTION
#endif
#if ENABLED(CHDK) || ENABLED(PHOTOGRAPH)
#error CONFLICT ERROR: CHDK and PHOTOGRAPH are incompatible.
#endif
#if ENABLED(MKR4)
#if (EXTRUDERS == 2) && (DRIVER_EXTRUDERS == 1) && !PIN_EXIST(E0E1_CHOICE_PIN)
#error DEPENDENCY ERROR: You have to set E0E1_CHOICE_PIN to a valid pin if you enable MKR4 with 2 extruder and 1 driver
#elif (EXTRUDERS == 3) && (DRIVER_EXTRUDERS == 1) && (!PIN_EXIST(E0E1_CHOICE_PIN) || !PIN_EXIST(E0E2_CHOICE_PIN))
#error DEPENDENCY ERROR: You have to set E0E1_CHOICE_PIN and E0E2_CHOICE_PIN to a valid pin if you enable MKR4 with 3 extruder and 1 driver
#elif (EXTRUDERS == 4) && (DRIVER_EXTRUDERS == 1) && (!PIN_EXIST(E0E1_CHOICE_PIN) || !PIN_EXIST(E0E2_CHOICE_PIN) || !PIN_EXIST(E0E3_CHOICE_PIN))
#error DEPENDENCY ERROR: You have to set E0E1_CHOICE_PIN, E0E2_CHOICE_PIN and E0E3_CHOICE_PIN to a valid pin if you enable MKR4 with 4 extruder and 1 driver
#elif (EXTRUDERS == 3) && (DRIVER_EXTRUDERS == 2) && !PIN_EXIST(E0E2_CHOICE_PIN)
#error DEPENDENCY ERROR: You have to set E0E2_CHOICE_PIN to a valid pin if you enable MKR4 with 3 extruder and 2 driver
#elif (EXTRUDERS == 4) && (DRIVER_EXTRUDERS == 2) && (!PIN_EXIST(E0E1_CHOICE_PIN) || !PIN_EXIST(E1E3_CHOICE_PIN))
#error DEPENDENCY ERROR: You have to set E0E2_CHOICE_PIN and E1E3_CHOICE_PIN to a valid pin if you enable MKR4 with 4 extruder and 2 driver
#endif
#endif
#if ENABLED(NPR2) && !PIN_EXIST(E_MIN_PIN)
#error DEPENDENCY ERROR: You have to set E_MIN_PIN to a valid pin if you enable NPR2
#endif
#if ENABLED(LASERBEAM) && (!PIN_EXIST(LASER_PWR_PIN) || !PIN_EXIST(LASER_TTL_PIN))
#error DEPENDENCY ERROR: You have to set LASER_PWR_PIN and LASER_TTL_PIN to a valid pin if you enable LASERBEAM
#endif
#if ENABLED(FILAMENT_RUNOUT_SENSOR) && !PIN_EXIST(FILRUNOUT_PIN)
#error DEPENDENCY ERROR: You have to set FILRUNOUT_PIN to a valid pin if you enable FILAMENT_RUNOUT_SENSOR
#endif
#if ENABLED(FILAMENT_SENSOR) && !PIN_EXIST(FILWIDTH_PIN)
#error DEPENDENCY ERROR: You have to set FILWIDTH_PIN to a valid pin if you enable FILAMENT_SENSOR
#endif
#if ENABLED(POWER_CONSUMPTION) && !PIN_EXIST(POWER_CONSUMPTION_PIN)
#error DEPENDENCY ERROR: You have to set POWER_CONSUMPTION_PIN to a valid pin if you enable POWER_CONSUMPTION
#endif
#if ENABLED(PHOTOGRAPH) && !PIN_EXIST(PHOTOGRAPH_PIN)
#error DEPENDENCY ERROR: You have to set PHOTOGRAPH_PIN to a valid pin if you enable PHOTOGRAPH
#endif
#if ENABLED(CHDK) && !PIN_EXIST(CHDK_PIN)
#error DEPENDENCY ERROR: You have to set CHDK_PIN to a valid pin if you enable CHDK
#endif
#if ENABLED(CONTROLLERFAN) && !PIN_EXIST(CONTROLLERFAN_PIN)
#error DEPENDENCY ERROR: You have to set CONTROLLERFAN_PIN to a valid pin if you enable CONTROLLERFAN
#endif
#if ENABLED(EXTRUDER_AUTO_FAN) && !PIN_EXIST(EXTRUDER_0_AUTO_FAN_PIN) && !PIN_EXIST(EXTRUDER_1_AUTO_FAN_PIN) && !PIN_EXIST(EXTRUDER_2_AUTO_FAN_PIN) && !PIN_EXIST(EXTRUDER_3_AUTO_FAN_PIN)
#error DEPENDENCY ERROR: You have to set at least one EXTRUDER_?_AUTO_FAN_PIN to a valid pin if you enable EXTRUDER_AUTO_FAN
#endif
#if ENABLED(X2_IS_TMC) && (!PIN_EXIST(X2_ENABLE_PIN) || !PIN_EXIST(X2_STEP_PIN) || !PIN_EXIST(X2_DIR_PIN))
#error DEPENDENCY ERROR: You have to set X2_ENABLE_PIN, X2_STEP_PIN and X2_DIR_PIN to a valid pin if you enable X2_IS_TMC
#endif
#if ((ENABLED(ENABLE_SERVOS) && NUM_SERVOS > 0) && !(HAS_SERVO_0 || HAS_SERVO_1 || HAS_SERVO_2 || HAS_SERVO_3))
#error DEPENDENCY ERROR: You have to set at least one SERVO?_PIN to a valid pin if you enable ENABLE_SERVOS
#endif
#if ENABLED(Z_PROBE_SLED) !PIN_EXIST(SLED_PIN)
#error DEPENDENCY ERROR: You have to set SLED_PIN to a valid pin if you enable Z_PROBE_SLED
#endif
#endif //SANITYCHECK_H
......@@ -683,7 +683,7 @@ ISR(TIMER1_COMPA_vect) {
STEP_START(e,E);
#endif
#if EXIST(STEPPER_HIGH_LOW_DELAY) && STEPPER_HIGH_LOW_DELAY > 0
#if ENABLED(STEPPER_HIGH_LOW) && STEPPER_HIGH_LOW_DELAY > 0
delayMicroseconds(STEPPER_HIGH_LOW_DELAY);
#endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment