Scott Lahteine пре 4 година
родитељ
комит
15f6f53638
38 измењених фајлова са 569 додато и 271 уклоњено
  1. 1
    1
      Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
  2. 3
    3
      Marlin/src/feature/powerloss.cpp
  3. 1
    1
      Marlin/src/feature/powerloss.h
  4. 2
    2
      Marlin/src/gcode/bedlevel/abl/G29.cpp
  5. 3
    3
      Marlin/src/gcode/calibrate/G28.cpp
  6. 1
    1
      Marlin/src/gcode/calibrate/G33.cpp
  7. 3
    3
      Marlin/src/gcode/calibrate/G34_M422.cpp
  8. 4
    4
      Marlin/src/gcode/calibrate/G425.cpp
  9. 8
    4
      Marlin/src/inc/Conditionals_LCD.h
  10. 457
    163
      Marlin/src/inc/Conditionals_post.h
  11. 2
    2
      Marlin/src/inc/SanityCheck.h
  12. 8
    8
      Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp
  13. 3
    3
      Marlin/src/lcd/dogm/dogm_Statusscreen.h
  14. 5
    5
      Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp
  15. 2
    2
      Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/advanced_settings_menu.cpp
  16. 2
    2
      Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/bio_advanced_settings.cpp
  17. 2
    2
      Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/change_filament_screen.cpp
  18. 1
    1
      Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/nozzle_offsets_screen.cpp
  19. 1
    1
      Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/nudge_nozzle_screen.cpp
  20. 1
    1
      Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/screens.cpp
  21. 1
    1
      Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/screens.h
  22. 1
    1
      Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/temperature_screen.cpp
  23. 4
    4
      Marlin/src/lcd/extui/ui_api.cpp
  24. 1
    1
      Marlin/src/lcd/menu/menu.h
  25. 3
    3
      Marlin/src/lcd/menu/menu_advanced.cpp
  26. 6
    6
      Marlin/src/lcd/menu/menu_temperature.cpp
  27. 1
    1
      Marlin/src/lcd/menu/menu_tune.cpp
  28. 1
    1
      Marlin/src/module/configuration_store.cpp
  29. 27
    27
      Marlin/src/module/temperature.cpp
  30. 3
    3
      Marlin/src/module/temperature.h
  31. 1
    1
      Marlin/src/pins/linux/pins_RAMPS_LINUX.h
  32. 1
    1
      Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h
  33. 1
    1
      Marlin/src/pins/mega/pins_MIGHTYBOARD_REVE.h
  34. 1
    1
      Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR.h
  35. 1
    1
      Marlin/src/pins/ramps/pins_FORMBOT_TREX2PLUS.h
  36. 1
    1
      Marlin/src/pins/ramps/pins_RAMPS.h
  37. 2
    2
      Marlin/src/pins/ramps/pins_TRIGORILLA_14.h
  38. 3
    3
      Marlin/src/pins/sensitive_pins.h

+ 1
- 1
Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp Прегледај датотеку

38
   #include "../../../gcode/gcode.h"
38
   #include "../../../gcode/gcode.h"
39
   #include "../../../libs/least_squares_fit.h"
39
   #include "../../../libs/least_squares_fit.h"
40
 
40
 
41
-  #if HOTENDS > 1
41
+  #if HAS_MULTI_HOTEND
42
     #include "../../../module/tool_change.h"
42
     #include "../../../module/tool_change.h"
43
   #endif
43
   #endif
44
 
44
 

+ 3
- 3
Marlin/src/feature/powerloss.cpp Прегледај датотеку

366
   #endif
366
   #endif
367
 
367
 
368
   // Restore all hotend temperatures
368
   // Restore all hotend temperatures
