diff --git a/wled00/NpbWrapper.h b/wled00/NpbWrapper.h index 0f0ce4e0..359036d1 100644 --- a/wled00/NpbWrapper.h +++ b/wled00/NpbWrapper.h @@ -6,13 +6,12 @@ //see https://github.com/Aircoookie/WLED/issues/2 for flicker free ESP32 support //PIN CONFIGURATION -#define LEDPIN 3 //strip pin. Any for ESP32, gpio2 is recommended for ESP8266 +#define LEDPIN 2 //strip pin. Any for ESP32, gpio2 or 3 is recommended for ESP8266 (gpio2/3 are labeled D4/RX on NodeMCU and Wemos) #define BTNPIN 0 //button pin. Needs to have pullup (gpio0 recommended) #define IR_PIN 4 //infrared pin. #define AUXPIN 15 //unused auxiliary output pin - //automatically uses the right driver method for each platform #ifdef ARDUINO_ARCH_ESP32 #ifdef WORKAROUND_ESP32_BITBANG diff --git a/wled00/html_classic.h b/wled00/html_classic.h index 0cdd8c41..875318b9 100644 --- a/wled00/html_classic.h +++ b/wled00/html_classic.h @@ -10,9 +10,9 @@ * 4. update length value */ -const uint16_t PAGE_index0_L = 10264; +const uint16_t PAGE_index_L = 10264; -const char PAGE_index0[] PROGMEM = { +const uint8_t PAGE_index[] PROGMEM = { 0x1f, 0x8b, 0x08, 0x08, 0x67, 0x5e, 0x61, 0x5c, 0x00, 0x03, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x28, 0x37, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x00, 0xcc, 0x5a, 0xe9, 0x72, 0xdb, 0x46, 0xb6, 0xfe, 0xaf, 0xa7, 0x80, 0xe9, 0x4a, 0x4c, 0x46, 0x04, 0x88, 0x9d, diff --git a/wled00/html_mobile.h b/wled00/html_mobile.h index 9cfe4302..51053bb1 100644 --- a/wled00/html_mobile.h +++ b/wled00/html_mobile.h @@ -19,7 +19,7 @@ Mobile UI is unsupported in this build. Go to /settings/ui and change UI mode to #else WLED_DISABLE_MOBILE_UI const uint16_t PAGE_indexM_L = 19259; //length of the binary payload -const char PAGE_indexM[] PROGMEM = { +const uint8_t PAGE_indexM[] PROGMEM = { 0x1f, 0x8b, 0x08, 0x08, 0xcf, 0xcd, 0x62, 0x5c, 0x00, 0x03, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x28, 0x39, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x00, 0xed, 0xbd, 0x69, 0x7b, 0xda, 0x48, 0xb7, 0x28, 0xfa, 0xfd, 0xfd, 0x15, 0x6e, 0xfa, 0x79, 0xbb, 0x21, 0xc2, diff --git a/wled00/html_other.h b/wled00/html_other.h index 11194601..4846a245 100644 --- a/wled00/html_other.h +++ b/wled00/html_other.h @@ -8,23 +8,20 @@ const char PAGE_usermod[] PROGMEM = R"=====( //server message -const char PAGE_msg0[] PROGMEM = R"=====( +const char PAGE_msg[] PROGMEM = R"=====( WLED Message -)====="; - -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} - -)====="; + +%CSS%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} +

