Skip to content

Commit 9e5d45d

Browse files
committed
Optional custom start indices
1 parent 6ddcba8 commit 9e5d45d

File tree

3 files changed

+46
-22
lines changed

3 files changed

+46
-22
lines changed

wled00/data/settings_leds.htm

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
<title>LED Settings</title>
77
<script>
88
var d=document,laprev=55,maxB=1,maxM=4000,maxPB=4096,maxL=1333,maxLbquot=0; //maximum bytes for LED allocation: 4kB for 8266, 32kB for 32
9-
function H()
9+
var customStarts=false,startsDirty=[];
10+
function H()
1011
{
1112
window.open("https://github.com/Aircoookie/WLED/wiki/Settings#led-settings");
1213
}
@@ -70,7 +71,7 @@
7071
if (bquot > 100) {var msg = "Too many LEDs for me to handle!"; if (maxM < 10000) msg += "\n\rConsider using an ESP32."; alert(msg);}
7172
if (d.Sf.checkValidity()) d.Sf.submit(); //https://stackoverflow.com/q/37323914
7273
}
73-
function S(){GetV();setABL();}
74+
function S(){GetV();checkSi();setABL();}
7475
function enABL()
7576
{
7677
var en = gId('able').checked;
@@ -186,12 +187,13 @@
186187
// do we have a led count field
187188
if (nm=="LC") {
188189
var c=parseInt(LCs[i].value,10);
189-
//gId("ls"+n).value=sLC; // update led start field (TODO except if it has been manually changed)
190+
if (!customStarts || !startsDirty[n]) gId("ls"+n).value=sLC;
191+
gId("ls"+n).disabled = !customStarts;
190192
if(c){
191193
var s = parseInt(gId("ls"+n).value);
192194
if (s+c > sLC) sLC = s+c;
193195
if(c>maxLC)maxLC=c;
194-
var t = parseInt(d.getElementsByName("LT"+n)[0].value, 10); // LED type SELECT
196+
var t = parseInt(d.getElementsByName("LT"+n)[0].value); // LED type SELECT
195197
if (t>16) sPC+=c; //virtual out busses do not count towards physical LEDs
196198
} // increase led count
197199
continue;
@@ -203,7 +205,7 @@
203205
}
204206
// ignore IP address (stored in pins for virtual busses)
205207
if (nm=="L0" || nm=="L1" || nm=="L2" || nm=="L3") {
206-
var t = parseInt(d.getElementsByName("LT"+n)[0].value, 10); // LED type SELECT
208+
var t = parseInt(d.getElementsByName("LT"+n)[0].value); // LED type SELECT
207209
if (t<16) {
208210
LCs[i].max = 255;
209211
LCs[i].min = 0;
@@ -320,7 +322,7 @@
320322
<option value="5">GBR</option>
321323
</select></div>
322324
<br>
323-
<span id="psd${i}">Start:</span> <input type="number" name="LS${i}" id="ls${i}" class="l" min="0" max="8191" value="${lastEnd(i)}" onchange="UI()" required />&nbsp;
325+
<span id="psd${i}">Start:</span> <input type="number" name="LS${i}" id="ls${i}" class="l starts" min="0" max="8191" value="${lastEnd(i)}" oninput="UI();startsDirty[${i}]=true;" required />&nbsp;
324326
<div id="dig${i}c" style="display:inline">Length: <input type="number" name="LC${i}" class="l" min="1" max="${maxPB}" value="1" required oninput="UI()" /></div>
325327
<br>
326328
<span id="p0d${i}">GPIO:</span> <input type="number" name="L0${i}" min="0" max="33" required class="xs" onchange="UI()"/>
@@ -362,6 +364,23 @@
362364
c += `<span style="cursor: pointer;" onclick="off('${bt}')">&nbsp;&#215;</span><br>`;
363365
gId("btns").innerHTML = c;
364366
}
367+
function tglSi() {
368+
customStarts = !customStarts;
369+
if (!customStarts) startsDirty = []; //set all starts to clean
370+
UI();
371+
}
372+
function checkSi() { //on load, checks whether there are custom start fields
373+
var cs = false;
374+
for (var i=1; i < d.getElementsByClassName("iST").length; i++) {
375+
var v = parseInt(gId("ls"+(i-1)).value) + parseInt(d.getElementsByName("LC"+(i-1))[0].value);
376+
if (v != parseInt(gId("ls"+i).value)) {cs = true; startsDirty[i] = true;}
377+
}
378+
if (parseInt(gId("ls0").value) != 0) {cs = true; startsDirty[0] = true;}
379+
if (cs) {
380+
gId("si").checked = true;
381+
tglSi();
382+
}
383+
}
365384
function uploadFile(name) {
366385
var req = new XMLHttpRequest();
367386
req.addEventListener('load', function(){showToast(this.responseText,this.status >= 400)});
@@ -428,8 +447,9 @@ <h3>Hardware setup</h3>
428447
&#9888; You might run into stability or lag issues.<br>
429448
Use less than <span id="wreason">800 LEDs per output</span> for the best experience!<br>
430449
</div>
450+
<hr style="width:260px">
431451
Make a segment for each output: <input type="checkbox" name="MS"> <br>
432-
<!--Custom bus start indices: <input type="checkbox" id="cs"> <br>-->
452+
Custom bus start indices: <input type="checkbox" onchange="tglSi()" id="si"> <br>
433453
<hr style="width:260px">
434454
<div id="btns"></div>
435455
Touch threshold: <input type="number" class="s" min="0" max="100" name="TT" required><br>

wled00/data/style.css

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ input {
3535
font-family: Verdana, sans-serif;
3636
border: 0.5ch solid #333;
3737
}
38+
input:disabled {
39+
color: #888;
40+
}
3841
input[type="number"] {
3942
width: 4em;
4043
margin: 2px;

0 commit comments

Comments
 (0)