Browse Source

Refactor PRINTER_EVENT_LEDS, apply to M303 (#12038)

Co-Authored-By: Giuliano Zaro <gmagician@users.noreply.github.com>
Giuliano Zaro 6 years ago
parent
commit
d43d4e4219

+ 2
- 6
Marlin/src/feature/leds/leds.h View File

@@ -19,15 +19,13 @@
19 19
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20 20
  *
21 21
  */
22
+#pragma once
22 23
 
23 24
 /**
24 25
  * leds.h - Marlin general RGB LED support
25 26
  */
26 27
 
27
-#ifndef __LEDS_H__
28
-#define __LEDS_H__
29
-
30
-#include "../../inc/MarlinConfig.h"
28
+#include "../../inc/MarlinConfigPre.h"
31 29
 
32 30
 #if ENABLED(NEOPIXEL_LED)
33 31
   #include "neopixel.h"
@@ -180,5 +178,3 @@ public:
180 178
 };
181 179
 
182 180
 extern LEDLights leds;
183
-
184
-#endif // __LEDS_H__

+ 81
- 0
Marlin/src/feature/leds/printer_event_leds.cpp View File

@@ -0,0 +1,81 @@
1
+/**
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
4
+ *
5
+ * Based on Sprinter and grbl.
6
+ * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
7
+ *
8
+ * This program is free software: you can redistribute it and/or modify
9
+ * it under the terms of the GNU General Public License as published by
10
+ * the Free Software Foundation, either version 3 of the License, or
11
+ * (at your option) any later version.
12
+ *
13
+ * This program is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
+ * GNU General Public License for more details.
17
+ *
18
+ * You should have received a copy of the GNU General Public License
19
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
+ *
21
+ */
22
+
23
+/**
24
+ * printer_event_leds.cpp - LED color changing based on printer status
25
+ */
26
+
27
+#include "../../inc/MarlinConfigPre.h"
28
+
29
+#if ENABLED(PRINTER_EVENT_LEDS)
30
+
31
+#include "printer_event_leds.h"
32
+
33
+PrinterEventLEDs printerEventLEDs;
34
+
35
+#if HAS_LEDS_OFF_FLAG
36
+  bool PrinterEventLEDs::leds_off_after_print; // = false
37
+#endif
38
+
39
+#if HAS_TEMP_HOTEND || HAS_HEATED_BED
40
+
41
+  uint8_t PrinterEventLEDs::old_intensity = 0;
42
+
43
+  inline uint8_t pel_intensity(const float &start, const float &current, const float &target) {
44
+    return (uint8_t)map(constrain(current, start, target), start, target, 0.f, 255.f);
45
+  }
46
+
47
+  inline void pel_set_rgb(const uint8_t r, const uint8_t g, const uint8_t b) {
48
+    leds.set_color(
49
+      MakeLEDColor(r, g, b, 0, pixels.getBrightness())
50
+        #if ENABLED(NEOPIXEL_IS_SEQUENTIAL)
51
+          , true
52
+        #endif
53
+      );
54
+  }
55
+
56
+#endif
57
+
58
+#if HAS_TEMP_HOTEND
59
+
60
+  void PrinterEventLEDs::onHotendHeating(const float &start, const float &current, const float &target) {
61
+    const uint8_t blue = pel_intensity(start, current, target);
62
+    if (blue != old_intensity) {
63
+      old_intensity = blue;
64
+      pel_set_rgb(255, 0, 255 - blue);
65
+    }
66
+  }
67
+
68
+#endif
69
+
70
+#if HAS_HEATED_BED
71
+
72
+  void PrinterEventLEDs::onBedHeating(const float &start, const float &current, const float &target) {
73
+    const uint8_t red = pel_intensity(start, current, target);
74
+    if (red != old_intensity) {
75
+      old_intensity = red;
76
+      pel_set_rgb(red, 0, 255);
77
+    }
78
+  }
79
+#endif
80
+
81
+#endif // PRINTER_EVENT_LEDS

+ 79
- 0
Marlin/src/feature/leds/printer_event_leds.h View File

