#include "webui.h" AsyncWebServer webServer(80); const char *PARAM_MESSAGE = "message"; String processor(const String &var); void WebserverPOST_Callback(AsyncWebServerRequest *request); void WebserverNotFound_Callback(AsyncWebServerRequest *request); void Webserver_Callback(AsyncWebServerRequest *request); void initWebUI() { if (!LittleFS.begin()) { Serial.println("An Error has occurred while mounting LittleFS"); return; } webServer.serveStatic("/static/", LittleFS, "/static/").setCacheControl("max-age=360000"); webServer.on("/", HTTP_GET, [](AsyncWebServerRequest *request) { request->redirect("/index.htm"); }); webServer.onNotFound(WebserverNotFound_Callback); webServer.on("/index.htm", HTTP_GET, Webserver_Callback); webServer.on("/post.htm", HTTP_POST, WebserverPOST_Callback); webServer.begin(); } String processor(const String &var) { if (var == "SHOW_DTC_TABLE") return globals.systemStatus == sysStat_Error ? "" : "hidden"; if (var == "BAT_REMAIN_CAPACITY") return String(globals.battery_level); if (var == "DEVICE_NAME") return String(globals.DeviceName); if (var == "BAT_VOLTAGE") return String(globals.loadvoltage); if (var == "DTC_TABLE") { String temp; char buff_timestamp[16]; // Format: DD-hh:mm:ss:xxx for (uint32_t i = 0; i < MAX_DTC_STORAGE; i++) { if (DTCStorage[i].Number > 0) { sprintf(buff_timestamp, "%02d-%02d:%02d:%02d:%03d", DTCStorage[i].timestamp / 86400000, // Days DTCStorage[i].timestamp / 360000 % 24, // Hours DTCStorage[i].timestamp / 60000 % 60, // Minutes DTCStorage[i].timestamp / 1000 % 60, // Seconds DTCStorage[i].timestamp % 1000); // milliseconds temp = "" + String(buff_timestamp); temp = temp + "" + String(DTCStorage[i].Number) + ""; if (DTCStorage[i].active == DTC_ACTIVE) temp = temp + "active"; else if (DTCStorage[i].active == DTC_PREVIOUS) temp = temp + "previous"; else temp = temp + "none"; temp = temp + ""; } } return temp; } if (var == "PLACEHOLDER") return "placeholder"; if (var == "POINTS_FAC_1") { char buff[12]; snprintf(buff, 12, "%3d:%02d:%02d", PersistenceData.faction_1_timer / 3600, (PersistenceData.faction_1_timer / 60) % 60, PersistenceData.faction_1_timer % 60); return String(buff); } if (var == "POINTS_FAC_2") { char buff[12]; snprintf(buff, 12, "%3d:%02d:%02d", PersistenceData.faction_2_timer / 3600, (PersistenceData.faction_2_timer / 60) % 60, PersistenceData.faction_2_timer % 60); return String(buff); } if (var == "POINTS_FAC_3") { char buff[12]; snprintf(buff, 12, "%3d:%02d:%02d", PersistenceData.faction_3_timer / 3600, (PersistenceData.faction_3_timer / 60) % 60, PersistenceData.faction_3_timer % 60); return String(buff); } if (var == "STATUS_FAC_1") return PersistenceData.activeFaction == FACTION_1 ? "ACTIVE" : "INACTIVE"; if (var == "STATUS_FAC_2") return PersistenceData.activeFaction == FACTION_2 ? "ACTIVE" : "INACTIVE"; if (var == "STATUS_FAC_3") return PersistenceData.activeFaction == FACTION_3 ? "ACTIVE" : "INACTIVE"; if (var == "NAME_FAC_1") return FACTION_1_NAME; if (var == "NAME_FAC_2") return FACTION_2_NAME; if (var == "NAME_FAC_3") return FACTION_3_NAME; if (var == "TITLE") return DEVICE_NAME; if (var == "BATTERY_LEVEL") { return String(globals.battery_level); } if (var == "BATTERY_VOLTAGE") { return String(globals.loadvoltage); } return String(); } void Webserver_Callback(AsyncWebServerRequest *request) { request->send(LittleFS, "/index.htm", "text/html", false, processor); } void WebserverPOST_Callback(AsyncWebServerRequest *request) { request->send(LittleFS, "/post.htm", "text/html", false, processor); Serial.print("POST:\n"); int paramsNr = request->params(); for (int i = 0; i < paramsNr; i++) { AsyncWebParameter *p = request->getParam(i); Serial.printf("%s : %s\n", p->name().c_str(), p->value().c_str()); if (p->name() == "resetcount") { PersistenceData.faction_1_timer = 0; PersistenceData.faction_2_timer = 0; PersistenceData.faction_3_timer = 0; globals.requestEEAction = EE_PDS_SAVE; } } } void WebserverNotFound_Callback(AsyncWebServerRequest *request) { request->send(404, "text/html", "Not found"); }