mirror of
https://github.com/wled/WLED.git
synced 2025-12-08 17:18:09 +00:00
Use usermod names from controller, consolidate JS for smaller flash size
Co-authored-by: DedeHai <6280424+DedeHai@users.noreply.github.com>
This commit is contained in:
@@ -1883,10 +1883,9 @@ function togglePins()
|
||||
gId('pins').style.transform = (isPins) ? "translateY(0px)":"translateY(100%)";
|
||||
}
|
||||
|
||||
function getPinOwnerName(owner, btnType)
|
||||
function getPinOwnerName(owner, btnType, umName)
|
||||
{
|
||||
if (!owner) return "Unknown";
|
||||
// Owner values must match PinOwner enum in pin_manager.h
|
||||
// High bit set (0x80) means built-in WLED owner
|
||||
if (owner & 0x80) {
|
||||
switch (owner) {
|
||||
@@ -1894,7 +1893,7 @@ function getPinOwnerName(owner, btnType)
|
||||
case 0x82: return "LED Digital";
|
||||
case 0x83: return "LED On/Off";
|
||||
case 0x84: return "LED PWM";
|
||||
case 0x85: return getButtonTypeName(btnType); // Button with type
|
||||
case 0x85: return getButtonTypeName(btnType);
|
||||
case 0x86: return "IR Receiver";
|
||||
case 0x87: return "Relay";
|
||||
case 0x88: return "SPI RAM";
|
||||
@@ -1906,63 +1905,21 @@ function getPinOwnerName(owner, btnType)
|
||||
case 0x8E: return "HUB75";
|
||||
}
|
||||
}
|
||||
// Usermod owners (values from USERMOD_ID_* in const.h)
|
||||
switch (owner) {
|
||||
case 0x01: return "Usermod";
|
||||
case 0x02: return "UM Example";
|
||||
case 0x03: return "UM Temperature";
|
||||
case 0x05: return "UM PIR";
|
||||
case 0x06: return "UM IMU";
|
||||
case 0x07: return "UM 4Line Display";
|
||||
case 0x08: return "UM Rotary Encoder";
|
||||
case 0x0D: return "UM Multi Relay";
|
||||
case 0x0E: return "UM Staircase";
|
||||
case 0x12: return "UM Battery";
|
||||
case 0x14: return "UM BH1750";
|
||||
case 0x16: return "UM RGB Encoder";
|
||||
case 0x17: return "UM QuinLED Penta";
|
||||
case 0x1E: return "UM BME280";
|
||||
case 0x20: return "UM Audio Reactive";
|
||||
case 0x25: return "UM SD Card";
|
||||
case 0x26: return "UM PWM Outputs";
|
||||
case 0x2B: return "UM LDR Dusk Dawn";
|
||||
case 0x2F: return "UM MAX17048";
|
||||
case 0x31: return "UM BME68X";
|
||||
case 0x35: return "UM Pixels Dice";
|
||||
}
|
||||
return "Owner " + owner;
|
||||
// Usermod owners - use name from JSON if available
|
||||
return umName || ("UM #" + owner);
|
||||
}
|
||||
|
||||
function getButtonTypeName(btnType)
|
||||
function getButtonTypeName(t)
|
||||
{
|
||||
if (typeof btnType === 'undefined') return "Button";
|
||||
switch (btnType) {
|
||||
case 0: return "Button (None)";
|
||||
case 1: return "Button (Reserved)";
|
||||
case 2: return "Button (Push)";
|
||||
case 3: return "Button (Push High)";
|
||||
case 4: return "Button (Switch)";
|
||||
case 5: return "Button (PIR)";
|
||||
case 6: return "Button (Touch)";
|
||||
case 7: return "Button (Analog)";
|
||||
case 8: return "Button (Analog Inv)";
|
||||
case 9: return "Button (Touch Switch)";
|
||||
}
|
||||
return "Button";
|
||||
var n = ["None","Reserved","Push","Push High","Switch","PIR","Touch","Analog","Analog Inv","Touch Switch"];
|
||||
return "Button (" + (n[t] || "?") + ")";
|
||||
}
|
||||
|
||||
function getPinCapabilities(caps)
|
||||
function getPinCapabilities(c)
|
||||
{
|
||||
var c = [];
|
||||
if (caps & 0x01) c.push("In");
|
||||
if (caps & 0x02) c.push("Out");
|
||||
if (caps & 0x04) c.push("ADC");
|
||||
if (caps & 0x08) c.push("Touch");
|
||||
if (caps & 0x10) c.push("DAC");
|
||||
if (caps & 0x20) c.push("IR");
|
||||
if (caps & 0x40) c.push("I2S");
|
||||
if (caps & 0x80) c.push("PWM");
|
||||
return c.join(", ");
|
||||
var r = [], f = ["In","Out","ADC","Touch","DAC","IR","I2S","PWM"];
|
||||
for (var i=0; i<8; i++) if (c & (1<<i)) r.push(f[i]);
|
||||
return r.join(", ");
|
||||
}
|
||||
|
||||
function loadPins()
|
||||
@@ -1984,38 +1941,19 @@ function loadPins()
|
||||
|
||||
function populatePins(json)
|
||||
{
|
||||
var cn="";
|
||||
var pins = json.pins || [];
|
||||
if (pins.length === 0) {
|
||||
var cn="", pins = json.pins || [];
|
||||
if (!pins.length) {
|
||||
cn = "No pins available.";
|
||||
} else {
|
||||
cn = '<table class="infot"><tr><th>Pin</th><th>Owner</th><th>Functions</th><th>State</th></tr>';
|
||||
for (var pin of pins) {
|
||||
var gpio = pin.p;
|
||||
var caps = pin.c || 0;
|
||||
var allocated = pin.a || false;
|
||||
var owner = pin.o || 0;
|
||||
var btnType = pin.t; // button type (if button)
|
||||
var mode = pin.m; // 0=input, 1=output, undefined=not simple GPIO
|
||||
var state = pin.s; // 0 or 1, undefined if not readable
|
||||
var pullup = pin.u; // pullup status
|
||||
|
||||
var stateStr = "";
|
||||
if (typeof state !== 'undefined') {
|
||||
// Show colored circle for state (no text)
|
||||
var color = state ? "var(--c-g)" : "var(--c-r)";
|
||||
stateStr = '<span class="pstate" style="background:' + color + ';"></span>';
|
||||
for (var p of pins) {
|
||||
var st = "";
|
||||
if (typeof p.s !== 'undefined') {
|
||||
st = '<span class="pstate" style="background:var(--c-' + (p.s ? 'g' : 'r') + ');"></span>';
|
||||
}
|
||||
|
||||
var statusStr = allocated ? getPinOwnerName(owner, btnType) : '<span style="color:var(--c-g)">Available</span>';
|
||||
var capsStr = getPinCapabilities(caps);
|
||||
|
||||
// Add pullup indicator if present
|
||||
if (typeof pullup !== 'undefined') {
|
||||
statusStr += pullup ? ' (PU)' : ' (No PU)';
|
||||
}
|
||||
|
||||
cn += '<tr><td>GPIO ' + gpio + '</td><td>' + statusStr + '</td><td>' + capsStr + '</td><td>' + stateStr + '</td></tr>';
|
||||
var ow = p.a ? getPinOwnerName(p.o, p.t, p.n) : '<span style="color:var(--c-g)">Available</span>';
|
||||
if (typeof p.u !== 'undefined') ow += p.u ? ' (PU)' : ' (No PU)';
|
||||
cn += '<tr><td>GPIO ' + p.p + '</td><td>' + ow + '</td><td>' + getPinCapabilities(p.c||0) + '</td><td>' + st + '</td></tr>';
|
||||
}
|
||||
cn += '</table>';
|
||||
}
|
||||
|
||||
@@ -1114,7 +1114,24 @@ void serializePins(JsonObject root)
|
||||
pinObj["a"] = isAllocated; // allocated status
|
||||
|
||||
if (isAllocated) {
|
||||
pinObj["o"] = static_cast<uint8_t>(owner); // owner ID
|
||||
uint8_t ownerVal = static_cast<uint8_t>(owner);
|
||||
pinObj["o"] = ownerVal; // owner ID
|
||||
|
||||
// For usermod owners (low bit not set), try to get the usermod name
|
||||
if (!(ownerVal & 0x80) && ownerVal > 0) {
|
||||
Usermod* um = UsermodManager::lookup(ownerVal);
|
||||
if (um) {
|
||||
// Get usermod name by calling addToConfig and extracting the key
|
||||
StaticJsonDocument<256> tmpDoc;
|
||||
JsonObject tmpObj = tmpDoc.to<JsonObject>();
|
||||
um->addToConfig(tmpObj);
|
||||
// The first key in the object is the usermod name
|
||||
JsonObject::iterator it = tmpObj.begin();
|
||||
if (it != tmpObj.end()) {
|
||||
pinObj["n"] = it->key().c_str(); // usermod name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// For button pins, check if internal pullup/pulldown would be used and get state
|
||||
|
||||
Reference in New Issue
Block a user