浏览代码

Optimize G-code / feature dependencies (#18919)

Scott Lahteine 4 年前
父节点
当前提交
99ba866d8d
没有帐户链接到提交者的电子邮件

+ 3
- 3
Marlin/src/MarlinCore.cpp 查看文件

189
   #include "feature/leds/tempstat.h"
189
   #include "feature/leds/tempstat.h"
190
 #endif
190
 #endif
191
 
191
 
192
-#if HAS_CASE_LIGHT
192
+#if ENABLED(CASE_LIGHT_ENABLE)
193
   #include "feature/caselight.h"
193
   #include "feature/caselight.h"
194
 #endif
194
 #endif
195
 
195
 
1082
     OUT_WRITE(STAT_LED_BLUE_PIN, LOW); // OFF
1082
     OUT_WRITE(STAT_LED_BLUE_PIN, LOW); // OFF
1083
   #endif
1083
   #endif
1084
 
1084
 
1085
-  #if HAS_CASE_LIGHT
1085
+  #if ENABLED(CASE_LIGHT_ENABLE)
1086
     #if DISABLED(CASE_LIGHT_USE_NEOPIXEL)
1086
     #if DISABLED(CASE_LIGHT_USE_NEOPIXEL)
1087
       if (PWM_PIN(CASE_LIGHT_PIN)) SET_PWM(CASE_LIGHT_PIN); else SET_OUTPUT(CASE_LIGHT_PIN);
1087
       if (PWM_PIN(CASE_LIGHT_PIN)) SET_PWM(CASE_LIGHT_PIN); else SET_OUTPUT(CASE_LIGHT_PIN);
1088
     #endif
1088
     #endif
1089
-    SETUP_RUN(update_case_light());
1089
+    SETUP_RUN(caselight.update_brightness());
1090
   #endif
1090
   #endif
1091
 
1091
 
1092
   #if ENABLED(MK2_MULTIPLEXER)
1092
   #if ENABLED(MK2_MULTIPLEXER)

Marlin/src/feature/binary_protocol.cpp → Marlin/src/feature/binary_stream.cpp 查看文件

25
 #if ENABLED(BINARY_FILE_TRANSFER)
25
 #if ENABLED(BINARY_FILE_TRANSFER)
26
 
26
 
27
 #include "../sd/cardreader.h"
27
 #include "../sd/cardreader.h"
28
-#include "binary_protocol.h"
28
+#include "binary_stream.h"
29
 
29
 
30
 char* SDFileTransferProtocol::Packet::Open::data = nullptr;
30
 char* SDFileTransferProtocol::Packet::Open::data = nullptr;
31
 size_t SDFileTransferProtocol::data_waiting, SDFileTransferProtocol::transfer_timeout, SDFileTransferProtocol::idle_timeout;
31
 size_t SDFileTransferProtocol::data_waiting, SDFileTransferProtocol::transfer_timeout, SDFileTransferProtocol::idle_timeout;
33
 
33
 
34
 BinaryStream binaryStream[NUM_SERIAL];
34
 BinaryStream binaryStream[NUM_SERIAL];
35
 
35
 
36
-#endif // BINARY_FILE_TRANSFER
36
+#endif

Marlin/src/feature/binary_protocol.h → Marlin/src/feature/binary_stream.h 查看文件


+ 25
- 23
Marlin/src/feature/caselight.cpp 查看文件

22
 
22
 
23
 #include "../inc/MarlinConfig.h"
23
 #include "../inc/MarlinConfig.h"
24
 
24
 
25
-#if HAS_CASE_LIGHT
25
+#if ENABLED(CASE_LIGHT_ENABLE)
26
 
26
 
27
-uint8_t case_light_brightness = CASE_LIGHT_DEFAULT_BRIGHTNESS;
28
-bool case_light_on = CASE_LIGHT_DEFAULT_ON;
27
+#include "caselight.h"
28
+
29
+CaseLight caselight;
30
+
31
+uint8_t CaseLight::brightness = CASE_LIGHT_DEFAULT_BRIGHTNESS;
32
+bool CaseLight::on = CASE_LIGHT_DEFAULT_ON;
29
 
33
 
30
 #if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
34
 #if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
31
-  #include "leds/leds.h"
32
-  LEDColor case_light_color =
35
+  LEDColor CaseLight::color =
33
     #ifdef CASE_LIGHT_NEOPIXEL_COLOR
36
     #ifdef CASE_LIGHT_NEOPIXEL_COLOR
34
       CASE_LIGHT_NEOPIXEL_COLOR
37
       CASE_LIGHT_NEOPIXEL_COLOR
35
     #else
38
     #else
38
   ;
41
   ;
39
 #endif
42
 #endif
40
 
43
 
41
-/**
42
- * The following are needed because ARM chips ignore a "WRITE(CASE_LIGHT_PIN,x)" command to the pins that
43
- * are directly controlled by the PWM module. In order to turn them off the brightness level needs to be
44
- * set to off.  Since we can't use the pwm register to save the last brightness level we need a variable
45
- * to save it.
46
- */
47
-uint8_t case_light_brightness_sav;   // saves brighness info so can restore when "M355 S1" received
48
-bool case_light_arg_flag;  // flag to notify if S or P argument type
49
-
50
 #ifndef INVERT_CASE_LIGHT
44
 #ifndef INVERT_CASE_LIGHT
51
   #define INVERT_CASE_LIGHT false
45
   #define INVERT_CASE_LIGHT false
52
 #endif
46
 #endif
53
 
47
 
54
-void update_case_light() {
48
+void CaseLight::update(const bool sflag) {
49
+  /**
50
+   * The brightness_sav (and sflag) is needed because ARM chips ignore
51
+   * a "WRITE(CASE_LIGHT_PIN,x)" command to the pins that are directly
52
+   * controlled by the PWM module. In order to turn them off the brightness
53
+   * level needs to be set to OFF. Since we can't use the PWM register to
54
+   * save the last brightness level we need a variable to save it.
55
+   */
56
+  static uint8_t brightness_sav;  // Save brightness info for restore on "M355 S1"
55
 
57
 
56
-  if (!(case_light_arg_flag && !case_light_on))
57
-    case_light_brightness_sav = case_light_brightness;  // save brightness except if this is an S0 argument
58
-  if (case_light_arg_flag && case_light_on)
59
-    case_light_brightness = case_light_brightness_sav;  // restore last brightens if this is an S1 argument
58
+  if (on || !sflag)
59
+    brightness_sav = brightness;  // Save brightness except for M355 S0
60
+  if (sflag && on)
61
+    brightness = brightness_sav;  // Restore last brightness for M355 S1
60
 
62
 
61
   #if ENABLED(CASE_LIGHT_USE_NEOPIXEL) || DISABLED(CASE_LIGHT_NO_BRIGHTNESS)
63
   #if ENABLED(CASE_LIGHT_USE_NEOPIXEL) || DISABLED(CASE_LIGHT_NO_BRIGHTNESS)
62
-    const uint8_t i = case_light_on ? case_light_brightness : 0, n10ct = INVERT_CASE_LIGHT ? 255 - i : i;
64
+    const uint8_t i = on ? brightness : 0, n10ct = INVERT_CASE_LIGHT ? 255 - i : i;
63
   #endif
65
   #endif
64
 
66
 
65
   #if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
67
   #if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
66
 
68
 
67
     leds.set_color(
69
     leds.set_color(
68
-      MakeLEDColor(case_light_color.r, case_light_color.g, case_light_color.b, case_light_color.w, n10ct),
70
+      MakeLEDColor(color.r, color.g, color.b, color.w, n10ct),
69
       false
71
       false
70
     );
72
     );
71
 
73
 
83
       else
85
       else
84
     #endif
86
     #endif
85
       {
87
       {
86
-        const bool s = case_light_on ? !INVERT_CASE_LIGHT : INVERT_CASE_LIGHT;
88
+        const bool s = on ? !INVERT_CASE_LIGHT : INVERT_CASE_LIGHT;
87
         WRITE(CASE_LIGHT_PIN, s ? HIGH : LOW);
89
         WRITE(CASE_LIGHT_PIN, s ? HIGH : LOW);
88
       }
90
       }
89
 
91
 
90
   #endif // !CASE_LIGHT_USE_NEOPIXEL
92
   #endif // !CASE_LIGHT_USE_NEOPIXEL
91
 }
93
 }
92
 
94
 
93
-#endif // HAS_CASE_LIGHT
95
+#endif // CASE_LIGHT_ENABLE

+ 21
- 5
Marlin/src/feature/caselight.h 查看文件

21
  */
21
  */
22
 #pragma once
22
 #pragma once
23
 
23
 
24
-extern uint8_t case_light_brightness;
25
-extern bool case_light_on;
26
-extern uint8_t case_light_brightness_sav;   // saves brighness info when case_light_on is false
27
-extern bool case_light_arg_flag;  // flag to notify if S or P argument type
24
+#include "../inc/MarlinConfigPre.h"
28
 
25
 
29
-void update_case_light();
26
+#if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
27
+  #include "leds/leds.h"
28
+#endif
29
+
30
+class CaseLight {
31
+public:
32
+  static uint8_t brightness;
33
+  static bool on;
34
+
35
+  static void update(const bool sflag);
36
+  static inline void update_brightness() { update(false); }
37
+  static inline void update_enabled() { update(true); }
38
+
39
+private:
40
+  #if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
41
+    static LEDColor color;
42
+  #endif
43
+};
44
+
45
+extern CaseLight caselight;

+ 1
- 1
Marlin/src/feature/e_parser.cpp 查看文件

21
  */
21
  */
22
 
22
 
23
 /**
23
 /**
24
- * emergency_parser.cpp - Intercept special commands directly in the serial stream
24
+ * e_parser.cpp - Intercept special commands directly in the serial stream
25
  */
25
  */
26
 
26
 
27
 #include "../inc/MarlinConfigPre.h"
27
 #include "../inc/MarlinConfigPre.h"

+ 1
- 1
Marlin/src/feature/e_parser.h 查看文件

22
 #pragma once
22
 #pragma once
23
 
23
 
24
 /**
24
 /**
25
- * emergency_parser.h - Intercept special commands directly in the serial stream
25
+ * e_parser.h - Intercept special commands directly in the serial stream
26
  */
26
  */
27
 
27
 
28
 #include "../inc/MarlinConfigPre.h"
28
 #include "../inc/MarlinConfigPre.h"

+ 39
- 37
Marlin/src/gcode/feature/caselight/M355.cpp 查看文件

20
  *
20
  *
21
  */
21
  */
22
 
22
 
23
-#include "../../gcode.h"
24
-
25
 #include "../../../inc/MarlinConfig.h"
23
 #include "../../../inc/MarlinConfig.h"
26
 
24
 
27
-#if HAS_CASE_LIGHT
28
-  #include "../../../feature/caselight.h"
25
+#if ENABLED(CASE_LIGHT_ENABLE)
29
 
26
 
30
-  /**
31
-   * M355: Turn case light on/off and set brightness
32
-   *
33
-   *   P<byte>  Set case light brightness (PWM pin required - ignored otherwise)
34
-   *
35
-   *   S<bool>  Set case light on/off
36
-   *
37
-   *   When S turns on the light on a PWM pin then the current brightness level is used/restored
38
-   *
39
-   *   M355 P200 S0 turns off the light & sets the brightness level
40
-   *   M355 S1 turns on the light with a brightness of 200 (assuming a PWM pin)
41
-   */
42
-  void GcodeSuite::M355() {
43
-    uint8_t args = 0;
44
-    if (parser.seenval('P')) {
45
-      ++args, case_light_brightness = parser.value_byte();
46
-      case_light_arg_flag = false;
47
-    }
48
-    if (parser.seenval('S')) {
49
-      ++args, case_light_on = parser.value_bool();
50
-      case_light_arg_flag = true;
51
-    }
52
-    if (args) update_case_light();
27
+#include "../../../feature/caselight.h"
28
+#include "../../gcode.h"
53
 
29
 
54
-    // always report case light status
55
-    SERIAL_ECHO_START();
56
-    if (!case_light_on) {
57
-      SERIAL_ECHOLNPGM("Case light: off");
58
-    }
59
-    else {
60
-      if (!PWM_PIN(CASE_LIGHT_PIN)) SERIAL_ECHOLNPGM("Case light: on");
61
-      else SERIAL_ECHOLNPAIR("Case light: ", case_light_brightness);
62
-    }
30
+/**
31
+ * M355: Turn case light on/off and set brightness
32
+ *
33
+ *   P<byte>  Set case light brightness (PWM pin required - ignored otherwise)
34
+ *
35
+ *   S<bool>  Set case light on/off
36
+ *
37
+ *   When S turns on the light on a PWM pin then the current brightness level is used/restored
38
+ *
39
+ *   M355 P200 S0 turns off the light & sets the brightness level
40
+ *   M355 S1 turns on the light with a brightness of 200 (assuming a PWM pin)
41
+ */
42
+void GcodeSuite::M355() {
43
+  bool didset = false;
44
+  if (parser.seenval('P')) {
45
+    didset = true;
46
+    caselight.brightness = parser.value_byte();
47
+  }
48
+  const bool sflag = parser.seenval('S');
49
+  if (sflag) {
50
+    didset = true;
51
+    caselight.on = parser.value_bool();
63
   }
52
   }
64
-#endif // HAS_CASE_LIGHT
53
+  if (didset) caselight.update(sflag);
54
+
55
+  // Always report case light status
56
+  SERIAL_ECHO_START();
57
+  SERIAL_ECHOPGM("Case light: ");
58
+  if (!caselight.on)
59
+    SERIAL_ECHOLNPGM(STR_OFF);
60
+  else {
61
+    if (!PWM_PIN(CASE_LIGHT_PIN)) SERIAL_ECHOLNPGM(STR_ON);
62
+    else SERIAL_ECHOLN(int(caselight.brightness));
63
+  }
64
+}
65
+
66
+#endif // CASE_LIGHT_ENABLE

+ 1
- 1
Marlin/src/gcode/gcode.cpp 查看文件

842
         case 351: M351(); break;                                  // M351: Toggle MS1 MS2 pins directly, S# determines MS1 or MS2, X# sets the pin high/low.
842
         case 351: M351(); break;                                  // M351: Toggle MS1 MS2 pins directly, S# determines MS1 or MS2, X# sets the pin high/low.
843
       #endif
843
       #endif
844
 
844
 
845
-      #if HAS_CASE_LIGHT
845
+      #if ENABLED(CASE_LIGHT_ENABLE)
846
         case 355: M355(); break;                                  // M355: Set case light brightness
846
         case 355: M355(); break;                                  // M355: Set case light brightness
847
       #endif
847
       #endif
848
 
848
 

+ 2
- 2
Marlin/src/gcode/gcode.h 查看文件

702
     static void M351();
702
     static void M351();
703
   #endif
703
   #endif
704
 
704
 
705
-  TERN_(HAS_CASE_LIGHT, static void M355());
705
+  TERN_(CASE_LIGHT_ENABLE, static void M355());
706
 
706
 
707
   TERN_(REPETIER_GCODE_M360, static void M360());
707
   TERN_(REPETIER_GCODE_M360, static void M360());
708
 
708
 
845
   TERN_(MAGNETIC_PARKING_EXTRUDER, static void M951());
845
   TERN_(MAGNETIC_PARKING_EXTRUDER, static void M951());
846
 
846
 
847
   TERN_(TOUCH_SCREEN_CALIBRATION, static void M995());
847
   TERN_(TOUCH_SCREEN_CALIBRATION, static void M995());
848
-  
848
+
849
   TERN_(PLATFORM_M997_SUPPORT, static void M997());
849
   TERN_(PLATFORM_M997_SUPPORT, static void M997());
850
 
850
 
851
   static void M999();
851
   static void M999();

+ 2
- 2
Marlin/src/gcode/host/M115.cpp 查看文件

93
     cap_line(PSTR("SOFTWARE_POWER"), ENABLED(PSU_CONTROL));
93
     cap_line(PSTR("SOFTWARE_POWER"), ENABLED(PSU_CONTROL));
94
 
94
 
95
     // TOGGLE_LIGHTS (M355)
95
     // TOGGLE_LIGHTS (M355)
96
-    cap_line(PSTR("TOGGLE_LIGHTS"), ENABLED(HAS_CASE_LIGHT));
97
-    cap_line(PSTR("CASE_LIGHT_BRIGHTNESS"), TERN0(HAS_CASE_LIGHT, PWM_PIN(CASE_LIGHT_PIN)));
96
+    cap_line(PSTR("TOGGLE_LIGHTS"), ENABLED(CASE_LIGHT_ENABLE));
97
+    cap_line(PSTR("CASE_LIGHT_BRIGHTNESS"), TERN0(CASE_LIGHT_ENABLE, PWM_PIN(CASE_LIGHT_PIN)));
98
 
98
 
99
     // EMERGENCY_PARSER (M108, M112, M410, M876)
99
     // EMERGENCY_PARSER (M108, M112, M410, M876)
100
     cap_line(PSTR("EMERGENCY_PARSER"), ENABLED(EMERGENCY_PARSER));
100
     cap_line(PSTR("EMERGENCY_PARSER"), ENABLED(EMERGENCY_PARSER));

+ 2
- 3
Marlin/src/gcode/queue.cpp 查看文件

40
 #endif
40
 #endif
41
 
41
 
42
 #if ENABLED(BINARY_FILE_TRANSFER)
42
 #if ENABLED(BINARY_FILE_TRANSFER)
43
-  #include "../feature/binary_protocol.h"
43
+  #include "../feature/binary_stream.h"
44
 #endif
44
 #endif
45
 
45
 
46
 #if ENABLED(POWER_LOSS_RECOVERY)
46
 #if ENABLED(POWER_LOSS_RECOVERY)
628
           #if ENABLED(SERIAL_STATS_DROPPED_RX)
628
           #if ENABLED(SERIAL_STATS_DROPPED_RX)
629
             SERIAL_ECHOLNPAIR("Dropped bytes: ", MYSERIAL0.dropped());
629
             SERIAL_ECHOLNPAIR("Dropped bytes: ", MYSERIAL0.dropped());
630
           #endif
630
           #endif
631
-
632
           #if ENABLED(SERIAL_STATS_MAX_RX_QUEUED)
631
           #if ENABLED(SERIAL_STATS_MAX_RX_QUEUED)
633
             SERIAL_ECHOLNPAIR("Max RX Queue Size: ", MYSERIAL0.rxMaxEnqueued());
632
             SERIAL_ECHOLNPAIR("Max RX Queue Size: ", MYSERIAL0.rxMaxEnqueued());
634
           #endif
633
           #endif
635
-        #endif //  !defined(__AVR__) || !defined(USBCON)
634
+        #endif
636
 
635
 
637
         ok_to_send();
636
         ok_to_send();
638
       }
