Add ability to skip up to 255 LEDs (#2342)
This commit is contained in:
parent
854ed8cfa9
commit
522e752582
@ -1,5 +1,13 @@
|
|||||||
## WLED changelog
|
## WLED changelog
|
||||||
|
|
||||||
|
### Builds after release 0.13.1
|
||||||
|
|
||||||
|
#### Build 2203160
|
||||||
|
|
||||||
|
- Version bump to v0.13.2-a0 "Toki"
|
||||||
|
- Add ability to skip up to 255 LEDs
|
||||||
|
- Dependency version bumps
|
||||||
|
|
||||||
### WLED release 0.13.1
|
### WLED release 0.13.1
|
||||||
|
|
||||||
#### Build 2203150
|
#### Build 2203150
|
||||||
|
2
package-lock.json
generated
2
package-lock.json
generated
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "wled",
|
"name": "wled",
|
||||||
"version": "0.13.1",
|
"version": "0.13.2-a0",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "wled",
|
"name": "wled",
|
||||||
"version": "0.13.1",
|
"version": "0.13.2-a0",
|
||||||
"description": "Tools for WLED project",
|
"description": "Tools for WLED project",
|
||||||
"main": "tools/cdata.js",
|
"main": "tools/cdata.js",
|
||||||
"directories": {
|
"directories": {
|
||||||
|
@ -199,9 +199,9 @@ build_flags =
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${env.lib_deps}
|
${env.lib_deps}
|
||||||
#https://github.com/lorol/LITTLEFS.git
|
#https://github.com/lorol/LITTLEFS.git
|
||||||
# ESPAsyncTCP @ 1.2.0
|
ESPAsyncTCP @ 1.2.2
|
||||||
ESPAsyncUDP
|
ESPAsyncUDP
|
||||||
makuna/NeoPixelBus @ 2.6.7 # 2.6.5/2.6.6 and newer do not compile on ESP core < 3.0.0
|
makuna/NeoPixelBus @ 2.6.9
|
||||||
|
|
||||||
[esp32]
|
[esp32]
|
||||||
#platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.3/platform-espressif32-2.0.2.3.zip
|
#platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.3/platform-espressif32-2.0.2.3.zip
|
||||||
@ -221,7 +221,7 @@ default_partitions = tools/WLED_ESP32_4MB_1MB_FS.csv
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${env.lib_deps}
|
${env.lib_deps}
|
||||||
https://github.com/lorol/LITTLEFS.git
|
https://github.com/lorol/LITTLEFS.git
|
||||||
makuna/NeoPixelBus @ 2.6.7
|
makuna/NeoPixelBus @ 2.6.9
|
||||||
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
|
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
|
||||||
|
|
||||||
[esp32s2]
|
[esp32s2]
|
||||||
@ -234,7 +234,7 @@ build_flags = -g
|
|||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${env.lib_deps}
|
${env.lib_deps}
|
||||||
makuna/NeoPixelBus @ 2.6.7
|
makuna/NeoPixelBus @ 2.6.9
|
||||||
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
|
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
|
||||||
|
|
||||||
[esp32c3]
|
[esp32c3]
|
||||||
@ -247,7 +247,7 @@ build_flags = -g
|
|||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${env.lib_deps}
|
${env.lib_deps}
|
||||||
makuna/NeoPixelBus @ 2.6.7
|
makuna/NeoPixelBus @ 2.6.9
|
||||||
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
|
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
@ -71,7 +71,6 @@
|
|||||||
assuming each segment uses the same amount of data. 256 for ESP8266, 640 for ESP32. */
|
assuming each segment uses the same amount of data. 256 for ESP8266, 640 for ESP32. */
|
||||||
#define FAIR_DATA_PER_SEG (MAX_SEGMENT_DATA / MAX_NUM_SEGMENTS)
|
#define FAIR_DATA_PER_SEG (MAX_SEGMENT_DATA / MAX_NUM_SEGMENTS)
|
||||||
|
|
||||||
#define LED_SKIP_AMOUNT 1
|
|
||||||
#define MIN_SHOW_DELAY (_frametime < 16 ? 8 : 15)
|
#define MIN_SHOW_DELAY (_frametime < 16 ? 8 : 15)
|
||||||
|
|
||||||
#define NUM_COLORS 3 /* number of colors per segment */
|
#define NUM_COLORS 3 /* number of colors per segment */
|
||||||
|
@ -588,7 +588,7 @@ class BusManager {
|
|||||||
//utility to get the approx. memory usage of a given BusConfig
|
//utility to get the approx. memory usage of a given BusConfig
|
||||||
static uint32_t memUsage(BusConfig &bc) {
|
static uint32_t memUsage(BusConfig &bc) {
|
||||||
uint8_t type = bc.type;
|
uint8_t type = bc.type;
|
||||||
uint16_t len = bc.count;
|
uint16_t len = bc.count + bc.skipAmount;
|
||||||
if (type > 15 && type < 32) {
|
if (type > 15 && type < 32) {
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
if (bc.pins[0] == 3) { //8266 DMA uses 5x the mem
|
if (bc.pins[0] == 3) { //8266 DMA uses 5x the mem
|
||||||
|
@ -96,9 +96,11 @@
|
|||||||
UI();
|
UI();
|
||||||
}
|
}
|
||||||
//returns mem usage
|
//returns mem usage
|
||||||
function getMem(t, len, p0) {
|
function getMem(t, n) {
|
||||||
|
let len = parseInt(d.getElementsByName("LC"+n)[0].value);
|
||||||
|
len += parseInt(d.getElementsByName("SL"+n)[0].value); // skipped LEDs are allocated too
|
||||||
if (t < 32) {
|
if (t < 32) {
|
||||||
if (maxM < 10000 && p0==3) { //8266 DMA uses 5x the mem
|
if (maxM < 10000 && d.getElementsByName("L0"+n)[0].value == 3) { //8266 DMA uses 5x the mem
|
||||||
if (t > 29) return len*20; //RGBW
|
if (t > 29) return len*20; //RGBW
|
||||||
return len*15;
|
return len*15;
|
||||||
} else if (maxM >= 10000) //ESP32 RMT uses double buffer?
|
} else if (maxM >= 10000) //ESP32 RMT uses double buffer?
|
||||||
@ -133,7 +135,7 @@
|
|||||||
gId("p1d"+n).innerHTML = (t> 49 && t<64) ? "Clk GPIO:" : "";
|
gId("p1d"+n).innerHTML = (t> 49 && t<64) ? "Clk GPIO:" : "";
|
||||||
var LK = d.getElementsByName("L1"+n)[0]; // clock pin
|
var LK = d.getElementsByName("L1"+n)[0]; // clock pin
|
||||||
|
|
||||||
memu += getMem(t, d.getElementsByName("LC"+n)[0].value, d.getElementsByName("L0"+n)[0].value); // calc memory
|
memu += getMem(t, n); // calc memory
|
||||||
|
|
||||||
// enumerate pins
|
// enumerate pins
|
||||||
for (p=1; p<5; p++) {
|
for (p=1; p<5; p++) {
|
||||||
@ -324,7 +326,7 @@ ${i+1}:
|
|||||||
<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()"/>
|
||||||
<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"><br><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"><br>Skip first LEDs: <input type="number" name="SL${i}" min="0" max="255" oninput="UI()"></div>
|
||||||
<div id="dig${i}f" style="display:inline"><br>Off Refresh: <input id="rf${i}" type="checkbox" name="RF${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);
|
||||||
@ -466,7 +468,7 @@ Length: <input type="number" name="XC${i}" id="xc${i}" class="l" min="1" max="65
|
|||||||
d.getElementsByName("LS"+i)[0].value = v.start;
|
d.getElementsByName("LS"+i)[0].value = v.start;
|
||||||
d.getElementsByName("LC"+i)[0].value = v.len;
|
d.getElementsByName("LC"+i)[0].value = v.len;
|
||||||
d.getElementsByName("CO"+i)[0].value = v.order;
|
d.getElementsByName("CO"+i)[0].value = v.order;
|
||||||
d.getElementsByName("SL"+i)[0].checked = v.skip;
|
d.getElementsByName("SL"+i)[0].value = v.skip;
|
||||||
d.getElementsByName("RF"+i)[0].checked = v.ref;
|
d.getElementsByName("RF"+i)[0].checked = v.ref;
|
||||||
d.getElementsByName("CV"+i)[0].checked = v.rev;
|
d.getElementsByName("CV"+i)[0].checked = v.rev;
|
||||||
});
|
});
|
||||||
|
@ -42,7 +42,7 @@ function B(){window.history.back()}function U(){document.getElementById("uf").st
|
|||||||
.bt{background:#333;color:#fff;font-family:Verdana,sans-serif;border:.3ch solid #333;display:inline-block;font-size:20px;margin:8px;margin-top:12px}input[type=file]{font-size:16px}body{font-family:Verdana,sans-serif;text-align:center;background:#222;color:#fff;line-height:200%}#msg{display:none}
|
.bt{background:#333;color:#fff;font-family:Verdana,sans-serif;border:.3ch solid #333;display:inline-block;font-size:20px;margin:8px;margin-top:12px}input[type=file]{font-size:16px}body{font-family:Verdana,sans-serif;text-align:center;background:#222;color:#fff;line-height:200%}#msg{display:none}
|
||||||
</style></head><body><h2>WLED Software Update</h2><form method="POST"
|
</style></head><body><h2>WLED Software Update</h2><form method="POST"
|
||||||
action="/update" id="uf" enctype="multipart/form-data" onsubmit="U()">
|
action="/update" id="uf" enctype="multipart/form-data" onsubmit="U()">
|
||||||
Installed version: 0.13.1<br>Download the latest binary: <a
|
Installed version: 0.13.2-a0<br>Download the latest binary: <a
|
||||||
href="https://github.com/Aircoookie/WLED/releases" target="_blank"><img
|
href="https://github.com/Aircoookie/WLED/releases" target="_blank"><img
|
||||||
src="https://img.shields.io/github/release/Aircoookie/WLED.svg?style=flat-square">
|
src="https://img.shields.io/github/release/Aircoookie/WLED.svg?style=flat-square">
|
||||||
</a><br><input type="file" class="bt" name="update" required><br><input
|
</a><br><input type="file" class="bt" name="update" required><br><input
|
||||||
|
File diff suppressed because one or more lines are too long
@ -189,7 +189,7 @@ void sendImprovInfoResponse() {
|
|||||||
out[11] = 4; //Firmware len ("WLED")
|
out[11] = 4; //Firmware len ("WLED")
|
||||||
out[12] = 'W'; out[13] = 'L'; out[14] = 'E'; out[15] = 'D';
|
out[12] = 'W'; out[13] = 'L'; out[14] = 'E'; out[15] = 'D';
|
||||||
uint8_t lengthSum = 17;
|
uint8_t lengthSum = 17;
|
||||||
uint8_t vlen = sprintf_P(out+lengthSum,PSTR("0.13.1/%i"),VERSION);
|
uint8_t vlen = sprintf_P(out+lengthSum,PSTR("0.13.2-a0/%i"),VERSION);
|
||||||
out[16] = vlen; lengthSum += vlen;
|
out[16] = vlen; lengthSum += vlen;
|
||||||
uint8_t hlen = 7;
|
uint8_t hlen = 7;
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
|
@ -97,7 +97,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
|
|||||||
char lt[4] = "LT"; lt[2] = 48+s; lt[3] = 0; //strip type
|
char lt[4] = "LT"; lt[2] = 48+s; lt[3] = 0; //strip type
|
||||||
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 first N LEDs
|
||||||
char rf[4] = "RF"; rf[2] = 48+s; rf[3] = 0; //refresh required
|
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;
|
||||||
@ -109,7 +109,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
|
|||||||
}
|
}
|
||||||
type = request->arg(lt).toInt();
|
type = request->arg(lt).toInt();
|
||||||
type |= request->hasArg(rf) << 7; // off refresh override
|
type |= request->hasArg(rf) << 7; // off refresh override
|
||||||
skip = request->hasArg(sl) ? LED_SKIP_AMOUNT : 0;
|
skip = request->arg(sl).toInt();
|
||||||
colorOrder = request->arg(co).toInt();
|
colorOrder = request->arg(co).toInt();
|
||||||
start = (request->hasArg(ls)) ? request->arg(ls).toInt() : t;
|
start = (request->hasArg(ls)) ? request->arg(ls).toInt() : t;
|
||||||
if (request->hasArg(lc) && request->arg(lc).toInt() > 0) {
|
if (request->hasArg(lc) && request->arg(lc).toInt() > 0) {
|
||||||
|
@ -3,12 +3,12 @@
|
|||||||
/*
|
/*
|
||||||
Main sketch, global variable declarations
|
Main sketch, global variable declarations
|
||||||
@title WLED project sketch
|
@title WLED project sketch
|
||||||
@version 0.13.1
|
@version 0.13.2-a0
|
||||||
@author Christian Schwinne
|
@author Christian Schwinne
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// version code in format yymmddb (b = daily build)
|
// version code in format yymmddb (b = daily build)
|
||||||
#define VERSION 2203150
|
#define VERSION 2203160
|
||||||
|
|
||||||
//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
|
||||||
|
@ -409,7 +409,7 @@ void getSettingsJS(byte subPage, char* dest)
|
|||||||
sappend('v',co,bus->getColorOrder());
|
sappend('v',co,bus->getColorOrder());
|
||||||
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('v',sl,bus->skippedLeds());
|
||||||
sappend('c',rf,bus->isOffRefreshRequired());
|
sappend('c',rf,bus->isOffRefreshRequired());
|
||||||
}
|
}
|
||||||
sappend('v',SET_F("MA"),strip.ablMilliampsMax);
|
sappend('v',SET_F("MA"),strip.ablMilliampsMax);
|
||||||
|
Loading…
Reference in New Issue
Block a user