%MSG%)====="; //new user welcome page #ifndef WLED_DISABLE_MOBILE_UI -const char PAGE_welcome0[] PROGMEM = R"=====( +const char PAGE_welcome[] 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);margin:0;background-attachment: fixed;color: var(--tCol);}svg {fill: var(--dCol);} +WLED Welcome! +%CSS%body{font-family:var(--cFn),sans-serif;text-align:center;background:linear-gradient(var(--bCol),black);margin:0;background-attachment: fixed;color: var(--tCol);}svg {fill: var(--dCol);} @@ -42,8 +39,7 @@ 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 = ""; +const char PAGE_welcome[] PROGMEM = ""; #endif @@ -52,7 +48,7 @@ const char PAGE_welcome1[] PROGMEM = ""; */ #ifdef USEFS const char PAGE_edit[] PROGMEM = R"=====(ESP
)====="; #else const char PAGE_edit[] PROGMEM = R"=====(SPIFFS disabled)====="; @@ -62,7 +58,7 @@ const char PAGE_edit[] PROGMEM = R"=====(SPIFFS disabled)====="; /* * favicon */ -const char favicon[] PROGMEM = { +const uint8_t favicon[] PROGMEM = { 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x10, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x86, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, diff --git a/wled00/html_settings.h b/wled00/html_settings.h index 80880b39..b87cfc86 100644 --- a/wled00/html_settings.h +++ b/wled00/html_settings.h @@ -3,16 +3,13 @@ */ //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:4em}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) );}td{padding:2px;})====="; +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:4em}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) );}td{padding:2px;})====="; //settings menu -const char PAGE_settings0[] PROGMEM = R"=====( -WLED Settings)====="; - -const char PAGE_settings1[] PROGMEM = R"=====(body{text-align:center;background:var(--cCol);height:100%;margin:0;background-attachment:fixed}html{--h:11.55vh}button{background:var(--bCol);color:var(--tCol);font-family:var(--cFn),Helvetica,sans-serif;border:.3ch solid var(--bCol);display:inline-block;filter:drop-shadow(-5px -5px 5px var(--sCol));font-size:8vmin;height:var(--h);width:95%;margin-top:2.4vh} - - +const char PAGE_settings[] PROGMEM = R"=====( +WLED Settings%CSS%body{text-align:center;background:var(--cCol);height:100%%;margin:0;background-attachment:fixed}html{--h:11.55vh}button{background:var(--bCol);color:var(--tCol);font-family:var(--cFn),Helvetica,sans-serif;border:.3ch solid var(--bCol);display:inline-block;filter:drop-shadow(-5px -5px 5px var(--sCol));font-size:8vmin;height:var(--h);width:95%%;margin-top:2.4vh} +
@@ -21,17 +18,14 @@ const char PAGE_settings1[] PROGMEM = R"=====(body{text-align:center;background:
- -)====="; +)====="; //wifi settings -const char PAGE_settings_wifi0[] PROGMEM = R"=====( +const char PAGE_settings_wifi[] PROGMEM = R"=====( -WiFi Settings"; + } else if (optionType < 120) //redirect back after optionType-60 seconds + { + messageBody += ""; + } else if (optionType < 180) //reload parent after optionType-120 seconds + { + messageBody += ""; + } else if (optionType == 253) + { + messageBody += "

"; //button to settings + } else if (optionType == 254) + { + messageBody += "

"; + } + return messageBody; + } + return String(); +} + + +void serveMessage(AsyncWebServerRequest* request, uint16_t code, String headl, String subl="", uint32_t optionT=255) { olen = 0; getCSSColors(); + messageHead = headl; + messageSub = subl; + optionType = optionT; - String messageBody = "

"; - messageBody += headl; - messageBody += "

"; - messageBody += subl; - switch(optionType) - { - case 255: break; //simple message - case 254: messageBody += "

"; break; //back button - case 253: messageBody += "

