218 lines
7.3 KiB
C++
Raw Normal View History

2022-01-10 00:55:04 +01:00
#include "webui.h"
2022-01-07 21:02:27 +01:00
AsyncWebServer webServer(80);
2022-01-09 20:51:16 +01:00
const char *PARAM_MESSAGE = "message";
2022-01-07 21:02:27 +01:00
String processor(const String &var);
2022-02-15 20:58:32 +01:00
void WebserverPOST_Callback(AsyncWebServerRequest *request);
void WebserverNotFound_Callback(AsyncWebServerRequest *request);
2022-02-15 20:58:32 +01:00
void Webserver_Callback(AsyncWebServerRequest *request);
void initWebUI()
2022-01-08 03:14:26 +01:00
{
if (!LittleFS.begin())
2022-01-08 03:14:26 +01:00
{
Serial.println("An Error has occurred while mounting LittleFS");
return;
2022-01-09 20:51:16 +01:00
}
2022-03-08 22:31:37 +01:00
webServer.serveStatic("/static/", LittleFS, "/static/").setCacheControl("max-age=360000");;
2022-02-27 22:23:58 +01:00
webServer.on("/", HTTP_GET, [](AsyncWebServerRequest *request)
{ request->redirect("/index.htm"); });
webServer.onNotFound(WebserverNotFound_Callback);
2022-02-15 20:58:32 +01:00
webServer.on("/index.htm", HTTP_GET, Webserver_Callback);
2022-02-27 22:23:58 +01:00
webServer.on("/post.htm", HTTP_POST, WebserverPOST_Callback);
2022-01-09 20:51:16 +01:00
webServer.begin();
2022-01-07 21:02:27 +01:00
}
String processor(const String &var)
2022-01-08 03:14:26 +01:00
{
2022-02-15 20:58:32 +01:00
if (var == "TANK_REMAIN_CAPACITY")
return String((PersistenceData.tankRemain_µl / 10) / LubeConfig.tankCapacity_ml);
if (var == "LUBE_DISTANCE_NORMAL")
return String(LubeConfig.DistancePerLube_Default);
if (var == "LUBE_DISTANCE_RAIN")
return String(LubeConfig.DistancePerLube_Rain);
if (var == "TANK_CAPACITY")
return String(LubeConfig.tankCapacity_ml);
if (var == "AMOUNT_PER_DOSE")
return String(LubeConfig.amountPerDose_µl);
if (var == "TANK_REMIND")
return String(LubeConfig.TankRemindAtPercentage);
if (var == "PULSE_PER_REV")
return String(LubeConfig.PulsePerRevolution);
if (var == "TIRE_WIDTH_MM")
return String(LubeConfig.TireWidth_mm);
if (var == "TIRE_RATIO")
return String(LubeConfig.TireWidthHeight_Ratio);
if (var == "RIM_DIAMETER")
return String(LubeConfig.RimDiameter_Inch);
if (var == "DISTANCE_PER_REV")
return String(LubeConfig.DistancePerRevolution_mm);
if (var == "BLEEDING_PULSES")
return String(LubeConfig.BleedingPulses);
if (var == "SPEED_SOURCE")
return String(SpeedSourceString[LubeConfig.SpeedSource]);
if (var == "GPS_BAUD")
return String(GPSBaudRateString[LubeConfig.GPSBaudRate]);
#if PCB_REVISION == 13
if (var == "CAN_SOURCE")
return String(CANSourceString[LubeConfig.CANSource]);
#endif
if (var == "CONFIG_CHECKSUM")
2022-03-08 21:23:52 +01:00
{
char buffer[7];
sprintf(buffer, "0x%04X", LubeConfig.checksum);
return String(buffer);
}
2022-02-15 20:58:32 +01:00
if (var == "WRITE_CYCLE_COUNT")
return String(PersistenceData.writeCycleCounter);
if (var == "TANK_REMAIN_UL")
return String(PersistenceData.tankRemain_µl);
if (var == "TRAVEL_DISTANCE_HIGHRES")
return String(PersistenceData.TravelDistance_highRes);
if (var == "PERSISTANCE_CHECKSUM")
2022-03-08 21:23:52 +01:00
{
char buffer[7];
sprintf(buffer, "0x%04X", PersistenceData.checksum);
return String(buffer);
}
2022-02-15 20:58:32 +01:00
if (var == "SHOW_IMPULSE_SETTINGS")
return LubeConfig.SpeedSource == SOURCE_IMPULSE ? "" : "hidden";
if (var == "SHOW_CAN_SETTINGS")
return LubeConfig.SpeedSource == SOURCE_CAN ? "" : "hidden";
if (var == "SHOW_GPS_SETTINGS")
return LubeConfig.SpeedSource == SOURCE_GPS ? "" : "hidden";
if (var == "SOURCE_SELECT_OPTIONS")
{
String temp;
for (uint32_t i = 0; i < SpeedSourceString_Elements; i++)
2022-02-27 22:23:58 +01:00
{
String selected = LubeConfig.SpeedSource == i ? " selected " : "";
temp = temp + "<option value=\"" + i + "\"" + selected + ">" + SpeedSourceString[i] + "</option>";
}
2022-02-15 20:58:32 +01:00
return temp;
}
if (var == "CANSOURCE_SELECT_OPTIONS")
{
String temp;
for (uint32_t i = 0; i < CANSourceString_Elements; i++)
2022-02-27 22:23:58 +01:00
{
String selected = LubeConfig.CANSource == i ? " selected " : "";
temp = temp + "<option value=\"" + i + "\"" + selected + ">" + CANSourceString[i] + "</option>";
}
2022-02-15 20:58:32 +01:00
return temp;
}
if (var == "GPSBAUD_SELECT_OPTIONS")
{
String temp;
for (uint32_t i = 0; i < GPSBaudRateString_Elements; i++)
2022-02-27 22:23:58 +01:00
{
String selected = LubeConfig.GPSBaudRate == i ? " selected " : "";
temp = temp + "<option value=\"" + i + "\"" + selected + ">" + GPSBaudRateString[i] + "</option>";
}
2022-02-15 20:58:32 +01:00
return temp;
}
2022-01-09 20:51:16 +01:00
2022-02-17 09:17:16 +01:00
if (var == "SYSTEM_STATUS")
return String(globals.systemStatustxt);
if (var == "PLACEHOLDER")
return "placeholder";
2022-01-09 20:51:16 +01:00
return String();
}
2022-02-15 20:58:32 +01:00
void Webserver_Callback(AsyncWebServerRequest *request)
{
2022-03-08 22:31:37 +01:00
request->send(LittleFS, "/index.htm", "text/html", false, processor);
2022-02-15 20:58:32 +01:00
}
void WebserverPOST_Callback(AsyncWebServerRequest *request)
{
2022-03-08 22:31:37 +01:00
request->send(LittleFS, "/post.htm", "text/html", false, processor);
2022-02-27 22:23:58 +01:00
Serial.print("POST:\n");
int paramsNr = request->params();
for (int i = 0; i < paramsNr; i++)
{
2022-02-27 22:23:58 +01:00
AsyncWebParameter *p = request->getParam(i);
Serial.printf("%s : %s\n", p->name().c_str(), p->value().c_str());
2022-03-08 21:23:52 +01:00
// begin: POST Form Source Changed
if (p->name() == "sourceselect")
{
SpeedSource_t temp = (SpeedSource_t)p->value().toInt();
Serial.printf("temp: %d", temp);
Serial.printf("SpeedSource: %d", LubeConfig.SpeedSource);
if (LubeConfig.SpeedSource != temp)
{
LubeConfig.SpeedSource = temp;
globals.systemStatus = sysStat_Shutdown;
}
}
// end: POST Form Source Changed
// begin: POST Form Source Pulse Settings
if (p->name() == "tirewidth")
LubeConfig.TireWidth_mm = p->value().toInt();
if (p->name() == "tireratio")
LubeConfig.TireWidthHeight_Ratio = p->value().toInt();
if (p->name() == "tiredia")
LubeConfig.RimDiameter_Inch = p->value().toInt();
if (p->name() == "pulserev")
LubeConfig.PulsePerRevolution = p->value().toInt();
if (p->name() == "pulsesave")
globals.requestEEAction = EE_CFG_SAVE;
// end: POST Form Source Pulse Settings
// begin: POST Form Source GPS Settings
if (p->name() == "gpsbaud")
LubeConfig.GPSBaudRate = (GPSBaudRate_t)p->value().toInt();
if (p->name() == "gpssave")
globals.requestEEAction = EE_CFG_SAVE;
// end: POST Form Source GPS Settings
// begin: POST Form Source CAN Settings
if (p->name() == "cansource")
LubeConfig.CANSource = (CANSource_t)p->value().toInt();
if (p->name() == "cansave")
globals.requestEEAction = EE_CFG_SAVE;
// end: POST Form Source CAN Settings
2022-03-08 22:31:37 +01:00
// begin: POST Form Lubrication
if (p->name() == "lubedistancenormal")
LubeConfig.DistancePerLube_Default = p->value().toInt();
if (p->name() == "lubedistancerain")
LubeConfig.DistancePerLube_Rain = p->value().toInt();
if (p->name() == "lubesave")
globals.requestEEAction = EE_CFG_SAVE;
// end: POST Form Lubrication
// begin: POST Form Oiltank
if (p->name() == "tankcap")
LubeConfig.tankCapacity_ml = p->value().toInt();
if (p->name() == "tankwarn")
LubeConfig.TankRemindAtPercentage = p->value().toInt();
if (p->name() == "pumppulse")
LubeConfig.amountPerDose_µl = p->value().toInt();
if (p->name() == "oilsave")
globals.requestEEAction = EE_CFG_SAVE;
// end: POST Form Oiltank
// begin: POST Form Maintenance
if (p->name() == "purgepulse")
LubeConfig.BleedingPulses = p->value().toInt();
if (p->name() == "maintsave")
globals.requestEEAction = EE_CFG_SAVE;
if (p->name() == "resettank")
{
PersistenceData.tankRemain_µl = LubeConfig.tankCapacity_ml * 1000;
globals.requestEEAction = EE_PDS_SAVE;
}
// end: POST Form Maintenance
2022-03-08 21:23:52 +01:00
}
2022-01-08 03:14:26 +01:00
}
2022-01-12 01:10:21 +01:00
void WebserverNotFound_Callback(AsyncWebServerRequest *request)
2022-01-12 01:10:21 +01:00
{
2022-03-08 22:31:37 +01:00
request->send(404, "text/html", "Not found");
2022-01-12 01:10:21 +01:00
}