369
-  #if HOTENDS
369
+  #if HAS_HOTEND
370
     HOTEND_LOOP() {
370
     HOTEND_LOOP() {
371
       const int16_t et = info.target_temperature[e];
371
       const int16_t et = info.target_temperature[e];
372
       if (et) {
372
       if (et) {
373
-        #if HOTENDS > 1
373
+        #if HAS_MULTI_HOTEND
374
           sprintf_P(cmd, PSTR("T%i"), e);
374
           sprintf_P(cmd, PSTR("T%i"), e);
375
           gcode.process_subcommands_now(cmd);
375
           gcode.process_subcommands_now(cmd);
376
         #endif
376
         #endif
517
           DEBUG_ECHOLNPAIR("active_extruder: ", int(info.active_extruder));
517
           DEBUG_ECHOLNPAIR("active_extruder: ", int(info.active_extruder));
518
         #endif
518
         #endif
519
 
519
 
520
-        #if HOTENDS
520
+        #if HAS_HOTEND
521
           DEBUG_ECHOPGM("target_temperature: ");
521
           DEBUG_ECHOPGM("target_temperature: ");
522
           HOTEND_LOOP() {
522
           HOTEND_LOOP() {
523
             DEBUG_ECHO(info.target_temperature[e]);
523
             DEBUG_ECHO(info.target_temperature[e]);

+ 1
- 1
Marlin/src/feature/powerloss.h Прегледај датотеку

68
     #endif
68
     #endif
69
   #endif
69
   #endif
70
 
70
 
71
-  #if HOTENDS
71
+  #if HAS_HOTEND
72
     int16_t target_temperature[HOTENDS];
72
     int16_t target_temperature[HOTENDS];
73
   #endif
73
   #endif
74
 
74
 

+ 2
- 2
Marlin/src/gcode/bedlevel/abl/G29.cpp Прегледај датотеку

60
   #include "../../../lcd/extui/ui_api.h"
60
   #include "../../../lcd/extui/ui_api.h"
61
 #endif
61
 #endif
62
 
62
 
63
-#if HOTENDS > 1
63
+#if HAS_MULTI_HOTEND
64
   #include "../../../module/tool_change.h"
64
   #include "../../../module/tool_change.h"
65
 #endif
65
 #endif
66
 
66
 
283
    */
283
    */
284
   if (!g29_in_progress) {
284
   if (!g29_in_progress) {
285
 
285
 
286
-    #if HOTENDS > 1
286
+    #if HAS_MULTI_HOTEND
287
       if (active_extruder != 0) tool_change(0);
287
       if (active_extruder != 0) tool_change(0);
288
     #endif
288
     #endif
289
 
289
 

+ 3
- 3
Marlin/src/gcode/calibrate/G28.cpp Прегледај датотеку

27
 #include "../../module/stepper.h"
27
 #include "../../module/stepper.h"
28
 #include "../../module/endstops.h"
28
 #include "../../module/endstops.h"
29
 
29
 
30
-#if HOTENDS > 1
30
+#if HAS_MULTI_HOTEND
31
   #include "../../module/tool_change.h"
31
   #include "../../module/tool_change.h"
32
 #endif
32
 #endif
33
 
33
 
285
   #endif
285
   #endif
286
 
286
 
287
   // Always home with tool 0 active
287
   // Always home with tool 0 active
288
-  #if HOTENDS > 1
288
+  #if HAS_MULTI_HOTEND
289
     #if DISABLED(DELTA) || ENABLED(DELTA_HOME_TO_SAFE_ZONE)
289
     #if DISABLED(DELTA) || ENABLED(DELTA_HOME_TO_SAFE_ZONE)
290
       const uint8_t old_tool_index = active_extruder;
290
       const uint8_t old_tool_index = active_extruder;
291
     #endif
291
     #endif
474
   restore_feedrate_and_scaling();
474
   restore_feedrate_and_scaling();
475
 
475
 
476
   // Restore the active tool after homing
476
   // Restore the active tool after homing
477
-  #if HOTENDS > 1 && (DISABLED(DELTA) || ENABLED(DELTA_HOME_TO_SAFE_ZONE))
477
+  #if HAS_MULTI_HOTEND && (DISABLED(DELTA) || ENABLED(DELTA_HOME_TO_SAFE_ZONE))
478
     tool_change(old_tool_index, NONE(PARKING_EXTRUDER, DUAL_X_CARRIAGE));   // Do move if one of these
478
     tool_change(old_tool_index, NONE(PARKING_EXTRUDER, DUAL_X_CARRIAGE));   // Do move if one of these
479
   #endif
479
   #endif
480
 
480
 

+ 1
- 1
Marlin/src/gcode/calibrate/G33.cpp Прегледај датотеку

35
   #include "../../module/probe.h"
35
   #include "../../module/probe.h"
36
 #endif
36
 #endif
37
 
37
 
38
-#if HOTENDS > 1
38
+#if HAS_MULTI_HOTEND
39
   #include "../../module/tool_change.h"
39
   #include "../../module/tool_change.h"
40
 #endif
40
 #endif
41
 
41
 

+ 3
- 3
Marlin/src/gcode/calibrate/G34_M422.cpp Прегледај датотеку

32
 #include "../../module/motion.h"
32
 #include "../../module/motion.h"
33
 #include "../../module/probe.h"
33
 #include "../../module/probe.h"
34
 
34
 
35
-#if HOTENDS > 1
35
+#if HAS_MULTI_HOTEND
36
   #include "../../module/tool_change.h"
36
   #include "../../module/tool_change.h"
37
 #endif
37
 #endif
38
 
38
 
124
     #endif
124
     #endif
125
 
125
 
126
     // Always home with tool 0 active
126
     // Always home with tool 0 active
127
-    #if HOTENDS > 1
127
+    #if HAS_MULTI_HOTEND
128
       const uint8_t old_tool_index = active_extruder;
128
       const uint8_t old_tool_index = active_extruder;
129
       tool_change(0, true);
129
       tool_change(0, true);
130
     #endif
130
     #endif
386
     #endif
386
     #endif
387
 
387
 
388
     // Restore the active tool after homing
388
     // Restore the active tool after homing
389
-    #if HOTENDS > 1
389
+    #if HAS_MULTI_HOTEND
390
       tool_change(old_tool_index, DISABLED(PARKING_EXTRUDER)); // Fetch previous tool for parking extruder
390
       tool_change(old_tool_index, DISABLED(PARKING_EXTRUDER)); // Fetch previous tool for parking extruder
391
     #endif
391
     #endif
392
 
392
 

+ 4
- 4
Marlin/src/gcode/calibrate/G425.cpp Прегледај датотеку

126
   calibration_move();
126
   calibration_move();
127
 }
127
 }
128
 
128
 
129
-#if HOTENDS > 1
129
+#if HAS_MULTI_HOTEND
130
   inline void set_nozzle(measurements_t &m, const uint8_t extruder) {
130
   inline void set_nozzle(measurements_t &m, const uint8_t extruder) {
131
     if (extruder != active_extruder) {
131
     if (extruder != active_extruder) {
132
       park_above_object(m, CALIBRATION_MEASUREMENT_UNKNOWN);
132
       park_above_object(m, CALIBRATION_MEASUREMENT_UNKNOWN);
505
   TEMPORARY_BACKLASH_CORRECTION(all_on);
505
   TEMPORARY_BACKLASH_CORRECTION(all_on);
506
   TEMPORARY_BACKLASH_SMOOTHING(0.0f);
506
   TEMPORARY_BACKLASH_SMOOTHING(0.0f);
507
 
507
 
508
-  #if HOTENDS > 1
508
+  #if HAS_MULTI_HOTEND
509
     set_nozzle(m, extruder);
509
     set_nozzle(m, extruder);
510
   #else
510
   #else
511
     UNUSED(extruder);
511
     UNUSED(extruder);
548
     normalize_hotend_offsets();
548
     normalize_hotend_offsets();
549
   #endif
549
   #endif
550
 
550
 
551
-  #if HOTENDS > 1
551
+  #if HAS_MULTI_HOTEND
552
     set_nozzle(m, 0);
552
     set_nozzle(m, 0);
553
   #endif
553
   #endif
554
 }
554
 }
582
   #endif
582
   #endif
583
 
583
 
584
   // Cycle the toolheads so the servos settle into their "natural" positions
584
   // Cycle the toolheads so the servos settle into their "natural" positions
585
-  #if HOTENDS > 1
585
+  #if HAS_MULTI_HOTEND
586
     HOTEND_LOOP() set_nozzle(m, e);
586
     HOTEND_LOOP() set_nozzle(m, e);
587
   #endif
587
   #endif
588
 
588
 

+ 8
- 4
Marlin/src/inc/Conditionals_LCD.h Прегледај датотеку

466
   #define E_MANUAL EXTRUDERS
466
   #define E_MANUAL EXTRUDERS
467
 #endif
467
 #endif
468
 
468
 
469
+#if HOTENDS
470
+  #define HAS_HOTEND 1
471
+  #if HOTENDS > 1
472
+    #define HAS_MULTI_HOTEND 1
473
+    #define HAS_HOTEND_OFFSET 1
474
+  #endif
475
+#endif
476
+
469
 // Helper macros for extruder and hotend arrays
477
 // Helper macros for extruder and hotend arrays
470
 #define HOTEND_LOOP() for (int8_t e = 0; e < HOTENDS; e++)
478
 #define HOTEND_LOOP() for (int8_t e = 0; e < HOTENDS; e++)
471
 #define ARRAY_BY_EXTRUDERS(V...) ARRAY_N(EXTRUDERS, V)
479
 #define ARRAY_BY_EXTRUDERS(V...) ARRAY_N(EXTRUDERS, V)
481
   #define SWITCHING_NOZZLE_TWO_SERVOS 1
489
   #define SWITCHING_NOZZLE_TWO_SERVOS 1
482
 #endif
490
 #endif
483
 
491
 
484
-#if HOTENDS > 1
485
-  #define HAS_HOTEND_OFFSET 1
486
-#endif
487
-
488
 /**
492
 /**
489
  * Default hotend offsets, if not defined
493
  * Default hotend offsets, if not defined
490
  */
494
  */

+ 457
- 163
Marlin/src/inc/Conditionals_post.h Прегледај датотеку

386
 #endif
386
 #endif
387
 
387
 
388
 #if !defined(PSU_POWERUP_DELAY) && ENABLED(PSU_CONTROL)
388
 #if !defined(PSU_POWERUP_DELAY) && ENABLED(PSU_CONTROL)
389
-  #define PSU_POWERUP_DELAY 100
389
+  #define PSU_POWERUP_DELAY 250
390
 #endif
390
 #endif
391
 
391
 
392
 /**
392
 /**
1255
  */
1255
  */
1256
 
1256
 
1257
 // Steppers
1257
 // Steppers
1258
-#define HAS_X_ENABLE      (PIN_EXISTS(X_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(X)))
1259
-#define HAS_X_DIR         (PIN_EXISTS(X_DIR))
1260
-#define HAS_X_STEP        (PIN_EXISTS(X_STEP))
1261
-#define HAS_X_MICROSTEPS  (PIN_EXISTS(X_MS1))
1262
-
1263
-#define HAS_X2_ENABLE     (PIN_EXISTS(X2_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(X2)))
1264
-#define HAS_X2_DIR        (PIN_EXISTS(X2_DIR))
1265
-#define HAS_X2_STEP       (PIN_EXISTS(X2_STEP))
1266
-#define HAS_X2_MICROSTEPS (PIN_EXISTS(X2_MS1))
1267
-
1268
-#define HAS_Y_ENABLE      (PIN_EXISTS(Y_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Y)))
1269
-#define HAS_Y_DIR         (PIN_EXISTS(Y_DIR))
1270
-#define HAS_Y_STEP        (PIN_EXISTS(Y_STEP))
1271
-#define HAS_Y_MICROSTEPS  (PIN_EXISTS(Y_MS1))
1272
-
1273
-#define HAS_Y2_ENABLE     (PIN_EXISTS(Y2_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Y2)))
1274
-#define HAS_Y2_DIR        (PIN_EXISTS(Y2_DIR))
1275
-#define HAS_Y2_STEP       (PIN_EXISTS(Y2_STEP))
1276
-#define HAS_Y2_MICROSTEPS (PIN_EXISTS(Y2_MS1))
1277
-
1278
-#define HAS_Z_ENABLE      (PIN_EXISTS(Z_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z)))
1279
-#define HAS_Z_DIR         (PIN_EXISTS(Z_DIR))
1280
-#define HAS_Z_STEP        (PIN_EXISTS(Z_STEP))
1281
-#define HAS_Z_MICROSTEPS  (PIN_EXISTS(Z_MS1))
1282
-
1283
-#define HAS_Z2_ENABLE     (PIN_EXISTS(Z2_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z2)))
1284
-#define HAS_Z2_DIR        (PIN_EXISTS(Z2_DIR))
1285
-#define HAS_Z2_STEP       (PIN_EXISTS(Z2_STEP))
1286
-#define HAS_Z2_MICROSTEPS (PIN_EXISTS(Z2_MS1))
1287
-
1288
-#define HAS_Z3_ENABLE     (PIN_EXISTS(Z3_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z3)))
1289
-#define HAS_Z3_DIR        (PIN_EXISTS(Z3_DIR))
1290
-#define HAS_Z3_STEP       (PIN_EXISTS(Z3_STEP))
1291
-#define HAS_Z3_MICROSTEPS (PIN_EXISTS(Z3_MS1))
1292
-
1293
-#define HAS_Z4_ENABLE     (PIN_EXISTS(Z4_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z4)))
1294
-#define HAS_Z4_DIR        (PIN_EXISTS(Z4_DIR))
1295
-#define HAS_Z4_STEP       (PIN_EXISTS(Z4_STEP))
1296
-#define HAS_Z4_MICROSTEPS (PIN_EXISTS(Z4_MS1))
1258
+#if PIN_EXISTS(X_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(X))
1259
+  #define HAS_X_ENABLE 1
1260
+#endif
1261
+#if PIN_EXISTS(X_DIR)
1262
+  #define HAS_X_DIR 1
1263
+#endif
1264
+#if PIN_EXISTS(X_STEP)
1265
+  #define HAS_X_STEP 1
1266
+#endif
1267
+#if PIN_EXISTS(X_MS1)
1268
+  #define HAS_X_MICROSTEPS 1
1269
+#endif
1270
+
1271
+#if PIN_EXISTS(X2_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(X2))
1272
+  #define HAS_X2_ENABLE 1
1273
+#endif
1274
+#if PIN_EXISTS(X2_DIR)
1275
+  #define HAS_X2_DIR 1
1276
+#endif
1277
+#if PIN_EXISTS(X2_STEP)
1278
+  #define HAS_X2_STEP 1
1279
+#endif
1280
+#if PIN_EXISTS(X2_MS1)
1281
+  #define HAS_X2_MICROSTEPS 1
1282
+#endif
1283
+
1284
+#if PIN_EXISTS(Y_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Y))
1285
+  #define HAS_Y_ENABLE 1
1286
+#endif
1287
+#if PIN_EXISTS(Y_DIR)
1288
+  #define HAS_Y_DIR 1
1289
+#endif
1290
+#if PIN_EXISTS(Y_STEP)
1291
+  #define HAS_Y_STEP 1
1292
+#endif
1293
+#if PIN_EXISTS(Y_MS1)
1294
+  #define HAS_Y_MICROSTEPS 1
1295
+#endif
1296
+
1297
+#if PIN_EXISTS(Y2_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Y2))
1298
+  #define HAS_Y2_ENABLE 1
1299
+#endif
1300
+#if PIN_EXISTS(Y2_DIR)
1301
+  #define HAS_Y2_DIR 1
1302
+#endif
1303
+#if PIN_EXISTS(Y2_STEP)
1304
+  #define HAS_Y2_STEP 1
1305
+#endif
1306
+#if PIN_EXISTS(Y2_MS1)
1307
+  #define HAS_Y2_MICROSTEPS 1
1308
+#endif
1309
+
1310
+#if PIN_EXISTS(Z_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z))
1311
+  #define HAS_Z_ENABLE 1
1312
+#endif
1313
+#if PIN_EXISTS(Z_DIR)
1314
+  #define HAS_Z_DIR 1
1315
+#endif
1316
+#if PIN_EXISTS(Z_STEP)
1317
+  #define HAS_Z_STEP 1
1318
+#endif
1319
+#if PIN_EXISTS(Z_MS1)
1320
+  #define HAS_Z_MICROSTEPS 1
1321
+#endif
1322
+
1323
+#if PIN_EXISTS(Z2_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z2))
1324
+  #define HAS_Z2_ENABLE 1
1325
+#endif
1326
+#if PIN_EXISTS(Z2_DIR)
1327
+  #define HAS_Z2_DIR 1
1328
+#endif
1329
+#if PIN_EXISTS(Z2_STEP)
1330
+  #define HAS_Z2_STEP 1
1331
+#endif
1332
+#if PIN_EXISTS(Z2_MS1)
1333
+  #define HAS_Z2_MICROSTEPS 1
1334
+#endif
1335
+
1336
+#if PIN_EXISTS(Z3_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z3))
1337
+  #define HAS_Z3_ENABLE 1
1338
+#endif
1339
+#if PIN_EXISTS(Z3_DIR)
1340
+  #define HAS_Z3_DIR 1
1341
+#endif
1342
+#if PIN_EXISTS(Z3_STEP)
1343
+  #define HAS_Z3_STEP 1
1344
+#endif
1345
+#if PIN_EXISTS(Z3_MS1)
1346
+  #define HAS_Z3_MICROSTEPS 1
1347
+#endif
1348
+
1349
+#if PIN_EXISTS(Z4_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z4))
1350
+  #define HAS_Z4_ENABLE 1
1351
+#endif
1352
+#if PIN_EXISTS(Z4_DIR)
1353
+  #define HAS_Z4_DIR 1
1354
+#endif
1355
+#if PIN_EXISTS(Z4_STEP)
1356
+  #define HAS_Z4_STEP 1
1357
+#endif
1358
+#if PIN_EXISTS(Z4_MS1)
1359
+  #define HAS_Z4_MICROSTEPS 1
1360
+#endif
1297
 
1361
 
1298
 // Extruder steppers and solenoids
1362
 // Extruder steppers and solenoids
1299
-#define HAS_E0_ENABLE     (PIN_EXISTS(E0_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E0)))
1300
-#define HAS_E0_DIR        (PIN_EXISTS(E0_DIR))
1301
-#define HAS_E0_STEP       (PIN_EXISTS(E0_STEP))
1302
-#define HAS_E0_MICROSTEPS (PIN_EXISTS(E0_MS1))
1303
-#define HAS_SOLENOID_0    (PIN_EXISTS(SOL0))
1304
-
1305
-#define HAS_E1_ENABLE     (PIN_EXISTS(E1_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E1)))
1306
-#define HAS_E1_DIR        (PIN_EXISTS(E1_DIR))
1307
-#define HAS_E1_STEP       (PIN_EXISTS(E1_STEP))
1308
-#define HAS_E1_MICROSTEPS (PIN_EXISTS(E1_MS1))
1309
-#define HAS_SOLENOID_1    (PIN_EXISTS(SOL1))
1310
-
1311
-#define HAS_E2_ENABLE     (PIN_EXISTS(E2_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E2)))
1312
-#define HAS_E2_DIR        (PIN_EXISTS(E2_DIR))
1313
-#define HAS_E2_STEP       (PIN_EXISTS(E2_STEP))
1314
-#define HAS_E2_MICROSTEPS (PIN_EXISTS(E2_MS1))
1315
-#define HAS_SOLENOID_2    (PIN_EXISTS(SOL2))
1316
-
1317
-#define HAS_E3_ENABLE     (PIN_EXISTS(E3_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E3)))
1318
-#define HAS_E3_DIR        (PIN_EXISTS(E3_DIR))
1319
-#define HAS_E3_STEP       (PIN_EXISTS(E3_STEP))
1320
-#define HAS_E3_MICROSTEPS (PIN_EXISTS(E3_MS1))
1321
-#define HAS_SOLENOID_3    (PIN_EXISTS(SOL3))
1322
-
1323
-#define HAS_E4_ENABLE     (PIN_EXISTS(E4_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E4)))
1324
-#define HAS_E4_DIR        (PIN_EXISTS(E4_DIR))
1325
-#define HAS_E4_STEP       (PIN_EXISTS(E4_STEP))
1326
-#define HAS_E4_MICROSTEPS (PIN_EXISTS(E4_MS1))
1327
-#define HAS_SOLENOID_4    (PIN_EXISTS(SOL4))
1328
-
1329
-#define HAS_E5_ENABLE     (PIN_EXISTS(E5_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E5)))
1330
-#define HAS_E5_DIR        (PIN_EXISTS(E5_DIR))
1331
-#define HAS_E5_STEP       (PIN_EXISTS(E5_STEP))
1332
-#define HAS_E5_MICROSTEPS (PIN_EXISTS(E5_MS1))
1333
-#define HAS_SOLENOID_5    (PIN_EXISTS(SOL5))
1334
-
1335
-#define HAS_E6_ENABLE     (PIN_EXISTS(E6_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E6)))
1336
-#define HAS_E6_DIR        (PIN_EXISTS(E6_DIR))
1337
-#define HAS_E6_STEP       (PIN_EXISTS(E6_STEP))
1338
-#define HAS_E6_MICROSTEPS (PIN_EXISTS(E6_MS1))
1339
-#define HAS_SOLENOID_6    (PIN_EXISTS(SOL6))
1340
-
1341
-#define HAS_E7_ENABLE     (PIN_EXISTS(E7_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E7)))
1342
-#define HAS_E7_DIR        (PIN_EXISTS(E7_DIR))
1343
-#define HAS_E7_STEP       (PIN_EXISTS(E7_STEP))
1344
-#define HAS_E7_MICROSTEPS (PIN_EXISTS(E7_MS1))
1345
-#define HAS_SOLENOID_7    (PIN_EXISTS(SOL7))
1363
+#if PIN_EXISTS(E0_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E0))
1364
+  #define HAS_E0_ENABLE 1
1365
+#endif
1366
+#if PIN_EXISTS(E0_DIR)
1367
+  #define HAS_E0_DIR 1
1368
+#endif
1369
+#if PIN_EXISTS(E0_STEP)
1370
+  #define HAS_E0_STEP 1
1371
+#endif
1372
+#if PIN_EXISTS(E0_MS1)
1373
+  #define HAS_E0_MICROSTEPS 1
1374
+#endif
1375
+#if PIN_EXISTS(SOL0)
1376
+  #define HAS_SOLENOID_0 1
1377
+#endif
1378
+
1379
+#if PIN_EXISTS(E1_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E1))
1380
+  #define HAS_E1_ENABLE 1
1381
+#endif
1382
+#if PIN_EXISTS(E1_DIR)
1383
+  #define HAS_E1_DIR 1
1384
+#endif
1385
+#if PIN_EXISTS(E1_STEP)
1386
+  #define HAS_E1_STEP 1
1387
+#endif
1388
+#if PIN_EXISTS(E1_MS1)
1389
+  #define HAS_E1_MICROSTEPS 1
1390
+#endif
1391
+#if PIN_EXISTS(SOL1)
1392
+  #define HAS_SOLENOID_1 1
1393
+#endif
1394
+
1395
+#if PIN_EXISTS(E2_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E2))
1396
+  #define HAS_E2_ENABLE 1
1397
+#endif
1398
+#if PIN_EXISTS(E2_DIR)
1399
+  #define HAS_E2_DIR 1
1400
+#endif
1401
+#if PIN_EXISTS(E2_STEP)
1402
+  #define HAS_E2_STEP 1
1403
+#endif
1404
+#if PIN_EXISTS(E2_MS1)
1405
+  #define HAS_E2_MICROSTEPS 1
1406
+#endif
1407
+#if PIN_EXISTS(SOL2)
1408
+  #define HAS_SOLENOID_2 1
1409
+#endif
1410
+
1411
+#if PIN_EXISTS(E3_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E3))
1412
+  #define HAS_E3_ENABLE 1
1413
+#endif
1414
+#if PIN_EXISTS(E3_DIR)
1415
+  #define HAS_E3_DIR 1
1416
+#endif
1417
+#if PIN_EXISTS(E3_STEP)
1418
+  #define HAS_E3_STEP 1
1419
+#endif
1420
+#if PIN_EXISTS(E3_MS1)
1421
+  #define HAS_E3_MICROSTEPS 1
1422
+#endif
1423
+#if PIN_EXISTS(SOL3)
1424
+  #define HAS_SOLENOID_3 1
1425
+#endif
1426
+
1427
+#if PIN_EXISTS(E4_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E4))
1428
+  #define HAS_E4_ENABLE 1
1429
+#endif
1430
+#if PIN_EXISTS(E4_DIR)
1431
+  #define HAS_E4_DIR 1
1432
+#endif
1433
+#if PIN_EXISTS(E4_STEP)
1434
+  #define HAS_E4_STEP 1
1435
+#endif
1436
+#if PIN_EXISTS(E4_MS1)
1437
+  #define HAS_E4_MICROSTEPS 1
1438
+#endif
1439
+#if PIN_EXISTS(SOL4)
1440
+  #define HAS_SOLENOID_4 1
1441
+#endif
1442
+
1443
+#if PIN_EXISTS(E5_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E5))
1444
+  #define HAS_E5_ENABLE 1
1445
+#endif
1446
+#if PIN_EXISTS(E5_DIR)
1447
+  #define HAS_E5_DIR 1
1448
+#endif
1449
+#if PIN_EXISTS(E5_STEP)
1450
+  #define HAS_E5_STEP 1
1451
+#endif
1452
+#if PIN_EXISTS(E5_MS1)
1453
+  #define HAS_E5_MICROSTEPS 1
1454
+#endif
1455
+#if PIN_EXISTS(SOL5)
1456
+  #define HAS_SOLENOID_5 1
1457
+#endif
1458
+
1459
+#if PIN_EXISTS(E6_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E6))
1460
+  #define HAS_E6_ENABLE 1
1461
+#endif
1462
+#if PIN_EXISTS(E6_DIR)
1463
+  #define HAS_E6_DIR 1
1464
+#endif
1465
+#if PIN_EXISTS(E6_STEP)
1466
+  #define HAS_E6_STEP 1
1467
+#endif
1468
+#if PIN_EXISTS(E6_MS1)
1469
+  #define HAS_E6_MICROSTEPS 1
1470
+#endif
1471
+#if PIN_EXISTS(SOL6)
1472
+  #define HAS_SOLENOID_6 1
1473
+#endif
1474
+
1475
+#if PIN_EXISTS(E7_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E7))
1476
+  #define HAS_E7_ENABLE 1
1477
+#endif
1478
+#if PIN_EXISTS(E7_DIR)
1479
+  #define HAS_E7_DIR 1
1480
+#endif
1481
+#if PIN_EXISTS(E7_STEP)
1482
+  #define HAS_E7_STEP 1
1483
+#endif
1484
+#if PIN_EXISTS(E7_MS1)
1485
+  #define HAS_E7_MICROSTEPS 1
1486
+#endif
1487
+#if PIN_EXISTS(SOL7)
1488
+  #define HAS_SOLENOID_7 1
1489
+#endif
1346
 
1490
 
1347
 // Trinamic Stepper Drivers
1491
 // Trinamic Stepper Drivers
1348
 #if HAS_TRINAMIC_CONFIG
1492
 #if HAS_TRINAMIC_CONFIG
1405
 #define IS_Z4_ENDSTOP(A,M) (ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 4 && Z4_USE_ENDSTOP == _##A##M##_)
1549
 #define IS_Z4_ENDSTOP(A,M) (ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 4 && Z4_USE_ENDSTOP == _##A##M##_)
1406
 
1550
 
1407
 #define _HAS_STOP(A,M) (PIN_EXISTS(A##_##M) && !IS_PROBE_PIN(A,M) && !IS_X2_ENDSTOP(A,M) && !IS_Y2_ENDSTOP(A,M) && !IS_Z2_ENDSTOP(A,M) && !IS_Z3_ENDSTOP(A,M) && !IS_Z4_ENDSTOP(A,M))
1551
 #define _HAS_STOP(A,M) (PIN_EXISTS(A##_##M) && !IS_PROBE_PIN(A,M) && !IS_X2_ENDSTOP(A,M) && !IS_Y2_ENDSTOP(A,M) && !IS_Z2_ENDSTOP(A,M) && !IS_Z3_ENDSTOP(A,M) && !IS_Z4_ENDSTOP(A,M))
1408
-#define HAS_X_MIN _HAS_STOP(X,MIN)
1409
-#define HAS_X_MAX _HAS_STOP(X,MAX)
1410
-#define HAS_Y_MIN _HAS_STOP(Y,MIN)
1411
-#define HAS_Y_MAX _HAS_STOP(Y,MAX)
1412
-#define HAS_Z_MIN _HAS_STOP(Z,MIN)
1413
-#define HAS_Z_MAX _HAS_STOP(Z,MAX)
1414
-#define HAS_X2_MIN (PIN_EXISTS(X2_MIN))
1415
-#define HAS_X2_MAX (PIN_EXISTS(X2_MAX))
1416
-#define HAS_Y2_MIN (PIN_EXISTS(Y2_MIN))
1417
-#define HAS_Y2_MAX (PIN_EXISTS(Y2_MAX))
1418
-#define HAS_Z2_MIN (PIN_EXISTS(Z2_MIN))
1419
-#define HAS_Z2_MAX (PIN_EXISTS(Z2_MAX))
1420
-#define HAS_Z3_MIN (PIN_EXISTS(Z3_MIN))
1421
-#define HAS_Z3_MAX (PIN_EXISTS(Z3_MAX))
1422
-#define HAS_Z4_MIN (PIN_EXISTS(Z4_MIN))
1423
-#define HAS_Z4_MAX (PIN_EXISTS(Z4_MAX))
1424
-#define HAS_Z_MIN_PROBE_PIN (HAS_CUSTOM_PROBE_PIN && PIN_EXISTS(Z_MIN_PROBE))
1552
+#if _HAS_STOP(X,MIN)
1553
+  #define HAS_X_MIN 1
1554
+#endif
1555
+#if _HAS_STOP(X,MAX)
1556
+  #define HAS_X_MAX 1
1557
+#endif
1558
+#if _HAS_STOP(Y,MIN)
1559
+  #define HAS_Y_MIN 1
1560
+#endif
1561
+#if _HAS_STOP(Y,MAX)
1562
+  #define HAS_Y_MAX 1
1563
+#endif
1564
+#if _HAS_STOP(Z,MIN)
1565
+  #define HAS_Z_MIN 1
1566
+#endif
1567
+#if _HAS_STOP(Z,MAX)
1568
+  #define HAS_Z_MAX 1
1569
+#endif
1570
+#if PIN_EXISTS(X2_MIN)
1571
+  #define HAS_X2_MIN 1
1572
+#endif
1573
+#if PIN_EXISTS(X2_MAX)
1574
+  #define HAS_X2_MAX 1
1575
+#endif
1576
+#if PIN_EXISTS(Y2_MIN)
1577
+  #define HAS_Y2_MIN 1
1578
+#endif
1579
+#if PIN_EXISTS(Y2_MAX)
1580
+  #define HAS_Y2_MAX 1
1581
+#endif
1582
+#if PIN_EXISTS(Z2_MIN)
1583
+  #define HAS_Z2_MIN 1
1584
+#endif
1585
+#if PIN_EXISTS(Z2_MAX)
1586
+  #define HAS_Z2_MAX 1
1587
+#endif
1588
+#if PIN_EXISTS(Z3_MIN)
1589
+  #define HAS_Z3_MIN 1
1590
+#endif
1591
+#if PIN_EXISTS(Z3_MAX)
1592
+  #define HAS_Z3_MAX 1
1593
+#endif
1594
+#if PIN_EXISTS(Z4_MIN)
1595
+  #define HAS_Z4_MIN 1
1596
+#endif
1597
+#if PIN_EXISTS(Z4_MAX)
1598
+  #define HAS_Z4_MAX 1
1599
+#endif
1600
+#if HAS_CUSTOM_PROBE_PIN && PIN_EXISTS(Z_MIN_PROBE)
1601
+  #define HAS_Z_MIN_PROBE_PIN 1
1602
+#endif
1425
 
1603
 
1426
 //
1604
 //
1427
 // ADC Temp Sensors (Thermistor or Thermocouple with amplifier ADC interface)
1605
 // ADC Temp Sensors (Thermistor or Thermocouple with amplifier ADC interface)
1428
 //
1606
 //
1429
 #define HAS_ADC_TEST(P) (PIN_EXISTS(TEMP_##P) && TEMP_SENSOR_##P != 0 && DISABLED(HEATER_##P##_USES_MAX6675))
1607
 #define HAS_ADC_TEST(P) (PIN_EXISTS(TEMP_##P) && TEMP_SENSOR_##P != 0 && DISABLED(HEATER_##P##_USES_MAX6675))
1430
-#define HAS_TEMP_ADC_0        HAS_ADC_TEST(0)
1431
-#define HAS_TEMP_ADC_1        HAS_ADC_TEST(1)
1432
-#define HAS_TEMP_ADC_2        HAS_ADC_TEST(2)
1433
-#define HAS_TEMP_ADC_3        HAS_ADC_TEST(3)
1434
-#define HAS_TEMP_ADC_4        HAS_ADC_TEST(4)
1435
-#define HAS_TEMP_ADC_5        HAS_ADC_TEST(5)
1436
-#define HAS_TEMP_ADC_6        HAS_ADC_TEST(6)
1437
-#define HAS_TEMP_ADC_7        HAS_ADC_TEST(7)
1438
-#define HAS_TEMP_ADC_BED      HAS_ADC_TEST(BED)
1439
-#define HAS_TEMP_ADC_PROBE    HAS_ADC_TEST(PROBE)
1440
-#define HAS_TEMP_ADC_CHAMBER  HAS_ADC_TEST(CHAMBER)
1441
-
1442
-#define HAS_TEMP_HOTEND   ((HAS_TEMP_ADC_0 || ENABLED(HEATER_0_USES_MAX6675)) && HOTENDS)
1608
+#if HAS_ADC_TEST(0)
1609
+  #define HAS_TEMP_ADC_0 1
1610
+#endif
1611
+#if HAS_ADC_TEST(1)
1612
+  #define HAS_TEMP_ADC_1 1
1613
+#endif
1614
+#if HAS_ADC_TEST(2)
1615
+  #define HAS_TEMP_ADC_2 1
1616
+#endif
1617
+#if HAS_ADC_TEST(3)
1618
+  #define HAS_TEMP_ADC_3 1
1619
+#endif
1620
+#if HAS_ADC_TEST(4)
1621
+  #define HAS_TEMP_ADC_4 1
1622
+#endif
1623
+#if HAS_ADC_TEST(5)
1624
+  #define HAS_TEMP_ADC_5 1
1625
+#endif
1626
+#if HAS_ADC_TEST(6)
1627
+  #define HAS_TEMP_ADC_6 1
1628
+#endif
1629
+#if HAS_ADC_TEST(7)
1630
+  #define HAS_TEMP_ADC_7 1
1631
+#endif
1632
+#if HAS_ADC_TEST(BED)
1633
+  #define HAS_TEMP_ADC_BED 1
1634
+#endif
1635
+#if HAS_ADC_TEST(PROBE)
1636
+  #define HAS_TEMP_ADC_PROBE 1
1637
+#endif
1638
+#if HAS_ADC_TEST(CHAMBER)
1639
+  #define HAS_TEMP_ADC_CHAMBER 1
1640
+#endif
1641
+
1642
+#if HOTENDS && (HAS_TEMP_ADC_0 || ENABLED(HEATER_0_USES_MAX6675))
1643
+  #define HAS_TEMP_HOTEND 1
1644
+#endif
1443
 #define HAS_TEMP_BED        HAS_TEMP_ADC_BED
1645
 #define HAS_TEMP_BED        HAS_TEMP_ADC_BED
1444
 #define HAS_TEMP_PROBE      HAS_TEMP_ADC_PROBE
1646
 #define HAS_TEMP_PROBE      HAS_TEMP_ADC_PROBE
1445
 #define HAS_TEMP_CHAMBER    HAS_TEMP_ADC_CHAMBER
1647
 #define HAS_TEMP_CHAMBER    HAS_TEMP_ADC_CHAMBER
1446
 
1648
 
1447
 #if ENABLED(JOYSTICK)
1649
 #if ENABLED(JOYSTICK)
1448
-  #define HAS_JOY_ADC_X  PIN_EXISTS(JOY_X)
1449
-  #define HAS_JOY_ADC_Y  PIN_EXISTS(JOY_Y)
1450
-  #define HAS_JOY_ADC_Z  PIN_EXISTS(JOY_Z)
1451
-  #define HAS_JOY_ADC_EN PIN_EXISTS(JOY_EN)
1650
+  #if PIN_EXISTS(JOY_X)
1651
+    #define HAS_JOY_ADC_X 1
1652
+#endif
1653
+  #if PIN_EXISTS(JOY_Y)
1654
+    #define HAS_JOY_ADC_Y 1
1655
+#endif
1656
+  #if PIN_EXISTS(JOY_Z)
1657
+    #define HAS_JOY_ADC_Z 1
1658
+#endif
1659
+  #if PIN_EXISTS(JOY_EN)
1660
+    #define HAS_JOY_ADC_EN 1
1661
+#endif
1452
 #endif
1662
 #endif
1453
 
1663
 
1454
 // Heaters
1664
 // Heaters
1455
-#define HAS_HEATER_0    (PIN_EXISTS(HEATER_0))
1456
-#define HAS_HEATER_1    (PIN_EXISTS(HEATER_1))
1457
-#define HAS_HEATER_2    (PIN_EXISTS(HEATER_2))
1458
-#define HAS_HEATER_3    (PIN_EXISTS(HEATER_3))
1459
-#define HAS_HEATER_4    (PIN_EXISTS(HEATER_4))
1460
-#define HAS_HEATER_5    (PIN_EXISTS(HEATER_5))
1461
-#define HAS_HEATER_6    (PIN_EXISTS(HEATER_6))
1462
-#define HAS_HEATER_7    (PIN_EXISTS(HEATER_7))
1463
-#define HAS_HEATER_BED  (PIN_EXISTS(HEATER_BED))
1665
+#if PIN_EXISTS(HEATER_0)
1666
+  #define HAS_HEATER_0 1
1667
+#endif
1668
+#if PIN_EXISTS(HEATER_1)
1669
+  #define HAS_HEATER_1 1
1670
+#endif
1671
+#if PIN_EXISTS(HEATER_2)
1672
+  #define HAS_HEATER_2 1
1673
+#endif
1674
+#if PIN_EXISTS(HEATER_3)
1675
+  #define HAS_HEATER_3 1
1676
+#endif
1677
+#if PIN_EXISTS(HEATER_4)
1678
+  #define HAS_HEATER_4 1
1679
+#endif
1680
+#if PIN_EXISTS(HEATER_5)
1681
+  #define HAS_HEATER_5 1
1682
+#endif
1683
+#if PIN_EXISTS(HEATER_6)
1684
+  #define HAS_HEATER_6 1
1685
+#endif
1686
+#if PIN_EXISTS(HEATER_7)
1687
+  #define HAS_HEATER_7 1
1688
+#endif
1689
+#if PIN_EXISTS(HEATER_BED)
1690
+  #define HAS_HEATER_BED 1
1691
+#endif
1464
 
1692
 
1465
 // Shorthand for common combinations
1693
 // Shorthand for common combinations
1466
 #if HAS_TEMP_BED && HAS_HEATER_BED
1694
 #if HAS_TEMP_BED && HAS_HEATER_BED
1507
 #endif
1735
 #endif
1508
 
1736
 
1509
 // Auto fans
1737
 // Auto fans
1510
-#define HAS_AUTO_FAN_0 (HOTENDS > 0 && PIN_EXISTS(E0_AUTO_FAN))
1511
-#define HAS_AUTO_FAN_1 (HOTENDS > 1 && PIN_EXISTS(E1_AUTO_FAN))
1512
-#define HAS_AUTO_FAN_2 (HOTENDS > 2 && PIN_EXISTS(E2_AUTO_FAN))
1513
-#define HAS_AUTO_FAN_3 (HOTENDS > 3 && PIN_EXISTS(E3_AUTO_FAN))
1514
-#define HAS_AUTO_FAN_4 (HOTENDS > 4 && PIN_EXISTS(E4_AUTO_FAN))
1515
-#define HAS_AUTO_FAN_5 (HOTENDS > 5 && PIN_EXISTS(E5_AUTO_FAN))
1516
-#define HAS_AUTO_FAN_6 (HOTENDS > 6 && PIN_EXISTS(E6_AUTO_FAN))
1517
-#define HAS_AUTO_FAN_7 (HOTENDS > 7 && PIN_EXISTS(E7_AUTO_FAN))
1518
-#define HAS_AUTO_CHAMBER_FAN (HAS_TEMP_CHAMBER && PIN_EXISTS(CHAMBER_AUTO_FAN))
1738
+#if HAS_HOTEND && PIN_EXISTS(E0_AUTO_FAN)
1739
+  #define HAS_AUTO_FAN_0 1
1740
+#endif
1741
+#if HOTENDS > 1 && PIN_EXISTS(E1_AUTO_FAN)
1742
+  #define HAS_AUTO_FAN_1 1
1743
+#endif
1744
+#if HOTENDS > 2 && PIN_EXISTS(E2_AUTO_FAN)
1745
+  #define HAS_AUTO_FAN_2 1
1746
+#endif
1747
+#if HOTENDS > 3 && PIN_EXISTS(E3_AUTO_FAN)
1748
+  #define HAS_AUTO_FAN_3 1
1749
+#endif
1750
+#if HOTENDS > 4 && PIN_EXISTS(E4_AUTO_FAN)
1751
+  #define HAS_AUTO_FAN_4 1
1752
+#endif
1753
+#if HOTENDS > 5 && PIN_EXISTS(E5_AUTO_FAN)
1754
+  #define HAS_AUTO_FAN_5 1
1755
+#endif
1756
+#if HOTENDS > 6 && PIN_EXISTS(E6_AUTO_FAN)
1757
+  #define HAS_AUTO_FAN_6 1
1758
+#endif
1759
+#if HOTENDS > 7 && PIN_EXISTS(E7_AUTO_FAN)
1760
+  #define HAS_AUTO_FAN_7 1
1761
+#endif
1762
+#if HAS_TEMP_CHAMBER && PIN_EXISTS(CHAMBER_AUTO_FAN)
1763
+  #define HAS_AUTO_CHAMBER_FAN 1
1764
+#endif
1519
 
1765
 
1520
 #define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3 || HAS_AUTO_FAN_4 || HAS_AUTO_FAN_5 || HAS_AUTO_FAN_6 || HAS_AUTO_FAN_7 || HAS_AUTO_CHAMBER_FAN)
1766
 #define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3 || HAS_AUTO_FAN_4 || HAS_AUTO_FAN_5 || HAS_AUTO_FAN_6 || HAS_AUTO_FAN_7 || HAS_AUTO_CHAMBER_FAN)
1521
 #define _FANOVERLAP(A,B) (A##_AUTO_FAN_PIN == E##B##_AUTO_FAN_PIN)
1767
 #define _FANOVERLAP(A,B) (A##_AUTO_FAN_PIN == E##B##_AUTO_FAN_PIN)
1535
 // Other fans
1781
 // Other fans
1536
 #define HAS_FAN0 (PIN_EXISTS(FAN))
1782
 #define HAS_FAN0 (PIN_EXISTS(FAN))
1537
 #define _HAS_FAN(P) (PIN_EXISTS(FAN##P) && CONTROLLER_FAN_PIN != FAN##P##_PIN && E0_AUTO_FAN_PIN != FAN##P##_PIN && E1_AUTO_FAN_PIN != FAN##P##_PIN && E2_AUTO_FAN_PIN != FAN##P##_PIN && E3_AUTO_FAN_PIN != FAN##P##_PIN && E4_AUTO_FAN_PIN != FAN##P##_PIN && E5_AUTO_FAN_PIN != FAN##P##_PIN && E6_AUTO_FAN_PIN != FAN##P##_PIN && E7_AUTO_FAN_PIN != FAN##P##_PIN)
1783
 #define _HAS_FAN(P) (PIN_EXISTS(FAN##P) && CONTROLLER_FAN_PIN != FAN##P##_PIN && E0_AUTO_FAN_PIN != FAN##P##_PIN && E1_AUTO_FAN_PIN != FAN##P##_PIN && E2_AUTO_FAN_PIN != FAN##P##_PIN && E3_AUTO_FAN_PIN != FAN##P##_PIN && E4_AUTO_FAN_PIN != FAN##P##_PIN && E5_AUTO_FAN_PIN != FAN##P##_PIN && E6_AUTO_FAN_PIN != FAN##P##_PIN && E7_AUTO_FAN_PIN != FAN##P##_PIN)
1538
-#define HAS_FAN1 _HAS_FAN(1)
1539
-#define HAS_FAN2 _HAS_FAN(2)
1540
-#define HAS_FAN3 _HAS_FAN(3)
1541
-#define HAS_FAN4 _HAS_FAN(4)
1542
-#define HAS_FAN5 _HAS_FAN(5)
1543
-#define HAS_FAN6 _HAS_FAN(6)
1544
-#define HAS_FAN7 _HAS_FAN(7)
1545
-#define HAS_CONTROLLER_FAN (PIN_EXISTS(CONTROLLER_FAN))
1784
+#if _HAS_FAN(1)
1785
+  #define HAS_FAN1 1
1786
+#endif
1787
+#if _HAS_FAN(2)
1788
+  #define HAS_FAN2 1
1789
+#endif
1790
+#if _HAS_FAN(3)
1791
+  #define HAS_FAN3 1
1792
+#endif
1793
+#if _HAS_FAN(4)
1794
+  #define HAS_FAN4 1
1795
+#endif
1796
+#if _HAS_FAN(5)
1797
+  #define HAS_FAN5 1
1798
+#endif
1799
+#if _HAS_FAN(6)
1800
+  #define HAS_FAN6 1
1801
+#endif
1802
+#if _HAS_FAN(7)
1803
+  #define HAS_FAN7 1
1804
+#endif
1805
+#if PIN_EXISTS(CONTROLLER_FAN)
1806
+  #define HAS_CONTROLLER_FAN 1
1807
+#endif
1546
 
1808
 
1547
 // Servos
1809
 // Servos
1548
-#define HAS_SERVO_0 (PIN_EXISTS(SERVO0) && NUM_SERVOS > 0)
1549
-#define HAS_SERVO_1 (PIN_EXISTS(SERVO1) && NUM_SERVOS > 1)
1550
-#define HAS_SERVO_2 (PIN_EXISTS(SERVO2) && NUM_SERVOS > 2)
1551
-#define HAS_SERVO_3 (PIN_EXISTS(SERVO3) && NUM_SERVOS > 3)
1552
-#define HAS_SERVOS  (NUM_SERVOS > 0)
1810
+#if PIN_EXISTS(SERVO0) && NUM_SERVOS > 0
1811
+  #define HAS_SERVO_0 1
1812
+#endif
1813
+#if PIN_EXISTS(SERVO1) && NUM_SERVOS > 1
1814
+  #define HAS_SERVO_1 1
1815
+#endif
1816
+#if PIN_EXISTS(SERVO2) && NUM_SERVOS > 2
1817
+  #define HAS_SERVO_2 1
1818
+#endif
1819
+#if PIN_EXISTS(SERVO3) && NUM_SERVOS > 3
1820
+  #define HAS_SERVO_3 1
1821
+#endif
1822
+#if NUM_SERVOS > 0
1823
+  #define HAS_SERVOS 1
1824
+#endif
1553
 
1825
 
1554
 // Sensors
1826
 // Sensors
1555
-#define HAS_FILAMENT_WIDTH_SENSOR (PIN_EXISTS(FILWIDTH))
1827
+#if PIN_EXISTS(FILWIDTH)
1828
+  #define HAS_FILAMENT_WIDTH_SENSOR 1
1829
+#endif
1556
 
1830
 
1557
 // User Interface
1831
 // User Interface
1558
 #if PIN_EXISTS(HOME)
1832
 #if PIN_EXISTS(HOME)
1638
     #endif
1912
     #endif
1639
   #endif
1913
   #endif
1640
 
1914
 
1641
-  #define HAS_MICROSTEP1 defined(MICROSTEP1)
1642
-  #define HAS_MICROSTEP2 defined(MICROSTEP2)
1643
-  #define HAS_MICROSTEP4 defined(MICROSTEP4)
1644
-  #define HAS_MICROSTEP8 defined(MICROSTEP8)
1645
-  #define HAS_MICROSTEP16 defined(MICROSTEP16)
1646
-  #define HAS_MICROSTEP32 defined(MICROSTEP32)
1647
-  #define HAS_MICROSTEP64 defined(MICROSTEP64)
1648
-  #define HAS_MICROSTEP128 defined(MICROSTEP128)
1915
+  #ifdef MICROSTEP1
1916
+    #define HAS_MICROSTEP1 1
1917
+  #endif
1918
+  #ifdef MICROSTEP2
1919
+    #define HAS_MICROSTEP2 1
1920
+  #endif
1921
+  #ifdef MICROSTEP4
1922
+    #define HAS_MICROSTEP4 1
1923
+  #endif
1924
+  #ifdef MICROSTEP8
1925
+    #define HAS_MICROSTEP8 1
1926
+  #endif
1927
+  #ifdef MICROSTEP16
1928
+    #define HAS_MICROSTEP16 1
1929
+  #endif
1930
+  #ifdef MICROSTEP32
1931
+    #define HAS_MICROSTEP32 1
1932
+  #endif
1933
+  #ifdef MICROSTEP64
1934
+    #define HAS_MICROSTEP64 1
1935
+  #endif
1936
+  #ifdef MICROSTEP128
1937
+    #define HAS_MICROSTEP128 1
1938
+  #endif
1649
 
1939
 
1650
 #endif // HAS_MICROSTEPS
1940
 #endif // HAS_MICROSTEPS
1651
 
1941
 
1896
   #undef NO_FAN_SLOWING_IN_PID_TUNING
2186
   #undef NO_FAN_SLOWING_IN_PID_TUNING
1897
 #endif
2187
 #endif
1898
 
2188
 
1899
-#define QUIET_PROBING (HAS_BED_PROBE && (EITHER(PROBING_HEATERS_OFF, PROBING_FANS_OFF) || DELAY_BEFORE_PROBING > 0))
1900
-#define HEATER_IDLE_HANDLER EITHER(ADVANCED_PAUSE_FEATURE, PROBING_HEATERS_OFF)
2189
+#if HAS_BED_PROBE && (EITHER(PROBING_HEATERS_OFF, PROBING_FANS_OFF) || DELAY_BEFORE_PROBING > 0)
2190
+  #define QUIET_PROBING 1
2191
+#endif
2192
+#if EITHER(ADVANCED_PAUSE_FEATURE, PROBING_HEATERS_OFF)
2193
+  #define HEATER_IDLE_HANDLER 1
2194
+#endif
1901
 
2195
 
1902
 #if ENABLED(ADVANCED_PAUSE_FEATURE) && !defined(FILAMENT_CHANGE_SLOW_LOAD_LENGTH)
2196
 #if ENABLED(ADVANCED_PAUSE_FEATURE) && !defined(FILAMENT_CHANGE_SLOW_LOAD_LENGTH)
1903
   #define FILAMENT_CHANGE_SLOW_LOAD_LENGTH 0
2197
   #define FILAMENT_CHANGE_SLOW_LOAD_LENGTH 0

+ 2
- 2
Marlin/src/inc/SanityCheck.h Прегледај датотеку

1591
   #error "MAX6675_SS_PIN (required for TEMP_SENSOR_0) not defined for this board."
1591
   #error "MAX6675_SS_PIN (required for TEMP_SENSOR_0) not defined for this board."
1592
 #elif HOTENDS && !HAS_TEMP_HOTEND
1592
 #elif HOTENDS && !HAS_TEMP_HOTEND
1593
   #error "TEMP_0_PIN (required for TEMP_SENSOR_0) not defined for this board."
1593
   #error "TEMP_0_PIN (required for TEMP_SENSOR_0) not defined for this board."
1594
-#elif (HOTENDS > 1 || ENABLED(HEATERS_PARALLEL)) && !HAS_HEATER_1
1594
+#elif (HAS_MULTI_HOTEND || ENABLED(HEATERS_PARALLEL)) && !HAS_HEATER_1
1595
   #error "HEATER_1_PIN not defined for this board."
1595
   #error "HEATER_1_PIN not defined for this board."
1596
 #endif
1596
 #endif
1597
 
1597
 
1598
-#if HOTENDS > 1
1598
+#if HAS_MULTI_HOTEND
1599
   #if ENABLED(HEATER_1_USES_MAX6675) && !PIN_EXISTS(MAX6675_SS2)
1599
   #if ENABLED(HEATER_1_USES_MAX6675) && !PIN_EXISTS(MAX6675_SS2)
1600
     #error "MAX6675_SS2_PIN (required for TEMP_SENSOR_1) not defined for this board."
1600
     #error "MAX6675_SS2_PIN (required for TEMP_SENSOR_1) not defined for this board."
1601
   #elif TEMP_SENSOR_1 == 0
1601
   #elif TEMP_SENSOR_1 == 0

+ 8
- 8
Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp Прегледај датотеку

745
       //
745
       //
746
       // Hotend 1 or Bed Temperature
746
       // Hotend 1 or Bed Temperature
747
       //
747
       //
748
-      #if HOTENDS > 1
748
+      #if HAS_MULTI_HOTEND
749
         lcd_moveto(8, 0);
749
         lcd_moveto(8, 0);
750
         _draw_heater_status(H_E1, LCD_STR_THERMOMETER[0], blink);
750
         _draw_heater_status(H_E1, LCD_STR_THERMOMETER[0], blink);
751
       #elif HAS_HEATED_BED
751
       #elif HAS_HEATED_BED
763
       //
763
       //
764
       // Hotend 1 or Bed Temperature
764
       // Hotend 1 or Bed Temperature
765
       //
765
       //
766
-      #if HOTENDS > 1
766
+      #if HAS_MULTI_HOTEND
767
         lcd_moveto(10, 0);
767
         lcd_moveto(10, 0);
768
         _draw_heater_status(H_E1, LCD_STR_THERMOMETER[0], blink);
768
         _draw_heater_status(H_E1, LCD_STR_THERMOMETER[0], blink);
769
       #elif HAS_HEATED_BED
769
       #elif HAS_HEATED_BED
791
         // If the first line has two extruder temps,
791
         // If the first line has two extruder temps,
792
         // show more temperatures on the next line
792
         // show more temperatures on the next line
793
 
793
 
794
-        #if HOTENDS > 2 || (HOTENDS > 1 && HAS_HEATED_BED)
794
+        #if HOTENDS > 2 || (HAS_MULTI_HOTEND && HAS_HEATED_BED)
795
 
795
 
796
           #if HOTENDS > 2
796
           #if HOTENDS > 2
797
             _draw_heater_status(H_E2, LCD_STR_THERMOMETER[0], blink);
797
             _draw_heater_status(H_E2, LCD_STR_THERMOMETER[0], blink);
924
     lcd_moveto(LCD_WIDTH - 9, 0);
924
     lcd_moveto(LCD_WIDTH - 9, 0);
925
     _draw_axis_value(Z_AXIS, ftostr52sp(LOGICAL_Z_POSITION(current_position.z)), blink);
925
     _draw_axis_value(Z_AXIS, ftostr52sp(LOGICAL_Z_POSITION(current_position.z)), blink);
926
 
926
 
927
-    #if HAS_LEVELING && (HOTENDS > 1 || !HAS_HEATED_BED)
927
+    #if HAS_LEVELING && (HAS_MULTI_HOTEND || !HAS_HEATED_BED)
928
       lcd_put_wchar(LCD_WIDTH - 1, 0, planner.leveling_active || blink ? '_' : ' ');
928
       lcd_put_wchar(LCD_WIDTH - 1, 0, planner.leveling_active || blink ? '_' : ' ');
929
     #endif
929
     #endif
930
 
930
 
934
     // Hotend 1 or Bed Temperature
934
     // Hotend 1 or Bed Temperature
935
     //
935
     //
936
     lcd_moveto(0, 1);
936
     lcd_moveto(0, 1);
937
-    #if HOTENDS > 1
937
+    #if HAS_MULTI_HOTEND
938
       _draw_heater_status(H_E1, LCD_STR_THERMOMETER[0], blink);
938
       _draw_heater_status(H_E1, LCD_STR_THERMOMETER[0], blink);
939
     #elif HAS_HEATED_BED
939
     #elif HAS_HEATED_BED
940
       _draw_bed_status(blink);
940
       _draw_bed_status(blink);
952
     lcd_moveto(0, 2);
952
     lcd_moveto(0, 2);
953
     #if HOTENDS > 2
953
     #if HOTENDS > 2
954
       _draw_heater_status(H_E2, LCD_STR_THERMOMETER[0], blink);
954
       _draw_heater_status(H_E2, LCD_STR_THERMOMETER[0], blink);
955
-    #elif HOTENDS > 1 && HAS_HEATED_BED
955
+    #elif HAS_MULTI_HOTEND && HAS_HEATED_BED
956
       _draw_bed_status(blink);
956
       _draw_bed_status(blink);
957
     #elif HAS_PRINT_PROGRESS
957
     #elif HAS_PRINT_PROGRESS
958
       #define DREW_PRINT_PROGRESS
958
       #define DREW_PRINT_PROGRESS
1077
         if (thermalManager.degTargetBed() > 0) leds |= LED_A;
1077
         if (thermalManager.degTargetBed() > 0) leds |= LED_A;
1078
       #endif
1078
       #endif
1079
 
1079
 
1080
-      #if HOTENDS
1080
+      #if HAS_HOTEND
1081
         if (thermalManager.degTargetHotend(0) > 0) leds |= LED_B;
1081
         if (thermalManager.degTargetHotend(0) > 0) leds |= LED_B;
1082
       #endif
1082
       #endif
1083
 
1083
 
1110
         ) leds |= LED_C;
1110
         ) leds |= LED_C;
1111
       #endif // FAN_COUNT > 0
1111
       #endif // FAN_COUNT > 0
1112
 
1112
 
1113
-      #if HOTENDS > 1
1113
+      #if HAS_MULTI_HOTEND
1114
         if (thermalManager.degTargetHotend(1) > 0) leds |= LED_C;
1114
         if (thermalManager.degTargetHotend(1) > 0) leds |= LED_C;
1115
       #endif
1115
       #endif
1116
 
1116
 

+ 3
- 3
Marlin/src/lcd/dogm/dogm_Statusscreen.h Прегледај датотеку

278
     //
278
     //
279
     // Status Screen Hotends bitmaps
279
     // Status Screen Hotends bitmaps
280
     //
280
     //
281
-    #if HOTENDS
281
+    #if HAS_HOTEND
282
 
282
 
283
       #define STATUS_HOTEND1_WIDTH  16
283
       #define STATUS_HOTEND1_WIDTH  16
284
 
284
 
1343
     #undef STATUS_LOGO_WIDTH
1343
     #undef STATUS_LOGO_WIDTH
1344
   #endif
1344
   #endif
1345
 
1345
 
1346
-  #if (HOTENDS > 1 && STATUS_LOGO_WIDTH && BED_OR_CHAMBER_OR_FAN) || (HOTENDS >= 3 && !BED_OR_CHAMBER_OR_FAN)
1346
+  #if (HAS_MULTI_HOTEND && STATUS_LOGO_WIDTH && BED_OR_CHAMBER_OR_FAN) || (HOTENDS >= 3 && !BED_OR_CHAMBER_OR_FAN)
1347
     #define _STATUS_HEATERS_X(H,S,N) ((LCD_PIXEL_WIDTH - (H * (S + N)) - (_EXTRA_WIDTH) + (STATUS_LOGO_WIDTH)) / 2)
1347
     #define _STATUS_HEATERS_X(H,S,N) ((LCD_PIXEL_WIDTH - (H * (S + N)) - (_EXTRA_WIDTH) + (STATUS_LOGO_WIDTH)) / 2)
1348
     #if STATUS_HOTEND1_WIDTH
1348
     #if STATUS_HOTEND1_WIDTH
1349
       #if HOTENDS > 2
1349
       #if HOTENDS > 2
1474
 
1474
 
1475
     constexpr uint8_t status_hotend_x[HOTENDS] = ARRAY_N(HOTENDS, STATUS_HOTEND1_X, STATUS_HOTEND2_X, STATUS_HOTEND3_X, STATUS_HOTEND4_X, STATUS_HOTEND5_X, STATUS_HOTEND6_X);
1475
     constexpr uint8_t status_hotend_x[HOTENDS] = ARRAY_N(HOTENDS, STATUS_HOTEND1_X, STATUS_HOTEND2_X, STATUS_HOTEND3_X, STATUS_HOTEND4_X, STATUS_HOTEND5_X, STATUS_HOTEND6_X);
1476
     #define STATUS_HOTEND_X(N) status_hotend_x[N]
1476
     #define STATUS_HOTEND_X(N) status_hotend_x[N]
1477
-  #elif HOTENDS > 1
1477
+  #elif HAS_MULTI_HOTEND
1478
     #define STATUS_HOTEND_X(N) ((N) ? STATUS_HOTEND2_X : STATUS_HOTEND1_X)
1478
     #define STATUS_HOTEND_X(N) ((N) ? STATUS_HOTEND2_X : STATUS_HOTEND1_X)
1479
   #else
1479
   #else
1480
     #define STATUS_HOTEND_X(N) STATUS_HOTEND1_X
1480
     #define STATUS_HOTEND_X(N) STATUS_HOTEND1_X

+ 5
- 5
Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp Прегледај датотеку

431
 
431
 
432
   // Draw the static icons in GDRAM
432
   // Draw the static icons in GDRAM
433
   draw_gdram_icon(0, 0, nozzle_icon);
433
   draw_gdram_icon(0, 0, nozzle_icon);
434
-  #if HOTENDS > 1
434
+  #if HAS_MULTI_HOTEND
435
     draw_gdram_icon(0, 1, nozzle_icon);
435
     draw_gdram_icon(0, 1, nozzle_icon);
436
     draw_gdram_icon(0, 2, bed_icon);
436
     draw_gdram_icon(0, 2, bed_icon);
437
   #else
437
   #else
584
 #if HAS_HEATED_BED
584
 #if HAS_HEATED_BED
585
   void ST7920_Lite_Status_Screen::draw_bed_temp(const int16_t temp, const int16_t target, bool forceUpdate) {
585
   void ST7920_Lite_Status_Screen::draw_bed_temp(const int16_t temp, const int16_t target, bool forceUpdate) {
586
     const bool show_target = target && FAR(temp, target);
586
     const bool show_target = target && FAR(temp, target);
587
-    draw_temps(HOTENDS > 1 ? 2 : 1, temp, target, show_target, display_state.bed_show_target != show_target || forceUpdate);
587
+    draw_temps(HAS_MULTI_HOTEND ? 2 : 1, temp, target, show_target, display_state.bed_show_target != show_target || forceUpdate);
588
     display_state.bed_show_target = show_target;
588
     display_state.bed_show_target = show_target;
589
   }
589
   }
590
 #endif
590
 #endif
704
   const uint16_t   feedrate_perc     = feedrate_percentage;
704
   const uint16_t   feedrate_perc     = feedrate_percentage;
705
   const uint16_t   fs                = thermalManager.scaledFanSpeed(0);
705
   const uint16_t   fs                = thermalManager.scaledFanSpeed(0);
706
   const int16_t    extruder_1_target = thermalManager.degTargetHotend(0);
706
   const int16_t    extruder_1_target = thermalManager.degTargetHotend(0);
707
-  #if HOTENDS > 1
707
+  #if HAS_MULTI_HOTEND
708
     const int16_t  extruder_2_target = thermalManager.degTargetHotend(1);
708
     const int16_t  extruder_2_target = thermalManager.degTargetHotend(1);
709
   #endif
709
   #endif
710
   #if HAS_HEATED_BED
710
   #if HAS_HEATED_BED
731
     const uint16_t   feedrate_perc     = feedrate_percentage;
731
     const uint16_t   feedrate_perc     = feedrate_percentage;
732
     const int16_t    extruder_1_temp   = thermalManager.degHotend(0),
732
     const int16_t    extruder_1_temp   = thermalManager.degHotend(0),
733
                      extruder_1_target = thermalManager.degTargetHotend(0);
733
                      extruder_1_target = thermalManager.degTargetHotend(0);
734
-    #if HOTENDS > 1
734
+    #if HAS_MULTI_HOTEND
735
       const int16_t  extruder_2_temp   = thermalManager.degHotend(1),
735
       const int16_t  extruder_2_temp   = thermalManager.degHotend(1),
736
                      extruder_2_target = thermalManager.degTargetHotend(1);
736
                      extruder_2_target = thermalManager.degTargetHotend(1);
737
     #endif
737
     #endif
741
     #endif
741
     #endif
742
 
742
 
743
     draw_extruder_1_temp(extruder_1_temp, extruder_1_target, forceUpdate);
743
     draw_extruder_1_temp(extruder_1_temp, extruder_1_target, forceUpdate);
744
-    #if HOTENDS > 1
744
+    #if HAS_MULTI_HOTEND
745
       draw_extruder_2_temp(extruder_2_temp, extruder_2_target, forceUpdate);
745
       draw_extruder_2_temp(extruder_2_temp, extruder_2_target, forceUpdate);
746
     #endif
746
     #endif
747
     #if HAS_HEATED_BED
747
     #if HAS_HEATED_BED

+ 2
- 2
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/advanced_settings_menu.cpp Прегледај датотеку

115
       )
115
       )
116
       .tag(14).button( TMC_HOMING_THRS_POS,    GET_TEXT_F(MSG_TMC_HOMING_THRS))
116
       .tag(14).button( TMC_HOMING_THRS_POS,    GET_TEXT_F(MSG_TMC_HOMING_THRS))
117
       .enabled(
117
       .enabled(
118
-        #if HOTENDS > 1
118
+        #if HAS_MULTI_HOTEND
119
           1
119
           1
120
         #endif
120
         #endif
121
       )
121
       )
157
     case 2:  GOTO_SCREEN(ZOffsetScreen);              break;
157
     case 2:  GOTO_SCREEN(ZOffsetScreen);              break;
158
     #endif
158
     #endif
159
     case 3:  GOTO_SCREEN(StepsScreen);                break;
159
     case 3:  GOTO_SCREEN(StepsScreen);                break;
160
-    #if HOTENDS > 1
160
+    #if HAS_MULTI_HOTEND
161
     case 4:  GOTO_SCREEN(NozzleOffsetScreen);         break;
161
     case 4:  GOTO_SCREEN(NozzleOffsetScreen);         break;
162
     #endif
162
     #endif
163
     case 5:  GOTO_SCREEN(MaxVelocityScreen);          break;
163
     case 5:  GOTO_SCREEN(MaxVelocityScreen);          break;

+ 2
- 2
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/bio_advanced_settings.cpp Прегледај датотеку

58
       .tag(4) .button( BTN_POS(1,3), BTN_SIZE(1,1), GET_TEXT_F(MSG_TMC_HOMING_THRS))
58
       .tag(4) .button( BTN_POS(1,3), BTN_SIZE(1,1), GET_TEXT_F(MSG_TMC_HOMING_THRS))
59
       .tag(5) .button( BTN_POS(1,4), BTN_SIZE(1,1), GET_TEXT_F(MSG_LCD_ENDSTOPS))
59
       .tag(5) .button( BTN_POS(1,4), BTN_SIZE(1,1), GET_TEXT_F(MSG_LCD_ENDSTOPS))
60
       .enabled(
60
       .enabled(
61
-        #if HOTENDS > 1
61
+        #if HAS_MULTI_HOTEND
62
           1
62
           1
63
         #endif
63
         #endif
64
       )
64
       )
105
     case 4: GOTO_SCREEN(StepperBumpSensitivityScreen);     break;
105
     case 4: GOTO_SCREEN(StepperBumpSensitivityScreen);     break;
106
     #endif
106
     #endif
107
     case 5: GOTO_SCREEN(EndstopStatesScreen);              break;
107
     case 5: GOTO_SCREEN(EndstopStatesScreen);              break;
108
-    #if HOTENDS > 1
108
+    #if HAS_MULTI_HOTEND
109
     case 6: GOTO_SCREEN(NozzleOffsetScreen);               break;
109
     case 6: GOTO_SCREEN(NozzleOffsetScreen);               break;
110
     #endif
110
     #endif
111
 
111
 

+ 2
- 2
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/change_filament_screen.cpp Прегледај датотеку

172
     const bool tog3  = screen_data.ChangeFilamentScreen.t_tag == 3;
172
     const bool tog3  = screen_data.ChangeFilamentScreen.t_tag == 3;
173
     const bool tog4  = screen_data.ChangeFilamentScreen.t_tag == 4;
173
     const bool tog4  = screen_data.ChangeFilamentScreen.t_tag == 4;
174
     const bool tog10 = screen_data.ChangeFilamentScreen.e_tag == 10;
174
     const bool tog10 = screen_data.ChangeFilamentScreen.e_tag == 10;
175
-    #if HOTENDS > 1
176
-    const bool tog11 = screen_data.ChangeFilamentScreen.e_tag == 11;
175
+    #if HAS_MULTI_HOTEND
176
+      const bool tog11 = screen_data.ChangeFilamentScreen.e_tag == 11;
177
     #endif
177
     #endif
178
 
178
 
179
     #ifdef TOUCH_UI_PORTRAIT
179
     #ifdef TOUCH_UI_PORTRAIT

+ 1
- 1
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/nozzle_offsets_screen.cpp Прегледај датотеку

22
 
22
 
23
 #include "../config.h"
23
 #include "../config.h"
24
 
24
 
25
-#if ENABLED(TOUCH_UI_FTDI_EVE) && HOTENDS > 1
25
+#if ENABLED(TOUCH_UI_FTDI_EVE) && HAS_MULTI_HOTEND
26
 
26
 
27
 #include "screens.h"
27
 #include "screens.h"
28
 
28
 

+ 1
- 1
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/nudge_nozzle_screen.cpp Прегледај датотеку

72
         w.text_field(0, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), str);
72
         w.text_field(0, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), str);
73
       #endif
73
       #endif
74
 
74
 
75
-      #if HOTENDS > 1
75
+      #if HAS_MULTI_HOTEND
76
         format_position(str, getNozzleOffset_mm(X, E1), getNozzleOffset_mm(Y, E1), getNozzleOffset_mm(Z, E1));
76
         format_position(str, getNozzleOffset_mm(X, E1), getNozzleOffset_mm(Y, E1), getNozzleOffset_mm(Z, E1));
77
         w.text_field(0, GET_TEXT_F(MSG_OFFSETS_MENU), str);
77
         w.text_field(0, GET_TEXT_F(MSG_OFFSETS_MENU), str);
78
       #endif
78
       #endif

+ 1
- 1
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/screens.cpp Прегледај датотеку

68
 #if HAS_BED_PROBE
68
 #if HAS_BED_PROBE
69
   DECL_SCREEN(ZOffsetScreen),
69
   DECL_SCREEN(ZOffsetScreen),
70
 #endif
70
 #endif
71
-#if HOTENDS > 1
71
+#if HAS_MULTI_HOTEND
72
   DECL_SCREEN(NozzleOffsetScreen),
72
   DECL_SCREEN(NozzleOffsetScreen),
73
 #endif
73
 #endif
74
 #if ENABLED(BACKLASH_GCODE)
74
 #if ENABLED(BACKLASH_GCODE)

+ 1
- 1
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/screens.h Прегледај датотеку

514
   };
514
   };
