Add off override.
This commit is contained in:
parent
728d57d955
commit
4fdf85bbdb
@ -97,7 +97,7 @@ void WS2812FX::finalizeInit(void)
|
|||||||
//RGBW mode is enabled if at least one of the strips is RGBW
|
//RGBW mode is enabled if at least one of the strips is RGBW
|
||||||
isRgbw |= bus->isRgbw();
|
isRgbw |= bus->isRgbw();
|
||||||
//refresh is required to remain off if at least one of the strips requires the refresh.
|
//refresh is required to remain off if at least one of the strips requires the refresh.
|
||||||
isOffRefreshRequred |= BusManager::isOffRefreshRequred(bus->getType());
|
isOffRefreshRequred |= bus->isOffRefreshRequired();
|
||||||
_length += bus->getLength();
|
_length += bus->getLength();
|
||||||
}
|
}
|
||||||
ledCount = _length;
|
ledCount = _length;
|
||||||
|
@ -36,11 +36,11 @@ struct BusConfig {
|
|||||||
uint8_t colorOrder;
|
uint8_t colorOrder;
|
||||||
bool reversed;
|
bool reversed;
|
||||||
uint8_t skipAmount;
|
uint8_t skipAmount;
|
||||||
bool rgbwOverride;
|
bool refreshReq;
|
||||||
uint8_t pins[5] = {LEDPIN, 255, 255, 255, 255};
|
uint8_t pins[5] = {LEDPIN, 255, 255, 255, 255};
|
||||||
BusConfig(uint8_t busType, uint8_t* ppins, uint16_t pstart, uint16_t len = 1, uint8_t pcolorOrder = COL_ORDER_GRB, bool rev = false, uint8_t skip = 0) {
|
BusConfig(uint8_t busType, uint8_t* ppins, uint16_t pstart, uint16_t len = 1, uint8_t pcolorOrder = COL_ORDER_GRB, bool rev = false, uint8_t skip = 0) {
|
||||||
rgbwOverride = (bool) GET_BIT(busType,7);
|
refreshReq = (bool) GET_BIT(busType,7);
|
||||||
type = busType & 0x7F; // bit 7 may be/is hacked to include RGBW info (1=RGBW, 0=RGB)
|
type = busType & 0x7F; // bit 7 may be/is hacked to include refresh info (1=refresh in off state, 0=no refresh)
|
||||||
count = len; start = pstart; colorOrder = pcolorOrder; reversed = rev; skipAmount = skip;
|
count = len; start = pstart; colorOrder = pcolorOrder; reversed = rev; skipAmount = skip;
|
||||||
uint8_t nPins = 1;
|
uint8_t nPins = 1;
|
||||||
if (type >= TYPE_NET_DDP_RGB && type < 96) nPins = 4; //virtual network bus. 4 "pins" store IP address
|
if (type >= TYPE_NET_DDP_RGB && type < 96) nPins = 4; //virtual network bus. 4 "pins" store IP address
|
||||||
@ -126,6 +126,10 @@ class Bus {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool isOffRefreshRequired() {
|
||||||
|
return _needsRefresh;
|
||||||
|
}
|
||||||
|
|
||||||
bool reversed = false;
|
bool reversed = false;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -133,6 +137,7 @@ class Bus {
|
|||||||
uint8_t _bri = 255;
|
uint8_t _bri = 255;
|
||||||
uint16_t _start = 0;
|
uint16_t _start = 0;
|
||||||
bool _valid = false;
|
bool _valid = false;
|
||||||
|
bool _needsRefresh = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -149,9 +154,10 @@ class BusDigital : public Bus {
|
|||||||
_pins[1] = bc.pins[1];
|
_pins[1] = bc.pins[1];
|
||||||
}
|
}
|
||||||
reversed = bc.reversed;
|
reversed = bc.reversed;
|
||||||
|
_needsRefresh = bc.refreshReq || bc.type == TYPE_TM1814;
|
||||||
_skip = bc.skipAmount; //sacrificial pixels
|
_skip = bc.skipAmount; //sacrificial pixels
|
||||||
_len = bc.count + _skip;
|
_len = bc.count + _skip;
|
||||||
_rgbw = bc.rgbwOverride || Bus::isRgbw(bc.type); // RGBW override in bit 7
|
_rgbw = Bus::isRgbw(bc.type);
|
||||||
_iType = PolyBus::getI(bc.type, _pins, nr, _rgbw);
|
_iType = PolyBus::getI(bc.type, _pins, nr, _rgbw);
|
||||||
if (_iType == I_NONE) return;
|
if (_iType == I_NONE) return;
|
||||||
_busPtr = PolyBus::create(_iType, _pins, _len, nr);
|
_busPtr = PolyBus::create(_iType, _pins, _len, nr);
|
||||||
@ -588,11 +594,6 @@ class BusManager {
|
|||||||
return Bus::isRgbw(type);
|
return Bus::isRgbw(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Return true if the strip requires a refresh to stay off.
|
|
||||||
static bool isOffRefreshRequred(uint8_t type) {
|
|
||||||
return type == TYPE_TM1814;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint8_t numBusses = 0;
|
uint8_t numBusses = 0;
|
||||||
Bus* busses[WLED_MAX_BUSSES];
|
Bus* busses[WLED_MAX_BUSSES];
|
||||||
|
@ -114,24 +114,13 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
|
|||||||
if (start > lC+length) continue; // something is very wrong :)
|
if (start > lC+length) continue; // something is very wrong :)
|
||||||
uint8_t ledType = elm["type"] | TYPE_WS2812_RGB;
|
uint8_t ledType = elm["type"] | TYPE_WS2812_RGB;
|
||||||
bool reversed = elm["rev"];
|
bool reversed = elm["rev"];
|
||||||
//if ((bool)elm[F("rgbw")]) SET_BIT(ledType,7); else UNSET_BIT(ledType,7); // hack bit 7 to indicate RGBW (as an override if necessary)
|
bool refresh = elm["ref"] | false;
|
||||||
|
ledType |= refresh << 7; // hack bit 7 to indicate strip requires off refresh
|
||||||
s++;
|
s++;
|
||||||
lC += length;
|
lC += length;
|
||||||
BusConfig bc = BusConfig(ledType, pins, start, length, colorOrder, reversed, skipFirst);
|
BusConfig bc = BusConfig(ledType, pins, start, length, colorOrder, reversed, skipFirst);
|
||||||
mem += BusManager::memUsage(bc);
|
mem += BusManager::memUsage(bc);
|
||||||
if (mem <= MAX_LED_MEMORY && busses.getNumBusses() <= WLED_MAX_BUSSES) busses.add(bc); // finalization will be done in WLED::beginStrip()
|
if (mem <= MAX_LED_MEMORY && busses.getNumBusses() <= WLED_MAX_BUSSES) busses.add(bc); // finalization will be done in WLED::beginStrip()
|
||||||
/*
|
|
||||||
BusConfig bc = BusConfig(ledType, pins, start, length, colorOrder, reversed, skipFirst);
|
|
||||||
if (bc.adjustBounds(ledCount)) {
|
|
||||||
//RGBW mode is enabled if at least one of the strips is RGBW
|
|
||||||
strip.isRgbw = (strip.isRgbw || BusManager::isRgbw(ledType));
|
|
||||||
//refresh is required to remain off if at least one of the strips requires the refresh.
|
|
||||||
strip.isOffRefreshRequred |= BusManager::isOffRefreshRequred(ledType);
|
|
||||||
s++;
|
|
||||||
mem += busses.memUsage(bc);
|
|
||||||
if (mem <= MAX_LED_MEMORY) busses.add(bc);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
// finalization done in beginStrip()
|
// finalization done in beginStrip()
|
||||||
}
|
}
|
||||||
@ -559,7 +548,8 @@ void serializeConfig() {
|
|||||||
ins[F("order")] = bus->getColorOrder();
|
ins[F("order")] = bus->getColorOrder();
|
||||||
ins["rev"] = bus->reversed;
|
ins["rev"] = bus->reversed;
|
||||||
ins[F("skip")] = bus->skippedLeds();
|
ins[F("skip")] = bus->skippedLeds();
|
||||||
ins["type"] = bus->getType();
|
ins["type"] = bus->getType() & 0x7F;;
|
||||||
|
ins["ref"] = bus->isOffRefreshRequired();
|
||||||
ins[F("rgbw")] = bus->isRgbw();
|
ins[F("rgbw")] = bus->isRgbw();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,18 +160,19 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (change) {
|
if (change) {
|
||||||
// // blazoncek experimental extension
|
// blazoncek experimental extension
|
||||||
// gId("ew"+n).checked = (t == 30 || t == 31 || t == 44 || t == 45); // RGBW checkbox, TYPE_xxxx values from const.h
|
gId("rf"+n).checked = (gId("rf"+n).checked || t == 31); // LEDs require data in off state
|
||||||
if (t > 31 && t < 48) d.getElementsByName("LC"+n)[0].value = 1; // for sanity change analog count just to 1 LED
|
if (t > 31 && t < 48) d.getElementsByName("LC"+n)[0].value = 1; // for sanity change analog count just to 1 LED
|
||||||
}
|
}
|
||||||
// // blazoncek experimental extension
|
// blazoncek experimental extension
|
||||||
// gId("ew"+n).onclick = (t > 31 && t < 48) ? (function(){return false}) : (function(){}); // prevent change for analog
|
gId("rf"+n).onclick = (t == 31) ? (function(){return false}) : (function(){}); // prevent change for TM1814
|
||||||
// isRGBW |= gId("ew"+n).checked;
|
|
||||||
isRGBW |= (t == 30 || t == 31 || (t > 40 && t < 46 && t != 43)); // RGBW checkbox, TYPE_xxxx values from const.h
|
isRGBW |= (t == 30 || t == 31 || (t > 40 && t < 46 && t != 43)); // RGBW checkbox, TYPE_xxxx values from const.h
|
||||||
gId("co"+n).style.display = ((t>=80 && t<96) || t == 41 || t == 42) ? "none":"inline"; // hide color order for PWM W & WW/CW
|
gId("co"+n).style.display = ((t>=80 && t<96) || t == 41 || t == 42) ? "none":"inline"; // hide color order for PWM W & WW/CW
|
||||||
gId("dig"+n+"c").style.display = (t > 40 && t < 48) ? "none":"inline"; // hide count for analog
|
gId("dig"+n+"c").style.display = (t > 40 && t < 48) ? "none":"inline"; // hide count for analog
|
||||||
gId("dig"+n+"r").style.display = (t>=80 && t<96) ? "none":"inline"; // hide reversed for virtual
|
gId("dig"+n+"r").style.display = (t>=80 && t<96) ? "none":"inline"; // hide reversed for virtual
|
||||||
gId("dig"+n+"s").style.display = ((t>=80 && t<96) || (t > 40 && t < 48)) ? "none":"inline"; // hide skip 1st for virtual & analog
|
gId("dig"+n+"s").style.display = ((t>=80 && t<96) || (t > 40 && t < 48)) ? "none":"inline"; // hide skip 1st for virtual & analog
|
||||||
|
// blazoncek experimental extension
|
||||||
|
gId("dig"+n+"f").style.display = (t>=16 && t<32 || t>=50 && t<64) ? "inline":"none"; // hide refresh
|
||||||
gId("rev"+n).innerHTML = (t > 40 && t < 48) ? "Inverted output":"Reversed (rotated 180°)"; // change reverse text for analog
|
gId("rev"+n).innerHTML = (t > 40 && t < 48) ? "Inverted output":"Reversed (rotated 180°)"; // change reverse text for analog
|
||||||
gId("psd"+n).innerHTML = (t > 40 && t < 48) ? "Index:":"Start:"; // change analog start description
|
gId("psd"+n).innerHTML = (t > 40 && t < 48) ? "Index:":"Start:"; // change analog start description
|
||||||
}
|
}
|
||||||
@ -333,9 +334,9 @@ ${i+1}:
|
|||||||
<span id="p2d${i}"></span><input type="number" name="L2${i}" min="0" max="33" class="xs" onchange="UI()"/>
|
<span id="p2d${i}"></span><input type="number" name="L2${i}" min="0" max="33" class="xs" onchange="UI()"/>
|
||||||
<span id="p3d${i}"></span><input type="number" name="L3${i}" min="0" max="33" class="xs" onchange="UI()"/>
|
<span id="p3d${i}"></span><input type="number" name="L3${i}" min="0" max="33" class="xs" onchange="UI()"/>
|
||||||
<span id="p4d${i}"></span><input type="number" name="L4${i}" min="0" max="33" class="xs" onchange="UI()"/>
|
<span id="p4d${i}"></span><input type="number" name="L4${i}" min="0" max="33" class="xs" onchange="UI()"/>
|
||||||
<br>
|
<div id="dig${i}r" style="display:inline"><br><span id="rev${i}">Reversed</span>: <input type="checkbox" name="CV${i}"></div>
|
||||||
<div id="dig${i}r" style="display:inline"><span id="rev${i}">Reversed</span>: <input type="checkbox" name="CV${i}"> </div>
|
<div id="dig${i}s" style="display:inline"><br>Skip 1<sup>st</sup> LED: <input id="sl${i}" type="checkbox" name="SL${i}"></div>
|
||||||
<div id="dig${i}s" style="display:inline">Skip 1<sup>st</sup> LED: <input id="sl${i}" type="checkbox" name="SL${i}"></div>
|
<div id="dig${i}f" style="display:inline"><br>Off Refresh: <input id="rf${i}" type="checkbox" name="RF${i}"> </div>
|
||||||
</div>`;
|
</div>`;
|
||||||
f.insertAdjacentHTML("beforeend", cn);
|
f.insertAdjacentHTML("beforeend", cn);
|
||||||
}
|
}
|
||||||
|
File diff suppressed because one or more lines are too long
@ -104,7 +104,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
|
|||||||
char ls[4] = "LS"; ls[2] = 48+s; ls[3] = 0; //strip start LED
|
char ls[4] = "LS"; ls[2] = 48+s; ls[3] = 0; //strip start LED
|
||||||
char cv[4] = "CV"; cv[2] = 48+s; cv[3] = 0; //strip reverse
|
char cv[4] = "CV"; cv[2] = 48+s; cv[3] = 0; //strip reverse
|
||||||
char sl[4] = "SL"; sl[2] = 48+s; sl[3] = 0; //skip 1st LED
|
char sl[4] = "SL"; sl[2] = 48+s; sl[3] = 0; //skip 1st LED
|
||||||
//char ew[4] = "EW"; ew[2] = 48+s; ew[3] = 0; //strip RGBW override
|
char rf[4] = "RF"; rf[2] = 48+s; rf[3] = 0; //refresh required
|
||||||
if (!request->hasArg(lp)) {
|
if (!request->hasArg(lp)) {
|
||||||
DEBUG_PRINTLN(F("No data.")); break;
|
DEBUG_PRINTLN(F("No data.")); break;
|
||||||
}
|
}
|
||||||
@ -114,7 +114,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
|
|||||||
pins[i] = (request->arg(lp).length() > 0) ? request->arg(lp).toInt() : 255;
|
pins[i] = (request->arg(lp).length() > 0) ? request->arg(lp).toInt() : 255;
|
||||||
}
|
}
|
||||||
type = request->arg(lt).toInt();
|
type = request->arg(lt).toInt();
|
||||||
//if (request->hasArg(ew)) SET_BIT(type,7); else UNSET_BIT(type,7); // hack bit 7 to indicate RGBW (as a LED type override if necessary)
|
type |= request->hasArg(rf) << 7; // off refresh override
|
||||||
skip = request->hasArg(sl) ? LED_SKIP_AMOUNT : 0;
|
skip = request->hasArg(sl) ? LED_SKIP_AMOUNT : 0;
|
||||||
|
|
||||||
colorOrder = request->arg(co).toInt();
|
colorOrder = request->arg(co).toInt();
|
||||||
@ -513,9 +513,6 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
|
|||||||
DEBUG_PRINTLN(value);
|
DEBUG_PRINTLN(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef WLED_DEBUG
|
|
||||||
serializeJson(um,Serial); DEBUG_PRINTLN();
|
|
||||||
#endif
|
|
||||||
usermods.readFromConfig(um); // force change of usermod parameters
|
usermods.readFromConfig(um); // force change of usermod parameters
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -299,19 +299,6 @@ void WLED::loop()
|
|||||||
if (busConfigs[i] == nullptr) break;
|
if (busConfigs[i] == nullptr) break;
|
||||||
mem += BusManager::memUsage(*busConfigs[i]);
|
mem += BusManager::memUsage(*busConfigs[i]);
|
||||||
if (mem <= MAX_LED_MEMORY) busses.add(*busConfigs[i]);
|
if (mem <= MAX_LED_MEMORY) busses.add(*busConfigs[i]);
|
||||||
/*
|
|
||||||
// this is done in strip.finalizeInit()
|
|
||||||
if (busConfigs[i]->adjustBounds(ledCount)) {
|
|
||||||
mem += busses.memUsage(*busConfigs[i]);
|
|
||||||
if (mem <= MAX_LED_MEMORY) {
|
|
||||||
busses.add(*busConfigs[i]);
|
|
||||||
//RGBW mode is enabled if at least one of the strips is RGBW
|
|
||||||
strip.isRgbw = (strip.isRgbw || BusManager::isRgbw(busConfigs[i]->type));
|
|
||||||
//refresh is required to remain off if at least one of the strips requires the refresh.
|
|
||||||
strip.isOffRefreshRequred |= BusManager::isOffRefreshRequred(busConfigs[i]->type);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
delete busConfigs[i]; busConfigs[i] = nullptr;
|
delete busConfigs[i]; busConfigs[i] = nullptr;
|
||||||
}
|
}
|
||||||
strip.finalizeInit();
|
strip.finalizeInit();
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// version code in format yymmddb (b = daily build)
|
// version code in format yymmddb (b = daily build)
|
||||||
#define VERSION 2110071
|
#define VERSION 2110072
|
||||||
|
|
||||||
//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
|
||||||
|
@ -391,7 +391,7 @@ void getSettingsJS(byte subPage, char* dest)
|
|||||||
char ls[4] = "LS"; ls[2] = 48+s; ls[3] = 0; //strip start LED
|
char ls[4] = "LS"; ls[2] = 48+s; ls[3] = 0; //strip start LED
|
||||||
char cv[4] = "CV"; cv[2] = 48+s; cv[3] = 0; //strip reverse
|
char cv[4] = "CV"; cv[2] = 48+s; cv[3] = 0; //strip reverse
|
||||||
char sl[4] = "SL"; sl[2] = 48+s; sl[3] = 0; //skip 1st LED
|
char sl[4] = "SL"; sl[2] = 48+s; sl[3] = 0; //skip 1st LED
|
||||||
// char ew[4] = "EW"; ew[2] = 48+s; ew[3] = 0; //strip RGBW override
|
char rf[4] = "RF"; rf[2] = 48+s; rf[3] = 0; //off refresh
|
||||||
oappend(SET_F("addLEDs(1);"));
|
oappend(SET_F("addLEDs(1);"));
|
||||||
uint8_t pins[5];
|
uint8_t pins[5];
|
||||||
uint8_t nPins = bus->getPins(pins);
|
uint8_t nPins = bus->getPins(pins);
|
||||||
@ -405,7 +405,7 @@ void getSettingsJS(byte subPage, char* dest)
|
|||||||
sappend('v',ls,bus->getStart());
|
sappend('v',ls,bus->getStart());
|
||||||
sappend('c',cv,bus->reversed);
|
sappend('c',cv,bus->reversed);
|
||||||
sappend('c',sl,bus->skippedLeds());
|
sappend('c',sl,bus->skippedLeds());
|
||||||
// sappend('c',ew,bus->isRgbw());
|
sappend('c',rf,bus->isOffRefreshRequired());
|
||||||
}
|
}
|
||||||
sappend('v',SET_F("MA"),strip.ablMilliampsMax);
|
sappend('v',SET_F("MA"),strip.ablMilliampsMax);
|
||||||
sappend('v',SET_F("LA"),strip.milliampsPerLed);
|
sappend('v',SET_F("LA"),strip.milliampsPerLed);
|
||||||
|
Loading…
Reference in New Issue
Block a user