mirror of
https://github.com/wled/WLED.git
synced 2025-07-16 15:26:31 +00:00
ColoOrderMap W channel swap
& cleanup
This commit is contained in:
parent
447324b59f
commit
99efbd30f1
16
wled00/bus_manager.cpp
Normal file → Executable file
16
wled00/bus_manager.cpp
Normal file → Executable file
@ -53,7 +53,8 @@ void ColorOrderMap::add(uint16_t start, uint16_t len, uint8_t colorOrder) {
|
|||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (colorOrder > COL_ORDER_MAX) {
|
// upper nibble contains W swap information
|
||||||
|
if ((colorOrder & 0x0F) > COL_ORDER_MAX) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_mappings[_count].start = start;
|
_mappings[_count].start = start;
|
||||||
@ -63,12 +64,13 @@ void ColorOrderMap::add(uint16_t start, uint16_t len, uint8_t colorOrder) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint8_t IRAM_ATTR ColorOrderMap::getPixelColorOrder(uint16_t pix, uint8_t defaultColorOrder) const {
|
uint8_t IRAM_ATTR ColorOrderMap::getPixelColorOrder(uint16_t pix, uint8_t defaultColorOrder) const {
|
||||||
if (_count == 0) return defaultColorOrder;
|
if (_count > 0) {
|
||||||
// upper nibble containd W swap information
|
// upper nibble contains W swap information
|
||||||
uint8_t swapW = defaultColorOrder >> 4;
|
// when ColorOrderMap's upper nibble contains value >0 then swap information is used from it, otherwise global swap is used
|
||||||
for (unsigned i = 0; i < _count; i++) {
|
for (unsigned i = 0; i < _count; i++) {
|
||||||
if (pix >= _mappings[i].start && pix < (_mappings[i].start + _mappings[i].len)) {
|
if (pix >= _mappings[i].start && pix < (_mappings[i].start + _mappings[i].len)) {
|
||||||
return _mappings[i].colorOrder | (swapW << 4);
|
return _mappings[i].colorOrder | ((_mappings[i].colorOrder >> 4) ? 0 : (defaultColorOrder & 0xF0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return defaultColorOrder;
|
return defaultColorOrder;
|
||||||
|
2
wled00/cfg.cpp
Normal file → Executable file
2
wled00/cfg.cpp
Normal file → Executable file
@ -417,7 +417,6 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
|
|||||||
CJSON(notifyButton, if_sync_send["btn"]);
|
CJSON(notifyButton, if_sync_send["btn"]);
|
||||||
CJSON(notifyAlexa, if_sync_send["va"]);
|
CJSON(notifyAlexa, if_sync_send["va"]);
|
||||||
CJSON(notifyHue, if_sync_send["hue"]);
|
CJSON(notifyHue, if_sync_send["hue"]);
|
||||||
// CJSON(notifyMacro, if_sync_send["macro"]);
|
|
||||||
CJSON(syncGroups, if_sync_send["grp"]);
|
CJSON(syncGroups, if_sync_send["grp"]);
|
||||||
if (if_sync_send[F("twice")]) udpNumRetries = 1; // import setting from 0.13 and earlier
|
if (if_sync_send[F("twice")]) udpNumRetries = 1; // import setting from 0.13 and earlier
|
||||||
CJSON(udpNumRetries, if_sync_send["ret"]);
|
CJSON(udpNumRetries, if_sync_send["ret"]);
|
||||||
@ -886,7 +885,6 @@ void serializeConfig() {
|
|||||||
if_sync_send["btn"] = notifyButton;
|
if_sync_send["btn"] = notifyButton;
|
||||||
if_sync_send["va"] = notifyAlexa;
|
if_sync_send["va"] = notifyAlexa;
|
||||||
if_sync_send["hue"] = notifyHue;
|
if_sync_send["hue"] = notifyHue;
|
||||||
// if_sync_send["macro"] = notifyMacro;
|
|
||||||
if_sync_send["grp"] = syncGroups;
|
if_sync_send["grp"] = syncGroups;
|
||||||
if_sync_send["ret"] = udpNumRetries;
|
if_sync_send["ret"] = udpNumRetries;
|
||||||
|
|
||||||
|
13
wled00/data/settings_leds.htm
Normal file → Executable file
13
wled00/data/settings_leds.htm
Normal file → Executable file
@ -471,7 +471,7 @@ mA/LED: <select name="LAsel${i}" onchange="enLA(this,${i});UI();">
|
|||||||
<hr class="sml">
|
<hr class="sml">
|
||||||
${i+1}: Start: <input type="number" name="XS${i}" id="xs${i}" class="l starts" min="0" max="65535" value="${start}" oninput="UI();" required="">
|
${i+1}: Start: <input type="number" name="XS${i}" id="xs${i}" class="l starts" min="0" max="65535" value="${start}" oninput="UI();" required="">
|
||||||
Length: <input type="number" name="XC${i}" id="xc${i}" class="l" min="1" max="65535" value="${len}" required="" oninput="UI()">
|
Length: <input type="number" name="XC${i}" id="xc${i}" class="l" min="1" max="65535" value="${len}" required="" oninput="UI()">
|
||||||
<div style="display:inline">Color Order:
|
<div>Color Order:
|
||||||
<select id="xo${i}" name="XO${i}">
|
<select id="xo${i}" name="XO${i}">
|
||||||
<option value="0">GRB</option>
|
<option value="0">GRB</option>
|
||||||
<option value="1">RGB</option>
|
<option value="1">RGB</option>
|
||||||
@ -480,9 +480,16 @@ Length: <input type="number" name="XC${i}" id="xc${i}" class="l" min="1" max="65
|
|||||||
<option value="4">BGR</option>
|
<option value="4">BGR</option>
|
||||||
<option value="5">GBR</option>
|
<option value="5">GBR</option>
|
||||||
</select>
|
</select>
|
||||||
</div><br></div>`;
|
Swap: <select id="xw${i}" name="XW${i}">
|
||||||
|
<option value="0">Use global</option>
|
||||||
|
<option value="1">W & B</option>
|
||||||
|
<option value="2">W & G</option>
|
||||||
|
<option value="3">W & R</option>
|
||||||
|
</select>
|
||||||
|
</div></div>`;
|
||||||
gId("com_entries").insertAdjacentHTML("beforeend", b);
|
gId("com_entries").insertAdjacentHTML("beforeend", b);
|
||||||
gId("xo"+i).value = co;
|
gId("xo"+i).value = co & 0x0F;
|
||||||
|
gId("xw"+i).value = co >> 4;
|
||||||
btnCOM(i+1);
|
btnCOM(i+1);
|
||||||
UI();
|
UI();
|
||||||
}
|
}
|
||||||
|
1
wled00/data/settings_sync.htm
Normal file → Executable file
1
wled00/data/settings_sync.htm
Normal file → Executable file
@ -146,7 +146,6 @@ Send notifications on direct change: <input type="checkbox" name="SD"><br>
|
|||||||
Send notifications on button press or IR: <input type="checkbox" name="SB"><br>
|
Send notifications on button press or IR: <input type="checkbox" name="SB"><br>
|
||||||
Send Alexa notifications: <input type="checkbox" name="SA"><br>
|
Send Alexa notifications: <input type="checkbox" name="SA"><br>
|
||||||
Send Philips Hue change notifications: <input type="checkbox" name="SH"><br>
|
Send Philips Hue change notifications: <input type="checkbox" name="SH"><br>
|
||||||
<!-- Send Macro notifications: <input type="checkbox" name="SM"><br> -->
|
|
||||||
UDP packet retransmissions: <input name="UR" type="number" min="0" max="30" class="d5" required><br><br>
|
UDP packet retransmissions: <input name="UR" type="number" min="0" max="30" class="d5" required><br><br>
|
||||||
<i>Reboot required to apply changes. </i>
|
<i>Reboot required to apply changes. </i>
|
||||||
<hr class="sml">
|
<hr class="sml">
|
||||||
|
File diff suppressed because it is too large
Load Diff
5
wled00/set.cpp
Normal file → Executable file
5
wled00/set.cpp
Normal file → Executable file
@ -190,10 +190,12 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
|
|||||||
char xs[4] = "XS"; xs[2] = 48+s; xs[3] = 0; //start LED
|
char xs[4] = "XS"; xs[2] = 48+s; xs[3] = 0; //start LED
|
||||||
char xc[4] = "XC"; xc[2] = 48+s; xc[3] = 0; //strip length
|
char xc[4] = "XC"; xc[2] = 48+s; xc[3] = 0; //strip length
|
||||||
char xo[4] = "XO"; xo[2] = 48+s; xo[3] = 0; //color order
|
char xo[4] = "XO"; xo[2] = 48+s; xo[3] = 0; //color order
|
||||||
|
char xw[4] = "XW"; xw[2] = 48+s; xw[3] = 0; //W swap
|
||||||
if (request->hasArg(xs)) {
|
if (request->hasArg(xs)) {
|
||||||
start = request->arg(xs).toInt();
|
start = request->arg(xs).toInt();
|
||||||
length = request->arg(xc).toInt();
|
length = request->arg(xc).toInt();
|
||||||
colorOrder = request->arg(xo).toInt();
|
colorOrder = request->arg(xo).toInt() & 0x0F;
|
||||||
|
colorOrder |= (request->arg(xw).toInt() & 0x0F) << 4; // add W swap information
|
||||||
com.add(start, length, colorOrder);
|
com.add(start, length, colorOrder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -336,7 +338,6 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
|
|||||||
notifyButton = request->hasArg(F("SB"));
|
notifyButton = request->hasArg(F("SB"));
|
||||||
notifyAlexa = request->hasArg(F("SA"));
|
notifyAlexa = request->hasArg(F("SA"));
|
||||||
notifyHue = request->hasArg(F("SH"));
|
notifyHue = request->hasArg(F("SH"));
|
||||||
notifyMacro = request->hasArg(F("SM"));
|
|
||||||
|
|
||||||
t = request->arg(F("UR")).toInt();
|
t = request->arg(F("UR")).toInt();
|
||||||
if ((t>=0) && (t<30)) udpNumRetries = t;
|
if ((t>=0) && (t<30)) udpNumRetries = t;
|
||||||
|
3
wled00/wled.h
Normal file → Executable file
3
wled00/wled.h
Normal file → Executable file
@ -8,7 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// version code in format yymmddb (b = daily build)
|
// version code in format yymmddb (b = daily build)
|
||||||
#define VERSION 2401060
|
#define VERSION 2401110
|
||||||
|
|
||||||
//uncomment this if you have a "my_config.h" file you'd like to use
|
//uncomment this if you have a "my_config.h" file you'd like to use
|
||||||
//#define WLED_USE_MY_CONFIG
|
//#define WLED_USE_MY_CONFIG
|
||||||
@ -395,7 +395,6 @@ WLED_GLOBAL bool receiveSegmentBounds _INIT(false); // apply segme
|
|||||||
WLED_GLOBAL bool notifyDirect _INIT(false); // send notification if change via UI or HTTP API
|
WLED_GLOBAL bool notifyDirect _INIT(false); // send notification if change via UI or HTTP API
|
||||||
WLED_GLOBAL bool notifyButton _INIT(false); // send if updated by button or infrared remote
|
WLED_GLOBAL bool notifyButton _INIT(false); // send if updated by button or infrared remote
|
||||||
WLED_GLOBAL bool notifyAlexa _INIT(false); // send notification if updated via Alexa
|
WLED_GLOBAL bool notifyAlexa _INIT(false); // send notification if updated via Alexa
|
||||||
WLED_GLOBAL bool notifyMacro _INIT(false); // send notification for macro
|
|
||||||
WLED_GLOBAL bool notifyHue _INIT(true); // send notification if Hue light changes
|
WLED_GLOBAL bool notifyHue _INIT(true); // send notification if Hue light changes
|
||||||
WLED_GLOBAL uint8_t udpNumRetries _INIT(0); // Number of times a UDP sync message is retransmitted. Increase to increase reliability
|
WLED_GLOBAL uint8_t udpNumRetries _INIT(0); // Number of times a UDP sync message is retransmitted. Increase to increase reliability
|
||||||
|
|
||||||
|
2
wled00/wled_eeprom.cpp
Normal file → Executable file
2
wled00/wled_eeprom.cpp
Normal file → Executable file
@ -321,7 +321,7 @@ void loadSettingsFromEEPROM()
|
|||||||
}
|
}
|
||||||
|
|
||||||
receiveDirect = !EEPROM.read(2200);
|
receiveDirect = !EEPROM.read(2200);
|
||||||
notifyMacro = EEPROM.read(2201);
|
//notifyMacro = EEPROM.read(2201);
|
||||||
|
|
||||||
//strip.rgbwMode = EEPROM.read(2203);
|
//strip.rgbwMode = EEPROM.read(2203);
|
||||||
//skipFirstLed = EEPROM.read(2204);
|
//skipFirstLed = EEPROM.read(2204);
|
||||||
|
10
wled00/xml.cpp
Normal file → Executable file
10
wled00/xml.cpp
Normal file → Executable file
@ -424,9 +424,9 @@ void getSettingsJS(byte subPage, char* dest)
|
|||||||
const ColorOrderMapEntry* entry = com.get(s);
|
const ColorOrderMapEntry* entry = com.get(s);
|
||||||
if (entry == nullptr) break;
|
if (entry == nullptr) break;
|
||||||
oappend(SET_F("addCOM("));
|
oappend(SET_F("addCOM("));
|
||||||
oappend(itoa(entry->start,nS,10)); oappend(",");
|
oappend(itoa(entry->start,nS,10)); oappend(",");
|
||||||
oappend(itoa(entry->len,nS,10)); oappend(",");
|
oappend(itoa(entry->len,nS,10)); oappend(",");
|
||||||
oappend(itoa(entry->colorOrder,nS,10)); oappend(");");
|
oappend(itoa(entry->colorOrder,nS,10)); oappend(");");
|
||||||
}
|
}
|
||||||
|
|
||||||
sappend('v',SET_F("CA"),briS);
|
sappend('v',SET_F("CA"),briS);
|
||||||
@ -451,7 +451,7 @@ void getSettingsJS(byte subPage, char* dest)
|
|||||||
sappend('c',SET_F("RM"),rlyMde);
|
sappend('c',SET_F("RM"),rlyMde);
|
||||||
for (uint8_t i=0; i<WLED_MAX_BUTTONS; i++) {
|
for (uint8_t i=0; i<WLED_MAX_BUTTONS; i++) {
|
||||||
oappend(SET_F("addBtn("));
|
oappend(SET_F("addBtn("));
|
||||||
oappend(itoa(i,nS,10)); oappend(",");
|
oappend(itoa(i,nS,10)); oappend(",");
|
||||||
oappend(itoa(btnPin[i],nS,10)); oappend(",");
|
oappend(itoa(btnPin[i],nS,10)); oappend(",");
|
||||||
oappend(itoa(buttonType[i],nS,10));
|
oappend(itoa(buttonType[i],nS,10));
|
||||||
oappend(SET_F(");"));
|
oappend(SET_F(");"));
|
||||||
@ -466,7 +466,6 @@ void getSettingsJS(byte subPage, char* dest)
|
|||||||
if (subPage == SUBPAGE_UI)
|
if (subPage == SUBPAGE_UI)
|
||||||
{
|
{
|
||||||
sappends('s',SET_F("DS"),serverDescription);
|
sappends('s',SET_F("DS"),serverDescription);
|
||||||
//sappend('c',SET_F("ST"),syncToggleReceive);
|
|
||||||
sappend('c',SET_F("SU"),simplifiedUI);
|
sappend('c',SET_F("SU"),simplifiedUI);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -493,7 +492,6 @@ void getSettingsJS(byte subPage, char* dest)
|
|||||||
sappend('c',SET_F("SD"),notifyDirect);
|
sappend('c',SET_F("SD"),notifyDirect);
|
||||||
sappend('c',SET_F("SB"),notifyButton);
|
sappend('c',SET_F("SB"),notifyButton);
|
||||||
sappend('c',SET_F("SH"),notifyHue);
|
sappend('c',SET_F("SH"),notifyHue);
|
||||||
// sappend('c',SET_F("SM"),notifyMacro);
|
|
||||||
sappend('v',SET_F("UR"),udpNumRetries);
|
sappend('v',SET_F("UR"),udpNumRetries);
|
||||||
|
|
||||||
sappend('c',SET_F("NL"),nodeListEnabled);
|
sappend('c',SET_F("NL"),nodeListEnabled);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user