From cc4a23f6df6676c82ec76d5eee6366d6ef747f2e Mon Sep 17 00:00:00 2001 From: Marcel Peterkau Date: Thu, 10 Feb 2022 22:33:52 +0100 Subject: [PATCH] Starting to replace ESPUI-Lib due to OOM-Issues --- Software/ChainLube/data/css/style.css | 0 Software/ChainLube/data/index.htm | 12 ++ Software/ChainLube/platformio.ini | 4 +- Software/ChainLube/src/webui.cpp | 211 +++++--------------------- Software/ChainLube/src/webui.h | 5 +- 5 files changed, 57 insertions(+), 175 deletions(-) create mode 100644 Software/ChainLube/data/css/style.css create mode 100644 Software/ChainLube/data/index.htm diff --git a/Software/ChainLube/data/css/style.css b/Software/ChainLube/data/css/style.css new file mode 100644 index 0000000..e69de29 diff --git a/Software/ChainLube/data/index.htm b/Software/ChainLube/data/index.htm new file mode 100644 index 0000000..193dbc4 --- /dev/null +++ b/Software/ChainLube/data/index.htm @@ -0,0 +1,12 @@ + + + + + KTM CAN Chain Oiler + + + + + + + diff --git a/Software/ChainLube/platformio.ini b/Software/ChainLube/platformio.ini index 76a4cc6..4285b0e 100644 --- a/Software/ChainLube/platformio.ini +++ b/Software/ChainLube/platformio.ini @@ -27,6 +27,7 @@ upload_speed = 921600 build_flags = !python git_rev_macro.py -DWIFI_CLIENT + -DREMOTE_DEBUG -DWIFI_SSID=${wifi_cred.wifi_ssid} -DWIFI_PASSWORD=${wifi_cred.wifi_password} -DADMIN_PASSWORD=${wifi_cred.admin_password} @@ -39,14 +40,13 @@ board_build.filesystem = littlefs monitor_filters = esp8266_exception_decoder monitor_speed = 115200 -board_build.ldscript = eagle.flash.4m.ld +board_build.ldscript = eagle.flash.4m1m.ld lib_ldf_mode = deep lib_deps = olikraus/U8g2 @ ^2.28.8 joaolopesf/RemoteDebug @ ^2.1.2 fastled/FastLED @ ^3.5.0 sstaub/Ticker @ ^4.2.0 - s00500/ESPUI @ ^2.0.0 coryjfowler/mcp_can @ ^1.5.0 robtillaart/I2C_EEPROM @ ^1.5.2 plerup/EspSoftwareSerial @ ^6.15.2 diff --git a/Software/ChainLube/src/webui.cpp b/Software/ChainLube/src/webui.cpp index 1e5ba22..563071b 100644 --- a/Software/ChainLube/src/webui.cpp +++ b/Software/ChainLube/src/webui.cpp @@ -1,190 +1,57 @@ #include "webui.h" -uint16_t tab_lube; -uint16_t tab_wheel; -uint16_t tab_tank; -uint16_t tab_maintenance; -uint16_t tab_store; +AsyncWebServer webServer(80); -uint16_t num_lubedist_normal; -uint16_t num_lubedist_rain; -uint16_t button_lubedist; +const char *PARAM_MESSAGE = "message"; -uint16_t option_speedsource; -uint16_t button_changeSource; - -uint16_t num_wheel_width; -uint16_t num_wheel_ratio; -uint16_t num_wheel_rim; -uint16_t button_wheelcalc; -uint16_t num_wheel_ppr; -uint16_t num_wheel_dist; - -uint16_t option_gps_baudrate; - -uint16_t option_can_source; - -uint16_t num_tank_capacity; -uint16_t num_tank_notify; -uint16_t num_dose_per_pulse; - -uint16_t label_tankRemain; -uint16_t button_reset_tank; -uint16_t num_purge_pulses; -uint16_t button_purge; - -uint16_t button_store; -uint16_t button_reload; -uint16_t label_storeStatus; - -void SettingChanged_Callback(Control *sender, int type) -{ - if (sender->id == num_lubedist_normal) - LubeConfig.DistancePerLube_Default = ESPUI.getControl(num_lubedist_normal)->value.toInt(); - else if (sender->id == num_lubedist_rain) - LubeConfig.DistancePerLube_Rain = ESPUI.getControl(num_lubedist_rain)->value.toInt(); - else if (sender->id == num_wheel_width) - LubeConfig.TireWidth_mm = ESPUI.getControl(num_wheel_width)->value.toInt(); - else if (sender->id == num_wheel_ratio) - LubeConfig.TireWidthHeight_Ratio = ESPUI.getControl(num_wheel_ratio)->value.toInt(); - else if (sender->id == num_wheel_rim) - LubeConfig.RimDiameter_Inch = ESPUI.getControl(num_wheel_rim)->value.toInt(); - else if (sender->id == num_wheel_ppr) - LubeConfig.PulsePerRevolution = ESPUI.getControl(num_wheel_ppr)->value.toInt(); - else if (sender->id == num_wheel_dist) - LubeConfig.DistancePerRevolution_mm = ESPUI.getControl(num_wheel_dist)->value.toInt(); - else if (sender->id == num_tank_capacity) - LubeConfig.tankCapacity_ml = ESPUI.getControl(num_tank_capacity)->value.toInt(); - else if (sender->id == num_tank_notify) - LubeConfig.TankRemindAtPercentage = ESPUI.getControl(num_tank_notify)->value.toInt(); - else if (sender->id == num_dose_per_pulse) - LubeConfig.amountPerDose_µl = ESPUI.getControl(num_dose_per_pulse)->value.toInt(); - else if (sender->id == num_purge_pulses) - LubeConfig.BleedingPulses = ESPUI.getControl(num_purge_pulses)->value.toInt(); - else if (sender->id == option_gps_baudrate) - LubeConfig.GPSBaudRate = (GPSBaudRate_t)ESPUI.getControl(option_gps_baudrate)->value.toInt(); -} - -void buttons_Callback(Control *sender, int type) -{ - if (type != B_UP) - return; - - if (sender->id == button_wheelcalc) - { - LubeConfig.TireWidth_mm = ESPUI.getControl(num_wheel_width)->value.toInt(); - LubeConfig.RimDiameter_Inch = ESPUI.getControl(num_wheel_rim)->value.toInt(); - LubeConfig.TireWidthHeight_Ratio = ESPUI.getControl(num_wheel_ratio)->value.toInt(); - LubeConfig.DistancePerRevolution_mm = (uint32_t)((((((float)LubeConfig.TireWidthHeight_Ratio / 100.0) * (float)LubeConfig.TireWidth_mm) * 2.0) + ((float)LubeConfig.RimDiameter_Inch * 25.4)) * 3.1416); - ESPUI.updateControlValue(num_wheel_dist, String(LubeConfig.DistancePerRevolution_mm)); - } - - if (sender->id == button_reset_tank) - { - PersistenceData.tankRemain_µl = LubeConfig.tankCapacity_ml * 1000; - ESPUI.print(label_tankRemain, String(PersistenceData.tankRemain_µl / 1000)); - } - - if (sender->id == button_purge) - { - Serial.printf("Starting to Purge with %d pulses", LubeConfig.BleedingPulses); - globals.purgePulses = LubeConfig.BleedingPulses; - globals.resumeStatus = globals.systemStatus; - globals.systemStatus = sysStat_Purge; - } - - if (sender->id == button_store) - { - globals.requestEEAction = EE_CFG_SAVE; - ESPUI.print(label_storeStatus, "Successfully Stored Settings"); - } - - if (sender->id == button_reload) - { - globals.requestEEAction = EE_CFG_LOAD; - ESPUI.print(label_storeStatus, "Successfully Reloaded Settings"); - } -} - -void speedSourceSelect_callback(Control *sender, int type) -{ - if (sender->id == option_speedsource) - { - LubeConfig.SpeedSource = (SpeedSource_t)ESPUI.getControl(option_speedsource)->value.toInt(); - Serial.printf("LubeConfig.SpeedSource: %d", LubeConfig.SpeedSource); - } - - if (sender->id == button_changeSource) - { - globals.systemStatus = sysStat_Shutdown; - } -} +String processor(const String &var); +void WebserverPost_Callback(AsyncWebServerRequest *request); +void WebserverNotFound_Callback(AsyncWebServerRequest *request); void initWebUI() { - tab_lube = ESPUI.addControl(ControlType::Tab, "Dosierung", "Dosierung"); - tab_wheel = ESPUI.addControl(ControlType::Tab, "Erfassung", "Erfassung"); - tab_tank = ESPUI.addControl(ControlType::Tab, "Tank", "Tank"); - tab_maintenance = ESPUI.addControl(ControlType::Tab, "Wartung", "Wartung"); - tab_store = ESPUI.addControl(ControlType::Tab, "Speichern", "Speichern"); - - num_lubedist_normal = ESPUI.addControl(ControlType::Number, "Öl-Impuls alle x Meter (Normal)", String(LubeConfig.DistancePerLube_Default), ControlColor::Emerald, tab_lube, &SettingChanged_Callback); - num_lubedist_rain = ESPUI.addControl(ControlType::Number, "Öl-Impuls alle x Meter (Regen)", String(LubeConfig.DistancePerLube_Rain), ControlColor::Emerald, tab_lube, &SettingChanged_Callback); - - option_speedsource = ESPUI.addControl(ControlType::Select, "Geschwindigkeit Quelle", "", ControlColor::Wetasphalt, tab_wheel, &speedSourceSelect_callback); - button_changeSource = ESPUI.addControl(ControlType::Button, "neue Quelle übernehmen. ACHTUNG: Gerät startet neu!", "Übernehmen", ControlColor::Wetasphalt, tab_wheel, &speedSourceSelect_callback); - for (int i = 0; i < (int)SpeedSourceString_Elements; i++) + if (!LittleFS.begin()) { - ESPUI.addControl(ControlType::Option, SpeedSourceString[i], String(i), ControlColor::Wetasphalt, option_speedsource); + Serial.println("An Error has occurred while mounting LittleFS"); + return; } - switch (LubeConfig.SpeedSource) - { - case SOURCE_IMPULSE: - num_wheel_width = ESPUI.addControl(ControlType::Number, "Reifenbreite (mm)", String(LubeConfig.TireWidth_mm), ControlColor::Peterriver, tab_wheel, &SettingChanged_Callback); - num_wheel_ratio = ESPUI.addControl(ControlType::Number, "Höhe/Breite-Verhältniss", String(LubeConfig.TireWidthHeight_Ratio), ControlColor::Peterriver, tab_wheel, &SettingChanged_Callback); - num_wheel_rim = ESPUI.addControl(ControlType::Number, "Felgendurchmesser (Zoll)", String(LubeConfig.RimDiameter_Inch), ControlColor::Peterriver, tab_wheel, &SettingChanged_Callback); - button_wheelcalc = ESPUI.addControl(ControlType::Button, "Abrollumfang aus Reifendaten berechnen", "Berechnen", ControlColor::Peterriver, tab_wheel, &buttons_Callback); - num_wheel_dist = ESPUI.addControl(ControlType::Number, "Wegstrecke pro Radumdrehung (mm)", String(LubeConfig.DistancePerRevolution_mm), ControlColor::Peterriver, tab_wheel, &SettingChanged_Callback); - num_wheel_ppr = ESPUI.addControl(ControlType::Number, "Sensorimpulse pro Umdrehung", String(LubeConfig.PulsePerRevolution), ControlColor::Peterriver, tab_wheel, &SettingChanged_Callback); - break; - case SOURCE_GPS: - option_gps_baudrate = ESPUI.addControl(ControlType::Select, "Baudrate GPS-Modul", "", ControlColor::Peterriver, tab_wheel, &SettingChanged_Callback); - for (uint32_t i = 0; i < (uint32_t)GPSBaudRateString_Elements; i++) - { - ESPUI.addControl(ControlType::Option, GPSBaudRateString[i], String(i), ControlColor::Peterriver, option_gps_baudrate); - } - break; -#if PCB_REVISION >= 13 - case SOURCE_CAN: - option_can_source = ESPUI.addControl(ControlType::Select, "CAN-Bus Quelle", "", ControlColor::Peterriver, tab_wheel, &SettingChanged_Callback); - for (int i = 0; i < CANSourceString_Elements; i++) - { - ESPUI.addControl(ControlType::Option, CANSourceString[i], String(i), ControlColor::Peterriver, option_can_source); - } - break; -#endif - case SOURCE_TIME: - break; - } + // Route to load style.css file + webServer.serveStatic("/", LittleFS, "/").setDefaultFile("index.htm"); + webServer.onNotFound(WebserverNotFound_Callback); - num_tank_capacity = ESPUI.addControl(ControlType::Number, "Tankinhalt maximal (ml)", String(LubeConfig.tankCapacity_ml), ControlColor::Carrot, tab_tank, &SettingChanged_Callback); - num_tank_notify = ESPUI.addControl(ControlType::Number, "Tankinhalt Warnung (%)", String(LubeConfig.TankRemindAtPercentage), ControlColor::Carrot, tab_tank, &SettingChanged_Callback); - num_dose_per_pulse = ESPUI.addControl(ControlType::Number, "Menge pro Pumpenimpuls (µl)", String(LubeConfig.amountPerDose_µl), ControlColor::Carrot, tab_tank, &SettingChanged_Callback); - label_tankRemain = ESPUI.addControl(ControlType::Label, "Tankinhalt verbleibend (ml, geschätzt)", String(PersistenceData.tankRemain_µl / 1000), ControlColor::Carrot, tab_tank); - button_reset_tank = ESPUI.addControl(ControlType::Button, "Tankinhalt zurücksetzen", "Reset", ControlColor::Carrot, tab_tank, &buttons_Callback); + webServer.on("/index.htm", HTTP_GET, [](AsyncWebServerRequest *request) + { request->send(LittleFS, "/index.htm", String(), false, processor); }); - num_purge_pulses = ESPUI.addControl(ControlType::Number, "Entlüftung Impulse", String(LubeConfig.BleedingPulses), ControlColor::Alizarin, tab_maintenance, &SettingChanged_Callback); - button_purge = ESPUI.addControl(ControlType::Button, "Leitung Entlüften", "Start", ControlColor::Alizarin, tab_maintenance, &buttons_Callback); + webServer.on("/", HTTP_POST, WebserverPost_Callback); - button_store = ESPUI.addControl(ControlType::Button, "Einstellungen permanent speichern", "Speichern", ControlColor::Turquoise, tab_store, &buttons_Callback); - button_reload = ESPUI.addControl(ControlType::Button, "Einstellungen neu laden", "Laden", ControlColor::Turquoise, tab_store, &buttons_Callback); - label_storeStatus = ESPUI.addControl(ControlType::Label, "Status", "", ControlColor::Turquoise, tab_store); - - ESPUI.begin("KTM CAN-ChainLube"); + webServer.begin(); } void UpdateWebUI() { - ESPUI.print(label_tankRemain, String(PersistenceData.tankRemain_µl / 1000) + " ml"); +} + +String processor(const String &var) +{ + + if (var == "PLACEHOLDER") + return "placeholder"; + + return String(); +} + +void WebserverPost_Callback(AsyncWebServerRequest *request) +{ + String message; + if (request->hasParam(PARAM_MESSAGE, true)) + { + message = request->getParam(PARAM_MESSAGE, true)->value(); + Serial.printf("POST: %s", message); + } +} + +void WebserverNotFound_Callback(AsyncWebServerRequest *request) +{ + request->send(404, "text/plain", "Not found"); } \ No newline at end of file diff --git a/Software/ChainLube/src/webui.h b/Software/ChainLube/src/webui.h index d7a950f..f7530b2 100644 --- a/Software/ChainLube/src/webui.h +++ b/Software/ChainLube/src/webui.h @@ -2,7 +2,10 @@ #define _WEBUI_H_ #include -#include +#include +#include +#include +#include #include "config.h" #include "globals.h"