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:
JSON file:
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)