515
 #endif
515
 #endif
516
 
516
 
517
-#if HOTENDS > 1
517
+#if HAS_MULTI_HOTEND
518
   class NozzleOffsetScreen : public BaseNumericAdjustmentScreen, public CachedScreen<NOZZLE_OFFSET_SCREEN_CACHE> {
518
   class NozzleOffsetScreen : public BaseNumericAdjustmentScreen, public CachedScreen<NOZZLE_OFFSET_SCREEN_CACHE> {
519
     public:
519
     public:
520
       static void onEntry();
520
       static void onEntry();

+ 1
- 1
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/temperature_screen.cpp Прегледај датотеку

78
       case  2: UI_DECREMENT(TargetTemp_celsius, E0); break;
78
       case  2: UI_DECREMENT(TargetTemp_celsius, E0); break;
79
       case  3: UI_INCREMENT(TargetTemp_celsius, E0); break;
79
       case  3: UI_INCREMENT(TargetTemp_celsius, E0); break;
80
     #endif
80
     #endif
81
-    #if HOTENDS > 1
81
+    #if HAS_MULTI_HOTEND
82
       case  4: UI_DECREMENT(TargetTemp_celsius, E1); break;
82
       case  4: UI_DECREMENT(TargetTemp_celsius, E1); break;
83
       case  5: UI_INCREMENT(TargetTemp_celsius, E1); break;
83
       case  5: UI_INCREMENT(TargetTemp_celsius, E1); break;
84
     #endif
84
     #endif

+ 4
- 4
Marlin/src/lcd/extui/ui_api.cpp Прегледај датотеку

192
           case CHAMBER: return; // Chamber has no idle timer
192
           case CHAMBER: return; // Chamber has no idle timer
193
         #endif
193
         #endif
194
         default:
194
         default:
195
-          #if HOTENDS
195
+          #if HAS_HOTEND
196
             thermalManager.reset_hotend_idle_timer(heater - H0);
196
             thermalManager.reset_hotend_idle_timer(heater - H0);
197
           #endif
197
           #endif
198
           break;
198
           break;
258
           case CHAMBER: return false; // Chamber has no idle timer
258
           case CHAMBER: return false; // Chamber has no idle timer
259
         #endif
259
         #endif
260
         default:
260
         default:
261
-          #if HOTENDS
261
+          #if HAS_HOTEND
262
             return thermalManager.hotend_idle[heater - H0].timed_out;
262
             return thermalManager.hotend_idle[heater - H0].timed_out;
263
           #else
263
           #else
264
             return false;
264
             return false;
985
       else
985
       else
986
     #endif
986
     #endif
987
       {
987
       {
988
-        #if HOTENDS
988
+        #if HAS_HOTEND
989
           static constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP, HEATER_6_MAXTEMP, HEATER_7_MAXTEMP);
989
           static constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP, HEATER_6_MAXTEMP, HEATER_7_MAXTEMP);
990
           const int16_t e = heater - H0;
990
           const int16_t e = heater - H0;
991
           thermalManager.setTargetHotend(LROUND(constrain(value, 0, heater_maxtemp[e] - 15)), e);
991
           thermalManager.setTargetHotend(LROUND(constrain(value, 0, heater_maxtemp[e] - 15)), e);
997
     #ifdef TOUCH_UI_LCD_TEMP_SCALING
997
     #ifdef TOUCH_UI_LCD_TEMP_SCALING
998
       value *= TOUCH_UI_LCD_TEMP_SCALING;
998
       value *= TOUCH_UI_LCD_TEMP_SCALING;
999
     #endif
999
     #endif
1000
-    #if HOTENDS
1000
+    #if HAS_HOTEND
1001
       constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP, HEATER_6_MAXTEMP, HEATER_7_MAXTEMP);
1001
       constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP, HEATER_6_MAXTEMP, HEATER_7_MAXTEMP);