637
       }

+ 0
- 15
Marlin/src/inc/Conditionals_LCD.h 查看文件

430
   #endif
430
   #endif
431
 #endif
431
 #endif
432
 
432
 
433
-#if ENABLED(SR_LCD_3W_NL)
434
-  // Feature checks for SR_LCD_3W_NL
435
-#elif EITHER(LCD_I2C_TYPE_MCP23017, LCD_I2C_TYPE_MCP23008)
436
-  #define USES_LIQUIDTWI2
437
-#elif ANY(HAS_CHARACTER_LCD, LCD_I2C_TYPE_PCF8575, LCD_I2C_TYPE_PCA8574, SR_LCD_2W_NL, LCM1602)
438
-  #define USES_LIQUIDCRYSTAL
439
-#endif
440
-
441
 #if ENABLED(ULTIPANEL) && DISABLED(NO_LCD_MENUS)
433
 #if ENABLED(ULTIPANEL) && DISABLED(NO_LCD_MENUS)
442
   #define HAS_LCD_MENU 1
434
   #define HAS_LCD_MENU 1
443
 #endif
435
 #endif
774
 #ifndef EXTRUDE_MINTEMP
766
 #ifndef EXTRUDE_MINTEMP
775
   #define EXTRUDE_MINTEMP 170
767
   #define EXTRUDE_MINTEMP 170
776
 #endif
768
 #endif
777
-
778
-/**
779
- * To check if we need the folder src/features/leds
780
- */
781
-#if ANY(TEMP_STAT_LEDS, HAS_COLOR_LEDS, HAS_CASE_LIGHT, PRINTER_EVENT_LEDS, LED_BACKLIGHT_TIMEOUT, PCA9632_BUZZER, LED_CONTROL_MENU, NEOPIXEL_LED)
782
-  #define HAS_LED_FEATURE 1
783
-#endif

+ 1
- 4
Marlin/src/inc/Conditionals_post.h 查看文件

1944
 #if PIN_EXISTS(PHOTOGRAPH)
1944
 #if PIN_EXISTS(PHOTOGRAPH)
1945
   #define HAS_PHOTOGRAPH 1
1945
   #define HAS_PHOTOGRAPH 1
1946
 #endif
1946
 #endif
1947
-#if PIN_EXISTS(CASE_LIGHT) && ENABLED(CASE_LIGHT_ENABLE)
1948
-  #define HAS_CASE_LIGHT 1
1949
-#endif
1950
 
1947
 
1951
 // Digital control
1948
 // Digital control
1952
 #if PIN_EXISTS(STEPPER_RESET)
1949
 #if PIN_EXISTS(STEPPER_RESET)
2223
 /**
2220
 /**
2224
  * MIN/MAX case light PWM scaling
2221
  * MIN/MAX case light PWM scaling
2225
  */
2222
  */
2226
-#if HAS_CASE_LIGHT
2223
+#if ENABLED(CASE_LIGHT_ENABLE)
2227
   #ifndef CASE_LIGHT_MAX_PWM
2224
   #ifndef CASE_LIGHT_MAX_PWM
2228
     #define CASE_LIGHT_MAX_PWM 255
2225
     #define CASE_LIGHT_MAX_PWM 255
2229
   #elif !WITHIN(CASE_LIGHT_MAX_PWM, 1, 255)
2226
   #elif !WITHIN(CASE_LIGHT_MAX_PWM, 1, 255)

+ 4
- 4
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/advanced_settings_menu.cpp 查看文件

38
   }
38
   }
39
 
39
 
40
     #ifdef TOUCH_UI_PORTRAIT
40
     #ifdef TOUCH_UI_PORTRAIT
41
-      #if EITHER(HAS_CASE_LIGHT, SENSORLESS_HOMING)
41
+      #if EITHER(CASE_LIGHT_ENABLE, SENSORLESS_HOMING)
42
         #define GRID_ROWS 9