@@ -0,0 +1,79 @@
1
+/**
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
4
+ *
5
+ * Based on Sprinter and grbl.
6
+ * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
7
+ *
8
+ * This program is free software: you can redistribute it and/or modify
9
+ * it under the terms of the GNU General Public License as published by
10
+ * the Free Software Foundation, either version 3 of the License, or
11
+ * (at your option) any later version.
12
+ *
13
+ * This program is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
+ * GNU General Public License for more details.
17
+ *
18
+ * You should have received a copy of the GNU General Public License
19
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
+ *
21
+ */
22
+#pragma once
23
+
24
+/**
25
+ * printer_event_leds.h - LED color changing based on printer status
26
+ */
27
+
28
+#include "leds.h"
29
+#include "../../inc/MarlinConfig.h"
30
+
31
+class PrinterEventLEDs {
32
+private:
33
+  static uint8_t old_intensity;
34
+
35
+  #if HAS_LEDS_OFF_FLAG
36
+    static bool leds_off_after_print;
37
+  #endif
38
+
39
+public:
40
+  #if HAS_TEMP_HOTEND
41
+    FORCE_INLINE static void onHotendHeatingStart() { old_intensity = 0; }
42
+    static void onHotendHeating(const float &start, const float &current, const float &target);
43
+  #endif
44
+
45
+  #if HAS_HEATED_BED
46
+    FORCE_INLINE static void onBedHeatingStart() { old_intensity = 127; }
47
+    static void onBedHeating(const float &start, const float &current, const float &target);
48
+  #endif
49
+
50
+  #if HAS_TEMP_HOTEND || HAS_HEATED_BED
51
+    FORCE_INLINE static void onHeated()     { leds.set_white(); }
52
+    FORCE_INLINE static void onHeatersOff() { leds.set_off(); }
53
+  #endif
54
+
55
+  #if ENABLED(SDSUPPORT)
56
+
57
+    FORCE_INLINE static void onPrintCompleted() {
58
+      leds.set_green();
59
+      #if HAS_LEDS_OFF_FLAG
60
+        leds_off_after_print = true;
61
+      #else
62
+        safe_delay(2000);
63
+        leds.set_off();
64
+      #endif
65
+    }
66
+
67
+    FORCE_INLINE static void onResumeAfterWait() {
68
+      #if HAS_LEDS_OFF_FLAG
69
+        if (leds_off_after_print) {
70
+          leds.set_off();
71
+          leds_off_after_print = false;
72
+        }
73
+      #endif
74
+    }
75
+
76
+  #endif // SDSUPPORT
77
+};
78
+
79
+extern PrinterEventLEDs printerEventLEDs;

+ 5
- 5
Marlin/src/feature/leds/tempstat.cpp View File

@@ -32,7 +32,7 @@
32 32
 #include "../../module/temperature.h"
33 33
 