1002
       const int16_t e = extruder - E0;
1002
       const int16_t e = extruder - E0;
1003
       enableHeater(extruder);
1003
       enableHeater(extruder);

+ 1
- 1
Marlin/src/lcd/menu/menu.h Прегледај датотеку

29
 
29
 
30
 extern int8_t encoderLine, encoderTopLine, screen_items;
30
 extern int8_t encoderLine, encoderTopLine, screen_items;
31
 
31
 
32
-#if HOTENDS
32
+#if HAS_HOTEND
33
   constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP, HEATER_6_MAXTEMP, HEATER_7_MAXTEMP);
33
   constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP, HEATER_6_MAXTEMP, HEATER_7_MAXTEMP);
34
 #endif
34
 #endif
35
 
35
 

+ 3
- 3
Marlin/src/lcd/menu/menu_advanced.cpp Прегледај датотеку

233
   #define DEFINE_PIDTEMP_FUNCS(N) _DEFINE_PIDTEMP_BASE_FUNCS(N);
233
   #define DEFINE_PIDTEMP_FUNCS(N) _DEFINE_PIDTEMP_BASE_FUNCS(N);
234
 #endif
234
 #endif
235
 
235
 
236
-#if HOTENDS
236
+#if HAS_HOTEND
237
   DEFINE_PIDTEMP_FUNCS(0);