42
         #define GRID_ROWS 9
43
       #else
43
       #else
44
         #define GRID_ROWS 8
44
         #define GRID_ROWS 8
59
       #define BACKLASH_POS            BTN_POS(2,7), BTN_SIZE(1,1)
59
       #define BACKLASH_POS            BTN_POS(2,7), BTN_SIZE(1,1)
60
       #define CASE_LIGHT_POS          BTN_POS(1,8), BTN_SIZE(1,1)
60
       #define CASE_LIGHT_POS          BTN_POS(1,8), BTN_SIZE(1,1)
61
       #define TMC_HOMING_THRS_POS     BTN_POS(2,8), BTN_SIZE(1,1)
61
       #define TMC_HOMING_THRS_POS     BTN_POS(2,8), BTN_SIZE(1,1)
62
-      #if EITHER(HAS_CASE_LIGHT, SENSORLESS_HOMING)
62
+      #if EITHER(CASE_LIGHT_ENABLE, SENSORLESS_HOMING)
63
         #define BACK_POS              BTN_POS(1,9), BTN_SIZE(2,1)
63
         #define BACK_POS              BTN_POS(1,9), BTN_SIZE(2,1)
64
       #else
64
       #else
65
         #define BACK_POS              BTN_POS(1,8), BTN_SIZE(2,1)
65
         #define BACK_POS              BTN_POS(1,8), BTN_SIZE(2,1)
91
        .font(Theme::font_medium)
91
        .font(Theme::font_medium)
92
       .enabled(ENABLED(HAS_BED_PROBE))
92
       .enabled(ENABLED(HAS_BED_PROBE))
93
       .tag(2) .button( ZPROBE_ZOFFSET_POS,     GET_TEXT_F(MSG_ZPROBE_ZOFFSET))
93
       .tag(2) .button( ZPROBE_ZOFFSET_POS,     GET_TEXT_F(MSG_ZPROBE_ZOFFSET))
94
-      .enabled(ENABLED(HAS_CASE_LIGHT))
94
+      .enabled(ENABLED(CASE_LIGHT_ENABLE))
95
       .tag(16).button( CASE_LIGHT_POS,         GET_TEXT_F(MSG_CASE_LIGHT))
95
       .tag(16).button( CASE_LIGHT_POS,         GET_TEXT_F(MSG_CASE_LIGHT))
96
       .tag(3) .button( STEPS_PER_MM_POS,       GET_TEXT_F(MSG_STEPS_PER_MM))
96
       .tag(3) .button( STEPS_PER_MM_POS,       GET_TEXT_F(MSG_STEPS_PER_MM))
97
       .enabled(ENABLED(HAS_TRINAMIC_CONFIG))
97
       .enabled(ENABLED(HAS_TRINAMIC_CONFIG))
149
     case 14: GOTO_SCREEN(StepperBumpSensitivityScreen); break;
149
     case 14: GOTO_SCREEN(StepperBumpSensitivityScreen); break;
150
     #endif
150
     #endif
151
     case 15: GOTO_SCREEN(DisplayTuningScreen); break;
151
     case 15: GOTO_SCREEN(DisplayTuningScreen); break;
152
-    #if HAS_CASE_LIGHT
152
+    #if ENABLED(CASE_LIGHT_ENABLE)
153
     case 16: GOTO_SCREEN(CaseLightScreen); break;
153
     case 16: GOTO_SCREEN(CaseLightScreen); break;
154
     #endif
154
     #endif
155
     default: return false;
155
     default: return false;

+ 1
- 1
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/main_menu.cpp 查看文件

137
     case 4:  GOTO_SCREEN(MoveAxisScreen);                             break;
137
     case 4:  GOTO_SCREEN(MoveAxisScreen);                             break;
138
     case 5:  injectCommands_P(PSTR("M84"));                           break;
138
     case 5:  injectCommands_P(PSTR("M84"));                           break;
139
     case 6:  GOTO_SCREEN(TemperatureScreen);                          break;
139
     case 6:  GOTO_SCREEN(TemperatureScreen);                          break;
140
-    #if BOTH(TOUCH_UI_COCOA_PRESS, HAS_CASE_LIGHT)
140
+    #if BOTH(TOUCH_UI_COCOA_PRESS, CASE_LIGHT_ENABLE)
141
     case 7:  GOTO_SCREEN(CaseLightScreen);                            break;
141
     case 7:  GOTO_SCREEN(CaseLightScreen);                            break;
142
     #else
142
     #else
143
     case 7:  GOTO_SCREEN(ChangeFilamentScreen);                       break;
143
     case 7:  GOTO_SCREEN(ChangeFilamentScreen);                       break;

+ 1
- 1
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/screens.cpp 查看文件

83
 #else
83
 #else
84
   DECL_SCREEN(JerkScreen),
84
   DECL_SCREEN(JerkScreen),
85
 #endif
85
 #endif
86
-#if HAS_CASE_LIGHT
86
+#if ENABLED(CASE_LIGHT_ENABLE)
87
   DECL_SCREEN(CaseLightScreen),
87
   DECL_SCREEN(CaseLightScreen),
88
 #endif
88
 #endif
89
 #if EITHER(LIN_ADVANCE, FILAMENT_RUNOUT_SENSOR)
89
 #if EITHER(LIN_ADVANCE, FILAMENT_RUNOUT_SENSOR)

+ 2
- 2
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/screens.h 查看文件

63
 #else
63
 #else
64
   JERK_SCREEN_CACHE,
64
   JERK_SCREEN_CACHE,
65
 #endif
65
 #endif
66
-#if HAS_CASE_LIGHT
66
+#if ENABLED(CASE_LIGHT_ENABLE)
67
   CASE_LIGHT_SCREEN_CACHE,
67
   CASE_LIGHT_SCREEN_CACHE,
68
 #endif
68
 #endif
69
 #if EITHER(LIN_ADVANCE, FILAMENT_RUNOUT_SENSOR)
69
 #if EITHER(LIN_ADVANCE, FILAMENT_RUNOUT_SENSOR)
579
   };
579
   };
580
 #endif
580
 #endif
581
 
581
 
582
-#if HAS_CASE_LIGHT
582
+#if ENABLED(CASE_LIGHT_ENABLE)
583
   class CaseLightScreen : public BaseNumericAdjustmentScreen, public CachedScreen<CASE_LIGHT_SCREEN_CACHE> {
583
   class CaseLightScreen : public BaseNumericAdjustmentScreen, public CachedScreen<CASE_LIGHT_SCREEN_CACHE> {
584
     public:
584
     public:
585
       static void onRedraw(draw_mode_t);
585
       static void onRedraw(draw_mode_t);

+ 7
- 7
Marlin/src/lcd/extui/ui_api.cpp 查看文件

599
     #endif
599
     #endif
600
   #endif
600
   #endif
601
 
601
 
602
-  #if HAS_CASE_LIGHT
603
-    bool getCaseLightState()                 { return case_light_on; }
602
+  #if ENABLED(CASE_LIGHT_ENABLE)
603
+    bool getCaseLightState()                 { return caselight.on; }
604
     void setCaseLightState(const bool value) {
604
     void setCaseLightState(const bool value) {
605
-      case_light_on = value;
606
-      update_case_light();
605
+      caselight.on = value;
606
+      caselight.update_enabled();
607
     }
607
     }
608
 
608
 
609
     #if DISABLED(CASE_LIGHT_NO_BRIGHTNESS)
609
     #if DISABLED(CASE_LIGHT_NO_BRIGHTNESS)
610
-      float getCaseLightBrightness_percent()                 { return ui8_to_percent(case_light_brightness); }
610
+      float getCaseLightBrightness_percent()                 { return ui8_to_percent(caselight.brightness); }
611
       void setCaseLightBrightness_percent(const float value) {
611
       void setCaseLightBrightness_percent(const float value) {
612
-         case_light_brightness = map(constrain(value, 0, 100), 0, 100, 0, 255);
613
-         update_case_light();
612
+         caselight.brightness = map(constrain(value, 0, 100), 0, 100, 0, 255);
613
+         caselight.update_brightness();
614
       }
614
       }
615
     #endif
615
     #endif
616
   #endif
616
   #endif

+ 4
- 4
Marlin/src/lcd/menu/menu_led.cpp 查看文件

76
     void menu_case_light() {
76
     void menu_case_light() {
77
       START_MENU();
77
       START_MENU();
78
       BACK_ITEM(MSG_CONFIGURATION);
78
       BACK_ITEM(MSG_CONFIGURATION);
79
-      EDIT_ITEM(percent, MSG_CASE_LIGHT_BRIGHTNESS, &case_light_brightness, 0, 255, update_case_light, true);
80
-      EDIT_ITEM(bool, MSG_CASE_LIGHT, (bool*)&case_light_on, update_case_light);
79
+      EDIT_ITEM(percent, MSG_CASE_LIGHT_BRIGHTNESS, &caselight.brightness, 0, 255, caselight.update_brightness, true);
80
+      EDIT_ITEM(bool, MSG_CASE_LIGHT, (bool*)&caselight.on, caselight.update_enabled);
81
       END_MENU();
81
       END_MENU();
82
     }
82
     }
83
   #endif
83
   #endif
97
     #endif
97
     #endif
98
     SUBMENU(MSG_CUSTOM_LEDS, menu_led_custom);
98
     SUBMENU(MSG_CUSTOM_LEDS, menu_led_custom);
99
   #endif
99
   #endif
100
-   //
100
+  //
101
   // Set Case light on/off/brightness
101
   // Set Case light on/off/brightness
102
   //
102
   //
103
   #if ENABLED(CASE_LIGHT_MENU)
103
   #if ENABLED(CASE_LIGHT_MENU)
106
         SUBMENU(MSG_CASE_LIGHT, menu_case_light);
106
         SUBMENU(MSG_CASE_LIGHT, menu_case_light);
107
       else
107
       else
108
     #endif
108
     #endif
109
-        EDIT_ITEM(bool, MSG_CASE_LIGHT, (bool*)&case_light_on, update_case_light);
109
+        EDIT_ITEM(bool, MSG_CASE_LIGHT, (bool*)&caselight.on, caselight.update_enabled);
110
   #endif
110
   #endif
111
   END_MENU();
111
   END_MENU();
112
 }
112
 }

+ 30
- 1
Marlin/src/libs/heatshrink/heatshrink_decoder.cpp 查看文件

1
 /**
1
 /**
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (c) 2020 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 <https://www.gnu.org/licenses/>.
20
+ *
21
+ */
22
+
23
+#include "../../inc/MarlinConfigPre.h"
24
+
25
+#if ENABLED(BINARY_FILE_TRANSFER)
26
+
27
+/**
2
  * libs/heatshrink/heatshrink_decoder.cpp
28
  * libs/heatshrink/heatshrink_decoder.cpp
3
  */
29
  */
30
+#include "heatshrink_decoder.h"
31
+
4
 #include <stdlib.h>
32
 #include <stdlib.h>
5
 #include <string.h>
33
 #include <string.h>
6
-#include "heatshrink_decoder.h"
7
 
34
 
8
 #pragma GCC optimize ("O3")
35
 #pragma GCC optimize ("O3")
9
 
36
 
353
   oi->buf[(*oi->output_size)++] = byte;
380
   oi->buf[(*oi->output_size)++] = byte;
354
   (void)hsd;
381
   (void)hsd;
355
 }
382
 }
383
+
384
+#endif // BINARY_FILE_TRANSFER

