162 lines
4.5 KiB
C++
162 lines
4.5 KiB
C++
|
#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 = "<tr><td>" + String(buff_timestamp);
|
||
|
temp = temp + "</td><td>" + String(DTCStorage[i].Number) + "</td><td>";
|
||
|
|
||
|
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 + "</td></tr>";
|
||
|
}
|
||
|
}
|
||
|
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");
|
||
|
}
|