"; //button to settings - } - if (optionType < 60) //redirect to settings after optionType seconds - { - messageBody += ""; - } else if (optionType < 120) //redirect back after optionType-60 seconds - { - messageBody += ""; - } else if (optionType < 180) //reload parent after optionType-120 seconds - { - messageBody += ""; - } - messageBody += ""; - server->setContentLength(strlen_P(PAGE_msg0) + olen + strlen_P(PAGE_msg1) + messageBody.length()); - server->send(code, "text/html", ""); - server->sendContent_P(PAGE_msg0); - server->sendContent(obuf); - server->sendContent_P(PAGE_msg1); - server->sendContent(messageBody); + request->send_P(code, "text/html", PAGE_msg, msgProcessor); } -void serveSettings(byte subPage) +String settingsProcessor(const String& var) { + if (var == "CSS") return String(obuf); + if (var == "SCSS") return String(PAGE_settingsCss); + return String(); +} + + +void serveSettings(AsyncWebServerRequest* request) +{ + byte subPage = 0; + String url = request->url(); + if (url.indexOf("sett") >= 0) + { + if (url.indexOf("wifi") > 0) subPage = 1; + else if (url.indexOf("leds") > 0) subPage = 2; + else if (url.indexOf("ui") > 0) subPage = 3; + else if (url.indexOf("sync") > 0) subPage = 4; + else if (url.indexOf("time") > 0) subPage = 5; + else if (url.indexOf("sec") > 0) subPage = 6; + } else subPage = 255; //welcome page + if (realtimeActive && !enableRealtimeUI) //do not serve while receiving realtime { - serveRealtimeError(true); + serveRealtimeError(request, true); return; } + + if (subPage == 1 && wifiLock && otaLock) + { + serveMessage(request, 500, "Access Denied", txd, 254); return; + } #ifdef WLED_DISABLE_MOBILE_UI //disable welcome page if not enough storage - if (subPage == 255) {serveIndex(); return;} + if (subPage == 255) {serveIndex(request); return;} #endif - int pl0, pl1; - switch (subPage) //0: menu 1: wifi 2: leds 3: ui 4: sync 5: time 6: sec 255: welcomepage - { - case 1: pl0 = strlen_P(PAGE_settings_wifi0); pl1 = strlen_P(PAGE_settings_wifi1); break; - case 2: pl0 = strlen_P(PAGE_settings_leds0); pl1 = strlen_P(PAGE_settings_leds1); break; - case 3: pl0 = strlen_P(PAGE_settings_ui0); pl1 = strlen_P(PAGE_settings_ui1); break; - case 4: pl0 = strlen_P(PAGE_settings_sync0); pl1 = strlen_P(PAGE_settings_sync1); break; - case 5: pl0 = strlen_P(PAGE_settings_time0); pl1 = strlen_P(PAGE_settings_time1); break; - case 6: pl0 = strlen_P(PAGE_settings_sec0); pl1 = strlen_P(PAGE_settings_sec1); break; - case 255: pl0 = strlen_P(PAGE_welcome0); pl1 = strlen_P(PAGE_welcome1); break; - default: pl0 = strlen_P(PAGE_settings0); pl1 = strlen_P(PAGE_settings1); - } - - uint16_t sCssLength = (subPage >0 && subPage <7)?strlen_P(PAGE_settingsCss):0; - getSettingsJS(subPage); getCSSColors(); - server->setContentLength(pl0 + olen + sCssLength + pl1); - server->send(200, "text/html", ""); - switch (subPage) { - case 1: server->sendContent_P(PAGE_settings_wifi0); break; - case 2: server->sendContent_P(PAGE_settings_leds0); break; - case 3: server->sendContent_P(PAGE_settings_ui0 ); break; - case 4: server->sendContent_P(PAGE_settings_sync0); break; - case 5: server->sendContent_P(PAGE_settings_time0); break; - case 6: server->sendContent_P(PAGE_settings_sec0 ); break; - case 255: server->sendContent_P(PAGE_welcome0 ); break; - default: server->sendContent_P(PAGE_settings0 ); - } - server->sendContent(obuf); - - if (subPage >0 && subPage <7) server->sendContent_P(PAGE_settingsCss); - switch (subPage) - { - case 1: server->sendContent_P(PAGE_settings_wifi1); break; - case 2: server->sendContent_P(PAGE_settings_leds1); break; - case 3: server->sendContent_P(PAGE_settings_ui1 ); break; - case 4: server->sendContent_P(PAGE_settings_sync1); break; - case 5: server->sendContent_P(PAGE_settings_time1); break; - case 6: server->sendContent_P(PAGE_settings_sec1 ); break; - case 255: server->sendContent_P(PAGE_welcome1 ); break; - default: server->sendContent_P(PAGE_settings1 ); + case 1: request->send_P(200, "text/html", PAGE_settings_wifi, settingsProcessor); break; + case 2: request->send_P(200, "text/html", PAGE_settings_leds, settingsProcessor); break; + case 3: request->send_P(200, "text/html", PAGE_settings_ui , settingsProcessor); break; + case 4: request->send_P(200, "text/html", PAGE_settings_sync, settingsProcessor); break; + case 5: request->send_P(200, "text/html", PAGE_settings_time, settingsProcessor); break; + case 6: request->send_P(200, "text/html", PAGE_settings_sec , settingsProcessor); break; + case 255: request->send_P(200, "text/html", PAGE_welcome , settingsProcessor); break; + default: request->send_P(200, "text/html", PAGE_settings , settingsProcessor); } }