@@ -150,18 +150,8 @@ void WS2812FX::setPixelColor(uint16_t i, byte r, byte g, byte b, byte w)
150150 }
151151 }
152152
153- // reorder channels to selected order
154153 RgbwColor col;
155- switch (colorOrder)
156- {
157- case 0 : col.G = g; col.R = r; col.B = b; break ; // 0 = GRB, default
158- case 1 : col.G = r; col.R = g; col.B = b; break ; // 1 = RGB, common for WS2811
159- case 2 : col.G = b; col.R = r; col.B = g; break ; // 2 = BRG
160- case 3 : col.G = r; col.R = b; col.B = g; break ; // 3 = RBG
161- case 4 : col.G = b; col.R = g; col.B = r; break ; // 4 = BGR
162- default : col.G = g; col.R = b; col.B = r; break ; // 5 = GBR
163- }
164- col.W = w;
154+ col.R = r; col.G = g; col.B = b; col.W = w;
165155
166156 uint16_t skip = _skipFirstMode ? LED_SKIP_AMOUNT : 0 ;
167157 if (SEGLEN) {// from segment
@@ -258,7 +248,7 @@ void WS2812FX::show(void) {
258248
259249 for (uint16_t i = 0 ; i < _length; i++) // sum up the usage of each LED
260250 {
261- RgbwColor c = bus->GetPixelColorRgbw (i);
251+ RgbwColor c = bus->GetPixelColorRaw (i);
262252
263253 if (useWackyWS2815PowerModel)
264254 {
@@ -467,18 +457,7 @@ uint32_t WS2812FX::getPixelColor(uint16_t i)
467457
468458 if (i >= _lengthRaw) return 0 ;
469459
470- RgbwColor col = bus->GetPixelColorRgbw (i);
471- switch (colorOrder)
472- {
473- // W G R B
474- case 0 : return ((col.W << 24 ) | (col.G << 8 ) | (col.R << 16 ) | (col.B )); // 0 = GRB, default
475- case 1 : return ((col.W << 24 ) | (col.R << 8 ) | (col.G << 16 ) | (col.B )); // 1 = RGB, common for WS2811
476- case 2 : return ((col.W << 24 ) | (col.B << 8 ) | (col.R << 16 ) | (col.G )); // 2 = BRG
477- case 3 : return ((col.W << 24 ) | (col.B << 8 ) | (col.G << 16 ) | (col.R )); // 3 = RBG
478- case 4 : return ((col.W << 24 ) | (col.R << 8 ) | (col.B << 16 ) | (col.G )); // 4 = BGR
479- case 5 : return ((col.W << 24 ) | (col.G << 8 ) | (col.B << 16 ) | (col.R )); // 5 = GBR
480- }
481- return 0 ;
460+ return bus->GetPixelColorRgbw (i);
482461}
483462
484463WS2812FX::Segment& WS2812FX::getSegment (uint8_t id) {
@@ -498,6 +477,14 @@ uint32_t WS2812FX::getLastShow(void) {
498477 return _lastShow;
499478}
500479
480+ uint8_t WS2812FX::getColorOrder (void ) {
481+ return bus->GetColorOrder ();
482+ }
483+
484+ void WS2812FX::setColorOrder (uint8_t co) {
485+ bus->SetColorOrder (co);
486+ }
487+
501488void WS2812FX::setSegment (uint8_t n, uint16_t i1, uint16_t i2, uint8_t grouping, uint8_t spacing) {
502489 if (n >= MAX_NUM_SEGMENTS) return ;
503490 Segment& seg = _segments[n];
@@ -936,27 +923,30 @@ void WS2812FX::setRgbwPwm(void) {
936923
937924 _analogLastShow = nowUp;
938925
939- RgbwColor color = bus->GetPixelColorRgbw (0 );
926+ RgbwColor c;
927+ uint32_t col = bus->GetPixelColorRgbw (0 );
928+ c.R = col >> 16 ; c.G = col >> 8 ; c.B = col; c.W = col >> 24 ;
929+
940930 byte b = getBrightness ();
941931 if (color == _analogLastColor && b == _analogLastBri) return ;
942932
943933 // check color values for Warm / Cold white mix (for RGBW) // EsplanexaDevice.cpp
944934 #ifdef WLED_USE_5CH_LEDS
945- if (color .R == 255 && color .G == 255 && color .B == 255 && color .W == 255 ) {
946- bus->SetRgbwPwm (0 , 0 , 0 , 0 , color .W * b / 255 );
947- } else if (color .R == 127 && color .G == 127 && color .B == 127 && color .W == 255 ) {
948- bus->SetRgbwPwm (0 , 0 , 0 , color .W * b / 512 , color .W * b / 255 );
949- } else if (color .R == 0 && color .G == 0 && color .B == 0 && color .W == 255 ) {
950- bus->SetRgbwPwm (0 , 0 , 0 , color .W * b / 255 , 0 );
951- } else if (color .R == 130 && color .G == 90 && color .B == 0 && color .W == 255 ) {
952- bus->SetRgbwPwm (0 , 0 , 0 , color .W * b / 255 , color .W * b / 512 );
953- } else if (color .R == 255 && color .G == 153 && color .B == 0 && color .W == 255 ) {
954- bus->SetRgbwPwm (0 , 0 , 0 , color .W * b / 255 , 0 );
935+ if (c .R == 255 && c .G == 255 && c .B == 255 && c .W == 255 ) {
936+ bus->SetRgbwPwm (0 , 0 , 0 , 0 , c .W * b / 255 );
937+ } else if (c .R == 127 && c .G == 127 && c .B == 127 && c .W == 255 ) {
938+ bus->SetRgbwPwm (0 , 0 , 0 , c .W * b / 512 , c .W * b / 255 );
939+ } else if (c .R == 0 && c .G == 0 && c .B == 0 && c .W == 255 ) {
940+ bus->SetRgbwPwm (0 , 0 , 0 , c .W * b / 255 , 0 );
941+ } else if (c .R == 130 && c .G == 90 && c .B == 0 && c .W == 255 ) {
942+ bus->SetRgbwPwm (0 , 0 , 0 , c .W * b / 255 , c .W * b / 512 );
943+ } else if (c .R == 255 && c .G == 153 && c .B == 0 && c .W == 255 ) {
944+ bus->SetRgbwPwm (0 , 0 , 0 , c .W * b / 255 , 0 );
955945 } else { // not only white colors
956- bus->SetRgbwPwm (color .R * b / 255 , color .G * b / 255 , color .B * b / 255 , color .W * b / 255 );
946+ bus->SetRgbwPwm (c .R * b / 255 , c .G * b / 255 , c .B * b / 255 , c .W * b / 255 );
957947 }
958948 #else
959- bus->SetRgbwPwm (color .R * b / 255 , color .G * b / 255 , color .B * b / 255 , color .W * b / 255 );
949+ bus->SetRgbwPwm (c .R * b / 255 , c .G * b / 255 , c .B * b / 255 , c .W * b / 255 );
960950 #endif
961951 _analogLastColor = color;
962952 _analogLastBri = b;
0 commit comments