diff --git a/wled00/htmls00.h b/wled00/htmls00.h
index 60d99520..32d15386 100644
--- a/wled00/htmls00.h
+++ b/wled00/htmls00.h
@@ -64,10 +64,11 @@ var displayElement=pr.getElementsByClassName("rangeValues")[0];displayElement.in
)=====";
#else
const char PAGE_indexM[] PROGMEM = R"=====(
-The Mobile UI is not supported due to limited flash storage. Please go to IP/settings/ui and change the UI mode to "Classic".
+Mobile UI is unsupported (limited storage). Go to /settings/ui and change UI mode to "Classic".
)=====";
#endif
+
/*
* Classic UI Index html
*/
diff --git a/wled00/htmls01.h b/wled00/htmls01.h
index 52d5dbb6..43f11927 100644
--- a/wled00/htmls01.h
+++ b/wled00/htmls01.h
@@ -1,10 +1,14 @@
/*
* Settings html
*/
+
+//common CSS of settings pages
const char PAGE_settingsCss[] PROGMEM = R"=====(
body{font-family:var(--cFn),sans-serif;text-align:center;background:var(--cCol);color:var(--tCol);line-height:200%;margin:0;background-attachment:fixed}hr{border-color:var(--dCol);filter:drop-shadow(-5px -5px 5px var(--sCol))}button{background:var(--bCol);color:var(--tCol);font-family:var(--cFn),sans-serif;border:.3ch solid var(--bCol);display:inline-block;filter:drop-shadow(-5px -5px 5px var(--sCol));font-size:20px;margin:8px;margin-top:12px}.helpB{text-align:left;position:absolute;width:60px}input{background:var(--bCol);color:var(--tCol);font-family:var(--cFn),sans-serif;border:.5ch solid var(--bCol);filter:drop-shadow(-5px -5px 5px var(--sCol))}input[type=number]{width:3em}select{background:var(--bCol);color:var(--tCol);font-family:var(--cFn),sans-serif;border:0.5ch solid var(--bCol);filter:drop-shadow( -5px -5px 5px var(--sCol) );}
)=====";
+
+//settings menu
const char PAGE_settings0[] PROGMEM = R"=====(
WLED Settings
@@ -26,11 +30,14 @@ body{text-align:center;background:var(--cCol);height:100%;margin:0;background-at
)=====";
+
+//wifi settings
const char PAGE_settings_wifi0[] PROGMEM = R"=====(
WiFi Settings
)=====";
+
const char PAGE_msg1[] PROGMEM = R"=====(
button{background:var(--bCol);color:var(--tCol);font-family:var(--cFn),sans-serif;border:.3ch solid var(--bCol);display:inline-block;filter:drop-shadow(-5px -5px 5px var(--sCol));font-size:20px;margin:8px;margin-top:12px}body{font-family:var(--cFn),sans-serif;text-align:center;background:var(--cCol);color:var(--tCol);line-height:200%;margin:0;background-attachment:fixed}
)=====";
+
+//new user welcome page
+#ifndef WLED_FLASH_512K_MODE
const char PAGE_welcome0[] PROGMEM = R"=====(
WLED Welcome!
)=====";
+
const char PAGE_welcome1[] PROGMEM = R"=====(
body{font-family:var(--cFn),sans-serif;text-align:center;background:linear-gradient(var(--bCol),black);height:100%;margin:0;background-repeat:no-repeat;background-attachment: fixed;color: var(--tCol);}svg {fill: var(--dCol);}
@@ -41,6 +50,11 @@ Connect the module to your local WiFi here!
Just trying this out in AP mode? Here are the controls.
)=====";
+#else
+const char PAGE_welcome0[] PROGMEM = "";
+const char PAGE_welcome1[] PROGMEM = "";
+#endif
+
/*
* SPIFFS editor html
@@ -54,6 +68,8 @@ eval(function(p,a,c,k,e,r){e=function(c){return(c= 0 && i <= 255) apWaitTimeSecs = i;
- }
- if (server.hasArg("AS")) strcpy(apSSID,server.arg("AS").c_str());
+ strcpy(clientSSID,server.arg("CS").c_str());
+ if (server.arg("CP").charAt(0) != '*') strcpy(clientPass, server.arg("CP").c_str());
+
+ strcpy(cmDNS, server.arg("CM").c_str());
+
+ int t = server.arg("AT").toInt(); if (t > 9 && t <= 255) apWaitTimeSecs = t;
+ strcpy(apSSID, server.arg("AS").c_str());
apHide = server.hasArg("AH");
- if (server.hasArg("AP"))
- {
- if (server.arg("AP").charAt(0) != '*') strcpy(apPass,server.arg("AP").c_str());
- }
- if (server.hasArg("AC"))
- {
- int chan = server.arg("AC").toInt();
- if (chan > 0 && chan < 14) apChannel = chan;
- }
- char k[3]; k[2] = 0; int j = 0;
+ if (server.arg("AP").charAt(0) != '*') strcpy(apPass, server.arg("AP").c_str());
+ t = server.arg("AC").toInt(); if (t > 0 && t < 14) apChannel = t;
+
+ char k[3]; k[2] = 0;
for (int i = 0; i<4; i++)
{
- k[1] = i+48;
+ k[1] = i+48;//ascii 0,1,2,3
+
k[0] = 'I'; //static IP
- if (server.hasArg(k)) j = server.arg(k).toInt();
- if (j >= 0 && j <= 255) staticIP[i] = j;
+ staticIP[i] = server.arg(k).toInt();
+
k[0] = 'G'; //gateway
- if (server.hasArg(k)) j = server.arg(k).toInt();
- if (j >= 0 && j <= 255) staticGateway[i] = j;
+ staticGateway[i] = server.arg(k).toInt();
+
k[0] = 'S'; //subnet
- if (server.hasArg(k)) j = server.arg(k).toInt();
- if (j >= 0 && j <= 255) staticSubnet[i] = j;
+ staticSubnet[i] = server.arg(k).toInt();
}
}
//LED SETTINGS
if (subPage == 2)
{
- if (server.hasArg("LC"))
- {
- int i = server.arg("LC").toInt();
- if (i > 0 && i <= 1200) ledCount = i;
- //RMT eats up too much RAM
- #ifdef ARDUINO_ARCH_ESP32
- if (ledCount > 600) ledCount = 600;
- #endif
- }
+ int t = server.arg("LC").toInt();
+ if (t > 0 && t <= 1200) ledCount = t;
+ //RMT eats up too much RAM
+ #ifdef ARDUINO_ARCH_ESP32
+ if (ledCount > 600) ledCount = 600;
+ #endif
useRGBW = server.hasArg("EW");
autoRGBtoRGBW = server.hasArg("AW");
if (server.hasArg("IS")) //ignore settings and save current brightness, colors and fx as default
@@ -81,141 +66,75 @@ void handleSettingsSet(byte subPage)
colS[0] = col[0];
colS[1] = col[1];
colS[2] = col[2];
- if (useRGBW) whiteS = white;
+ colSecS[0] = colSec[0];
+ colSecS[1] = colSec[1];
+ colSecS[2] = colSec[2];
+ whiteS = white;
+ whiteSecS = whiteSec;
briS = bri;
effectDefault = effectCurrent;
effectSpeedDefault = effectSpeed;
effectIntensityDefault = effectIntensity;
effectPaletteDefault = effectPalette;
} else {
- if (server.hasArg("CR"))
- {
- int i = server.arg("CR").toInt();
- if (i >= 0 && i <= 255) colS[0] = i;
- }
- if (server.hasArg("CG"))
- {
- int i = server.arg("CG").toInt();
- if (i >= 0 && i <= 255) colS[1] = i;
- }
- if (server.hasArg("CB"))
- {
- int i = server.arg("CB").toInt();
- if (i >= 0 && i <= 255) colS[2] = i;
- }
- if (server.hasArg("SR"))
- {
- int i = server.arg("SR").toInt();
- if (i >= 0 && i <= 255) colSecS[0] = i;
- }
- if (server.hasArg("SG"))
- {
- int i = server.arg("SG").toInt();
- if (i >= 0 && i <= 255) colSecS[1] = i;
- }
- if (server.hasArg("SB"))
- {
- int i = server.arg("SB").toInt();
- if (i >= 0 && i <= 255) colSecS[2] = i;
- }
- if (server.hasArg("SW"))
- {
- int i = server.arg("SW").toInt();
- if (i >= 0 && i <= 255) whiteSecS = i;
- }
- if (server.hasArg("CW"))
- {
- int i = server.arg("CW").toInt();
- if (i >= 0 && i <= 255) whiteS = i;
- }
- if (server.hasArg("CA"))
- {
- int i = server.arg("CA").toInt();
- if (i >= 0 && i <= 255) briS = i;
- }
- if (server.hasArg("FX"))
- {
- int i = server.arg("FX").toInt();
- if (i >= 0 && i <= 255) effectDefault = i;
- }
- if (server.hasArg("SX"))
- {
- int i = server.arg("SX").toInt();
- if (i >= 0 && i <= 255) effectSpeedDefault = i;
- }
- if (server.hasArg("IX"))
- {
- int i = server.arg("IX").toInt();
- if (i >= 0 && i <= 255) effectIntensityDefault = i;
- }
- if (server.hasArg("FP"))
- {
- int i = server.arg("FP").toInt();
- if (i >= 0 && i <= 255) effectPaletteDefault = i;
- }
+ colS[0] = server.arg("CR").toInt();
+ colS[1] = server.arg("CG").toInt();
+ colS[2] = server.arg("CB").toInt();
+ colSecS[0] = server.arg("SR").toInt();
+ colSecS[1] = server.arg("SG").toInt();
+ colSecS[2] = server.arg("SB").toInt();
+ whiteS = server.arg("CW").toInt();
+ whiteSecS = server.arg("SW").toInt();
+ briS = server.arg("CA").toInt();
+ effectDefault = server.arg("FX").toInt();
+ effectSpeedDefault = server.arg("SX").toInt();
+ effectIntensityDefault = server.arg("IX").toInt();
+ effectPaletteDefault = server.arg("FP").toInt();
}
saveCurrPresetCycConf = server.hasArg("PC");
turnOnAtBoot = server.hasArg("BO");
- if (server.hasArg("BP"))
- {
- int i = server.arg("BP").toInt();
- if (i >= 0 && i <= 25) bootPreset = i;
- }
+ t = server.arg("BP").toInt();
+ if (t <= 25) bootPreset = t;
useGammaCorrectionBri = server.hasArg("GB");
useGammaCorrectionRGB = server.hasArg("GC");
+
fadeTransition = server.hasArg("TF");
- if (server.hasArg("TD"))
- {
- int i = server.arg("TD").toInt();
- if (i > 0){
- transitionDelay = i;
- }
- }
+ t = server.arg("TD").toInt();
+ if (t > 0) transitionDelay = t;
strip.paletteFade = server.hasArg("PF");
enableSecTransition = server.hasArg("T2");
- if (server.hasArg("TB"))
- {
- nightlightTargetBri = server.arg("TB").toInt();
- }
- if (server.hasArg("TL"))
- {
- int i = server.arg("TL").toInt();
- if (i > 0) nightlightDelayMins = i;
- }
+
+ nightlightTargetBri = server.arg("TB").toInt();
+ t = server.arg("TL").toInt();
+ if (t > 0) nightlightDelayMins = t;
nightlightFade = server.hasArg("TW");
- reverseMode = server.hasArg("RV");
- if (server.hasArg("PB"))
- {
- int i = server.arg("PB").toInt();
- if (i >= 0){
- strip.paletteBlend = i;
- }
- }
+
+ t = server.arg("PB").toInt();
+ if (t >= 0 && t < 4) strip.paletteBlend = t;
initLedsLast = server.hasArg("EI");
+ reverseMode = server.hasArg("RV");
strip.setReverseMode(reverseMode);
skipFirstLed = server.hasArg("SL");
- if (server.hasArg("BF"))
- {
- int i = server.arg("BF").toInt();
- if (i > 0) briMultiplier = i;
- }
+ t = server.arg("BF").toInt();
+ if (t > 0) briMultiplier = t;
}
//UI
if (subPage == 3)
{
- if (server.hasArg("UI")) uiConfiguration = server.arg("UI").toInt();
- if (server.hasArg("DS")) strcpy(serverDescription,server.arg("DS").c_str());
+ int t = server.arg("UI").toInt();
+ if (t >= 0 && t < 3) uiConfiguration = t;
+ strcpy(serverDescription, server.arg("DS").c_str());
useHSBDefault = server.hasArg("MD");
useHSB = useHSBDefault;
- if (server.hasArg("TH")) currentTheme = server.arg("TH").toInt();
+ currentTheme = server.arg("TH").toInt();
char k[3]; k[0]='C'; k[2]=0;
for(int i=0;i<6;i++)
{
k[1] = i+48;
- if (server.hasArg(k)) strcpy(cssCol[i],server.arg(k).c_str());
+ strcpy(cssCol[i],server.arg(k).c_str());
}
- if (server.hasArg("CF")) strcpy(cssFont,server.arg("CF").c_str());
+ strcpy(cssFont,server.arg("CF").c_str());
buildCssColorString();
}
@@ -223,10 +142,8 @@ void handleSettingsSet(byte subPage)
if (subPage == 4)
{
buttonEnabled = server.hasArg("BT");
- if (server.hasArg("UP"))
- {
- udpPort = server.arg("UP").toInt();
- }
+ int t = server.arg("UP").toInt();
+ if (t > 0) udpPort = t;
receiveNotificationBrightness = server.hasArg("RB");
receiveNotificationColor = server.hasArg("RC");
receiveNotificationEffects = server.hasArg("RX");
@@ -235,45 +152,36 @@ void handleSettingsSet(byte subPage)
notifyDirect = notifyDirectDefault;
notifyButton = server.hasArg("SB");
notifyTwice = server.hasArg("S2");
+
receiveDirect = server.hasArg("RD");
- if (server.hasArg("EU"))
- {
- int i = server.arg("EU").toInt();
- if (i > 0 && i <= 63999) realtimeTimeoutMs = i;
- }
- if (server.hasArg("ET"))
- {
- int i = server.arg("ET").toInt();
- if (i > 99 && i <= 65000) realtimeTimeoutMs = i;
- }
+ t = server.arg("EU").toInt();
+ if (t > 0 && t <= 63999) e131Universe = t;
+ t = server.arg("ET").toInt();
+ if (t > 99 && t <= 65000) realtimeTimeoutMs = t;
arlsForceMaxBri = server.hasArg("FB");
arlsDisableGammaCorrection = server.hasArg("RG");
- if (server.hasArg("WO"))
- {
- int i = server.arg("WO").toInt();
- if (i >= -255 && i <= 255) arlsOffset = i;
- }
+ t = server.arg("WO").toInt();
+ if (t >= -255 && t <= 255) arlsOffset = t;
enableRealtimeUI = server.hasArg("RU");
+
alexaEnabled = server.hasArg("AL");
- if (server.hasArg("AI")) strcpy(alexaInvocationName,server.arg("AI").c_str());
+ strcpy(alexaInvocationName, server.arg("AI").c_str());
notifyAlexa = server.hasArg("SA");
+
if (server.hasArg("BK") && !server.arg("BK").equals("Hidden")) {strcpy(blynkApiKey,server.arg("BK").c_str()); initBlynk(blynkApiKey);}
+
notifyHue = server.hasArg("SH");
for (int i=0;i<4;i++){
String a = "H"+String(i);
- if (server.hasArg(a))
- hueIP[i] = server.arg(a).toInt();
- }
- if (server.hasArg("HL"))
- {
- int i = server.arg("HL").toInt();
- if (i > 0) huePollLightId = i;
- }
- if (server.hasArg("HI"))
- {
- int i = server.arg("HI").toInt();
- if (i > 50) huePollIntervalMs = i;
+ hueIP[i] = server.arg(a).toInt();
}
+
+ t = server.arg("HL").toInt();
+ if (t > 0) huePollLightId = t;
+
+ t = server.arg("HI").toInt();
+ if (t > 50) huePollIntervalMs = t;
+
hueApplyOnOff = server.hasArg("HO");
hueApplyBri = server.hasArg("HB");
hueApplyColor = server.hasArg("HC");
@@ -293,22 +201,22 @@ void handleSettingsSet(byte subPage)
{
ntpEnabled = server.hasArg("NT");
useAMPM = !server.hasArg("CF");
- if (server.hasArg("TZ")) currentTimezone = server.arg("TZ").toInt();
- if (server.hasArg("UO")) utcOffsetSecs = server.arg("UO").toInt();
+ currentTimezone = server.arg("TZ").toInt();
+ utcOffsetSecs = server.arg("UO").toInt();
if (ntpEnabled && WiFi.status() == WL_CONNECTED && !ntpConnected) ntpConnected = ntpUdp.begin(ntpLocalPort); //start if not already connected
if (server.hasArg("OL")){
overlayDefault = server.arg("OL").toInt();
overlayCurrent = overlayDefault;
- ;
}
- if (server.hasArg("O1")) overlayMin = server.arg("O1").toInt();
- if (server.hasArg("O2")) overlayMax = server.arg("O2").toInt();
- if (server.hasArg("OM")) analogClock12pixel = server.arg("OM").toInt();
+
+ overlayMin = server.arg("O1").toInt();
+ overlayMax = server.arg("O2").toInt();
+ analogClock12pixel = server.arg("OM").toInt();
analogClock5MinuteMarks = server.hasArg("O5");
analogClockSecondsTrail = server.hasArg("OS");
- if (server.hasArg("CX")) strcpy(cronixieDisplay,server.arg("CX").c_str());
+ strcpy(cronixieDisplay,server.arg("CX").c_str());
bool cbOld = cronixieBacklight;
cronixieBacklight = server.hasArg("CB");
if (cbOld != cronixieBacklight && overlayCurrent == 4)
@@ -316,25 +224,25 @@ void handleSettingsSet(byte subPage)
strip.setCronixieBacklight(cronixieBacklight); overlayRefreshedTime = 0;
}
countdownMode = server.hasArg("CE");
- if (server.hasArg("CY")) countdownYear = server.arg("CY").toInt();
- if (server.hasArg("CI")) countdownMonth = server.arg("CI").toInt();
- if (server.hasArg("CD")) countdownDay = server.arg("CD").toInt();
- if (server.hasArg("CH")) countdownHour = server.arg("CH").toInt();
- if (server.hasArg("CM")) countdownMin = server.arg("CM").toInt();
- if (server.hasArg("CS")) countdownSec = server.arg("CS").toInt();
+ countdownYear = server.arg("CY").toInt();
+ countdownMonth = server.arg("CI").toInt();
+ countdownDay = server.arg("CD").toInt();
+ countdownHour = server.arg("CH").toInt();
+ countdownMin = server.arg("CM").toInt();
+ countdownSec = server.arg("CS").toInt();
for (int i=1;i<17;i++)
{
String a = "M"+String(i);
if (server.hasArg(a)) saveMacro(i,server.arg(a),false);
}
- if (server.hasArg("MB")) macroBoot = server.arg("MB").toInt();
- if (server.hasArg("A0")) macroAlexaOn = server.arg("A0").toInt();
- if (server.hasArg("A1")) macroAlexaOff = server.arg("A1").toInt();
- if (server.hasArg("MP")) macroButton = server.arg("MP").toInt();
- if (server.hasArg("ML")) macroLongPress = server.arg("ML").toInt();
- if (server.hasArg("MC")) macroCountdown = server.arg("MC").toInt();
- if (server.hasArg("MN")) macroNl = server.arg("MN").toInt();
+ macroBoot = server.arg("MB").toInt();
+ macroAlexaOn = server.arg("A0").toInt();
+ macroAlexaOff = server.arg("A1").toInt();
+ macroButton = server.arg("MP").toInt();
+ macroLongPress = server.arg("ML").toInt();
+ macroCountdown = server.arg("MC").toInt();
+ macroNl = server.arg("MN").toInt();
}
//SECURITY
@@ -375,9 +283,8 @@ void handleSettingsSet(byte subPage)
bool handleSet(String req)
{
bool effectUpdated = false;
- if (!(req.indexOf("win") >= 0)) {
- return false;
- }
+ if (!(req.indexOf("win") >= 0)) return false;
+
int pos = 0;
DEBUG_PRINT("API req: ");
DEBUG_PRINTLN(req);
diff --git a/wled00/wled05_init.ino b/wled00/wled05_init.ino
index a717f751..00472f9a 100644
--- a/wled00/wled05_init.ino
+++ b/wled00/wled05_init.ino
@@ -118,7 +118,7 @@ void wledInit()
server.on("/settings/wifi", HTTP_POST, [](){
if (!(wifiLock && otaLock)) handleSettingsSet(1);
- serveMessage(200,"WiFi settings saved.","Rebooting now... (takes ~20 seconds, wait for auto-redirect)",139);
+ serveMessage(200,"WiFi settings saved.","Rebooting now...",255);
reset();
});
@@ -488,6 +488,10 @@ void serveSettings(byte subPage)
//0: menu 1: wifi 2: leds 3: ui 4: sync 5: time 6: sec 255: welcomepage
if (!realtimeActive || enableRealtimeUI) //do not serve while receiving realtime
{
+ #ifdef WLED_FLASH_512K_MODE //disable welcome page if not enough storage
+ if (subPage == 255) {serveIndex(); return;}
+ #endif
+
int pl0, pl1;
switch (subPage)
{
diff --git a/wled00/wled11_ol.ino b/wled00/wled11_ol.ino
index 8695d51a..969a3e1a 100644
--- a/wled00/wled11_ol.ino
+++ b/wled00/wled11_ol.ino
@@ -16,6 +16,7 @@ void initCronixie()
}
}
+
void _nixieDisplay(int num[], uint16_t dur[], uint16_t pausedur[], byte cnt)
{
strip.setRange(overlayMin, overlayMax, 0);
@@ -116,6 +117,7 @@ void _nixieNumber(int number, int dur)
}
}
+
void handleOverlays()
{
if (millis() - overlayRefreshedTime > overlayRefreshMs)
@@ -181,6 +183,10 @@ void _overlayAnalogClock()
void _overlayNixieClock()
{
+ #ifdef WLED_FLASH_512K_MODE
+ if (countdownMode) checkCountdown();
+ #else
+
if (countdownMode)
{
_overlayNixieCountdown(); return;
@@ -265,6 +271,7 @@ void _overlayNixieClock()
{
_nixieDisplay(overlayArr, overlayDur, overlayPauseDur, 6);
}
+ #endif
}
void _overlayAnalogCountdown()
@@ -312,6 +319,7 @@ void _overlayAnalogCountdown()
overlayRefreshMs = 998;
}
+
void _overlayNixieCountdown()
{
if (now() >= countdownTime)
diff --git a/wled00/wled13_cronixie.ino b/wled00/wled13_cronixie.ino
index ae31072a..845aaf69 100644
--- a/wled00/wled13_cronixie.ino
+++ b/wled00/wled13_cronixie.ino
@@ -19,6 +19,7 @@ byte getSameCodeLength(char code, int index, char const cronixieDisplay[])
void setCronixie()
{
+ #ifndef WLED_FLASH_512K_MODE
/*
* digit purpose index
* 0-9 | 0-9 (incl. random)
@@ -139,11 +140,14 @@ void setCronixie()
DEBUG_PRINTLN((int)dP[5]);
_overlayCronixie(); //refresh
+ #endif
}
void _overlayCronixie()
{
if (countdownMode) checkCountdown();
+ #ifndef WLED_FLASH_512K_MODE
+
byte h = hour(local);
byte h0 = h;
byte m = minute(local);
@@ -208,4 +212,6 @@ void _overlayCronixie()
}
strip.setCronixieDigits(_digitOut);
//strip.trigger(); //this has a drawback, no effects slower than RefreshMs. advantage: Quick update, not dependant on effect time
+ #endif
}
+