diff --git a/wled00/cfg.cpp b/wled00/cfg.cpp index 8db1842f..3b9f5da2 100644 --- a/wled00/cfg.cpp +++ b/wled00/cfg.cpp @@ -199,6 +199,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) { } } CJSON(irEnabled, hw["ir"]["type"]); + CJSON(irApplyToAllSelected, hw["ir"]["sel"]); JsonObject relay = hw[F("relay")]; int hw_relay_pin = relay["pin"] | -2; @@ -625,6 +626,7 @@ void serializeConfig() { JsonObject hw_ir = hw.createNestedObject("ir"); hw_ir["pin"] = irPin; hw_ir["type"] = irEnabled; // the byte 'irEnabled' does contain the IR-Remote Type ( 0=disabled ) + hw_ir["sel"] = irApplyToAllSelected; JsonObject hw_relay = hw.createNestedObject(F("relay")); hw_relay["pin"] = rlyPin; diff --git a/wled00/colors.cpp b/wled00/colors.cpp index 21147dd9..c751ccac 100644 --- a/wled00/colors.cpp +++ b/wled00/colors.cpp @@ -11,6 +11,13 @@ void colorFromUint32(uint32_t in, bool secondary) _col[1] = G(in); _col[2] = B(in); _col[3] = W(in); + if (strip.applyToAllSelected) { + for (uint8_t i = 0; i < strip.getMaxSegments(); i++) { + WS2812FX::Segment& seg = strip.getSegment(i); + if (!seg.isActive() || !seg.isSelected()) continue; + seg.colors[secondary?1:0] = in; + } + } colorChanged = true; } @@ -21,6 +28,13 @@ void colorFromUint24(uint32_t in, bool secondary) _col[0] = R(in); _col[1] = G(in); _col[2] = B(in); + if (strip.applyToAllSelected) { + for (uint8_t i = 0; i < strip.getMaxSegments(); i++) { + WS2812FX::Segment& seg = strip.getSegment(i); + if (!seg.isActive() || !seg.isSelected()) continue; + seg.colors[secondary?1:0] = in & 0xFFFFFF; + } + } colorChanged = true; } diff --git a/wled00/data/settings_leds.htm b/wled00/data/settings_leds.htm index 805fd74c..6ccf3f95 100644 --- a/wled00/data/settings_leds.htm +++ b/wled00/data/settings_leds.htm @@ -579,6 +579,7 @@ Length:  ✕
+ Apply IR button to main segment only:
IR info
Relay GPIO: Invert  ✕
diff --git a/wled00/fcn_declare.h b/wled00/fcn_declare.h index 190745d9..74879a37 100644 --- a/wled00/fcn_declare.h +++ b/wled00/fcn_declare.h @@ -108,7 +108,7 @@ void sendImprovRPCResponse(uint8_t commandId); //ir.cpp //bool decodeIRCustom(uint32_t code); void applyRepeatActions(); -void relativeChange(byte* property, int8_t amount, byte lowerBoundary = 0, byte higherBoundary = 0xFF); +byte relativeChange(byte property, int8_t amount, byte lowerBoundary = 0, byte higherBoundary = 0xFF); void changeEffectSpeed(int8_t amount); void changeEffectIntensity(int8_t amount); void decodeIR(uint32_t code); diff --git a/wled00/html_settings.h b/wled00/html_settings.h index 23050e78..a950be5b 100644 --- a/wled00/html_settings.h +++ b/wled00/html_settings.h @@ -195,7 +195,7 @@ const uint8_t PAGE_settings_wifi[] PROGMEM = { // Autogenerated from wled00/data/settings_leds.htm, do not edit!! -const uint16_t PAGE_settings_leds_length = 6885; +const uint16_t PAGE_settings_leds_length = 6911; const uint8_t PAGE_settings_leds[] PROGMEM = { 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xdd, 0x3c, 0x6b, 0x57, 0xeb, 0x46, 0x92, 0xdf, 0xfd, 0x2b, 0x9a, 0x4e, 0x42, 0xa4, 0x41, 0x18, 0xc9, 0x0f, 0xc2, 0xb5, 0x2d, 0xb3, @@ -577,57 +577,58 @@ const uint8_t PAGE_settings_leds[] PROGMEM = { 0x13, 0xad, 0xe4, 0x5b, 0x5b, 0x35, 0xe7, 0x35, 0xd6, 0x8e, 0x69, 0xf7, 0x58, 0xd1, 0x13, 0xa5, 0xc4, 0x16, 0x5c, 0x3f, 0xd1, 0xee, 0x3b, 0x01, 0x16, 0x97, 0xc8, 0x22, 0xeb, 0x39, 0x77, 0x45, 0xe5, 0x19, 0x0b, 0xd1, 0x95, 0x44, 0x5c, 0xf4, 0x2b, 0x95, 0xb5, 0x76, 0xb2, 0xea, 0x26, 0xe7, - 0xaa, 0xfa, 0x23, 0x36, 0x93, 0x45, 0xc1, 0xfe, 0xe3, 0xf6, 0x56, 0x72, 0x6e, 0xa5, 0xe2, 0x7c, - 0x68, 0x79, 0xdc, 0xce, 0xca, 0xe0, 0x35, 0x87, 0x81, 0x8f, 0xb4, 0xea, 0x88, 0x4e, 0x20, 0xa9, - 0x30, 0xcf, 0xe3, 0x33, 0x88, 0xc4, 0x55, 0x81, 0x6e, 0x8b, 0x6d, 0x6a, 0x85, 0x9e, 0xaa, 0xf4, - 0x49, 0xb2, 0x5b, 0xe8, 0xa3, 0xd2, 0x23, 0x3f, 0x96, 0x18, 0x80, 0xf7, 0x5f, 0xc5, 0xf3, 0x15, - 0x63, 0x53, 0xb6, 0xc6, 0x48, 0x05, 0x6c, 0x67, 0xe4, 0x96, 0xfe, 0x04, 0x88, 0x90, 0xc6, 0x88, - 0x81, 0x9b, 0x83, 0xcb, 0x51, 0x0c, 0x71, 0x7a, 0x78, 0x04, 0x39, 0x85, 0xe8, 0xf1, 0xb9, 0xf4, - 0x0f, 0x58, 0xa5, 0xf0, 0x9e, 0xa2, 0xa1, 0xc0, 0xdb, 0xa8, 0x73, 0xc4, 0xa4, 0x15, 0xdf, 0x60, - 0xaf, 0xe0, 0xed, 0x9b, 0x4d, 0x78, 0xb8, 0x43, 0x1d, 0x31, 0xb8, 0xdc, 0x34, 0x9d, 0x4a, 0xc1, - 0x76, 0x88, 0xfc, 0xd0, 0x69, 0xf7, 0xd9, 0x8c, 0x9b, 0x2b, 0xaa, 0x52, 0xa9, 0xca, 0x9b, 0x16, - 0x17, 0x1b, 0x24, 0xbb, 0x16, 0x77, 0xab, 0xcb, 0x84, 0x54, 0x45, 0x7d, 0xbf, 0x9e, 0x88, 0xbc, - 0xe5, 0x16, 0xdb, 0xba, 0x22, 0x7c, 0xe1, 0x7e, 0xde, 0x08, 0x93, 0x6e, 0x99, 0x88, 0xcf, 0x67, - 0x47, 0xa2, 0xf1, 0xb5, 0xee, 0x9b, 0xd6, 0x39, 0xef, 0x7d, 0x96, 0xd1, 0x40, 0x61, 0x2d, 0x14, - 0x14, 0x6b, 0x89, 0xdd, 0x39, 0x24, 0x76, 0xe5, 0xfe, 0x6d, 0x5a, 0x96, 0xe3, 0xe5, 0xb9, 0x9c, - 0x61, 0x1f, 0xc2, 0x13, 0x53, 0x27, 0xef, 0x67, 0xaa, 0xca, 0x42, 0xe6, 0xb2, 0x1a, 0x54, 0xf1, - 0x72, 0xbd, 0xa5, 0x3e, 0xdc, 0xa4, 0x60, 0x17, 0x28, 0x54, 0x30, 0x31, 0x1c, 0x44, 0x11, 0x64, - 0xd7, 0x36, 0x16, 0x5d, 0x89, 0xce, 0x12, 0x93, 0x8c, 0x28, 0xa6, 0x01, 0x9f, 0xd8, 0x74, 0xca, - 0x88, 0x17, 0xc5, 0xb1, 0x2a, 0xb8, 0x30, 0x28, 0xcb, 0x94, 0xe3, 0x15, 0x19, 0x7d, 0x82, 0x94, - 0x90, 0x18, 0x49, 0x1a, 0x47, 0x50, 0x56, 0xa0, 0x03, 0xc8, 0x8a, 0x7a, 0x41, 0xa0, 0xb2, 0x15, - 0x7b, 0x89, 0x30, 0xb7, 0x50, 0xe8, 0x41, 0x8a, 0x43, 0x0c, 0xfc, 0xfd, 0x8b, 0x75, 0xec, 0xf8, - 0x7f, 0x2f, 0xaf, 0xf2, 0xc0, 0x30, 0xd2, 0x02, 0xc7, 0x4a, 0x70, 0x1f, 0xd7, 0x05, 0x57, 0x59, - 0x93, 0x9c, 0x53, 0xbe, 0x36, 0x3f, 0xa0, 0x42, 0xdd, 0x42, 0xc2, 0x95, 0xf8, 0xc8, 0xb4, 0xd4, - 0xa9, 0xf3, 0x38, 0x4a, 0x92, 0x11, 0x1b, 0xf2, 0xd7, 0xe4, 0x72, 0xfb, 0x51, 0xea, 0x4e, 0x8e, - 0x80, 0xe0, 0xcf, 0xcf, 0xac, 0x31, 0x77, 0xfb, 0x7e, 0x1b, 0x73, 0x4f, 0xc1, 0xe6, 0xf1, 0x11, - 0xfc, 0xf9, 0x24, 0x32, 0x4d, 0x0a, 0x5d, 0x8c, 0x6b, 0x16, 0xf0, 0x14, 0x02, 0x51, 0x9a, 0xb3, - 0xf9, 0x1a, 0x63, 0xd7, 0x1f, 0xa5, 0xa9, 0x20, 0x37, 0x43, 0xa8, 0x81, 0x41, 0x78, 0x62, 0x66, - 0x5a, 0xc9, 0xdf, 0xcf, 0x63, 0xf1, 0xf3, 0x0e, 0x39, 0x1e, 0xc5, 0xea, 0xe5, 0x2b, 0x0a, 0xb8, - 0x45, 0x8c, 0xf0, 0x4e, 0x28, 0x82, 0xc6, 0x7f, 0x2b, 0x9c, 0xd5, 0x76, 0x5b, 0xba, 0xed, 0xbd, - 0xae, 0xe8, 0x95, 0x12, 0x42, 0x48, 0xe4, 0x2a, 0x12, 0x0b, 0xb3, 0x52, 0xd1, 0xde, 0xfe, 0x5e, - 0x16, 0xc0, 0x7f, 0x67, 0x7e, 0x2a, 0xda, 0x09, 0x60, 0x69, 0x5b, 0x2b, 0x54, 0x88, 0xde, 0x1f, - 0x61, 0xa9, 0x77, 0xc4, 0x6d, 0x7c, 0x4d, 0x44, 0xd6, 0x97, 0x01, 0x55, 0x36, 0x8f, 0xa0, 0xf4, - 0xe7, 0x61, 0xec, 0x27, 0x65, 0x31, 0x0f, 0xe4, 0x2e, 0xce, 0x5c, 0xe3, 0xaf, 0x65, 0x40, 0x6d, - 0x82, 0xf9, 0xb0, 0x58, 0x8c, 0x8a, 0x7c, 0xda, 0x63, 0xe0, 0xd0, 0x3d, 0x5e, 0x30, 0x9d, 0xd7, - 0xce, 0xc1, 0x9d, 0xdf, 0x16, 0x4f, 0xd4, 0x69, 0x65, 0x7a, 0xf4, 0x68, 0x17, 0x5b, 0x24, 0x87, - 0x1e, 0x0b, 0xbc, 0x79, 0xc0, 0x00, 0xb5, 0x68, 0xab, 0xe1, 0xef, 0x78, 0x85, 0x21, 0x0f, 0x64, - 0x5b, 0x03, 0xf2, 0x80, 0x92, 0x8e, 0xc0, 0x59, 0x41, 0x7e, 0x95, 0x5c, 0x80, 0xbf, 0x40, 0x10, - 0xdd, 0x21, 0x37, 0x69, 0x95, 0x3c, 0xde, 0x21, 0xbb, 0xca, 0x99, 0xe7, 0xa1, 0xae, 0x6d, 0x45, - 0x03, 0x92, 0x7b, 0x3f, 0x67, 0x41, 0x79, 0x71, 0x5e, 0x39, 0xcf, 0xa6, 0x02, 0x93, 0xce, 0x27, - 0xf0, 0x8a, 0x7c, 0x6e, 0xa8, 0x1a, 0x0d, 0x63, 0x20, 0x6f, 0x06, 0x93, 0x79, 0x80, 0x1a, 0x26, - 0x00, 0x97, 0x02, 0x09, 0xfc, 0x96, 0xe8, 0xb8, 0x2b, 0x55, 0x55, 0xc6, 0x71, 0xde, 0x5b, 0xf5, - 0x1c, 0x2a, 0x5c, 0xc1, 0x4a, 0x9e, 0x0d, 0x1f, 0x70, 0x09, 0x87, 0x62, 0x59, 0xb5, 0xb9, 0x16, - 0x08, 0xae, 0x66, 0x9f, 0xd7, 0xbd, 0x32, 0x65, 0xbd, 0x14, 0x1f, 0x81, 0x11, 0xe3, 0x31, 0x66, - 0x33, 0xac, 0xee, 0xa7, 0xd1, 0x03, 0x0c, 0x36, 0x77, 0x88, 0xbf, 0xa2, 0x87, 0xb0, 0xe0, 0x91, - 0x2d, 0x12, 0x82, 0x23, 0xcd, 0x1d, 0x6b, 0xa1, 0xc1, 0x43, 0x3c, 0x75, 0xb9, 0x06, 0x5d, 0xa2, - 0xd0, 0xb8, 0xf8, 0x25, 0x1e, 0xb9, 0x7c, 0xa1, 0x94, 0xc1, 0xc7, 0xf2, 0x80, 0x23, 0xf6, 0xbc, - 0xf8, 0xdb, 0x04, 0xad, 0x1d, 0x8a, 0x53, 0xcb, 0x72, 0xf9, 0x8f, 0x90, 0xcb, 0x57, 0x72, 0x41, - 0x7f, 0xbc, 0xee, 0xbf, 0x5a, 0x9b, 0x78, 0x23, 0x51, 0x98, 0x85, 0x23, 0x7f, 0x4c, 0x52, 0x3e, - 0x9d, 0x05, 0x45, 0xfa, 0x95, 0xf2, 0x9c, 0xaf, 0x46, 0xc9, 0xbf, 0x9e, 0xf3, 0x51, 0xbd, 0xf5, - 0x9b, 0xed, 0x10, 0xd7, 0xa0, 0x86, 0x10, 0xa1, 0xbd, 0x2c, 0xdf, 0xc3, 0x8e, 0x7b, 0x29, 0xf2, - 0xca, 0x1b, 0x7a, 0xf9, 0xbb, 0x5a, 0xf9, 0x47, 0xb8, 0x3d, 0x51, 0xc8, 0x85, 0xe5, 0x4f, 0xad, - 0x69, 0xb2, 0x47, 0xb8, 0xb1, 0x81, 0xbb, 0x1c, 0xf8, 0x53, 0x7f, 0xff, 0x07, 0xba, 0x65, 0x02, - 0x78, 0xfa, 0x4f, 0x00, 0x00 + 0xaa, 0xfa, 0x23, 0x36, 0x93, 0x45, 0xc1, 0xfe, 0xe3, 0xf6, 0x56, 0x72, 0xe5, 0x4c, 0x64, 0xab, + 0xa0, 0x2f, 0xda, 0x06, 0xf0, 0x73, 0x64, 0x3f, 0xcc, 0x5c, 0x0e, 0x7e, 0xd3, 0xfe, 0xca, 0x89, + 0x82, 0xab, 0xfe, 0xe7, 0x3c, 0x8b, 0xaf, 0x08, 0x2d, 0x17, 0x87, 0x4d, 0xcb, 0x93, 0x80, 0xac, + 0xa6, 0x5e, 0xc3, 0x8a, 0x8f, 0x34, 0x46, 0xd1, 0x56, 0x24, 0x15, 0xe6, 0x79, 0x7c, 0x06, 0x61, + 0xbd, 0x2a, 0xd0, 0x6d, 0x31, 0x74, 0x6d, 0x1d, 0x53, 0x95, 0x8b, 0xc9, 0xb9, 0x17, 0x9a, 0xb2, + 0xf4, 0xc8, 0x8f, 0x25, 0x06, 0x10, 0xc4, 0xaf, 0xe2, 0xf9, 0x8a, 0xe5, 0x2a, 0xc3, 0x65, 0xa4, + 0x02, 0x86, 0x38, 0x72, 0x4b, 0x7f, 0x4f, 0x44, 0x88, 0x76, 0xc4, 0xc0, 0x67, 0xc2, 0xe5, 0x28, + 0x86, 0xa0, 0x3f, 0x3c, 0x82, 0x04, 0x45, 0x34, 0x0c, 0x5d, 0xfa, 0x07, 0x2c, 0x79, 0x78, 0x4f, + 0xd1, 0xea, 0xe0, 0x6d, 0xd4, 0x39, 0x62, 0x52, 0xb6, 0x37, 0xd8, 0x78, 0x78, 0xfb, 0xce, 0x15, + 0x9e, 0x14, 0x51, 0xe7, 0x15, 0x2e, 0x37, 0xed, 0xb0, 0x52, 0x30, 0x44, 0x22, 0xbf, 0x9a, 0xda, + 0xbd, 0x2c, 0x37, 0x57, 0x54, 0xe5, 0x65, 0x95, 0x37, 0x69, 0x0a, 0x76, 0x5b, 0x76, 0x68, 0xca, + 0x76, 0xff, 0x0b, 0x79, 0x8f, 0xfa, 0x18, 0x3e, 0x11, 0x49, 0xd0, 0x2d, 0xf6, 0x88, 0x45, 0x2c, + 0xc4, 0xcd, 0xc1, 0x11, 0x66, 0xf0, 0x32, 0xab, 0x9f, 0xcf, 0x8e, 0x44, 0x17, 0x6d, 0xdd, 0xd1, + 0xad, 0x73, 0xde, 0x53, 0xfa, 0xa4, 0xb0, 0x16, 0xaa, 0x93, 0xb5, 0x2c, 0xf1, 0x1c, 0xb2, 0xc4, + 0x72, 0x67, 0x39, 0x2d, 0x4b, 0x18, 0xf3, 0xc4, 0xd0, 0xb0, 0x0f, 0xe1, 0x89, 0xa9, 0x2b, 0x81, + 0x33, 0x55, 0xb2, 0x21, 0x73, 0x59, 0x41, 0xab, 0x78, 0xb9, 0xde, 0x52, 0x6c, 0x6e, 0x52, 0xb0, + 0x0b, 0x14, 0x2a, 0x98, 0x65, 0x0e, 0xa2, 0x08, 0x52, 0x75, 0x1b, 0x2b, 0xb8, 0x44, 0xa7, 0x9c, + 0x49, 0x46, 0x14, 0x73, 0x8a, 0x4f, 0x6c, 0x3a, 0x65, 0xc4, 0x8b, 0xe2, 0x58, 0x55, 0x6f, 0x18, + 0xe1, 0x65, 0xfe, 0xf2, 0x8a, 0x8c, 0x3e, 0x41, 0x7e, 0x49, 0x8c, 0x24, 0x8d, 0x23, 0xa8, 0x51, + 0xd0, 0x9b, 0x64, 0x1d, 0x02, 0x41, 0xa0, 0xb2, 0x15, 0x7b, 0x89, 0x30, 0xb7, 0x50, 0xe8, 0x41, + 0xbe, 0x44, 0x0c, 0xfc, 0x31, 0x8d, 0x75, 0xec, 0xf8, 0x7f, 0x2f, 0x2f, 0x19, 0xc1, 0x30, 0xd2, + 0x02, 0xc7, 0x4a, 0x70, 0x1f, 0xd7, 0x05, 0x57, 0x59, 0x93, 0x9c, 0x53, 0xbe, 0x36, 0x3f, 0xa0, + 0x42, 0xdd, 0x42, 0xf6, 0x96, 0xf8, 0xc8, 0xb4, 0xd4, 0xa9, 0xf3, 0x38, 0x4a, 0x92, 0x11, 0x1b, + 0xf2, 0xd7, 0xe4, 0x72, 0xfb, 0x51, 0xea, 0x4e, 0x8e, 0x80, 0xe0, 0x6f, 0xd9, 0xac, 0x31, 0x77, + 0xfb, 0x7e, 0x1b, 0x73, 0x4f, 0xc1, 0xe6, 0x59, 0x14, 0xfc, 0x2d, 0x26, 0x32, 0x4d, 0x0a, 0x2d, + 0x91, 0x6b, 0x16, 0xf0, 0x14, 0xa2, 0x5a, 0x9a, 0xb3, 0xf9, 0x1a, 0x63, 0xd7, 0x1f, 0xa5, 0xa9, + 0x20, 0x37, 0x43, 0x28, 0xa8, 0x41, 0x78, 0x62, 0x66, 0x5a, 0xc9, 0xdf, 0xcf, 0x63, 0xf1, 0x5b, + 0x11, 0x39, 0x1e, 0xc5, 0xea, 0xe5, 0x2b, 0x0a, 0xb8, 0x45, 0x8c, 0xf0, 0x4e, 0x28, 0x82, 0xc6, + 0x7f, 0x2b, 0x9c, 0xd5, 0x76, 0x5b, 0xba, 0xed, 0xbd, 0xae, 0xe8, 0x95, 0x12, 0x42, 0x48, 0xe4, + 0x2a, 0x12, 0x0b, 0xb3, 0x52, 0x1e, 0xdf, 0xfe, 0x5e, 0x96, 0x0d, 0xfc, 0xce, 0xfc, 0x54, 0xf4, + 0x26, 0xc0, 0xd2, 0xb6, 0x96, 0xbb, 0x90, 0x0a, 0x7c, 0x84, 0xa5, 0xde, 0x91, 0x04, 0xe0, 0x6b, + 0x22, 0x52, 0xc8, 0x0c, 0xa8, 0xb2, 0x79, 0x9e, 0xa5, 0x3f, 0x0f, 0x63, 0x3f, 0x29, 0x0b, 0xa0, + 0x20, 0x77, 0x71, 0x80, 0x1b, 0x7f, 0x7a, 0x03, 0x0a, 0x1d, 0x8c, 0x74, 0x62, 0x31, 0x2a, 0xf2, + 0x69, 0x8f, 0x81, 0x43, 0xf7, 0x78, 0xc1, 0x74, 0x5e, 0x3b, 0x54, 0x77, 0x7e, 0x5b, 0x3c, 0x9e, + 0xa7, 0x95, 0xe9, 0xd1, 0xa3, 0x5d, 0xec, 0xb7, 0x1c, 0x7a, 0x2c, 0xf0, 0xe6, 0x01, 0x03, 0xd4, + 0xa2, 0x47, 0x87, 0x3f, 0x0a, 0x16, 0x86, 0x3c, 0x90, 0x3d, 0x12, 0x48, 0x2a, 0x4a, 0xda, 0x0b, + 0x67, 0x05, 0xf9, 0x55, 0x72, 0x01, 0xfe, 0x02, 0x41, 0x74, 0x87, 0xdc, 0xa4, 0x55, 0xf2, 0x78, + 0x87, 0xec, 0x2a, 0x67, 0x9e, 0x87, 0xba, 0xb6, 0x15, 0x0d, 0x48, 0xee, 0xfd, 0x9c, 0x05, 0xe5, + 0x95, 0x7e, 0xe5, 0x3c, 0x9b, 0x0a, 0x4c, 0x3a, 0x9f, 0xc0, 0x2b, 0xf2, 0xb9, 0xa1, 0x6a, 0x34, + 0x8c, 0x81, 0x24, 0x1c, 0x4c, 0xe6, 0x01, 0x0a, 0xa2, 0x00, 0x5c, 0x0a, 0x54, 0x03, 0x5b, 0xa2, + 0xe3, 0xae, 0xbc, 0x57, 0x19, 0xc7, 0x79, 0x6f, 0xd5, 0x73, 0xa8, 0x70, 0x05, 0x2b, 0x79, 0x36, + 0x7c, 0xc0, 0x25, 0x1c, 0x8a, 0x65, 0xd5, 0xe6, 0x5a, 0x20, 0xb8, 0x9a, 0xca, 0x5e, 0xf7, 0xca, + 0x94, 0xf5, 0x52, 0x7c, 0x51, 0x46, 0x8c, 0xc7, 0x98, 0xcd, 0xb0, 0x55, 0x30, 0x8d, 0x1e, 0x60, + 0xb0, 0xb9, 0x43, 0xfc, 0x15, 0x3d, 0x84, 0x05, 0x8f, 0x6c, 0x91, 0x10, 0x1c, 0x69, 0xee, 0x58, + 0x0b, 0x0d, 0x1e, 0xe2, 0x11, 0xce, 0x35, 0xe8, 0x12, 0x85, 0xc6, 0xc5, 0x2f, 0xf1, 0xc8, 0xe5, + 0x0b, 0xa5, 0x0c, 0x3e, 0x96, 0xa7, 0x25, 0xb1, 0x81, 0xc6, 0xdf, 0x26, 0x68, 0xed, 0x50, 0x9c, + 0x5a, 0x56, 0x18, 0x7c, 0x84, 0xc2, 0xa0, 0x92, 0x0b, 0xfa, 0xe3, 0x75, 0xff, 0xd5, 0x42, 0xc7, + 0x1b, 0x89, 0x2a, 0x2f, 0x1c, 0xf9, 0x63, 0x92, 0xf2, 0xe9, 0x2c, 0x28, 0xd2, 0xaf, 0x94, 0xe7, + 0x7c, 0x35, 0x4a, 0xfe, 0xf5, 0x9c, 0x8f, 0xea, 0x7d, 0xe4, 0x6c, 0xbb, 0xb9, 0x06, 0x05, 0x89, + 0x08, 0xed, 0x65, 0xf9, 0x1e, 0xb6, 0xef, 0x4b, 0x91, 0x57, 0xde, 0xb0, 0x31, 0xb0, 0x6b, 0x5f, + 0xe0, 0x08, 0xf7, 0x3a, 0x0a, 0xe5, 0xaf, 0xfc, 0xdd, 0x36, 0x4d, 0xf6, 0x08, 0x77, 0x49, 0x70, + 0xcb, 0x04, 0x7f, 0x37, 0xf0, 0xff, 0x00, 0xba, 0x13, 0xac, 0x29, 0x47, 0x50, 0x00, 0x00 }; diff --git a/wled00/ir.cpp b/wled00/ir.cpp index e812728f..0961cefb 100644 --- a/wled00/ir.cpp +++ b/wled00/ir.cpp @@ -77,40 +77,59 @@ void presetFallback(uint8_t presetID, uint8_t effectID, uint8_t paletteID) effectPalette = paletteID; } -void relativeChange(byte* property, int8_t amount, byte lowerBoundary, byte higherBoundary) +byte relativeChange(byte property, int8_t amount, byte lowerBoundary, byte higherBoundary) { - int16_t new_val = (int16_t) *property + amount; + int16_t new_val = (int16_t) property + amount; + if (lowerBoundary >= higherBoundary) return property; if (new_val > higherBoundary) new_val = higherBoundary; - else if (new_val < lowerBoundary) new_val = lowerBoundary; - *property = (byte)constrain(new_val, 0, 255); + if (new_val < lowerBoundary) new_val = lowerBoundary; + return (byte)constrain(new_val, 0, 255); } void changeEffect(uint8_t fx) { - //byte selectedSeg = strip.getMainSegmentId(); - //WS2812FX::Segment& selseg = strip.getSegment(selectedSeg); - strip.setMode(strip.getMainSegmentId(), fx); + if (strip.applyToAllSelected) { + for (uint8_t i = 0; i < strip.getMaxSegments(); i++) { + WS2812FX::Segment& seg = strip.getSegment(i); + if (!seg.isActive() || !seg.isSelected()) continue; + strip.setMode(i, fx); + } + } else { + strip.setMode(strip.getMainSegmentId(), fx); + } effectCurrent = fx; effectChanged = true; } void changePalette(uint8_t pal) { - byte selectedSeg = strip.getMainSegmentId(); - WS2812FX::Segment& selseg = strip.getSegment(selectedSeg); - selseg.palette = pal; + if (strip.applyToAllSelected) { + for (uint8_t i = 0; i < strip.getMaxSegments(); i++) { + WS2812FX::Segment& seg = strip.getSegment(i); + if (!seg.isActive() || !seg.isSelected()) continue; + seg.palette = pal; + } + } else { + strip.getSegment(strip.getMainSegmentId()).palette = pal; + } effectPalette = pal; effectChanged = true; } void changeEffectSpeed(int8_t amount) { - byte selectedSeg = strip.getMainSegmentId(); - WS2812FX::Segment& selseg = strip.getSegment(selectedSeg); if (effectCurrent != 0) { int16_t new_val = (int16_t) effectSpeed + amount; effectSpeed = (byte)constrain(new_val,0,255); - selseg.speed = effectSpeed; + if (strip.applyToAllSelected) { + for (uint8_t i = 0; i < strip.getMaxSegments(); i++) { + WS2812FX::Segment& seg = strip.getSegment(i); + if (!seg.isActive() || !seg.isSelected()) continue; + seg.speed = effectSpeed; + } + } else { + strip.getSegment(strip.getMainSegmentId()).speed = effectSpeed; + } effectChanged = true; } else { // if Effect == "solid Color", change the hue of the primary color CRGB fastled_col; @@ -126,6 +145,15 @@ void changeEffectSpeed(int8_t amount) col[0] = fastled_col.red; col[1] = fastled_col.green; col[2] = fastled_col.blue; + if (strip.applyToAllSelected) { + for (uint8_t i = 0; i < strip.getMaxSegments(); i++) { + WS2812FX::Segment& seg = strip.getSegment(i); + if (!seg.isActive() || !seg.isSelected()) continue; + seg.colors[0] = RGBW32(col[0], col[1], col[2], col[3]); + } + } else { + strip.getSegment(strip.getMainSegmentId()).colors[0] = RGBW32(col[0], col[1], col[2], col[3]); + } colorChanged = true; } @@ -136,12 +164,18 @@ void changeEffectSpeed(int8_t amount) void changeEffectIntensity(int8_t amount) { - byte selectedSeg = strip.getMainSegmentId(); - WS2812FX::Segment& selseg = strip.getSegment(selectedSeg); if (effectCurrent != 0) { int16_t new_val = (int16_t) effectIntensity + amount; effectIntensity = (byte)constrain(new_val,0,255); - selseg.intensity = effectIntensity; + if (strip.applyToAllSelected) { + for (uint8_t i = 0; i < strip.getMaxSegments(); i++) { + WS2812FX::Segment& seg = strip.getSegment(i); + if (!seg.isActive() || !seg.isSelected()) continue; + seg.intensity = effectIntensity; + } + } else { + strip.getSegment(strip.getMainSegmentId()).speed = effectIntensity; + } effectChanged = true; } else { // if Effect == "solid Color", change the saturation of the primary color CRGB fastled_col; @@ -155,6 +189,15 @@ void changeEffectIntensity(int8_t amount) col[0] = fastled_col.red; col[1] = fastled_col.green; col[2] = fastled_col.blue; + if (strip.applyToAllSelected) { + for (uint8_t i = 0; i < strip.getMaxSegments(); i++) { + WS2812FX::Segment& seg = strip.getSegment(i); + if (!seg.isActive() || !seg.isSelected()) continue; + seg.colors[0] = RGBW32(col[0], col[1], col[2], col[3]); + } + } else { + strip.getSegment(strip.getMainSegmentId()).colors[0] = RGBW32(col[0], col[1], col[2], col[3]); + } colorChanged = true; } @@ -179,6 +222,9 @@ void decodeIR(uint32_t code) return; } if (code > 0xFFFFFF) return; //invalid code + + strip.applyToAllSelected = irApplyToAllSelected; + switch (irEnabled) { case 1: if (code > 0xF80000) { @@ -187,18 +233,19 @@ void decodeIR(uint32_t code) decodeIR24(code); // 24-key remote - 0xF70000 to 0xF80000 } break; - case 2: decodeIR24CT(code); break; // white 24-key remote with CW, WW, CT+ and CT- keys - case 3: decodeIR40(code); break; // blue 40-key remote with 25%, 50%, 75% and 100% keys - case 4: decodeIR44(code); break; // white 44-key remote with color-up/down keys and DIY1 to 6 keys - case 5: decodeIR21(code); break; // white 21-key remote - case 6: decodeIR6(code); break; // black 6-key learning remote defaults: "CH" controls brightness, - // "VOL +" controls effect, "VOL -" controls colour/palette, "MUTE" - // sets bright plain white - case 7: decodeIR9(code); break; + case 2: decodeIR24CT(code); break; // white 24-key remote with CW, WW, CT+ and CT- keys + case 3: decodeIR40(code); break; // blue 40-key remote with 25%, 50%, 75% and 100% keys + case 4: decodeIR44(code); break; // white 44-key remote with color-up/down keys and DIY1 to 6 keys + case 5: decodeIR21(code); break; // white 21-key remote + case 6: decodeIR6(code); break; // black 6-key learning remote defaults: "CH" controls brightness, + // "VOL +" controls effect, "VOL -" controls colour/palette, "MUTE" + // sets bright plain white + case 7: decodeIR9(code); break; //case 8: return; // ir.json file, handled above switch statement - default: return; } + strip.applyToAllSelected = false; + if (nightlightActive && bri == 0) nightlightActive = false; colorUpdated(CALL_MODE_BUTTON); //for notifier, IR is considered a button input } @@ -255,25 +302,25 @@ void applyRepeatActions(){ void decodeIR24(uint32_t code) { switch (code) { - case IR24_BRIGHTER : incBrightness(); break; - case IR24_DARKER : decBrightness(); break; - case IR24_OFF : if (bri > 0) briLast = bri; bri = 0; break; - case IR24_ON : bri = briLast; break; - case IR24_RED : colorFromUint32(COLOR_RED); break; - case IR24_REDDISH : colorFromUint32(COLOR_REDDISH); break; - case IR24_ORANGE : colorFromUint32(COLOR_ORANGE); break; - case IR24_YELLOWISH : colorFromUint32(COLOR_YELLOWISH); break; - case IR24_YELLOW : colorFromUint32(COLOR_YELLOW); break; - case IR24_GREEN : colorFromUint32(COLOR_GREEN); break; - case IR24_GREENISH : colorFromUint32(COLOR_GREENISH); break; - case IR24_TURQUOISE : colorFromUint32(COLOR_TURQUOISE); break; - case IR24_CYAN : colorFromUint32(COLOR_CYAN); break; - case IR24_AQUA : colorFromUint32(COLOR_AQUA); break; - case IR24_BLUE : colorFromUint32(COLOR_BLUE); break; - case IR24_DEEPBLUE : colorFromUint32(COLOR_DEEPBLUE); break; - case IR24_PURPLE : colorFromUint32(COLOR_PURPLE); break; - case IR24_MAGENTA : colorFromUint32(COLOR_MAGENTA); break; - case IR24_PINK : colorFromUint32(COLOR_PINK); break; + case IR24_BRIGHTER : incBrightness(); break; + case IR24_DARKER : decBrightness(); break; + case IR24_OFF : if (bri > 0) briLast = bri; bri = 0; break; + case IR24_ON : bri = briLast; break; + case IR24_RED : colorFromUint32(COLOR_RED); break; + case IR24_REDDISH : colorFromUint32(COLOR_REDDISH); break; + case IR24_ORANGE : colorFromUint32(COLOR_ORANGE); break; + case IR24_YELLOWISH : colorFromUint32(COLOR_YELLOWISH); break; + case IR24_YELLOW : colorFromUint32(COLOR_YELLOW); break; + case IR24_GREEN : colorFromUint32(COLOR_GREEN); break; + case IR24_GREENISH : colorFromUint32(COLOR_GREENISH); break; + case IR24_TURQUOISE : colorFromUint32(COLOR_TURQUOISE); break; + case IR24_CYAN : colorFromUint32(COLOR_CYAN); break; + case IR24_AQUA : colorFromUint32(COLOR_AQUA); break; + case IR24_BLUE : colorFromUint32(COLOR_BLUE); break; + case IR24_DEEPBLUE : colorFromUint32(COLOR_DEEPBLUE); break; + case IR24_PURPLE : colorFromUint32(COLOR_PURPLE); break; + case IR24_MAGENTA : colorFromUint32(COLOR_MAGENTA); break; + case IR24_PINK : colorFromUint32(COLOR_PINK); break; case IR24_WHITE : colorFromUint32(COLOR_WHITE); changeEffect(FX_MODE_STATIC); break; case IR24_FLASH : presetFallback(1, FX_MODE_COLORTWINKLE, effectPalette); break; case IR24_STROBE : presetFallback(2, FX_MODE_RAINBOW_CYCLE, effectPalette); break; @@ -287,30 +334,30 @@ void decodeIR24(uint32_t code) void decodeIR24OLD(uint32_t code) { switch (code) { - case IR24_OLD_BRIGHTER : incBrightness(); break; - case IR24_OLD_DARKER : decBrightness(); break; - case IR24_OLD_OFF : if (bri > 0) briLast = bri; bri = 0; break; - case IR24_OLD_ON : bri = briLast; break; - case IR24_OLD_RED : colorFromUint32(COLOR_RED); break; - case IR24_OLD_REDDISH : colorFromUint32(COLOR_REDDISH); break; - case IR24_OLD_ORANGE : colorFromUint32(COLOR_ORANGE); break; - case IR24_OLD_YELLOWISH : colorFromUint32(COLOR_YELLOWISH); break; - case IR24_OLD_YELLOW : colorFromUint32(COLOR_YELLOW); break; - case IR24_OLD_GREEN : colorFromUint32(COLOR_GREEN); break; - case IR24_OLD_GREENISH : colorFromUint32(COLOR_GREENISH); break; - case IR24_OLD_TURQUOISE : colorFromUint32(COLOR_TURQUOISE); break; - case IR24_OLD_CYAN : colorFromUint32(COLOR_CYAN); break; - case IR24_OLD_AQUA : colorFromUint32(COLOR_AQUA); break; - case IR24_OLD_BLUE : colorFromUint32(COLOR_BLUE); break; - case IR24_OLD_DEEPBLUE : colorFromUint32(COLOR_DEEPBLUE); break; - case IR24_OLD_PURPLE : colorFromUint32(COLOR_PURPLE); break; - case IR24_OLD_MAGENTA : colorFromUint32(COLOR_MAGENTA); break; - case IR24_OLD_PINK : colorFromUint32(COLOR_PINK); break; + case IR24_OLD_BRIGHTER : incBrightness(); break; + case IR24_OLD_DARKER : decBrightness(); break; + case IR24_OLD_OFF : if (bri > 0) briLast = bri; bri = 0; break; + case IR24_OLD_ON : bri = briLast; break; + case IR24_OLD_RED : colorFromUint32(COLOR_RED); break; + case IR24_OLD_REDDISH : colorFromUint32(COLOR_REDDISH); break; + case IR24_OLD_ORANGE : colorFromUint32(COLOR_ORANGE); break; + case IR24_OLD_YELLOWISH : colorFromUint32(COLOR_YELLOWISH); break; + case IR24_OLD_YELLOW : colorFromUint32(COLOR_YELLOW); break; + case IR24_OLD_GREEN : colorFromUint32(COLOR_GREEN); break; + case IR24_OLD_GREENISH : colorFromUint32(COLOR_GREENISH); break; + case IR24_OLD_TURQUOISE : colorFromUint32(COLOR_TURQUOISE); break; + case IR24_OLD_CYAN : colorFromUint32(COLOR_CYAN); break; + case IR24_OLD_AQUA : colorFromUint32(COLOR_AQUA); break; + case IR24_OLD_BLUE : colorFromUint32(COLOR_BLUE); break; + case IR24_OLD_DEEPBLUE : colorFromUint32(COLOR_DEEPBLUE); break; + case IR24_OLD_PURPLE : colorFromUint32(COLOR_PURPLE); break; + case IR24_OLD_MAGENTA : colorFromUint32(COLOR_MAGENTA); break; + case IR24_OLD_PINK : colorFromUint32(COLOR_PINK); break; case IR24_OLD_WHITE : colorFromUint32(COLOR_WHITE); changeEffect(FX_MODE_STATIC); break; - case IR24_OLD_FLASH : presetFallback(1, FX_MODE_COLORTWINKLE, 0); break; - case IR24_OLD_STROBE : presetFallback(2, FX_MODE_RAINBOW_CYCLE, 0); break; - case IR24_OLD_FADE : presetFallback(3, FX_MODE_BREATH, 0); break; - case IR24_OLD_SMOOTH : presetFallback(4, FX_MODE_RAINBOW, 0); break; + case IR24_OLD_FLASH : presetFallback(1, FX_MODE_COLORTWINKLE, 0); break; + case IR24_OLD_STROBE : presetFallback(2, FX_MODE_RAINBOW_CYCLE, 0); break; + case IR24_OLD_FADE : presetFallback(3, FX_MODE_BREATH, 0); break; + case IR24_OLD_SMOOTH : presetFallback(4, FX_MODE_RAINBOW, 0); break; default: return; } lastValidCode = code; @@ -319,25 +366,25 @@ void decodeIR24OLD(uint32_t code) void decodeIR24CT(uint32_t code) { switch (code) { - case IR24_CT_BRIGHTER : incBrightness(); break; - case IR24_CT_DARKER : decBrightness(); break; - case IR24_CT_OFF : if (bri > 0) briLast = bri; bri = 0; break; - case IR24_CT_ON : bri = briLast; break; - case IR24_CT_RED : colorFromUint32(COLOR_RED); break; - case IR24_CT_REDDISH : colorFromUint32(COLOR_REDDISH); break; - case IR24_CT_ORANGE : colorFromUint32(COLOR_ORANGE); break; - case IR24_CT_YELLOWISH : colorFromUint32(COLOR_YELLOWISH); break; - case IR24_CT_YELLOW : colorFromUint32(COLOR_YELLOW); break; - case IR24_CT_GREEN : colorFromUint32(COLOR_GREEN); break; - case IR24_CT_GREENISH : colorFromUint32(COLOR_GREENISH); break; - case IR24_CT_TURQUOISE : colorFromUint32(COLOR_TURQUOISE); break; - case IR24_CT_CYAN : colorFromUint32(COLOR_CYAN); break; - case IR24_CT_AQUA : colorFromUint32(COLOR_AQUA); break; - case IR24_CT_BLUE : colorFromUint32(COLOR_BLUE); break; - case IR24_CT_DEEPBLUE : colorFromUint32(COLOR_DEEPBLUE); break; - case IR24_CT_PURPLE : colorFromUint32(COLOR_PURPLE); break; - case IR24_CT_MAGENTA : colorFromUint32(COLOR_MAGENTA); break; - case IR24_CT_PINK : colorFromUint32(COLOR_PINK); break; + case IR24_CT_BRIGHTER : incBrightness(); break; + case IR24_CT_DARKER : decBrightness(); break; + case IR24_CT_OFF : if (bri > 0) briLast = bri; bri = 0; break; + case IR24_CT_ON : bri = briLast; break; + case IR24_CT_RED : colorFromUint32(COLOR_RED); break; + case IR24_CT_REDDISH : colorFromUint32(COLOR_REDDISH); break; + case IR24_CT_ORANGE : colorFromUint32(COLOR_ORANGE); break; + case IR24_CT_YELLOWISH : colorFromUint32(COLOR_YELLOWISH); break; + case IR24_CT_YELLOW : colorFromUint32(COLOR_YELLOW); break; + case IR24_CT_GREEN : colorFromUint32(COLOR_GREEN); break; + case IR24_CT_GREENISH : colorFromUint32(COLOR_GREENISH); break; + case IR24_CT_TURQUOISE : colorFromUint32(COLOR_TURQUOISE); break; + case IR24_CT_CYAN : colorFromUint32(COLOR_CYAN); break; + case IR24_CT_AQUA : colorFromUint32(COLOR_AQUA); break; + case IR24_CT_BLUE : colorFromUint32(COLOR_BLUE); break; + case IR24_CT_DEEPBLUE : colorFromUint32(COLOR_DEEPBLUE); break; + case IR24_CT_PURPLE : colorFromUint32(COLOR_PURPLE); break; + case IR24_CT_MAGENTA : colorFromUint32(COLOR_MAGENTA); break; + case IR24_CT_PINK : colorFromUint32(COLOR_PINK); break; case IR24_CT_COLDWHITE : colorFromUint32(COLOR2_COLDWHITE); changeEffect(FX_MODE_STATIC); break; case IR24_CT_WARMWHITE : colorFromUint32(COLOR2_WARMWHITE); changeEffect(FX_MODE_STATIC); break; case IR24_CT_CTPLUS : colorFromUint32(COLOR2_COLDWHITE2); changeEffect(FX_MODE_STATIC); break; @@ -351,25 +398,25 @@ void decodeIR24CT(uint32_t code) void decodeIR40(uint32_t code) { switch (code) { - case IR40_BPLUS : incBrightness(); break; - case IR40_BMINUS : decBrightness(); break; - case IR40_OFF : if (bri > 0) briLast = bri; bri = 0; break; - case IR40_ON : bri = briLast; break; - case IR40_RED : colorFromUint24(COLOR_RED); break; - case IR40_REDDISH : colorFromUint24(COLOR_REDDISH); break; - case IR40_ORANGE : colorFromUint24(COLOR_ORANGE); break; - case IR40_YELLOWISH : colorFromUint24(COLOR_YELLOWISH); break; - case IR40_YELLOW : colorFromUint24(COLOR_YELLOW); break; - case IR40_GREEN : colorFromUint24(COLOR_GREEN); break; - case IR40_GREENISH : colorFromUint24(COLOR_GREENISH); break; - case IR40_TURQUOISE : colorFromUint24(COLOR_TURQUOISE); break; - case IR40_CYAN : colorFromUint24(COLOR_CYAN); break; - case IR40_AQUA : colorFromUint24(COLOR_AQUA); break; - case IR40_BLUE : colorFromUint24(COLOR_BLUE); break; - case IR40_DEEPBLUE : colorFromUint24(COLOR_DEEPBLUE); break; - case IR40_PURPLE : colorFromUint24(COLOR_PURPLE); break; - case IR40_MAGENTA : colorFromUint24(COLOR_MAGENTA); break; - case IR40_PINK : colorFromUint24(COLOR_PINK); break; + case IR40_BPLUS : incBrightness(); break; + case IR40_BMINUS : decBrightness(); break; + case IR40_OFF : if (bri > 0) briLast = bri; bri = 0; break; + case IR40_ON : bri = briLast; break; + case IR40_RED : colorFromUint24(COLOR_RED); break; + case IR40_REDDISH : colorFromUint24(COLOR_REDDISH); break; + case IR40_ORANGE : colorFromUint24(COLOR_ORANGE); break; + case IR40_YELLOWISH : colorFromUint24(COLOR_YELLOWISH); break; + case IR40_YELLOW : colorFromUint24(COLOR_YELLOW); break; + case IR40_GREEN : colorFromUint24(COLOR_GREEN); break; + case IR40_GREENISH : colorFromUint24(COLOR_GREENISH); break; + case IR40_TURQUOISE : colorFromUint24(COLOR_TURQUOISE); break; + case IR40_CYAN : colorFromUint24(COLOR_CYAN); break; + case IR40_AQUA : colorFromUint24(COLOR_AQUA); break; + case IR40_BLUE : colorFromUint24(COLOR_BLUE); break; + case IR40_DEEPBLUE : colorFromUint24(COLOR_DEEPBLUE); break; + case IR40_PURPLE : colorFromUint24(COLOR_PURPLE); break; + case IR40_MAGENTA : colorFromUint24(COLOR_MAGENTA); break; + case IR40_PINK : colorFromUint24(COLOR_PINK); break; case IR40_WARMWHITE2 : if (strip.hasWhiteChannel()) colorFromUint32(COLOR2_WARMWHITE2); else colorFromUint24(COLOR_WARMWHITE2); @@ -395,22 +442,23 @@ void decodeIR40(uint32_t code) else colorFromUint24(COLOR_COLDWHITE2); changeEffect(FX_MODE_STATIC); break; - case IR40_WPLUS : relativeChangeWhite(10); break; - case IR40_WMINUS : relativeChangeWhite(-10, 5); break; - case IR40_WOFF : whiteLast = col[3]; col[3] = 0; break; - case IR40_WON : col[3] = whiteLast; break; - case IR40_W25 : bri = 63; break; - case IR40_W50 : bri = 127; break; - case IR40_W75 : bri = 191; break; - case IR40_W100 : bri = 255; break; - case IR40_QUICK : changeEffectSpeed( 16); break; - case IR40_SLOW : changeEffectSpeed(-16); break; - case IR40_JUMP7 : changeEffectIntensity( 16); break; - case IR40_AUTO : changeEffectIntensity(-16); break; + case IR40_WPLUS : relativeChangeWhite(10); break; + case IR40_WMINUS : relativeChangeWhite(-10, 5); break; + case IR40_WOFF : whiteLast = col[3]; col[3] = 0; break; + case IR40_WON : col[3] = whiteLast; break; + case IR40_W25 : bri = 63; break; + case IR40_W50 : bri = 127; break; + case IR40_W75 : bri = 191; break; + case IR40_W100 : bri = 255; break; + case IR40_QUICK : changeEffectSpeed( 16); break; + case IR40_SLOW : changeEffectSpeed(-16); break; + case IR40_JUMP7 : changeEffectIntensity( 16); break; + case IR40_AUTO : changeEffectIntensity(-16); break; case IR40_JUMP3 : presetFallback(1, FX_MODE_STATIC, 0); break; case IR40_FADE3 : presetFallback(2, FX_MODE_BREATH, 0); break; case IR40_FADE7 : presetFallback(3, FX_MODE_FIRE_FLICKER, 0); break; case IR40_FLASH : presetFallback(4, FX_MODE_RAINBOW, 0); break; + default: return; } lastValidCode = code; } @@ -462,22 +510,10 @@ void decodeIR44(uint32_t code) else colorFromUint24(COLOR_COLDWHITE2); changeEffect(FX_MODE_STATIC); break; - case IR44_REDPLUS : - relativeChange(&effectCurrent, 1, 0, MODE_COUNT); - changeEffect(effectCurrent); - break; - case IR44_REDMINUS : - relativeChange(&effectCurrent, -1, 0); - changeEffect(effectCurrent); - break; - case IR44_GREENPLUS : - relativeChange(&effectPalette, 1, 0, strip.getPaletteCount() -1); - changePalette(effectPalette); - break; - case IR44_GREENMINUS : - relativeChange(&effectPalette, -1, 0); - changePalette(effectPalette); - break; + case IR44_REDPLUS : changeEffect(relativeChange(effectCurrent, 1, 0, MODE_COUNT -1)); break; + case IR44_REDMINUS : changeEffect(relativeChange(effectCurrent, -1, 0, MODE_COUNT -1)); break; + case IR44_GREENPLUS : changePalette(relativeChange(effectPalette, 1, 0, strip.getPaletteCount() -1)); break; + case IR44_GREENMINUS : changePalette(relativeChange(effectPalette, -1, 0, strip.getPaletteCount() -1)); break; case IR44_BLUEPLUS : changeEffectIntensity( 16); break; case IR44_BLUEMINUS : changeEffectIntensity(-16); break; case IR44_QUICK : changeEffectSpeed( 16); break; @@ -494,6 +530,7 @@ void decodeIR44(uint32_t code) case IR44_JUMP7 : bri = 127; break; case IR44_FADE3 : bri = 191; break; case IR44_FADE7 : bri = 255; break; + default: return; } lastValidCode = code; } @@ -501,28 +538,28 @@ void decodeIR44(uint32_t code) void decodeIR21(uint32_t code) { switch (code) { - case IR21_BRIGHTER: incBrightness(); break; - case IR21_DARKER: decBrightness(); break; - case IR21_OFF: if (bri > 0) briLast = bri; bri = 0; break; - case IR21_ON: bri = briLast; break; - case IR21_RED: colorFromUint32(COLOR_RED); break; - case IR21_REDDISH: colorFromUint32(COLOR_REDDISH); break; - case IR21_ORANGE: colorFromUint32(COLOR_ORANGE); break; - case IR21_YELLOWISH: colorFromUint32(COLOR_YELLOWISH); break; - case IR21_GREEN: colorFromUint32(COLOR_GREEN); break; - case IR21_GREENISH: colorFromUint32(COLOR_GREENISH); break; - case IR21_TURQUOISE: colorFromUint32(COLOR_TURQUOISE); break; - case IR21_CYAN: colorFromUint32(COLOR_CYAN); break; - case IR21_BLUE: colorFromUint32(COLOR_BLUE); break; - case IR21_DEEPBLUE: colorFromUint32(COLOR_DEEPBLUE); break; - case IR21_PURPLE: colorFromUint32(COLOR_PURPLE); break; - case IR21_PINK: colorFromUint32(COLOR_PINK); break; - case IR21_WHITE: colorFromUint32(COLOR_WHITE); changeEffect(FX_MODE_STATIC); break; - case IR21_FLASH: presetFallback(1, FX_MODE_COLORTWINKLE, 0); break; - case IR21_STROBE: presetFallback(2, FX_MODE_RAINBOW_CYCLE, 0); break; - case IR21_FADE: presetFallback(3, FX_MODE_BREATH, 0); break; - case IR21_SMOOTH: presetFallback(4, FX_MODE_RAINBOW, 0); break; - default: return; + case IR21_BRIGHTER: incBrightness(); break; + case IR21_DARKER: decBrightness(); break; + case IR21_OFF: if (bri > 0) briLast = bri; bri = 0; break; + case IR21_ON: bri = briLast; break; + case IR21_RED: colorFromUint32(COLOR_RED); break; + case IR21_REDDISH: colorFromUint32(COLOR_REDDISH); break; + case IR21_ORANGE: colorFromUint32(COLOR_ORANGE); break; + case IR21_YELLOWISH: colorFromUint32(COLOR_YELLOWISH); break; + case IR21_GREEN: colorFromUint32(COLOR_GREEN); break; + case IR21_GREENISH: colorFromUint32(COLOR_GREENISH); break; + case IR21_TURQUOISE: colorFromUint32(COLOR_TURQUOISE); break; + case IR21_CYAN: colorFromUint32(COLOR_CYAN); break; + case IR21_BLUE: colorFromUint32(COLOR_BLUE); break; + case IR21_DEEPBLUE: colorFromUint32(COLOR_DEEPBLUE); break; + case IR21_PURPLE: colorFromUint32(COLOR_PURPLE); break; + case IR21_PINK: colorFromUint32(COLOR_PINK); break; + case IR21_WHITE: colorFromUint32(COLOR_WHITE); changeEffect(FX_MODE_STATIC); break; + case IR21_FLASH: presetFallback(1, FX_MODE_COLORTWINKLE, 0); break; + case IR21_STROBE: presetFallback(2, FX_MODE_RAINBOW_CYCLE, 0); break; + case IR21_FADE: presetFallback(3, FX_MODE_BREATH, 0); break; + case IR21_SMOOTH: presetFallback(4, FX_MODE_RAINBOW, 0); break; + default: return; } lastValidCode = code; } @@ -530,16 +567,11 @@ void decodeIR21(uint32_t code) void decodeIR6(uint32_t code) { switch (code) { - case IR6_POWER: toggleOnOff(); break; - case IR6_CHANNEL_UP: incBrightness(); break; - case IR6_CHANNEL_DOWN: decBrightness(); break; - case IR6_VOLUME_UP: - relativeChange(&effectCurrent, 1, 0, MODE_COUNT); // next effect - changeEffect(effectCurrent); - break; - case IR6_VOLUME_DOWN: // next palette - relativeChange(&effectPalette, 1, 0, strip.getPaletteCount() -1); - changePalette(effectPalette); + case IR6_POWER: toggleOnOff(); break; + case IR6_CHANNEL_UP: incBrightness(); break; + case IR6_CHANNEL_DOWN: decBrightness(); break; + case IR6_VOLUME_UP: changeEffect(relativeChange(effectCurrent, 1, 0, MODE_COUNT -1)); break; + case IR6_VOLUME_DOWN: changePalette(relativeChange(effectPalette, 1, 0, strip.getPaletteCount() -1)); switch(lastIR6ColourIdx) { case 0: colorFromUint32(COLOR_RED); break; case 1: colorFromUint32(COLOR_REDDISH); break; @@ -559,12 +591,8 @@ void decodeIR6(uint32_t code) lastIR6ColourIdx++; if(lastIR6ColourIdx > 12) lastIR6ColourIdx = 0; break; - case IR6_MUTE: - changeEffect(FX_MODE_STATIC); - changePalette(0); - colorFromUint32(COLOR_WHITE); - bri=255; - break; + case IR6_MUTE: changeEffect(FX_MODE_STATIC); changePalette(0); colorFromUint32(COLOR_WHITE); bri=255; break; + default: return; } lastValidCode = code; } @@ -572,17 +600,15 @@ void decodeIR6(uint32_t code) void decodeIR9(uint32_t code) { switch (code) { - case IR9_POWER : toggleOnOff(); break; - case IR9_A : presetFallback(1, FX_MODE_COLORTWINKLE, effectPalette); break; - case IR9_B : presetFallback(2, FX_MODE_RAINBOW_CYCLE, effectPalette); break; - case IR9_C : presetFallback(3, FX_MODE_BREATH, effectPalette); break; - case IR9_UP : incBrightness(); break; - case IR9_DOWN : decBrightness(); break; - //case IR9_UP : changeEffectIntensity(16); break; - //case IR9_DOWN : changeEffectIntensity(-16); break; - case IR9_LEFT : changeEffectSpeed(-16); break; - case IR9_RIGHT : changeEffectSpeed(16); break; - case IR9_SELECT : relativeChange(&effectCurrent, 1, 0, MODE_COUNT); changeEffect(effectCurrent); break; + case IR9_POWER : toggleOnOff(); break; + case IR9_A : presetFallback(1, FX_MODE_COLORTWINKLE, effectPalette); break; + case IR9_B : presetFallback(2, FX_MODE_RAINBOW_CYCLE, effectPalette); break; + case IR9_C : presetFallback(3, FX_MODE_BREATH, effectPalette); break; + case IR9_UP : incBrightness(); break; + case IR9_DOWN : decBrightness(); break; + case IR9_LEFT : changeEffectSpeed(-16); break; + case IR9_RIGHT : changeEffectSpeed(16); break; + case IR9_SELECT : changeEffect(relativeChange(effectCurrent, 1, 0, MODE_COUNT -1)); break; default: return; } lastValidCode = code; @@ -655,7 +681,7 @@ void decodeIRJson(uint32_t code) decBrightness(); } else if (cmdStr.startsWith(F("!presetF"))) { //!presetFallback uint8_t p1 = fdo["PL"] | 1; - uint8_t p2 = fdo["FX"] | random8(MODE_COUNT); + uint8_t p2 = fdo["FX"] | random8(MODE_COUNT -1); uint8_t p3 = fdo["FP"] | 0; presetFallback(p1, p2, p3); } diff --git a/wled00/set.cpp b/wled00/set.cpp index fdc28f9f..9318950d 100644 --- a/wled00/set.cpp +++ b/wled00/set.cpp @@ -135,6 +135,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage) irPin = -1; } irEnabled = request->arg(F("IT")).toInt(); + irApplyToAllSelected = !request->hasArg(F("MSO")); int hw_rly_pin = request->arg(F("RL")).toInt(); if (pinManager.allocatePin(hw_rly_pin,true, PinOwner::Relay)) { diff --git a/wled00/wled.h b/wled00/wled.h index f5f7074f..9ac4f3ca 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2202031 +#define VERSION 2202061 //uncomment this if you have a "my_config.h" file you'd like to use //#define WLED_USE_MY_CONFIG @@ -309,6 +309,7 @@ WLED_GLOBAL bool nodeBroadcastEnabled _INIT(true); WLED_GLOBAL byte buttonType[WLED_MAX_BUTTONS] _INIT({BTN_TYPE_PUSH}); WLED_GLOBAL byte irEnabled _INIT(0); // Infrared receiver +WLED_GLOBAL bool irApplyToAllSelected _INIT(true); //apply IR to all selected segments WLED_GLOBAL uint16_t udpPort _INIT(21324); // WLED notifier default port WLED_GLOBAL uint16_t udpPort2 _INIT(65506); // WLED notifier supplemental port diff --git a/wled00/xml.cpp b/wled00/xml.cpp index cf651ecb..abfaa310 100644 --- a/wled00/xml.cpp +++ b/wled00/xml.cpp @@ -418,6 +418,7 @@ void getSettingsJS(byte subPage, char* dest) sappend('v',SET_F("TT"),touchThreshold); sappend('v',SET_F("IR"),irPin); sappend('v',SET_F("IT"),irEnabled); + sappend('c',SET_F("MSO"),!irApplyToAllSelected); } if (subPage == 3)