237
   DEFINE_PIDTEMP_FUNCS(0);
238
-  #if HOTENDS > 1 && ENABLED(PID_PARAMS_PER_HOTEND)
238
+  #if HAS_MULTI_HOTEND && ENABLED(PID_PARAMS_PER_HOTEND)
239
     REPEAT_S(1, HOTENDS, DEFINE_PIDTEMP_FUNCS)
239
     REPEAT_S(1, HOTENDS, DEFINE_PIDTEMP_FUNCS)
240
   #endif
240
   #endif
241
 #endif
241
 #endif
308
     #endif
308
     #endif
309
 
309
 
310
     PID_EDIT_MENU_ITEMS(0);
310
     PID_EDIT_MENU_ITEMS(0);
311
-    #if HOTENDS > 1 && ENABLED(PID_PARAMS_PER_HOTEND)
311
+    #if HAS_MULTI_HOTEND && ENABLED(PID_PARAMS_PER_HOTEND)
312
       REPEAT_S(1, HOTENDS, PID_EDIT_MENU_ITEMS)
312
       REPEAT_S(1, HOTENDS, PID_EDIT_MENU_ITEMS)
313
     #endif
313
     #endif
314
 
314
 

+ 6
- 6
Marlin/src/lcd/menu/menu_temperature.cpp Прегледај датотеку