34 34
 void handle_status_leds(void) {
35
-  static bool red_led = false;
35
+  static uint8_t red_led = LOW;
36 36
   static millis_t next_status_led_update_ms = 0;
37 37
   if (ELAPSED(millis(), next_status_led_update_ms)) {
38 38
     next_status_led_update_ms += 500; // Update every 0.5s
@@ -42,16 +42,16 @@ void handle_status_leds(void) {
42 42
     #endif
43 43
     HOTEND_LOOP()
44 44
       max_temp = MAX(max_temp, thermalManager.degHotend(e), thermalManager.degTargetHotend(e));
45
-    const bool new_led = (max_temp > 55.0) ? true : (max_temp < 54.0) ? false : red_led;
45
+    const uint8_t new_led = (max_temp > 55.0) ? HIGH : (max_temp < 54.0) ? LOW : red_led;
46 46
     if (new_led != red_led) {
47 47
       red_led = new_led;
48 48
       #if PIN_EXISTS(STAT_LED_RED)
49
-        WRITE(STAT_LED_RED_PIN, new_led ? HIGH : LOW);
49
+        WRITE(STAT_LED_RED_PIN, new_led);
50 50
         #if PIN_EXISTS(STAT_LED_BLUE)
51
-          WRITE(STAT_LED_BLUE_PIN, new_led ? LOW : HIGH);
51
+          WRITE(STAT_LED_BLUE_PIN, !new_led);
52 52
         #endif
53 53
       #else
54
-        WRITE(STAT_LED_BLUE_PIN, new_led ? HIGH : LOW);
54
+        WRITE(STAT_LED_BLUE_PIN, new_led);
55 55
       #endif
56 56
     }
57 57
   }

+ 0
- 4
Marlin/src/gcode/gcode.h View File

@@ -336,10 +336,6 @@ public:
336 336
     #define KEEPALIVE_STATE(n) NOOP
337 337
   #endif
338 338
 
339
-  #if ENABLED(PRINTER_EVENT_LEDS) && ENABLED(SDSUPPORT) && HAS_RESUME_CONTINUE
340
-    static bool lights_off_after_print;
341
-  #endif
342
-
343 339
   static void dwell(millis_t time);
344 340
 
345 341
 private:

+ 4
- 8
Marlin/src/gcode/lcd/M0_M1.cpp View File

@@ -33,9 +33,8 @@
33 33
 
34 34
 #include "../../sd/cardreader.h"
35 35
 
36
-#if ENABLED(PRINTER_EVENT_LEDS) && ENABLED(SDSUPPORT)
37
-  bool GcodeSuite::lights_off_after_print;
38
-  #include "../../feature/leds/leds.h"
36
+#if HAS_LEDS_OFF_FLAG
37
+  #include "../../feature/leds/printer_event_leds.h"
39 38
 #endif
40 39
 
41 40
 /**
@@ -90,11 +89,8 @@ void GcodeSuite::M0_M1() {
90 89
   else
91 90
     while (wait_for_user) idle();
92 91
 
93
-  #if ENABLED(PRINTER_EVENT_LEDS) && ENABLED(SDSUPPORT)
94
-    if (lights_off_after_print) {
95
-      leds.set_off();
96
-      lights_off_after_print = false;
97
-    }
92
+  #if HAS_LEDS_OFF_FLAG
93
+    printerEventLEDs.onResumeAfterWait();
98 94
   #endif
99 95
 
100 96
   #if ENABLED(ULTIPANEL)

+ 3
- 8
Marlin/src/gcode/queue.cpp View File

@@ -33,8 +33,8 @@
33 33
 #include "../module/temperature.h"
34 34
 #include "../Marlin.h"
35 35
 
36
-#if HAS_COLOR_LEDS
37
-  #include "../feature/leds/leds.h"
36
+#if ENABLED(PRINTER_EVENT_LEDS)
37
+  #include "../feature/leds/printer_event_leds.h"
38 38
 #endif
39 39
 
40 40
 #if ENABLED(POWER_LOSS_RECOVERY)
@@ -484,10 +484,8 @@ inline void get_serial_commands() {
484 484
           else {
485 485
             SERIAL_PROTOCOLLNPGM(MSG_FILE_PRINTED);
486 486
             #if ENABLED(PRINTER_EVENT_LEDS)
487
-              LCD_MESSAGEPGM(MSG_INFO_COMPLETED_PRINTS);
488
-              leds.set_green();
487
+              printerEventLEDs.onPrintCompleted();
489 488
               #if HAS_RESUME_CONTINUE
490
-                gcode.lights_off_after_print = true;
491 489
                 enqueue_and_echo_commands_P(PSTR("M0 S"
492 490
                   #if ENABLED(NEWPANEL)
493 491
                     "1800"
@@ -495,9 +493,6 @@ inline void get_serial_commands() {
495 493
                     "60"
496 494
                   #endif
497 495
                 ));
498
-              #else
499
-                safe_delay(2000);
500
-                leds.set_off();
501 496
               #endif
502 497
             #endif // PRINTER_EVENT_LEDS
503 498
           }

+ 0
- 4
Marlin/src/gcode/temperature/M104_M109.cpp View File

@@ -31,10 +31,6 @@
31 31
   #include "../../module/printcounter.h"
32 32
 #endif
33 33
 
34
-#if ENABLED(PRINTER_EVENT_LEDS)
35
-  #include "../../feature/leds/leds.h"
36
-#endif
37
-
38 34
 #if ENABLED(SINGLENOZZLE)
39 35
   #include "../../module/tool_change.h"
40 36
 #endif

+ 1
- 0
Marlin/src/inc/Conditionals_LCD.h View File

@@ -545,6 +545,7 @@
545 545
 #define HAS_SOFTWARE_ENDSTOPS (ENABLED(MIN_SOFTWARE_ENDSTOPS) || ENABLED(MAX_SOFTWARE_ENDSTOPS))
546 546
 #define HAS_RESUME_CONTINUE (ENABLED(EXTENSIBLE_UI) || ENABLED(NEWPANEL) || ENABLED(EMERGENCY_PARSER))
547 547
 #define HAS_COLOR_LEDS (ENABLED(BLINKM) || ENABLED(RGB_LED) || ENABLED(RGBW_LED) || ENABLED(PCA9632) || ENABLED(NEOPIXEL_LED))
548
+#define HAS_LEDS_OFF_FLAG (ENABLED(PRINTER_EVENT_LEDS) && ENABLED(SDSUPPORT) && HAS_RESUME_CONTINUE)
548 549
 
549 550
 #define Z_MULTI_STEPPER_DRIVERS (ENABLED(Z_DUAL_STEPPER_DRIVERS) || ENABLED(Z_TRIPLE_STEPPER_DRIVERS))
550 551
 #define Z_MULTI_ENDSTOPS (ENABLED(Z_DUAL_ENDSTOPS) || ENABLED(Z_TRIPLE_ENDSTOPS))

+ 3
- 3
Marlin/src/inc/SanityCheck.h View File

@@ -1571,7 +1571,9 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
1571 1571
  * RGB_LED Requirements
1572 1572
  */
1573 1573
 #define _RGB_TEST (PIN_EXISTS(RGB_LED_R) && PIN_EXISTS(RGB_LED_G) && PIN_EXISTS(RGB_LED_B))
1574
-#if ENABLED(RGB_LED)
1574
+#if ENABLED(PRINTER_EVENT_LEDS) && !HAS_COLOR_LEDS
1575
+  #error "PRINTER_EVENT_LEDS requires BLINKM, PCA9632, RGB_LED, RGBW_LED or NEOPIXEL_LED."
1576
+#elif ENABLED(RGB_LED)
1575 1577
   #if !_RGB_TEST
1576 1578
     #error "RGB_LED requires RGB_LED_R_PIN, RGB_LED_G_PIN, and RGB_LED_B_PIN."
1577 1579
   #elif ENABLED(RGBW_LED)
@@ -1585,8 +1587,6 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
1585 1587
   #if !(PIN_EXISTS(NEOPIXEL) && NEOPIXEL_PIXELS > 0)
1586 1588
     #error "NEOPIXEL_LED requires NEOPIXEL_PIN and NEOPIXEL_PIXELS."
1587 1589
   #endif
1588
-#elif ENABLED(PRINTER_EVENT_LEDS) && DISABLED(BLINKM) && DISABLED(PCA9632) && DISABLED(NEOPIXEL_LED)
1589
-  #error "PRINTER_EVENT_LEDS requires BLINKM, PCA9632, RGB_LED, RGBW_LED or NEOPIXEL_LED."
1590 1590
 #endif
1591 1591
 
1592 1592
 /**

+ 1
- 5
Marlin/src/inc/Version.h View File

@@ -19,9 +19,7 @@
19 19
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20 20
  *
21 21
  */
22
-
23
-#ifndef _VERSION_H_
24
-#define _VERSION_H_
22
+#pragma once
25 23
 
26 24
 #include "../core/macros.h" // for ENABLED
27 25
 
@@ -97,5 +95,3 @@
97 95
   #define WEBSITE_URL "http://marlinfw.org"
98 96
 
99 97
 #endif // USE_AUTOMATIC_VERSIONING
100
-
101
-#endif // _VERSION_H_

+ 24
- 29
Marlin/src/module/temperature.cpp View File

@@ -52,7 +52,7 @@
52 52
 #endif
53 53
 
54 54
 #if ENABLED(PRINTER_EVENT_LEDS)
55
-  #include "../feature/leds/leds.h"
55
+  #include "../feature/leds/printer_event_leds.h"
56 56
 #endif
57 57
 
58 58
 #if HOTEND_USES_THERMISTOR
@@ -250,13 +250,19 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS];
250 250
 
251 251
     #if HAS_PID_FOR_BOTH
252 252
       #define GHV(B,H) (hotend < 0 ? (B) : (H))
253
-      #define SHV(S,B,H) if (hotend < 0) S##_bed = B; else S [hotend] = H;
253
+      #define SHV(S,B,H) do{ if (hotend < 0) S##_bed = B; else S [hotend] = H; }while(0)
254
+      #define ONHEATINGSTART() do{ if (hotend < 0) printerEventLEDs.onBedHeatingStart(); else printerEventLEDs.onHotendHeatingStart(); }while(0)
255
+      #define ONHEATING(S,C,T) do{ if (hotend < 0) printerEventLEDs.onBedHeating(S,C,T); else printerEventLEDs.onHotendHeating(S,C,T); }while(0)
254 256
     #elif ENABLED(PIDTEMPBED)
255 257
       #define GHV(B,H) B
256 258
       #define SHV(S,B,H) (S##_bed = B)
259
+      #define ONHEATINGSTART() printerEventLEDs.onBedHeatingStart()
260
+      #define ONHEATING(S,C,T) printerEventLEDs.onBedHeating(S,C,T)
257 261
     #else
258 262
       #define GHV(B,H) H
259 263
       #define SHV(S,B,H) (S [hotend] = H)
264
+      #define ONHEATINGSTART() printerEventLEDs.onHotendHeatingStart()
265
+      #define ONHEATING(S,C,T) printerEventLEDs.onHotendHeating(S,C,T)
260 266
     #endif
261 267
 
262 268
     #if WATCH_THE_BED || WATCH_HOTENDS
@@ -303,6 +309,10 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS];
303 309
     SHV(soft_pwm_amount, bias = d = (MAX_BED_POWER) >> 1, bias = d = (PID_MAX) >> 1);
