Skip to content

Commit a121f5b

Browse files
authored
Merge pull request #4286 from blazoncek/xml-bugfix
xml comma bugfix + few string optimisations
2 parents 2510621 + c596b5a commit a121f5b

File tree

1 file changed

+29
-30
lines changed

1 file changed

+29
-30
lines changed

wled00/xml.cpp

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -83,43 +83,50 @@ void appendGPIOinfo(Print& settingsScript) {
8383
// usermod pin reservations will become unnecessary when settings pages will read cfg.json directly
8484
if (requestJSONBufferLock(6)) {
8585
// if we can't allocate JSON buffer ignore usermod pins
86-
JsonObject mods = pDoc->createNestedObject(F("um"));
86+
JsonObject mods = pDoc->createNestedObject("um");
8787
UsermodManager::addToConfig(mods);
8888
if (!mods.isNull()) fillUMPins(settingsScript, mods);
8989
releaseJSONBufferLock();
9090
}
9191
settingsScript.print(F("];"));
9292

9393
// add reserved (unusable) pins
94+
bool firstPin = true;
9495
settingsScript.print(F("d.rsvd=["));
9596
for (unsigned i = 0; i < WLED_NUM_PINS; i++) {
9697
if (!PinManager::isPinOk(i, false)) { // include readonly pins
97-
settingsScript.print(i); settingsScript.print(",");
98+
if (!firstPin) settingsScript.print(',');
99+
settingsScript.print(i);
100+
firstPin = false;
98101
}
99102
}
100103
#ifdef WLED_ENABLE_DMX
101-
settingsScript.print(F("2,")); // DMX hardcoded pin
104+
if (!firstPin) settingsScript.print(',');
105+
settingsScript.print(2); // DMX hardcoded pin
106+
firstPin = false;
102107
#endif
103108
#if defined(WLED_DEBUG) && !defined(WLED_DEBUG_HOST)
104-
settingsScript.printf_P(PSTR(",%d"),hardwareTX); // debug output (TX) pin
109+
if (!firstPin) settingsScript.print(',');
110+
settingsScript.print(hardwareTX); // debug output (TX) pin
111+
firstPin = false;
105112
#endif
106-
//Note: Using pin 3 (RX) disables Adalight / Serial JSON
107113
#ifdef WLED_USE_ETHERNET
108114
if (ethernetType != WLED_ETH_NONE && ethernetType < WLED_NUM_ETH_TYPES) {
109-
for (unsigned p=0; p<WLED_ETH_RSVD_PINS_COUNT; p++) { settingsScript.printf(",%d", esp32_nonconfigurable_ethernet_pins[p].pin); }
110-
if (ethernetBoards[ethernetType].eth_power>=0) { settingsScript.printf(",%d", ethernetBoards[ethernetType].eth_power); }
111-
if (ethernetBoards[ethernetType].eth_mdc>=0) { settingsScript.printf(",%d", ethernetBoards[ethernetType].eth_mdc); }
112-
if (ethernetBoards[ethernetType].eth_mdio>=0) { settingsScript.printf(",%d", ethernetBoards[ethernetType].eth_mdio); }
113-
switch (ethernetBoards[ethernetType].eth_clk_mode) {
115+
if (!firstPin) settingsScript.print(',');
116+
for (unsigned p=0; p<WLED_ETH_RSVD_PINS_COUNT; p++) { settingsScript.printf("%d,",esp32_nonconfigurable_ethernet_pins[p].pin); }
117+
if (ethernetBoards[ethernetType].eth_power >= 0) { settingsScript.printf("%d,",ethernetBoards[ethernetType].eth_power); }
118+
if (ethernetBoards[ethernetType].eth_mdc >= 0) { settingsScript.printf("%d,",ethernetBoards[ethernetType].eth_mdc); }
119+
if (ethernetBoards[ethernetType].eth_mdio >= 0) { settingsScript.printf("%d,",ethernetBoards[ethernetType].eth_mdio); }
120+
switch (ethernetBoards[ethernetType].eth_clk_mode) {
114121
case ETH_CLOCK_GPIO0_IN:
115122
case ETH_CLOCK_GPIO0_OUT:
116-
settingsScript.print(F("0"));
123+
settingsScript.print(0);
117124
break;
118125
case ETH_CLOCK_GPIO16_OUT:
119-
settingsScript.print(F("16"));
126+
settingsScript.print(16);
120127
break;
121128
case ETH_CLOCK_GPIO17_OUT:
122-
settingsScript.print(F("17"));
129+
settingsScript.print(17);
123130
break;
124131
}
125132
}
@@ -128,21 +135,19 @@ void appendGPIOinfo(Print& settingsScript) {
128135

129136
// add info for read-only GPIO
130137
settingsScript.print(F("d.ro_gpio=["));
131-
bool firstPin = true;
138+
firstPin = true;
132139
for (unsigned i = 0; i < WLED_NUM_PINS; i++) {
133140
if (PinManager::isReadOnlyPin(i)) {
134141
// No comma before the first pin
135-
if (!firstPin) settingsScript.print(F(","));
142+
if (!firstPin) settingsScript.print(',');
136143
settingsScript.print(i);
137144
firstPin = false;
138145
}
139146
}
140147
settingsScript.print(F("];"));
141148

142149
// add info about max. # of pins
143-
settingsScript.print(F("d.max_gpio="));
144-
settingsScript.print(WLED_NUM_PINS);
145-
settingsScript.print(F(";"));
150+
settingsScript.printf_P(PSTR("d.max_gpio=%d;"),WLED_NUM_PINS);
146151
}
147152

148153
//get values for settings form in javascript
@@ -152,6 +157,7 @@ void getSettingsJS(byte subPage, Print& settingsScript)
152157
DEBUG_PRINTF_P(PSTR("settings resp %u\n"), (unsigned)subPage);
153158

154159
if (subPage <0 || subPage >10) return;
160+
char nS[32];
155161

156162
if (subPage == SUBPAGE_MENU)
157163
{
@@ -259,11 +265,9 @@ void getSettingsJS(byte subPage, Print& settingsScript)
259265

260266
if (subPage == SUBPAGE_LEDS)
261267
{
262-
char nS[32];
263-
264268
appendGPIOinfo(settingsScript);
265269

266-
settingsScript.print(F("d.ledTypes=")); settingsScript.print(BusManager::getLEDTypesJSONString().c_str()); settingsScript.print(";");
270+
settingsScript.printf_P(PSTR("d.ledTypes=%s;"), BusManager::getLEDTypesJSONString().c_str());
267271

268272
// set limits
269273
settingsScript.printf_P(PSTR("bLimits(%d,%d,%d,%d,%d,%d,%d,%d);"),
@@ -399,7 +403,6 @@ void getSettingsJS(byte subPage, Print& settingsScript)
399403

400404
if (subPage == SUBPAGE_SYNC)
401405
{
402-
[[maybe_unused]] char nS[32];
403406
printSetFormValue(settingsScript,PSTR("UP"),udpPort);
404407
printSetFormValue(settingsScript,PSTR("U2"),udpPort2);
405408
#ifndef WLED_DISABLE_ESPNOW
@@ -637,7 +640,7 @@ void getSettingsJS(byte subPage, Print& settingsScript)
637640
#if defined(ARDUINO_ARCH_ESP32)
638641
ESP.getChipModel(),
639642
#else
640-
F("esp8266"),
643+
"esp8266",
641644
#endif
642645
VERSION);
643646

@@ -648,8 +651,7 @@ void getSettingsJS(byte subPage, Print& settingsScript)
648651
{
649652
printSetFormValue(settingsScript,PSTR("SOMP"),strip.isMatrix);
650653
#ifndef WLED_DISABLE_2D
651-
settingsScript.printf_P(PSTR("maxPanels=%d;"),WLED_MAX_PANELS);
652-
settingsScript.print(F("resetPanels();"));
654+
settingsScript.printf_P(PSTR("maxPanels=%d;resetPanels();"),WLED_MAX_PANELS);
653655
if (strip.isMatrix) {
654656
if(strip.panels>0){
655657
printSetFormValue(settingsScript,PSTR("PW"),strip.panel[0].width); //Set generator Width and Height to first panel size for convenience
@@ -658,12 +660,9 @@ void getSettingsJS(byte subPage, Print& settingsScript)
658660
printSetFormValue(settingsScript,PSTR("MPC"),strip.panels);
659661
// panels
660662
for (unsigned i=0; i<strip.panels; i++) {
661-
char n[5];
662-
settingsScript.print(F("addPanel("));
663-
settingsScript.print(itoa(i,n,10));
664-
settingsScript.print(F(");"));
663+
settingsScript.printf_P(PSTR("addPanel(%d);"), i);
665664
char pO[8] = { '\0' };
666-
snprintf_P(pO, 7, PSTR("P%d"), i); // MAX_PANELS is 64 so pO will always only be 4 characters or less
665+
snprintf_P(pO, 7, PSTR("P%d"), i); // WLED_MAX_PANELS is 18 so pO will always only be 4 characters or less
667666
pO[7] = '\0';
668667
unsigned l = strlen(pO);
669668
// create P0B, P1B, ..., P63B, etc for other PxxX

0 commit comments

Comments
 (0)