48
 //
48
 //
49
 
49
 
50
 void _lcd_preheat(const int16_t endnum, const int16_t temph, const int16_t tempb, const uint8_t fan) {
50
 void _lcd_preheat(const int16_t endnum, const int16_t temph, const int16_t tempb, const uint8_t fan) {
51
-  #if HOTENDS
51
+  #if HAS_HOTEND
52
     if (temph > 0) thermalManager.setTargetHotend(_MIN(heater_maxtemp[endnum] - 15, temph), endnum);
52
     if (temph > 0) thermalManager.setTargetHotend(_MIN(heater_maxtemp[endnum] - 15, temph), endnum);
53
   #endif
53
   #endif
54
   #if HAS_HEATED_BED
54
   #if HAS_HEATED_BED
107
       #else
107
       #else
108
         ACTION_ITEM(MSG_PREHEAT_1, []{ _preheat_end(0, 0); });
108
         ACTION_ITEM(MSG_PREHEAT_1, []{ _preheat_end(0, 0); });
109
       #endif
109
       #endif
110
-    #elif HOTENDS > 1
110
+    #elif HAS_MULTI_HOTEND
111
       #if HAS_HEATED_BED
111
       #if HAS_HEATED_BED
112
         _PREHEAT_ITEMS(1,0);
112
         _PREHEAT_ITEMS(1,0);
113
       #endif
113
       #endif
118
         #endif
118
         #endif
119
         HOTEND_LOOP() thermalManager.setTargetHotend(ui.preheat_hotend_temp[0], e);
119
         HOTEND_LOOP() thermalManager.setTargetHotend(ui.preheat_hotend_temp[0], e);
120
       });
120
       });
121
-    #endif // HOTENDS > 1
121
+    #endif // HAS_MULTI_HOTEND
122
     #if HAS_HEATED_BED
122
     #if HAS_HEATED_BED
123
       ACTION_ITEM(MSG_PREHEAT_1_BEDONLY, []{ _preheat_bed(0); });
123
       ACTION_ITEM(MSG_PREHEAT_1_BEDONLY, []{ _preheat_bed(0); });
124
     #endif
124
     #endif
135
       #else
135
       #else
136
         ACTION_ITEM(MSG_PREHEAT_2, []{ _preheat_end(1, 0); });
136
         ACTION_ITEM(MSG_PREHEAT_2, []{ _preheat_end(1, 0); });
137
       #endif
137
       #endif
138
-    #elif HOTENDS > 1
138
+    #elif HAS_MULTI_HOTEND
139
       #if HAS_HEATED_BED
139
       #if HAS_HEATED_BED
140
         _PREHEAT_ITEMS(2,0);
140
         _PREHEAT_ITEMS(2,0);
141
       #endif
141
       #endif
146
         #endif
146
         #endif
147
         HOTEND_LOOP() thermalManager.setTargetHotend(ui.preheat_hotend_temp[1], e);
147
         HOTEND_LOOP() thermalManager.setTargetHotend(ui.preheat_hotend_temp[1], e);
148
       });
148
       });
149
-    #endif // HOTENDS > 1
149
+    #endif // HAS_MULTI_HOTEND
150
     #if HAS_HEATED_BED
150
     #if HAS_HEATED_BED
151
       ACTION_ITEM(MSG_PREHEAT_2_BEDONLY, []{ _preheat_bed(1); });
151
       ACTION_ITEM(MSG_PREHEAT_2_BEDONLY, []{ _preheat_bed(1); });
152
     #endif
152
     #endif
171
   //
171
   //
172
   #if HOTENDS == 1
172
   #if HOTENDS == 1
173
     EDIT_ITEM_FAST(int3, MSG_NOZZLE, &thermalManager.temp_hotend[0].target, 0, HEATER_0_MAXTEMP - 15, []{ thermalManager.start_watching_hotend(0); });
173
     EDIT_ITEM_FAST(int3, MSG_NOZZLE, &thermalManager.temp_hotend[0].target, 0, HEATER_0_MAXTEMP - 15, []{ thermalManager.start_watching_hotend(0); });
174
-  #elif HOTENDS > 1
174
+  #elif HAS_MULTI_HOTEND
175
     HOTEND_LOOP()
175
     HOTEND_LOOP()
176
       EDIT_ITEM_FAST_N(int3, e, MSG_NOZZLE_N, &thermalManager.temp_hotend[e].target, 0, heater_maxtemp[e] - 15, []{ thermalManager.start_watching_hotend(MenuItemBase::itemIndex); });
176
       EDIT_ITEM_FAST_N(int3, e, MSG_NOZZLE_N, &thermalManager.temp_hotend[e].target, 0, heater_maxtemp[e] - 15, []{ thermalManager.start_watching_hotend(MenuItemBase::itemIndex); });
177
   #endif
177
   #endif

+ 1
- 1
Marlin/src/lcd/menu/menu_tune.cpp Прегледај датотеку

127
   //
127
   //
128
   #if HOTENDS == 1
128
   #if HOTENDS == 1
129
     EDIT_ITEM_FAST(int3, MSG_NOZZLE, &thermalManager.temp_hotend[0].target, 0, HEATER_0_MAXTEMP - 15, []{ thermalManager.start_watching_hotend(0); });