304 310
 
305 311
     wait_for_heatup = true; // Can be interrupted with M108
312
+    #if ENABLED(PRINTER_EVENT_LEDS)
313
+      const float start_temp = GHV(current_temperature_bed, current_temperature[hotend]);
314
+      ONHEATINGSTART();
315
+    #endif
306 316
 
307 317
     // PID Tuning loop
308 318
     while (wait_for_heatup) {
@@ -317,6 +327,10 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS];
317 327
         NOLESS(max, current);
318 328
         NOMORE(min, current);
319 329
 
330
+        #if ENABLED(PRINTER_EVENT_LEDS)
331
+          ONHEATING(start_temp, current, target);
332
+        #endif
333
+
320 334
         #if HAS_AUTO_FAN
321 335
           if (ELAPSED(ms, next_auto_fan_check_ms)) {
322 336
             checkExtruderAutoFans();
@@ -483,6 +497,9 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS];
483 497
       lcd_update();
484 498
     }
485 499
     disable_all_heaters();
500
+    #if ENABLED(PRINTER_EVENT_LEDS)
501
+      printerEventLEDs.onHeatersOff();
502
+    #endif
486 503
   }
487 504
 
488 505
 #endif // HAS_PID_HEATING
@@ -2439,7 +2456,7 @@ void Temperature::isr() {
2439 2456
 
2440 2457
       #if ENABLED(PRINTER_EVENT_LEDS)
2441 2458
         const float start_temp = degHotend(target_extruder);
2442
-        uint8_t old_blue = 0;
2459
+        printerEventLEDs.onHotendHeatingStart();
2443 2460
       #endif
2444 2461
 
2445 2462
       float target_temp = -1.0, old_temp = 9999.0;
@@ -2477,18 +2494,7 @@ void Temperature::isr() {
2477 2494
 
2478 2495
         #if ENABLED(PRINTER_EVENT_LEDS)
2479 2496
           // Gradually change LED strip from violet to red as nozzle heats up
2480
-          if (!wants_to_cool) {
2481
-            const uint8_t blue = map(constrain(temp, start_temp, target_temp), start_temp, target_temp, 255, 0);
2482
-            if (blue != old_blue) {
2483
-              old_blue = blue;
2484
-              leds.set_color(
2485
-                MakeLEDColor(255, 0, blue, 0, pixels.getBrightness())
2486
-                #if ENABLED(NEOPIXEL_IS_SEQUENTIAL)
2487
-                  , true
2488
-                #endif
2489
-              );
2490
-            }
2491
-          }
2497
+          if (!wants_to_cool) printerEventLEDs.onHotendHeating(start_temp, temp, target_temp);
2492 2498
         #endif
2493 2499
 
2494 2500
         #if TEMP_RESIDENCY_TIME > 0
@@ -2522,7 +2528,7 @@ void Temperature::isr() {
2522 2528
       if (wait_for_heatup) {
2523 2529
         lcd_reset_status();
2524 2530
         #if ENABLED(PRINTER_EVENT_LEDS)
2525
-          leds.set_white();
2531
+          printerEventLEDs.onHeated();
2526 2532
         #endif
2527 2533
       }
2528 2534
 
@@ -2568,7 +2574,7 @@ void Temperature::isr() {
2568 2574
 
2569 2575
       #if ENABLED(PRINTER_EVENT_LEDS)
2570 2576
         const float start_temp = degBed();
2571
-        uint8_t old_red = 127;
2577
+        printerEventLEDs.onBedHeatingStart();
2572 2578
       #endif
2573 2579
 
2574 2580
       do {
@@ -2602,18 +2608,7 @@ void Temperature::isr() {
2602 2608
 
2603 2609
         #if ENABLED(PRINTER_EVENT_LEDS)
2604 2610
           // Gradually change LED strip from blue to violet as bed heats up
2605
-          if (!wants_to_cool) {
2606
-            const uint8_t red = map(constrain(temp, start_temp, target_temp), start_temp, target_temp, 0, 255);
2607
-            if (red != old_red) {
2608
-              old_red = red;
2609
-              leds.set_color(
2610
-                MakeLEDColor(red, 0, 255, 0, pixels.getBrightness())
2611
-                #if ENABLED(NEOPIXEL_IS_SEQUENTIAL)
2612
-                  , true
2613
-                #endif
2614
-              );
2615
-            }
2616
-          }
2611
+          if (!wants_to_cool) printerEventLEDs.onBedHeating(start_temp, temp, target_temp);
2617 2612
         #endif
2618 2613
 
2619 2614
         #if TEMP_BED_RESIDENCY_TIME > 0

+ 2
- 1
buildroot/share/tests/megaatmega2560_tests View File

@@ -31,7 +31,8 @@ opt_set POWER_SUPPLY 1
31 31
 opt_set GRID_MAX_POINTS_X 16
32 32
 opt_enable PIDTEMPBED FIX_MOUNTED_PROBE Z_SAFE_HOMING \
33 33
            REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT EEPROM_SETTINGS PINS_DEBUGGING \
34
-           BLINKM PCA9632 RGB_LED NEOPIXEL_LED AUTO_POWER_CONTROL NOZZLE_PARK_FEATURE FILAMENT_RUNOUT_SENSOR \
34
+           BLINKM PCA9632 RGB_LED NEOPIXEL_LED AUTO_POWER_CONTROL \
35
+           NOZZLE_PARK_FEATURE FILAMENT_RUNOUT_SENSOR \
35 36
            AUTO_BED_LEVELING_LINEAR Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE \
36 37
            SKEW_CORRECTION SKEW_CORRECTION_FOR_Z SKEW_CORRECTION_GCODE
37 38
 opt_enable_adv FWRETRACT ARC_P_CIRCLES ADVANCED_PAUSE_FEATURE CNC_WORKSPACE_PLANES CNC_COORDINATE_SYSTEMS \

Loading…
Cancel
Save