+ 25
- 2
Marlin/src/libs/heatshrink/heatshrink_decoder.h 查看文件

1
 /**
1
 /**
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (c) 2020 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 <https://www.gnu.org/licenses/>.
20
+ *
21
+ */
22
+
23
+/**
2
  * libs/heatshrink/heatshrink_decoder.h
24
  * libs/heatshrink/heatshrink_decoder.h
3
  */
25
  */
4
 #pragma once
26
 #pragma once
5
 
27
 
6
-#include <stdint.h>
7
-#include <stddef.h>
8
 #include "heatshrink_common.h"
28
 #include "heatshrink_common.h"
9
 #include "heatshrink_config.h"
29
 #include "heatshrink_config.h"
10
 
30
 
31
+#include <stdint.h>
32
+#include <stddef.h>
33
+
11
 typedef enum {
34
 typedef enum {
12
   HSDR_SINK_OK,               /* data sunk, ready to poll */
35
   HSDR_SINK_OK,               /* data sunk, ready to poll */
13
   HSDR_SINK_FULL,             /* out of space in internal buffer */
36
   HSDR_SINK_FULL,             /* out of space in internal buffer */

+ 6
- 6
Marlin/src/module/configuration_store.cpp 查看文件

404
   // HAS_CASE_LIGHT_BRIGHTNESS
404
   // HAS_CASE_LIGHT_BRIGHTNESS
405
   //
405
   //
406
   #if HAS_CASE_LIGHT_BRIGHTNESS
406
   #if HAS_CASE_LIGHT_BRIGHTNESS
407
-    uint8_t case_light_brightness;
407
+    uint8_t caselight_brightness;                        // M355 P
408
   #endif
408
   #endif
409
 
409
 
410
   //
410
   //
465
 
465
 
466
   TERN_(HAS_LINEAR_E_JERK, planner.recalculate_max_e_jerk());
466
   TERN_(HAS_LINEAR_E_JERK, planner.recalculate_max_e_jerk());
467
 
467
 
468
-  TERN_(HAS_CASE_LIGHT_BRIGHTNESS, update_case_light());
468
+  TERN_(HAS_CASE_LIGHT_BRIGHTNESS, caselight.update_brightness());
469
 
469
 
470
   // Refresh steps_to_mm with the reciprocal of axis_steps_per_mm
470
   // Refresh steps_to_mm with the reciprocal of axis_steps_per_mm
471
   // and init stepper.count[], planner.position[] with current_position
471
   // and init stepper.count[], planner.position[] with current_position
1342
     // Case Light Brightness
1342
     // Case Light Brightness
1343
     //
1343
     //
1344
     #if HAS_CASE_LIGHT_BRIGHTNESS
1344
     #if HAS_CASE_LIGHT_BRIGHTNESS
1345
-      EEPROM_WRITE(case_light_brightness);
1345
+      EEPROM_WRITE(caselight.brightness);
1346
     #endif
1346
     #endif
1347
 
1347
 
1348
     //
1348
     //
2181
       // Case Light Brightness
2181
       // Case Light Brightness
2182
       //
2182
       //
2183
       #if HAS_CASE_LIGHT_BRIGHTNESS
2183
       #if HAS_CASE_LIGHT_BRIGHTNESS
2184
-        _FIELD_TEST(case_light_brightness);
2185
-        EEPROM_READ(case_light_brightness);
2184
+        _FIELD_TEST(caselight_brightness);
2185
+        EEPROM_READ(caselight.brightness);
2186
       #endif
2186
       #endif
2187
 
2187
 
2188
       //
2188
       //
2493
   //
2493
   //
2494
   // Case Light Brightness
2494
   // Case Light Brightness
2495
   //
2495
   //
2496
-  TERN_(HAS_CASE_LIGHT_BRIGHTNESS, case_light_brightness = CASE_LIGHT_DEFAULT_BRIGHTNESS);
2496
+  TERN_(HAS_CASE_LIGHT_BRIGHTNESS, caselight.brightness = CASE_LIGHT_DEFAULT_BRIGHTNESS);
2497
 
2497
 
2498
   //
2498
   //
2499
   // TOUCH_SCREEN_CALIBRATION
2499
   // TOUCH_SCREEN_CALIBRATION

+ 88
- 0
buildroot/share/PlatformIO/scripts/common-dependencies.h 查看文件

65
 #ifdef HAL_PATH
65
 #ifdef HAL_PATH
66
   #include HAL_PATH(../../../../Marlin/src/HAL, inc/Conditionals_post.h)
66
   #include HAL_PATH(../../../../Marlin/src/HAL, inc/Conditionals_post.h)
67
 #endif
67
 #endif
68
+
69
+//
70
+// Conditionals only used for [features]
71
+//
72
+#if ENABLED(SR_LCD_3W_NL)
73
+  // Feature checks for SR_LCD_3W_NL
74
+#elif EITHER(LCD_I2C_TYPE_MCP23017, LCD_I2C_TYPE_MCP23008)
75
+  #define USES_LIQUIDTWI2
76
+#elif ANY(HAS_CHARACTER_LCD, LCD_I2C_TYPE_PCF8575, LCD_I2C_TYPE_PCA8574, SR_LCD_2W_NL, LCM1602)
77
+  #define USES_LIQUIDCRYSTAL
78
+#endif
79
+
80
+#if BOTH(ANYCUBIC_LCD_I3MEGA, EXTENSIBLE_UI)
81
+  #define HAS_ANYCUBIC_TFT_EXTUI
82
+#endif
83
+
84
+#if SAVED_POSITIONS
85
+  #define HAS_SAVED_POSITIONS
86
+#endif
87
+
88
+#if ENABLED(HOST_PROMPT_SUPPORT) && DISABLED(EMERGENCY_PARSER)
89
+  #define HAS_GCODE_M876
90
+#endif
91
+
92
+#if PREHEAT_COUNT
93
+  #define HAS_PREHEAT_COUNT
94
+#endif
95
+
96
+#if EXTRUDERS
97
+  #define HAS_EXTRUDERS
98
+  #if EXTRUDERS > 1
99
+    #define HAS_MULTI_EXTRUDER
100
+  #endif
101
+#endif
102
+
103
+#if HAS_LCD_MENU
104
+  #if ENABLED(BACKLASH_GCODE)
105
+    #define HAS_MENU_BACKLASH
106
+  #endif
107
+  #if ENABLED(LEVEL_BED_CORNERS)
108
+    #define HAS_MENU_BED_CORNERS
109
+  #endif
110
+  #if ENABLED(CANCEL_OBJECTS)
111
+    #define HAS_MENU_CANCELOBJECT
112
+  #endif
113
+  #if ENABLED(CUSTOM_USER_MENUS)
114
+    #define HAS_MENU_CUSTOM
115
+  #endif
116
+  #if EITHER(DELTA_CALIBRATION_MENU, DELTA_AUTO_CALIBRATION)
117
+    #define HAS_MENU_DELTA_CALIBRATE
118
+  #endif
119
+  #if EITHER(LED_CONTROL_MENU, CASE_LIGHT_MENU)
120
+    #define HAS_MENU_LED
121
+  #endif
122
+  #if ENABLED(ADVANCED_PAUSE_FEATURE)
123
+    #define HAS_MENU_FILAMENT
124
+  #endif
125
+  #if ENABLED(SDSUPPORT)
126
+    #define HAS_MENU_MEDIA
127
+  #endif
128
+  #if ENABLED(MIXING_EXTRUDER)
129
+    #define HAS_MENU_MIXER
130
+  #endif
131
+  #if ENABLED(POWER_LOSS_RECOVERY)
132
+    #define HAS_MENU_JOB_RECOVERY
133
+  #endif
134
+  #if HAS_POWER_MONITOR
135
+    #define HAS_MENU_POWER_MONITOR
136
+  #endif
137
+  #if HAS_CUTTER
138
+    #define HAS_MENU_CUTTER
139
+  #endif
140
+  #if HAS_TEMPERATURE
141
+    #define HAS_MENU_TEMPERATURE
142
+  #endif
143
+  #if ENABLED(MMU2_MENUS)
144
+    #define HAS_MENU_MMU2
145
+  #endif
146
+  #if HAS_TRINAMIC_CONFIG
147
+    #define HAS_MENU_TMC
148
+  #endif
149
+  #if ENABLED(TOUCH_SCREEN_CALIBRATION)
150
+    #define HAS_MENU_TOUCH_SCREEN
151
+  #endif
152
+  #if ENABLED(AUTO_BED_LEVELING_UBL)
153
+    #define HAS_MENU_UBL
154
+  #endif
155
+#endif

+ 69
- 41
buildroot/share/PlatformIO/scripts/common-dependencies.py 查看文件

6
 import os
6
 import os
7
 import re
7
 import re
8
 try:
8
 try:
9
-    import configparser
9
+	import configparser
10
 except ImportError:
10
 except ImportError:
11
-    import ConfigParser as configparser
11
+	import ConfigParser as configparser
12
 from platformio.managers.package import PackageManager
12
 from platformio.managers.package import PackageManager
13
 
13
 
14
 Import("env")
14
 Import("env")
15
 
15
 
16
-FEATURE_DEPENDENCIES = {}
16
+FEATURE_CONFIG = {}
17
+
18
+def add_to_feat_cnf(feature, flines):
19
+	feat = FEATURE_CONFIG[feature]
20
+	atoms = re.sub(',\\s*', '\n', flines).strip().split('\n')
21
+	for dep in atoms:
22
+		parts = dep.split('=')
23
+		name = parts.pop(0)
24
+		rest = '='.join(parts)
25
+		if name in ['extra_scripts', 'src_filter', 'lib_ignore']:
26
+			feat[name] = rest
27
+		else:
28
+			feat['lib_deps'] += [dep]
17
 
29
 
18
 def load_config():
30
 def load_config():
19
 	config = configparser.ConfigParser()
31
 	config = configparser.ConfigParser()
20
 	config.read("platformio.ini")
32
 	config.read("platformio.ini")
21
 	items = config.items('features')
33
 	items = config.items('features')
22
 	for key in items:
34
 	for key in items:
23
-		ukey = key[0].upper()
24
-		if not ukey in FEATURE_DEPENDENCIES:
25
-			FEATURE_DEPENDENCIES[ukey] = {
26
-				'lib_deps': []
27
-			}
28
-		deps = re.sub(',\\s*', '\n', key[1]).strip().split('\n')
29
-		for dep in deps:
30
-			parts = dep.split('=')
31
-			name = parts.pop(0)
32
-			rest = '='.join(parts)
33
-			if name in ['extra_scripts', 'src_filter', 'lib_ignore']:
34
-				FEATURE_DEPENDENCIES[ukey][name] = rest
35
-			else:
36
-				FEATURE_DEPENDENCIES[ukey]['lib_deps'] += [dep]
35
+		feature = key[0].upper()
36
+		if not feature in FEATURE_CONFIG:
37
+			FEATURE_CONFIG[feature] = { 'lib_deps': [] }
38
+		add_to_feat_cnf(feature, key[1])
39
+
40
+	# Add options matching marlin.MY_OPTION to the pile
41
+	all_opts = env.GetProjectOptions()
42
+	for n in all_opts:
43
+		mat = re.match(r'marlin\.(.+)', n[0])
44
+		if mat:
45
+			try:
46
+				val = env.GetProjectOption(n[0])
47
+			except:
48
+				val = None
49
+			if val:
50
+				add_to_feat_cnf(mat.group(1).upper(), val)
37
 
51
 
38
 def get_all_known_libs():
52
 def get_all_known_libs():
39
 	known_libs = []
53
 	known_libs = []
40
-	for feature in FEATURE_DEPENDENCIES:
41
-		if not 'lib_deps' in FEATURE_DEPENDENCIES[feature]:
54
+	for feature in FEATURE_CONFIG:
55
+		feat = FEATURE_CONFIG[feature]
56
+		if not 'lib_deps' in feat:
42
 			continue
57
 			continue
43
-		for dep in FEATURE_DEPENDENCIES[feature]['lib_deps']:
58
+		for dep in feat['lib_deps']:
44
 			name, _, _ = PackageManager.parse_pkg_uri(dep)
59
 			name, _, _ = PackageManager.parse_pkg_uri(dep)
45
 			known_libs.append(name)
60
 			known_libs.append(name)
46
 	return known_libs
61
 	return known_libs
64
 	known_libs = get_all_known_libs()
79
 	known_libs = get_all_known_libs()
65
 	diff = (list(set(known_libs) - set(env_libs)))
80
 	diff = (list(set(known_libs) - set(env_libs)))
66
 	lib_ignore = env.GetProjectOption('lib_ignore') + diff
81
 	lib_ignore = env.GetProjectOption('lib_ignore') + diff
67
-	print("Ignoring libs:", lib_ignore)
82
+	print("Ignore libraries:", lib_ignore)
68
 	set_env_field('lib_ignore', lib_ignore)
83
 	set_env_field('lib_ignore', lib_ignore)
69
 
84
 
70
-def install_features_dependencies():
85
+def apply_features_config():
71
 	load_config()
86
 	load_config()
72
-	for feature in FEATURE_DEPENDENCIES:
87
+	for feature in FEATURE_CONFIG:
73
 		if not env.MarlinFeatureIsEnabled(feature):
88
 		if not env.MarlinFeatureIsEnabled(feature):
74
 			continue
89
 			continue
75
 
90
 
76
-		if 'lib_deps' in FEATURE_DEPENDENCIES[feature]:
91
+		feat = FEATURE_CONFIG[feature]
92
+
93
+		if 'lib_deps' in feat and len(feat['lib_deps']):
77
 			print("Adding lib_deps for %s... " % feature)
94
 			print("Adding lib_deps for %s... " % feature)
78
 
95
 
79
-			# deps to add
96
+			# feat to add
80
 			deps_to_add = {}
97
 			deps_to_add = {}
81
-			for dep in FEATURE_DEPENDENCIES[feature]['lib_deps']:
98
+			for dep in feat['lib_deps']:
82
 				name, _, _ = PackageManager.parse_pkg_uri(dep)
99
 				name, _, _ = PackageManager.parse_pkg_uri(dep)
83
 				deps_to_add[name] = dep
100
 				deps_to_add[name] = dep
84
 
101
 
101
 				# Only add the missing dependencies
118
 				# Only add the missing dependencies
102
 				set_env_field('lib_deps', deps + list(deps_to_add.values()))
119
 				set_env_field('lib_deps', deps + list(deps_to_add.values()))
103
 
120
 
104
-		if 'extra_scripts' in FEATURE_DEPENDENCIES[feature]:
105
-			print("Executing extra_scripts for %s... " % feature)
106
-			env.SConscript(FEATURE_DEPENDENCIES[feature]['extra_scripts'], exports="env")
121
+		if 'extra_scripts' in feat:
122
+			print("Running extra_scripts for %s... " % feature)
123
+			env.SConscript(feat['extra_scripts'], exports="env")
107
 
124
 
108
-		if 'src_filter' in FEATURE_DEPENDENCIES[feature]:
125
+		if 'src_filter' in feat:
109
 			print("Adding src_filter for %s... " % feature)
126
 			print("Adding src_filter for %s... " % feature)
110
 			src_filter = ' '.join(env.GetProjectOption('src_filter'))
127
 			src_filter = ' '.join(env.GetProjectOption('src_filter'))
111
 			# first we need to remove the references to the same folder
128
 			# first we need to remove the references to the same folder
112
-			my_srcs = re.findall( r'[+-](<.*?>)', FEATURE_DEPENDENCIES[feature]['src_filter'])
129
+			my_srcs = re.findall( r'[+-](<.*?>)', feat['src_filter'])
113
 			cur_srcs = re.findall( r'[+-](<.*?>)', src_filter)
130
 			cur_srcs = re.findall( r'[+-](<.*?>)', src_filter)
114
 			for d in my_srcs:
131
 			for d in my_srcs:
115
 				if d in cur_srcs:
132
 				if d in cur_srcs:
116
 					src_filter = re.sub(r'[+-]' + d, '', src_filter)
133
 					src_filter = re.sub(r'[+-]' + d, '', src_filter)
117
 
134
 
118
-			src_filter = FEATURE_DEPENDENCIES[feature]['src_filter'] + ' ' + src_filter
135
+			src_filter = feat['src_filter'] + ' ' + src_filter
119
 			set_env_field('src_filter', [src_filter])
136
 			set_env_field('src_filter', [src_filter])
120
 			env.Replace(SRC_FILTER=src_filter)
137
 			env.Replace(SRC_FILTER=src_filter)
121
 
138
 
122
-		if 'lib_ignore' in FEATURE_DEPENDENCIES[feature]:
123
-			print("Ignoring libs for %s... " % feature)
124
-			lib_ignore = env.GetProjectOption('lib_ignore') + [FEATURE_DEPENDENCIES[feature]['lib_ignore']]
139
+		if 'lib_ignore' in feat:
140
+			print("Adding lib_ignore for %s... " % feature)
141
+			lib_ignore = env.GetProjectOption('lib_ignore') + [feat['lib_ignore']]
125
 			set_env_field('lib_ignore', lib_ignore)
142
 			set_env_field('lib_ignore', lib_ignore)
126
 
143
 
127
 #
144
 #
170
 # Use the compiler to get a list of all enabled features
187
 # Use the compiler to get a list of all enabled features
171
 #
188
 #
172
 def load_marlin_features():
189
 def load_marlin_features():
173
-	if "MARLIN_FEATURES" in env:
190
+	if 'MARLIN_FEATURES' in env:
174
 		return
191
 		return
175
 
192
 
176
 	# Process defines
193
 	# Process defines
199
 		feature = define[8:].strip().decode().split(' ')
216
 		feature = define[8:].strip().decode().split(' ')
200
 		feature, definition = feature[0], ' '.join(feature[1:])
217
 		feature, definition = feature[0], ' '.join(feature[1:])
201
 		marlin_features[feature] = definition
218
 		marlin_features[feature] = definition
202
-	env["MARLIN_FEATURES"] = marlin_features
219
+	env['MARLIN_FEATURES'] = marlin_features
203
 
220
 
204
 #
221
 #
205
 # Return True if a matching feature is enabled
222
 # Return True if a matching feature is enabled
206
 #
223
 #
207
 def MarlinFeatureIsEnabled(env, feature):
224
 def MarlinFeatureIsEnabled(env, feature):
208
 	load_marlin_features()
225
 	load_marlin_features()
209
-	r = re.compile(feature)
210
-	matches = list(filter(r.match, env["MARLIN_FEATURES"]))
211
-	return len(matches) > 0
226
+	r = re.compile('^' + feature + '$')
227
+	found = list(filter(r.match, env['MARLIN_FEATURES']))
228
+
229
+	# Defines could still be 'false' or '0', so check
230
+	some_on = False
231
+	if len(found):
232
+		for f in found:
233
+			val = env['MARLIN_FEATURES'][f]
234
+			if val in [ '', '1', 'true' ]:
235
+				some_on = True
236
+			elif val in env['MARLIN_FEATURES']:
237
+				some_on = env.MarlinFeatureIsEnabled(val)
238
+
239
+	return some_on
212
 
240
 
213
 #
241
 #
214
 # Add a method for other PIO scripts to query enabled features
242
 # Add a method for other PIO scripts to query enabled features
218
 #
246
 #
219
 # Add dependencies for enabled Marlin features
247
 # Add dependencies for enabled Marlin features
220
 #
248
 #
221
-install_features_dependencies()
249
+apply_features_config()
222
 force_ignore_unused_libs()
250
 force_ignore_unused_libs()

+ 295
- 21
platformio.ini 查看文件

26
 #
26
 #
27
 [common]
27
 [common]
28
 default_src_filter = +<src/*> -<src/config> -<src/HAL> +<src/HAL/shared>
28
 default_src_filter = +<src/*> -<src/config> -<src/HAL> +<src/HAL/shared>
29
-  -<src/lcd/HD44780> -<src/lcd/dwin> -<src/lcd/dogm> -<src/lcd/tft> -<src/lcd/menu>
30
-  -<src/lcd/extui/lib/mks_ui> -<src/lcd/extui/lib/dgus> -<src/lcd/extui/lib/ftdi_eve_touch_ui> -<src/lcd/extui/lib/anycubic>
29
+  -<src/lcd/HD44780> -<src/lcd/dwin> -<src/lcd/dogm> -<src/lcd/tft>
30
+  -<src/lcd/menu>
31
+  -<src/lcd/menu/game/game.cpp> -<src/lcd/menu/game/brickout.cpp> -<src/lcd/menu/game/invaders.cpp>
32
+  -<src/lcd/menu/game/maze.cpp> -<src/lcd/menu/game/snake.cpp>
33
+  -<src/lcd/menu/menu_backlash.cpp>
34
+  -<src/lcd/menu/menu_bed_corners.cpp>
35
+  -<src/lcd/menu/menu_bed_leveling.cpp>
36
+  -<src/lcd/menu/menu_cancelobject.cpp>
37
+  -<src/lcd/menu/menu_delta_calibrate.cpp>
38
+  -<src/lcd/menu/menu_filament.cpp>
39
+  -<src/lcd/menu/menu_info.cpp>
40
+  -<src/lcd/menu/menu_job_recovery.cpp>
41
+  -<src/lcd/menu/menu_led.cpp>
42
+  -<src/lcd/menu/menu_media.cpp>
43
+  -<src/lcd/menu/menu_mmu2.cpp>
44
+  -<src/lcd/menu/menu_power_monitor.cpp>
45
+  -<src/lcd/menu/menu_spindle_laser.cpp>
46
+  -<src/lcd/menu/menu_temperature.cpp>
47
+  -<src/lcd/menu/menu_tmc.cpp>
48
+  -<src/lcd/menu/menu_touch_screen.cpp>
49
+  -<src/lcd/menu/menu_ubl.cpp>
50
+  -<src/lcd/extui/lib/mks_ui>
51
+  -<src/lcd/extui/lib/dgus> -<src/lcd/extui_dgus_lcd.cpp>
52
+  -<src/lcd/extui_example.cpp>
53
+  -<src/lcd/extui_malyan_lcd.cpp>
54
+  -<src/lcd/extui/lib/ftdi_eve_touch_ui>
55
+  -<src/lcd/extui/lib/anycubic_i3mega>
56
+  -<src/lcd/extui_anycubic_tft.cpp>
57
+  -<src/lcd/lcdprint.cpp>
31
   -<src/sd/usb_flashdrive>
58
   -<src/sd/usb_flashdrive>
32
-  -<src/gcode/feature/trinamic>
59
+  -<src/feature/backlash.cpp>
60
+  -<src/feature/baricuda.cpp> -<src/gcode/feature/baricuda>
33
   -<src/feature/bedlevel/abl> -<src/gcode/bedlevel/abl>
61
   -<src/feature/bedlevel/abl> -<src/gcode/bedlevel/abl>
34
   -<src/feature/bedlevel/mbl> -<src/gcode/bedlevel/mbl>
62
   -<src/feature/bedlevel/mbl> -<src/gcode/bedlevel/mbl>
35
   -<src/feature/bedlevel/ubl> -<src/gcode/bedlevel/ubl>
63
   -<src/feature/bedlevel/ubl> -<src/gcode/bedlevel/ubl>
64
+  -<src/feature/binary_stream.cpp> -<src/libs/heatshrink>
65
+  -<src/feature/bltouch.cpp>
66
+  -<src/feature/cancel_object.cpp> -<src/gcode/feature/cancel>
67
+  -<src/feature/caselight> -<src/gcode/feature/caselight>
68
+  -<src/feature/closedloop.cpp>
69
+  -<src/feature/controllerfan.cpp> -<src/gcode/feature/controllerfan>
36
   -<src/feature/dac> -<src/feature/digipot>
70
   -<src/feature/dac> -<src/feature/digipot>
37
-  -<src/feature/leds>
71
+  -<src/feature/direct_stepping.cpp> -<src/gcode/motion/G6.cpp>
72
+  -<src/feature/e_parser.cpp>
73
+  -<src/feature/encoder_i2c.cpp>
74
+  -<src/feature/fanmux.cpp>
75
+  -<src/feature/filwidth.cpp> -<src/gcode/feature/filwidth>
76
+  -<src/feature/fwretract.cpp> -<src/gcode/feature/fwretract>
77
+  -<src/feature/host_actions.cpp>
78
+  -<src/feature/hotend_idle.cpp>
79
+  -<src/feature/joystick.cpp>
80
+  -<src/feature/leds/blinkm.cpp>
81
+  -<src/feature/leds/leds.cpp>
82
+  -<src/feature/leds/pca9533.cpp>
83
+  -<src/feature/leds/pca9632.cpp>
84
+  -<src/feature/leds/printer_event_leds.cpp>
85
+  -<src/feature/leds/tempstat.cpp>
86
+  -<src/feature/max7219.cpp>
87
+  -<src/feature/mixing.cpp>
88
+  -<src/feature/mmu2> -<src/gcode/feature/prusa_MMU2>
89
+  -<src/feature/pause.cpp>
90
+  -<src/feature/power.cpp>
91
+  -<src/feature/power_monitor.cpp> -<src/gcode/feature/power_monitor>
92
+  -<src/feature/powerloss.cpp> -<src/gcode/feature/powerloss>
93
+  -<src/feature/probe_temp_comp.cpp>
94
+  -<src/feature/runout.cpp> -<src/gcode/feature/runout>
95
+  -<src/feature/snmm.cpp>
96
+  -<src/feature/solenoid.cpp>
97
+  -<src/feature/spindle_laser.cpp> -<src/gcode/control/M3-M5.cpp>
98
+  -<src/feature/tmc_util.cpp> -<src/module/stepper/trinamic.cpp>
99
+  -<src/feature/twibus.cpp>
100
+  -<src/feature/z_stepper_align.cpp>
101
+  -<src/gcode/bedlevel/G26.cpp>
102
+  -<src/gcode/bedlevel/G35.cpp>
103
+  -<src/gcode/bedlevel/G42.cpp>
104
+  -<src/gcode/bedlevel/M420.cpp>
105
+  -<src/gcode/calibrate/G33.cpp>
106
+  -<src/gcode/calibrate/G34_M422.cpp>
107
+  -<src/gcode/calibrate/G76_M871.cpp>
108
+  -<src/gcode/calibrate/G425.cpp>
109
+  -<src/gcode/calibrate/M12.cpp>
110
+  -<src/gcode/calibrate/M48.cpp>
111
+  -<src/gcode/calibrate/M100.cpp>
112
+  -<src/gcode/calibrate/M425.cpp>
113
+  -<src/gcode/calibrate/M666.cpp>
114
+  -<src/gcode/calibrate/M852.cpp>
115
+  -<src/gcode/config/M43.cpp>
116
+  -<src/gcode/config/M217.cpp>
117
+  -<src/gcode/config/M218.cpp>
118
+  -<src/gcode/config/M221.cpp>
119
+  -<src/gcode/config/M281.cpp>
120
+  -<src/gcode/config/M302.cpp>
121
+  -<src/gcode/config/M305.cpp>
122
+  -<src/gcode/config/M540.cpp>
123
+  -<src/gcode/control/M7-M9.cpp>
124
+  -<src/gcode/control/M211.cpp>
125
+  -<src/gcode/control/M605.cpp>
126
+  -<src/gcode/feature/advance>
127
+  -<src/gcode/feature/camera>
128
+  -<src/gcode/feature/i2c>
129
+  -<src/gcode/feature/L6470>
130
+  -<src/gcode/feature/leds/M150.cpp>
131
+  -<src/gcode/feature/leds/M7219.cpp>
132
+  -<src/gcode/feature/macro>
133
+  -<src/gcode/feature/mixing/M163-M165.cpp>
134
+  -<src/gcode/feature/mixing/M166.cpp>
135
+  -<src/gcode/feature/pause/G27.cpp>
136
+  -<src/gcode/feature/pause/G60.cpp>
137
+  -<src/gcode/feature/pause/G61.cpp>
138
+  -<src/gcode/feature/pause/M125.cpp>
139
+  -<src/gcode/feature/pause/M600.cpp>
140
+  -<src/gcode/feature/pause/M603.cpp>
141
+  -<src/gcode/feature/pause/M701_M702.cpp>
142
+  -<src/gcode/feature/trinamic/M122.cpp>
143
+  -<src/gcode/feature/trinamic/M569.cpp>
144
+  -<src/gcode/feature/trinamic/M906.cpp>
145
+  -<src/gcode/feature/trinamic/M911-M914.cpp>
146
+  -<src/gcode/geometry/G17-G19.cpp>
147
+  -<src/gcode/geometry/G53-G59.cpp>
148
+  -<src/gcode/geometry/M206_M428.cpp>
149
+  -<src/gcode/host/M16.cpp>
150
+  -<src/gcode/host/M113.cpp>
151
+  -<src/gcode/host/M360.cpp>
152
+  -<src/gcode/host/M876.cpp>
153
+  -<src/gcode/lcd/M0_M1.cpp>
154
+  -<src/gcode/lcd/M145.cpp>
155
+  -<src/gcode/lcd/M250.cpp>
156
+  -<src/gcode/lcd/M73.cpp>
157
+  -<src/gcode/lcd/M995.cpp>
158
+  -<src/gcode/motion/G2_G3.cpp>
159
+  -<src/gcode/motion/G5.cpp>
160
+  -<src/gcode/motion/G80.cpp>
161
+  -<src/gcode/motion/M290.cpp>
162
+  -<src/gcode/probe/G30.cpp>
163
+  -<src/gcode/probe/G31_G32.cpp>
164
+  -<src/gcode/probe/G38.cpp>
165
+  -<src/gcode/probe/M401_M402.cpp>
166
+  -<src/gcode/probe/M851.cpp>
167
+  -<src/gcode/probe/M951.cpp>
168
+  -<src/gcode/scara>
169
+  -<src/gcode/sd>
170
+  -<src/gcode/temp/M104_M109.cpp>
171
+  -<src/gcode/units/G20_G21.cpp>
172
+  -<src/gcode/units/M149.cpp>
173
+  -<src/libs/L64XX> -<src/module/stepper/L64xx.cpp>
174
+  -<src/libs/hex_print.cpp>
175
+  -<src/libs/least_squares_fit.cpp>
176
+  -<src/libs/nozzle.cpp> -<src/gcode/feature/clean>
177
+  -<src/module/delta.cpp>
178
+  -<src/module/planner_bezier.cpp>
179
+  -<src/module/printcounter.cpp>
180
+  -<src/module/probe.cpp>
181
+  -<src/module/scara.cpp> -<src/gcode/calibrate/M665.cpp>
182
+  -<src/module/stepper/TMC26X.cpp>
38
 extra_scripts      =
183
 extra_scripts      =
39
   pre:buildroot/share/PlatformIO/scripts/common-dependencies.py
184
   pre:buildroot/share/PlatformIO/scripts/common-dependencies.py
40
   pre:buildroot/share/PlatformIO/scripts/common-cxxflags.py
185
   pre:buildroot/share/PlatformIO/scripts/common-cxxflags.py
49
                           src_filter=+<src/lcd/extui/lib/mks_ui>
194
                           src_filter=+<src/lcd/extui/lib/mks_ui>
50
                           extra_scripts=download_mks_assets.py
195
                           extra_scripts=download_mks_assets.py
51
 HAS_TRINAMIC_CONFIG     = TMCStepper@~0.7.1
196
 HAS_TRINAMIC_CONFIG     = TMCStepper@~0.7.1
52
-                          src_filter=+<src/gcode/feature/trinamic>
197
+                          src_filter=+<src/feature/tmc_util.cpp> +<src/module/stepper/trinamic.cpp> +<src/gcode/feature/trinamic/M122.cpp> +<src/gcode/feature/trinamic/M906.cpp> +<src/gcode/feature/trinamic/M911-M914.cpp>
198
+HAS_STEALTHCHOP         = src_filter=+<src/gcode/feature/trinamic/M569.cpp>
53
 SR_LCD_3W_NL            = SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/master.zip
199
 SR_LCD_3W_NL            = SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/master.zip
54
-DIGIPOT_MCP4...         = SlowSoftI2CMaster
200
+HAS_I2C_DIGIPOT         = SlowSoftI2CMaster
201
+                          src_filter=+<src/feature/digipot>
55
 HAS_TMC26X              = TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
202
 HAS_TMC26X              = TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
203
+                          src_filter=+<src/module/TMC26X.cpp>
56
 HAS_L64XX               = Arduino-L6470@0.8.0
204
 HAS_L64XX               = Arduino-L6470@0.8.0
205
+                          src_filter=+<src/libs/L64XX> +<src/module/stepper/L64xx.cpp> +<src/gcode/feature/L6470>
57
 NEOPIXEL_LED            = Adafruit NeoPixel@1.5.0
206
 NEOPIXEL_LED            = Adafruit NeoPixel@1.5.0
207
+                          src_filter=+<src/feature/leds/neopixel.cpp>
58
 MAX6675_IS_MAX31865     = Adafruit MAX31865 library@~1.1.0
208
 MAX6675_IS_MAX31865     = Adafruit MAX31865 library@~1.1.0
59
 HAS_GRAPHICAL_LCD       = U8glib-HAL@0.4.1
209
 HAS_GRAPHICAL_LCD       = U8glib-HAL@0.4.1
60
                           src_filter=+<src/lcd/dogm>
210
                           src_filter=+<src/lcd/dogm>
64
 HAS_CHARACTER_LCD       = src_filter=+<src/lcd/HD44780>
214
 HAS_CHARACTER_LCD       = src_filter=+<src/lcd/HD44780>
65
 HAS_GRAPHICAL_TFT       = src_filter=+<src/lcd/tft>
215
 HAS_GRAPHICAL_TFT       = src_filter=+<src/lcd/tft>
66
 HAS_LCD_MENU            = src_filter=+<src/lcd/menu>
216
 HAS_LCD_MENU            = src_filter=+<src/lcd/menu>
67
-HAS_DGUS_LCD            = src_filter=+<src/lcd/extui/lib/dgus>
68
-TOUCH_UI_FTDI_EVE       = src_filter=+<src/lcd/extui/lib/ftdi_eve_touch_ui>
217
+HAS_GAMES               = src_filter=+<src/lcd/menu/game/game.cpp>
218
+MARLIN_BRICKOUT         = src_filter=+<src/lcd/menu/game/brickout.cpp>
219
+MARLIN_INVADERS         = src_filter=+<src/lcd/menu/game/invaders.cpp>
220
+MARLIN_MAZE             = src_filter=+<src/lcd/menu/game/maze.cpp>
221
+MARLIN_SNAKE            = src_filter=+<src/lcd/menu/game/snake.cpp>
222
+HAS_MENU_BACKLASH       = src_filter=+<src/lcd/menu/menu_backlash.cpp>
223
+HAS_MENU_BED_CORNERS    = src_filter=+<src/lcd/menu/menu_bed_corners.cpp>
224
+LCD_BED_LEVELING        = src_filter=+<src/lcd/menu/menu_bed_leveling.cpp>
225
+HAS_MENU_CANCELOBJECT   = src_filter=+<src/lcd/menu/menu_cancelobject.cpp>
226
+HAS_MENU_DELTA_CALIBRATE = src_filter=+<src/lcd/menu/menu_delta_calibrate.cpp>
227
+HAS_MENU_FILAMENT       = src_filter=+<src/lcd/menu/menu_filament.cpp>
228
+LCD_INFO_MENU           = src_filter=+<src/lcd/menu/menu_info.cpp>
229
+HAS_MENU_JOB_RECOVERY   = src_filter=+<src/lcd/menu/menu_job_recovery.cpp>
230
+HAS_MENU_LED            = src_filter=+<src/lcd/menu/menu_led.cpp>
231
+HAS_MENU_MEDIA          = src_filter=+<src/lcd/menu/menu_media.cpp>
232
+HAS_MENU_MIXER          = src_filter=+<src/lcd/menu/menu_mixer.cpp>
233
+HAS_MENU_MMU2           = src_filter=+<src/lcd/menu/menu_mmu2.cpp>
234
+HAS_MENU_POWER_MONITOR  = src_filter=+<src/lcd/menu/menu_power_monitor.cpp>
235
+HAS_MENU_CUTTER         = src_filter=+<src/lcd/menu/menu_spindle_laser.cpp>
236
+HAS_MENU_TEMPERATURE    = src_filter=+<src/lcd/menu/menu_temperature.cpp>
237
+HAS_MENU_TMC            = src_filter=+<src/lcd/menu/menu_tmc.cpp>
238
+HAS_MENU_TOUCH_SCREEN   = src_filter=+<src/lcd/menu/menu_touch_screen.cpp>
239
+HAS_MENU_UBL            = src_filter=+<src/lcd/menu/menu_ubl.cpp>
69
 ANYCUBIC_LCD_I3MEGA     = src_filter=+<src/lcd/extui/lib/anycubic_i3mega>
240
 ANYCUBIC_LCD_I3MEGA     = src_filter=+<src/lcd/extui/lib/anycubic_i3mega>
241
+HAS_DGUS_LCD            = src_filter=+<src/lcd/extui/lib/dgus> +<src/lcd/extui_dgus_lcd.cpp>
242
+TOUCH_UI_FTDI_EVE       = src_filter=+<src/lcd/extui/lib/ftdi_eve_touch_ui>
243
+HAS_ANYCUBIC_TFT_EXTUI  = src_filter=+<src/lcd/extui_anycubic_tft.cpp>
244
+EXTUI_EXAMPLE           = src_filter=+<src/lcd/extui_example.cpp>
245
+MALYAN_LCD              = src_filter=+<src/lcd/extui_malyan_lcd.cpp>
246
+HAS_SPI_LCD             = src_filter=+<src/lcd/lcdprint.cpp>
70
 USB_FLASH_DRIVE_SUPPORT = src_filter=+<src/sd/usb_flashdrive>
247
 USB_FLASH_DRIVE_SUPPORT = src_filter=+<src/sd/usb_flashdrive>
71
-AUTO_BED_LEVELING_(3POINT|(BI)?LINEAR) = src_filter=+<src/feature/bedlevel/abl> +<src/gcode/bedlevel/abl>
248
+AUTO_BED_LEVELING_BILINEAR = src_filter=+<src/feature/bedlevel/abl>
249
+AUTO_BED_LEVELING_(3POINT|(BI)?LINEAR) = src_filter=+<src/gcode/bedlevel/abl>
72
 MESH_BED_LEVELING       = src_filter=+<src/feature/bedlevel/mbl> +<src/gcode/bedlevel/mbl>
250
 MESH_BED_LEVELING       = src_filter=+<src/feature/bedlevel/mbl> +<src/gcode/bedlevel/mbl>
73
 AUTO_BED_LEVELING_UBL   = src_filter=+<src/feature/bedlevel/ubl> +<src/gcode/bedlevel/ubl>
251
 AUTO_BED_LEVELING_UBL   = src_filter=+<src/feature/bedlevel/ubl> +<src/gcode/bedlevel/ubl>
252
+BACKLASH_COMPENSATION   = src_filter=+<src/feature/backlash.cpp>
253
+BARICUDA                = src_filter=+<src/feature/baricuda.cpp> +<src/gcode/feature/baricuda>
254
+BINARY_FILE_TRANSFER    = src_filter=+<src/feature/binary_stream.cpp> +<src/libs/heatshrink>
255
+BLTOUCH                 = src_filter=+<src/feature/bltouch.cpp>
256
+CANCEL_OBJECTS          = src_filter=+<src/feature/cancel_object.cpp> +<src/gcode/feature/cancel>
257
+CASE_LIGHT_ENABLE       = src_filter=+<src/feature/caselight> +<src/gcode/feature/caselight>
258
+EXTERNAL_CLOSED_LOOP_CONTROLLER = src_filter=+<src/feature/closedloop.cpp> +<src/gcode/calibrate/M12.cpp>
259
+USE_CONTROLLER_FAN      = src_filter=+<src/feature/controllerfan.cpp>
74
 DAC_STEPPER_CURRENT     = src_filter=+<src/feature/dac>
260
 DAC_STEPPER_CURRENT     = src_filter=+<src/feature/dac>
75
-HAS_I2C_DIGIPOT         = src_filter=+<src/feature/digipot>
76
-HAS_LED_FEATURE         = src_filter=+<src/feature/leds>
77
-(ESP3D_)?WIFISUPPORT = AsyncTCP, ESP Async WebServer
261
+DIRECT_STEPPING         = src_filter=+<src/feature/direct_stepping.cpp> +<src/gcode/motion/G6.cpp>
262
+EMERGENCY_PARSER        = src_filter=+<src/feature/e_parser.cpp> -<src/gcode/control/M108_*.cpp>
263
+I2C_POSITION_ENCODERS   = src_filter=+<src/feature/encoder_i2c.cpp>
264
+HAS_FANMUX              = src_filter=+<src/feature/fanmux.cpp>
265
+FILAMENT_WIDTH_SENSOR   = src_filter=+<src/feature/filwidth.cpp> +<src/gcode/feature/filwidth>
266
+FWRETRACT               = src_filter=+<src/feature/fwretract.cpp> +<src/gcode/feature/fwretract>
267
+HOST_ACTION_COMMANDS    = src_filter=+<src/feature/host_actions.cpp>
268
+HOTEND_IDLE_TIMEOUT     = src_filter=+<src/feature/hotend_idle.cpp>
269
+JOYSTICK                = src_filter=+<src/feature/joystick.cpp>
270
+BLINKM                  = src_filter=+<src/feature/leds/blinkm.cpp>
271
+HAS_COLOR_LEDS          = src_filter=+<src/feature/leds/leds.cpp> +<src/gcode/feature/leds/M150.cpp>
272
+PCA9533                 = src_filter=+<src/feature/leds/pca9533.cpp>
273
+PCA9632                 = src_filter=+<src/feature/leds/pca9632.cpp>
274
+PRINTER_EVENT_LEDS      = src_filter=+<src/feature/leds/printer_event_leds.cpp>
275
+TEMP_STAT_LEDS          = src_filter=+<src/feature/leds/tempstat.cpp>
276
+MAX7219_DEBUG           = src_filter=+<src/feature/max7219.cpp> +<src/gcode/feature/leds/M7219.cpp>
277
+MIXING_EXTRUDER         = src_filter=+<src/feature/mixing.cpp> +<src/gcode/feature/mixing/M163-M165.cpp>
278
+PRUSA_MMU2              = src_filter=+<src/feature/mmu2> +<src/gcode/feature/prusa_MMU2>
279
+ADVANCED_PAUSE_FEATURE  = src_filter=+<src/feature/pause.cpp> +<src/gcode/feature/pause/M600.cpp> +<src/gcode/feature/pause/M603.cpp>
280
+AUTO_POWER_CONTROL      = src_filter=+<src/feature/power.cpp>
281
+HAS_POWER_MONITOR       = src_filter=+<src/feature/power_monitor.cpp> +<src/gcode/feature/power_monitor>
282
+POWER_LOSS_RECOVERY     = src_filter=+<src/feature/powerloss.cpp> +<src/gcode/feature/powerloss>
283
+PROBE_TEMP_COMPENSATION = src_filter=+<src/feature/probe_temp_comp.cpp> +<src/gcode/calibrate/G76_M871.cpp>
284
+HAS_FILAMENT_SENSOR     = src_filter=+<src/feature/runout.cpp> +<src/gcode/feature/runout>
285
+MK2_MULTIPLEXER         = src_filter=+<src/feature/snmm.cpp>
286
+EXT_SOLENOID|MANUAL_SOLENOID_CONTROL = src_filter=+<src/feature/solenoid.cpp>
287
+HAS_CUTTER              = src_filter=+<src/feature/spindle_laser.cpp> +<src/gcode/control/M3-M5.cpp>
288
+EXPERIMENTAL_I2CBUS     = src_filter=+<src/feature/twibus.cpp> +<src/gcode/feature/i2c>
289
+Z_STEPPER_AUTO_ALIGN    = src_filter=+<src/feature/z_stepper_align.cpp> +<src/gcode/calibrate/G34_M422.cpp>
290
+G26_MESH_VALIDATION     = src_filter=+<src/gcode/bedlevel/G26.cpp>
291
+ASSISTED_TRAMMING       = src_filter=+<src/gcode/bedlevel/G35.cpp>
292
+HAS_MESH                = src_filter=+<src/gcode/bedlevel/G42.cpp>
293
+HAS_LEVELING            = src_filter=+<src/gcode/bedlevel/M420.cpp>
294
+DELTA_AUTO_CALIBRATION  = src_filter=+<src/gcode/calibrate/G33.cpp>
295
+CALIBRATION_GCODE       = src_filter=+<src/gcode/calibrate/G425.cpp>
296
+Z_MIN_PROBE_REPEATABILITY_TEST = src_filter=+<src/gcode/calibrate/M48.cpp>
297
+M100_FREE_MEMORY_WATCHER = src_filter=+<src/gcode/calibrate/M100.cpp>
298
+BACKLASH_GCODE          = src_filter=+<src/gcode/calibrate/M425.cpp>
299
+IS_KINEMATIC            = src_filter=+<src/gcode/calibrate/M665.cpp>
300
+HAS_EXTRA_ENDSTOPS      = src_filter=+<src/gcode/calibrate/M666.cpp>
301
+SKEW_CORRECTION_GCODE   = src_filter=+<src/gcode/calibrate/M852.cpp>
302
+PINS_DEBUGGING          = src_filter=-<src/gcode/config/M43.cpp>
303
+NO_VOLUMETRICS          = src_filter=-<src/gcode/config/M200-M205.cpp>
304
+HAS_MULTI_EXTRUDER      = src_filter=+<src/gcode/config/M217.cpp>
305
+HAS_HOTEND_OFFSET       = src_filter=+<src/gcode/config/M218.cpp>
306
+EDITABLE_SERVO_ANGLES   = src_filter=+<src/gcode/config/M281.cpp>
307
+PREVENT_COLD_EXTRUSION  = src_filter=+<src/gcode/config/M302.cpp>
308
+HAS_USER_THERMISTORS    = src_filter=+<src/gcode/config/M305.cpp>
309
+SD_ABORT_ON_ENDSTOP_HIT = src_filter=+<src/gcode/config/M540.cpp>
310
+COOLANT_CONTROL         = src_filter=+<src/gcode/control/M7-M9.cpp>
311
+HAS_SOFTWARE_ENDSTOPS   = src_filter=+<src/gcode/control/M211.cpp>
312
+HAS_DUPLICATION_MODE    = src_filter=+<src/gcode/control/M605.cpp>
313
+LIN_ADVANCE             = src_filter=+<src/gcode/feature/advance>
314
+PHOTO_GCODE             = src_filter=+<src/gcode/feature/camera>
315
+CONTROLLER_FAN_EDITABLE = src_filter=+<src/gcode/feature/controllerfan>
316
+GCODE_MACROS            = src_filter=+<src/gcode/feature/macro>
317
+GRADIENT_MIX            = src_filter=+<src/gcode/feature/mixing/M166.cpp>
318
+HAS_SAVED_POSITIONS     = src_filter=+<src/gcode/feature/pause/G60.cpp> +<src/gcode/feature/pause/G61.cpp>
319
+PARK_HEAD_ON_PAUSE      = src_filter=+<src/gcode/feature/pause/M125.cpp>
320
+FILAMENT_LOAD_UNLOAD_GCODES = src_filter=+<src/gcode/feature/pause/M701_M702.cpp>
321
+CNC_WORKSPACE_PLANES    = src_filter=+<src/gcode/geometry/G17-G19.cpp>
322
+CNC_COORDINATE_SYSTEMS  = src_filter=+<src/gcode/geometry/G53-G59.cpp>
323
+HAS_M206_COMMAND        = src_filter=+<src/gcode/geometry/M206_M428.cpp>
324
+EXPECTED_PRINTER_CHECK  = src_filter=+<src/gcode/host/M16.cpp>
325
+HOST_KEEPALIVE_FEATURE  = src_filter=+<src/gcode/host/M113.cpp>
326
+REPETIER_GCODE_M360     = src_filter=+<src/gcode/host/M360.cpp>
327
+HAS_GCODE_M876          = src_filter=+<src/gcode/host/M876.cpp>
328
+HAS_RESUME_CONTINUE     = src_filter=+<src/gcode/lcd/M0_M1.cpp>
329
+HAS_PREHEAT_COUNT       = src_filter=+<src/gcode/lcd/M145.cpp>
330
+HAS_LCD_CONTRAST        = src_filter=+<src/gcode/lcd/M250.cpp>
331
+LCD_SET_PROGRESS_MANUALLY = src_filter=+<src/gcode/lcd/M73.cpp>
332
+TOUCH_SCREEN_CALIBRATION = src_filter=+<src/gcode/lcd/M995.cpp>
333
+ARC_SUPPORT             = src_filter=+<src/gcode/motion/G2_G3.cpp>
334
+GCODE_MOTION_MODES      = src_filter=+<src/gcode/motion/G80.cpp>
335
+BABYSTEPPING            = src_filter=+<src/gcode/motion/M290.cpp>
336
+Z_PROBE_SLED            = src_filter=+<src/gcode/probe/G31_G32.cpp>
337
+G38_PROBE_TARGET        = src_filter=+<src/gcode/probe/G38.cpp>
338
+MAGNETIC_PARKING_EXTRUDER = src_filter=+<src/gcode/probe/M951.cpp>
339
+SDSUPPORT               = src_filter=+<src/gcode/sd>
340
+HAS_EXTRUDERS           = src_filter=+<src/gcode/temp/M104_M109.cpp> +<src/gcode/config/M221.cpp>
341
+INCH_MODE_SUPPORT       = src_filter=+<src/gcode/units/G20_G21.cpp>
342
+TEMPERATURE_UNITS_SUPPORT = src_filter=+<src/gcode/units/M149.cpp>
343
+NEED_HEX_PRINT          = src_filter=+<src/libs/hex_print.cpp>
344
+NEED_LSF                = src_filter=+<src/libs/least_squares_fit.cpp>
345
+NOZZLE_PARK_FEATURE     = src_filter=+<src/libs/nozzle.cpp> +<src/gcode/feature/pause/G27.cpp>
346
+NOZZLE_CLEAN_FEATURE    = src_filter=+<src/libs/nozzle.cpp> +<src/gcode/feature/clean>
347
+DELTA                   = src_filter=+<src/module/delta.cpp> +<src/gcode/calibrate/M666.cpp>
348
+BEZIER_CURVE_SUPPORT    = src_filter=+<src/module/planner_bezier.cpp> +<src/gcode/motion/G5.cpp>
349
+PRINTCOUNTER            = src_filter=+<src/module/printcounter.cpp>
350
+HAS_BED_PROBE           = src_filter=+<src/module/probe.cpp> +<src/gcode/probe/G30.cpp> +<src/gcode/probe/M401_M402.cpp> +<src/gcode/probe/M851.cpp>
351
+IS_SCARA                = src_filter=+<src/module/scara.cpp>
352
+MORGAN_SCARA            = src_filter=+<src/gcode/scara>
353
+(ESP3D_)?WIFISUPPORT    = AsyncTCP, ESP Async WebServer
78
   ESP3DLib=https://github.com/luc-github/ESP3DLib.git
354
   ESP3DLib=https://github.com/luc-github/ESP3DLib.git
79
   arduinoWebSockets=https://github.com/Links2004/arduinoWebSockets.git
355
   arduinoWebSockets=https://github.com/Links2004/arduinoWebSockets.git
80
   ESP32SSDP=https://github.com/luc-github/ESP32SSDP.git
356
   ESP32SSDP=https://github.com/luc-github/ESP32SSDP.git
268
 
544
 
269
 [env:DUE_USB]
545
 [env:DUE_USB]
270
 platform      = atmelsam
546
 platform      = atmelsam
547
+extends       = env:DUE
271
 board         = dueUSB
548
 board         = dueUSB
272
-src_filter    = ${common.default_src_filter} +<src/HAL/DUE>
273
 
549
 
274
 [env:DUE_debug]
550
 [env:DUE_debug]
275
 # Used when WATCHDOG_RESET_MANUAL is enabled
551
 # Used when WATCHDOG_RESET_MANUAL is enabled
276
 platform      = atmelsam
552
 platform      = atmelsam
277
-board         = due
278
-src_filter    = ${common.default_src_filter} +<src/HAL/DUE>
553
+extends       = env:DUE
279
 build_flags   = ${common.build_flags}
554
 build_flags   = ${common.build_flags}
280
   -funwind-tables
555
   -funwind-tables
281
   -mpoke-function-name
556
   -mpoke-function-name
285
 #
560
 #
286
 [common_DUE_archim]
561
 [common_DUE_archim]
287
 platform      = atmelsam
562
 platform      = atmelsam
288
-board         = due
289
-src_filter    = ${common.default_src_filter} +<src/HAL/DUE>
563
+extends       = env:DUE
290
 build_flags   = ${common.build_flags}
564
 build_flags   = ${common.build_flags}
291
   -DARDUINO_SAM_ARCHIM -DARDUINO_ARCH_SAM -D__SAM3X8E__ -DUSBCON
565
   -DARDUINO_SAM_ARCHIM -DARDUINO_ARCH_SAM -D__SAM3X8E__ -DUSBCON
292
 extra_scripts = ${common.extra_scripts}
566
 extra_scripts = ${common.extra_scripts}
320
 lib_deps       = ${common.lib_deps}
594
 lib_deps       = ${common.lib_deps}
321
   SoftwareSerialM
595
   SoftwareSerialM
322
   Adafruit SPIFlash
596
   Adafruit SPIFlash
323
-  SdFat - Adafruit Fork
597
+marlin.SDSUPPORT = SdFat - Adafruit Fork
324
 debug_tool     = jlink
598
 debug_tool     = jlink
325
 
599
 
326
 #################################
600
 #################################
342
 src_filter        = ${common.default_src_filter} +<src/HAL/LPC1768>
616
 src_filter        = ${common.default_src_filter} +<src/HAL/LPC1768>
343
 lib_deps          = ${common.lib_deps}
617
 lib_deps          = ${common.lib_deps}
344
   Servo
618
   Servo
345
-  LiquidCrystal@1.0.0
346
-  Adafruit NeoPixel=https://github.com/p3p/Adafruit_NeoPixel/archive/1.5.0.zip
619
+marlin.USES_LIQUIDCRYSTAL = LiquidCrystal@1.0.0
620
+marlin.NEOPIXEL_LED = Adafruit NeoPixel=https://github.com/p3p/Adafruit_NeoPixel/archive/1.5.0.zip
347
 build_flags       = ${common.build_flags} -DU8G_HAL_LINKS -IMarlin/src/HAL/LPC1768/include -IMarlin/src/HAL/LPC1768/u8g
621
 build_flags       = ${common.build_flags} -DU8G_HAL_LINKS -IMarlin/src/HAL/LPC1768/include -IMarlin/src/HAL/LPC1768/u8g
348
   # debug options for backtrace
622
   # debug options for backtrace
349
   #-funwind-tables
623
   #-funwind-tables
426
   pre:buildroot/share/PlatformIO/scripts/STM32F1_create_variant.py
700
   pre:buildroot/share/PlatformIO/scripts/STM32F1_create_variant.py
427
   buildroot/share/PlatformIO/scripts/STM32F103RC_MEEB_3DP.py
701
   buildroot/share/PlatformIO/scripts/STM32F103RC_MEEB_3DP.py
428
 lib_deps          = ${common.lib_deps}
702
 lib_deps          = ${common.lib_deps}
429
-  Adafruit NeoPixel=https://github.com/ccccmagicboy/Adafruit_NeoPixel#meeb_3dp_use
430
   SoftwareSerialM
703
   SoftwareSerialM
431
   USBComposite for STM32F1@0.91
704
   USBComposite for STM32F1@0.91
705
+marlin.NEOPIXEL_LED = Adafruit NeoPixel=https://github.com/ccccmagicboy/Adafruit_NeoPixel#meeb_3dp_use
432
 debug_tool        = stlink
706
 debug_tool        = stlink
433
 upload_protocol   = dfu
707
 upload_protocol   = dfu
434
 
708
 

正在加载...
取消
保存