|
6 | 6 | <title>LED Settings</title> |
7 | 7 | <script> |
8 | 8 | 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() |
10 | 11 | { |
11 | 12 | window.open("https://github.com/Aircoookie/WLED/wiki/Settings#led-settings"); |
12 | 13 | } |
|
70 | 71 | if (bquot > 100) {var msg = "Too many LEDs for me to handle!"; if (maxM < 10000) msg += "\n\rConsider using an ESP32."; alert(msg);} |
71 | 72 | if (d.Sf.checkValidity()) d.Sf.submit(); //https://stackoverflow.com/q/37323914 |
72 | 73 | } |
73 | | - function S(){GetV();setABL();} |
| 74 | + function S(){GetV();checkSi();setABL();} |
74 | 75 | function enABL() |
75 | 76 | { |
76 | 77 | var en = gId('able').checked; |
|
186 | 187 | // do we have a led count field |
187 | 188 | if (nm=="LC") { |
188 | 189 | 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; |
190 | 192 | if(c){ |
191 | 193 | var s = parseInt(gId("ls"+n).value); |
192 | 194 | if (s+c > sLC) sLC = s+c; |
193 | 195 | 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 |
195 | 197 | if (t>16) sPC+=c; //virtual out busses do not count towards physical LEDs |
196 | 198 | } // increase led count |
197 | 199 | continue; |
|
203 | 205 | } |
204 | 206 | // ignore IP address (stored in pins for virtual busses) |
205 | 207 | 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 |
207 | 209 | if (t<16) { |
208 | 210 | LCs[i].max = 255; |
209 | 211 | LCs[i].min = 0; |
|
320 | 322 | <option value="5">GBR</option> |
321 | 323 | </select></div> |
322 | 324 | <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 /> |
| 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 /> |
324 | 326 | <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> |
325 | 327 | <br> |
326 | 328 | <span id="p0d${i}">GPIO:</span> <input type="number" name="L0${i}" min="0" max="33" required class="xs" onchange="UI()"/> |
|
362 | 364 | c += `<span style="cursor: pointer;" onclick="off('${bt}')"> ×</span><br>`; |
363 | 365 | gId("btns").innerHTML = c; |
364 | 366 | } |
| 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 | + } |
365 | 384 | function uploadFile(name) { |
366 | 385 | var req = new XMLHttpRequest(); |
367 | 386 | req.addEventListener('load', function(){showToast(this.responseText,this.status >= 400)}); |
@@ -428,8 +447,9 @@ <h3>Hardware setup</h3> |
428 | 447 | ⚠ You might run into stability or lag issues.<br> |
429 | 448 | Use less than <span id="wreason">800 LEDs per output</span> for the best experience!<br> |
430 | 449 | </div> |
| 450 | + <hr style="width:260px"> |
431 | 451 | 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> |
433 | 453 | <hr style="width:260px"> |
434 | 454 | <div id="btns"></div> |
435 | 455 | Touch threshold: <input type="number" class="s" min="0" max="100" name="TT" required><br> |
|
0 commit comments