2828
2929#if ENABLED(NEOPIXEL_LED)
3030
31- #include " neopixel .h"
31+ #include " leds .h"
3232
3333#if EITHER(NEOPIXEL_STARTUP_TEST, NEOPIXEL2_STARTUP_TEST)
3434 #include " ../../core/utility.h"
3737Marlin_NeoPixel neo;
3838int8_t Marlin_NeoPixel::neoindex;
3939
40- Adafruit_NeoPixel Marlin_NeoPixel::adaneo1 (NEOPIXEL_PIXELS, NEOPIXEL_PIN, NEOPIXEL_TYPE + NEO_KHZ800)
41- #if CONJOINED_NEOPIXEL
42- , Marlin_NeoPixel::adaneo2(NEOPIXEL_PIXELS, NEOPIXEL2_PIN, NEOPIXEL2_TYPE + NEO_KHZ800)
43- #endif
44- ;
40+ Adafruit_NeoPixel Marlin_NeoPixel::adaneo1 (NEOPIXEL_PIXELS, NEOPIXEL_PIN, NEOPIXEL_TYPE + NEO_KHZ800);
41+ #if CONJOINED_NEOPIXEL
42+ Adafruit_NeoPixel Marlin_NeoPixel::adaneo2 (NEOPIXEL_PIXELS, NEOPIXEL2_PIN, NEOPIXEL2_TYPE + NEO_KHZ800);
43+ #endif
4544
46- #ifdef NEOPIXEL_BKGD_LED_INDEX
45+ #ifdef NEOPIXEL_BKGD_INDEX_FIRST
46+
47+ void Marlin_NeoPixel::set_background_color (uint8_t r, uint8_t g, uint8_t b, uint8_t w) {
48+ for (int background_led = NEOPIXEL_BKGD_INDEX_FIRST; background_led <= NEOPIXEL_BKGD_INDEX_LAST; background_led++)
49+ set_pixel_color (background_led, adaneo1.Color (r, g, b, w));
50+ }
4751
48- void Marlin_NeoPixel::set_color_background () {
49- uint8_t background_color[4 ] = NEOPIXEL_BKGD_COLOR;
50- set_pixel_color (NEOPIXEL_BKGD_LED_INDEX, adaneo1. Color ( background_color[0 ], background_color[1 ], background_color[2 ], background_color[3 ]) );
52+ void Marlin_NeoPixel::reset_background_color () {
53+ constexpr uint8_t background_color[4 ] = NEOPIXEL_BKGD_COLOR;
54+ set_background_color ( background_color[0 ], background_color[1 ], background_color[2 ], background_color[3 ]);
5155 }
5256
5357#endif
@@ -59,9 +63,10 @@ void Marlin_NeoPixel::set_color(const uint32_t color) {
5963 }
6064 else {
6165 for (uint16_t i = 0 ; i < pixels (); ++i) {
62- #ifdef NEOPIXEL_BKGD_LED_INDEX
63- if (i == NEOPIXEL_BKGD_LED_INDEX && TERN (NEOPIXEL_BKGD_ALWAYS_ON, true , color != 0x000000 )) {
64- set_color_background ();
66+ #ifdef NEOPIXEL_BKGD_INDEX_FIRST
67+ if (i == NEOPIXEL_BKGD_INDEX_FIRST && TERN (NEOPIXEL_BKGD_ALWAYS_ON, true , color != 0x000000 )) {
68+ reset_background_color ();
69+ i += NEOPIXEL_BKGD_INDEX_LAST - (NEOPIXEL_BKGD_INDEX_FIRST);
6570 continue ;
6671 }
6772 #endif
@@ -90,35 +95,22 @@ void Marlin_NeoPixel::init() {
9095 safe_delay (500 );
9196 set_color_startup (adaneo1.Color (0 , 0 , 255 , 0 )); // blue
9297 safe_delay (500 );
98+ #if HAS_WHITE_LED
99+ set_color_startup (adaneo1.Color (0 , 0 , 0 , 255 )); // white
100+ safe_delay (500 );
101+ #endif
93102 #endif
94103
95- #ifdef NEOPIXEL_BKGD_LED_INDEX
96- set_color_background ();
97- #endif
98-
99- #if ENABLED(LED_USER_PRESET_STARTUP)
100- set_color (adaneo1.Color (LED_USER_PRESET_RED, LED_USER_PRESET_GREEN, LED_USER_PRESET_BLUE, LED_USER_PRESET_WHITE));
101- #else
102- set_color (adaneo1.Color (0 , 0 , 0 , 0 ));
104+ #ifdef NEOPIXEL_BKGD_INDEX_FIRST
105+ reset_background_color ();
103106 #endif
104- }
105107
106- #if 0
107- bool Marlin_NeoPixel::set_led_color(const uint8_t r, const uint8_t g, const uint8_t b, const uint8_t w, const uint8_t p) {
108- const uint32_t color = adaneo1.Color(r, g, b, w);
109- set_brightness(p);
110- #if DISABLED(NEOPIXEL_IS_SEQUENTIAL)
111- set_color(color);
112- return false;
113- #else
114- static uint16_t nextLed = 0;
115- set_pixel_color(nextLed, color);
116- show();
117- if (++nextLed >= pixels()) nextLed = 0;
118- return true;
119- #endif
108+ set_color (adaneo1.Color
109+ TERN (LED_USER_PRESET_STARTUP,
110+ (LED_USER_PRESET_RED, LED_USER_PRESET_GREEN, LED_USER_PRESET_BLUE, LED_USER_PRESET_WHITE),
111+ (0 , 0 , 0 , 0 ))
112+ );
120113}
121- #endif
122114
123115#if ENABLED(NEOPIXEL2_SEPARATE)
124116
@@ -158,13 +150,17 @@ bool Marlin_NeoPixel::set_led_color(const uint8_t r, const uint8_t g, const uint
158150 safe_delay (500 );
159151 set_color_startup (adaneo.Color (0 , 0 , 255 , 0 )); // blue
160152 safe_delay (500 );
153+ #if HAS_WHITE_LED2
154+ set_color_startup (adaneo.Color (0 , 0 , 0 , 255 )); // white
155+ safe_delay (500 );
156+ #endif
161157 #endif
162158
163- # if ENABLED(NEO2_USER_PRESET_STARTUP)
164- set_color (adaneo. Color (NEO2_USER_PRESET_RED, NEO2_USER_PRESET_GREEN, NEO2_USER_PRESET_BLUE, NEO2_USER_PRESET_WHITE));
165- # else
166- set_color (adaneo. Color ( 0 , 0 , 0 , 0 ));
167- # endif
159+ set_color (adaneo. Color
160+ TERN (NEO2_USER_PRESET_STARTUP,
161+ (NEO2_USER_PRESET_RED, NEO2_USER_PRESET_GREEN, NEO2_USER_PRESET_BLUE, NEO2_USER_PRESET_WHITE),
162+ ( 0 , 0 , 0 , 0 ))
163+ );
168164 }
169165
170166#endif // NEOPIXEL2_SEPARATE
0 commit comments