new debugger and websockets

This commit is contained in:
2023-02-23 23:14:58 +01:00
parent c9a6e4c870
commit 77a94de2eb
14 changed files with 516 additions and 283 deletions

View File

@@ -13,11 +13,20 @@ void WebserverEERestore_Callback(AsyncWebServerRequest *request, const String &f
void WebServerEEJSON_Callback(AsyncWebServerRequest *request);
void GetFlashVersion(char *buff, size_t buff_size);
#ifdef FEATURE_ENABLE_WEBSOCKETS
AsyncWebSocket webSocket("/ws");
void WebsocketEvent_Callback(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len);
void Websocket_HandleMessage(void *arg, uint8_t *data, size_t len);
#endif
void initWebUI()
{
if (!LittleFS.begin())
{
Serial.println("An Error has occurred while mounting LittleFS");
Debug_pushMessage("An Error has occurred while mounting LittleFS\n");
MaintainDTC(DTC_FLASHFS_ERROR, DTC_CRITICAL, true);
return;
}
@@ -33,6 +42,11 @@ void initWebUI()
MDNS.addService("telnet", "tcp", 23);
MDNS.addService("http", "tcp", 80);
#ifdef FEATURE_ENABLE_WEBSOCKETS
webSocket.onEvent(WebsocketEvent_Callback);
webServer.addHandler(&webSocket);
#endif
webServer.serveStatic("/static/", LittleFS, "/static/").setCacheControl("max-age=360000");
webServer.on("/", HTTP_GET, [](AsyncWebServerRequest *request)
{ request->redirect("/index.htm"); });
@@ -48,6 +62,13 @@ void initWebUI()
webServer.begin();
}
void Webserver_Process()
{
#ifdef FEATURE_ENABLE_WEBSOCKETS
webSocket.cleanupClients();
#endif
}
String processor(const String &var)
{
if (var == "TANK_REMAIN_CAPACITY")
@@ -241,14 +262,14 @@ void WebserverPOST_Callback(AsyncWebServerRequest *request)
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());
Debug_pushMessage("%s : %s\n", p->name().c_str(), p->value().c_str());
// 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);
Debug_pushMessage("temp: %d", temp);
Debug_pushMessage("SpeedSource: %d", LubeConfig.SpeedSource);
if (LubeConfig.SpeedSource != temp)
{
LubeConfig.SpeedSource = temp;
@@ -332,7 +353,7 @@ void WebserverPOST_Callback(AsyncWebServerRequest *request)
globals.systemStatus = sysStat_Purge;
globals.purgePulses = LubeConfig.BleedingPulses;
}
if(p->name() == "reboot")
if (p->name() == "reboot")
{
globals.systemStatus = sysStat_Shutdown;
}
@@ -367,7 +388,7 @@ void WebserverFirmwareUpdate_Callback(AsyncWebServerRequest *request, const Stri
if (!index)
{
Serial.println("Update");
Debug_pushMessage("Update");
size_t content_len = request->contentLength();
int cmd = (filename.indexOf(".fs") > -1) ? U_FS : U_FLASH;
Update.runAsync(true);
@@ -383,7 +404,7 @@ void WebserverFirmwareUpdate_Callback(AsyncWebServerRequest *request, const Stri
}
else
{
Serial.printf("Progress: %d%%\n", (Update.progress() * 100) / Update.size());
Debug_pushMessage("Progress: %d%%\n", (Update.progress() * 100) / Update.size());
}
if (final)
@@ -398,8 +419,7 @@ void WebserverFirmwareUpdate_Callback(AsyncWebServerRequest *request, const Stri
}
else
{
Serial.println("Update complete");
Serial.flush();
Debug_pushMessage("Update complete\n");
globals.systemStatus = sysStat_Shutdown;
}
}
@@ -413,14 +433,14 @@ void WebserverEERestore_Callback(AsyncWebServerRequest *request, const String &f
if (!index)
{
Serial.println("EEPROM restore");
//size_t content_len = request->contentLength();
Debug_pushMessage("EEPROM restore\n");
// size_t content_len = request->contentLength();
validext = (filename.indexOf(".ee.json") > -1);
}
if (validext)
{
Serial.println("Restoring EEPROM-Stuff");
Debug_pushMessage("Restoring EEPROM-Stuff\n");
}
if (final)
@@ -431,8 +451,7 @@ void WebserverEERestore_Callback(AsyncWebServerRequest *request, const String &f
request->send(response);
if (ee_done)
{
Serial.println("Update complete");
Serial.flush();
Debug_pushMessage("Update complete");
globals.systemStatus = sysStat_Shutdown;
}
else
@@ -500,4 +519,56 @@ void WebServerEEJSON_Callback(AsyncWebServerRequest *request)
response->addHeader("Content-disposition", "attachment; filename=backup.ee.json");
request->send(response);
}
}
#ifdef FEATURE_ENABLE_WEBSOCKETS
void WebsocketEvent_Callback(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len)
{
switch (type)
{
case WS_EVT_CONNECT:
Debug_pushMessage("WebSocket client #%u connected from %s\n", client->id(), client->remoteIP().toString().c_str());
break;
case WS_EVT_DISCONNECT:
Debug_pushMessage("WebSocket client #%u disconnected\n", client->id());
break;
case WS_EVT_DATA:
Websocket_HandleMessage(arg, data, len);
break;
case WS_EVT_PONG:
case WS_EVT_ERROR:
break;
}
}
void Websocket_HandleMessage(void *arg, uint8_t *data, size_t len)
{
AwsFrameInfo *info = (AwsFrameInfo *)arg;
if (info->final && info->index == 0 && info->len == len && info->opcode == WS_TEXT)
{
data[len] = 0;
Debug_pushMessage("Got WebSocket Message: %s \n", (char *)data);
if (strcmp((char *)data, "start") == 0)
{
Debug_pushMessage("Got WebSocket Message 'start' from client\n");
debugger.webui_live_debug_enabled = true;
}
else if (strcmp((char *)data, "stop") == 0)
{
Debug_pushMessage("Got WebSocket Message 'stop' from client\n");
debugger.webui_live_debug_enabled = false;
}
else if (strcmp((char *)data, "foo") == 0)
{
Debug_pushMessage("Got WebSocket Message 'foo' from client\n");
}
}
}
void Websocket_PushLiveDebug(String Message)
{
webSocket.textAll(Message + "\n");
}
#endif