#include "sh_core_esp8266.h"
#include <Updater.h>
static String render_wifi_setup_page() {
String html = wifi_setup_page;
if (savedSSID.length() > 0) {
html.replace("{{LAST_SSID}}", savedSSID);
} else {
html.replace("{{LAST_SSID}}", "(не задано)");
}
return html;
}
// -------------------- handlers --------------------
static void handleRoot() {
auto mode = WiFi.getMode();
if (deviceMode == DEVICE_MODE_SETUP || mode == WIFI_AP || mode == WIFI_AP_STA) {
server.send(200, "text/html; charset=utf-8", render_wifi_setup_page());
return;
}
String msg = "ESP8266 device\nID: " + getUniqueID() + "\nVersion: ";
msg += FW_VERSION;
server.send(200, "text/plain; charset=utf-8", msg);
}
static void handleSaveWiFi() {
String ssid = server.arg("ssid");
String pass = server.arg("pass");
savedSSID = ssid;
savedPASS = pass;
saveWiFiConfig(savedSSID, savedPASS);
server.send(200, "text/plain; charset=utf-8", "Saved! Rebooting...");
delay(800);
ESP.restart();
}
static void handleUpdateGet() {
server.send(200, "text/html; charset=utf-8", update_page);
}
static void handleUpdateUpload() {
HTTPUpload& upload = server.upload();
if (upload.status == UPLOAD_FILE_START) {
Serial.printf("OTA start: %s\n", upload.filename.c_str());
size_t sketch_space = (ESP.getFreeSketchSpace() - 0x2000) & 0xFFFFF000;
if (!Update.begin(sketch_space)) {
Update.printError(Serial);
}
} else if (upload.status == UPLOAD_FILE_WRITE) {
if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {
Update.printError(Serial);
}
} else if (upload.status == UPLOAD_FILE_END) {
if (!Update.end(true)) {
Update.printError(Serial);
}
}
}
static void handleUpdatePost() {
if (Update.hasError()) server.send(200, "text/plain; charset=utf-8", "Update Failed!");
else server.send(200, "text/plain; charset=utf-8", "Update OK! Rebooting...");
delay(800);
ESP.restart();
}
static void handleWIFICredsStayConfirmed() {
server.send(200, "text/plain", "OK, rebooting...");
delay(200);
ESP.restart();
}
static void handleSetupGetUi() {
if (deviceMode != DEVICE_MODE_SETUP) {
server.send(403, "text/plain; charset=utf-8", "Setup mode is not active");
return;
}
server.send(200, "text/html; charset=utf-8", render_wifi_setup_page());
}
static void handleSetupPostUi() {
if (deviceMode != DEVICE_MODE_SETUP) {
server.send(403, "text/plain; charset=utf-8", "Setup mode is not active");
return;
}
String ssid = server.arg("ssid");
String pass = server.arg("pass");
ssid.trim();
pass.trim();
if (ssid.length() == 0) {
server.send(400, "text/plain; charset=utf-8", "SSID is required");
return;
}
savedSSID = ssid;
savedPASS = pass;
saveWiFiConfig(savedSSID, savedPASS);
server.send(200, "text/plain; charset=utf-8", "Wi-Fi configured. Rebooting...");
delay(600);
ESP.restart();
}
// -------------------- routes register --------------------
void registerWebUiRoutes() {
server.on("/", HTTP_GET, handleRoot);
server.on("/save_wifi", HTTP_POST, handleSaveWiFi);
server.on("/update", HTTP_GET, handleUpdateGet);
server.on("/update", HTTP_POST, handleUpdatePost, handleUpdateUpload);
server.on("/wifi_confirm", HTTP_POST, handleWIFICredsStayConfirmed);
server.on("/setup", HTTP_GET, handleSetupGetUi);
server.on("/setup", HTTP_POST, handleSetupPostUi);
}