129
     EDIT_ITEM_FAST(int3, MSG_NOZZLE, &thermalManager.temp_hotend[0].target, 0, HEATER_0_MAXTEMP - 15, []{ thermalManager.start_watching_hotend(0); });
130
-  #elif HOTENDS > 1
130
+  #elif HAS_MULTI_HOTEND
131
     HOTEND_LOOP()
131
     HOTEND_LOOP()
132
       EDIT_ITEM_FAST_N(int3, e, MSG_NOZZLE_N, &thermalManager.temp_hotend[e].target, 0, heater_maxtemp[e] - 15, []{ thermalManager.start_watching_hotend(MenuItemBase::itemIndex); });
132
       EDIT_ITEM_FAST_N(int3, e, MSG_NOZZLE_N, &thermalManager.temp_hotend[e].target, 0, heater_maxtemp[e] - 15, []{ thermalManager.start_watching_hotend(MenuItemBase::itemIndex); });
133
   #endif
133
   #endif

+ 1
- 1
Marlin/src/module/configuration_store.cpp Прегледај датотеку

3194
         HOTEND_LOOP() {
3194
         HOTEND_LOOP() {
3195
           CONFIG_ECHO_START();
3195
           CONFIG_ECHO_START();
3196
           SERIAL_ECHOPAIR_P(
3196
           SERIAL_ECHOPAIR_P(
3197
-            #if HOTENDS > 1 && ENABLED(PID_PARAMS_PER_HOTEND)
3197
+            #if HAS_MULTI_HOTEND && ENABLED(PID_PARAMS_PER_HOTEND)
3198
               PSTR("  M301 E"), e,
3198
               PSTR("  M301 E"), e,
3199
               SP_P_STR
3199
               SP_P_STR
3200
             #else
3200
             #else

+ 27
- 27
Marlin/src/module/temperature.cpp Прегледај датотеку

140
   bool Temperature::adaptive_fan_slowing = true;
140
   bool Temperature::adaptive_fan_slowing = true;
141
 #endif
141
 #endif
142
 
142
 
143
-#if HOTENDS
143
+#if HAS_HOTEND
144
   hotend_info_t Temperature::temp_hotend[HOTEND_TEMPS]; // = { 0 }
144
   hotend_info_t Temperature::temp_hotend[HOTEND_TEMPS]; // = { 0 }
145
 #endif
145
 #endif
146
 
146
 
298
 
298
 
299
 #define TEMPDIR(N) ((HEATER_##N##_RAW_LO_TEMP) < (HEATER_##N##_RAW_HI_TEMP) ? 1 : -1)
299
 #define TEMPDIR(N) ((HEATER_##N##_RAW_LO_TEMP) < (HEATER_##N##_RAW_HI_TEMP) ? 1 : -1)
300
 
300
 
301
-#if HOTENDS
301
+#if HAS_HOTEND
302
   // Init mintemp and maxtemp with extreme values to prevent false errors during startup
302
   // Init mintemp and maxtemp with extreme values to prevent false errors during startup
303
   constexpr temp_range_t sensor_heater_0 { HEATER_0_RAW_LO_TEMP, HEATER_0_RAW_HI_TEMP, 0, 16383 },
303
   constexpr temp_range_t sensor_heater_0 { HEATER_0_RAW_LO_TEMP, HEATER_0_RAW_HI_TEMP, 0, 16383 },
304
                          sensor_heater_1 { HEATER_1_RAW_LO_TEMP, HEATER_1_RAW_HI_TEMP, 0, 16383 },
304
                          sensor_heater_1 { HEATER_1_RAW_LO_TEMP, HEATER_1_RAW_HI_TEMP, 0, 16383 },
655
     #endif
655
     #endif
656
     default:
656
     default:
657
       return (0
657
       return (0
658
-        #if HOTENDS
658
+        #if HAS_HOTEND
659
           + temp_hotend[heater_id].soft_pwm_amount
659
           + temp_hotend[heater_id].soft_pwm_amount
660
         #endif
660
         #endif
661
       );
661
       );
672
     #define _EFAN(B,A) _EFANOVERLAP(A,B) ? B :
672
     #define _EFAN(B,A) _EFANOVERLAP(A,B) ? B :
673
     static const uint8_t fanBit[] PROGMEM = {
673
     static const uint8_t fanBit[] PROGMEM = {
674
       0
674
       0
675
-      #if HOTENDS > 1
675
+      #if HAS_MULTI_HOTEND
676
         #define _NEXT_FAN(N) , REPEAT2(N,_EFAN,N) N
676
         #define _NEXT_FAN(N) , REPEAT2(N,_EFAN,N) N
677
         RREPEAT_S(1, HOTENDS, _NEXT_FAN)
677
         RREPEAT_S(1, HOTENDS, _NEXT_FAN)
678
       #endif
678
       #endif
821
   _temp_error(heater, PSTR(STR_T_MINTEMP), GET_TEXT(MSG_ERR_MINTEMP));
821
   _temp_error(heater, PSTR(STR_T_MINTEMP), GET_TEXT(MSG_ERR_MINTEMP));
822
 }
822
 }
823
 
823
 
824
-#if HOTENDS
824
+#if HAS_HOTEND
825
   #if ENABLED(PID_DEBUG)
825
   #if ENABLED(PID_DEBUG)
826
     extern bool pid_debug_flag;
826
     extern bool pid_debug_flag;
827
   #endif
827
   #endif
1036
 
1036
 
1037
   millis_t ms = millis();
1037
   millis_t ms = millis();
1038
 
1038
 
1039
-  #if HOTENDS
1039
+  #if HAS_HOTEND
1040
 
1040
 
1041
     HOTEND_LOOP() {
1041
     HOTEND_LOOP() {
1042
       #if ENABLED(THERMAL_PROTECTION_HOTENDS)
1042
       #if ENABLED(THERMAL_PROTECTION_HOTENDS)
1384
   }
1384
   }
1385
 #endif
1385
 #endif
1386
 
1386
 
1387
-#if HOTENDS
1387
+#if HAS_HOTEND
1388
   // Derived from RepRap FiveD extruder::getTemperature()
1388
   // Derived from RepRap FiveD extruder::getTemperature()
1389
   // For hot end temperature measurement.
1389
   // For hot end temperature measurement.
1390
   float Temperature::analog_to_celsius_hotend(const int raw, const uint8_t e) {
1390
   float Temperature::analog_to_celsius_hotend(const int raw, const uint8_t e) {
1575
   #if ENABLED(HEATER_1_USES_MAX6675)
1575
   #if ENABLED(HEATER_1_USES_MAX6675)
1576
     temp_hotend[1].raw = READ_MAX6675(1);
1576
     temp_hotend[1].raw = READ_MAX6675(1);
1577
   #endif
1577
   #endif
1578
-  #if HOTENDS
1578
+  #if HAS_HOTEND
1579
     HOTEND_LOOP() temp_hotend[e].celsius = analog_to_celsius_hotend(temp_hotend[e].raw, e);
1579
     HOTEND_LOOP() temp_hotend[e].celsius = analog_to_celsius_hotend(temp_hotend[e].raw, e);
1580
   #endif
1580
   #endif
1581
   #if HAS_HEATED_BED
1581
   #if HAS_HEATED_BED
1836
   // Wait for temperature measurement to settle
1836
   // Wait for temperature measurement to settle
1837
   delay(250);
1837
   delay(250);
1838
 
1838
 
1839
-  #if HOTENDS
1839
+  #if HAS_HOTEND
1840
 
1840
 
1841
     #define _TEMP_MIN_E(NR) do{ \
1841
     #define _TEMP_MIN_E(NR) do{ \
1842
       temp_range[NR].mintemp = HEATER_ ##NR## _MINTEMP; \
1842
       temp_range[NR].mintemp = HEATER_ ##NR## _MINTEMP; \
1855
     #ifdef HEATER_0_MAXTEMP
1855
     #ifdef HEATER_0_MAXTEMP
1856
       _TEMP_MAX_E(0);
1856
       _TEMP_MAX_E(0);
1857
     #endif
1857
     #endif
1858
-    #if HOTENDS > 1
1858
+    #if HAS_MULTI_HOTEND
1859
       #ifdef HEATER_1_MINTEMP
1859
       #ifdef HEATER_1_MINTEMP
1860
         _TEMP_MIN_E(1);
1860
         _TEMP_MIN_E(1);
1861
       #endif
1861
       #endif
1910
           #endif // HOTENDS > 4
1910
           #endif // HOTENDS > 4
1911
         #endif // HOTENDS > 3
1911
         #endif // HOTENDS > 3
1912
       #endif // HOTENDS > 2
1912
       #endif // HOTENDS > 2
1913
-    #endif // HOTENDS > 1
1913
+    #endif // HAS_MULTI_HOTEND
1914
 
1914
 
1915
   #endif // HOTENDS
1915
   #endif // HOTENDS
1916
 
1916
 
2070
     planner.autotemp_enabled = false;
2070
     planner.autotemp_enabled = false;
2071
   #endif
2071
   #endif
2072
 
2072
 
2073
-  #if HOTENDS
2073
+  #if HAS_HOTEND
2074
     HOTEND_LOOP() setTargetHotend(0, e);
2074
     HOTEND_LOOP() setTargetHotend(0, e);
2075
   #endif
2075
   #endif
2076
 
2076
 
2113
 #if ENABLED(PRINTJOB_TIMER_AUTOSTART)
2113
 #if ENABLED(PRINTJOB_TIMER_AUTOSTART)
2114
 
2114
 
2115
   bool Temperature::over_autostart_threshold() {
2115
   bool Temperature::over_autostart_threshold() {
2116
-    #if HOTENDS
2116
+    #if HAS_HOTEND
2117
       HOTEND_LOOP() if (degTargetHotend(e) > (EXTRUDE_MINTEMP) / 2) return true;
2117
       HOTEND_LOOP() if (degTargetHotend(e) > (EXTRUDE_MINTEMP) / 2) return true;
2118
     #endif
2118
     #endif
2119
     #if HAS_HEATED_BED
2119
     #if HAS_HEATED_BED
2358
     filwidth.reading_ready();
2358
     filwidth.reading_ready();
2359
   #endif
2359
   #endif
2360
 
2360
 
2361
-  #if HOTENDS
2361
+  #if HAS_HOTEND
2362
     HOTEND_LOOP() temp_hotend[e].reset();
2362
     HOTEND_LOOP() temp_hotend[e].reset();
2363
     #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
2363
     #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
2364
       temp_hotend[1].reset();
2364
       temp_hotend[1].reset();
2387
     joystick.z.reset();
2387
     joystick.z.reset();
2388
   #endif
2388
   #endif
2389
 
2389
 
2390
-  #if HOTENDS
2390
+  #if HAS_HOTEND
2391
 
2391
 
2392
     static constexpr int8_t temp_dir[] = {
2392
     static constexpr int8_t temp_dir[] = {
2393
       #if ENABLED(HEATER_0_USES_MAX6675)
2393
       #if ENABLED(HEATER_0_USES_MAX6675)
2395
       #else
2395
       #else
2396
         TEMPDIR(0)
2396
         TEMPDIR(0)
2397
       #endif
2397
       #endif
2398
-      #if HOTENDS > 1
2398
+      #if HAS_MULTI_HOTEND
2399
         #define _TEMPDIR(N) , TEMPDIR(N)
2399
         #define _TEMPDIR(N) , TEMPDIR(N)
2400
         #if ENABLED(HEATER_1_USES_MAX6675)
2400
         #if ENABLED(HEATER_1_USES_MAX6675)
2401
           , 0
2401
           , 0
2405
         #if HOTENDS > 2
2405
         #if HOTENDS > 2
2406
           REPEAT_S(2, HOTENDS, _TEMPDIR)
2406
           REPEAT_S(2, HOTENDS, _TEMPDIR)
2407
         #endif // HOTENDS > 2
2407
         #endif // HOTENDS > 2
2408
-      #endif // HOTENDS > 1
2408
+      #endif // HAS_MULTI_HOTEND
2409
     };
2409
     };
2410
 
2410
 
2411
     LOOP_L_N(e, COUNT(temp_dir)) {
2411
     LOOP_L_N(e, COUNT(temp_dir)) {
2531
     static bool ADCKey_pressed = false;
2531
     static bool ADCKey_pressed = false;
2532
   #endif
2532
   #endif
2533
 
2533
 
2534
-  #if HOTENDS
2534
+  #if HAS_HOTEND
2535
     static SoftPWM soft_pwm_hotend[HOTENDS];
2535
     static SoftPWM soft_pwm_hotend[HOTENDS];
2536
   #endif
2536
   #endif
2537
 
2537
 
2565
     if (pwm_count_tmp >= 127) {
2565
     if (pwm_count_tmp >= 127) {
2566
       pwm_count_tmp -= 127;
2566
       pwm_count_tmp -= 127;
2567
 
2567
 
2568
-      #if HOTENDS
2568
+      #if HAS_HOTEND
2569
         #define _PWM_MOD_E(N) _PWM_MOD(N,soft_pwm_hotend[N],temp_hotend[N]);
2569
         #define _PWM_MOD_E(N) _PWM_MOD(N,soft_pwm_hotend[N],temp_hotend[N]);
2570
         REPEAT(HOTENDS, _PWM_MOD_E);
2570
         REPEAT(HOTENDS, _PWM_MOD_E);
2571
       #endif
2571
       #endif
2612
     }
2612
     }
2613
     else {
2613
     else {
2614
       #define _PWM_LOW(N,S) do{ if (S.count <= pwm_count_tmp) WRITE_HEATER_##N(LOW); }while(0)
2614
       #define _PWM_LOW(N,S) do{ if (S.count <= pwm_count_tmp) WRITE_HEATER_##N(LOW); }while(0)
2615
-      #if HOTENDS
2615
+      #if HAS_HOTEND
2616
         #define _PWM_LOW_E(N) _PWM_LOW(N, soft_pwm_hotend[N]);
2616
         #define _PWM_LOW_E(N) _PWM_LOW(N, soft_pwm_hotend[N]);
2617
         REPEAT(HOTENDS, _PWM_LOW_E);
2617
         REPEAT(HOTENDS, _PWM_LOW_E);
2618
       #endif
2618
       #endif
2678
 
2678
 
2679
     if (slow_pwm_count == 0) {
2679
     if (slow_pwm_count == 0) {
2680
 
2680
 
2681
-      #if HOTENDS
2681
+      #if HAS_HOTEND
2682
         #define _SLOW_PWM_E(N) _SLOW_PWM(N, soft_pwm_hotend[N], temp_hotend[N]);
2682
         #define _SLOW_PWM_E(N) _SLOW_PWM(N, soft_pwm_hotend[N], temp_hotend[N]);
2683
         REPEAT(HOTENDS, _SLOW_PWM_E);
2683
         REPEAT(HOTENDS, _SLOW_PWM_E);
2684
       #endif
2684
       #endif
2689
 
2689
 
2690
     } // slow_pwm_count == 0
2690
     } // slow_pwm_count == 0
2691
 
2691
 
2692
-    #if HOTENDS
2692
+    #if HAS_HOTEND
2693
       #define _PWM_OFF_E(N) _PWM_OFF(N, soft_pwm_hotend[N]);
2693
       #define _PWM_OFF_E(N) _PWM_OFF(N, soft_pwm_hotend[N]);
2694
       REPEAT(HOTENDS, _PWM_OFF_E);
2694
       REPEAT(HOTENDS, _PWM_OFF_E);
2695
     #endif
2695
     #endif
2772
       slow_pwm_count++;
2772
       slow_pwm_count++;
2773
       slow_pwm_count &= 0x7F;
2773
       slow_pwm_count &= 0x7F;
2774
 
2774
 
2775
-      #if HOTENDS
2775
+      #if HAS_HOTEND
2776
         HOTEND_LOOP() soft_pwm_hotend[e].dec();
2776
         HOTEND_LOOP() soft_pwm_hotend[e].dec();
2777
       #endif
2777
       #endif
2778
       #if HAS_HEATED_BED
2778
       #if HAS_HEATED_BED
2990
     }
2990
     }
2991
     SERIAL_CHAR(' ');
2991
     SERIAL_CHAR(' ');
2992
     SERIAL_CHAR(k);
2992
     SERIAL_CHAR(k);
2993
-    #if HOTENDS > 1
2993
+    #if HAS_MULTI_HOTEND
2994
       if (e >= 0) SERIAL_CHAR('0' + e);
2994
       if (e >= 0) SERIAL_CHAR('0' + e);
2995
     #endif
2995
     #endif
2996
     SERIAL_CHAR(':');
2996
     SERIAL_CHAR(':');
3052
         , H_PROBE
3052
         , H_PROBE
3053
       );
3053
       );
3054
     #endif // HAS_TEMP_PROBE
3054
     #endif // HAS_TEMP_PROBE
3055
-    #if HOTENDS > 1
3055
+    #if HAS_MULTI_HOTEND
3056
       HOTEND_LOOP() print_heater_state(degHotend(e), degTargetHotend(e)
3056
       HOTEND_LOOP() print_heater_state(degHotend(e), degTargetHotend(e)
3057
         #if ENABLED(SHOW_TEMP_ADC_VALUES)
3057
         #if ENABLED(SHOW_TEMP_ADC_VALUES)
3058
           , rawHotendTemp(e)
3058
           , rawHotendTemp(e)
3067
     #if HAS_HEATED_CHAMBER
3067
     #if HAS_HEATED_CHAMBER
3068
       SERIAL_ECHOPAIR(" C@:", getHeaterPower(H_CHAMBER));
3068
       SERIAL_ECHOPAIR(" C@:", getHeaterPower(H_CHAMBER));
3069
     #endif
3069
     #endif
3070
-    #if HOTENDS > 1
3070
+    #if HAS_MULTI_HOTEND
3071
       HOTEND_LOOP() {
3071
       HOTEND_LOOP() {
3072
         SERIAL_ECHOPAIR(" @", e);
3072
         SERIAL_ECHOPAIR(" @", e);
3073
         SERIAL_CHAR(':');
3073
         SERIAL_CHAR(':');
3096
     void Temperature::set_heating_message(const uint8_t e) {
3096
     void Temperature::set_heating_message(const uint8_t e) {
3097
       const bool heating = isHeatingHotend(e);
3097
       const bool heating = isHeatingHotend(e);
3098
       ui.status_printf_P(0,
3098
       ui.status_printf_P(0,
3099
-        #if HOTENDS > 1
3099
+        #if HAS_MULTI_HOTEND
3100
           PSTR("E%c " S_FMT), '1' + e
3100
           PSTR("E%c " S_FMT), '1' + e
3101
         #else
3101
         #else
3102
           PSTR("E " S_FMT)
3102
           PSTR("E " S_FMT)

+ 3
- 3
Marlin/src/module/temperature.h Прегледај датотеку

317
 
317
 
318
   public:
318
   public:
319
 
319
 
320
-    #if HOTENDS
321
       #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
320
       #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
322
         #define HOTEND_TEMPS (HOTENDS + 1)
321
         #define HOTEND_TEMPS (HOTENDS + 1)
323
       #else
322
       #else
324
         #define HOTEND_TEMPS HOTENDS
323
         #define HOTEND_TEMPS HOTENDS
325
       #endif
324
       #endif
325
+    #if HAS_HOTEND
326
       static hotend_info_t temp_hotend[HOTEND_TEMPS];
326
       static hotend_info_t temp_hotend[HOTEND_TEMPS];
327
     #endif
327
     #endif
328
     #if HAS_HEATED_BED
328
     #if HAS_HEATED_BED
496
       }
496
       }
497
     #endif
497
     #endif
498
 
498
 
499
-    #if HOTENDS
499
+    #if HAS_HOTEND
500
       static float analog_to_celsius_hotend(const int raw, const uint8_t e);
500
       static float analog_to_celsius_hotend(const int raw, const uint8_t e);
501
     #endif
501
     #endif
502
 
502
 
624
       static inline void start_watching_hotend(const uint8_t=0) {}
624
       static inline void start_watching_hotend(const uint8_t=0) {}
625
     #endif
625
     #endif
626
 
626
 
627
-    #if HOTENDS
627
+    #if HAS_HOTEND
628
 
628
 
629
       static void setTargetHotend(const int16_t celsius, const uint8_t E_NAME) {
629
       static void setTargetHotend(const int16_t celsius, const uint8_t E_NAME) {
630
         const uint8_t ee = HOTEND_INDEX;
630
         const uint8_t ee = HOTEND_INDEX;

+ 1
- 1
Marlin/src/pins/linux/pins_RAMPS_LINUX.h Прегледај датотеку

142
 // Augmentation for auto-assigning RAMPS plugs
142
 // Augmentation for auto-assigning RAMPS plugs
143
 //
143
 //
144
 #if NONE(IS_RAMPS_EEB, IS_RAMPS_EEF, IS_RAMPS_EFB, IS_RAMPS_EFF, IS_RAMPS_SF) && !PIN_EXISTS(MOSFET_D)
144
 #if NONE(IS_RAMPS_EEB, IS_RAMPS_EEF, IS_RAMPS_EFB, IS_RAMPS_EFF, IS_RAMPS_SF) && !PIN_EXISTS(MOSFET_D)
145
-  #if HOTENDS > 1
145
+  #if HAS_MULTI_HOTEND
146
     #if TEMP_SENSOR_BED
146
     #if TEMP_SENSOR_BED
147
       #define IS_RAMPS_EEB
147
       #define IS_RAMPS_EEB
148
     #else
148
     #else

+ 1
- 1
Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h Прегледај датотеку

184
 // Augmentation for auto-assigning RAMPS plugs
184
 // Augmentation for auto-assigning RAMPS plugs
185
 //
185
 //
186
 #if NONE(IS_RAMPS_EEB, IS_RAMPS_EEF, IS_RAMPS_EFB, IS_RAMPS_EFF, IS_RAMPS_SF) && !PIN_EXISTS(MOSFET_D)
186
 #if NONE(IS_RAMPS_EEB, IS_RAMPS_EEF, IS_RAMPS_EFB, IS_RAMPS_EFF, IS_RAMPS_SF) && !PIN_EXISTS(MOSFET_D)
187
-  #if HOTENDS > 1
187
+  #if HAS_MULTI_HOTEND
188
     #if TEMP_SENSOR_BED
188
     #if TEMP_SENSOR_BED
189
       #define IS_RAMPS_EEB
189
       #define IS_RAMPS_EEB
190
     #else
190
     #else

+ 1
- 1
Marlin/src/pins/mega/pins_MIGHTYBOARD_REVE.h Прегледај датотеку

159
 #define HBP_PIN                               45  // L4
159
 #define HBP_PIN                               45  // L4
160
 #define EXTRA_FET_PIN                         44  // L5
160
 #define EXTRA_FET_PIN                         44  // L5
161
 
161
 
162
-#if HOTENDS > 1
162
+#if HAS_MULTI_HOTEND
163
   #if TEMP_SENSOR_BED
163
   #if TEMP_SENSOR_BED
164
     #define IS_EEB
164
     #define IS_EEB
165
   #else
165
   #else

+ 1
- 1
Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR.h Прегледај датотеку

124
 // Augmentation for auto-assigning RAMPS plugs
124
 // Augmentation for auto-assigning RAMPS plugs
125
 //
125
 //
126
 #if NONE(IS_RAMPS_EEB, IS_RAMPS_EEF, IS_RAMPS_EFB, IS_RAMPS_EFF, IS_RAMPS_SF) && !PIN_EXISTS(MOSFET_D)
126
 #if NONE(IS_RAMPS_EEB, IS_RAMPS_EEF, IS_RAMPS_EFB, IS_RAMPS_EFF, IS_RAMPS_SF) && !PIN_EXISTS(MOSFET_D)
127
-  #if HOTENDS > 1
127
+  #if HAS_MULTI_HOTEND
128
     #if TEMP_SENSOR_BED
128
     #if TEMP_SENSOR_BED
129
       #define IS_RAMPS_EEB
129
       #define IS_RAMPS_EEB
130
     #else
130
     #else

+ 1
- 1
Marlin/src/pins/ramps/pins_FORMBOT_TREX2PLUS.h Прегледај датотеку

130
 // Augmentation for auto-assigning RAMPS plugs
130
 // Augmentation for auto-assigning RAMPS plugs
131
 //
131
 //
132
 #if NONE(IS_RAMPS_EEB, IS_RAMPS_EEF, IS_RAMPS_EFB, IS_RAMPS_EFF, IS_RAMPS_SF) && !PIN_EXISTS(MOSFET_D)
132
 #if NONE(IS_RAMPS_EEB, IS_RAMPS_EEF, IS_RAMPS_EFB, IS_RAMPS_EFF, IS_RAMPS_SF) && !PIN_EXISTS(MOSFET_D)
133
-  #if HOTENDS > 1
133
+  #if HAS_MULTI_HOTEND
134
     #if TEMP_SENSOR_BED
134
     #if TEMP_SENSOR_BED
135
       #define IS_RAMPS_EEB
135
       #define IS_RAMPS_EEB
136
     #else
136
     #else

+ 1
- 1
Marlin/src/pins/ramps/pins_RAMPS.h Прегледај датотеку

180
 // Augmentation for auto-assigning RAMPS plugs
180
 // Augmentation for auto-assigning RAMPS plugs
181
 //
181
 //
182
 #if NONE(IS_RAMPS_EEB, IS_RAMPS_EEF, IS_RAMPS_EFB, IS_RAMPS_EFF, IS_RAMPS_SF) && !PIN_EXISTS(MOSFET_D)
182
 #if NONE(IS_RAMPS_EEB, IS_RAMPS_EEF, IS_RAMPS_EFB, IS_RAMPS_EFF, IS_RAMPS_SF) && !PIN_EXISTS(MOSFET_D)
183
-  #if HOTENDS > 1
183
+  #if HAS_MULTI_HOTEND
184
     #if TEMP_SENSOR_BED
184
     #if TEMP_SENSOR_BED
185
       #define IS_RAMPS_EEB
185
       #define IS_RAMPS_EEB
186
     #else
186
     #else

+ 2
- 2
Marlin/src/pins/ramps/pins_TRIGORILLA_14.h Прегледај датотеку

59
 
59
 
60
 #define RAMPS_D10_PIN            TG_HEATER_0_PIN  // HEATER_0_PIN is always RAMPS_D10_PIN in pins_RAMPS.h
60
 #define RAMPS_D10_PIN            TG_HEATER_0_PIN  // HEATER_0_PIN is always RAMPS_D10_PIN in pins_RAMPS.h
61
 
61
 
62
-#if HOTENDS > 1                                   // EEF and EEB
62
+#if HAS_MULTI_HOTEND                                   // EEF and EEB
63
   #define RAMPS_D9_PIN           TG_HEATER_1_PIN
63
   #define RAMPS_D9_PIN           TG_HEATER_1_PIN
64
   #if !TEMP_SENSOR_BED
64
   #if !TEMP_SENSOR_BED
65
     // EEF
65
     // EEF
79
   #define RAMPS_D8_PIN               TG_FAN0_PIN
79
   #define RAMPS_D8_PIN               TG_FAN0_PIN
80
 #endif
80
 #endif
81
 
81
 
82
-#if HOTENDS > 1 || TEMP_SENSOR_BED                // EEF, EEB, EFB
82
+#if HAS_MULTI_HOTEND || TEMP_SENSOR_BED                // EEF, EEB, EFB
83
   #define FAN1_PIN                   TG_FAN1_PIN
83
   #define FAN1_PIN                   TG_FAN1_PIN
84
 #endif
84
 #endif
85
 #define FAN2_PIN                     TG_FAN2_PIN
85
 #define FAN2_PIN                     TG_FAN2_PIN

+ 3
- 3
Marlin/src/pins/sensitive_pins.h Прегледај датотеку

423
 #define _H6_PINS
423
 #define _H6_PINS
424
 #define _H7_PINS
424
 #define _H7_PINS
425
 
425
 
426
-#if HOTENDS
426
+#if HAS_HOTEND
427
   #undef _H0_PINS
427
   #undef _H0_PINS
428
   #define _H0_PINS HEATER_0_PIN, E0_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_0_PIN),
428
   #define _H0_PINS HEATER_0_PIN, E0_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_0_PIN),
429
-  #if HOTENDS > 1
429
+  #if HAS_MULTI_HOTEND
430
     #undef _H1_PINS
430
     #undef _H1_PINS
431
     #define _H1_PINS HEATER_1_PIN, E1_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_1_PIN),
431
     #define _H1_PINS HEATER_1_PIN, E1_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_1_PIN),
432
     #if HOTENDS > 2
432
     #if HOTENDS > 2
453
         #endif // HOTENDS > 4
453
         #endif // HOTENDS > 4
454
       #endif // HOTENDS > 3
454
       #endif // HOTENDS > 3
455
     #endif // HOTENDS > 2
455
     #endif // HOTENDS > 2
456
-  #endif // HOTENDS > 1
456
+  #endif // HAS_MULTI_HOTEND
457
 #endif // HOTENDS
457
 #endif // HOTENDS
458
 
458
 
459
 //
459
 //

Loading…
Откажи
Сачувај