|
842 | 842 | } |
843 | 843 | } |
844 | 844 | function pinDropdowns() { |
| 845 | + // Rebuild LED GPIO selects now that d.pinsData is available. |
| 846 | + d.Sf.querySelectorAll(".iST input.s[name^=L], .iST select.pin[name^=L]").forEach((e) => { |
| 847 | + let n = e.name.substring(2, 3); |
| 848 | + let t = parseInt(d.Sf["LT"+n].value, 10); |
| 849 | + if (!isVir(t) && !isHub75(t)) makePinSelect(e.name, 1); |
| 850 | + }); |
845 | 851 | // IR (any pin including input-only) |
846 | 852 | let irSel = makePinSelect("IR", 0); |
847 | 853 | if (irSel) irSel.onchange = function() { UI(); pinUpd(this); }; |
848 | 854 | // Relay (output required) |
849 | 855 | let rlSel = makePinSelect("RL", 1); |
850 | 856 | if (rlSel) rlSel.onchange = function() { UI(); pinUpd(this); }; |
851 | 857 | // Buttons (flags depend on button type: touch=2, ADC=4) |
852 | | - gId("btns").querySelectorAll('input[type="number"]').forEach((e) => { |
| 858 | + gId("btns").querySelectorAll('input[type="number"], select.pin[name^=BT]').forEach((e) => { |
853 | 859 | let s = e.name.substring(2); |
854 | 860 | let t = parseInt(d.Sf["BE"+s]?.value) || 0; |
855 | 861 | let bSel = makePinSelect(e.name, btnPinFlags(t)); |
|
871 | 877 | let pins = []; |
872 | 878 | // collect LED bus pin values from remaining inputs (virtual/HUB75) |
873 | 879 | d.Sf.querySelectorAll(".iST input.s[name^=L]").forEach((i) => { |
874 | | - if (i.value !== "" && parseInt(i.value) >= 0 && i.max < 255) |
875 | | - pins.push(i.value); |
| 880 | + let busN = i.name.substring(2, 3); |
| 881 | + let t = parseInt(d.Sf["LT"+busN].value, 10); |
| 882 | + let p = parseInt(i.name.charAt(1), 10); |
| 883 | + if (isVir(t) || isHub75(t) || p >= numPins(t)) return; |
| 884 | + if (i.value !== "" && parseInt(i.value, 10) >= 0) pins.push(i.value); |
876 | 885 | }); |
877 | 886 | // collect LED bus pin values from selects |
878 | 887 | d.Sf.querySelectorAll(".iST select.pin[name^=L]").forEach((s) => { |
|
0 commit comments